18#include "katedialogs.h"
20#include <ktexteditor/message.h>
21#include <ktexteditor_version.h>
23#include "kateautoindent.h"
24#include "katebuffer.h"
25#include "kateconfig.h"
26#include "katedocument.h"
27#include "kateglobal.h"
28#include "katemodeconfigpage.h"
30#include "spellcheck/spellcheck.h"
33#include "ui_bordersappearanceconfigwidget.h"
34#include "ui_completionconfigtab.h"
35#include "ui_editconfigwidget.h"
36#include "ui_indentationconfigwidget.h"
37#include "ui_navigationconfigwidget.h"
38#include "ui_opensaveconfigadvwidget.h"
39#include "ui_opensaveconfigwidget.h"
40#include "ui_spellcheckconfigwidget.h"
41#include "ui_statusbarconfigwidget.h"
42#include "ui_textareaappearanceconfigwidget.h"
45#include <KIO/JobUiDelegateFactory>
46#include <KIO/OpenUrlJob>
48#include "kateabstractinputmodefactory.h"
49#include "katepartdebug.h"
50#include <KActionCollection>
53#include <KEncodingProber>
54#include <KFontRequester>
55#include <KLocalization>
63#include <QDomDocument>
66#include <QFontDatabase>
72#include <QRadioButton>
78#include <QTemporaryFile>
86KateIndentConfigTab::KateIndentConfigTab(
QWidget *parent)
87 : KateConfigPage(parent)
94 ui =
new Ui::IndentationConfigWidget();
95 ui->setupUi(newWidget);
107 observeChanges(ui->chkAutoDetectIndent);
108 observeChanges(ui->chkBackspaceUnindents);
109 observeChanges(ui->chkIndentPaste);
110 observeChanges(ui->chkKeepExtraSpaces);
111 observeChanges(ui->cmbMode);
112 observeChanges(ui->rbIndentMixed);
113 observeChanges(ui->rbIndentWithSpaces);
114 observeChanges(ui->rbIndentWithTabs);
117 observeChanges(ui->rbTabAdvances);
118 observeChanges(ui->rbTabIndents);
119 observeChanges(ui->rbTabSmart);
120 observeChanges(ui->sbIndentWidth);
121 observeChanges(ui->sbTabWidth);
126KateIndentConfigTab::~KateIndentConfigTab()
131void KateIndentConfigTab::slotChanged()
135 if (ui->rbIndentWithTabs->isChecked()) {
136 ui->sbIndentWidth->setValue(ui->sbTabWidth->value());
142void KateIndentConfigTab::showWhatsThis(
const QString &text)
147void KateIndentConfigTab::apply()
157 KateDocumentConfig::global()->setBackspaceIndents(ui->chkBackspaceUnindents->isChecked());
158 KateDocumentConfig::global()->setIndentPastedText(ui->chkIndentPaste->isChecked());
160 KateDocumentConfig::global()->setIndentationWidth(ui->sbIndentWidth->value());
161 KateDocumentConfig::global()->setKeepExtraSpaces(ui->chkKeepExtraSpaces->isChecked());
162 KateDocumentConfig::global()->setReplaceTabsDyn(ui->rbIndentWithSpaces->isChecked());
163 KateDocumentConfig::global()->setTabWidth(ui->sbTabWidth->value());
164 KateDocumentConfig::global()->setAutoDetectIndent(ui->chkAutoDetectIndent->isChecked());
166 if (ui->rbTabAdvances->isChecked()) {
167 KateDocumentConfig::global()->setTabHandling(KateDocumentConfig::tabInsertsTab);
168 }
else if (ui->rbTabIndents->isChecked()) {
169 KateDocumentConfig::global()->setTabHandling(KateDocumentConfig::tabIndents);
171 KateDocumentConfig::global()->setTabHandling(KateDocumentConfig::tabSmart);
174 KateDocumentConfig::global()->
configEnd();
177void KateIndentConfigTab::reload()
179 ui->chkBackspaceUnindents->setChecked(KateDocumentConfig::global()->backspaceIndents());
180 ui->chkIndentPaste->setChecked(KateDocumentConfig::global()->indentPastedText());
181 ui->chkKeepExtraSpaces->setChecked(KateDocumentConfig::global()->keepExtraSpaces());
183 ui->chkAutoDetectIndent->setChecked(KateDocumentConfig::global()->autoDetectIndent());
185 ui->sbIndentWidth->setValue(KateDocumentConfig::global()->indentationWidth());
187 ui->sbTabWidth->setValue(KateDocumentConfig::global()->tabWidth());
189 ui->rbTabAdvances->setChecked(KateDocumentConfig::global()->tabHandling() == KateDocumentConfig::tabInsertsTab);
190 ui->rbTabIndents->setChecked(KateDocumentConfig::global()->tabHandling() == KateDocumentConfig::tabIndents);
191 ui->rbTabSmart->setChecked(KateDocumentConfig::global()->tabHandling() == KateDocumentConfig::tabSmart);
195 if (KateDocumentConfig::global()->replaceTabsDyn()) {
196 ui->rbIndentWithSpaces->setChecked(
true);
198 if (KateDocumentConfig::global()->indentationWidth() == KateDocumentConfig::global()->tabWidth()) {
199 ui->rbIndentWithTabs->setChecked(
true);
201 ui->rbIndentMixed->setChecked(
true);
205 ui->sbIndentWidth->setEnabled(!ui->rbIndentWithTabs->isChecked());
208QString KateIndentConfigTab::name()
const
210 return i18n(
"Indentation");
216KateCompletionConfigTab::KateCompletionConfigTab(
QWidget *parent)
217 : KateConfigPage(parent)
224 ui =
new Ui::CompletionConfigTab();
225 ui->setupUi(newWidget);
231 observeChanges(ui->chkAutoCompletionEnabled);
232 observeChanges(ui->chkAutoSelectFirstEntry);
233 observeChanges(ui->chkTabCompletion);
234 observeChanges(ui->chkEnterCompletion);
235 observeChanges(ui->gbKeywordCompletion);
236 observeChanges(ui->gbShowDoc);
237 observeChanges(ui->gbWordCompletion);
238 observeChanges(ui->minimalWordLength);
239 observeChanges(ui->removeTail);
244KateCompletionConfigTab::~KateCompletionConfigTab()
249void KateCompletionConfigTab::showWhatsThis(
const QString &text)
254void KateCompletionConfigTab::apply()
264 KateViewConfig::global()->
setValue(KateViewConfig::AutomaticCompletionInvocation, ui->chkAutoCompletionEnabled->isChecked());
265 KateViewConfig::global()->
setValue(KateViewConfig::AutomaticCompletionPreselectFirst, ui->chkAutoSelectFirstEntry->isChecked());
266 KateViewConfig::global()->
setValue(KateViewConfig::TabCompletion, ui->chkTabCompletion->isChecked());
267 KateViewConfig::global()->
setValue(KateViewConfig::EnterToInsertCompletion, ui->chkEnterCompletion->isChecked());
268 KateViewConfig::global()->
setValue(KateViewConfig::KeywordCompletion, ui->gbKeywordCompletion->isChecked());
269 KateViewConfig::global()->
setValue(KateViewConfig::WordCompletion, ui->gbWordCompletion->isChecked());
270 KateViewConfig::global()->
setValue(KateViewConfig::WordCompletionMinimalWordLength, ui->minimalWordLength->value());
271 KateViewConfig::global()->
setValue(KateViewConfig::WordCompletionRemoveTail, ui->removeTail->isChecked());
272 KateViewConfig::global()->
setValue(KateViewConfig::ShowDocWithCompletion, ui->gbShowDoc->isChecked());
277void KateCompletionConfigTab::reload()
279 ui->chkAutoCompletionEnabled->setChecked(KateViewConfig::global()->automaticCompletionInvocation());
280 ui->chkAutoSelectFirstEntry->setChecked(KateViewConfig::global()->automaticCompletionPreselectFirst());
281 ui->chkTabCompletion->setChecked(KateViewConfig::global()->tabCompletion());
282 ui->chkEnterCompletion->setChecked(KateViewConfig::global()->value(KateViewConfig::EnterToInsertCompletion).toBool());
284 ui->gbKeywordCompletion->setChecked(KateViewConfig::global()->keywordCompletion());
285 ui->gbWordCompletion->setChecked(KateViewConfig::global()->wordCompletion());
286 ui->gbShowDoc->setChecked(KateViewConfig::global()->showDocWithCompletion());
288 ui->minimalWordLength->setValue(KateViewConfig::global()->wordCompletionMinimalWordLength());
289 ui->removeTail->setChecked(KateViewConfig::global()->wordCompletionRemoveTail());
292QString KateCompletionConfigTab::name()
const
294 return i18n(
"Auto Completion");
300KateSpellCheckConfigTab::KateSpellCheckConfigTab(
QWidget *parent)
301 : KateConfigPage(parent)
308 ui =
new Ui::SpellCheckConfigWidget();
309 ui->setupUi(newWidget);
322KateSpellCheckConfigTab::~KateSpellCheckConfigTab()
327void KateSpellCheckConfigTab::showWhatsThis(
const QString &text)
332void KateSpellCheckConfigTab::apply()
343 m_sonnetConfigWidget->save();
344 QSettings settings(QStringLiteral(
"KDE"), QStringLiteral(
"Sonnet"));
345 KateDocumentConfig::global()->setOnTheFlySpellCheck(settings.value(QStringLiteral(
"checkerEnabledByDefault"),
false).toBool());
346 KateDocumentConfig::global()->
configEnd();
349 for (KTextEditor::Document *doc : docs) {
350 static_cast<KTextEditor::DocumentPrivate *
>(doc)->refreshOnTheFlyCheck();
354void KateSpellCheckConfigTab::reload()
359QString KateSpellCheckConfigTab::name()
const
361 return i18n(
"Spellcheck");
367KateNavigationConfigTab::KateNavigationConfigTab(
QWidget *parent)
368 : KateConfigPage(parent)
375 ui =
new Ui::NavigationConfigWidget();
376 ui->setupUi(newWidget);
378 initMulticursorModifierComboBox();
384 observeChanges(ui->cbTextSelectionMode);
385 observeChanges(ui->chkBackspaceRemoveComposed);
386 observeChanges(ui->chkPagingMovesCursor);
387 observeChanges(ui->chkScrollPastEnd);
388 observeChanges(ui->chkSmartHome);
389 observeChanges(ui->sbAutoCenterCursor);
390 observeChanges(ui->chkCamelCursor);
391 observeChanges(ui->cmbMultiCursorModifier);
392 observeChanges(ui->cbCycleBookmarks);
397KateNavigationConfigTab::~KateNavigationConfigTab()
402void KateNavigationConfigTab::initMulticursorModifierComboBox()
406 auto *c = ui->cmbMultiCursorModifier;
425void KateNavigationConfigTab::apply()
436 KateDocumentConfig::global()->setPageUpDownMovesCursor(ui->chkPagingMovesCursor->isChecked());
437 KateDocumentConfig::global()->setSmartHome(ui->chkSmartHome->isChecked());
438 KateDocumentConfig::global()->setCamelCursor(ui->chkCamelCursor->isChecked());
440 KateViewConfig::global()->
setValue(KateViewConfig::AutoCenterLines, ui->sbAutoCenterCursor->value());
441 KateViewConfig::global()->
setValue(KateViewConfig::BackspaceRemoveComposedCharacters, ui->chkBackspaceRemoveComposed->isChecked());
442 KateViewConfig::global()->
setValue(KateViewConfig::PersistentSelection, ui->cbTextSelectionMode->currentIndex() == 1);
443 KateViewConfig::global()->
setValue(KateViewConfig::ScrollPastEnd, ui->chkScrollPastEnd->isChecked());
444 KateViewConfig::global()->
setValue(KateViewConfig::CycleThroughBookmarks, ui->cbCycleBookmarks->isChecked());
446 const int modifers = ui->cmbMultiCursorModifier->currentData().toInt();
449 KateDocumentConfig::global()->
configEnd();
453void KateNavigationConfigTab::reload()
455 ui->cbTextSelectionMode->setCurrentIndex(KateViewConfig::global()->persistentSelection() ? 1 : 0);
457 ui->chkBackspaceRemoveComposed->setChecked(KateViewConfig::global()->backspaceRemoveComposed());
458 ui->chkPagingMovesCursor->setChecked(KateDocumentConfig::global()->pageUpDownMovesCursor());
459 ui->chkScrollPastEnd->setChecked(KateViewConfig::global()->scrollPastEnd());
460 ui->chkSmartHome->setChecked(KateDocumentConfig::global()->smartHome());
461 ui->chkCamelCursor->setChecked(KateDocumentConfig::global()->camelCursor());
463 ui->sbAutoCenterCursor->setValue(KateViewConfig::global()->autoCenterLines());
464 ui->cbCycleBookmarks->setChecked(KateViewConfig::global()->value(KateViewConfig::CycleThroughBookmarks).toBool());
466 const int mods = KateViewConfig::global()->multiCursorModifiers();
467 const auto count = ui->cmbMultiCursorModifier->count();
468 for (
int i = 0; i < count; ++i) {
469 int idxMods = ui->cmbMultiCursorModifier->itemData(i).toInt();
470 if (idxMods == mods) {
471 ui->cmbMultiCursorModifier->setCurrentIndex(i);
477QString KateNavigationConfigTab::name()
const
479 return i18n(
"Text Navigation");
485KateEditGeneralConfigTab::KateEditGeneralConfigTab(
QWidget *parent)
486 : KateConfigPage(parent)
490 ui =
new Ui::EditConfigWidget();
491 ui->setupUi(newWidget);
494 ui->cmbInputMode->addItem(fact->name(),
static_cast<int>(fact->inputMode()));
501 observeChanges(ui->chkAutoBrackets);
502 observeChanges(ui->chkMousePasteAtCursorPosition);
503 observeChanges(ui->chkShowStaticWordWrapMarker);
504 observeChanges(ui->chkTextDragAndDrop);
505 observeChanges(ui->chkSmartCopyCut);
506 observeChanges(ui->sbClipboardHistoryEntries);
507 observeChanges(ui->chkStaticWordWrap);
508 observeChanges(ui->cmbEncloseSelection);
511 const int index = ui->cmbEncloseSelection->currentIndex();
512 const QString text = ui->cmbEncloseSelection->currentText();
514 if (index >= UserData && text.isEmpty()) {
515 ui->cmbEncloseSelection->removeItem(index);
519 }
else if (ui->cmbEncloseSelection->findText(text) < 0) {
520 ui->cmbEncloseSelection->addItem(text);
523 ui->cmbEncloseSelection->setCurrentIndex(ui->cmbEncloseSelection->findText(text));
525 observeChanges(ui->cmbInputMode);
526 observeChanges(ui->sbWordWrap);
527 observeChanges(ui->chkAccessibility);
532KateEditGeneralConfigTab::~KateEditGeneralConfigTab()
537void KateEditGeneralConfigTab::apply()
548 KateDocumentConfig::global()->setWordWrap(ui->chkStaticWordWrap->isChecked());
549 KateDocumentConfig::global()->setWordWrapAt(ui->sbWordWrap->value());
551 KateRendererConfig::global()->setWordWrapMarker(ui->chkShowStaticWordWrapMarker->isChecked());
553 KateViewConfig::global()->
setValue(KateViewConfig::AutoBrackets, ui->chkAutoBrackets->isChecked());
554 KateViewConfig::global()->
setValue(KateViewConfig::CharsToEncloseSelection, ui->cmbEncloseSelection->currentText());
555 QStringList userLetters;
556 for (
int i = UserData; i < ui->cmbEncloseSelection->count(); ++i) {
557 userLetters.
append(ui->cmbEncloseSelection->itemText(i));
559 KateViewConfig::global()->
setValue(KateViewConfig::UserSetsOfCharsToEncloseSelection, userLetters);
560 KateViewConfig::global()->
setValue(KateViewConfig::InputMode, ui->cmbInputMode->currentData().toInt());
561 KateViewConfig::global()->
setValue(KateViewConfig::MousePasteAtCursorPosition, ui->chkMousePasteAtCursorPosition->isChecked());
562 KateViewConfig::global()->
setValue(KateViewConfig::TextDragAndDrop, ui->chkTextDragAndDrop->isChecked());
563 KateViewConfig::global()->
setValue(KateViewConfig::SmartCopyCut, ui->chkSmartCopyCut->isChecked());
564 KateViewConfig::global()->
setValue(KateViewConfig::ClipboardHistoryEntries, ui->sbClipboardHistoryEntries->value());
565 KateViewConfig::global()->
setValue(KateViewConfig::EnableAccessibility, ui->chkAccessibility->isChecked());
567 KateDocumentConfig::global()->
configEnd();
571void KateEditGeneralConfigTab::reload()
573 ui->chkAutoBrackets->setChecked(KateViewConfig::global()->autoBrackets());
574 ui->chkMousePasteAtCursorPosition->setChecked(KateViewConfig::global()->mousePasteAtCursorPosition());
575 ui->chkShowStaticWordWrapMarker->setChecked(KateRendererConfig::global()->wordWrapMarker());
576 ui->chkTextDragAndDrop->setChecked(KateViewConfig::global()->textDragAndDrop());
577 ui->chkSmartCopyCut->setChecked(KateViewConfig::global()->smartCopyCut());
578 ui->chkStaticWordWrap->setChecked(KateDocumentConfig::global()->wordWrap());
579 ui->sbClipboardHistoryEntries->setValue(KateViewConfig::global()->clipboardHistoryEntries());
582 ui->sbWordWrap->setValue(KateDocumentConfig::global()->wordWrapAt());
584 ui->cmbEncloseSelection->clear();
585 ui->cmbEncloseSelection->lineEdit()->setClearButtonEnabled(
true);
586 ui->cmbEncloseSelection->lineEdit()->setPlaceholderText(
i18n(
"Feature is not active"));
587 ui->cmbEncloseSelection->addItem(QString(), None);
589 ui->cmbEncloseSelection->addItem(QStringLiteral(
"`*_~"), MarkDown);
590 ui->cmbEncloseSelection->setItemData(1,
i18n(
"May be handy with Markdown"),
Qt::ToolTipRole);
591 ui->cmbEncloseSelection->addItem(QStringLiteral(
"<>(){}[]'\""), MirrorChar);
592 ui->cmbEncloseSelection->setItemData(2,
i18n(
"Mirror characters, similar but not exactly like auto brackets"),
Qt::ToolTipRole);
593 ui->cmbEncloseSelection->addItem(QStringLiteral(
"´`_.:|#@~*!?$%/=,;-+^°§&"), NonLetters);
595 const QStringList userLetters = KateViewConfig::global()->
value(KateViewConfig::UserSetsOfCharsToEncloseSelection).
toStringList();
596 for (
int i = 0; i < userLetters.
size(); ++i) {
597 ui->cmbEncloseSelection->addItem(userLetters.
at(i), UserData + i);
599 ui->cmbEncloseSelection->setCurrentIndex(ui->cmbEncloseSelection->findText(KateViewConfig::global()->charsToEncloseSelection()));
601 const int id =
static_cast<int>(KateViewConfig::global()->inputMode());
602 ui->cmbInputMode->setCurrentIndex(ui->cmbInputMode->findData(
id));
603 ui->chkAccessibility->setChecked(KateViewConfig::global()->value(KateViewConfig::EnableAccessibility).toBool());
606QString KateEditGeneralConfigTab::name()
const
608 return i18n(
"General");
614KateEditConfigTab::KateEditConfigTab(
QWidget *parent)
615 : KateConfigPage(parent)
616 , editConfigTab(new KateEditGeneralConfigTab(this))
617 , navigationConfigTab(new KateNavigationConfigTab(this))
618 , indentConfigTab(new KateIndentConfigTab(this))
619 , completionConfigTab(new KateCompletionConfigTab(this))
620 , spellCheckConfigTab(new KateSpellCheckConfigTab(this))
628 tabWidget->
insertTab(0, editConfigTab, editConfigTab->name());
629 tabWidget->
insertTab(1, navigationConfigTab, navigationConfigTab->name());
630 tabWidget->
insertTab(2, indentConfigTab, indentConfigTab->name());
631 tabWidget->
insertTab(3, completionConfigTab, completionConfigTab->name());
632 tabWidget->
insertTab(4, spellCheckConfigTab, spellCheckConfigTab->name());
634 observeChanges(editConfigTab);
635 observeChanges(navigationConfigTab);
636 observeChanges(indentConfigTab);
637 observeChanges(completionConfigTab);
638 observeChanges(spellCheckConfigTab);
640 int i = tabWidget->
count();
642 KateConfigPage *tab = factory->createConfigPage(
this);
644 m_inputModeConfigTabs.push_back(tab);
654KateEditConfigTab::~KateEditConfigTab()
656 qDeleteAll(m_inputModeConfigTabs);
659void KateEditConfigTab::apply()
662 editConfigTab->apply();
663 navigationConfigTab->apply();
664 indentConfigTab->apply();
665 completionConfigTab->apply();
666 spellCheckConfigTab->apply();
667 for (KateConfigPage *tab : m_inputModeConfigTabs) {
672void KateEditConfigTab::reload()
674 editConfigTab->reload();
675 navigationConfigTab->reload();
676 indentConfigTab->reload();
677 completionConfigTab->reload();
678 spellCheckConfigTab->reload();
679 for (KateConfigPage *tab : m_inputModeConfigTabs) {
684void KateEditConfigTab::reset()
686 editConfigTab->reset();
687 navigationConfigTab->reset();
688 indentConfigTab->reset();
689 completionConfigTab->reset();
690 spellCheckConfigTab->reset();
691 for (KateConfigPage *tab : m_inputModeConfigTabs) {
696void KateEditConfigTab::defaults()
698 editConfigTab->defaults();
699 navigationConfigTab->defaults();
700 indentConfigTab->defaults();
701 completionConfigTab->defaults();
702 spellCheckConfigTab->defaults();
703 for (KateConfigPage *tab : m_inputModeConfigTabs) {
708QString KateEditConfigTab::name()
const
710 return i18n(
"Editing");
713QString KateEditConfigTab::fullName()
const
715 return i18n(
"Editing Options");
718QIcon KateEditConfigTab::icon()
const
726KateViewDefaultsConfig::KateViewDefaultsConfig(
QWidget *parent)
727 : KateConfigPage(parent)
728 , textareaUi(new Ui::TextareaAppearanceConfigWidget())
729 , bordersUi(new Ui::BordersAppearanceConfigWidget())
730 , statusBarUi(new Ui::StatusbarConfigWidget())
739 textareaUi->setupUi(textareaTab);
740 tabWidget->
addTab(textareaTab,
i18n(
"General"));
743 bordersUi->setupUi(bordersTab);
744 tabWidget->
addTab(bordersTab,
i18n(
"Borders"));
747 statusBarUi->setupUi(statusbarTab);
748 tabWidget->
addTab(statusbarTab,
i18n(
"Statusbar"));
750 textareaUi->cmbDynamicWordWrapIndicator->addItem(
i18n(
"Off"));
751 textareaUi->cmbDynamicWordWrapIndicator->addItem(
i18n(
"Follow Line Numbers"));
752 textareaUi->cmbDynamicWordWrapIndicator->addItem(
i18n(
"Always On"));
758 observeChanges(textareaUi->kfontrequester);
760 observeChanges(textareaUi->chkAnimateBracketMatching);
761 observeChanges(textareaUi->chkDynWrapAnywhere);
762 observeChanges(textareaUi->chkDynWrapAtStaticMarker);
763 observeChanges(textareaUi->chkFoldFirstLine);
764 observeChanges(textareaUi->chkShowBracketMatchPreview);
765 observeChanges(textareaUi->chkShowIndentationLines);
766 observeChanges(textareaUi->chkShowLineCount);
767 observeChanges(textareaUi->chkShowTabs);
768 observeChanges(textareaUi->chkShowWholeBracketExpression);
769 observeChanges(textareaUi->chkShowWordCount);
770 observeChanges(textareaUi->cmbDynamicWordWrapIndicator);
771 observeChanges(textareaUi->cbxWordWrap);
772 observeChanges(textareaUi->spbLineHeightMultiplier);
773 auto a = [ui = textareaUi, cbx = textareaUi->cbxWordWrap]() {
774 ui->chkDynWrapAtStaticMarker->setEnabled(cbx->isChecked());
775 ui->chkDynWrapAnywhere->setEnabled(cbx->isChecked());
776 ui->cmbDynamicWordWrapIndicator->setEnabled(cbx->isChecked());
777 ui->sbDynamicWordWrapDepth->setEnabled(cbx->isChecked());
779#if QT_VERSION < QT_VERSION_CHECK(6, 7, 0)
782 connect(textareaUi->cbxWordWrap, &QCheckBox::checkStateChanged,
this, a);
785 auto b = [cbx = textareaUi->cbxIndentWrappedLines, sb = textareaUi->sbDynamicWordWrapDepth]() {
786 sb->setEnabled(cbx->isChecked());
789#if QT_VERSION < QT_VERSION_CHECK(6, 7, 0)
792 connect(textareaUi->cbxIndentWrappedLines, &QCheckBox::checkStateChanged,
this, b);
794 observeChanges(textareaUi->cbxIndentWrappedLines);
795 observeChanges(textareaUi->sbDynamicWordWrapDepth);
796 observeChanges(textareaUi->sliSetMarkerSize);
797 observeChanges(textareaUi->spacesComboBox);
799 observeChanges(bordersUi->chkIconBorder);
800 observeChanges(bordersUi->chkLineNumbers);
801 observeChanges(bordersUi->chkScrollbarMarks);
802 observeChanges(bordersUi->chkScrollbarMiniMap);
803 observeChanges(bordersUi->chkScrollbarMiniMapAll);
804 bordersUi->chkScrollbarMiniMapAll->hide();
805 observeChanges(bordersUi->chkScrollbarPreview);
806 observeChanges(bordersUi->chkShowFoldingMarkers);
807 observeChanges(bordersUi->chkShowFoldingPreview);
808 observeChanges(bordersUi->chkShowLineModification);
809 observeChanges(bordersUi->cmbShowScrollbars);
810 observeChanges(bordersUi->rbSortBookmarksByCreation);
811 observeChanges(bordersUi->rbSortBookmarksByPosition);
812 observeChanges(bordersUi->spBoxMiniMapWidth);
813 observeChanges(bordersUi->cmbFoldingArrowVisiblity);
816 observeChanges(statusBarUi->cbShowActiveDictionary);
817 observeChanges(statusBarUi->cbShowHighlightingMode);
818 observeChanges(statusBarUi->cbShowInputMode);
819 observeChanges(statusBarUi->cbShowLineColumn);
820 observeChanges(statusBarUi->cbShowTabSetting);
821 observeChanges(statusBarUi->cbShowEncoding);
822 observeChanges(statusBarUi->cbShowEOL);
825KateViewDefaultsConfig::~KateViewDefaultsConfig()
832void KateViewDefaultsConfig::apply()
843 KateDocumentConfig::global()->setMarkerSize(textareaUi->sliSetMarkerSize->value());
844 KateDocumentConfig::global()->setShowSpaces(KateDocumentConfig::WhitespaceRendering(textareaUi->spacesComboBox->currentIndex()));
845 KateDocumentConfig::global()->setShowTabs(textareaUi->chkShowTabs->isChecked());
847 KateRendererConfig::global()->setFont(textareaUi->kfontrequester->font());
848 KateRendererConfig::global()->setAnimateBracketMatching(textareaUi->chkAnimateBracketMatching->isChecked());
849 KateRendererConfig::global()->setShowIndentationLines(textareaUi->chkShowIndentationLines->isChecked());
850 KateRendererConfig::global()->setShowWholeBracketExpression(textareaUi->chkShowWholeBracketExpression->isChecked());
851 KateRendererConfig::global()->setLineHeightMultiplier(textareaUi->spbLineHeightMultiplier->value());
853 KateViewConfig::global()->setDynWordWrap(textareaUi->cbxWordWrap->isChecked());
854 KateViewConfig::global()->setShowWordCount(textareaUi->chkShowWordCount->isChecked());
855 KateViewConfig::global()->
setValue(KateViewConfig::BookmarkSorting, bordersUi->rbSortBookmarksByPosition->isChecked() ? 0 : 1);
856 if (!textareaUi->cbxIndentWrappedLines->isChecked()) {
857 KateViewConfig::global()->
setValue(KateViewConfig::DynWordWrapAlignIndent, 0);
859 KateViewConfig::global()->
setValue(KateViewConfig::DynWordWrapAlignIndent, textareaUi->sbDynamicWordWrapDepth->value());
861 KateViewConfig::global()->
setValue(KateViewConfig::DynWordWrapIndicators, textareaUi->cmbDynamicWordWrapIndicator->currentIndex());
862 KateViewConfig::global()->
setValue(KateViewConfig::DynWrapAnywhere, textareaUi->chkDynWrapAnywhere->isChecked());
863 KateViewConfig::global()->
setValue(KateViewConfig::DynWrapAtStaticMarker, textareaUi->chkDynWrapAtStaticMarker->isChecked());
864 KateViewConfig::global()->
setValue(KateViewConfig::FoldFirstLine, textareaUi->chkFoldFirstLine->isChecked());
865 KateViewConfig::global()->
setValue(KateViewConfig::ScrollBarMiniMapWidth, bordersUi->spBoxMiniMapWidth->value());
866 KateViewConfig::global()->
setValue(KateViewConfig::ShowBracketMatchPreview, textareaUi->chkShowBracketMatchPreview->isChecked());
867 KateViewConfig::global()->
setValue(KateViewConfig::ShowFoldingBar, bordersUi->chkShowFoldingMarkers->isChecked());
868 KateViewConfig::global()->
setValue(KateViewConfig::ShowFoldingPreview, bordersUi->chkShowFoldingPreview->isChecked());
869 KateViewConfig::global()->
setValue(KateViewConfig::ShowIconBar, bordersUi->chkIconBorder->isChecked());
870 KateViewConfig::global()->
setValue(KateViewConfig::ShowLineCount, textareaUi->chkShowLineCount->isChecked());
871 KateViewConfig::global()->
setValue(KateViewConfig::ShowLineModification, bordersUi->chkShowLineModification->isChecked());
872 KateViewConfig::global()->
setValue(KateViewConfig::ShowLineNumbers, bordersUi->chkLineNumbers->isChecked());
873 KateViewConfig::global()->
setValue(KateViewConfig::ShowScrollBarMarks, bordersUi->chkScrollbarMarks->isChecked());
874 KateViewConfig::global()->
setValue(KateViewConfig::ShowScrollBarMiniMap, bordersUi->chkScrollbarMiniMap->isChecked());
875 KateViewConfig::global()->
setValue(KateViewConfig::ShowScrollBarMiniMapAll, bordersUi->chkScrollbarMiniMapAll->isChecked());
876 KateViewConfig::global()->
setValue(KateViewConfig::ShowScrollBarPreview, bordersUi->chkScrollbarPreview->isChecked());
877 KateViewConfig::global()->
setValue(KateViewConfig::ShowScrollbars, bordersUi->cmbShowScrollbars->currentIndex());
878 bool showOnHoverOnly = bordersUi->cmbFoldingArrowVisiblity->currentIndex() == 0;
879 KateViewConfig::global()->
setValue(KateViewConfig::ShowFoldingOnHoverOnly, showOnHoverOnly);
882 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarDictionary, statusBarUi->cbShowActiveDictionary->isChecked());
883 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarHighlightingMode, statusBarUi->cbShowHighlightingMode->isChecked());
884 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarInputMode, statusBarUi->cbShowInputMode->isChecked());
885 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarLineColumn, statusBarUi->cbShowLineColumn->isChecked());
886 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarTabSettings, statusBarUi->cbShowTabSetting->isChecked());
887 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarFileEncoding, statusBarUi->cbShowEncoding->isChecked());
888 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarEOL, statusBarUi->cbShowEOL->isChecked());
890 KateRendererConfig::global()->
configEnd();
894void KateViewDefaultsConfig::reload()
896 bordersUi->chkIconBorder->setChecked(KateViewConfig::global()->iconBar());
897 bordersUi->chkLineNumbers->setChecked(KateViewConfig::global()->lineNumbers());
898 bordersUi->chkScrollbarMarks->setChecked(KateViewConfig::global()->scrollBarMarks());
899 bordersUi->chkScrollbarMiniMap->setChecked(KateViewConfig::global()->scrollBarMiniMap());
900 bordersUi->chkScrollbarMiniMapAll->setChecked(KateViewConfig::global()->scrollBarMiniMapAll());
901 bordersUi->chkScrollbarPreview->setChecked(KateViewConfig::global()->scrollBarPreview());
902 bordersUi->chkShowFoldingMarkers->setChecked(KateViewConfig::global()->foldingBar());
903 bordersUi->chkShowFoldingPreview->setChecked(KateViewConfig::global()->foldingPreview());
904 bordersUi->chkShowLineModification->setChecked(KateViewConfig::global()->lineModification());
905 bordersUi->cmbShowScrollbars->setCurrentIndex(KateViewConfig::global()->showScrollbars());
906 bordersUi->rbSortBookmarksByCreation->setChecked(KateViewConfig::global()->bookmarkSort() == 1);
907 bordersUi->rbSortBookmarksByPosition->setChecked(KateViewConfig::global()->bookmarkSort() == 0);
908 bordersUi->spBoxMiniMapWidth->setValue(KateViewConfig::global()->scrollBarMiniMapWidth());
909 bordersUi->cmbFoldingArrowVisiblity->setCurrentIndex(KateViewConfig::global()->showFoldingOnHoverOnly() ? 0 : 1);
911 textareaUi->kfontrequester->setFont(KateRendererConfig::global()->baseFont());
913 textareaUi->chkAnimateBracketMatching->setChecked(KateRendererConfig::global()->animateBracketMatching());
914 textareaUi->chkDynWrapAnywhere->setChecked(KateViewConfig::global()->dynWrapAnywhere());
915 textareaUi->chkDynWrapAtStaticMarker->setChecked(KateViewConfig::global()->dynWrapAtStaticMarker());
916 textareaUi->chkFoldFirstLine->setChecked(KateViewConfig::global()->foldFirstLine());
917 textareaUi->chkShowBracketMatchPreview->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowBracketMatchPreview).toBool());
918 textareaUi->chkShowIndentationLines->setChecked(KateRendererConfig::global()->showIndentationLines());
919 textareaUi->chkShowLineCount->setChecked(KateViewConfig::global()->showLineCount());
920 textareaUi->chkShowTabs->setChecked(KateDocumentConfig::global()->showTabs());
921 textareaUi->chkShowWholeBracketExpression->setChecked(KateRendererConfig::global()->showWholeBracketExpression());
922 textareaUi->chkShowWordCount->setChecked(KateViewConfig::global()->showWordCount());
923 textareaUi->cmbDynamicWordWrapIndicator->setCurrentIndex(KateViewConfig::global()->dynWordWrapIndicators());
924 textareaUi->cbxWordWrap->setChecked(KateViewConfig::global()->dynWordWrap());
925 textareaUi->cbxIndentWrappedLines->setChecked(KateViewConfig::global()->dynWordWrapAlignIndent() != 0);
926 textareaUi->sbDynamicWordWrapDepth->setValue(KateViewConfig::global()->dynWordWrapAlignIndent());
927 textareaUi->sliSetMarkerSize->setValue(KateDocumentConfig::global()->markerSize());
928 textareaUi->spacesComboBox->setCurrentIndex(KateDocumentConfig::global()->showSpaces());
929 textareaUi->spbLineHeightMultiplier->setValue(KateRendererConfig::global()->lineHeightMultiplier());
931 statusBarUi->cbShowLineColumn->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarLineColumn).toBool());
932 statusBarUi->cbShowActiveDictionary->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarDictionary).toBool());
933 statusBarUi->cbShowTabSetting->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarTabSettings).toBool());
934 statusBarUi->cbShowHighlightingMode->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarHighlightingMode).toBool());
935 statusBarUi->cbShowInputMode->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarInputMode).toBool());
936 statusBarUi->cbShowEncoding->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarFileEncoding).toBool());
937 statusBarUi->cbShowEOL->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarEOL).toBool());
940void KateViewDefaultsConfig::reset()
944void KateViewDefaultsConfig::defaults()
948QString KateViewDefaultsConfig::name()
const
950 return i18n(
"Appearance");
953QString KateViewDefaultsConfig::fullName()
const
955 return i18n(
"Appearance");
958QIcon KateViewDefaultsConfig::icon()
const
966KateSaveConfigTab::KateSaveConfigTab(
QWidget *parent)
967 : KateConfigPage(parent)
968 , modeConfigPage(new ModeConfigPage(this))
981 ui =
new Ui::OpenSaveConfigWidget();
982 ui->setupUi(newWidget);
987 uiadv =
new Ui::OpenSaveConfigAdvWidget();
988 uiadv->setupUi(newWidget2);
989 uiadv->lblExplanatory->setText(
990 i18n(
"%1 backs up unsaved files to \"swap files.\" Swap files allow %1 to recover your work in the case of a system crash. Disabling swap files may "
991 "cause data loss in case of a system crash.",
999 observeChanges(ui->cbRemoveTrailingSpaces);
1000 observeChanges(ui->chkDetectEOL);
1001 observeChanges(ui->chkEnableBOM);
1002 observeChanges(ui->chkNewLineAtEof);
1003 observeChanges(ui->cmbEOL);
1004 observeChanges(ui->cmbEncoding);
1005 observeChanges(ui->cmbEncodingDetection);
1006 observeChanges(ui->cmbEncodingFallback);
1007 observeChanges(ui->lineLengthLimit);
1008 observeChanges(ui->gbAutoSave);
1009 observeChanges(ui->cbAutoSaveOnFocus);
1010 observeChanges(ui->spbAutoSaveInterval);
1012 observeChanges(uiadv->chkAutoReloadVersionControl);
1014 observeChanges(uiadv->chkBackupLocalFiles);
1015 observeChanges(uiadv->chkBackupRemoteFiles);
1016 observeChanges(uiadv->cmbSwapFileMode);
1019 observeChanges(uiadv->edtBackupPrefix);
1020 observeChanges(uiadv->edtBackupSuffix);
1021 observeChanges(uiadv->kurlSwapDirectory);
1022 observeChanges(uiadv->spbSwapFileSync);
1023 observeChanges(uiadv->chkEditorConfig);
1031 tabWidget->
insertTab(2, modeConfigPage, modeConfigPage->name());
1033 observeChanges(modeConfigPage);
1039 {QStringLiteral(
"Date:Locale"),
1040 QStringLiteral(
"Date:ISO"),
1041 QStringLiteral(
"Date:"),
1042 QStringLiteral(
"Time:Locale"),
1043 QStringLiteral(
"Time:ISO"),
1044 QStringLiteral(
"Time:"),
1045 QStringLiteral(
"ENV:"),
1046 QStringLiteral(
"JS:"),
1047 QStringLiteral(
"UUID")});
1050KateSaveConfigTab::~KateSaveConfigTab()
1056void KateSaveConfigTab::swapFileModeChanged(
int idx)
1058 const KateDocumentConfig::SwapFileMode mode =
static_cast<KateDocumentConfig::SwapFileMode
>(idx);
1060 case KateDocumentConfig::DisableSwapFile:
1061 uiadv->lblSwapDirectory->setEnabled(
false);
1062 uiadv->kurlSwapDirectory->setEnabled(
false);
1063 uiadv->lblSwapFileSync->setEnabled(
false);
1064 uiadv->spbSwapFileSync->setEnabled(
false);
1066 case KateDocumentConfig::EnableSwapFile:
1067 uiadv->lblSwapDirectory->setEnabled(
false);
1068 uiadv->kurlSwapDirectory->setEnabled(
false);
1069 uiadv->lblSwapFileSync->setEnabled(
true);
1070 uiadv->spbSwapFileSync->setEnabled(
true);
1072 case KateDocumentConfig::SwapFilePresetDirectory:
1073 uiadv->lblSwapDirectory->setEnabled(
true);
1074 uiadv->kurlSwapDirectory->setEnabled(
true);
1075 uiadv->lblSwapFileSync->setEnabled(
true);
1076 uiadv->spbSwapFileSync->setEnabled(
true);
1081void KateSaveConfigTab::apply()
1083 modeConfigPage->apply();
1086 if (!hasChanged()) {
1094 if (uiadv->edtBackupSuffix->text().isEmpty() && uiadv->edtBackupPrefix->text().isEmpty()) {
1096 uiadv->edtBackupSuffix->setText(QStringLiteral(
"~"));
1099 KateDocumentConfig::global()->setBackupOnSaveLocal(uiadv->chkBackupLocalFiles->isChecked());
1100 KateDocumentConfig::global()->setBackupOnSaveRemote(uiadv->chkBackupRemoteFiles->isChecked());
1101 KateDocumentConfig::global()->setBackupPrefix(uiadv->edtBackupPrefix->text());
1102 KateDocumentConfig::global()->setBackupSuffix(uiadv->edtBackupSuffix->text());
1104 KateDocumentConfig::global()->setSwapFileMode(uiadv->cmbSwapFileMode->currentIndex());
1105 KateDocumentConfig::global()->setSwapDirectory(uiadv->kurlSwapDirectory->url().toLocalFile());
1106 KateDocumentConfig::global()->setSwapSyncInterval(uiadv->spbSwapFileSync->value());
1108 KateDocumentConfig::global()->setRemoveSpaces(ui->cbRemoveTrailingSpaces->currentIndex());
1110 KateDocumentConfig::global()->setNewLineAtEof(ui->chkNewLineAtEof->isChecked());
1113 KateDocumentConfig::global()->setEncoding(
KCharsets::charsets()->encodingForName(ui->cmbEncoding->currentText()));
1115 KateGlobalConfig::global()->
setValue(KateGlobalConfig::EncodingProberType, (KEncodingProber::ProberType)ui->cmbEncodingDetection->currentIndex());
1116 KateGlobalConfig::global()->setFallbackEncoding(
KCharsets::charsets()->encodingForName(ui->cmbEncodingFallback->currentText()));
1118 KateDocumentConfig::global()->setEol(ui->cmbEOL->currentIndex());
1119 KateDocumentConfig::global()->setAllowEolDetection(ui->chkDetectEOL->isChecked());
1120 KateDocumentConfig::global()->setBom(ui->chkEnableBOM->isChecked());
1122 KateDocumentConfig::global()->setLineLengthLimit(ui->lineLengthLimit->value());
1124 KateDocumentConfig::global()->
setValue(KateDocumentConfig::AutoSave, ui->gbAutoSave->isChecked());
1125 KateDocumentConfig::global()->
setValue(KateDocumentConfig::AutoSaveOnFocusOut, ui->cbAutoSaveOnFocus->isChecked());
1126 KateDocumentConfig::global()->
setValue(KateDocumentConfig::AutoSaveInteral, ui->spbAutoSaveInterval->value());
1128 KateDocumentConfig::global()->
setValue(KateDocumentConfig::AutoReloadIfStateIsInVersionControl, uiadv->chkAutoReloadVersionControl->isChecked());
1129 KateDocumentConfig::global()->
setValue(KateDocumentConfig::UseEditorConfig, uiadv->chkEditorConfig->isChecked());
1131 KateDocumentConfig::global()->
configEnd();
1132 KateGlobalConfig::global()->
configEnd();
1135void KateSaveConfigTab::reload()
1137 modeConfigPage->reload();
1140 ui->cmbEncoding->clear();
1141 ui->cmbEncodingFallback->clear();
1143 for (
int i = 0; i < encodings.count(); i++) {
1146 ui->cmbEncoding->addItem(encodings[i]);
1147 ui->cmbEncodingFallback->addItem(encodings[i]);
1149 if (encodingName == KateDocumentConfig::global()->encoding()) {
1150 ui->cmbEncoding->setCurrentIndex(i);
1153 if (encodingName == KateGlobalConfig::global()->fallbackEncoding()) {
1155 ui->cmbEncodingFallback->setCurrentIndex(i);
1160 ui->cmbEncodingDetection->clear();
1162 const auto proberType = (KEncodingProber::ProberType)KateGlobalConfig::global()->value(KateGlobalConfig::EncodingProberType).toInt();
1165 if (i == proberType) {
1166 ui->cmbEncodingDetection->setCurrentIndex(ui->cmbEncodingDetection->count() - 1);
1171 ui->cmbEncodingDetection->setCurrentIndex(KEncodingProber::Universal);
1175 ui->cmbEOL->setCurrentIndex(KateDocumentConfig::global()->eol());
1176 ui->chkDetectEOL->setChecked(KateDocumentConfig::global()->allowEolDetection());
1177 ui->chkEnableBOM->setChecked(KateDocumentConfig::global()->
bom());
1178 ui->lineLengthLimit->setValue(KateDocumentConfig::global()->lineLengthLimit());
1180 ui->cbRemoveTrailingSpaces->setCurrentIndex(KateDocumentConfig::global()->removeSpaces());
1181 ui->chkNewLineAtEof->setChecked(KateDocumentConfig::global()->newLineAtEof());
1184 uiadv->chkBackupLocalFiles->setChecked(KateDocumentConfig::global()->backupOnSaveLocal());
1185 uiadv->chkBackupRemoteFiles->setChecked(KateDocumentConfig::global()->backupOnSaveRemote());
1186 uiadv->edtBackupPrefix->setText(KateDocumentConfig::global()->backupPrefix());
1187 uiadv->edtBackupSuffix->setText(KateDocumentConfig::global()->backupSuffix());
1189 uiadv->cmbSwapFileMode->setCurrentIndex(KateDocumentConfig::global()->swapFileMode());
1190 uiadv->kurlSwapDirectory->setUrl(
QUrl::fromLocalFile(KateDocumentConfig::global()->swapDirectory()));
1191 uiadv->spbSwapFileSync->setValue(KateDocumentConfig::global()->swapSyncInterval());
1192 swapFileModeChanged(KateDocumentConfig::global()->swapFileMode());
1194 ui->gbAutoSave->setChecked(KateDocumentConfig::global()->autoSave());
1195 ui->cbAutoSaveOnFocus->setChecked(KateDocumentConfig::global()->autoSaveOnFocusOut());
1196 ui->spbAutoSaveInterval->setValue(KateDocumentConfig::global()->autoSaveInterval());
1198 uiadv->chkAutoReloadVersionControl->setChecked(KateDocumentConfig::global()->value(KateDocumentConfig::AutoReloadIfStateIsInVersionControl).toBool());
1199 uiadv->chkEditorConfig->setChecked(KateDocumentConfig::global()->value(KateDocumentConfig::UseEditorConfig).toBool());
1202void KateSaveConfigTab::reset()
1204 modeConfigPage->reset();
1207void KateSaveConfigTab::defaults()
1209 modeConfigPage->defaults();
1211 ui->cbRemoveTrailingSpaces->setCurrentIndex(0);
1213 uiadv->chkBackupLocalFiles->setChecked(
true);
1214 uiadv->chkBackupRemoteFiles->setChecked(
false);
1215 uiadv->edtBackupPrefix->setText(QString());
1216 uiadv->edtBackupSuffix->setText(QStringLiteral(
"~"));
1218 uiadv->cmbSwapFileMode->setCurrentIndex(1);
1219 uiadv->kurlSwapDirectory->setDisabled(
true);
1220 uiadv->lblSwapDirectory->setDisabled(
true);
1221 uiadv->spbSwapFileSync->setValue(15);
1224QString KateSaveConfigTab::name()
const
1226 return i18n(
"Open/Save");
1229QString KateSaveConfigTab::fullName()
const
1231 return i18n(
"File Opening & Saving");
1234QIcon KateSaveConfigTab::icon()
const
1243 : KateViewBarWidget(true, parent)
1246 Q_ASSERT(m_view !=
nullptr);
1284 btn->
setDefaultAction(m_view->action(QStringLiteral(
"modified_line_down")));
1292 setFocusProxy(m_gotoRange);
1295void KateGotoBar::showEvent(
QShowEvent *event)
1302void KateGotoBar::closed()
1307bool KateGotoBar::eventFilter(
QObject *
object,
QEvent *event)
1309 if (
object == m_modifiedUp ||
object == m_modifiedDown) {
1314 int delta =
static_cast<QWheelEvent *
>(
event)->angleDelta().y();
1316 if (m_wheelDelta != 0 && (m_wheelDelta < 0) != (delta < 0)) {
1320 m_wheelDelta += delta;
1322 if (m_wheelDelta >= 120) {
1324 m_modifiedUp->click();
1325 }
else if (m_wheelDelta <= -120) {
1327 m_modifiedDown->click();
1334void KateGotoBar::gotoClipboard()
1336 static const QRegularExpression rx(QStringLiteral(
"-?\\d+"));
1342 if (lineNo >= m_gotoRange->minimum() && lineNo <= m_gotoRange->maximum()) {
1343 m_gotoRange->setValue(lineNo);
1346 QPointer<KTextEditor::Message> message =
new KTextEditor::Message(
i18n(
"No valid line number found in clipboard"));
1347 message->setWordWrap(
true);
1348 message->setAutoHide(2000);
1350 message->setView(m_view), m_view->document()->postMessage(message);
1354void KateGotoBar::updateData()
1356 int lines = m_view->document()->lines();
1357 m_gotoRange->setMinimum(-lines);
1358 m_gotoRange->setMaximum(lines);
1360 m_gotoRange->setValue(m_view->cursorPosition().line() + 1);
1361 m_gotoRange->adjustSize();
1364 m_gotoRange->selectAll();
1367void KateGotoBar::keyPressEvent(
QKeyEvent *event)
1369 int key =
event->key();
1377void KateGotoBar::gotoLine()
1380 if (kv && kv->selection() && !kv->config()->persistentSelection()) {
1381 kv->clearSelection();
1384 int gotoValue = m_gotoRange->value();
1385 if (gotoValue < 0) {
1386 gotoValue += m_view->document()->lines();
1387 }
else if (gotoValue > 0) {
1391 m_view->setCursorPosition(KTextEditor::Cursor(gotoValue, 0));
1398KateDictionaryBar::KateDictionaryBar(KTextEditor::ViewPrivate *view,
QWidget *parent)
1399 : KateViewBarWidget(true, parent)
1402 Q_ASSERT(m_view !=
nullptr);
1409 connect(view->doc(), &KTextEditor::DocumentPrivate::defaultDictionaryChanged,
this, &KateDictionaryBar::updateData);
1411 label->setBuddy(m_dictionaryComboBox);
1414 topLayout->
addWidget(m_dictionaryComboBox, 1);
1419KateDictionaryBar::~KateDictionaryBar()
1423void KateDictionaryBar::updateData()
1425 KTextEditor::DocumentPrivate *document = m_view->doc();
1426 QString dictionary = document->defaultDictionary();
1428 dictionary = Sonnet::Speller().defaultLanguage();
1430 m_dictionaryComboBox->setCurrentByDictionary(dictionary);
1433void KateDictionaryBar::dictionaryChanged(
const QString &dictionary)
1435 const KTextEditor::Range selection = m_view->selectionRange();
1437 const bool blockmode = m_view->blockSelection();
1438 m_view->doc()->setDictionary(dictionary, selection, blockmode);
1440 m_view->doc()->setDefaultDictionary(dictionary);
1451 , m_fullDiffPath(
QStandardPaths::findExecutable(QStringLiteral(
"diff")))
1453 , m_diffFile(nullptr)
1454 , m_diffAction(nullptr)
1457 m_message->setWordWrap(
true);
1461 if (!onDiskDeleted) {
1465 i18n(
"Reloads and will automatically reload without warning about disk changes from now until you close either the tab or window."));
1466 m_message->addAction(aAutoReload,
false);
1467 connect(aAutoReload, &
QAction::triggered,
this, &KateModOnHdPrompt::autoReloadTriggered);
1469 if (!m_fullDiffPath.isEmpty()) {
1470 m_diffAction =
new QAction(
i18n(
"View &Difference"),
this);
1471 m_diffAction->setIcon(
QIcon::fromTheme(QStringLiteral(
"document-multiple")));
1472 m_diffAction->setToolTip(
i18n(
"Shows a diff of the changes."));
1473 m_message->addAction(m_diffAction,
false);
1479 aReload->
setToolTip(
i18n(
"Reloads the file from disk. Unsaved changes will be lost."));
1480 m_message->addAction(aReload);
1483 QAction *closeFile =
new QAction(
i18nc(
"@action:button closes the opened file",
"&Close File"),
this);
1485 closeFile->
setToolTip(
i18n(
"Closes the file, discarding its content."));
1486 m_message->addAction(closeFile,
false);
1489 auto *aSaveAs =
new QAction(
i18nc(
"@action",
"&Save As…"),
this);
1491 aSaveAs->setToolTip(
i18n(
"Lets you select a location and save the file again."));
1492 m_message->addAction(aSaveAs,
false);
1497 aIgnore->
setToolTip(
i18n(
"Ignores the changes on disk without any action."));
1499 m_message->addAction(aIgnore);
1502 m_doc->postMessage(m_message);
1505KateModOnHdPrompt::~KateModOnHdPrompt()
1510 m_diffFile->setAutoRemove(
true);
1512 m_diffFile =
nullptr;
1517void KateModOnHdPrompt::slotDiff()
1523 m_diffFile =
new QTemporaryFile(
QDir::temp().filePath(QLatin1String(
"XXXXXX.diff")));
1527 m_proc =
new KProcess(
this);
1529 *m_proc << m_fullDiffPath << QStringLiteral(
"-u") << QStringLiteral(
"-") << m_doc->url().toLocalFile();
1534 m_diffAction->setEnabled(
false);
1538 QTextStream ts(m_proc);
1539 int lastln = m_doc->lines() - 1;
1540 for (
int l = 0; l < lastln; ++l) {
1541 ts << m_doc->line(l) <<
'\n';
1543 ts << m_doc->line(lastln);
1545 m_proc->closeWriteChannel();
1548void KateModOnHdPrompt::slotDataAvailable()
1550 m_diffFile->write(m_proc->readAll());
1553void KateModOnHdPrompt::slotPDone()
1555 m_diffAction->setEnabled(
true);
1563 i18n(
"The diff command failed. Please make sure that "
1564 "diff(1) is installed and in your PATH."),
1565 i18n(
"Error Creating Diff"));
1567 m_diffFile =
nullptr;
1571 if (m_diffFile->size() == 0) {
1574 m_diffFile =
nullptr;
1578 m_diffFile->setAutoRemove(
false);
1581 m_diffFile =
nullptr;
1583 KIO::OpenUrlJob *job =
new KIO::OpenUrlJob(url, QStringLiteral(
"text/x-patch"));
1591#include "moc_katedialogs.cpp"
QString encodingForName(const QString &descriptiveName) const
static KCharsets * charsets()
static QString nameForProberType(ProberType proberType)
void setDeleteTemporaryFile(bool b)
void setUiDelegate(KJobUiDelegate *delegate)
virtual void apply()=0
This slot is called whenever the button Apply or OK was clicked.
virtual void reset()=0
This slot is called whenever the button Reset was clicked.
virtual QString name() const =0
Get a readable name for the config page.
virtual void defaults()=0
Sets default options This slot is called whenever the button Defaults was clicked.
Backend of KTextEditor::Document related public KTextEditor interfaces.
void textChanged(KTextEditor::Document *document)
The document emits this signal whenever its text changes.
ModifiedOnDiskReason
Reasons why a document is modified on disk.
@ OnDiskDeleted
The file was deleted or moved on disk.
static KTextEditor::EditorPrivate * self()
Kate Part Internal stuff ;)
QList< KTextEditor::Document * > documents() override
Returns a list of all documents of this editor.
static Editor * instance()
Accessor to get the Editor instance.
void addVariableExpansion(const QList< QWidget * > &widgets, const QStringList &variables=QStringList()) const
Adds a QAction to the widget in widgets that whenever focus is gained.
@ AboveView
show message above view.
@ BottomInView
show message as view overlay in the bottom right corner.
constexpr bool isEmpty() const noexcept
Returns true if this range contains no characters, ie.
constexpr bool isValid() const noexcept
Validity check.
A text widget with KXMLGUIClient that represents a Document.
static uint modeNumber(const QString &name)
Maps name -> index.
const QString & modeName() const
mode name
static QStringList listModes()
List all possible modes by name, i.e.
void configEnd()
End a config change transaction, update the concerned KateDocumentConfig/KateDocumentConfig/KateDocum...
void configStart()
Start some config changes.
bool setValue(const int key, const QVariant &value)
Set a config value.
QVariant value(const int key) const
Get a config value.
void dictionaryChanged(const QString &dictionary)
KLocalizedString KI18N_EXPORT ki18np(const char *singular, const char *plural)
QString i18nc(const char *context, const char *text, const TYPE &arg...)
KLocalizedString KI18N_EXPORT ki18ncp(const char *context, const char *singular, const char *plural)
QString i18n(const char *text, const TYPE &arg...)
KIOCORE_EXPORT KJobUiDelegate * createDefaultJobUiDelegate()
void setupSpinBoxFormatString(T *spinBox, const KLocalizedString &formatString)
void information(QWidget *parent, const QString &text, const QString &title=QString(), const QString &dontShowAgainName=QString(), Options options=Notify)
void error(QWidget *parent, const QString &text, const QString &title, const KGuiItem &buttonOk, Options options=Notify)
const QList< QKeySequence > & reload()
QString label(StandardShortcut id)
The KTextEditor namespace contains all the public API that is required to use the KTextEditor compone...
void setText(const QString &text)
void setIcon(const QIcon &icon)
void triggered(bool checked)
void addStretch(int stretch)
bool setStretchFactor(QLayout *layout, int stretch)
void stateChanged(int state)
void currentIndexChanged(int index)
QFont systemFont(SystemFont type)
QIcon fromTheme(const QString &name)
void linkActivated(const QString &link)
void setContentsMargins(const QMargins &margins)
void append(QList< T > &&value)
const_reference at(qsizetype i) const const
qsizetype size() const const
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
bool disconnect(const QMetaObject::Connection &connection)
virtual bool event(QEvent *e)
void installEventFilter(QObject *filterObj)
T qobject_cast(QObject *object)
void finished(int exitCode, QProcess::ExitStatus exitStatus)
bool isEmpty() const const
typedef KeyboardModifiers
QTextStream & bom(QTextStream &stream)
QUrl fromLocalFile(const QString &localFile)
QStringList toStringList() const const
void showText(const QPoint &pos, const QString &text, QWidget *w)