aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/help/docsettingspage.cpp
diff options
context:
space:
mode:
authorkh1 <[email protected]>2010-03-16 15:48:09 +0100
committerkh1 <[email protected]>2010-03-16 15:54:41 +0100
commit33574581017c0c310f4ad010a6e7adea825993b9 (patch)
treeea94d9466a3f17e1cc581ce6c50eac9c20a9cee4 /src/plugins/help/docsettingspage.cpp
parent37871bc43cd79db68a297add2d9b84aa1bce2552 (diff)
Some more refactoring, reuse existing code.
Reuse the core help engine in the settings pages. Do not setup the gui help engine at all since any getter will do so. Split update documentation into smaller pieces for better performance. Reviewed-by: ck
Diffstat (limited to 'src/plugins/help/docsettingspage.cpp')
-rw-r--r--src/plugins/help/docsettingspage.cpp108
1 files changed, 63 insertions, 45 deletions
diff --git a/src/plugins/help/docsettingspage.cpp b/src/plugins/help/docsettingspage.cpp
index 22714a21267..0a5a603c039 100644
--- a/src/plugins/help/docsettingspage.cpp
+++ b/src/plugins/help/docsettingspage.cpp
@@ -29,6 +29,7 @@
#include "docsettingspage.h"
#include "helpconstants.h"
+#include "helpmanager.h"
#include <QtCore/QCoreApplication>
@@ -36,13 +37,11 @@
#include <QtGui/QKeyEvent>
#include <QtGui/QMessageBox>
-#include <QtHelp/QHelpEngine>
+#include <QtHelp/QHelpEngineCore>
using namespace Help::Internal;
-DocSettingsPage::DocSettingsPage(QHelpEngine *helpEngine)
- : m_helpEngine(helpEngine),
- m_registeredDocs(false)
+DocSettingsPage::DocSettingsPage()
{
}
@@ -68,46 +67,55 @@ QString DocSettingsPage::displayCategory() const
QWidget *DocSettingsPage::createPage(QWidget *parent)
{
- QWidget *w = new QWidget(parent);
- m_ui.setupUi(w);
+ QWidget *widget = new QWidget(parent);
+ m_ui.setupUi(widget);
- connect(m_ui.addButton, SIGNAL(clicked()),
- this, SLOT(addDocumentation()));
- connect(m_ui.removeButton, SIGNAL(clicked()),
- this, SLOT(removeDocumentation()));
+ connect(m_ui.addButton, SIGNAL(clicked()), this, SLOT(addDocumentation()));
+ connect(m_ui.removeButton, SIGNAL(clicked()), this, SLOT(removeDocumentation()));
m_ui.docsListWidget->installEventFilter(this);
- m_ui.docsListWidget->addItems(m_helpEngine->registeredDocumentations());
- m_registeredDocs = false;
- m_removeDocs.clear();
+
+ QHelpEngineCore *engine = &HelpManager::helpEngineCore();
+ const QStringList &nameSpaces = engine->registeredDocumentations();
+ foreach (const QString &nameSpace, nameSpaces)
+ addItem(nameSpace, engine->documentationFileName(nameSpace));
+
+ m_filesToRegister.clear();
+ m_filesToUnregister.clear();
+
if (m_searchKeywords.isEmpty())
m_searchKeywords = m_ui.groupBox->title();
- return w;
+ return widget;
}
void DocSettingsPage::addDocumentation()
{
- QStringList files = QFileDialog::getOpenFileNames(m_ui.addButton->parentWidget(),
- tr("Add Documentation"),
- QString(), tr("Qt Help Files (*.qch)"));
+ const QStringList &files =
+ QFileDialog::getOpenFileNames(m_ui.addButton->parentWidget(),
+ tr("Add Documentation"), m_recentDialogPath, tr("Qt Help Files (*.qch)"));
if (files.isEmpty())
return;
+ m_recentDialogPath = QFileInfo(files.first()).canonicalPath();
+
+ const QHelpEngineCore &engine = HelpManager::helpEngineCore();
+ const QStringList &nameSpaces = engine.registeredDocumentations();
foreach (const QString &file, files) {
- QString nsName = QHelpEngineCore::namespaceName(file);
- if (nsName.isEmpty()) {
- QMessageBox::warning(m_ui.addButton->parentWidget(),
- tr("Add Documentation"),
- tr("The file %1 is not a valid Qt Help file!")
- .arg(file));
+ const QString &nameSpace = engine.namespaceName(file);
+ if (nameSpace.isEmpty())
continue;
+
+ if (m_filesToUnregister.value(nameSpace) != QDir::cleanPath(file)) {
+ if (!m_filesToRegister.contains(nameSpace) && !nameSpaces.contains(nameSpace)) {
+ addItem(nameSpace, file);
+ m_filesToRegister.insert(nameSpace, QDir::cleanPath(file));
+ }
+ } else {
+ addItem(nameSpace, file);
+ m_filesToUnregister.remove(nameSpace);
}
- m_helpEngine->registerDocumentation(file);
- m_ui.docsListWidget->addItem(nsName);
}
- m_registeredDocs = true;
- emit documentationAdded();
}
void DocSettingsPage::removeDocumentation()
@@ -118,6 +126,10 @@ void DocSettingsPage::removeDocumentation()
void DocSettingsPage::apply()
{
emit dialogAccepted();
+ emit documentationChanged();
+
+ m_filesToRegister.clear();
+ m_filesToUnregister.clear();
}
bool DocSettingsPage::matches(const QString &s) const
@@ -125,25 +137,14 @@ bool DocSettingsPage::matches(const QString &s) const
return m_searchKeywords.contains(s, Qt::CaseInsensitive);
}
-bool DocSettingsPage::applyChanges()
+QStringList DocSettingsPage::docsToRegister() const
{
- QStringList::const_iterator it = m_removeDocs.constBegin();
- while (it != m_removeDocs.constEnd()) {
- if (!m_helpEngine->unregisterDocumentation((*it))) {
- QMessageBox::warning(m_ui.addButton->parentWidget(),
- tr("Documentation"),
- tr("Cannot unregister documentation file %1!")
- .arg((*it)));
- }
- ++it;
- }
-
- bool success = m_registeredDocs || m_removeDocs.count();
-
- m_removeDocs.clear();
- m_registeredDocs = false;
+ return m_filesToRegister.values();
+}
- return success;
+QStringList DocSettingsPage::docsToUnregister() const
+{
+ return m_filesToUnregister.keys();
}
bool DocSettingsPage::eventFilter(QObject *object, QEvent *event)
@@ -170,8 +171,18 @@ void DocSettingsPage::removeDocumentation(const QList<QListWidgetItem*> items)
return;
int row = 0;
+ QHelpEngineCore *engine = &HelpManager::helpEngineCore();
foreach (QListWidgetItem* item, items) {
- m_removeDocs.append(item->text());
+ const QString &nameSpace = item->text();
+ const QString &docPath = engine->documentationFileName(nameSpace);
+
+ if (m_filesToRegister.value(nameSpace) != docPath) {
+ if (!m_filesToUnregister.contains(nameSpace))
+ m_filesToUnregister.insert(nameSpace, docPath);
+ } else {
+ m_filesToRegister.remove(nameSpace);
+ }
+
row = m_ui.docsListWidget->row(item);
delete m_ui.docsListWidget->takeItem(row);
}
@@ -179,3 +190,10 @@ void DocSettingsPage::removeDocumentation(const QList<QListWidgetItem*> items)
m_ui.docsListWidget->setCurrentRow(qMax(row - 1, 0),
QItemSelectionModel::ClearAndSelect);
}
+
+void DocSettingsPage::addItem(const QString &nameSpace, const QString &fileName)
+{
+ QListWidgetItem* item = new QListWidgetItem(nameSpace);
+ item->setToolTip(fileName);
+ m_ui.docsListWidget->addItem(item);
+}