X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/9a2fc1526c169fa179e49f8c097a0a0d421723eb..fdf854bd81d9e42df2d8672d49a0b7fcdb7443a5:/src/settings/viewmodes/generalviewsettingspage.cpp diff --git a/src/settings/viewmodes/generalviewsettingspage.cpp b/src/settings/viewmodes/generalviewsettingspage.cpp index b1415feff..c518147dd 100644 --- a/src/settings/viewmodes/generalviewsettingspage.cpp +++ b/src/settings/viewmodes/generalviewsettingspage.cpp @@ -6,35 +6,54 @@ #include "generalviewsettingspage.h" #include "dolphin_generalsettings.h" +#include "dolphindebug.h" +#include "dolphinmainwindow.h" #include "views/viewproperties.h" +#include #include +#include #include #include +#include +#include #include +#include +#include +#include #include GeneralViewSettingsPage::GeneralViewSettingsPage(const QUrl &url, QWidget *parent) : SettingsPageBase(parent) , m_url(url) - , m_localViewProps(nullptr) - , m_globalViewProps(nullptr) - , m_showSelectionToggle(nullptr) - , m_renameInline(nullptr) { QFormLayout *topLayout = new QFormLayout(this); // Display style m_globalViewProps = new QRadioButton(i18nc("@option:radio", "Use common display style for all folders")); + // i18n: The information in this sentence contradicts the preceding sentence. That's what the word "still" is communicating. + // The previous sentence is "Use common display style for all folders". + QLabel *globalViewPropsLabel = new QLabel(i18nc("@info", "Some special views like search, recent files, or trash will still use a custom display style.")); + globalViewPropsLabel->setFont(QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont)); + globalViewPropsLabel->setWordWrap(true); + globalViewPropsLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + m_localViewProps = new QRadioButton(i18nc("@option:radio", "Remember display style for each folder")); - m_localViewProps->setToolTip(i18nc("@info", "Dolphin will create a hidden .directory file in each folder you change view properties for.")); + QLabel *localViewPropsLabel = new QLabel(i18nc("@info", + "Dolphin will add file system metadata to folders you change view properties for. If that is not possible, " + "a hidden .directory file is created instead.")); + localViewPropsLabel->setFont(QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont)); + localViewPropsLabel->setWordWrap(true); + localViewPropsLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); QButtonGroup *viewGroup = new QButtonGroup(this); viewGroup->addButton(m_globalViewProps); viewGroup->addButton(m_localViewProps); topLayout->addRow(i18nc("@title:group", "Display style: "), m_globalViewProps); + topLayout->addRow(QString(), globalViewPropsLabel); topLayout->addRow(QString(), m_localViewProps); + topLayout->addRow(QString(), localViewPropsLabel); topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed)); @@ -48,7 +67,7 @@ GeneralViewSettingsPage::GeneralViewSettingsPage(const QUrl &url, QWidget *paren #if HAVE_BALOO // 'Show tooltips' - m_showToolTips = new QCheckBox(i18nc("@option:check", "Show tooltips")); + m_showToolTips = new QCheckBox(i18nc("@option:check", "Show item information on hover")); topLayout->addRow(i18nc("@title:group", "Miscellaneous: "), m_showToolTips); #endif @@ -61,9 +80,102 @@ GeneralViewSettingsPage::GeneralViewSettingsPage(const QUrl &url, QWidget *paren #endif // 'Inline renaming of items' - m_renameInline = new QCheckBox(i18nc("option:check", "Rename inline")); + m_renameInline = new QCheckBox(i18nc("option:check", "Rename single items inline")); + m_renameInline->setToolTip(i18n("Renaming multiple items is always done with a dialog window.")); topLayout->addRow(QString(), m_renameInline); + m_hideXtrashFiles = new QCheckBox(i18nc("option:check", "Also hide backup files while hiding hidden files")); + QMimeDatabase db; + QMimeType mime = db.mimeTypeForName(QStringLiteral("application/x-trash")); + m_hideXtrashFiles->setToolTip(i18nc("@info:tooltip %1 are the file patterns for mimetype application/x-trash", + "Backup files are the files whose mime-type is application/x-trash, patterns: %1", + (mime.globPatterns().join(", ")))); + topLayout->addRow(QString(), m_hideXtrashFiles); + + // --------------------- // + // START double click view background + + // list of actions allowed to be triggered by double click + // actions were selected based on their usefulness of being triggered with the mouse + QStringList allowedActions{"new_tab", + "file_new", + "show_places_panel", + "show_information_panel", + "show_folders_panel", + "show_terminal_panel", + "open_terminal", + "go_up", + "go_back", + "go_home", + "view_redisplay", + "split_view", + "edit_select_all", + "toggle_selection_mode", + "create_dir", + "show_preview", + "show_hidden_files", + "show_in_groups", + "view_properties"}; + + // create actions combo-box and add actions + m_doubleClickViewComboBox = new QComboBox(); + m_doubleClickViewComboBox->setAccessibleDescription(i18nc("Accessible description for combobox with actions of double click view background setting", + "Action to trigger when double clicking view background")); + // i18n: Completes the sentence "Double-click triggers [Nothing]". + m_doubleClickViewComboBox->addItem(QIcon::fromTheme("empty"), i18nc("@item:inlistbox", "Nothing"), QStringLiteral("none")); + m_doubleClickViewComboBox->addItem(QIcon::fromTheme("list-add"), i18nc("@item:inlistbox", "Custom Command"), customCommand); + m_doubleClickViewComboBox->insertSeparator(2); + + DolphinMainWindow *mainWindow = static_cast(QApplication::activeWindow()); + if (mainWindow != nullptr) { + KActionCollection *actions = mainWindow->actionCollection(); + // get the allowed actions from actionCollection and add them to the combobox + for (const QString &actionName : allowedActions) { + QAction *action = actions->action(actionName); + if (action == nullptr) { + qCWarning(DolphinDebug) << QStringLiteral("Double click view: action `%1` was not found").arg(actionName); + continue; + } + + QString actionText = action->text(); + // remove ampersand used to define the action's shortcut + actionText.remove(QLatin1Char('&')); + m_doubleClickViewComboBox->addItem(action->icon(), actionText, action->objectName()); + } + } + // i18n: This sentence is incomplete because the user can choose an action that is triggered in a combobox that will appear directly after "triggers". + // (While using a left-to-right language it will be to the right of "triggers", in a right-to-left layout it will be to the left.) + // So please try to keep this translation in a way that it is a complete sentence when reading the content of the combobox as part of the sentence. + // There can be many possible actions in the combobox. The default is "Nothing". Other actions are "New Tab", "Create Folder", "Show Hidden Files", … + QLabel *doubleClickViewLabel{new QLabel(i18nc("@info", "Double-click triggers"))}; + QHBoxLayout *doubleClickViewHLayout{new QHBoxLayout()}; + QWidget *doubleClickViewWidget{new QWidget()}; + doubleClickViewWidget->setLayout(doubleClickViewHLayout); + doubleClickViewHLayout->addWidget(doubleClickViewLabel); + doubleClickViewHLayout->setContentsMargins(0, 0, 0, 0); + doubleClickViewHLayout->addWidget(m_doubleClickViewComboBox); + topLayout->addRow(i18nc("@title:group", "Background: "), doubleClickViewWidget); + + m_doubleClickViewCustomAction = new QLineEdit(); + m_doubleClickViewCustomAction->setAccessibleDescription( + i18nc("Accessible description for custom command text field of double click view background setting", + "Enter custom command to trigger when double clicking view background")); + m_doubleClickViewCustomAction->setPlaceholderText(i18nc("@info:placeholder for terminal command", "Command…")); + topLayout->addRow(QString(), m_doubleClickViewCustomAction); + + m_doubleClickViewCustomActionInfo = new QLabel(i18nc("@label", + "Use {path} to get the path of the current folder. " + "Example: dolphin {path}")); + m_doubleClickViewCustomActionInfo->setFont(QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont)); + m_doubleClickViewCustomActionInfo->setWordWrap(true); + m_doubleClickViewCustomActionInfo->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + m_doubleClickViewCustomActionInfo->hide(); + m_doubleClickViewCustomActionInfo->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard + | Qt::LinksAccessibleByKeyboard); // for accessibility + topLayout->addRow(QString(), m_doubleClickViewCustomActionInfo); + // END double click view background + // --------------------- // + loadSettings(); connect(m_localViewProps, &QRadioButton::toggled, this, &GeneralViewSettingsPage::changed); @@ -76,6 +188,10 @@ GeneralViewSettingsPage::GeneralViewSettingsPage(const QUrl &url, QWidget *paren #endif connect(m_showSelectionToggle, &QCheckBox::toggled, this, &GeneralViewSettingsPage::changed); connect(m_renameInline, &QCheckBox::toggled, this, &GeneralViewSettingsPage::changed); + connect(m_hideXtrashFiles, &QCheckBox::toggled, this, &GeneralViewSettingsPage::changed); + connect(m_doubleClickViewCustomAction, &QLineEdit::textChanged, this, &GeneralViewSettingsPage::changed); + connect(m_doubleClickViewComboBox, qOverload(&QComboBox::currentIndexChanged), this, &GeneralViewSettingsPage::changed); + connect(m_doubleClickViewComboBox, qOverload(&QComboBox::currentIndexChanged), this, &GeneralViewSettingsPage::updateCustomActionVisibility); } GeneralViewSettingsPage::~GeneralViewSettingsPage() @@ -93,7 +209,11 @@ void GeneralViewSettingsPage::applySettings() #endif settings->setShowSelectionToggle(m_showSelectionToggle->isChecked()); settings->setRenameInline(m_renameInline->isChecked()); + settings->setHideXTrashFile(m_hideXtrashFiles->isChecked()); settings->setAutoExpandFolders(m_autoExpandFolders->isChecked()); + settings->setBrowseThroughArchives(m_openArchivesAsFolder->isChecked()); + settings->setDoubleClickViewCustomAction(m_doubleClickViewCustomAction->text()); + settings->setDoubleClickViewAction(m_doubleClickViewComboBox->currentData().toString()); settings->save(); if (useGlobalViewProps) { // Remember the global view properties by applying the current view properties. @@ -123,9 +243,21 @@ void GeneralViewSettingsPage::loadSettings() #endif m_showSelectionToggle->setChecked(GeneralSettings::showSelectionToggle()); m_renameInline->setChecked(GeneralSettings::renameInline()); + m_hideXtrashFiles->setChecked(GeneralSettings::hideXTrashFile()); m_localViewProps->setChecked(!useGlobalViewProps); m_globalViewProps->setChecked(useGlobalViewProps); + int index = m_doubleClickViewComboBox->findData(GeneralSettings::doubleClickViewAction()); + m_doubleClickViewComboBox->setCurrentIndex((index == -1) ? 0 : index); + m_doubleClickViewCustomAction->setText(GeneralSettings::doubleClickViewCustomAction()); + updateCustomActionVisibility(m_doubleClickViewComboBox->currentIndex()); +} + +void GeneralViewSettingsPage::updateCustomActionVisibility(int doubleClickViewComboBoxCurrentIndex) +{ + auto data = m_doubleClickViewComboBox->itemData(doubleClickViewComboBoxCurrentIndex, Qt::UserRole); + m_doubleClickViewCustomAction->setVisible(data == customCommand); + m_doubleClickViewCustomActionInfo->setVisible(data == customCommand); } #include "moc_generalviewsettingspage.cpp"