42 QHelpFilterSettings filterSettings;
44 const QStringList allFilters = filterEngine->filters();
45 for (
const QString &filter : allFilters)
46 filterSettings.setFilter(filter, filterEngine->filterData(filter));
48 filterSettings.setCurrentFilter(filterEngine->activeFilter());
49 return filterSettings;
53 const QMap<QString, QHelpFilterData> &subtrahend)
55 QMap<QString, QHelpFilterData> result = minuend;
57 for (
auto itSubtrahend = subtrahend.cbegin(); itSubtrahend != subtrahend.cend(); ++itSubtrahend) {
58 auto itResult = result.find(itSubtrahend.key());
59 if (itResult != result.end() && itSubtrahend.value() == itResult.value())
60 result.erase(itResult);
70 const auto filtersToRemove = subtract(oldSettings.filters(), settings.filters());
71 const auto filtersToAdd = subtract(settings.filters(), oldSettings.filters());
73 const QString ¤tFilter = filterEngine->activeFilter();
75 for (
auto it = filtersToRemove.cbegin(); it != filtersToRemove.cend(); ++it) {
76 filterEngine->removeFilter(it.key());
77 if (currentFilter == it.key() && !filtersToAdd.contains(it.key()))
78 filterEngine->setActiveFilter({});
82 for (
auto it = filtersToAdd.cbegin(); it != filtersToAdd.cend(); ++it) {
83 filterEngine->setFilterData(it.key(), it.value());
88 filterEngine->setActiveFilter(settings.currentFilter());
140 QString currentFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
141 if (currentFilter.isEmpty()) {
142 if (!m_filterSettings.currentFilter().isEmpty())
143 currentFilter = m_filterSettings.currentFilter();
145 currentFilter = settings.currentFilter();
148 m_filterSettings = settings;
150 m_ui.filterWidget->clear();
151 m_ui.componentWidget->clear();
152 m_ui.versionWidget->clear();
153 m_itemToFilter.clear();
154 m_filterToItem.clear();
156 const auto filters = m_filterSettings.filters();
157 for (
auto it = filters.cbegin(); it != filters.cend(); ++it) {
158 const QString &filterName = it.key();
159 QListWidgetItem *item =
new QListWidgetItem(filterName);
160 m_ui.filterWidget->addItem(item);
161 m_itemToFilter.insert(item, filterName);
162 m_filterToItem.insert(filterName, item);
163 if (filterName == currentFilter)
164 m_ui.filterWidget->setCurrentItem(item);
167 if (!m_ui.filterWidget->currentItem() && !m_filterToItem.isEmpty())
168 m_ui.filterWidget->setCurrentItem(m_filterToItem.first());
175 const QString ¤tFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
177 const bool filterSelected = !currentFilter.isEmpty();
178 m_ui.componentWidget->setEnabled(filterSelected);
179 m_ui.versionWidget->setEnabled(filterSelected);
180 m_ui.renameButton->setEnabled(filterSelected);
181 m_ui.removeButton->setEnabled(filterSelected);
183 m_ui.componentWidget->setOptions(m_components,
184 m_filterSettings.filterData(currentFilter).components());
185 m_ui.versionWidget->setOptions(versionsToStringList(m_versions),
186 versionsToStringList(m_filterSettings.filterData(currentFilter).versions()));
191 const QString ¤tFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
192 if (currentFilter.isEmpty())
195 QHelpFilterData filterData = m_filterSettings.filterData(currentFilter);
196 filterData.setComponents(components);
197 m_filterSettings.setFilter(currentFilter, filterData);
202 const QString ¤tFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
203 if (currentFilter.isEmpty())
206 QHelpFilterData filterData = m_filterSettings.filterData(currentFilter);
207 filterData.setVersions(stringListToVersions(versions));
208 m_filterSettings.setFilter(currentFilter, filterData);
223 const QString ¤tFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
224 if (currentFilter.isEmpty())
227 const QString newFilterName = getUniqueFilterName(QHelpFilterSettingsWidget::tr(
"Rename Filter"), currentFilter);
228 if (newFilterName.isEmpty())
231 const QHelpFilterData oldFilterData = m_filterSettings.filterData(currentFilter);
232 removeFilter(currentFilter);
233 addFilter(newFilterName, oldFilterData);
235 if (m_filterSettings.currentFilter() == currentFilter)
236 m_filterSettings.setCurrentFilter(newFilterName);
241 Q_Q(QHelpFilterSettingsWidget);
243 const QString ¤tFilter = m_itemToFilter.value(m_ui.filterWidget->currentItem());
244 if (currentFilter.isEmpty())
247 if (QMessageBox::question(q, QHelpFilterSettingsWidget::tr(
"Remove Filter"),
248 QHelpFilterSettingsWidget::tr(
"Are you sure you want to remove the \"%1\" filter?")
249 .arg(currentFilter), QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) {
253 removeFilter(currentFilter);
255 if (m_filterSettings.currentFilter() == currentFilter)
256 m_filterSettings.setCurrentFilter({});
260 const QHelpFilterData &filterData)
262 QListWidgetItem *item =
new QListWidgetItem(filterName);
263 m_filterSettings.setFilter(filterName, filterData);
264 m_filterToItem.insert(filterName, item);
265 m_itemToFilter.insert(item, filterName);
266 m_ui.filterWidget->insertItem(m_filterToItem.keys().indexOf(filterName), item);
268 m_ui.filterWidget->setCurrentItem(item);
282 const QString &initialFilterName)
284 Q_Q(QHelpFilterSettingsWidget);
286 QString newFilterName = initialFilterName;
288 QFilterNameDialog dialog(q);
289 dialog.setWindowTitle(windowTitle);
290 dialog.setFilterName(newFilterName);
291 if (dialog.exec() == QDialog::Rejected)
294 newFilterName = dialog.filterName();
295 if (!m_filterToItem.contains(newFilterName))
298 if (QMessageBox::warning(q, QHelpFilterSettingsWidget::tr(
"Filter Exists"),
299 QHelpFilterSettingsWidget::tr(
"The filter \"%1\" already exists.").arg(newFilterName),
300 QMessageBox::Retry | QMessageBox::Cancel) == QMessageBox::Cancel) {
304 return newFilterName;
339QHelpFilterSettingsWidget::QHelpFilterSettingsWidget(QWidget *parent)
341 , d_ptr(
new QHelpFilterSettingsWidgetPrivate())
343 Q_D(QHelpFilterSettingsWidget);
345 d->m_ui.setupUi(
this);
348 QString resourcePath =
":/qt-project.org/assistant/images/"_L1;
350 resourcePath.append(
"mac"_L1);
352 resourcePath.append(
"win"_L1);
354 d->m_ui.addButton->setIcon(QIcon(resourcePath +
"/plus.png"_L1));
355 d->m_ui.removeButton->setIcon(QIcon(resourcePath +
"/minus.png"_L1));
357 connect(d->m_ui.componentWidget, &QOptionsWidget::optionSelectionChanged,
358 this, [
this](
const QStringList &options) {
359 Q_D(QHelpFilterSettingsWidget);
360 d->componentsChanged(options);
362 connect(d->m_ui.versionWidget, &QOptionsWidget::optionSelectionChanged,
363 this, [
this](
const QStringList &options) {
364 Q_D(QHelpFilterSettingsWidget);
365 d->versionsChanged(options);
367 connect(d->m_ui.filterWidget, &QListWidget::currentItemChanged,
368 this, [
this](QListWidgetItem *) {
369 Q_D(QHelpFilterSettingsWidget);
370 d->updateCurrentFilter();
372 connect(d->m_ui.filterWidget, &QListWidget::itemDoubleClicked,
373 this, [
this](QListWidgetItem *) {
374 Q_D(QHelpFilterSettingsWidget);
375 d->renameFilterClicked();
379 connect(d->m_ui.addButton, &QAbstractButton::clicked,
this, [
this] {
380 Q_D(QHelpFilterSettingsWidget);
381 d->addFilterClicked();
383 connect(d->m_ui.renameButton, &QAbstractButton::clicked,
this, [
this] {
384 Q_D(QHelpFilterSettingsWidget);
385 d->renameFilterClicked();
387 connect(d->m_ui.removeButton, &QAbstractButton::clicked,
this, [
this] {
388 Q_D(QHelpFilterSettingsWidget);
389 d->removeFilterClicked();
392 d->m_ui.componentWidget->setNoOptionText(tr(
"No Component"));
393 d->m_ui.componentWidget->setInvalidOptionText(tr(
"Invalid Component"));
394 d->m_ui.versionWidget->setNoOptionText(tr(
"No Version"));
395 d->m_ui.versionWidget->setInvalidOptionText(tr(
"Invalid Version"));
418void QHelpFilterSettingsWidget::setAvailableVersions(
const QList<QVersionNumber> &versions)
420 Q_D(QHelpFilterSettingsWidget);
421 d->m_versions = versions;
422 d->updateCurrentFilter();
429void QHelpFilterSettingsWidget::readSettings(
const QHelpFilterEngine *filterEngine)
431 Q_D(QHelpFilterSettingsWidget);
432 const QHelpFilterSettings settings = readSettingsHelper(filterEngine);
433 d->setFilterSettings(settings);