summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@qt.io>2019-02-18 17:29:43 +0100
committerJarek Kobus <jaroslaw.kobus@qt.io>2019-03-01 09:21:24 +0000
commitd0ac28e41b53f69a7d9fe89994a04fcb436c6e99 (patch)
treede76e57d194d21adf8ca40845f3393cde318e065
parente1f65ee2174fa54d3a1d5f40c2a3c5831ba96f1b (diff)
downloadqttools-d0ac28e41b53f69a7d9fe89994a04fcb436c6e99.tar.gz
Enhance filtering by documentation version number
Make it possible to filter the documentation by version number. This easily allows for showing the docs for one or more specified versions inside a custom filter. Task-number: QTCREATORBUG-19724 Task-number: QTCREATORBUG-7301 Change-Id: Ia0bc63666ab8152e43ffb6a6b6b99610e30575f7 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
-rw-r--r--src/assistant/assistant/assistant_images.qrc4
-rw-r--r--src/assistant/assistant/images/mac/minus.pngbin0 -> 488 bytes
-rw-r--r--src/assistant/assistant/images/mac/plus.pngbin0 -> 810 bytes
-rw-r--r--src/assistant/assistant/images/win/minus.pngbin0 -> 429 bytes
-rw-r--r--src/assistant/assistant/images/win/plus.pngbin0 -> 709 bytes
-rw-r--r--src/assistant/assistant/preferencesdialog.cpp84
-rw-r--r--src/assistant/assistant/preferencesdialog.h11
-rw-r--r--src/assistant/assistant/preferencesdialog.ui30
-rw-r--r--src/assistant/help/qhelpcollectionhandler.cpp98
-rw-r--r--src/assistant/help/qhelpcollectionhandler_p.h2
-rw-r--r--src/assistant/help/qhelpfilterdata.cpp33
-rw-r--r--src/assistant/help/qhelpfilterdata.h3
-rw-r--r--src/assistant/help/qhelpfilterengine.cpp11
-rw-r--r--src/assistant/help/qhelpfilterengine.h1
14 files changed, 239 insertions, 38 deletions
diff --git a/src/assistant/assistant/assistant_images.qrc b/src/assistant/assistant/assistant_images.qrc
index 948de970f..e55b6b27e 100644
--- a/src/assistant/assistant/assistant_images.qrc
+++ b/src/assistant/assistant/assistant_images.qrc
@@ -10,7 +10,9 @@
<file>images/mac/editcopy.png</file>
<file>images/mac/find.png</file>
<file>images/mac/home.png</file>
+ <file>images/mac/minus.png</file>
<file>images/mac/next.png</file>
+ <file>images/mac/plus.png</file>
<file>images/mac/previous.png</file>
<file>images/mac/print.png</file>
<file>images/mac/synctoc.png</file>
@@ -23,7 +25,9 @@
<file>images/win/editcopy.png</file>
<file>images/win/find.png</file>
<file>images/win/home.png</file>
+ <file>images/win/minus.png</file>
<file>images/win/next.png</file>
+ <file>images/win/plus.png</file>
<file>images/win/previous.png</file>
<file>images/win/print.png</file>
<file>images/win/synctoc.png</file>
diff --git a/src/assistant/assistant/images/mac/minus.png b/src/assistant/assistant/images/mac/minus.png
new file mode 100644
index 000000000..8d2eaed52
--- /dev/null
+++ b/src/assistant/assistant/images/mac/minus.png
Binary files differ
diff --git a/src/assistant/assistant/images/mac/plus.png b/src/assistant/assistant/images/mac/plus.png
new file mode 100644
index 000000000..1ee45423e
--- /dev/null
+++ b/src/assistant/assistant/images/mac/plus.png
Binary files differ
diff --git a/src/assistant/assistant/images/win/minus.png b/src/assistant/assistant/images/win/minus.png
new file mode 100644
index 000000000..c0dc274bb
--- /dev/null
+++ b/src/assistant/assistant/images/win/minus.png
Binary files differ
diff --git a/src/assistant/assistant/images/win/plus.png b/src/assistant/assistant/images/win/plus.png
new file mode 100644
index 000000000..ecf058941
--- /dev/null
+++ b/src/assistant/assistant/images/win/plus.png
Binary files differ
diff --git a/src/assistant/assistant/preferencesdialog.cpp b/src/assistant/assistant/preferencesdialog.cpp
index 803bc61ed..967dfba32 100644
--- a/src/assistant/assistant/preferencesdialog.cpp
+++ b/src/assistant/assistant/preferencesdialog.cpp
@@ -57,6 +57,16 @@ PreferencesDialog::PreferencesDialog(QWidget *parent)
{
m_ui.setupUi(this);
+ QString resourcePath = QLatin1String(":/qt-project.org/assistant/images/");
+#ifdef Q_OS_MACOS
+ resourcePath.append(QLatin1String("mac"));
+#else
+ resourcePath.append(QLatin1String("win"));
+#endif
+
+ m_ui.filterAddButton->setIcon(QIcon(resourcePath + QLatin1String("/plus.png")));
+ m_ui.filterRemoveButton->setIcon(QIcon(resourcePath + QLatin1String("/minus.png")));
+
// TODO: filter docs via lineedit
connect(m_ui.buttonBox->button(QDialogButtonBox::Ok), &QAbstractButton::clicked,
@@ -85,6 +95,8 @@ PreferencesDialog::PreferencesDialog(QWidget *parent)
} else {
connect(m_ui.componentWidget, &OptionsWidget::optionSelectionChanged,
this, &PreferencesDialog::componentsChanged);
+ connect(m_ui.versionWidget, &OptionsWidget::optionSelectionChanged,
+ this, &PreferencesDialog::versionsChanged);
connect(m_ui.filterWidget, &QListWidget::currentItemChanged,
this, &PreferencesDialog::filterSelected);
connect(m_ui.filterWidget, &QListWidget::itemDoubleClicked,
@@ -138,6 +150,7 @@ FilterSetup PreferencesDialog::readOriginalSetup() const
FilterSetup filterSetup;
filterSetup.m_namespaceToComponent = helpEngine.filterEngine()->namespaceToComponent();
+ filterSetup.m_namespaceToVersion = helpEngine.filterEngine()->namespaceToVersion();
for (auto it = filterSetup.m_namespaceToComponent.constBegin();
it != filterSetup.m_namespaceToComponent.constEnd(); ++it) {
const QString namespaceName = it.key();
@@ -146,9 +159,16 @@ FilterSetup PreferencesDialog::readOriginalSetup() const
filterSetup.m_fileNameToNamespace.insert(namespaceFileName, namespaceName);
filterSetup.m_componentToNamespace[it.value()].append(namespaceName);
}
+ for (auto it = filterSetup.m_namespaceToVersion.constBegin();
+ it != filterSetup.m_namespaceToVersion.constEnd(); ++it) {
+ filterSetup.m_versionToNamespace[it.value()].append(it.key());
+ }
+
const QStringList allFilters = helpEngine.filterEngine()->filters();
for (const QString &filter : allFilters)
- filterSetup.m_filterToComponents.insert(filter, helpEngine.filterEngine()->filterData(filter).components());
+ filterSetup.m_filterToData.insert(filter, helpEngine.filterEngine()->filterData(filter));
+
+ filterSetup.m_currentFilter = helpEngine.filterEngine()->activeFilter();
return filterSetup;
}
@@ -164,16 +184,19 @@ void PreferencesDialog::updateFilterPage()
if (m_hideFiltersTab)
return;
- const QString &currentFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
+ QString currentFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
+ if (currentFilter.isEmpty())
+ currentFilter = m_currentSetup.m_currentFilter;
m_currentSetup = m_originalSetup;
m_ui.filterWidget->clear();
m_ui.componentWidget->clear();
+ m_ui.versionWidget->clear();
m_itemToFilter.clear();
m_filterToItem.clear();
- for (const QString &filterName : m_currentSetup.m_filterToComponents.keys()) {
+ for (const QString &filterName : m_currentSetup.m_filterToData.keys()) {
QListWidgetItem *item = new QListWidgetItem(filterName);
m_ui.filterWidget->addItem(item);
m_itemToFilter.insert(item, filterName);
@@ -197,11 +220,14 @@ void PreferencesDialog::updateCurrentFilter()
const bool filterSelected = !currentFilter.isEmpty();
m_ui.componentWidget->setEnabled(filterSelected);
+ m_ui.versionWidget->setEnabled(filterSelected);
m_ui.filterRenameButton->setEnabled(filterSelected);
m_ui.filterRemoveButton->setEnabled(filterSelected);
m_ui.componentWidget->setOptions(m_currentSetup.m_componentToNamespace.keys(),
- m_currentSetup.m_filterToComponents.value(currentFilter));
+ m_currentSetup.m_filterToData.value(currentFilter).components());
+ m_ui.versionWidget->setOptions(m_currentSetup.m_versionToNamespace.keys(),
+ m_currentSetup.m_filterToData.value(currentFilter).versions());
}
void PreferencesDialog::updateDocumentationPage()
@@ -234,7 +260,16 @@ void PreferencesDialog::componentsChanged(const QStringList &components)
if (currentFilter.isEmpty())
return;
- m_currentSetup.m_filterToComponents[currentFilter] = components;
+ m_currentSetup.m_filterToData[currentFilter].setComponents(components);
+}
+
+void PreferencesDialog::versionsChanged(const QStringList &versions)
+{
+ const QString &currentFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
+ if (currentFilter.isEmpty())
+ return;
+
+ m_currentSetup.m_filterToData[currentFilter].setVersions(versions);
}
QString PreferencesDialog::suggestedNewFilterName(const QString &initialFilterName) const
@@ -284,7 +319,7 @@ void PreferencesDialog::addFilterClicked()
if (newFilterName.isEmpty())
return;
- addFilter(newFilterName, QStringList());
+ addFilter(newFilterName);
}
void PreferencesDialog::renameFilterClicked()
@@ -297,9 +332,9 @@ void PreferencesDialog::renameFilterClicked()
if (newFilterName.isEmpty())
return;
- const QStringList oldComponents = m_currentSetup.m_filterToComponents.value(currentFilter);
+ const QHelpFilterData oldFilterData = m_currentSetup.m_filterToData.value(currentFilter);
removeFilter(currentFilter);
- addFilter(newFilterName, oldComponents);
+ addFilter(newFilterName, oldFilterData);
}
void PreferencesDialog::removeFilterClicked()
@@ -319,10 +354,11 @@ void PreferencesDialog::removeFilterClicked()
removeFilter(currentFilter);
}
-void PreferencesDialog::addFilter(const QString &filterName, const QStringList &components)
+void PreferencesDialog::addFilter(const QString &filterName,
+ const QHelpFilterData &filterData)
{
QListWidgetItem *item = new QListWidgetItem(filterName);
- m_currentSetup.m_filterToComponents.insert(filterName, components);
+ m_currentSetup.m_filterToData.insert(filterName, filterData);
m_filterToItem.insert(filterName, item);
m_itemToFilter.insert(item, filterName);
m_ui.filterWidget->insertItem(m_filterToItem.keys().indexOf(filterName), item);
@@ -338,7 +374,7 @@ void PreferencesDialog::removeFilter(const QString &filterName)
m_filterToItem.remove(filterName);
delete item;
- m_currentSetup.m_filterToComponents.remove(filterName);
+ m_currentSetup.m_filterToData.remove(filterName);
}
void PreferencesDialog::addDocumentation()
@@ -361,12 +397,17 @@ void PreferencesDialog::addDocumentation()
continue;
const QString component = details.component();
+ const QString version = details.version();
+
m_currentSetup.m_namespaceToFileName.insert(namespaceName, fileName);
m_currentSetup.m_fileNameToNamespace.insert(fileName, namespaceName);
m_currentSetup.m_namespaceToComponent.insert(namespaceName, component);
m_currentSetup.m_componentToNamespace[component].append(namespaceName);
+ m_currentSetup.m_namespaceToVersion.insert(namespaceName, version);
+ m_currentSetup.m_versionToNamespace[version].append(namespaceName);
+
QListWidgetItem *item = new QListWidgetItem(namespaceName);
m_namespaceToItem.insert(namespaceName, item);
m_itemToNamespace.insert(item, namespaceName);
@@ -393,12 +434,17 @@ void PreferencesDialog::removeDocumentation()
const QString fileName = m_currentSetup.m_namespaceToFileName.value(namespaceName);
const QString component = m_currentSetup.m_namespaceToComponent.value(namespaceName);
+ const QString version = m_currentSetup.m_namespaceToVersion.value(namespaceName);
m_currentSetup.m_namespaceToComponent.remove(namespaceName);
+ m_currentSetup.m_namespaceToVersion.remove(namespaceName);
m_currentSetup.m_namespaceToFileName.remove(namespaceName);
m_currentSetup.m_fileNameToNamespace.remove(fileName);
m_currentSetup.m_componentToNamespace[component].removeOne(namespaceName);
if (m_currentSetup.m_componentToNamespace[component].isEmpty())
m_currentSetup.m_componentToNamespace.remove(component);
+ m_currentSetup.m_versionToNamespace[version].removeOne(namespaceName);
+ if (m_currentSetup.m_versionToNamespace[version].isEmpty())
+ m_currentSetup.m_versionToNamespace.remove(version);
}
updateCurrentFilter();
@@ -457,12 +503,12 @@ void PreferencesDialog::applyChanges()
changed = true;
}
- const QMap<QString, QStringList> filtersToRemove = subtract(
- m_originalSetup.m_filterToComponents,
- m_currentSetup.m_filterToComponents);
- const QMap<QString, QStringList> filtersToAdd = subtract(
- m_currentSetup.m_filterToComponents,
- m_originalSetup.m_filterToComponents);
+ const QMap<QString, QHelpFilterData> filtersToRemove = subtract(
+ m_originalSetup.m_filterToData,
+ m_currentSetup.m_filterToData);
+ const QMap<QString, QHelpFilterData> filtersToAdd = subtract(
+ m_currentSetup.m_filterToData,
+ m_originalSetup.m_filterToData);
const QString &currentFilter = helpEngine.filterEngine()->activeFilter();
@@ -474,9 +520,7 @@ void PreferencesDialog::applyChanges()
}
for (auto it = filtersToAdd.cbegin(); it != filtersToAdd.cend(); ++it) {
- QHelpFilterData data;
- data.setComponents(it.value());
- helpEngine.filterEngine()->setFilterData(it.key(), data);
+ helpEngine.filterEngine()->setFilterData(it.key(), it.value());
changed = true;
}
diff --git a/src/assistant/assistant/preferencesdialog.h b/src/assistant/assistant/preferencesdialog.h
index 1e45d9b6d..17ffb5add 100644
--- a/src/assistant/assistant/preferencesdialog.h
+++ b/src/assistant/assistant/preferencesdialog.h
@@ -30,6 +30,7 @@
#define PREFERENCESDIALOG_H
#include <QtWidgets/QDialog>
+#include <QtHelp/QHelpFilterData>
#include "ui_preferencesdialog.h"
QT_BEGIN_NAMESPACE
@@ -42,10 +43,14 @@ struct FilterSetup {
QMap<QString, QString> m_namespaceToComponent;
QMap<QString, QStringList> m_componentToNamespace;
+ QMap<QString, QString> m_namespaceToVersion;
+ QMap<QString, QStringList> m_versionToNamespace;
+
QMap<QString, QString> m_namespaceToFileName;
QMap<QString, QString> m_fileNameToNamespace;
- QMap<QString, QStringList> m_filterToComponents;
+ QMap<QString, QHelpFilterData> m_filterToData;
+ QString m_currentFilter;
};
class PreferencesDialog : public QDialog
@@ -61,10 +66,12 @@ public:
private slots:
void filterSelected(QListWidgetItem *item);
void componentsChanged(const QStringList &components);
+ void versionsChanged(const QStringList &versions);
void addFilterClicked();
void renameFilterClicked();
void removeFilterClicked();
- void addFilter(const QString &filterName, const QStringList &components);
+ void addFilter(const QString &filterName,
+ const QHelpFilterData &filterData = QHelpFilterData());
void removeFilter(const QString &filterName);
void addDocumentation();
void removeDocumentation();
diff --git a/src/assistant/assistant/preferencesdialog.ui b/src/assistant/assistant/preferencesdialog.ui
index 70a90dd74..68dbf68e2 100644
--- a/src/assistant/assistant/preferencesdialog.ui
+++ b/src/assistant/assistant/preferencesdialog.ui
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>378</width>
+ <width>395</width>
<height>341</height>
</rect>
</property>
@@ -70,15 +70,8 @@
<string>Filters</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_2">
- <item row="0" column="0">
- <widget class="QLabel" name="label">
- <property name="text">
- <string>Filter:</string>
- </property>
- </widget>
- </item>
<item row="0" column="3">
- <widget class="QLabel" name="label_2">
+ <widget class="QLabel" name="componentsLabel">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
@@ -87,12 +80,22 @@
</property>
</widget>
</item>
+ <item row="0" column="4">
+ <widget class="QLabel" name="versionsLabel">
+ <property name="text">
+ <string>Versions:</string>
+ </property>
+ </widget>
+ </item>
<item row="1" column="0" colspan="3">
<widget class="QListWidget" name="filterWidget"/>
</item>
- <item row="1" column="3">
+ <item row="1" column="3" rowspan="2">
<widget class="OptionsWidget" name="componentWidget" native="true"/>
</item>
+ <item row="1" column="4" rowspan="2">
+ <widget class="OptionsWidget" name="versionWidget" native="true"/>
+ </item>
<item row="2" column="0">
<widget class="QToolButton" name="filterAddButton">
<property name="text">
@@ -114,6 +117,13 @@
</property>
</widget>
</item>
+ <item row="0" column="0" colspan="3">
+ <widget class="QLabel" name="filterLabel">
+ <property name="text">
+ <string>Filter:</string>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
<widget class="QWidget" name="docsTab">
diff --git a/src/assistant/help/qhelpcollectionhandler.cpp b/src/assistant/help/qhelpcollectionhandler.cpp
index 756861c1a..375edd8d3 100644
--- a/src/assistant/help/qhelpcollectionhandler.cpp
+++ b/src/assistant/help/qhelpcollectionhandler.cpp
@@ -188,7 +188,8 @@ bool QHelpCollectionHandler::openCollectionFile()
QLatin1String("Filter"),
QLatin1String("ComponentTable"),
QLatin1String("ComponentMapping"),
- QLatin1String("ComponentFilter")
+ QLatin1String("ComponentFilter"),
+ QLatin1String("VersionFilter")
};
QString queryString = QLatin1String("SELECT COUNT(*) "
@@ -486,6 +487,7 @@ bool QHelpCollectionHandler::recreateIndexAndNamespaceFilterTables(QSqlQuery *qu
<< QLatin1String("DROP TABLE IF EXISTS ComponentTable")
<< QLatin1String("DROP TABLE IF EXISTS ComponentMapping")
<< QLatin1String("DROP TABLE IF EXISTS ComponentFilter")
+ << QLatin1String("DROP TABLE IF EXISTS VersionFilter")
<< QLatin1String("CREATE TABLE FileNameTable ("
"FolderId INTEGER, "
"Name TEXT, "
@@ -538,6 +540,9 @@ bool QHelpCollectionHandler::recreateIndexAndNamespaceFilterTables(QSqlQuery *qu
"NamespaceId INTEGER)")
<< QLatin1String("CREATE TABLE ComponentFilter ("
"ComponentName TEXT, "
+ "FilterId INTEGER)")
+ << QLatin1String("CREATE TABLE VersionFilter ("
+ "Version TEXT, "
"FilterId INTEGER)");
for (const QString &q : tables) {
@@ -581,6 +586,17 @@ QStringList QHelpCollectionHandler::availableComponents() const
return list;
}
+QStringList QHelpCollectionHandler::availableVersions() const
+{
+ QStringList list;
+ if (m_query) {
+ m_query->exec(QLatin1String("SELECT DISTINCT Version FROM VersionTable ORDER BY Version"));
+ while (m_query->next())
+ list.append(m_query->value(0).toString());
+ }
+ return list;
+}
+
QMap<QString, QString> QHelpCollectionHandler::namespaceToComponent() const
{
QMap<QString, QString> result;
@@ -599,9 +615,26 @@ QMap<QString, QString> QHelpCollectionHandler::namespaceToComponent() const
return result;
}
+QMap<QString, QString> QHelpCollectionHandler::namespaceToVersion() const
+{
+ QMap<QString, QString> result;
+ if (m_query) {
+ m_query->exec(QLatin1String("SELECT "
+ "NamespaceTable.Name, "
+ "VersionTable.Version "
+ "FROM NamespaceTable, "
+ "VersionTable "
+ "WHERE NamespaceTable.Id = VersionTable.NamespaceId"));
+ while (m_query->next())
+ result.insert(m_query->value(0).toString(), m_query->value(1).toString());
+ }
+ return result;
+}
+
QHelpFilterData QHelpCollectionHandler::filterData(const QString &filterName) const
{
QStringList components;
+ QStringList versions;
if (m_query) {
m_query->prepare(QLatin1String("SELECT ComponentFilter.ComponentName "
"FROM ComponentFilter, Filter "
@@ -612,9 +645,21 @@ QHelpFilterData QHelpCollectionHandler::filterData(const QString &filterName) co
m_query->exec();
while (m_query->next())
components.append(m_query->value(0).toString());
+
+ m_query->prepare(QLatin1String("SELECT VersionFilter.Version "
+ "FROM VersionFilter, Filter "
+ "WHERE VersionFilter.FilterId = Filter.FilterId "
+ "AND Filter.Name = ? "
+ "ORDER BY VersionFilter.Version"));
+ m_query->bindValue(0, filterName);
+ m_query->exec();
+ while (m_query->next())
+ versions.append(m_query->value(0).toString());
+
}
QHelpFilterData data;
data.setComponents(components);
+ data.setVersions(versions);
return data;
}
@@ -633,6 +678,7 @@ bool QHelpCollectionHandler::setFilterData(const QString &filterName,
const int filterId = m_query->lastInsertId().toInt();
QVariantList componentList;
+ QVariantList versionList;
QVariantList filterIdList;
for (const QString &component : filterData.components()) {
@@ -644,7 +690,23 @@ bool QHelpCollectionHandler::setFilterData(const QString &filterName,
"VALUES (?, ?)"));
m_query->addBindValue(componentList);
m_query->addBindValue(filterIdList);
- return m_query->execBatch();
+ if (!m_query->execBatch())
+ return false;
+
+ filterIdList.clear();
+ for (const QString &version : filterData.versions()) {
+ versionList.append(version);
+ filterIdList.append(filterId);
+ }
+
+ m_query->prepare(QLatin1String("INSERT INTO VersionFilter "
+ "VALUES (?, ?)"));
+ m_query->addBindValue(versionList);
+ m_query->addBindValue(filterIdList);
+ if (!m_query->execBatch())
+ return false;
+
+ return true;
}
bool QHelpCollectionHandler::removeFilter(const QString &filterName)
@@ -673,6 +735,12 @@ bool QHelpCollectionHandler::removeFilter(const QString &filterName)
if (!m_query->exec())
return false;
+ m_query->prepare(QLatin1String("DELETE FROM VersionFilter "
+ "WHERE VersionFilter.FilterId = ?"));
+ m_query->bindValue(0, filterId);
+ if (!m_query->exec())
+ return false;
+
return true;
}
@@ -955,7 +1023,8 @@ static QString prepareFilterQuery(const QString &filterName)
return QString();
return QString::fromLatin1(" AND EXISTS(SELECT * FROM Filter WHERE Filter.Name = ?) "
- "AND (NOT EXISTS("
+ "AND ("
+ "(NOT EXISTS(" // 1. filter by component
"SELECT * FROM "
"ComponentFilter, "
"Filter "
@@ -974,7 +1043,26 @@ static QString prepareFilterQuery(const QString &filterName)
"AND ComponentTable.ComponentId = ComponentMapping.ComponentId "
"AND ComponentTable.Name = ComponentFilter.ComponentName "
"AND ComponentFilter.FilterId = Filter.FilterId "
- "AND Filter.Name = ?)"
+ "AND Filter.Name = ?))"
+ " AND "
+ "(NOT EXISTS(" // 2. filter by version
+ "SELECT * FROM "
+ "VersionFilter, "
+ "Filter "
+ "WHERE VersionFilter.FilterId = Filter.FilterId "
+ "AND Filter.Name = ?) "
+ "OR NamespaceTable.Id IN ("
+ "SELECT "
+ "NamespaceTable.Id "
+ "FROM "
+ "NamespaceTable, "
+ "VersionFilter, "
+ "VersionTable, "
+ "Filter "
+ "WHERE VersionFilter.FilterId = Filter.FilterId "
+ "AND VersionFilter.Version = VersionTable.Version "
+ "AND VersionTable.NamespaceId = NamespaceTable.Id "
+ "AND Filter.Name = ?))"
")");
}
@@ -986,6 +1074,8 @@ static void bindFilterQuery(QSqlQuery *query, int bindStart, const QString &filt
query->bindValue(bindStart, filterName);
query->bindValue(bindStart + 1, filterName);
query->bindValue(bindStart + 2, filterName);
+ query->bindValue(bindStart + 3, filterName);
+ query->bindValue(bindStart + 4, filterName);
}
static QString prepareFilterQuery(int attributesCount,
diff --git a/src/assistant/help/qhelpcollectionhandler_p.h b/src/assistant/help/qhelpcollectionhandler_p.h
index 940e69e48..c52498f4e 100644
--- a/src/assistant/help/qhelpcollectionhandler_p.h
+++ b/src/assistant/help/qhelpcollectionhandler_p.h
@@ -157,7 +157,9 @@ public:
QStringList filters() const;
QStringList availableComponents() const;
+ QStringList availableVersions() const;
QMap<QString, QString> namespaceToComponent() const;
+ QMap<QString, QString> namespaceToVersion() const;
QHelpFilterData filterData(const QString &filterName) const;
bool setFilterData(const QString &filterName, const QHelpFilterData &filterData);
bool removeFilter(const QString &filterName);
diff --git a/src/assistant/help/qhelpfilterdata.cpp b/src/assistant/help/qhelpfilterdata.cpp
index a2c1f0ea8..6f072f9aa 100644
--- a/src/assistant/help/qhelpfilterdata.cpp
+++ b/src/assistant/help/qhelpfilterdata.cpp
@@ -48,10 +48,12 @@ public:
QHelpFilterDataPrivate(const QHelpFilterDataPrivate &other)
: QSharedData(other)
, m_components(other.m_components)
+ , m_versions(other.m_versions)
{ }
~QHelpFilterDataPrivate() = default;
QStringList m_components;
+ QStringList m_versions;
};
/*!
@@ -63,6 +65,8 @@ public:
By using setComponents() you may constrain the search results to
documents that belong only to components specified on the given list.
+ By using setVersions() you may constrain the search results to
+ documents that belong only to versions specified on the given list.
\sa QHelpFilterEngine
*/
@@ -103,10 +107,16 @@ QHelpFilterData &QHelpFilterData::operator=(const QHelpFilterData &) = default;
*/
QHelpFilterData &QHelpFilterData::operator=(QHelpFilterData &&) = default;
+bool QHelpFilterData::operator==(const QHelpFilterData &other) const
+{
+ return (d->m_components == other.d->m_components &&
+ d->m_versions == other.d->m_versions);
+}
+
/*!
Specifies the component list that is used for filtering
- the search results. Only the results which match the \a components
- will be returned.
+ the search results. Only results from components in the list
+ \a components shall be returned.
*/
void QHelpFilterData::setComponents(const QStringList &components)
{
@@ -114,6 +124,16 @@ void QHelpFilterData::setComponents(const QStringList &components)
}
/*!
+ Specifies the version list that is used for filtering
+ the search results. Only results from versions in the list
+ \a versions shall be returned.
+*/
+void QHelpFilterData::setVersions(const QStringList &versions)
+{
+ d->m_versions = versions;
+}
+
+/*!
Returns the component list that is used for filtering
the search results.
*/
@@ -122,4 +142,13 @@ QStringList QHelpFilterData::components() const
return d->m_components;
}
+/*!
+ Returns the version list that is used for filtering
+ the search results.
+*/
+QStringList QHelpFilterData::versions() const
+{
+ return d->m_versions;
+}
+
QT_END_NAMESPACE
diff --git a/src/assistant/help/qhelpfilterdata.h b/src/assistant/help/qhelpfilterdata.h
index 089eb0059..b2a38c087 100644
--- a/src/assistant/help/qhelpfilterdata.h
+++ b/src/assistant/help/qhelpfilterdata.h
@@ -58,10 +58,13 @@ public:
QHelpFilterData &operator=(const QHelpFilterData &other);
QHelpFilterData &operator=(QHelpFilterData &&other);
+ bool operator==(const QHelpFilterData &other) const;
void setComponents(const QStringList &components);
+ void setVersions(const QStringList &versions);
QStringList components() const;
+ QStringList versions() const;
private:
QSharedDataPointer<QHelpFilterDataPrivate> d;
};
diff --git a/src/assistant/help/qhelpfilterengine.cpp b/src/assistant/help/qhelpfilterengine.cpp
index 6a57e1cdc..6e5942f87 100644
--- a/src/assistant/help/qhelpfilterengine.cpp
+++ b/src/assistant/help/qhelpfilterengine.cpp
@@ -170,6 +170,17 @@ QMap<QString, QString> QHelpFilterEngine::namespaceToComponent() const
}
/*!
+ Returns the map of all the available namespaces as keys
+ together with their associated versions as values.
+*/
+QMap<QString, QString> QHelpFilterEngine::namespaceToVersion() const
+{
+ if (!d->setup())
+ return QMap<QString, QString>();
+ return d->m_collectionHandler->namespaceToVersion();
+}
+
+/*!
Returns the list of all filter names defined inside the filter engine.
*/
QStringList QHelpFilterEngine::filters() const
diff --git a/src/assistant/help/qhelpfilterengine.h b/src/assistant/help/qhelpfilterengine.h
index aac8597d7..3ed5f4e5d 100644
--- a/src/assistant/help/qhelpfilterengine.h
+++ b/src/assistant/help/qhelpfilterengine.h
@@ -59,6 +59,7 @@ class QHELP_EXPORT QHelpFilterEngine : public QObject
Q_OBJECT
public:
QMap<QString, QString> namespaceToComponent() const;
+ QMap<QString, QString> namespaceToVersion() const;
QStringList filters() const;