Help: Clean up automatically registered documentation

It would keep documentation registered as long as the files are still
there, but that is actually not what is wanted. If you remove a Qt
version from Qt Creator, or switch between different Qt Creator
installations with different auto-detected Qt versions, the registered
documentation should be updated.
This also reduces the number of open files in these cases.

We keep a list of manually added documentation in the settings and treat
all other documentation as automatically managed.

Change-Id: I542f9aee0e62cab70db5afc5c6d6764d84cb253d
Reviewed-by: Erik Verbruggen <erik.verbruggen@theqtcompany.com>
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@theqtcompany.com>
This commit is contained in:
Eike Ziller
2014-12-02 17:51:14 +01:00
parent a1f8be4471
commit 877d482c85
6 changed files with 89 additions and 43 deletions

View File

@@ -63,9 +63,13 @@ QWidget *DocSettingsPage::widget()
m_ui.docsListWidget->installEventFilter(this);
const QStringList nameSpaces = HelpManager::registeredNamespaces();
const QSet<QString> userDocumentationPaths = HelpManager::userDocumentationPaths();
foreach (const QString &nameSpace, nameSpaces) {
addItem(nameSpace, HelpManager::fileFromNamespace(nameSpace));
m_filesToRegister.insert(nameSpace, HelpManager::fileFromNamespace(nameSpace));
const QString filePath = HelpManager::fileFromNamespace(nameSpace);
bool user = userDocumentationPaths.contains(filePath);
addItem(nameSpace, filePath, user);
m_filesToRegister.insert(nameSpace, filePath);
m_filesToRegisterUserManaged.insert(nameSpace, user);
}
m_filesToUnregister.clear();
@@ -98,8 +102,9 @@ void DocSettingsPage::addDocumentation()
continue;
}
addItem(nameSpace, file);
addItem(nameSpace, file, true/*user managed*/);
m_filesToRegister.insert(nameSpace, QDir::toNativeSeparators(filePath));
m_filesToRegisterUserManaged.insert(nameSpace, true/*user managed*/);
// If the files to unregister contains the namespace, grab a copy of all paths added and try to
// remove the current file path. Afterwards remove the whole entry and add the clean list back.
@@ -150,7 +155,14 @@ void DocSettingsPage::removeDocumentation()
void DocSettingsPage::apply()
{
HelpManager::unregisterDocumentation(m_filesToUnregister.keys());
HelpManager::registerDocumentation(m_filesToRegister.values());
QStringList files;
auto it = m_filesToRegisterUserManaged.constBegin();
while (it != m_filesToRegisterUserManaged.constEnd()) {
if (it.value()/*userManaged*/)
files << m_filesToRegister.value(it.key());
++it;
}
HelpManager::registerUserDocumentation(files);
m_filesToUnregister.clear();
}
@@ -185,9 +197,10 @@ void DocSettingsPage::removeDocumentation(const QList<QListWidgetItem*> &items)
int row = 0;
foreach (QListWidgetItem* item, items) {
const QString nameSpace = item->text();
const QString nameSpace = item->data(Qt::UserRole).toString();
m_filesToRegister.remove(nameSpace);
m_filesToRegisterUserManaged.remove(nameSpace);
m_filesToUnregister.insertMulti(nameSpace, QDir::cleanPath(HelpManager::fileFromNamespace(nameSpace)));
row = m_ui.docsListWidget->row(item);
@@ -198,9 +211,11 @@ void DocSettingsPage::removeDocumentation(const QList<QListWidgetItem*> &items)
QItemSelectionModel::ClearAndSelect);
}
void DocSettingsPage::addItem(const QString &nameSpace, const QString &fileName)
void DocSettingsPage::addItem(const QString &nameSpace, const QString &fileName, bool userManaged)
{
QListWidgetItem* item = new QListWidgetItem(nameSpace);
const QString name = userManaged ? nameSpace : tr("%1 (auto-detected)").arg(nameSpace);
QListWidgetItem* item = new QListWidgetItem(name);
item->setToolTip(fileName);
item->setData(Qt::UserRole, nameSpace);
m_ui.docsListWidget->addItem(item);
}

View File

@@ -57,7 +57,7 @@ private slots:
private:
bool eventFilter(QObject *object, QEvent *event);
void removeDocumentation(const QList<QListWidgetItem *> &items);
void addItem(const QString &nameSpace, const QString &fileName);
void addItem(const QString &nameSpace, const QString &fileName, bool userManaged);
private:
Ui::DocSettingsPage m_ui;
@@ -67,6 +67,7 @@ private:
typedef QHash<QString, QString> NameSpaceToPathHash;
NameSpaceToPathHash m_filesToRegister;
QHash<QString, bool> m_filesToRegisterUserManaged;
NameSpaceToPathHash m_filesToUnregister;
};

View File

@@ -170,8 +170,6 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error)
SLOT(setupHelpEngineIfNeeded()));
connect(HelpManager::instance(), SIGNAL(collectionFileChanged()), this,
SLOT(setupHelpEngineIfNeeded()));
connect(HelpManager::instance(), SIGNAL(setupFinished()), this,
SLOT(unregisterOldQtCreatorDocumentation()));
Command *cmd;
QAction *action;
@@ -265,22 +263,6 @@ ExtensionSystem::IPlugin::ShutdownFlag HelpPlugin::aboutToShutdown()
return SynchronousShutdown;
}
void HelpPlugin::unregisterOldQtCreatorDocumentation()
{
const QString &nsInternal = QString::fromLatin1("org.qt-project.qtcreator.%1%2%3")
.arg(IDE_VERSION_MAJOR).arg(IDE_VERSION_MINOR).arg(IDE_VERSION_RELEASE);
QStringList documentationToUnregister;
foreach (const QString &ns, HelpManager::registeredNamespaces()) {
if (ns.startsWith(QLatin1String("org.qt-project.qtcreator."))
&& ns != nsInternal) {
documentationToUnregister << ns;
}
}
if (!documentationToUnregister.isEmpty())
HelpManager::unregisterDocumentation(documentationToUnregister);
}
void HelpPlugin::resetFilter()
{
const QString &filterInternal = QString::fromLatin1("Qt Creator %1.%2.%3")

View File

@@ -85,8 +85,6 @@ public:
static HelpViewer *createHelpViewer(qreal zoom);
private slots:
void unregisterOldQtCreatorDocumentation();
void modeChanged(Core::IMode *mode, Core::IMode *old);
void showContextHelp();