File indexing completed on 2024-04-28 15:30:24
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