44 QHelpFilterSettings filterSettings;
46 const QStringList allFilters = filterEngine->filters();
47 for (
const QString &filter : allFilters)
48 filterSettings.setFilter(filter, filterEngine->filterData(filter));
50 filterSettings.setCurrentFilter(filterEngine->activeFilter());
51 return filterSettings;
55 const QMap<QString, QHelpFilterData> &subtrahend)
57 QMap<QString, QHelpFilterData> result = minuend;
59 for (
auto itSubtrahend = subtrahend.cbegin(); itSubtrahend != subtrahend.cend(); ++itSubtrahend) {
60 auto itResult = result.constFind(itSubtrahend.key());
61 if (itResult != result.constEnd() && itSubtrahend.value() == itResult.value())
62 result.erase(itResult);
72 const auto filtersToRemove = subtract(oldSettings.filters(), settings.filters());
73 const auto filtersToAdd = subtract(settings.filters(), oldSettings.filters());
75 const QString ¤tFilter = filterEngine->activeFilter();
77 for (
auto it = filtersToRemove.cbegin(); it != filtersToRemove.cend(); ++it) {
78 filterEngine->removeFilter(it.key());
79 if (currentFilter == it.key() && !filtersToAdd.contains(it.key()))
80 filterEngine->setActiveFilter({});
84 for (
auto it = filtersToAdd.cbegin(); it != filtersToAdd.cend(); ++it) {
85 filterEngine->setFilterData(it.key(), it.value());
90 filterEngine->setActiveFilter(settings.currentFilter());
142 QString currentFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
143 if (currentFilter.isEmpty()) {
144 if (!m_filterSettings.currentFilter().isEmpty())
145 currentFilter = m_filterSettings.currentFilter();
147 currentFilter = settings.currentFilter();
150 m_filterSettings = settings;
152 m_ui.filterWidget->clear();
153 m_ui.componentWidget->clear();
154 m_ui.versionWidget->clear();
155 m_itemToFilter.clear();
156 m_filterToItem.clear();
158 const auto filters = m_filterSettings.filters();
159 for (
auto it = filters.cbegin(); it != filters.cend(); ++it) {
160 const QString &filterName = it.key();
161 QListWidgetItem *item =
new QListWidgetItem(filterName);
162 m_ui.filterWidget->addItem(item);
163 m_itemToFilter.insert(item, filterName);
164 m_filterToItem.insert(filterName, item);
165 if (filterName == currentFilter)
166 m_ui.filterWidget->setCurrentItem(item);
169 if (!m_ui.filterWidget->currentItem() && !m_filterToItem.isEmpty())
170 m_ui.filterWidget->setCurrentItem(m_filterToItem.first());
177 const QString ¤tFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
179 const bool filterSelected = !currentFilter.isEmpty();
180 m_ui.componentWidget->setEnabled(filterSelected);
181 m_ui.versionWidget->setEnabled(filterSelected);
182 m_ui.renameButton->setEnabled(filterSelected);
183 m_ui.removeButton->setEnabled(filterSelected);
185 m_ui.componentWidget->setOptions(m_components,
186 m_filterSettings.filterData(currentFilter).components());
187 m_ui.versionWidget->setOptions(versionsToStringList(m_versions),
188 versionsToStringList(m_filterSettings.filterData(currentFilter).versions()));
193 const QString ¤tFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
194 if (currentFilter.isEmpty())
197 QHelpFilterData filterData = m_filterSettings.filterData(currentFilter);
198 filterData.setComponents(components);
199 m_filterSettings.setFilter(currentFilter, filterData);
204 const QString ¤tFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
205 if (currentFilter.isEmpty())
208 QHelpFilterData filterData = m_filterSettings.filterData(currentFilter);
209 filterData.setVersions(stringListToVersions(versions));
210 m_filterSettings.setFilter(currentFilter, filterData);
225 const QString ¤tFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
226 if (currentFilter.isEmpty())
229 const QString newFilterName = getUniqueFilterName(QHelpFilterSettingsWidget::tr(
"Rename Filter"), currentFilter);
230 if (newFilterName.isEmpty())
233 const QHelpFilterData oldFilterData = m_filterSettings.filterData(currentFilter);
234 removeFilter(currentFilter);
235 addFilter(newFilterName, oldFilterData);
237 if (m_filterSettings.currentFilter() == currentFilter)
238 m_filterSettings.setCurrentFilter(newFilterName);
243 Q_Q(QHelpFilterSettingsWidget);
245 const QString ¤tFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
246 if (currentFilter.isEmpty())
249 if (QMessageBox::question(q, QHelpFilterSettingsWidget::tr(
"Remove Filter"),
250 QHelpFilterSettingsWidget::tr(
"Are you sure you want to remove the \"%1\" filter?")
251 .arg(currentFilter), QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) {
255 removeFilter(currentFilter);
257 if (m_filterSettings.currentFilter() == currentFilter)
258 m_filterSettings.setCurrentFilter({});
262 const QHelpFilterData &filterData)
264 QListWidgetItem *item =
new QListWidgetItem(filterName);
265 m_filterSettings.setFilter(filterName, filterData);
266 m_filterToItem.insert(filterName, item);
267 m_itemToFilter.insert(item, filterName);
268 m_ui.filterWidget->insertItem(m_filterToItem.keys().indexOf(filterName), item);
270 m_ui.filterWidget->setCurrentItem(item);
284 const QString &initialFilterName)
286 Q_Q(QHelpFilterSettingsWidget);
288 QString newFilterName = initialFilterName;
290 QFilterNameDialog dialog(q);
291 dialog.setWindowTitle(windowTitle);
292 dialog.setFilterName(newFilterName);
293 if (dialog.exec() == QDialog::Rejected)
296 newFilterName = dialog.filterName();
297 if (!m_filterToItem.contains(newFilterName))
300 if (QMessageBox::warning(q, QHelpFilterSettingsWidget::tr(
"Filter Exists"),
301 QHelpFilterSettingsWidget::tr(
"The filter \"%1\" already exists.").arg(newFilterName),
302 QMessageBox::Retry | QMessageBox::Cancel) == QMessageBox::Cancel) {
306 return newFilterName;
341QHelpFilterSettingsWidget::QHelpFilterSettingsWidget(QWidget *parent)
343 , d_ptr(
new QHelpFilterSettingsWidgetPrivate())
345 Q_D(QHelpFilterSettingsWidget);
347 d->m_ui.setupUi(
this);
350 QString resourcePath =
":/qt-project.org/assistant/images/"_L1;
352 resourcePath.append(
"mac"_L1);
354 resourcePath.append(
"win"_L1);
356 d->m_ui.addButton->setIcon(QIcon(resourcePath +
"/plus.png"_L1));
357 d->m_ui.removeButton->setIcon(QIcon(resourcePath +
"/minus.png"_L1));
359 connect(d->m_ui.componentWidget, &QOptionsWidget::optionSelectionChanged,
360 this, [
this](
const QStringList &options) {
361 Q_D(QHelpFilterSettingsWidget);
362 d->componentsChanged(options);
364 connect(d->m_ui.versionWidget, &QOptionsWidget::optionSelectionChanged,
365 this, [
this](
const QStringList &options) {
366 Q_D(QHelpFilterSettingsWidget);
367 d->versionsChanged(options);
369 connect(d->m_ui.filterWidget, &QListWidget::currentItemChanged,
370 this, [
this](QListWidgetItem *) {
371 Q_D(QHelpFilterSettingsWidget);
372 d->updateCurrentFilter();
374 connect(d->m_ui.filterWidget, &QListWidget::itemDoubleClicked,
375 this, [
this](QListWidgetItem *) {
376 Q_D(QHelpFilterSettingsWidget);
377 d->renameFilterClicked();
381 connect(d->m_ui.addButton, &QAbstractButton::clicked,
this, [
this] {
382 Q_D(QHelpFilterSettingsWidget);
383 d->addFilterClicked();
385 connect(d->m_ui.renameButton, &QAbstractButton::clicked,
this, [
this] {
386 Q_D(QHelpFilterSettingsWidget);
387 d->renameFilterClicked();
389 connect(d->m_ui.removeButton, &QAbstractButton::clicked,
this, [
this] {
390 Q_D(QHelpFilterSettingsWidget);
391 d->removeFilterClicked();
394 d->m_ui.componentWidget->setNoOptionText(tr(
"No Component"));
395 d->m_ui.componentWidget->setInvalidOptionText(tr(
"Invalid Component"));
396 d->m_ui.versionWidget->setNoOptionText(tr(
"No Version"));
397 d->m_ui.versionWidget->setInvalidOptionText(tr(
"Invalid Version"));
420void QHelpFilterSettingsWidget::setAvailableVersions(
const QList<QVersionNumber> &versions)
422 Q_D(QHelpFilterSettingsWidget);
423 d->m_versions = versions;
424 d->updateCurrentFilter();
431void QHelpFilterSettingsWidget::readSettings(
const QHelpFilterEngine *filterEngine)
433 Q_D(QHelpFilterSettingsWidget);
434 const QHelpFilterSettings settings = readSettingsHelper(filterEngine);
435 d->setFilterSettings(settings);