diff options
author | kh1 <[email protected]> | 2010-03-16 15:48:09 +0100 |
---|---|---|
committer | kh1 <[email protected]> | 2010-03-16 15:54:41 +0100 |
commit | 33574581017c0c310f4ad010a6e7adea825993b9 (patch) | |
tree | ea94d9466a3f17e1cc581ce6c50eac9c20a9cee4 /src/plugins/help/docsettingspage.cpp | |
parent | 37871bc43cd79db68a297add2d9b84aa1bce2552 (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.cpp | 108 |
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); +} |