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