File indexing completed on 2024-05-12 09:54:31

0001 /* This file is part of the KDE project
0002    SPDX-FileCopyrightText: 2001 Christoph Cullmann <cullmann@kde.org>
0003    SPDX-FileCopyrightText: 2001 Joseph Wenninger <jowenn@kde.org>
0004    SPDX-FileCopyrightText: 2001, 2007 Anders Lund <anders@alweb.dk>
0005    SPDX-FileCopyrightText: 2009 Abhishek Patil <abhishekworld@gmail.com>
0006    SPDX-FileCopyrightText: 2010 Thomas Fjellstrom <thomas@fjellstrom.ca>
0007 
0008    SPDX-License-Identifier: LGPL-2.0-or-later
0009 */
0010 
0011 /*
0012 Config stuff plan:
0013 -----------------
0014 
0015 main default config is stored in KSharedConfig::openConfig()+":filetree"
0016 when main config is set, it needs to tell view's to delete
0017 existing customized settings, and use the global ones (somehow)
0018 (maybe some kind of "customized" flag?)
0019 
0020 view needs to pull default settings from the main plugin config
0021 
0022 */
0023 
0024 #include "katefiletreeconfigpage.h"
0025 #include "katefiletreedebug.h"
0026 #include "katefiletreemodel.h"
0027 #include "katefiletreeplugin.h"
0028 #include "katefiletreeproxymodel.h"
0029 
0030 #include <KColorButton>
0031 #include <KLocalizedString>
0032 #include <QCheckBox>
0033 #include <QComboBox>
0034 #include <QGroupBox>
0035 #include <QLabel>
0036 #include <QVBoxLayout>
0037 
0038 KateFileTreeConfigPage::KateFileTreeConfigPage(QWidget *parent, KateFileTreePlugin *fl)
0039     : KTextEditor::ConfigPage(parent)
0040     , m_plug(fl)
0041 {
0042     QVBoxLayout *layout = new QVBoxLayout(this);
0043 
0044     gbEnableShading = new QGroupBox(i18n("Background Shading"), this);
0045     gbEnableShading->setCheckable(true);
0046     layout->addWidget(gbEnableShading);
0047 
0048     QGridLayout *lo = new QGridLayout(gbEnableShading);
0049 
0050     kcbViewShade = new KColorButton(gbEnableShading);
0051     lViewShade = new QLabel(i18n("&Viewed documents' shade:"), gbEnableShading);
0052     lViewShade->setBuddy(kcbViewShade);
0053     lo->addWidget(lViewShade, 2, 0);
0054     lo->addWidget(kcbViewShade, 2, 1);
0055 
0056     kcbEditShade = new KColorButton(gbEnableShading);
0057     lEditShade = new QLabel(i18n("&Modified documents' shade:"), gbEnableShading);
0058     lEditShade->setBuddy(kcbEditShade);
0059     lo->addWidget(lEditShade, 3, 0);
0060     lo->addWidget(kcbEditShade, 3, 1);
0061 
0062     // sorting
0063     QHBoxLayout *lo2 = new QHBoxLayout;
0064     layout->addLayout(lo2);
0065     lSort = new QLabel(i18n("&Sort by:"), this);
0066     lo2->addWidget(lSort);
0067     cmbSort = new QComboBox(this);
0068     lo2->addWidget(cmbSort);
0069     lSort->setBuddy(cmbSort);
0070     cmbSort->addItem(i18n("Opening Order"), static_cast<int>(KateFileTreeModel::OpeningOrderRole));
0071     cmbSort->addItem(i18n("Document Name"), static_cast<int>(Qt::DisplayRole));
0072     cmbSort->addItem(i18n("Url"), static_cast<int>(KateFileTreeModel::PathRole));
0073     cmbSort->addItem(i18n("Custom Sorting"), static_cast<int>(CustomSorting));
0074 
0075     // view mode
0076     QHBoxLayout *lo3 = new QHBoxLayout;
0077     layout->addLayout(lo3);
0078     lMode = new QLabel(i18n("&View Mode:"), this);
0079     lo3->addWidget(lMode);
0080     cmbMode = new QComboBox(this);
0081     lo3->addWidget(cmbMode);
0082     lMode->setBuddy(cmbMode);
0083     cmbMode->addItem(i18n("Tree View"), QVariant(false));
0084     cmbMode->addItem(i18n("List View"), QVariant(true));
0085 
0086     // Show Full Path on Roots?
0087     QHBoxLayout *lo4 = new QHBoxLayout;
0088     layout->addLayout(lo4);
0089     cbShowFullPath = new QCheckBox(i18n("&Show Full Path"), this);
0090     lo4->addWidget(cbShowFullPath);
0091 
0092     QHBoxLayout *lo5 = new QHBoxLayout;
0093     layout->addLayout(lo5);
0094     cbShowToolbar = new QCheckBox(i18n("Show &Toolbar"), this);
0095     lo5->addWidget(cbShowToolbar);
0096 
0097     cbShowClose = new QCheckBox(i18n("Show Close Button"), this);
0098     layout->addWidget(cbShowClose);
0099     layout->addWidget(new QLabel(i18n("When enabled, this will show a close button for opened documents on hover.")));
0100 
0101     layout->insertStretch(-1, 10);
0102 
0103     gbEnableShading->setWhatsThis(
0104         i18n("When background shading is enabled, documents that have been viewed "
0105              "or edited within the current session will have a shaded background. "
0106              "The most recent documents have the strongest shade."));
0107     kcbViewShade->setWhatsThis(i18n("Set the color for shading viewed documents."));
0108     kcbEditShade->setWhatsThis(
0109         i18n("Set the color for modified documents. This color is blended into "
0110              "the color for viewed files. The most recently edited documents get "
0111              "most of this color."));
0112 
0113     cbShowFullPath->setWhatsThis(
0114         i18n("When enabled, in tree mode, top level folders will show up with their full path "
0115              "rather than just the last folder name."));
0116 
0117     cbShowToolbar->setWhatsThis(i18n("When enabled, a toolbar with actions like “Save” are displayed above the list of documents."));
0118 
0119     //   cmbSort->setWhatsThis( i18n(
0120     //       "Set the sorting method for the documents.") );
0121 
0122     reset();
0123 
0124     connect(gbEnableShading, &QGroupBox::toggled, this, &KateFileTreeConfigPage::slotMyChanged);
0125     connect(kcbViewShade, &KColorButton::changed, this, &KateFileTreeConfigPage::slotMyChanged);
0126     connect(kcbEditShade, &KColorButton::changed, this, &KateFileTreeConfigPage::slotMyChanged);
0127     connect(cmbSort, QOverload<int>::of(&QComboBox::activated), this, &KateFileTreeConfigPage::slotMyChanged);
0128     connect(cmbMode, QOverload<int>::of(&QComboBox::activated), this, &KateFileTreeConfigPage::slotMyChanged);
0129     connect(cbShowFullPath, &QCheckBox::stateChanged, this, &KateFileTreeConfigPage::slotMyChanged);
0130     connect(cbShowToolbar, &QCheckBox::stateChanged, this, &KateFileTreeConfigPage::slotMyChanged);
0131     connect(cbShowClose, &QCheckBox::stateChanged, this, &KateFileTreeConfigPage::slotMyChanged);
0132 }
0133 
0134 QString KateFileTreeConfigPage::name() const
0135 {
0136     return QString(i18n("Documents"));
0137 }
0138 
0139 QString KateFileTreeConfigPage::fullName() const
0140 {
0141     return QString(i18n("Configure Documents"));
0142 }
0143 
0144 QIcon KateFileTreeConfigPage::icon() const
0145 {
0146     return QIcon::fromTheme(QLatin1String("folder-documents-symbolic"));
0147 }
0148 
0149 void KateFileTreeConfigPage::apply()
0150 {
0151     if (!m_changed) {
0152         return;
0153     }
0154 
0155     m_changed = false;
0156 
0157     // apply config to views
0158     m_plug->applyConfig(gbEnableShading->isChecked(),
0159                         kcbViewShade->color(),
0160                         kcbEditShade->color(),
0161                         cmbMode->itemData(cmbMode->currentIndex()).toBool(),
0162                         cmbSort->itemData(cmbSort->currentIndex()).toInt(),
0163                         cbShowFullPath->checkState() == Qt::Checked,
0164                         cbShowToolbar->checkState() == Qt::Checked,
0165                         cbShowClose->isChecked());
0166 }
0167 
0168 void KateFileTreeConfigPage::reset()
0169 {
0170     const KateFileTreePluginSettings &settings = m_plug->settings();
0171 
0172     gbEnableShading->setChecked(settings.shadingEnabled());
0173     kcbEditShade->setColor(settings.editShade());
0174     kcbViewShade->setColor(settings.viewShade());
0175     cmbSort->setCurrentIndex(cmbSort->findData(settings.sortRole()));
0176     cmbMode->setCurrentIndex(settings.listMode());
0177     cbShowFullPath->setCheckState(settings.showFullPathOnRoots() ? Qt::Checked : Qt::Unchecked);
0178     cbShowToolbar->setCheckState(settings.showToolbar() ? Qt::Checked : Qt::Unchecked);
0179     cbShowClose->setChecked(settings.showCloseButton());
0180 
0181     m_changed = false;
0182 }
0183 
0184 void KateFileTreeConfigPage::defaults()
0185 {
0186     // m_plug->settings().revertToDefaults() ??
0187     // not sure the above is ever needed...
0188     reset();
0189 }
0190 
0191 void KateFileTreeConfigPage::slotMyChanged()
0192 {
0193     m_changed = true;
0194     Q_EMIT changed();
0195 }
0196 
0197 #include "moc_katefiletreeconfigpage.cpp"