+ auto additionalInfoBox = new KCollapsibleGroupBox();
+ additionalInfoBox->setTitle(i18nc("@title:group", "Additional Information"));
+ auto innerLayout = new QVBoxLayout();
+
+ {
+ QList<QByteArray> visibleRoles = m_viewProps->visibleRoles();
+ const bool useDefaultRoles = (m_viewProps->viewMode() == DolphinView::DetailsView) && visibleRoles.isEmpty();
+ if (useDefaultRoles) {
+ // Using the details view without any additional information (-> additional column)
+ // makes no sense and leads to a usability problem as no viewport area is available
+ // anymore. Hence as fallback provide at least a size and date column.
+ visibleRoles.clear();
+ visibleRoles.append("text");
+ visibleRoles.append("size");
+ visibleRoles.append("modificationtime");
+ m_viewProps->setVisibleRoles(visibleRoles);
+ }
+
+ // Add checkboxes
+ bool indexingEnabled = false;
+#ifdef HAVE_BALOO
+ Baloo::IndexerConfig config;
+ indexingEnabled = config.fileIndexingEnabled();
+#endif
+
+ m_listWidget = new QListWidget();
+ connect(m_listWidget, &QListWidget::itemChanged, this, &ViewPropertiesDialog::slotItemChanged);
+ m_listWidget->setSelectionMode(QAbstractItemView::NoSelection);
+ const QList<KFileItemModel::RoleInfo> rolesInfo = KFileItemModel::rolesInformation();
+ for (const KFileItemModel::RoleInfo& info : rolesInfo) {
+ QListWidgetItem* item = new QListWidgetItem(info.translation, m_listWidget);
+ item->setCheckState(visibleRoles.contains(info.role) ? Qt::Checked : Qt::Unchecked);
+
+ const bool enable = ((!info.requiresBaloo && !info.requiresIndexer) ||
+ (info.requiresBaloo) ||
+ (info.requiresIndexer && indexingEnabled)) && info.role != "text";
+
+ if (!enable) {
+ item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
+ }
+ }
+ QLabel* additionalViewOptionsLabel = new QLabel(i18n("Choose what to see on each file or folder:"));
+ innerLayout->addWidget(additionalViewOptionsLabel);
+ innerLayout->addWidget(m_listWidget);
+ }
+
+ additionalInfoBox->setLayout(innerLayout);