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>
62#include <QDomDocument>
65#include <QFontDatabase>
71#include <QRadioButton>
77#include <QTemporaryFile>
85KateIndentConfigTab::KateIndentConfigTab(
QWidget *parent)
86 : KateConfigPage(parent)
93 ui =
new Ui::IndentationConfigWidget();
94 ui->setupUi(newWidget);
106 observeChanges(ui->chkAutoDetectIndent);
107 observeChanges(ui->chkBackspaceUnindents);
108 observeChanges(ui->chkIndentPaste);
109 observeChanges(ui->chkKeepExtraSpaces);
110 observeChanges(ui->cmbMode);
111 observeChanges(ui->rbIndentMixed);
112 observeChanges(ui->rbIndentWithSpaces);
113 observeChanges(ui->rbIndentWithTabs);
116 observeChanges(ui->rbTabAdvances);
117 observeChanges(ui->rbTabIndents);
118 observeChanges(ui->rbTabSmart);
119 observeChanges(ui->sbIndentWidth);
120 observeChanges(ui->sbTabWidth);
125KateIndentConfigTab::~KateIndentConfigTab()
130void KateIndentConfigTab::slotChanged()
134 if (ui->rbIndentWithTabs->isChecked()) {
135 ui->sbIndentWidth->setValue(ui->sbTabWidth->value());
141void KateIndentConfigTab::showWhatsThis(
const QString &text)
146void KateIndentConfigTab::apply()
156 KateDocumentConfig::global()->setBackspaceIndents(ui->chkBackspaceUnindents->isChecked());
157 KateDocumentConfig::global()->setIndentPastedText(ui->chkIndentPaste->isChecked());
159 KateDocumentConfig::global()->setIndentationWidth(ui->sbIndentWidth->value());
160 KateDocumentConfig::global()->setKeepExtraSpaces(ui->chkKeepExtraSpaces->isChecked());
161 KateDocumentConfig::global()->setReplaceTabsDyn(ui->rbIndentWithSpaces->isChecked());
162 KateDocumentConfig::global()->setTabWidth(ui->sbTabWidth->value());
163 KateDocumentConfig::global()->setAutoDetectIndent(ui->chkAutoDetectIndent->isChecked());
165 if (ui->rbTabAdvances->isChecked()) {
166 KateDocumentConfig::global()->setTabHandling(KateDocumentConfig::tabInsertsTab);
167 }
else if (ui->rbTabIndents->isChecked()) {
168 KateDocumentConfig::global()->setTabHandling(KateDocumentConfig::tabIndents);
170 KateDocumentConfig::global()->setTabHandling(KateDocumentConfig::tabSmart);
173 KateDocumentConfig::global()->
configEnd();
176void KateIndentConfigTab::reload()
178 ui->chkBackspaceUnindents->setChecked(KateDocumentConfig::global()->backspaceIndents());
179 ui->chkIndentPaste->setChecked(KateDocumentConfig::global()->indentPastedText());
180 ui->chkKeepExtraSpaces->setChecked(KateDocumentConfig::global()->keepExtraSpaces());
182 ui->chkAutoDetectIndent->setChecked(KateDocumentConfig::global()->autoDetectIndent());
183 ui->sbIndentWidth->setSuffix(
ki18np(
" character",
" characters"));
184 ui->sbIndentWidth->setValue(KateDocumentConfig::global()->indentationWidth());
185 ui->sbTabWidth->setSuffix(
ki18np(
" character",
" characters"));
186 ui->sbTabWidth->setValue(KateDocumentConfig::global()->tabWidth());
188 ui->rbTabAdvances->setChecked(KateDocumentConfig::global()->tabHandling() == KateDocumentConfig::tabInsertsTab);
189 ui->rbTabIndents->setChecked(KateDocumentConfig::global()->tabHandling() == KateDocumentConfig::tabIndents);
190 ui->rbTabSmart->setChecked(KateDocumentConfig::global()->tabHandling() == KateDocumentConfig::tabSmart);
194 if (KateDocumentConfig::global()->replaceTabsDyn()) {
195 ui->rbIndentWithSpaces->setChecked(
true);
197 if (KateDocumentConfig::global()->indentationWidth() == KateDocumentConfig::global()->tabWidth()) {
198 ui->rbIndentWithTabs->setChecked(
true);
200 ui->rbIndentMixed->setChecked(
true);
204 ui->sbIndentWidth->setEnabled(!ui->rbIndentWithTabs->isChecked());
207QString KateIndentConfigTab::name()
const
209 return i18n(
"Indentation");
215KateCompletionConfigTab::KateCompletionConfigTab(
QWidget *parent)
216 : KateConfigPage(parent)
223 ui =
new Ui::CompletionConfigTab();
224 ui->setupUi(newWidget);
230 observeChanges(ui->chkAutoCompletionEnabled);
231 observeChanges(ui->chkAutoSelectFirstEntry);
232 observeChanges(ui->chkTabCompletion);
233 observeChanges(ui->chkEnterCompletion);
234 observeChanges(ui->gbKeywordCompletion);
235 observeChanges(ui->gbShowDoc);
236 observeChanges(ui->gbWordCompletion);
237 observeChanges(ui->minimalWordLength);
238 observeChanges(ui->removeTail);
243KateCompletionConfigTab::~KateCompletionConfigTab()
248void KateCompletionConfigTab::showWhatsThis(
const QString &text)
253void KateCompletionConfigTab::apply()
263 KateViewConfig::global()->
setValue(KateViewConfig::AutomaticCompletionInvocation, ui->chkAutoCompletionEnabled->isChecked());
264 KateViewConfig::global()->
setValue(KateViewConfig::AutomaticCompletionPreselectFirst, ui->chkAutoSelectFirstEntry->isChecked());
265 KateViewConfig::global()->
setValue(KateViewConfig::TabCompletion, ui->chkTabCompletion->isChecked());
266 KateViewConfig::global()->
setValue(KateViewConfig::EnterToInsertCompletion, ui->chkEnterCompletion->isChecked());
267 KateViewConfig::global()->
setValue(KateViewConfig::KeywordCompletion, ui->gbKeywordCompletion->isChecked());
268 KateViewConfig::global()->
setValue(KateViewConfig::WordCompletion, ui->gbWordCompletion->isChecked());
269 KateViewConfig::global()->
setValue(KateViewConfig::WordCompletionMinimalWordLength, ui->minimalWordLength->value());
270 KateViewConfig::global()->
setValue(KateViewConfig::WordCompletionRemoveTail, ui->removeTail->isChecked());
271 KateViewConfig::global()->
setValue(KateViewConfig::ShowDocWithCompletion, ui->gbShowDoc->isChecked());
276void KateCompletionConfigTab::reload()
278 ui->chkAutoCompletionEnabled->setChecked(KateViewConfig::global()->automaticCompletionInvocation());
279 ui->chkAutoSelectFirstEntry->setChecked(KateViewConfig::global()->automaticCompletionPreselectFirst());
280 ui->chkTabCompletion->setChecked(KateViewConfig::global()->tabCompletion());
281 ui->chkEnterCompletion->setChecked(KateViewConfig::global()->value(KateViewConfig::EnterToInsertCompletion).toBool());
283 ui->gbKeywordCompletion->setChecked(KateViewConfig::global()->keywordCompletion());
284 ui->gbWordCompletion->setChecked(KateViewConfig::global()->wordCompletion());
285 ui->gbShowDoc->setChecked(KateViewConfig::global()->showDocWithCompletion());
287 ui->minimalWordLength->setValue(KateViewConfig::global()->wordCompletionMinimalWordLength());
288 ui->removeTail->setChecked(KateViewConfig::global()->wordCompletionRemoveTail());
291QString KateCompletionConfigTab::name()
const
293 return i18n(
"Auto Completion");
299KateSpellCheckConfigTab::KateSpellCheckConfigTab(
QWidget *parent)
300 : KateConfigPage(parent)
307 ui =
new Ui::SpellCheckConfigWidget();
308 ui->setupUi(newWidget);
321KateSpellCheckConfigTab::~KateSpellCheckConfigTab()
326void KateSpellCheckConfigTab::showWhatsThis(
const QString &text)
331void KateSpellCheckConfigTab::apply()
342 m_sonnetConfigWidget->save();
343 QSettings settings(QStringLiteral(
"KDE"), QStringLiteral(
"Sonnet"));
344 KateDocumentConfig::global()->setOnTheFlySpellCheck(settings.value(QStringLiteral(
"checkerEnabledByDefault"),
false).toBool());
345 KateDocumentConfig::global()->
configEnd();
349 static_cast<KTextEditor::DocumentPrivate *
>(doc)->refreshOnTheFlyCheck();
353void KateSpellCheckConfigTab::reload()
358QString KateSpellCheckConfigTab::name()
const
360 return i18n(
"Spellcheck");
366KateNavigationConfigTab::KateNavigationConfigTab(
QWidget *parent)
367 : KateConfigPage(parent)
374 ui =
new Ui::NavigationConfigWidget();
375 ui->setupUi(newWidget);
377 initMulticursorModifierComboBox();
383 observeChanges(ui->cbTextSelectionMode);
384 observeChanges(ui->chkBackspaceRemoveComposed);
385 observeChanges(ui->chkPagingMovesCursor);
386 observeChanges(ui->chkScrollPastEnd);
387 observeChanges(ui->chkSmartHome);
388 observeChanges(ui->sbAutoCenterCursor);
389 observeChanges(ui->chkCamelCursor);
390 observeChanges(ui->cmbMultiCursorModifier);
395KateNavigationConfigTab::~KateNavigationConfigTab()
400void KateNavigationConfigTab::initMulticursorModifierComboBox()
404 auto *c = ui->cmbMultiCursorModifier;
423void KateNavigationConfigTab::apply()
434 KateDocumentConfig::global()->setPageUpDownMovesCursor(ui->chkPagingMovesCursor->isChecked());
435 KateDocumentConfig::global()->setSmartHome(ui->chkSmartHome->isChecked());
436 KateDocumentConfig::global()->setCamelCursor(ui->chkCamelCursor->isChecked());
438 KateViewConfig::global()->
setValue(KateViewConfig::AutoCenterLines, ui->sbAutoCenterCursor->value());
439 KateViewConfig::global()->
setValue(KateViewConfig::BackspaceRemoveComposedCharacters, ui->chkBackspaceRemoveComposed->isChecked());
440 KateViewConfig::global()->
setValue(KateViewConfig::PersistentSelection, ui->cbTextSelectionMode->currentIndex() == 1);
441 KateViewConfig::global()->
setValue(KateViewConfig::ScrollPastEnd, ui->chkScrollPastEnd->isChecked());
443 const int modifers = ui->cmbMultiCursorModifier->currentData().toInt();
446 KateDocumentConfig::global()->
configEnd();
450void KateNavigationConfigTab::reload()
452 ui->cbTextSelectionMode->setCurrentIndex(KateViewConfig::global()->persistentSelection() ? 1 : 0);
454 ui->chkBackspaceRemoveComposed->setChecked(KateViewConfig::global()->backspaceRemoveComposed());
455 ui->chkPagingMovesCursor->setChecked(KateDocumentConfig::global()->pageUpDownMovesCursor());
456 ui->chkScrollPastEnd->setChecked(KateViewConfig::global()->scrollPastEnd());
457 ui->chkSmartHome->setChecked(KateDocumentConfig::global()->smartHome());
458 ui->chkCamelCursor->setChecked(KateDocumentConfig::global()->camelCursor());
460 ui->sbAutoCenterCursor->setValue(KateViewConfig::global()->autoCenterLines());
462 const int mods = KateViewConfig::global()->multiCursorModifiers();
463 const auto count = ui->cmbMultiCursorModifier->count();
464 for (
int i = 0; i < count; ++i) {
465 int idxMods = ui->cmbMultiCursorModifier->itemData(i).toInt();
466 if (idxMods == mods) {
467 ui->cmbMultiCursorModifier->setCurrentIndex(i);
473QString KateNavigationConfigTab::name()
const
475 return i18n(
"Text Navigation");
481KateEditGeneralConfigTab::KateEditGeneralConfigTab(
QWidget *parent)
482 : KateConfigPage(parent)
486 ui =
new Ui::EditConfigWidget();
487 ui->setupUi(newWidget);
489 for (
const auto &fact :
KTextEditor::EditorPrivate::self()->inputModeFactories()) {
490 ui->cmbInputMode->addItem(fact->name(),
static_cast<int>(fact->inputMode()));
497 observeChanges(ui->chkAutoBrackets);
498 observeChanges(ui->chkMousePasteAtCursorPosition);
499 observeChanges(ui->chkShowStaticWordWrapMarker);
500 observeChanges(ui->chkTextDragAndDrop);
501 observeChanges(ui->chkSmartCopyCut);
502 observeChanges(ui->sbClipboardHistoryEntries);
503 observeChanges(ui->chkStaticWordWrap);
504 observeChanges(ui->cmbEncloseSelection);
507 const int index = ui->cmbEncloseSelection->currentIndex();
508 const QString text = ui->cmbEncloseSelection->currentText();
510 if (index >= UserData && text.isEmpty()) {
511 ui->cmbEncloseSelection->removeItem(index);
515 }
else if (ui->cmbEncloseSelection->findText(text) < 0) {
516 ui->cmbEncloseSelection->addItem(text);
519 ui->cmbEncloseSelection->setCurrentIndex(ui->cmbEncloseSelection->findText(text));
521 observeChanges(ui->cmbInputMode);
522 observeChanges(ui->sbWordWrap);
523 observeChanges(ui->chkAccessibility);
528KateEditGeneralConfigTab::~KateEditGeneralConfigTab()
533void KateEditGeneralConfigTab::apply()
544 KateDocumentConfig::global()->setWordWrap(ui->chkStaticWordWrap->isChecked());
545 KateDocumentConfig::global()->setWordWrapAt(ui->sbWordWrap->value());
547 KateRendererConfig::global()->setWordWrapMarker(ui->chkShowStaticWordWrapMarker->isChecked());
549 KateViewConfig::global()->
setValue(KateViewConfig::AutoBrackets, ui->chkAutoBrackets->isChecked());
550 KateViewConfig::global()->
setValue(KateViewConfig::CharsToEncloseSelection, ui->cmbEncloseSelection->currentText());
552 for (
int i = UserData; i < ui->cmbEncloseSelection->count(); ++i) {
553 userLetters.
append(ui->cmbEncloseSelection->itemText(i));
555 KateViewConfig::global()->
setValue(KateViewConfig::UserSetsOfCharsToEncloseSelection, userLetters);
556 KateViewConfig::global()->
setValue(KateViewConfig::InputMode, ui->cmbInputMode->currentData().toInt());
557 KateViewConfig::global()->
setValue(KateViewConfig::MousePasteAtCursorPosition, ui->chkMousePasteAtCursorPosition->isChecked());
558 KateViewConfig::global()->
setValue(KateViewConfig::TextDragAndDrop, ui->chkTextDragAndDrop->isChecked());
559 KateViewConfig::global()->
setValue(KateViewConfig::SmartCopyCut, ui->chkSmartCopyCut->isChecked());
560 KateViewConfig::global()->
setValue(KateViewConfig::ClipboardHistoryEntries, ui->sbClipboardHistoryEntries->value());
561 KateViewConfig::global()->
setValue(KateViewConfig::EnableAccessibility, ui->chkAccessibility->isChecked());
563 KateDocumentConfig::global()->
configEnd();
567void KateEditGeneralConfigTab::reload()
569 ui->chkAutoBrackets->setChecked(KateViewConfig::global()->autoBrackets());
570 ui->chkMousePasteAtCursorPosition->setChecked(KateViewConfig::global()->mousePasteAtCursorPosition());
571 ui->chkShowStaticWordWrapMarker->setChecked(KateRendererConfig::global()->wordWrapMarker());
572 ui->chkTextDragAndDrop->setChecked(KateViewConfig::global()->textDragAndDrop());
573 ui->chkSmartCopyCut->setChecked(KateViewConfig::global()->smartCopyCut());
574 ui->chkStaticWordWrap->setChecked(KateDocumentConfig::global()->wordWrap());
575 ui->sbClipboardHistoryEntries->setValue(KateViewConfig::global()->clipboardHistoryEntries());
577 ui->sbWordWrap->setSuffix(
ki18ncp(
"Wrap words at (value is at 20 or larger)",
" character",
" characters"));
578 ui->sbWordWrap->setValue(KateDocumentConfig::global()->wordWrapAt());
580 ui->cmbEncloseSelection->clear();
581 ui->cmbEncloseSelection->lineEdit()->setClearButtonEnabled(
true);
582 ui->cmbEncloseSelection->lineEdit()->setPlaceholderText(
i18n(
"Feature is not active"));
583 ui->cmbEncloseSelection->addItem(
QString(), None);
585 ui->cmbEncloseSelection->addItem(QStringLiteral(
"`*_~"), MarkDown);
586 ui->cmbEncloseSelection->setItemData(1,
i18n(
"May be handy with Markdown"),
Qt::ToolTipRole);
587 ui->cmbEncloseSelection->addItem(QStringLiteral(
"<>(){}[]'\""), MirrorChar);
588 ui->cmbEncloseSelection->setItemData(2,
i18n(
"Mirror characters, similar but not exactly like auto brackets"),
Qt::ToolTipRole);
589 ui->cmbEncloseSelection->addItem(QStringLiteral(
"´`_.:|#@~*!?$%/=,;-+^°§&"), NonLetters);
592 for (
int i = 0; i < userLetters.
size(); ++i) {
593 ui->cmbEncloseSelection->addItem(userLetters.
at(i), UserData + i);
595 ui->cmbEncloseSelection->setCurrentIndex(ui->cmbEncloseSelection->findText(KateViewConfig::global()->charsToEncloseSelection()));
597 const int id =
static_cast<int>(KateViewConfig::global()->inputMode());
598 ui->cmbInputMode->setCurrentIndex(ui->cmbInputMode->findData(
id));
599 ui->chkAccessibility->setChecked(KateViewConfig::global()->value(KateViewConfig::EnableAccessibility).toBool());
602QString KateEditGeneralConfigTab::name()
const
604 return i18n(
"General");
610KateEditConfigTab::KateEditConfigTab(
QWidget *parent)
611 : KateConfigPage(parent)
612 , editConfigTab(new KateEditGeneralConfigTab(this))
613 , navigationConfigTab(new KateNavigationConfigTab(this))
614 , indentConfigTab(new KateIndentConfigTab(this))
615 , completionConfigTab(new KateCompletionConfigTab(this))
616 , spellCheckConfigTab(new KateSpellCheckConfigTab(this))
624 tabWidget->
insertTab(0, editConfigTab, editConfigTab->name());
625 tabWidget->
insertTab(1, navigationConfigTab, navigationConfigTab->name());
626 tabWidget->
insertTab(2, indentConfigTab, indentConfigTab->name());
627 tabWidget->
insertTab(3, completionConfigTab, completionConfigTab->name());
628 tabWidget->
insertTab(4, spellCheckConfigTab, spellCheckConfigTab->name());
630 observeChanges(editConfigTab);
631 observeChanges(navigationConfigTab);
632 observeChanges(indentConfigTab);
633 observeChanges(completionConfigTab);
634 observeChanges(spellCheckConfigTab);
636 int i = tabWidget->
count();
637 for (
const auto &factory :
KTextEditor::EditorPrivate::self()->inputModeFactories()) {
638 KateConfigPage *tab = factory->createConfigPage(
this);
640 m_inputModeConfigTabs.push_back(tab);
650KateEditConfigTab::~KateEditConfigTab()
652 qDeleteAll(m_inputModeConfigTabs);
655void KateEditConfigTab::apply()
658 editConfigTab->apply();
659 navigationConfigTab->apply();
660 indentConfigTab->apply();
661 completionConfigTab->apply();
662 spellCheckConfigTab->apply();
663 for (KateConfigPage *tab : m_inputModeConfigTabs) {
668void KateEditConfigTab::reload()
670 editConfigTab->reload();
671 navigationConfigTab->reload();
672 indentConfigTab->reload();
673 completionConfigTab->reload();
674 spellCheckConfigTab->reload();
675 for (KateConfigPage *tab : m_inputModeConfigTabs) {
680void KateEditConfigTab::reset()
682 editConfigTab->reset();
683 navigationConfigTab->reset();
684 indentConfigTab->reset();
685 completionConfigTab->reset();
686 spellCheckConfigTab->reset();
687 for (KateConfigPage *tab : m_inputModeConfigTabs) {
692void KateEditConfigTab::defaults()
694 editConfigTab->defaults();
695 navigationConfigTab->defaults();
696 indentConfigTab->defaults();
697 completionConfigTab->defaults();
698 spellCheckConfigTab->defaults();
699 for (KateConfigPage *tab : m_inputModeConfigTabs) {
704QString KateEditConfigTab::name()
const
706 return i18n(
"Editing");
709QString KateEditConfigTab::fullName()
const
711 return i18n(
"Editing Options");
714QIcon KateEditConfigTab::icon()
const
722KateViewDefaultsConfig::KateViewDefaultsConfig(
QWidget *parent)
723 : KateConfigPage(parent)
724 , textareaUi(new Ui::TextareaAppearanceConfigWidget())
725 , bordersUi(new Ui::BordersAppearanceConfigWidget())
726 , statusBarUi(new Ui::StatusbarConfigWidget())
735 textareaUi->setupUi(textareaTab);
736 tabWidget->
addTab(textareaTab,
i18n(
"General"));
739 bordersUi->setupUi(bordersTab);
740 tabWidget->
addTab(bordersTab,
i18n(
"Borders"));
743 statusBarUi->setupUi(statusbarTab);
744 tabWidget->
addTab(statusbarTab,
i18n(
"Statusbar"));
746 textareaUi->cmbDynamicWordWrapIndicator->addItem(
i18n(
"Off"));
747 textareaUi->cmbDynamicWordWrapIndicator->addItem(
i18n(
"Follow Line Numbers"));
748 textareaUi->cmbDynamicWordWrapIndicator->addItem(
i18n(
"Always On"));
754 observeChanges(textareaUi->kfontrequester);
756 observeChanges(textareaUi->chkAnimateBracketMatching);
757 observeChanges(textareaUi->chkDynWrapAnywhere);
758 observeChanges(textareaUi->chkDynWrapAtStaticMarker);
759 observeChanges(textareaUi->chkFoldFirstLine);
760 observeChanges(textareaUi->chkShowBracketMatchPreview);
761 observeChanges(textareaUi->chkShowIndentationLines);
762 observeChanges(textareaUi->chkShowLineCount);
763 observeChanges(textareaUi->chkShowTabs);
764 observeChanges(textareaUi->chkShowWholeBracketExpression);
765 observeChanges(textareaUi->chkShowWordCount);
766 observeChanges(textareaUi->cmbDynamicWordWrapIndicator);
767 observeChanges(textareaUi->cbxWordWrap);
768 observeChanges(textareaUi->spbLineHeightMultiplier);
769 auto a = [ui = textareaUi, cbx = textareaUi->cbxWordWrap]() {
770 ui->chkDynWrapAtStaticMarker->setEnabled(cbx->isChecked());
771 ui->chkDynWrapAnywhere->setEnabled(cbx->isChecked());
772 ui->cmbDynamicWordWrapIndicator->setEnabled(cbx->isChecked());
773 ui->sbDynamicWordWrapDepth->setEnabled(cbx->isChecked());
777 auto b = [cbx = textareaUi->cbxIndentWrappedLines, sb = textareaUi->sbDynamicWordWrapDepth]() {
778 sb->setEnabled(cbx->isChecked());
782 observeChanges(textareaUi->cbxIndentWrappedLines);
783 observeChanges(textareaUi->sbDynamicWordWrapDepth);
784 observeChanges(textareaUi->sliSetMarkerSize);
785 observeChanges(textareaUi->spacesComboBox);
787 observeChanges(bordersUi->chkIconBorder);
788 observeChanges(bordersUi->chkLineNumbers);
789 observeChanges(bordersUi->chkScrollbarMarks);
790 observeChanges(bordersUi->chkScrollbarMiniMap);
791 observeChanges(bordersUi->chkScrollbarMiniMapAll);
792 bordersUi->chkScrollbarMiniMapAll->hide();
793 observeChanges(bordersUi->chkScrollbarPreview);
794 observeChanges(bordersUi->chkShowFoldingMarkers);
795 observeChanges(bordersUi->chkShowFoldingPreview);
796 observeChanges(bordersUi->chkShowLineModification);
797 observeChanges(bordersUi->cmbShowScrollbars);
798 observeChanges(bordersUi->rbSortBookmarksByCreation);
799 observeChanges(bordersUi->rbSortBookmarksByPosition);
800 observeChanges(bordersUi->spBoxMiniMapWidth);
801 observeChanges(bordersUi->cmbFoldingArrowVisiblity);
804 observeChanges(statusBarUi->cbShowActiveDictionary);
805 observeChanges(statusBarUi->cbShowHighlightingMode);
806 observeChanges(statusBarUi->cbShowInputMode);
807 observeChanges(statusBarUi->cbShowLineColumn);
808 observeChanges(statusBarUi->cbShowTabSetting);
809 observeChanges(statusBarUi->cbShowEncoding);
810 observeChanges(statusBarUi->cbShowEOL);
813KateViewDefaultsConfig::~KateViewDefaultsConfig()
820void KateViewDefaultsConfig::apply()
831 KateDocumentConfig::global()->setMarkerSize(textareaUi->sliSetMarkerSize->value());
832 KateDocumentConfig::global()->setShowSpaces(KateDocumentConfig::WhitespaceRendering(textareaUi->spacesComboBox->currentIndex()));
833 KateDocumentConfig::global()->setShowTabs(textareaUi->chkShowTabs->isChecked());
835 KateRendererConfig::global()->setFont(textareaUi->kfontrequester->font());
836 KateRendererConfig::global()->setAnimateBracketMatching(textareaUi->chkAnimateBracketMatching->isChecked());
837 KateRendererConfig::global()->setShowIndentationLines(textareaUi->chkShowIndentationLines->isChecked());
838 KateRendererConfig::global()->setShowWholeBracketExpression(textareaUi->chkShowWholeBracketExpression->isChecked());
839 KateRendererConfig::global()->setLineHeightMultiplier(textareaUi->spbLineHeightMultiplier->value());
841 KateViewConfig::global()->setDynWordWrap(textareaUi->cbxWordWrap->isChecked());
842 KateViewConfig::global()->setShowWordCount(textareaUi->chkShowWordCount->isChecked());
843 KateViewConfig::global()->
setValue(KateViewConfig::BookmarkSorting, bordersUi->rbSortBookmarksByPosition->isChecked() ? 0 : 1);
844 if (!textareaUi->cbxIndentWrappedLines->isChecked()) {
845 KateViewConfig::global()->
setValue(KateViewConfig::DynWordWrapAlignIndent, 0);
847 KateViewConfig::global()->
setValue(KateViewConfig::DynWordWrapAlignIndent, textareaUi->sbDynamicWordWrapDepth->value());
849 KateViewConfig::global()->
setValue(KateViewConfig::DynWordWrapIndicators, textareaUi->cmbDynamicWordWrapIndicator->currentIndex());
850 KateViewConfig::global()->
setValue(KateViewConfig::DynWrapAnywhere, textareaUi->chkDynWrapAnywhere->isChecked());
851 KateViewConfig::global()->
setValue(KateViewConfig::DynWrapAtStaticMarker, textareaUi->chkDynWrapAtStaticMarker->isChecked());
852 KateViewConfig::global()->
setValue(KateViewConfig::FoldFirstLine, textareaUi->chkFoldFirstLine->isChecked());
853 KateViewConfig::global()->
setValue(KateViewConfig::ScrollBarMiniMapWidth, bordersUi->spBoxMiniMapWidth->value());
854 KateViewConfig::global()->
setValue(KateViewConfig::ShowBracketMatchPreview, textareaUi->chkShowBracketMatchPreview->isChecked());
855 KateViewConfig::global()->
setValue(KateViewConfig::ShowFoldingBar, bordersUi->chkShowFoldingMarkers->isChecked());
856 KateViewConfig::global()->
setValue(KateViewConfig::ShowFoldingPreview, bordersUi->chkShowFoldingPreview->isChecked());
857 KateViewConfig::global()->
setValue(KateViewConfig::ShowIconBar, bordersUi->chkIconBorder->isChecked());
858 KateViewConfig::global()->
setValue(KateViewConfig::ShowLineCount, textareaUi->chkShowLineCount->isChecked());
859 KateViewConfig::global()->
setValue(KateViewConfig::ShowLineModification, bordersUi->chkShowLineModification->isChecked());
860 KateViewConfig::global()->
setValue(KateViewConfig::ShowLineNumbers, bordersUi->chkLineNumbers->isChecked());
861 KateViewConfig::global()->
setValue(KateViewConfig::ShowScrollBarMarks, bordersUi->chkScrollbarMarks->isChecked());
862 KateViewConfig::global()->
setValue(KateViewConfig::ShowScrollBarMiniMap, bordersUi->chkScrollbarMiniMap->isChecked());
863 KateViewConfig::global()->
setValue(KateViewConfig::ShowScrollBarMiniMapAll, bordersUi->chkScrollbarMiniMapAll->isChecked());
864 KateViewConfig::global()->
setValue(KateViewConfig::ShowScrollBarPreview, bordersUi->chkScrollbarPreview->isChecked());
865 KateViewConfig::global()->
setValue(KateViewConfig::ShowScrollbars, bordersUi->cmbShowScrollbars->currentIndex());
866 bool showOnHoverOnly = bordersUi->cmbFoldingArrowVisiblity->currentIndex() == 0;
867 KateViewConfig::global()->
setValue(KateViewConfig::ShowFoldingOnHoverOnly, showOnHoverOnly);
870 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarDictionary, statusBarUi->cbShowActiveDictionary->isChecked());
871 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarHighlightingMode, statusBarUi->cbShowHighlightingMode->isChecked());
872 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarInputMode, statusBarUi->cbShowInputMode->isChecked());
873 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarLineColumn, statusBarUi->cbShowLineColumn->isChecked());
874 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarTabSettings, statusBarUi->cbShowTabSetting->isChecked());
875 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarFileEncoding, statusBarUi->cbShowEncoding->isChecked());
876 KateViewConfig::global()->
setValue(KateViewConfig::ShowStatusbarEOL, statusBarUi->cbShowEOL->isChecked());
878 KateRendererConfig::global()->
configEnd();
882void KateViewDefaultsConfig::reload()
884 bordersUi->chkIconBorder->setChecked(KateViewConfig::global()->iconBar());
885 bordersUi->chkLineNumbers->setChecked(KateViewConfig::global()->lineNumbers());
886 bordersUi->chkScrollbarMarks->setChecked(KateViewConfig::global()->scrollBarMarks());
887 bordersUi->chkScrollbarMiniMap->setChecked(KateViewConfig::global()->scrollBarMiniMap());
888 bordersUi->chkScrollbarMiniMapAll->setChecked(KateViewConfig::global()->scrollBarMiniMapAll());
889 bordersUi->chkScrollbarPreview->setChecked(KateViewConfig::global()->scrollBarPreview());
890 bordersUi->chkShowFoldingMarkers->setChecked(KateViewConfig::global()->foldingBar());
891 bordersUi->chkShowFoldingPreview->setChecked(KateViewConfig::global()->foldingPreview());
892 bordersUi->chkShowLineModification->setChecked(KateViewConfig::global()->lineModification());
893 bordersUi->cmbShowScrollbars->setCurrentIndex(KateViewConfig::global()->showScrollbars());
894 bordersUi->rbSortBookmarksByCreation->setChecked(KateViewConfig::global()->bookmarkSort() == 1);
895 bordersUi->rbSortBookmarksByPosition->setChecked(KateViewConfig::global()->bookmarkSort() == 0);
896 bordersUi->spBoxMiniMapWidth->setValue(KateViewConfig::global()->scrollBarMiniMapWidth());
897 bordersUi->cmbFoldingArrowVisiblity->setCurrentIndex(KateViewConfig::global()->showFoldingOnHoverOnly() ? 0 : 1);
899 textareaUi->kfontrequester->setFont(KateRendererConfig::global()->baseFont());
901 textareaUi->chkAnimateBracketMatching->setChecked(KateRendererConfig::global()->animateBracketMatching());
902 textareaUi->chkDynWrapAnywhere->setChecked(KateViewConfig::global()->dynWrapAnywhere());
903 textareaUi->chkDynWrapAtStaticMarker->setChecked(KateViewConfig::global()->dynWrapAtStaticMarker());
904 textareaUi->chkFoldFirstLine->setChecked(KateViewConfig::global()->foldFirstLine());
905 textareaUi->chkShowBracketMatchPreview->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowBracketMatchPreview).toBool());
906 textareaUi->chkShowIndentationLines->setChecked(KateRendererConfig::global()->showIndentationLines());
907 textareaUi->chkShowLineCount->setChecked(KateViewConfig::global()->showLineCount());
908 textareaUi->chkShowTabs->setChecked(KateDocumentConfig::global()->showTabs());
909 textareaUi->chkShowWholeBracketExpression->setChecked(KateRendererConfig::global()->showWholeBracketExpression());
910 textareaUi->chkShowWordCount->setChecked(KateViewConfig::global()->showWordCount());
911 textareaUi->cmbDynamicWordWrapIndicator->setCurrentIndex(KateViewConfig::global()->dynWordWrapIndicators());
912 textareaUi->cbxWordWrap->setChecked(KateViewConfig::global()->dynWordWrap());
913 textareaUi->cbxIndentWrappedLines->setChecked(KateViewConfig::global()->dynWordWrapAlignIndent() != 0);
914 textareaUi->sbDynamicWordWrapDepth->setValue(KateViewConfig::global()->dynWordWrapAlignIndent());
915 textareaUi->sliSetMarkerSize->setValue(KateDocumentConfig::global()->markerSize());
916 textareaUi->spacesComboBox->setCurrentIndex(KateDocumentConfig::global()->showSpaces());
917 textareaUi->spbLineHeightMultiplier->setValue(KateRendererConfig::global()->lineHeightMultiplier());
919 statusBarUi->cbShowLineColumn->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarLineColumn).toBool());
920 statusBarUi->cbShowActiveDictionary->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarDictionary).toBool());
921 statusBarUi->cbShowTabSetting->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarTabSettings).toBool());
922 statusBarUi->cbShowHighlightingMode->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarHighlightingMode).toBool());
923 statusBarUi->cbShowInputMode->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarInputMode).toBool());
924 statusBarUi->cbShowEncoding->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarFileEncoding).toBool());
925 statusBarUi->cbShowEOL->setChecked(KateViewConfig::global()->value(KateViewConfig::ShowStatusbarEOL).toBool());
928void KateViewDefaultsConfig::reset()
932void KateViewDefaultsConfig::defaults()
936QString KateViewDefaultsConfig::name()
const
938 return i18n(
"Appearance");
941QString KateViewDefaultsConfig::fullName()
const
943 return i18n(
"Appearance");
946QIcon KateViewDefaultsConfig::icon()
const
954KateSaveConfigTab::KateSaveConfigTab(
QWidget *parent)
955 : KateConfigPage(parent)
956 , modeConfigPage(new ModeConfigPage(this))
969 ui =
new Ui::OpenSaveConfigWidget();
970 ui->setupUi(newWidget);
975 uiadv =
new Ui::OpenSaveConfigAdvWidget();
976 uiadv->setupUi(newWidget2);
977 uiadv->lblExplanatory->setText(
978 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 "
979 "cause data loss in case of a system crash.",
987 observeChanges(ui->cbRemoveTrailingSpaces);
988 observeChanges(ui->chkDetectEOL);
989 observeChanges(ui->chkEnableBOM);
990 observeChanges(ui->chkNewLineAtEof);
991 observeChanges(ui->cmbEOL);
992 observeChanges(ui->cmbEncoding);
993 observeChanges(ui->cmbEncodingDetection);
994 observeChanges(ui->cmbEncodingFallback);
995 observeChanges(ui->lineLengthLimit);
996 observeChanges(ui->gbAutoSave);
997 observeChanges(ui->cbAutoSaveOnFocus);
998 observeChanges(ui->spbAutoSaveInterval);
1000 observeChanges(uiadv->chkAutoReloadVersionControl);
1002 observeChanges(uiadv->chkBackupLocalFiles);
1003 observeChanges(uiadv->chkBackupRemoteFiles);
1004 observeChanges(uiadv->cmbSwapFileMode);
1007 observeChanges(uiadv->edtBackupPrefix);
1008 observeChanges(uiadv->edtBackupSuffix);
1009 observeChanges(uiadv->kurlSwapDirectory);
1010 observeChanges(uiadv->spbSwapFileSync);
1018 tabWidget->
insertTab(2, modeConfigPage, modeConfigPage->name());
1020 observeChanges(modeConfigPage);
1026 {QStringLiteral(
"Date:Locale"),
1027 QStringLiteral(
"Date:ISO"),
1028 QStringLiteral(
"Date:"),
1029 QStringLiteral(
"Time:Locale"),
1030 QStringLiteral(
"Time:ISO"),
1031 QStringLiteral(
"Time:"),
1032 QStringLiteral(
"ENV:"),
1033 QStringLiteral(
"JS:"),
1034 QStringLiteral(
"UUID")});
1037KateSaveConfigTab::~KateSaveConfigTab()
1043void KateSaveConfigTab::swapFileModeChanged(
int idx)
1045 const KateDocumentConfig::SwapFileMode mode =
static_cast<KateDocumentConfig::SwapFileMode
>(idx);
1047 case KateDocumentConfig::DisableSwapFile:
1048 uiadv->lblSwapDirectory->setEnabled(
false);
1049 uiadv->kurlSwapDirectory->setEnabled(
false);
1050 uiadv->lblSwapFileSync->setEnabled(
false);
1051 uiadv->spbSwapFileSync->setEnabled(
false);
1053 case KateDocumentConfig::EnableSwapFile:
1054 uiadv->lblSwapDirectory->setEnabled(
false);
1055 uiadv->kurlSwapDirectory->setEnabled(
false);
1056 uiadv->lblSwapFileSync->setEnabled(
true);
1057 uiadv->spbSwapFileSync->setEnabled(
true);
1059 case KateDocumentConfig::SwapFilePresetDirectory:
1060 uiadv->lblSwapDirectory->setEnabled(
true);
1061 uiadv->kurlSwapDirectory->setEnabled(
true);
1062 uiadv->lblSwapFileSync->setEnabled(
true);
1063 uiadv->spbSwapFileSync->setEnabled(
true);
1068void KateSaveConfigTab::apply()
1070 modeConfigPage->apply();
1073 if (!hasChanged()) {
1081 if (uiadv->edtBackupSuffix->text().isEmpty() && uiadv->edtBackupPrefix->text().isEmpty()) {
1083 uiadv->edtBackupSuffix->setText(QStringLiteral(
"~"));
1086 KateDocumentConfig::global()->setBackupOnSaveLocal(uiadv->chkBackupLocalFiles->isChecked());
1087 KateDocumentConfig::global()->setBackupOnSaveRemote(uiadv->chkBackupRemoteFiles->isChecked());
1088 KateDocumentConfig::global()->setBackupPrefix(uiadv->edtBackupPrefix->text());
1089 KateDocumentConfig::global()->setBackupSuffix(uiadv->edtBackupSuffix->text());
1091 KateDocumentConfig::global()->setSwapFileMode(uiadv->cmbSwapFileMode->currentIndex());
1092 KateDocumentConfig::global()->setSwapDirectory(uiadv->kurlSwapDirectory->url().toLocalFile());
1093 KateDocumentConfig::global()->setSwapSyncInterval(uiadv->spbSwapFileSync->value());
1095 KateDocumentConfig::global()->setRemoveSpaces(ui->cbRemoveTrailingSpaces->currentIndex());
1097 KateDocumentConfig::global()->setNewLineAtEof(ui->chkNewLineAtEof->isChecked());
1100 KateDocumentConfig::global()->setEncoding(
KCharsets::charsets()->encodingForName(ui->cmbEncoding->currentText()));
1102 KateGlobalConfig::global()->
setValue(KateGlobalConfig::EncodingProberType, (KEncodingProber::ProberType)ui->cmbEncodingDetection->currentIndex());
1103 KateGlobalConfig::global()->setFallbackEncoding(
KCharsets::charsets()->encodingForName(ui->cmbEncodingFallback->currentText()));
1105 KateDocumentConfig::global()->setEol(ui->cmbEOL->currentIndex());
1106 KateDocumentConfig::global()->setAllowEolDetection(ui->chkDetectEOL->isChecked());
1107 KateDocumentConfig::global()->setBom(ui->chkEnableBOM->isChecked());
1109 KateDocumentConfig::global()->setLineLengthLimit(ui->lineLengthLimit->value());
1111 KateDocumentConfig::global()->
setValue(KateDocumentConfig::AutoSave, ui->gbAutoSave->isChecked());
1112 KateDocumentConfig::global()->
setValue(KateDocumentConfig::AutoSaveOnFocusOut, ui->cbAutoSaveOnFocus->isChecked());
1113 KateDocumentConfig::global()->
setValue(KateDocumentConfig::AutoSaveInteral, ui->spbAutoSaveInterval->value());
1115 KateDocumentConfig::global()->
setValue(KateDocumentConfig::AutoReloadIfStateIsInVersionControl, uiadv->chkAutoReloadVersionControl->isChecked());
1117 KateDocumentConfig::global()->
configEnd();
1118 KateGlobalConfig::global()->
configEnd();
1121void KateSaveConfigTab::reload()
1123 modeConfigPage->reload();
1126 ui->cmbEncoding->clear();
1127 ui->cmbEncodingFallback->clear();
1129 for (
int i = 0; i < encodings.count(); i++) {
1132 ui->cmbEncoding->addItem(encodings[i]);
1133 ui->cmbEncodingFallback->addItem(encodings[i]);
1135 if (encodingName == KateDocumentConfig::global()->encoding()) {
1136 ui->cmbEncoding->setCurrentIndex(i);
1139 if (encodingName == KateGlobalConfig::global()->fallbackEncoding()) {
1141 ui->cmbEncodingFallback->setCurrentIndex(i);
1146 ui->cmbEncodingDetection->clear();
1148 const auto proberType = (KEncodingProber::ProberType)KateGlobalConfig::global()->value(KateGlobalConfig::EncodingProberType).toInt();
1151 if (i == proberType) {
1152 ui->cmbEncodingDetection->setCurrentIndex(ui->cmbEncodingDetection->count() - 1);
1157 ui->cmbEncodingDetection->setCurrentIndex(KEncodingProber::Universal);
1161 ui->cmbEOL->setCurrentIndex(KateDocumentConfig::global()->eol());
1162 ui->chkDetectEOL->setChecked(KateDocumentConfig::global()->allowEolDetection());
1163 ui->chkEnableBOM->setChecked(KateDocumentConfig::global()->bom());
1164 ui->lineLengthLimit->setValue(KateDocumentConfig::global()->lineLengthLimit());
1166 ui->cbRemoveTrailingSpaces->setCurrentIndex(KateDocumentConfig::global()->removeSpaces());
1167 ui->chkNewLineAtEof->setChecked(KateDocumentConfig::global()->newLineAtEof());
1170 uiadv->chkBackupLocalFiles->setChecked(KateDocumentConfig::global()->backupOnSaveLocal());
1171 uiadv->chkBackupRemoteFiles->setChecked(KateDocumentConfig::global()->backupOnSaveRemote());
1172 uiadv->edtBackupPrefix->setText(KateDocumentConfig::global()->backupPrefix());
1173 uiadv->edtBackupSuffix->setText(KateDocumentConfig::global()->backupSuffix());
1175 uiadv->cmbSwapFileMode->setCurrentIndex(KateDocumentConfig::global()->swapFileMode());
1176 uiadv->kurlSwapDirectory->setUrl(
QUrl::fromLocalFile(KateDocumentConfig::global()->swapDirectory()));
1177 uiadv->spbSwapFileSync->setValue(KateDocumentConfig::global()->swapSyncInterval());
1178 swapFileModeChanged(KateDocumentConfig::global()->swapFileMode());
1180 ui->gbAutoSave->setChecked(KateDocumentConfig::global()->autoSave());
1181 ui->cbAutoSaveOnFocus->setChecked(KateDocumentConfig::global()->autoSaveOnFocusOut());
1182 ui->spbAutoSaveInterval->setValue(KateDocumentConfig::global()->autoSaveInterval());
1184 uiadv->chkAutoReloadVersionControl->setChecked(KateDocumentConfig::global()->value(KateDocumentConfig::AutoReloadIfStateIsInVersionControl).toBool());
1187void KateSaveConfigTab::reset()
1189 modeConfigPage->reset();
1192void KateSaveConfigTab::defaults()
1194 modeConfigPage->defaults();
1196 ui->cbRemoveTrailingSpaces->setCurrentIndex(0);
1198 uiadv->chkBackupLocalFiles->setChecked(
true);
1199 uiadv->chkBackupRemoteFiles->setChecked(
false);
1200 uiadv->edtBackupPrefix->setText(
QString());
1201 uiadv->edtBackupSuffix->setText(QStringLiteral(
"~"));
1203 uiadv->cmbSwapFileMode->setCurrentIndex(1);
1204 uiadv->kurlSwapDirectory->setDisabled(
true);
1205 uiadv->lblSwapDirectory->setDisabled(
true);
1206 uiadv->spbSwapFileSync->setValue(15);
1209QString KateSaveConfigTab::name()
const
1211 return i18n(
"Open/Save");
1214QString KateSaveConfigTab::fullName()
const
1216 return i18n(
"File Opening & Saving");
1219QIcon KateSaveConfigTab::icon()
const
1228 : KateViewBarWidget(true, parent)
1231 Q_ASSERT(m_view !=
nullptr);
1269 btn->
setDefaultAction(m_view->action(QStringLiteral(
"modified_line_down")));
1277 setFocusProxy(m_gotoRange);
1280void KateGotoBar::showEvent(
QShowEvent *event)
1287void KateGotoBar::closed()
1292bool KateGotoBar::eventFilter(
QObject *
object,
QEvent *event)
1294 if (
object == m_modifiedUp ||
object == m_modifiedDown) {
1301 if (m_wheelDelta != 0 && (m_wheelDelta < 0) != (delta < 0)) {
1305 m_wheelDelta += delta;
1307 if (m_wheelDelta >= 120) {
1309 m_modifiedUp->
click();
1310 }
else if (m_wheelDelta <= -120) {
1312 m_modifiedDown->
click();
1319void KateGotoBar::gotoClipboard()
1327 if (lineNo >= m_gotoRange->
minimum() && lineNo <= m_gotoRange->maximum()) {
1332 message->setWordWrap(
true);
1333 message->setAutoHide(2000);
1339void KateGotoBar::updateData()
1352void KateGotoBar::keyPressEvent(
QKeyEvent *event)
1354 int key =
event->key();
1362void KateGotoBar::gotoLine()
1364 KTextEditor::ViewPrivate *kv = qobject_cast<KTextEditor::ViewPrivate *>(m_view);
1365 if (kv && kv->selection() && !kv->config()->persistentSelection()) {
1366 kv->clearSelection();
1369 int gotoValue = m_gotoRange->
value();
1370 if (gotoValue < 0) {
1372 }
else if (gotoValue > 0) {
1383KateDictionaryBar::KateDictionaryBar(KTextEditor::ViewPrivate *view,
QWidget *parent)
1384 : KateViewBarWidget(true, parent)
1387 Q_ASSERT(m_view !=
nullptr);
1394 connect(view->doc(), &KTextEditor::DocumentPrivate::defaultDictionaryChanged,
this, &KateDictionaryBar::updateData);
1396 label->setBuddy(m_dictionaryComboBox);
1399 topLayout->
addWidget(m_dictionaryComboBox, 1);
1404KateDictionaryBar::~KateDictionaryBar()
1408void KateDictionaryBar::updateData()
1410 KTextEditor::DocumentPrivate *document = m_view->doc();
1411 QString dictionary = document->defaultDictionary();
1418void KateDictionaryBar::dictionaryChanged(
const QString &dictionary)
1422 const bool blockmode = m_view->blockSelection();
1423 m_view->doc()->setDictionary(dictionary, selection, blockmode);
1425 m_view->doc()->setDefaultDictionary(dictionary);
1436 , m_fullDiffPath(
QStandardPaths::findExecutable(QStringLiteral(
"diff")))
1438 , m_diffFile(nullptr)
1439 , m_diffAction(nullptr)
1442 m_message->setWordWrap(
true);
1446 if (!onDiskDeleted) {
1450 i18n(
"Reloads and will automatically reload without warning about disk changes from now until you close either the tab or window."));
1451 m_message->addAction(aAutoReload,
false);
1454 if (!m_fullDiffPath.isEmpty()) {
1455 m_diffAction =
new QAction(
i18n(
"View &Difference"),
this);
1456 m_diffAction->setIcon(
QIcon::fromTheme(QStringLiteral(
"document-multiple")));
1457 m_diffAction->setToolTip(
i18n(
"Shows a diff of the changes."));
1458 m_message->addAction(m_diffAction,
false);
1464 aReload->
setToolTip(
i18n(
"Reloads the file from disk. Unsaved changes will be lost."));
1465 m_message->addAction(aReload);
1468 QAction *closeFile =
new QAction(
i18nc(
"@action:button closes the opened file",
"&Close File"),
this);
1470 closeFile->
setToolTip(
i18n(
"Closes the file, discarding its content."));
1471 m_message->addAction(closeFile,
false);
1476 aSaveAs->
setToolTip(
i18n(
"Lets you select a location and save the file again."));
1477 m_message->addAction(aSaveAs,
false);
1482 aIgnore->
setToolTip(
i18n(
"Ignores the changes on disk without any action."));
1484 m_message->addAction(aIgnore);
1487 m_doc->postMessage(m_message);
1490KateModOnHdPrompt::~KateModOnHdPrompt()
1497 m_diffFile =
nullptr;
1502void KateModOnHdPrompt::slotDiff()
1514 *m_proc << m_fullDiffPath << QStringLiteral(
"-u") << QStringLiteral(
"-") << m_doc->url().toLocalFile();
1524 int lastln = m_doc->lines() - 1;
1525 for (
int l = 0; l < lastln; ++l) {
1526 ts << m_doc->line(l) <<
'\n';
1528 ts << m_doc->line(lastln);
1533void KateModOnHdPrompt::slotDataAvailable()
1538void KateModOnHdPrompt::slotPDone()
1548 i18n(
"The diff command failed. Please make sure that "
1549 "diff(1) is installed and in your PATH."),
1550 i18n(
"Error Creating Diff"));
1552 m_diffFile =
nullptr;
1556 if (m_diffFile->
size() == 0) {
1559 m_diffFile =
nullptr;
1566 m_diffFile =
nullptr;
1576#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)
void setOutputChannelMode(OutputChannelMode mode)
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.
The Cursor represents a position in a Document.
constexpr int line() const noexcept
Retrieve the line on which this cursor is situated.
A KParts derived class representing a text document.
void textChanged(KTextEditor::Document *document)
The document emits this signal whenever its text changes.
virtual int lines() const =0
Get the count of lines of the document.
virtual bool postMessage(Message *message)=0
Post message to the Document and its Views.
ModifiedOnDiskReason
Reasons why a document is modified on disk.
@ OnDiskDeleted
The file was deleted 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.
This class holds a Message to display in Views.
@ AboveView
show message above view.
@ BottomInView
show message as view overlay in the bottom right corner.
An object representing a section of text, from one Cursor to another.
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.
virtual bool setCursorPosition(Cursor position)=0
Set the view's new cursor to position.
virtual Document * document() const =0
Get the view's document, that means the view is a view of the returned document.
virtual Cursor cursorPosition() const =0
Get the view's current cursor position.
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)
void setCurrentByDictionary(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 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)
virtual qint64 size() const const override
QFont systemFont(SystemFont type)
QIcon fromTheme(const QString &name)
qint64 write(const QByteArray &data)
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)
void installEventFilter(QObject *filterObj)
QProcess::ExitStatus exitStatus() const const
void finished(int exitCode, QProcess::ExitStatus exitStatus)
bool isEmpty() const const
typedef KeyboardModifiers
virtual QString fileName() const const override
void setAutoRemove(bool b)
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
QUrl fromLocalFile(const QString &localFile)
QStringList toStringList() const const
void showText(const QPoint &pos, const QString &text, QWidget *w)