File indexing completed on 2024-04-28 11:45:00

0001 /*
0002     SPDX-FileCopyrightText: 2002, 2003 Anders Lund <anders.lund@lund.tdcadsl.dk>
0003     SPDX-FileCopyrightText: 2003 Christoph Cullmann <cullmann@kde.org>
0004     SPDX-FileCopyrightText: 2001 Joseph Wenninger <jowenn@kde.org>
0005     SPDX-FileCopyrightText: 2006-2016 Dominik Haumann <dhaumann@kde.org>
0006     SPDX-FileCopyrightText: 2007 Mirko Stocker <me@misto.ch>
0007     SPDX-FileCopyrightText: 2009 Michel Ludwig <michel.ludwig@kdemail.net>
0008     SPDX-FileCopyrightText: 1999 Jochen Wilhelmy <digisnap@cs.tu-berlin.de>
0009 
0010     SPDX-License-Identifier: LGPL-2.0-or-later
0011 */
0012 
0013 #ifndef KATE_DIALOGS_H
0014 #define KATE_DIALOGS_H
0015 
0016 #include "kateconfigpage.h"
0017 #include "katehighlight.h"
0018 #include "kateviewhelpers.h"
0019 
0020 #include <ktexteditor/attribute.h>
0021 #include <ktexteditor/document.h>
0022 #include <ktexteditor/modificationinterface.h>
0023 
0024 #include <sonnet/configwidget.h>
0025 #include <sonnet/dictionarycombobox.h>
0026 
0027 #include <QColor>
0028 #include <QDialog>
0029 #include <QTabWidget>
0030 #include <QTreeWidget>
0031 
0032 class ModeConfigPage;
0033 namespace KTextEditor
0034 {
0035 class DocumentPrivate;
0036 }
0037 namespace KTextEditor
0038 {
0039 class ViewPrivate;
0040 }
0041 namespace KTextEditor
0042 {
0043 class Message;
0044 }
0045 
0046 namespace KIO
0047 {
0048 class Job;
0049 class TransferJob;
0050 }
0051 
0052 class KShortcutsEditor;
0053 class QSpinBox;
0054 class KProcess;
0055 
0056 class QCheckBox;
0057 class QLabel;
0058 class QCheckBox;
0059 class QKeyEvent;
0060 class QTemporaryFile;
0061 class QTableWidget;
0062 
0063 namespace Ui
0064 {
0065 class TextareaAppearanceConfigWidget;
0066 class BordersAppearanceConfigWidget;
0067 class NavigationConfigWidget;
0068 class EditConfigWidget;
0069 class IndentationConfigWidget;
0070 class OpenSaveConfigWidget;
0071 class OpenSaveConfigAdvWidget;
0072 class CompletionConfigTab;
0073 class SpellCheckConfigWidget;
0074 class StatusbarConfigWidget;
0075 }
0076 
0077 class KateGotoBar : public KateViewBarWidget
0078 {
0079     Q_OBJECT
0080 
0081 public:
0082     explicit KateGotoBar(KTextEditor::View *view, QWidget *parent = nullptr);
0083 
0084     void closed() override;
0085 
0086 public Q_SLOTS:
0087     void updateData();
0088 
0089 protected Q_SLOTS:
0090     void gotoLine();
0091     void gotoClipboard();
0092 
0093 protected:
0094     void keyPressEvent(QKeyEvent *event) override;
0095     bool eventFilter(QObject *, QEvent *) override;
0096     void showEvent(QShowEvent *event) override;
0097 
0098 private:
0099     KTextEditor::View *const m_view;
0100     QSpinBox *m_gotoRange = nullptr;
0101     QToolButton *m_modifiedUp = nullptr;
0102     QToolButton *m_modifiedDown = nullptr;
0103     int m_wheelDelta = 0; // To accumulate "wheel-deltas" to become e.g. a touch-pad usable
0104 };
0105 
0106 class KateDictionaryBar : public KateViewBarWidget
0107 {
0108     Q_OBJECT
0109 
0110 public:
0111     explicit KateDictionaryBar(KTextEditor::ViewPrivate *view, QWidget *parent = nullptr);
0112     ~KateDictionaryBar() override;
0113 
0114 public Q_SLOTS:
0115     void updateData();
0116 
0117 protected Q_SLOTS:
0118     void dictionaryChanged(const QString &dictionary);
0119 
0120 private:
0121     KTextEditor::ViewPrivate *m_view;
0122     Sonnet::DictionaryComboBox *m_dictionaryComboBox;
0123 };
0124 
0125 class KateIndentConfigTab : public KateConfigPage
0126 {
0127     Q_OBJECT
0128 
0129 public:
0130     explicit KateIndentConfigTab(QWidget *parent);
0131     ~KateIndentConfigTab() override;
0132     QString name() const override;
0133 
0134 protected:
0135     Ui::IndentationConfigWidget *ui;
0136 
0137 public Q_SLOTS:
0138     void apply() override;
0139     void reload() override;
0140     void reset() override
0141     {
0142     }
0143     void defaults() override
0144     {
0145     }
0146 
0147 private Q_SLOTS:
0148     void slotChanged();
0149     void showWhatsThis(const QString &text);
0150 };
0151 
0152 class KateCompletionConfigTab : public KateConfigPage
0153 {
0154     Q_OBJECT
0155 
0156 public:
0157     explicit KateCompletionConfigTab(QWidget *parent);
0158     ~KateCompletionConfigTab() override;
0159     QString name() const override;
0160 
0161 protected:
0162     Ui::CompletionConfigTab *ui;
0163 
0164 public Q_SLOTS:
0165     void apply() override;
0166     void reload() override;
0167     void reset() override
0168     {
0169     }
0170     void defaults() override
0171     {
0172     }
0173 
0174 private Q_SLOTS:
0175     void showWhatsThis(const QString &text);
0176 };
0177 
0178 class KateEditGeneralConfigTab : public KateConfigPage
0179 {
0180     Q_OBJECT
0181 
0182 public:
0183     explicit KateEditGeneralConfigTab(QWidget *parent);
0184     ~KateEditGeneralConfigTab() override;
0185     QString name() const override;
0186 
0187 private:
0188     Ui::EditConfigWidget *ui;
0189 
0190     enum SetOfCharsToEncloseSelection {
0191         None,
0192         MarkDown,
0193         NonLetters,
0194         MirrorChar,
0195         UserData // Ensure to keep it at bottom of this list
0196     };
0197 
0198 public Q_SLOTS:
0199     void apply() override;
0200     void reload() override;
0201     void reset() override
0202     {
0203     }
0204     void defaults() override
0205     {
0206     }
0207 };
0208 
0209 class KateNavigationConfigTab : public KateConfigPage
0210 {
0211     Q_OBJECT
0212 
0213 public:
0214     explicit KateNavigationConfigTab(QWidget *parent);
0215     ~KateNavigationConfigTab() override;
0216     QString name() const override;
0217 
0218 private:
0219     Ui::NavigationConfigWidget *ui;
0220 
0221     void initMulticursorModifierComboBox();
0222 
0223 public Q_SLOTS:
0224     void apply() override;
0225     void reload() override;
0226     void reset() override
0227     {
0228     }
0229     void defaults() override
0230     {
0231     }
0232 };
0233 
0234 class KateSpellCheckConfigTab : public KateConfigPage
0235 {
0236     Q_OBJECT
0237 
0238 public:
0239     explicit KateSpellCheckConfigTab(QWidget *parent);
0240     ~KateSpellCheckConfigTab() override;
0241     QString name() const override;
0242 
0243 protected:
0244     Ui::SpellCheckConfigWidget *ui;
0245     Sonnet::ConfigWidget *m_sonnetConfigWidget;
0246 
0247 public Q_SLOTS:
0248     void apply() override;
0249     void reload() override;
0250     void reset() override
0251     {
0252     }
0253     void defaults() override
0254     {
0255     }
0256 
0257 private Q_SLOTS:
0258     void showWhatsThis(const QString &text);
0259 };
0260 
0261 class KateEditConfigTab : public KateConfigPage
0262 {
0263     Q_OBJECT
0264 
0265 public:
0266     explicit KateEditConfigTab(QWidget *parent);
0267     ~KateEditConfigTab() override;
0268     QString name() const override;
0269     QString fullName() const override;
0270     QIcon icon() const override;
0271 
0272 public Q_SLOTS:
0273     void apply() override;
0274     void reload() override;
0275     void reset() override;
0276     void defaults() override;
0277 
0278 private:
0279     KateEditGeneralConfigTab *editConfigTab;
0280     KateNavigationConfigTab *navigationConfigTab;
0281     KateIndentConfigTab *indentConfigTab;
0282     KateCompletionConfigTab *completionConfigTab;
0283     KateSpellCheckConfigTab *spellCheckConfigTab;
0284     QList<KateConfigPage *> m_inputModeConfigTabs;
0285 };
0286 
0287 class KateViewDefaultsConfig : public KateConfigPage
0288 {
0289     Q_OBJECT
0290 
0291 public:
0292     explicit KateViewDefaultsConfig(QWidget *parent);
0293     ~KateViewDefaultsConfig() override;
0294     QString name() const override;
0295     QString fullName() const override;
0296     QIcon icon() const override;
0297 
0298 public Q_SLOTS:
0299     void apply() override;
0300     void reload() override;
0301     void reset() override;
0302     void defaults() override;
0303 
0304 private:
0305     Ui::TextareaAppearanceConfigWidget *const textareaUi;
0306     Ui::BordersAppearanceConfigWidget *const bordersUi;
0307     Ui::StatusbarConfigWidget *const statusBarUi;
0308 };
0309 
0310 class KateSaveConfigTab : public KateConfigPage
0311 {
0312     Q_OBJECT
0313 
0314 public:
0315     explicit KateSaveConfigTab(QWidget *parent);
0316     ~KateSaveConfigTab() override;
0317     QString name() const override;
0318     QString fullName() const override;
0319     QIcon icon() const override;
0320 
0321 public Q_SLOTS:
0322     void apply() override;
0323     void reload() override;
0324     void reset() override;
0325     void defaults() override;
0326     void swapFileModeChanged(int);
0327 
0328 protected:
0329     // why?
0330     // KComboBox *m_encoding, *m_encodingDetection, *m_eol;
0331     QCheckBox *cbLocalFiles, *cbRemoteFiles;
0332     QCheckBox *replaceTabs, *removeSpaces, *allowEolDetection;
0333     class QSpinBox *blockCount;
0334     class QLabel *blockCountLabel;
0335 
0336 private:
0337     Ui::OpenSaveConfigWidget *ui;
0338     Ui::OpenSaveConfigAdvWidget *uiadv;
0339     ModeConfigPage *modeConfigPage;
0340 };
0341 
0342 /**
0343  * This dialog will prompt the user for what do with a file that is
0344  * modified on disk.
0345  * If the file wasn't deleted, it has a 'diff' button, which will create
0346  * a diff file (using diff(1)) and launch that using OpenUrlJob.
0347  */
0348 class KateModOnHdPrompt : public QObject
0349 {
0350     Q_OBJECT
0351 public:
0352     enum Status {
0353         Reload = 1, // 0 is QDialog::Rejected
0354         Save,
0355         Overwrite,
0356         Ignore,
0357         Close
0358     };
0359     KateModOnHdPrompt(KTextEditor::DocumentPrivate *doc, KTextEditor::ModificationInterface::ModifiedOnDiskReason modtype, const QString &reason);
0360     ~KateModOnHdPrompt() override;
0361 
0362 Q_SIGNALS:
0363     void saveAsTriggered();
0364     void ignoreTriggered();
0365     void reloadTriggered();
0366     void autoReloadTriggered();
0367     void closeTriggered();
0368 
0369 private Q_SLOTS:
0370     /**
0371      * Show a diff between the document text and the disk file.
0372      */
0373     void slotDiff();
0374 
0375 private Q_SLOTS:
0376     void slotDataAvailable(); ///< read data from the process
0377     void slotPDone(); ///< Runs the diff file when done
0378 
0379 private:
0380     KTextEditor::DocumentPrivate *m_doc;
0381     QPointer<KTextEditor::Message> m_message;
0382     KTextEditor::ModificationInterface::ModifiedOnDiskReason m_modtype;
0383     QString m_fullDiffPath;
0384     KProcess *m_proc;
0385     QTemporaryFile *m_diffFile;
0386     QAction *m_diffAction;
0387 };
0388 
0389 #endif