File indexing completed on 2024-05-05 05:51:25

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 "katefiletreemodel.h"
0026 #include "katefiletreeplugin.h"
0027 #include "katefiletreeproxymodel.h"
0028 
0029 #include <KColorButton>
0030 #include <KLocalizedString>
0031 #include <QCheckBox>
0032 #include <QComboBox>
0033 #include <QGroupBox>
0034 #include <QLabel>
0035 #include <QVBoxLayout>
0036 
0037 KateFileTreeConfigPage::KateFileTreeConfigPage(QWidget *parent, KateFileTreePlugin *fl)
0038     : KTextEditor::ConfigPage(parent)
0039     , m_plug(fl)
0040 {
0041     QVBoxLayout *layout = new QVBoxLayout(this);
0042 
0043     gbEnableShading = new QGroupBox(i18n("Background Shading"), this);
0044     gbEnableShading->setCheckable(true);
0045     layout->addWidget(gbEnableShading);
0046 
0047     QGridLayout *lo = new QGridLayout(gbEnableShading);
0048 
0049     kcbViewShade = new KColorButton(gbEnableShading);
0050     lViewShade = new QLabel(i18n("&Viewed documents' shade:"), gbEnableShading);
0051     lViewShade->setBuddy(kcbViewShade);
0052     lo->addWidget(lViewShade, 2, 0);
0053     lo->addWidget(kcbViewShade, 2, 1);
0054 
0055     kcbEditShade = new KColorButton(gbEnableShading);
0056     lEditShade = new QLabel(i18n("&Modified documents' shade:"), gbEnableShading);
0057     lEditShade->setBuddy(kcbEditShade);
0058     lo->addWidget(lEditShade, 3, 0);
0059     lo->addWidget(kcbEditShade, 3, 1);
0060 
0061     // sorting
0062     QHBoxLayout *lo2 = new QHBoxLayout;
0063     layout->addLayout(lo2);
0064     lSort = new QLabel(i18n("&Sort by:"), this);
0065     lo2->addWidget(lSort);
0066     cmbSort = new QComboBox(this);
0067     lo2->addWidget(cmbSort);
0068     lSort->setBuddy(cmbSort);
0069     cmbSort->addItem(i18n("Opening Order"), static_cast<int>(KateFileTreeModel::OpeningOrderRole));
0070     cmbSort->addItem(i18n("Document Name"), static_cast<int>(Qt::DisplayRole));
0071     cmbSort->addItem(i18n("Url"), static_cast<int>(KateFileTreeModel::PathRole));
0072     cmbSort->addItem(i18n("Custom Sorting"), static_cast<int>(CustomSorting));
0073 
0074     // view mode
0075     QHBoxLayout *lo3 = new QHBoxLayout;
0076     layout->addLayout(lo3);
0077     lMode = new QLabel(i18n("&View Mode:"), this);
0078     lo3->addWidget(lMode);
0079     cmbMode = new QComboBox(this);
0080     lo3->addWidget(cmbMode);
0081     lMode->setBuddy(cmbMode);
0082     cmbMode->addItem(i18n("Tree View"), QVariant(false));
0083     cmbMode->addItem(i18n("List View"), QVariant(true));
0084 
0085     // Show Full Path on Roots?
0086     QHBoxLayout *lo4 = new QHBoxLayout;
0087     layout->addLayout(lo4);
0088     cbShowFullPath = new QCheckBox(i18n("&Show Full Path"), this);
0089     lo4->addWidget(cbShowFullPath);
0090 
0091     QHBoxLayout *lo5 = new QHBoxLayout;
0092     layout->addLayout(lo5);
0093     cbShowToolbar = new QCheckBox(i18n("Show &Toolbar"), this);
0094     lo5->addWidget(cbShowToolbar);
0095 
0096     cbShowClose = new QCheckBox(i18n("Show Close Button On Hovering"), this);
0097     layout->addWidget(cbShowClose);
0098 
0099     cbMiddleClick = new QCheckBox(i18n("Middle Click To Close Documents"), this);
0100     layout->addWidget(cbMiddleClick);
0101 
0102     layout->insertStretch(-1, 10);
0103 
0104     gbEnableShading->setWhatsThis(
0105         i18n("When background shading is enabled, documents that have been viewed "
0106              "or edited within the current session will have a shaded background. "
0107              "The most recent documents have the strongest shade."));
0108     kcbViewShade->setWhatsThis(i18n("Set the color for shading viewed documents."));
0109     kcbEditShade->setWhatsThis(
0110         i18n("Set the color for modified documents. This color is blended into "
0111              "the color for viewed files. The most recently edited documents get "
0112              "most of this color."));
0113 
0114     cbShowFullPath->setWhatsThis(
0115         i18n("When enabled, in tree mode, top level folders will show up with their full path "
0116              "rather than just the last folder name."));
0117 
0118     cbShowToolbar->setWhatsThis(i18n("When enabled, a toolbar with actions like “Save” are displayed above the list of documents."));
0119 
0120     //   cmbSort->setWhatsThis( i18n(
0121     //       "Set the sorting method for the documents.") );
0122 
0123     reset();
0124 
0125     connect(gbEnableShading, &QGroupBox::toggled, this, &KateFileTreeConfigPage::slotMyChanged);
0126     connect(kcbViewShade, &KColorButton::changed, this, &KateFileTreeConfigPage::slotMyChanged);
0127     connect(kcbEditShade, &KColorButton::changed, this, &KateFileTreeConfigPage::slotMyChanged);
0128     connect(cmbSort, QOverload<int>::of(&QComboBox::activated), this, &KateFileTreeConfigPage::slotMyChanged);
0129     connect(cmbMode, QOverload<int>::of(&QComboBox::activated), this, &KateFileTreeConfigPage::slotMyChanged);
0130     connect(cbShowFullPath, &QCheckBox::stateChanged, this, &KateFileTreeConfigPage::slotMyChanged);
0131     connect(cbShowToolbar, &QCheckBox::stateChanged, this, &KateFileTreeConfigPage::slotMyChanged);
0132     connect(cbShowClose, &QCheckBox::stateChanged, this, &KateFileTreeConfigPage::slotMyChanged);
0133     connect(cbMiddleClick, &QCheckBox::stateChanged, this, &KateFileTreeConfigPage::slotMyChanged);
0134 }
0135 
0136 QString KateFileTreeConfigPage::name() const
0137 {
0138     return QString(i18n("Documents"));
0139 }
0140 
0141 QString KateFileTreeConfigPage::fullName() const
0142 {
0143     return QString(i18n("Configure Documents"));
0144 }
0145 
0146 QIcon KateFileTreeConfigPage::icon() const
0147 {
0148     return QIcon::fromTheme(QLatin1String("folder-documents-symbolic"));
0149 }
0150 
0151 void KateFileTreeConfigPage::apply()
0152 {
0153     if (!m_changed) {
0154         return;
0155     }
0156 
0157     m_changed = false;
0158 
0159     // apply config to views
0160     m_plug->applyConfig(gbEnableShading->isChecked(),
0161                         kcbViewShade->color(),
0162                         kcbEditShade->color(),
0163                         cmbMode->itemData(cmbMode->currentIndex()).toBool(),
0164                         cmbSort->itemData(cmbSort->currentIndex()).toInt(),
0165                         cbShowFullPath->checkState() == Qt::Checked,
0166                         cbShowToolbar->checkState() == Qt::Checked,
0167                         cbShowClose->isChecked(),
0168                         cbMiddleClick->isChecked());
0169 }
0170 
0171 void KateFileTreeConfigPage::reset()
0172 {
0173     const KateFileTreePluginSettings &settings = m_plug->settings();
0174 
0175     gbEnableShading->setChecked(settings.shadingEnabled());
0176     kcbEditShade->setColor(settings.editShade());
0177     kcbViewShade->setColor(settings.viewShade());
0178     cmbSort->setCurrentIndex(cmbSort->findData(settings.sortRole()));
0179     cmbMode->setCurrentIndex(settings.listMode());
0180     cbShowFullPath->setCheckState(settings.showFullPathOnRoots() ? Qt::Checked : Qt::Unchecked);
0181     cbShowToolbar->setCheckState(settings.showToolbar() ? Qt::Checked : Qt::Unchecked);
0182     cbShowClose->setChecked(settings.showCloseButton());
0183     cbMiddleClick->setChecked(settings.middleClickToClose);
0184 
0185     m_changed = false;
0186 }
0187 
0188 void KateFileTreeConfigPage::defaults()
0189 {
0190     // m_plug->settings().revertToDefaults() ??
0191     // not sure the above is ever needed...
0192     reset();
0193 }
0194 
0195 void KateFileTreeConfigPage::slotMyChanged()
0196 {
0197     m_changed = true;
0198     Q_EMIT changed();
0199 }
0200 
0201 #include "moc_katefiletreeconfigpage.cpp"