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 connect(textareaUi->cbxWordWrap, &QCheckBox::checkStateChanged,
this, a);
781 auto b = [cbx = textareaUi->cbxIndentWrappedLines, sb = textareaUi->sbDynamicWordWrapDepth]() {
782 sb->setEnabled(cbx->isChecked());
785 connect(textareaUi->cbxIndentWrappedLines, &QCheckBox::checkStateChanged,
this, b);
786 observeChanges(textareaUi->cbxIndentWrappedLines);
787 observeChanges(textareaUi->sbDynamicWordWrapDepth);
788 observeChanges(textareaUi->sliSetMarkerSize);
789 observeChanges(textareaUi->spacesComboBox);
791 observeChanges(bordersUi->chkIconBorder);
792 observeChanges(bordersUi->chkLineNumbers);
793 observeChanges(bordersUi->chkScrollbarMarks);
794 observeChanges(bordersUi->chkScrollbarMiniMap);
795 observeChanges(bordersUi->chkScrollbarMiniMapAll);
796 bordersUi->chkScrollbarMiniMapAll->hide();
797 observeChanges(bordersUi->chkScrollbarPreview);
798 observeChanges(bordersUi->chkShowFoldingMarkers);
799 observeChanges(bordersUi->chkShowFoldingPreview);
800 observeChanges(bordersUi->chkShowLineModification);
801 observeChanges(bordersUi->cmbShowScrollbars);
802 observeChanges(bordersUi->rbSortBookmarksByCreation);
803 observeChanges(bordersUi->rbSortBookmarksByPosition);
804 observeChanges(bordersUi->spBoxMiniMapWidth);
805 observeChanges(bordersUi->cmbFoldingArrowVisiblity);
808 observeChanges(statusBarUi->cbShowActiveDictionary);
809 observeChanges(statusBarUi->cbShowHighlightingMode);
810 observeChanges(statusBarUi->cbShowInputMode);
811 observeChanges(statusBarUi->cbShowLineColumn);
812 observeChanges(statusBarUi->cbShowTabSetting);
813 observeChanges(statusBarUi->cbShowEncoding);
814 observeChanges(statusBarUi->cbShowEOL);
817KateViewDefaultsConfig::~KateViewDefaultsConfig()
824void KateViewDefaultsConfig::apply()
835 KateDocumentConfig::global()->setMarkerSize(textareaUi->sliSetMarkerSize->value());
836 KateDocumentConfig::global()->setShowSpaces(KateDocumentConfig::WhitespaceRendering(textareaUi->spacesComboBox->currentIndex()));
837 KateDocumentConfig::global()->setShowTabs(textareaUi->chkShowTabs->isChecked());
839 KateRendererConfig::global()->setFont(textareaUi->kfontrequester->font());
840 KateRendererConfig::global()->setAnimateBracketMatching(textareaUi->chkAnimateBracketMatching->isChecked());
841 KateRendererConfig::global()->setShowIndentationLines(textareaUi->chkShowIndentationLines->isChecked());
842 KateRendererConfig::global()->setShowWholeBracketExpression(textareaUi->chkShowWholeBracketExpression->isChecked());
843 KateRendererConfig::global()->setLineHeightMultiplier(textareaUi->spbLineHeightMultiplier->value());
845 KateViewConfig::global()->setDynWordWrap(textareaUi->cbxWordWrap->isChecked());
846 KateViewConfig::global()->setShowWordCount(textareaUi->chkShowWordCount->isChecked());
847 KateViewConfig::global()->
setValue(KateViewConfig::BookmarkSorting, bordersUi->rbSortBookmarksByPosition->isChecked() ? 0 : 1);
848 if (!textareaUi->cbxIndentWrappedLines->isChecked()) {
849 KateViewConfig::global()->
setValue(KateViewConfig::DynWordWrapAlignIndent, 0);
851 KateViewConfig::global()->
setValue(KateViewConfig::DynWordWrapAlignIndent, textareaUi->sbDynamicWordWrapDepth->value());
853 KateViewConfig::global()->
setValue(KateViewConfig::DynWordWrapIndicators, textareaUi->cmbDynamicWordWrapIndicator->currentIndex());
854 KateViewConfig::global()->
setValue(KateViewConfig::DynWrapAnywhere, textareaUi->chkDynWrapAnywhere->isChecked());
855 KateViewConfig::global()->
setValue(KateViewConfig::DynWrapAtStaticMarker, textareaUi->chkDynWrapAtStaticMarker->isChecked());
856 KateViewConfig::global()->
setValue(KateViewConfig::FoldFirstLine, textareaUi->chkFoldFirstLine->isChecked());
857 KateViewConfig::global()->
setValue(KateViewConfig::ScrollBarMiniMapWidth, bordersUi->spBoxMiniMapWidth->value());
858 KateViewConfig::global()->
setValue(KateViewConfig::ShowBracketMatchPreview, textareaUi->chkShowBracketMatchPreview->isChecked());
859 KateViewConfig::global()->
setValue(KateViewConfig::ShowFoldingBar, bordersUi->chkShowFoldingMarkers->isChecked());
860 KateViewConfig::global()->
setValue(KateViewConfig::ShowFoldingPreview, bordersUi->chkShowFoldingPreview->isChecked());
861 KateViewConfig::global()->
setValue(KateViewConfig::ShowIconBar, bordersUi->chkIconBorder->isChecked());
862 KateViewConfig::global()->
setValue(KateViewConfig::ShowLineCount, textareaUi->chkShowLineCount->isChecked());
863 KateViewConfig::global()->
setValue(KateViewConfig::ShowLineModification, bordersUi->chkShowLineModification->isChecked());
864 KateViewConfig::global()->
setValue(KateViewConfig::ShowLineNumbers, bordersUi->chkLineNumbers->isChecked());
865 KateViewConfig::global()->
setValue(KateViewConfig::ShowScrollBarMarks, bordersUi->chkScrollbarMarks->isChecked());
866 KateViewConfig::global()->
setValue(KateViewConfig::ShowScrollBarMiniMap, bordersUi->chkScrollbarMiniMap->isChecked());
867 KateViewConfig::global()->
setValue(KateViewConfig::ShowScrollBarMiniMapAll, bordersUi->chkScrollbarMiniMapAll->isChecked());
868 KateViewConfig::global()->
setValue(KateViewConfig::ShowScrollBarPreview, bordersUi->chkScrollbarPreview->isChecked());
869 KateViewConfig::global()->
setValue(KateViewConfig::ShowScrollbars, bordersUi->cmbShowScrollbars->currentIndex());
870 bool showOnHoverOnly = bordersUi->cmbFoldingArrowVisiblity->currentIndex() == 0;
871 KateViewConfig::global()->
setValue(KateViewConfig::ShowFoldingOnHoverOnly, showOnHoverOnly);
874 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarDictionary, statusBarUi->cbShowActiveDictionary->isChecked());
875 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarHighlightingMode, statusBarUi->cbShowHighlightingMode->isChecked());
876 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarInputMode, statusBarUi->cbShowInputMode->isChecked());
877 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarLineColumn, statusBarUi->cbShowLineColumn->isChecked());
878 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarTabSettings, statusBarUi->cbShowTabSetting->isChecked());
879 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarFileEncoding, statusBarUi->cbShowEncoding->isChecked());
880 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarEOL, statusBarUi->cbShowEOL->isChecked());
882 KateRendererConfig::global()->
configEnd();
886void KateViewDefaultsConfig::reload()
888 bordersUi->chkIconBorder->setChecked(KateViewConfig::global()->iconBar());
889 bordersUi->chkLineNumbers->setChecked(KateViewConfig::global()->lineNumbers());
890 bordersUi->chkScrollbarMarks->setChecked(KateViewConfig::global()->scrollBarMarks());
891 bordersUi->chkScrollbarMiniMap->setChecked(KateViewConfig::global()->scrollBarMiniMap());
892 bordersUi->chkScrollbarMiniMapAll->setChecked(KateViewConfig::global()->scrollBarMiniMapAll());
893 bordersUi->chkScrollbarPreview->setChecked(KateViewConfig::global()->scrollBarPreview());
894 bordersUi->chkShowFoldingMarkers->setChecked(KateViewConfig::global()->foldingBar());
895 bordersUi->chkShowFoldingPreview->setChecked(KateViewConfig::global()->foldingPreview());
896 bordersUi->chkShowLineModification->setChecked(KateViewConfig::global()->lineModification());
897 bordersUi->cmbShowScrollbars->setCurrentIndex(KateViewConfig::global()->showScrollbars());
898 bordersUi->rbSortBookmarksByCreation->setChecked(KateViewConfig::global()->bookmarkSort() == 1);
899 bordersUi->rbSortBookmarksByPosition->setChecked(KateViewConfig::global()->bookmarkSort() == 0);
900 bordersUi->spBoxMiniMapWidth->setValue(KateViewConfig::global()->scrollBarMiniMapWidth());
901 bordersUi->cmbFoldingArrowVisiblity->setCurrentIndex(KateViewConfig::global()->showFoldingOnHoverOnly() ? 0 : 1);
903 textareaUi->kfontrequester->setFont(KateRendererConfig::global()->baseFont());
905 textareaUi->chkAnimateBracketMatching->setChecked(KateRendererConfig::global()->animateBracketMatching());
906 textareaUi->chkDynWrapAnywhere->setChecked(KateViewConfig::global()->dynWrapAnywhere());
907 textareaUi->chkDynWrapAtStaticMarker->setChecked(KateViewConfig::global()->dynWrapAtStaticMarker());
908 textareaUi->chkFoldFirstLine->setChecked(KateViewConfig::global()->foldFirstLine());
909 textareaUi->chkShowBracketMatchPreview->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowBracketMatchPreview).toBool());
910 textareaUi->chkShowIndentationLines->setChecked(KateRendererConfig::global()->showIndentationLines());
911 textareaUi->chkShowLineCount->setChecked(KateViewConfig::global()->showLineCount());
912 textareaUi->chkShowTabs->setChecked(KateDocumentConfig::global()->showTabs());
913 textareaUi->chkShowWholeBracketExpression->setChecked(KateRendererConfig::global()->showWholeBracketExpression());
914 textareaUi->chkShowWordCount->setChecked(KateViewConfig::global()->showWordCount());
915 textareaUi->cmbDynamicWordWrapIndicator->setCurrentIndex(KateViewConfig::global()->dynWordWrapIndicators());
916 textareaUi->cbxWordWrap->setChecked(KateViewConfig::global()->dynWordWrap());
917 textareaUi->cbxIndentWrappedLines->setChecked(KateViewConfig::global()->dynWordWrapAlignIndent() != 0);
918 textareaUi->sbDynamicWordWrapDepth->setValue(KateViewConfig::global()->dynWordWrapAlignIndent());
919 textareaUi->sliSetMarkerSize->setValue(KateDocumentConfig::global()->markerSize());
920 textareaUi->spacesComboBox->setCurrentIndex(KateDocumentConfig::global()->showSpaces());
921 textareaUi->spbLineHeightMultiplier->setValue(KateRendererConfig::global()->lineHeightMultiplier());
923 statusBarUi->cbShowLineColumn->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarLineColumn).toBool());
924 statusBarUi->cbShowActiveDictionary->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarDictionary).toBool());
925 statusBarUi->cbShowTabSetting->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarTabSettings).toBool());
926 statusBarUi->cbShowHighlightingMode->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarHighlightingMode).toBool());
927 statusBarUi->cbShowInputMode->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarInputMode).toBool());
928 statusBarUi->cbShowEncoding->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarFileEncoding).toBool());
929 statusBarUi->cbShowEOL->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarEOL).toBool());
932void KateViewDefaultsConfig::reset()
936void KateViewDefaultsConfig::defaults()
940QString KateViewDefaultsConfig::name()
const
942 return i18n(
"Appearance");
945QString KateViewDefaultsConfig::fullName()
const
947 return i18n(
"Appearance");
950QIcon KateViewDefaultsConfig::icon()
const
958KateSaveConfigTab::KateSaveConfigTab(
QWidget *parent)
959 : KateConfigPage(parent)
960 , modeConfigPage(new ModeConfigPage(this))
973 ui =
new Ui::OpenSaveConfigWidget();
974 ui->setupUi(newWidget);
979 uiadv =
new Ui::OpenSaveConfigAdvWidget();
980 uiadv->setupUi(newWidget2);
981 uiadv->lblExplanatory->setText(
982 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 "
983 "cause data loss in case of a system crash.",
991 observeChanges(ui->cbRemoveTrailingSpaces);
992 observeChanges(ui->chkDetectEOL);
993 observeChanges(ui->chkEnableBOM);
994 observeChanges(ui->chkNewLineAtEof);
995 observeChanges(ui->cmbEOL);
996 observeChanges(ui->cmbEncoding);
997 observeChanges(ui->cmbEncodingDetection);
998 observeChanges(ui->cmbEncodingFallback);
999 observeChanges(ui->lineLengthLimit);
1000 observeChanges(ui->gbAutoSave);
1001 observeChanges(ui->cbAutoSaveOnFocus);
1002 observeChanges(ui->spbAutoSaveInterval);
1004 observeChanges(uiadv->chkAutoReloadVersionControl);
1006 observeChanges(uiadv->chkBackupLocalFiles);
1007 observeChanges(uiadv->chkBackupRemoteFiles);
1008 observeChanges(uiadv->cmbSwapFileMode);
1011 observeChanges(uiadv->edtBackupPrefix);
1012 observeChanges(uiadv->edtBackupSuffix);
1013 observeChanges(uiadv->kurlSwapDirectory);
1014 observeChanges(uiadv->spbSwapFileSync);
1015 observeChanges(uiadv->chkEditorConfig);
1023 tabWidget->
insertTab(2, modeConfigPage, modeConfigPage->name());
1025 observeChanges(modeConfigPage);
1031 {QStringLiteral(
"Date:Locale"),
1032 QStringLiteral(
"Date:ISO"),
1033 QStringLiteral(
"Date:"),
1034 QStringLiteral(
"Time:Locale"),
1035 QStringLiteral(
"Time:ISO"),
1036 QStringLiteral(
"Time:"),
1037 QStringLiteral(
"ENV:"),
1038 QStringLiteral(
"JS:"),
1039 QStringLiteral(
"UUID")});
1042KateSaveConfigTab::~KateSaveConfigTab()
1048void KateSaveConfigTab::swapFileModeChanged(
int idx)
1050 const KateDocumentConfig::SwapFileMode mode =
static_cast<KateDocumentConfig::SwapFileMode
>(idx);
1052 case KateDocumentConfig::DisableSwapFile:
1053 uiadv->lblSwapDirectory->setEnabled(
false);
1054 uiadv->kurlSwapDirectory->setEnabled(
false);
1055 uiadv->lblSwapFileSync->setEnabled(
false);
1056 uiadv->spbSwapFileSync->setEnabled(
false);
1058 case KateDocumentConfig::EnableSwapFile:
1059 uiadv->lblSwapDirectory->setEnabled(
false);
1060 uiadv->kurlSwapDirectory->setEnabled(
false);
1061 uiadv->lblSwapFileSync->setEnabled(
true);
1062 uiadv->spbSwapFileSync->setEnabled(
true);
1064 case KateDocumentConfig::SwapFilePresetDirectory:
1065 uiadv->lblSwapDirectory->setEnabled(
true);
1066 uiadv->kurlSwapDirectory->setEnabled(
true);
1067 uiadv->lblSwapFileSync->setEnabled(
true);
1068 uiadv->spbSwapFileSync->setEnabled(
true);
1073void KateSaveConfigTab::apply()
1075 modeConfigPage->apply();
1078 if (!hasChanged()) {
1086 if (uiadv->edtBackupSuffix->text().isEmpty() && uiadv->edtBackupPrefix->text().isEmpty()) {
1088 uiadv->edtBackupSuffix->setText(QStringLiteral(
"~"));
1091 KateDocumentConfig::global()->setBackupOnSaveLocal(uiadv->chkBackupLocalFiles->isChecked());
1092 KateDocumentConfig::global()->setBackupOnSaveRemote(uiadv->chkBackupRemoteFiles->isChecked());
1093 KateDocumentConfig::global()->setBackupPrefix(uiadv->edtBackupPrefix->text());
1094 KateDocumentConfig::global()->setBackupSuffix(uiadv->edtBackupSuffix->text());
1096 KateDocumentConfig::global()->setSwapFileMode(uiadv->cmbSwapFileMode->currentIndex());
1097 KateDocumentConfig::global()->setSwapDirectory(uiadv->kurlSwapDirectory->url().toLocalFile());
1098 KateDocumentConfig::global()->setSwapSyncInterval(uiadv->spbSwapFileSync->value());
1100 KateDocumentConfig::global()->setRemoveSpaces(ui->cbRemoveTrailingSpaces->currentIndex());
1102 KateDocumentConfig::global()->setNewLineAtEof(ui->chkNewLineAtEof->isChecked());
1105 KateDocumentConfig::global()->setEncoding(
KCharsets::charsets()->encodingForName(ui->cmbEncoding->currentText()));
1107 KateGlobalConfig::global()->
setValue(KateGlobalConfig::EncodingProberType, (KEncodingProber::ProberType)ui->cmbEncodingDetection->currentIndex());
1108 KateGlobalConfig::global()->setFallbackEncoding(
KCharsets::charsets()->encodingForName(ui->cmbEncodingFallback->currentText()));
1110 KateDocumentConfig::global()->setEol(ui->cmbEOL->currentIndex());
1111 KateDocumentConfig::global()->setAllowEolDetection(ui->chkDetectEOL->isChecked());
1112 KateDocumentConfig::global()->setBom(ui->chkEnableBOM->isChecked());
1114 KateDocumentConfig::global()->setLineLengthLimit(ui->lineLengthLimit->value());
1116 KateDocumentConfig::global()->
setValue(KateDocumentConfig::AutoSave, ui->gbAutoSave->isChecked());
1117 KateDocumentConfig::global()->
setValue(KateDocumentConfig::AutoSaveOnFocusOut, ui->cbAutoSaveOnFocus->isChecked());
1118 KateDocumentConfig::global()->
setValue(KateDocumentConfig::AutoSaveInteral, ui->spbAutoSaveInterval->value());
1120 KateDocumentConfig::global()->
setValue(KateDocumentConfig::AutoReloadIfStateIsInVersionControl, uiadv->chkAutoReloadVersionControl->isChecked());
1121 KateDocumentConfig::global()->
setValue(KateDocumentConfig::UseEditorConfig, uiadv->chkEditorConfig->isChecked());
1123 KateDocumentConfig::global()->
configEnd();
1124 KateGlobalConfig::global()->
configEnd();
1127void KateSaveConfigTab::reload()
1129 modeConfigPage->reload();
1132 ui->cmbEncoding->clear();
1133 ui->cmbEncodingFallback->clear();
1135 for (
int i = 0; i < encodings.count(); i++) {
1138 ui->cmbEncoding->addItem(encodings[i]);
1139 ui->cmbEncodingFallback->addItem(encodings[i]);
1141 if (encodingName == KateDocumentConfig::global()->encoding()) {
1142 ui->cmbEncoding->setCurrentIndex(i);
1145 if (encodingName == KateGlobalConfig::global()->fallbackEncoding()) {
1147 ui->cmbEncodingFallback->setCurrentIndex(i);
1152 ui->cmbEncodingDetection->clear();
1154 const auto proberType = (KEncodingProber::ProberType)KateGlobalConfig::global()->value(KateGlobalConfig::EncodingProberType).toInt();
1157 if (i == proberType) {
1158 ui->cmbEncodingDetection->setCurrentIndex(ui->cmbEncodingDetection->count() - 1);
1163 ui->cmbEncodingDetection->setCurrentIndex(KEncodingProber::Universal);
1167 ui->cmbEOL->setCurrentIndex(KateDocumentConfig::global()->eol());
1168 ui->chkDetectEOL->setChecked(KateDocumentConfig::global()->allowEolDetection());
1169 ui->chkEnableBOM->setChecked(KateDocumentConfig::global()->
bom());
1170 ui->lineLengthLimit->setValue(KateDocumentConfig::global()->lineLengthLimit());
1172 ui->cbRemoveTrailingSpaces->setCurrentIndex(KateDocumentConfig::global()->removeSpaces());
1173 ui->chkNewLineAtEof->setChecked(KateDocumentConfig::global()->newLineAtEof());
1176 uiadv->chkBackupLocalFiles->setChecked(KateDocumentConfig::global()->backupOnSaveLocal());
1177 uiadv->chkBackupRemoteFiles->setChecked(KateDocumentConfig::global()->backupOnSaveRemote());
1178 uiadv->edtBackupPrefix->setText(KateDocumentConfig::global()->backupPrefix());
1179 uiadv->edtBackupSuffix->setText(KateDocumentConfig::global()->backupSuffix());
1181 uiadv->cmbSwapFileMode->setCurrentIndex(KateDocumentConfig::global()->swapFileMode());
1182 uiadv->kurlSwapDirectory->setUrl(
QUrl::fromLocalFile(KateDocumentConfig::global()->swapDirectory()));
1183 uiadv->spbSwapFileSync->setValue(KateDocumentConfig::global()->swapSyncInterval());
1184 swapFileModeChanged(KateDocumentConfig::global()->swapFileMode());
1186 ui->gbAutoSave->setChecked(KateDocumentConfig::global()->autoSave());
1187 ui->cbAutoSaveOnFocus->setChecked(KateDocumentConfig::global()->autoSaveOnFocusOut());
1188 ui->spbAutoSaveInterval->setValue(KateDocumentConfig::global()->autoSaveInterval());
1190 uiadv->chkAutoReloadVersionControl->setChecked(KateDocumentConfig::global()->value(KateDocumentConfig::AutoReloadIfStateIsInVersionControl).toBool());
1191 uiadv->chkEditorConfig->setChecked(KateDocumentConfig::global()->value(KateDocumentConfig::UseEditorConfig).toBool());
1194void KateSaveConfigTab::reset()
1196 modeConfigPage->reset();
1199void KateSaveConfigTab::defaults()
1201 modeConfigPage->defaults();
1203 ui->cbRemoveTrailingSpaces->setCurrentIndex(0);
1205 uiadv->chkBackupLocalFiles->setChecked(
true);
1206 uiadv->chkBackupRemoteFiles->setChecked(
false);
1207 uiadv->edtBackupPrefix->setText(QString());
1208 uiadv->edtBackupSuffix->setText(QStringLiteral(
"~"));
1210 uiadv->cmbSwapFileMode->setCurrentIndex(1);
1211 uiadv->kurlSwapDirectory->setDisabled(
true);
1212 uiadv->lblSwapDirectory->setDisabled(
true);
1213 uiadv->spbSwapFileSync->setValue(15);
1216QString KateSaveConfigTab::name()
const
1218 return i18n(
"Open/Save");
1221QString KateSaveConfigTab::fullName()
const
1223 return i18n(
"File Opening & Saving");
1226QIcon KateSaveConfigTab::icon()
const
1235 : KateViewBarWidget(true, parent)
1238 Q_ASSERT(m_view !=
nullptr);
1276 btn->
setDefaultAction(m_view->action(QStringLiteral(
"modified_line_down")));
1284 setFocusProxy(m_gotoRange);
1287void KateGotoBar::showEvent(
QShowEvent *event)
1294void KateGotoBar::closed()
1299bool KateGotoBar::eventFilter(
QObject *
object,
QEvent *event)
1301 if (
object == m_modifiedUp ||
object == m_modifiedDown) {
1306 int delta =
static_cast<QWheelEvent *
>(
event)->angleDelta().y();
1308 if (m_wheelDelta != 0 && (m_wheelDelta < 0) != (delta < 0)) {
1312 m_wheelDelta += delta;
1314 if (m_wheelDelta >= 120) {
1316 m_modifiedUp->click();
1317 }
else if (m_wheelDelta <= -120) {
1319 m_modifiedDown->click();
1326void KateGotoBar::gotoClipboard()
1328 static const QRegularExpression rx(QStringLiteral(
"-?\\d+"));
1334 if (lineNo >= m_gotoRange->minimum() && lineNo <= m_gotoRange->maximum()) {
1335 m_gotoRange->setValue(lineNo);
1338 QPointer<KTextEditor::Message> message =
new KTextEditor::Message(
i18n(
"No valid line number found in clipboard"));
1339 message->setWordWrap(
true);
1340 message->setAutoHide(2000);
1342 message->setView(m_view), m_view->document()->postMessage(message);
1346void KateGotoBar::updateData()
1348 int lines = m_view->document()->lines();
1349 m_gotoRange->setMinimum(-lines);
1350 m_gotoRange->setMaximum(lines);
1352 m_gotoRange->setValue(m_view->cursorPosition().line() + 1);
1353 m_gotoRange->adjustSize();
1356 m_gotoRange->selectAll();
1359void KateGotoBar::keyPressEvent(
QKeyEvent *event)
1361 int key =
event->key();
1369void KateGotoBar::gotoLine()
1372 if (kv && kv->selection() && !kv->config()->persistentSelection()) {
1373 kv->clearSelection();
1376 int gotoValue = m_gotoRange->value();
1377 if (gotoValue < 0) {
1378 gotoValue += m_view->document()->lines();
1379 }
else if (gotoValue > 0) {
1383 m_view->setCursorPosition(KTextEditor::Cursor(gotoValue, 0));
1390KateDictionaryBar::KateDictionaryBar(KTextEditor::ViewPrivate *view,
QWidget *parent)
1391 : KateViewBarWidget(true, parent)
1394 Q_ASSERT(m_view !=
nullptr);
1401 connect(view->doc(), &KTextEditor::DocumentPrivate::defaultDictionaryChanged,
this, &KateDictionaryBar::updateData);
1403 label->setBuddy(m_dictionaryComboBox);
1406 topLayout->
addWidget(m_dictionaryComboBox, 1);
1411KateDictionaryBar::~KateDictionaryBar()
1415void KateDictionaryBar::updateData()
1417 KTextEditor::DocumentPrivate *document = m_view->doc();
1418 QString dictionary = document->defaultDictionary();
1420 dictionary = Sonnet::Speller().defaultLanguage();
1422 m_dictionaryComboBox->setCurrentByDictionary(dictionary);
1425void KateDictionaryBar::dictionaryChanged(
const QString &dictionary)
1427 const KTextEditor::Range selection = m_view->selectionRange();
1429 const bool blockmode = m_view->blockSelection();
1430 m_view->doc()->setDictionary(dictionary, selection, blockmode);
1432 m_view->doc()->setDefaultDictionary(dictionary);
1443 , m_fullDiffPath(
QStandardPaths::findExecutable(QStringLiteral(
"diff")))
1445 , m_diffFile(nullptr)
1446 , m_diffAction(nullptr)
1449 m_message->setWordWrap(
true);
1453 if (!onDiskDeleted) {
1457 i18n(
"Reloads and will automatically reload without warning about disk changes from now until you close either the tab or window."));
1458 m_message->addAction(aAutoReload,
false);
1459 connect(aAutoReload, &
QAction::triggered,
this, &KateModOnHdPrompt::autoReloadTriggered);
1461 if (!m_fullDiffPath.isEmpty()) {
1462 m_diffAction =
new QAction(
i18n(
"View &Difference"),
this);
1463 m_diffAction->setIcon(
QIcon::fromTheme(QStringLiteral(
"document-multiple")));
1464 m_diffAction->setToolTip(
i18n(
"Shows a diff of the changes."));
1465 m_message->addAction(m_diffAction,
false);
1471 aReload->
setToolTip(
i18n(
"Reloads the file from disk. Unsaved changes will be lost."));
1472 m_message->addAction(aReload);
1475 QAction *closeFile =
new QAction(
i18nc(
"@action:button closes the opened file",
"&Close File"),
this);
1477 closeFile->
setToolTip(
i18n(
"Closes the file, discarding its content."));
1478 m_message->addAction(closeFile,
false);
1481 auto *aSaveAs =
new QAction(
i18nc(
"@action",
"&Save As…"),
this);
1483 aSaveAs->setToolTip(
i18n(
"Lets you select a location and save the file again."));
1484 m_message->addAction(aSaveAs,
false);
1489 aIgnore->
setToolTip(
i18n(
"Ignores the changes on disk without any action."));
1491 m_message->addAction(aIgnore);
1494 m_doc->postMessage(m_message);
1497KateModOnHdPrompt::~KateModOnHdPrompt()
1502 m_diffFile->setAutoRemove(
true);
1504 m_diffFile =
nullptr;
1509void KateModOnHdPrompt::slotDiff()
1515 m_diffFile =
new QTemporaryFile(
QDir::temp().filePath(QLatin1String(
"XXXXXX.diff")));
1519 m_proc =
new KProcess(
this);
1521 *m_proc << m_fullDiffPath << QStringLiteral(
"-u") << QStringLiteral(
"-") << m_doc->url().toLocalFile();
1526 m_diffAction->setEnabled(
false);
1530 QTextStream ts(m_proc);
1531 int lastln = m_doc->lines() - 1;
1532 for (
int l = 0; l < lastln; ++l) {
1533 ts << m_doc->line(l) <<
'\n';
1535 ts << m_doc->line(lastln);
1537 m_proc->closeWriteChannel();
1540void KateModOnHdPrompt::slotDataAvailable()
1542 m_diffFile->write(m_proc->readAll());
1545void KateModOnHdPrompt::slotPDone()
1547 m_diffAction->setEnabled(
true);
1555 i18n(
"The diff command failed. Please make sure that "
1556 "diff(1) is installed and in your PATH."),
1557 i18n(
"Error Creating Diff"));
1559 m_diffFile =
nullptr;
1563 if (m_diffFile->size() == 0) {
1566 m_diffFile =
nullptr;
1570 m_diffFile->setAutoRemove(
false);
1573 m_diffFile =
nullptr;
1575 KIO::OpenUrlJob *job =
new KIO::OpenUrlJob(url, QStringLiteral(
"text/x-patch"));
1583#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 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)