diff --git a/PowerEditor/installer/nativeLang/english.xml b/PowerEditor/installer/nativeLang/english.xml index 5048d71a7..66f1a0d8e 100644 --- a/PowerEditor/installer/nativeLang/english.xml +++ b/PowerEditor/installer/nativeLang/english.xml @@ -1052,11 +1052,11 @@ Translation note: - + + + - @@ -1785,6 +1785,7 @@ Click on "?" button on right to open website with User Manual."/> + diff --git a/PowerEditor/installer/nativeLang/english_customizable.xml b/PowerEditor/installer/nativeLang/english_customizable.xml index a19a69f79..2b34cef03 100644 --- a/PowerEditor/installer/nativeLang/english_customizable.xml +++ b/PowerEditor/installer/nativeLang/english_customizable.xml @@ -1052,11 +1052,11 @@ Translation note: - + + + - @@ -1779,6 +1779,7 @@ Click on "?" button on right to open website with User Manual."/> + diff --git a/PowerEditor/installer/nativeLang/french.xml b/PowerEditor/installer/nativeLang/french.xml index e475f6bb3..6b98ffc52 100644 --- a/PowerEditor/installer/nativeLang/french.xml +++ b/PowerEditor/installer/nativeLang/french.xml @@ -1049,11 +1049,11 @@ Translation note: - + + + - @@ -1781,6 +1781,7 @@ Cliquez sur le bouton "?" à droite pour ouvrir le site web du Manuel + diff --git a/PowerEditor/installer/nativeLang/taiwaneseMandarin.xml b/PowerEditor/installer/nativeLang/taiwaneseMandarin.xml index 97c57fb64..7b567b895 100644 --- a/PowerEditor/installer/nativeLang/taiwaneseMandarin.xml +++ b/PowerEditor/installer/nativeLang/taiwaneseMandarin.xml @@ -1002,17 +1002,17 @@ - + - + + + - @@ -1623,6 +1623,7 @@ 2. 如果「停用自動換行」被啟動,在開啟一個大型文件時,「自動換行」將對所有文件停用。 你可以通過選單「檢視->自動換行」重新啟動這個功能。"/> + diff --git a/PowerEditor/src/NppBigSwitch.cpp b/PowerEditor/src/NppBigSwitch.cpp index 49910ea7a..1a3e5c7fe 100644 --- a/PowerEditor/src/NppBigSwitch.cpp +++ b/PowerEditor/src/NppBigSwitch.cpp @@ -3152,19 +3152,40 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa case NPPM_INTERNAL_ENABLECHANGEHISTORY: { + static bool stopActionUntilNextSession = false; + const ScintillaViewParams& svp = nppParam.getSVP(); - int enabledCH = svp._isChangeHistoryEnabled ? (SC_CHANGE_HISTORY_ENABLED | SC_CHANGE_HISTORY_MARKERS) : SC_CHANGE_HISTORY_DISABLED; - _mainEditView.execute(SCI_SETCHANGEHISTORY, enabledCH); - _subEditView.execute(SCI_SETCHANGEHISTORY, enabledCH); + int enabledCHFlag = SC_CHANGE_HISTORY_DISABLED; + if (svp._isChangeHistoryMarginEnabled || svp._isChangeHistoryIndicatorEnabled) + { + enabledCHFlag = SC_CHANGE_HISTORY_ENABLED; - _mainEditView.showChangeHistoryMargin(svp._isChangeHistoryEnabled); - _subEditView.showChangeHistoryMargin(svp._isChangeHistoryEnabled); + if (svp._isChangeHistoryMarginEnabled) + enabledCHFlag |= SC_CHANGE_HISTORY_MARKERS; - enableCommand(IDM_SEARCH_CHANGED_PREV, svp._isChangeHistoryEnabled, MENU); - enableCommand(IDM_SEARCH_CHANGED_NEXT, svp._isChangeHistoryEnabled, MENU); - enableCommand(IDM_SEARCH_CLEAR_CHANGE_HISTORY, svp._isChangeHistoryEnabled, MENU); + if (svp._isChangeHistoryIndicatorEnabled) + enabledCHFlag |= SC_CHANGE_HISTORY_INDICATORS; + } + if (!stopActionUntilNextSession) + { + _mainEditView.execute(SCI_SETCHANGEHISTORY, enabledCHFlag); + _subEditView.execute(SCI_SETCHANGEHISTORY, enabledCHFlag); + + if (enabledCHFlag == SC_CHANGE_HISTORY_DISABLED) + stopActionUntilNextSession = true; + + _mainEditView.showChangeHistoryMargin(svp._isChangeHistoryMarginEnabled); + _subEditView.showChangeHistoryMargin(svp._isChangeHistoryMarginEnabled); + + _mainEditView.redraw(); + _subEditView.redraw(); + + enableCommand(IDM_SEARCH_CHANGED_PREV, svp._isChangeHistoryMarginEnabled || svp._isChangeHistoryIndicatorEnabled, MENU); + enableCommand(IDM_SEARCH_CHANGED_NEXT, svp._isChangeHistoryMarginEnabled || svp._isChangeHistoryIndicatorEnabled, MENU); + enableCommand(IDM_SEARCH_CLEAR_CHANGE_HISTORY, svp._isChangeHistoryMarginEnabled || svp._isChangeHistoryIndicatorEnabled, MENU); + } return TRUE; } diff --git a/PowerEditor/src/NppIO.cpp b/PowerEditor/src/NppIO.cpp index 431929de1..4f3217221 100644 --- a/PowerEditor/src/NppIO.cpp +++ b/PowerEditor/src/NppIO.cpp @@ -589,7 +589,8 @@ bool Notepad_plus::doReload(BufferID id, bool alert) // many settings such as update status bar, clickable link etc. activateBuffer(id, currentView(), true); - if (NppParameters::getInstance().getSVP()._isChangeHistoryEnabled) + auto svp = NppParameters::getInstance().getSVP(); + if (svp._isChangeHistoryMarginEnabled || svp._isChangeHistoryIndicatorEnabled) clearChangesHistory(); return res; diff --git a/PowerEditor/src/Parameters.cpp b/PowerEditor/src/Parameters.cpp index ad1ca6c3e..a09cc44ec 100644 --- a/PowerEditor/src/Parameters.cpp +++ b/PowerEditor/src/Parameters.cpp @@ -6338,19 +6338,37 @@ void NppParameters::feedScintillaParam(TiXmlNode *node) _svp._bookMarkMarginShow = false; } - // Bookmark Margin - nm = element->Attribute(TEXT("isChangeHistoryEnabled")); + // Change History Margin + int chState = 0; + nm = element->Attribute(TEXT("isChangeHistoryEnabled"), &chState); if (nm) { - if (!lstrcmp(nm, TEXT("yes"))) + if (!lstrcmp(nm, TEXT("yes"))) // for the retro-compatibility + chState = 1; + + _svp._isChangeHistoryEnabled4NextSession = static_cast(chState); + switch (chState) { - _svp._isChangeHistoryEnabled = true; - _svp._isChangeHistoryEnabled4NextSession = true; - } - else if (!lstrcmp(nm, TEXT("no"))) - { - _svp._isChangeHistoryEnabled = false; - _svp._isChangeHistoryEnabled4NextSession = false; + case changeHistoryState::disable: + _svp._isChangeHistoryMarginEnabled = false; + _svp._isChangeHistoryIndicatorEnabled = false; + break; + case changeHistoryState::margin: + _svp._isChangeHistoryMarginEnabled = true; + _svp._isChangeHistoryIndicatorEnabled = false; + break; + case changeHistoryState::indicator: + _svp._isChangeHistoryMarginEnabled = false; + _svp._isChangeHistoryIndicatorEnabled = true; + break; + case changeHistoryState::marginIndicator: + _svp._isChangeHistoryMarginEnabled = true; + _svp._isChangeHistoryIndicatorEnabled = true; + break; + default: + _svp._isChangeHistoryMarginEnabled = true; + _svp._isChangeHistoryIndicatorEnabled = false; + _svp._isChangeHistoryEnabled4NextSession = changeHistoryState::marginIndicator; } } @@ -6872,7 +6890,9 @@ bool NppParameters::writeScintillaParams() (_svp._folderStyle == FOLDER_STYLE_CIRCLE)?TEXT("circle"): (_svp._folderStyle == FOLDER_STYLE_NONE)?TEXT("none"):TEXT("box"); (scintNode->ToElement())->SetAttribute(TEXT("folderMarkStyle"), pFolderStyleStr); - (scintNode->ToElement())->SetAttribute(TEXT("isChangeHistoryEnabled"), _svp._isChangeHistoryEnabled4NextSession ? TEXT("yes") : TEXT("no")); + + (scintNode->ToElement())->SetAttribute(TEXT("isChangeHistoryEnabled"), _svp._isChangeHistoryEnabled4NextSession); // no -> 0 (disable), yes -> 1 (margin), yes ->2 (indicator), yes-> 3 (margin + indicator) + const TCHAR *pWrapMethodStr = (_svp._lineWrapMethod == LINEWRAP_ALIGNED)?TEXT("aligned"): (_svp._lineWrapMethod == LINEWRAP_INDENT)?TEXT("indent"):TEXT("default"); (scintNode->ToElement())->SetAttribute(TEXT("lineWrapMethod"), pWrapMethodStr); diff --git a/PowerEditor/src/Parameters.h b/PowerEditor/src/Parameters.h index 8a18963e7..032f1c666 100644 --- a/PowerEditor/src/Parameters.h +++ b/PowerEditor/src/Parameters.h @@ -942,8 +942,11 @@ struct ScintillaViewParams bool _lineNumberMarginShow = true; bool _lineNumberMarginDynamicWidth = true; bool _bookMarkMarginShow = true; - bool _isChangeHistoryEnabled = true; - bool _isChangeHistoryEnabled4NextSession = true; + + bool _isChangeHistoryMarginEnabled = true; + bool _isChangeHistoryIndicatorEnabled = false; + changeHistoryState _isChangeHistoryEnabled4NextSession = changeHistoryState::margin; // no -> 0 (disable), yes -> 1 (margin), yes ->2 (indicator), yes-> 3 (margin + indicator) + folderStyle _folderStyle = FOLDER_STYLE_BOX; //"simple", "arrow", "circle", "box" and "none" lineWrapMethod _lineWrapMethod = LINEWRAP_ALIGNED; bool _foldMarginShow = true; diff --git a/PowerEditor/src/ScintillaComponent/ScintillaEditView.cpp b/PowerEditor/src/ScintillaComponent/ScintillaEditView.cpp index bca542c75..ab64cd9e6 100644 --- a/PowerEditor/src/ScintillaComponent/ScintillaEditView.cpp +++ b/PowerEditor/src/ScintillaComponent/ScintillaEditView.cpp @@ -2236,8 +2236,19 @@ void ScintillaEditView::activateBuffer(BufferID buffer, bool force) NppParameters& nppParam = NppParameters::getInstance(); const ScintillaViewParams& svp = nppParam.getSVP(); - int enabledCH = svp._isChangeHistoryEnabled ? (SC_CHANGE_HISTORY_ENABLED | SC_CHANGE_HISTORY_MARKERS) : SC_CHANGE_HISTORY_DISABLED; - execute(SCI_SETCHANGEHISTORY, enabledCH); + + int enabledCHFlag = SC_CHANGE_HISTORY_DISABLED; + if (svp._isChangeHistoryMarginEnabled || svp._isChangeHistoryIndicatorEnabled) + { + enabledCHFlag = SC_CHANGE_HISTORY_ENABLED; + + if (svp._isChangeHistoryMarginEnabled) + enabledCHFlag |= SC_CHANGE_HISTORY_MARKERS; + + if (svp._isChangeHistoryIndicatorEnabled) + enabledCHFlag |= SC_CHANGE_HISTORY_INDICATORS; + } + execute(SCI_SETCHANGEHISTORY, enabledCHFlag); if (isTextDirectionRTL() != buffer->isRTL()) changeTextDirection(buffer->isRTL()); diff --git a/PowerEditor/src/ScintillaComponent/ScintillaRef.h b/PowerEditor/src/ScintillaComponent/ScintillaRef.h index 9852a49c0..98b94ea4f 100644 --- a/PowerEditor/src/ScintillaComponent/ScintillaRef.h +++ b/PowerEditor/src/ScintillaComponent/ScintillaRef.h @@ -15,11 +15,9 @@ // along with this program. If not, see . -#ifndef SCINTILLA_REF_H -#define SCINTILLA_REF_H +#pragma once +enum changeHistoryState { disable = 0, margin = 1, indicator = 2, marginIndicator = 3 }; enum folderStyle {FOLDER_TYPE, FOLDER_STYLE_SIMPLE, FOLDER_STYLE_ARROW, FOLDER_STYLE_CIRCLE, FOLDER_STYLE_BOX, FOLDER_STYLE_NONE}; enum lineWrapMethod {LINEWRAP_DEFAULT, LINEWRAP_ALIGNED, LINEWRAP_INDENT}; enum lineHiliteMode {LINEHILITE_NONE, LINEHILITE_HILITE, LINEHILITE_FRAME}; - -#endif //SCINTILLA_REF_H diff --git a/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.cpp b/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.cpp index 289c6e867..648dcb2e5 100644 --- a/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.cpp +++ b/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.cpp @@ -939,7 +939,7 @@ std::pair WordStyleDlg::goToPreferencesSettings() else if (style._styleDesc == TEXT("Change History margin")) { result.first = 3; - result.second = IDC_CHECK_CHANGHISTORYMARGE; + result.second = IDC_CHECK_CHANGHISTORYMARGIN; } else if (style._styleDesc == TEXT("Fold") || style._styleDesc == TEXT("Fold active") || style._styleDesc == TEXT("Fold margin")) { diff --git a/PowerEditor/src/WinControls/Preference/preference.rc b/PowerEditor/src/WinControls/Preference/preference.rc index 81da1a58a..dd6cbc02c 100644 --- a/PowerEditor/src/WinControls/Preference/preference.rc +++ b/PowerEditor/src/WinControls/Preference/preference.rc @@ -162,6 +162,7 @@ BEGIN PUSHBUTTON "Reset",IDD_CUSTOMIZED_RESET_BUTTON,340,158,45,14 END + IDD_PREFERENCE_SUB_MARGING_BORDER_EDGE DIALOGEX 115, 10, 460, 205 STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD FONT 8, "MS Shell Dlg", 0, 0, 0x1 @@ -172,20 +173,26 @@ BEGIN CONTROL "Circle tree",IDC_RADIO_CIRCLE,"Button",BS_AUTORADIOBUTTON,31,63,62,10 CONTROL "None",IDC_RADIO_FOLDMARGENONE,"Button",BS_AUTORADIOBUTTON,31,92,61,10 CONTROL "Box tree",IDC_RADIO_BOX,"Button",BS_AUTORADIOBUTTON,31,77,61,10 - GROUPBOX "Vertical Edge Settings",IDC_VES_GB_STATIC,116,21,148,136,BS_CENTER - LTEXT "Add your column marker by indicating its position with a decimal number.\nYou can define several column markers by using white space to separate the different numbers.",IDC_STATIC_MULTILNMODE_TIP,124,36,134,55 - EDITTEXT IDC_COLUMNPOS_EDIT,126,93,125,36,ES_MULTILINE - CONTROL "Background mode",IDC_CHECK_EDGEBGMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,138,122,10 - GROUPBOX "Border Width",IDC_BORDERWIDTH_STATIC,22,112,83,45,BS_CENTER - CONTROL "",IDC_BORDERWIDTH_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | TBS_BOTH | TBS_NOTICKS | TBS_TRANSPARENTBKGND | WS_TABSTOP,24,125,67,13 - LTEXT "0",IDC_BORDERWIDTHVAL_STATIC,92,126,12,8 - CONTROL "No edge",IDC_CHECK_NOEDGE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,29,142,60,10 + + GROUPBOX "Border Width",IDC_BORDERWIDTH_STATIC,22,121,83,47,BS_CENTER + CONTROL "",IDC_BORDERWIDTH_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | TBS_BOTH | TBS_NOTICKS | TBS_TRANSPARENTBKGND | WS_TABSTOP,24,134,67,13 + LTEXT "0",IDC_BORDERWIDTHVAL_STATIC,92,135,12,8 + CONTROL "No edge",IDC_CHECK_NOEDGE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,29,151,60,10 + + GROUPBOX "Vertical Edge Settings",IDC_VES_GB_STATIC,116,21,148,89,BS_CENTER + PUSHBUTTON "?",IDC_BUTTON_VES_TIP,181,33,16,14,NOT WS_TABSTOP + EDITTEXT IDC_COLUMNPOS_EDIT,126,51,125,36,ES_MULTILINE + CONTROL "Background mode",IDC_CHECK_EDGEBGMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,94,122,10 + + GROUPBOX "Change History",IDC_GB_CHANGHISTORY,116,121,148,47,BS_CENTER + CONTROL "Show in the margin",IDC_CHECK_CHANGHISTORYMARGIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,135,140,10 + CONTROL "Show in the text",IDC_CHECK_CHANGHISTORYINDICATOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,150,140,10 + GROUPBOX "Line Number",IDC_LINENUMBERMARGE_GB_STATIC,274,21,135,66,BS_CENTER CONTROL "Display",IDC_CHECK_LINENUMBERMARGE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,281,35,85,10 CONTROL "Dynamic width",IDC_RADIO_DYNAMIC,"Button",BS_AUTORADIOBUTTON | WS_GROUP,293,51,110,10 CONTROL "Constant width",IDC_RADIO_CONSTANT,"Button",BS_AUTORADIOBUTTON,293,65,108,10 - CONTROL "Display Change History",IDC_CHECK_CHANGHISTORYMARGE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,163,150,10 - CONTROL "Display bookmark",IDC_CHECK_BOOKMARKMARGE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,281,163,150,10 + GROUPBOX "Padding",IDC_PADDING_STATIC,274,94,135,63,BS_CENTER RTEXT "Left",IDC_PADDINGLEFT_STATIC,280,108,45,8 CONTROL "",IDC_PADDINGLEFT_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | TBS_BOTH | TBS_NOTICKS | TBS_TRANSPARENTBKGND | WS_TABSTOP,328,107,67,13 @@ -196,6 +203,8 @@ BEGIN RTEXT "Distraction Free",IDC_DISTRACTIONFREE_STATIC,275,140,72,8 CONTROL "",IDC_DISTRACTIONFREE_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | TBS_BOTH | TBS_NOTICKS | TBS_TRANSPARENTBKGND | WS_TABSTOP,348,139,47,13 LTEXT "0",IDC_DISTRACTIONFREEVAL_STATIC,396,140,12,8 + + CONTROL "Display bookmark",IDC_CHECK_BOOKMARKMARGE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,281,163,150,10 END diff --git a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp index 7bf35b3c8..9fb3dd174 100644 --- a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp +++ b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp @@ -241,6 +241,9 @@ intptr_t CALLBACK PreferenceDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM if (_editing2SubDlg._tip != nullptr) NppDarkMode::setDarkTooltips(_editing2SubDlg._tip, NppDarkMode::ToolTipsType::tooltip); + if (_marginsBorderEdgeSubDlg._verticalEdgeTip != nullptr) + NppDarkMode::setDarkTooltips(_marginsBorderEdgeSubDlg._verticalEdgeTip, NppDarkMode::ToolTipsType::tooltip); + for (auto& tip : _editing2SubDlg._tips) { if (tip != nullptr) @@ -1130,13 +1133,13 @@ intptr_t CALLBACK EditingSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM intptr_t CALLBACK Editing2SubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM /*lParam*/) { - NppParameters& nppParam = NppParameters::getInstance(); - ScintillaViewParams& svp = (ScintillaViewParams&)nppParam.getSVP(); - switch (message) { case WM_INITDIALOG: { + NppParameters& nppParam = NppParameters::getInstance(); + ScintillaViewParams& svp = const_cast(nppParam.getSVP()); + // defaul => (svp._eolMode == svp.roundedRectangleText) bool checkDefaultCRLF = true; bool checkPlainTextCRLF = false; @@ -1164,14 +1167,12 @@ intptr_t CALLBACK Editing2SubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA ::SendDlgItemMessage(_hSelf, IDC_RADIO_PLEINTEXT_CRLF, BM_SETCHECK, checkPlainTextCRLF, 0); ::SendDlgItemMessage(_hSelf, IDC_CHECK_WITHCUSTOMCOLOR_CRLF, BM_SETCHECK, checkWithColorCRLF, 0); - - NppParameters& nppParam = NppParameters::getInstance(); - ScintillaViewParams& svp = const_cast(nppParam.getSVP()); + ::SendDlgItemMessage(_hSelf, IDC_CHECK_MULTISELECTION, BM_SETCHECK, svp._multiSelection, 0); ::SendDlgItemMessage(_hSelf, IDC_CHECK_COLUMN2MULTIEDITING, BM_SETCHECK, svp._columnSel2MultiEdit, 0); ::EnableWindow(::GetDlgItem(_hSelf, IDC_CHECK_COLUMN2MULTIEDITING), svp._multiSelection); - NativeLangSpeaker* pNativeSpeaker = (NppParameters::getInstance()).getNativeLangSpeaker(); + NativeLangSpeaker* pNativeSpeaker = nppParam.getNativeLangSpeaker(); generic_string tip2show = pNativeSpeaker->getLocalizedStrFromID("eol-custom-color-tip", TEXT("Go to Style Configurator to change the default EOL custom color (\"EOL custom color\").")); _tip = CreateToolTip(IDC_BUTTON_LAUNCHSTYLECONF_CRLF, _hSelf, _hInst, const_cast(tip2show.c_str()), pNativeSpeaker->isRTL()); @@ -1910,7 +1911,8 @@ void MarginsBorderEdgeSubDlg::initScintParam() ::EnableWindow(::GetDlgItem(_hSelf, IDC_RADIO_CONSTANT), svp._lineNumberMarginShow); ::SendDlgItemMessage(_hSelf, IDC_CHECK_BOOKMARKMARGE, BM_SETCHECK, svp._bookMarkMarginShow, 0); - ::SendDlgItemMessage(_hSelf, IDC_CHECK_CHANGHISTORYMARGE, BM_SETCHECK, svp._isChangeHistoryEnabled, 0); + ::SendDlgItemMessage(_hSelf, IDC_CHECK_CHANGHISTORYMARGIN, BM_SETCHECK, svp._isChangeHistoryMarginEnabled, 0); + ::SendDlgItemMessage(_hSelf, IDC_CHECK_CHANGHISTORYINDICATOR, BM_SETCHECK, svp._isChangeHistoryIndicatorEnabled, 0); ::SendDlgItemMessage(_hSelf, IDC_CHECK_NOEDGE, BM_SETCHECK, !svp._showBorderEdge, 0); bool canBeBg = svp._edgeMultiColumnPos.size() == 1; @@ -1940,6 +1942,8 @@ void MarginsBorderEdgeSubDlg::initScintParam() intptr_t CALLBACK MarginsBorderEdgeSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam) { NppParameters& nppParam = NppParameters::getInstance(); + static bool changeHistoryWarningHasBeenGiven = false; + switch (message) { case WM_INITDIALOG : @@ -1969,6 +1973,15 @@ intptr_t CALLBACK MarginsBorderEdgeSubDlg::run_dlgProc(UINT message, WPARAM wPar ::SendMessage(::GetDlgItem(_hSelf, IDC_DISTRACTIONFREE_SLIDER), TBM_SETPOS, TRUE, svp._distractionFreeDivPart); ::SetDlgItemInt(_hSelf, IDC_DISTRACTIONFREEVAL_STATIC, svp._distractionFreeDivPart, FALSE); + NativeLangSpeaker* pNativeSpeaker = (NppParameters::getInstance()).getNativeLangSpeaker(); + generic_string tipNote2Show = pNativeSpeaker->getLocalizedStrFromID("verticalEdge-tip", L"Add your column marker by indicating its position with a decimal number. You can define several column markers by using white space to separate the different numbers."); + + _verticalEdgeTip = CreateToolTip(IDC_BUTTON_VES_TIP, _hSelf, _hInst, const_cast(tipNote2Show.c_str()), pNativeSpeaker->isRTL()); + if (_verticalEdgeTip != nullptr) + { + // Make tip stay 30 seconds + ::SendMessage(_verticalEdgeTip, TTM_SETDELAYTIME, TTDT_AUTOPOP, MAKELPARAM((30000), (0))); + } initScintParam(); return TRUE; @@ -2055,23 +2068,65 @@ intptr_t CALLBACK MarginsBorderEdgeSubDlg::run_dlgProc(UINT message, WPARAM wPar ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_SYMBOLMARGIN, 0); return TRUE; - case IDC_CHECK_CHANGHISTORYMARGE: + case IDC_CHECK_CHANGHISTORYMARGIN: { - bool isChangeHistoryEnabled = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_CHECK_CHANGHISTORYMARGE, BM_GETCHECK, 0, 0)); - if (isChangeHistoryEnabled) + bool isMaginJustEnabled = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_CHECK_CHANGHISTORYMARGIN, BM_GETCHECK, 0, 0)); + bool isIndicatorAlreadyEnabled = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_CHECK_CHANGHISTORYINDICATOR, BM_GETCHECK, 0, 0)); + + if (isMaginJustEnabled && !isIndicatorAlreadyEnabled) // In the case that both "in margin" & "in text" were disabled, but "in margin" is just enabled { - NativeLangSpeaker* pNativeSpeaker = nppParam.getNativeLangSpeaker(); - pNativeSpeaker->messageBox("ChangeHistoryEnabledWarning", - _hSelf, - TEXT("You have to restart Notepad++ to enable Change History."), - TEXT("Notepad++ need to be relaunched"), - MB_OK | MB_APPLMODAL); - svp._isChangeHistoryEnabled4NextSession = true; + if (!changeHistoryWarningHasBeenGiven) + { + NativeLangSpeaker* pNativeSpeaker = nppParam.getNativeLangSpeaker(); + pNativeSpeaker->messageBox("ChangeHistoryEnabledWarning", + _hSelf, + TEXT("You have to restart Notepad++ to enable Change History."), + TEXT("Notepad++ need to be relaunched"), + MB_OK | MB_APPLMODAL); + + changeHistoryWarningHasBeenGiven = true; + } + svp._isChangeHistoryMarginEnabled = true; + svp._isChangeHistoryEnabled4NextSession = changeHistoryState::margin; + } + else // otherwise + { + svp._isChangeHistoryMarginEnabled = isMaginJustEnabled; + svp._isChangeHistoryEnabled4NextSession = (!isMaginJustEnabled && !isIndicatorAlreadyEnabled) ? changeHistoryState::disable : + (isMaginJustEnabled && isIndicatorAlreadyEnabled) ? changeHistoryState::marginIndicator :changeHistoryState::indicator; + + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_ENABLECHANGEHISTORY, 0, 0); + } + return TRUE; + } + + case IDC_CHECK_CHANGHISTORYINDICATOR: + { + bool isIndicatorJustEnabled = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_CHECK_CHANGHISTORYINDICATOR, BM_GETCHECK, 0, 0)); + bool isMaginAlreadyEnabled = (BST_CHECKED == ::SendDlgItemMessage(_hSelf, IDC_CHECK_CHANGHISTORYMARGIN, BM_GETCHECK, 0, 0)); + + if (isIndicatorJustEnabled && !isMaginAlreadyEnabled) // In the case that both "in margin" & "in text" were disabled, but "in text" is just enabled + { + if (!changeHistoryWarningHasBeenGiven) + { + NativeLangSpeaker* pNativeSpeaker = nppParam.getNativeLangSpeaker(); + pNativeSpeaker->messageBox("ChangeHistoryEnabledWarning", + _hSelf, + TEXT("You have to restart Notepad++ to enable Change History."), + TEXT("Notepad++ need to be relaunched"), + MB_OK | MB_APPLMODAL); + + changeHistoryWarningHasBeenGiven = true; + } + svp._isChangeHistoryIndicatorEnabled = true; + svp._isChangeHistoryEnabled4NextSession = changeHistoryState::indicator; } else { - svp._isChangeHistoryEnabled = false; - svp._isChangeHistoryEnabled4NextSession = false; + svp._isChangeHistoryIndicatorEnabled = isIndicatorJustEnabled; + svp._isChangeHistoryEnabled4NextSession = (!isIndicatorJustEnabled && !isMaginAlreadyEnabled) ? changeHistoryState::disable : + (isIndicatorJustEnabled && isMaginAlreadyEnabled) ? changeHistoryState::marginIndicator : changeHistoryState::margin; + ::SendMessage(::GetParent(_hParent), NPPM_INTERNAL_ENABLECHANGEHISTORY, 0, 0); } return TRUE; diff --git a/PowerEditor/src/WinControls/Preference/preferenceDlg.h b/PowerEditor/src/WinControls/Preference/preferenceDlg.h index c4063c6eb..8f8235d2a 100644 --- a/PowerEditor/src/WinControls/Preference/preferenceDlg.h +++ b/PowerEditor/src/WinControls/Preference/preferenceDlg.h @@ -115,10 +115,13 @@ private: class MarginsBorderEdgeSubDlg : public StaticDialog { +friend class PreferenceDlg; public : MarginsBorderEdgeSubDlg() = default; private : + HWND _verticalEdgeTip = nullptr; + intptr_t CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam); void initScintParam(); }; diff --git a/PowerEditor/src/WinControls/Preference/preference_rc.h b/PowerEditor/src/WinControls/Preference/preference_rc.h index e746c0226..06b801971 100644 --- a/PowerEditor/src/WinControls/Preference/preference_rc.h +++ b/PowerEditor/src/WinControls/Preference/preference_rc.h @@ -122,7 +122,7 @@ #define IDC_CARETBLINKRATE_SLIDER (IDD_PREFERENCE_SUB_EDITING + 20) #define IDC_CARETBLINKRATE_F_STATIC (IDD_PREFERENCE_SUB_EDITING + 21) #define IDC_CARETBLINKRATE_S_STATIC (IDD_PREFERENCE_SUB_EDITING + 22) - #define IDC_CHECK_CHANGHISTORYMARGE (IDD_PREFERENCE_SUB_EDITING + 23) + #define IDC_CHECK_CHANGHISTORYMARGIN (IDD_PREFERENCE_SUB_EDITING + 23) #define IDC_DISTRACTIONFREE_SLIDER (IDD_PREFERENCE_SUB_EDITING + 24) //#define IDC_CHECK_MULTISELECTION (IDD_PREFERENCE_SUB_EDITING + 25) @@ -205,6 +205,9 @@ #define IDC_LINENUMBERMARGE_GB_STATIC (IDD_PREFERENCE_SUB_MARGING_BORDER_EDGE + 1) #define IDC_RADIO_DYNAMIC (IDD_PREFERENCE_SUB_MARGING_BORDER_EDGE + 2) #define IDC_RADIO_CONSTANT (IDD_PREFERENCE_SUB_MARGING_BORDER_EDGE + 3) + #define IDC_BUTTON_VES_TIP (IDD_PREFERENCE_SUB_MARGING_BORDER_EDGE + 4) + #define IDC_GB_CHANGHISTORY (IDD_PREFERENCE_SUB_MARGING_BORDER_EDGE + 5) + #define IDC_CHECK_CHANGHISTORYINDICATOR (IDD_PREFERENCE_SUB_MARGING_BORDER_EDGE + 6) #define IDD_PREFERENCE_SUB_MISC 6300 //(IDD_PREFERENCE_BOX + 300) #define IDC_TABSETTING_GB_STATIC (IDD_PREFERENCE_SUB_MISC + 1)