summaryrefslogtreecommitdiffstats
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)
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;