43 QHelpFilterSettings filterSettings;
45 const QStringList allFilters = filterEngine->filters();
46 for (
const QString &filter : allFilters)
47 filterSettings.setFilter(filter, filterEngine->filterData(filter));
49 filterSettings.setCurrentFilter(filterEngine->activeFilter());
50 return filterSettings;
54 const QMap<QString, QHelpFilterData> &subtrahend)
56 QMap<QString, QHelpFilterData> result = minuend;
58 for (
auto itSubtrahend = subtrahend.cbegin(); itSubtrahend != subtrahend.cend(); ++itSubtrahend) {
59 auto itResult = result.find(itSubtrahend.key());
60 if (itResult != result.end() && itSubtrahend.value() == itResult.value())
61 result.erase(itResult);
71 const auto filtersToRemove = subtract(oldSettings.filters(), settings.filters());
72 const auto filtersToAdd = subtract(settings.filters(), oldSettings.filters());
74 const QString ¤tFilter = filterEngine->activeFilter();
76 for (
auto it = filtersToRemove.cbegin(); it != filtersToRemove.cend(); ++it) {
77 filterEngine->removeFilter(it.key());
78 if (currentFilter == it.key() && !filtersToAdd.contains(it.key()))
79 filterEngine->setActiveFilter({});
83 for (
auto it = filtersToAdd.cbegin(); it != filtersToAdd.cend(); ++it) {
84 filterEngine->setFilterData(it.key(), it.value());
89 filterEngine->setActiveFilter(settings.currentFilter());
141 QString currentFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
142 if (currentFilter.isEmpty()) {
143 if (!m_filterSettings.currentFilter().isEmpty())
144 currentFilter = m_filterSettings.currentFilter();
146 currentFilter = settings.currentFilter();
149 m_filterSettings = settings;
151 m_ui.filterWidget->clear();
152 m_ui.componentWidget->clear();
153 m_ui.versionWidget->clear();
154 m_itemToFilter.clear();
155 m_filterToItem.clear();
157 const auto filters = m_filterSettings.filters();
158 for (
auto it = filters.cbegin(); it != filters.cend(); ++it) {
159 const QString &filterName = it.key();
160 QListWidgetItem *item =
new QListWidgetItem(filterName);
161 m_ui.filterWidget->addItem(item);
162 m_itemToFilter.insert(item, filterName);
163 m_filterToItem.insert(filterName, item);
164 if (filterName == currentFilter)
165 m_ui.filterWidget->setCurrentItem(item);
168 if (!m_ui.filterWidget->currentItem() && !m_filterToItem.isEmpty())
169 m_ui.filterWidget->setCurrentItem(m_filterToItem.first());
176 const QString ¤tFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
178 const bool filterSelected = !currentFilter.isEmpty();
179 m_ui.componentWidget->setEnabled(filterSelected);
180 m_ui.versionWidget->setEnabled(filterSelected);
181 m_ui.renameButton->setEnabled(filterSelected);
182 m_ui.removeButton->setEnabled(filterSelected);
184 m_ui.componentWidget->setOptions(m_components,
185 m_filterSettings.filterData(currentFilter).components());
186 m_ui.versionWidget->setOptions(versionsToStringList(m_versions),
187 versionsToStringList(m_filterSettings.filterData(currentFilter).versions()));
192 const QString ¤tFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
193 if (currentFilter.isEmpty())
196 QHelpFilterData filterData = m_filterSettings.filterData(currentFilter);
197 filterData.setComponents(components);
198 m_filterSettings.setFilter(currentFilter, filterData);
203 const QString ¤tFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
204 if (currentFilter.isEmpty())
207 QHelpFilterData filterData = m_filterSettings.filterData(currentFilter);
208 filterData.setVersions(stringListToVersions(versions));
209 m_filterSettings.setFilter(currentFilter, filterData);
224 const QString ¤tFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
225 if (currentFilter.isEmpty())
228 const QString newFilterName = getUniqueFilterName(QHelpFilterSettingsWidget::tr(
"Rename Filter"), currentFilter);
229 if (newFilterName.isEmpty())
232 const QHelpFilterData oldFilterData = m_filterSettings.filterData(currentFilter);
233 removeFilter(currentFilter);
234 addFilter(newFilterName, oldFilterData);
236 if (m_filterSettings.currentFilter() == currentFilter)
237 m_filterSettings.setCurrentFilter(newFilterName);
242 Q_Q(QHelpFilterSettingsWidget);
244 const QString ¤tFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
245 if (currentFilter.isEmpty())
248 if (QMessageBox::question(q, QHelpFilterSettingsWidget::tr(
"Remove Filter"),
249 QHelpFilterSettingsWidget::tr(
"Are you sure you want to remove the \"%1\" filter?")
250 .arg(currentFilter), QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) {
254 removeFilter(currentFilter);
256 if (m_filterSettings.currentFilter() == currentFilter)
257 m_filterSettings.setCurrentFilter({});
261 const QHelpFilterData &filterData)
263 QListWidgetItem *item =
new QListWidgetItem(filterName);
264 m_filterSettings.setFilter(filterName, filterData);
265 m_filterToItem.insert(filterName, item);
266 m_itemToFilter.insert(item, filterName);
267 m_ui.filterWidget->insertItem(m_filterToItem.keys().indexOf(filterName), item);
269 m_ui.filterWidget->setCurrentItem(item);
283 const QString &initialFilterName)
285 Q_Q(QHelpFilterSettingsWidget);
287 QString newFilterName = initialFilterName;
289 QFilterNameDialog dialog(q);
290 dialog.setWindowTitle(windowTitle);
291 dialog.setFilterName(newFilterName);
292 if (dialog.exec() == QDialog::Rejected)
295 newFilterName = dialog.filterName();
296 if (!m_filterToItem.contains(newFilterName))
299 if (QMessageBox::warning(q, QHelpFilterSettingsWidget::tr(
"Filter Exists"),
300 QHelpFilterSettingsWidget::tr(
"The filter \"%1\" already exists.").arg(newFilterName),
301 QMessageBox::Retry | QMessageBox::Cancel) == QMessageBox::Cancel) {
305 return newFilterName;
340QHelpFilterSettingsWidget::QHelpFilterSettingsWidget(QWidget *parent)
342 , d_ptr(
new QHelpFilterSettingsWidgetPrivate())
344 Q_D(QHelpFilterSettingsWidget);
346 d->m_ui.setupUi(
this);
349 QString resourcePath =
":/qt-project.org/assistant/images/"_L1;
351 resourcePath.append(
"mac"_L1);
353 resourcePath.append(
"win"_L1);
355 d->m_ui.addButton->setIcon(QIcon(resourcePath +
"/plus.png"_L1));
356 d->m_ui.removeButton->setIcon(QIcon(resourcePath +
"/minus.png"_L1));
358 connect(d->m_ui.componentWidget, &QOptionsWidget::optionSelectionChanged,
359 this, [
this](
const QStringList &options) {
360 Q_D(QHelpFilterSettingsWidget);
361 d->componentsChanged(options);
363 connect(d->m_ui.versionWidget, &QOptionsWidget::optionSelectionChanged,
364 this, [
this](
const QStringList &options) {
365 Q_D(QHelpFilterSettingsWidget);
366 d->versionsChanged(options);
368 connect(d->m_ui.filterWidget, &QListWidget::currentItemChanged,
369 this, [
this](QListWidgetItem *) {
370 Q_D(QHelpFilterSettingsWidget);
371 d->updateCurrentFilter();
373 connect(d->m_ui.filterWidget, &QListWidget::itemDoubleClicked,
374 this, [
this](QListWidgetItem *) {
375 Q_D(QHelpFilterSettingsWidget);
376 d->renameFilterClicked();
380 connect(d->m_ui.addButton, &QAbstractButton::clicked,
this, [
this] {
381 Q_D(QHelpFilterSettingsWidget);
382 d->addFilterClicked();
384 connect(d->m_ui.renameButton, &QAbstractButton::clicked,
this, [
this] {
385 Q_D(QHelpFilterSettingsWidget);
386 d->renameFilterClicked();
388 connect(d->m_ui.removeButton, &QAbstractButton::clicked,
this, [
this] {
389 Q_D(QHelpFilterSettingsWidget);
390 d->removeFilterClicked();
393 d->m_ui.componentWidget->setNoOptionText(tr(
"No Component"));
394 d->m_ui.componentWidget->setInvalidOptionText(tr(
"Invalid Component"));
395 d->m_ui.versionWidget->setNoOptionText(tr(
"No Version"));
396 d->m_ui.versionWidget->setInvalidOptionText(tr(
"Invalid Version"));
419void QHelpFilterSettingsWidget::setAvailableVersions(
const QList<QVersionNumber> &versions)
421 Q_D(QHelpFilterSettingsWidget);
422 d->m_versions = versions;
423 d->updateCurrentFilter();
430void QHelpFilterSettingsWidget::readSettings(
const QHelpFilterEngine *filterEngine)
432 Q_D(QHelpFilterSettingsWidget);
433 const QHelpFilterSettings settings = readSettingsHelper(filterEngine);
434 d->setFilterSettings(settings);