diff --git a/language/common_res.h b/language/common_res.h index b5bcf9d90..de88ee5bf 100644 --- a/language/common_res.h +++ b/language/common_res.h @@ -287,6 +287,12 @@ #define IDC_RICHEDITABOUT 18091 #define IDC_TRANSL_AUTH 18092 #define IDC_TRANSPARENT 18093 +#define IDC_TAB_WIDTH 18094 +#define IDC_INDENT_DEPTH 18095 +#define IDC_TAB_AS_SPC 18096 +#define IDC_TAB_INDENTS 18097 +#define IDC_BACKTAB_INDENTS 18098 +#define IDC_WARN_INCONSISTENT_INDENTS 18099 #define CMD_ESCAPE 20000 #define CMD_SHIFTESC 20001 diff --git a/language/np3_af_za/dialogs_af_za.rc b/language/np3_af_za/dialogs_af_za.rc index dc55c9dd2..f843bb4b0 100644 Binary files a/language/np3_af_za/dialogs_af_za.rc and b/language/np3_af_za/dialogs_af_za.rc differ diff --git a/language/np3_be_by/dialogs_be_by.rc b/language/np3_be_by/dialogs_be_by.rc index b0cd37700..06311bc90 100644 Binary files a/language/np3_be_by/dialogs_be_by.rc and b/language/np3_be_by/dialogs_be_by.rc differ diff --git a/language/np3_de_de/dialogs_de_de.rc b/language/np3_de_de/dialogs_de_de.rc index 33e8d98fd..6f71b0a19 100644 Binary files a/language/np3_de_de/dialogs_de_de.rc and b/language/np3_de_de/dialogs_de_de.rc differ diff --git a/language/np3_en_gb/dialogs_en_gb.rc b/language/np3_en_gb/dialogs_en_gb.rc index 34c56c169..dda6d8534 100644 Binary files a/language/np3_en_gb/dialogs_en_gb.rc and b/language/np3_en_gb/dialogs_en_gb.rc differ diff --git a/language/np3_en_us/dialogs_en_us.rc b/language/np3_en_us/dialogs_en_us.rc index 7f4b98478..ec2da0f57 100644 Binary files a/language/np3_en_us/dialogs_en_us.rc and b/language/np3_en_us/dialogs_en_us.rc differ diff --git a/language/np3_es_es/dialogs_es_es.rc b/language/np3_es_es/dialogs_es_es.rc index af68355e8..9b16102c7 100644 Binary files a/language/np3_es_es/dialogs_es_es.rc and b/language/np3_es_es/dialogs_es_es.rc differ diff --git a/language/np3_fr_fr/dialogs_fr_fr.rc b/language/np3_fr_fr/dialogs_fr_fr.rc index 1f81f6da6..e27c38746 100644 Binary files a/language/np3_fr_fr/dialogs_fr_fr.rc and b/language/np3_fr_fr/dialogs_fr_fr.rc differ diff --git a/language/np3_ja_jp/dialogs_ja_jp.rc b/language/np3_ja_jp/dialogs_ja_jp.rc index 816412368..9c89495e9 100644 Binary files a/language/np3_ja_jp/dialogs_ja_jp.rc and b/language/np3_ja_jp/dialogs_ja_jp.rc differ diff --git a/language/np3_nl_nl/dialogs_nl_nl.rc b/language/np3_nl_nl/dialogs_nl_nl.rc index 47af2ae1e..47642fe57 100644 Binary files a/language/np3_nl_nl/dialogs_nl_nl.rc and b/language/np3_nl_nl/dialogs_nl_nl.rc differ diff --git a/language/np3_ru_ru/dialogs_ru_ru.rc b/language/np3_ru_ru/dialogs_ru_ru.rc index 333444057..dd2e1f912 100644 Binary files a/language/np3_ru_ru/dialogs_ru_ru.rc and b/language/np3_ru_ru/dialogs_ru_ru.rc differ diff --git a/language/np3_zh_cn/dialogs_zh_cn.rc b/language/np3_zh_cn/dialogs_zh_cn.rc index 8b7493bc5..93858e812 100644 Binary files a/language/np3_zh_cn/dialogs_zh_cn.rc and b/language/np3_zh_cn/dialogs_zh_cn.rc differ diff --git a/src/Dialogs.c b/src/Dialogs.c index d4bda627f..dd215b063 100644 --- a/src/Dialogs.c +++ b/src/Dialogs.c @@ -2117,30 +2117,26 @@ bool LongLineSettingsDlg(HWND hwnd,UINT uidDlg,int *iNumber) INT_PTR CALLBACK TabSettingsDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam) { + UNUSED(lParam); + switch(umsg) { - case WM_INITDIALOG: { if (Globals.hDlgIcon) { SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)Globals.hDlgIcon); } - SetDlgItemInt(hwnd,100,Settings.TabWidth,false); - SendDlgItemMessage(hwnd,100,EM_LIMITTEXT,15,0); + SetDlgItemInt(hwnd,IDC_TAB_WIDTH,Settings.TabWidth,false); + SendDlgItemMessage(hwnd,IDC_TAB_WIDTH,EM_LIMITTEXT,15,0); - SetDlgItemInt(hwnd,101,Settings.IndentWidth,false); - SendDlgItemMessage(hwnd,101,EM_LIMITTEXT,15,0); + SetDlgItemInt(hwnd,IDC_INDENT_DEPTH,Settings.IndentWidth,false); + SendDlgItemMessage(hwnd,IDC_INDENT_DEPTH,EM_LIMITTEXT,15,0); - if (Settings.TabsAsSpaces) - CheckDlgButton(hwnd,102,BST_CHECKED); - - if (Settings.TabIndents) - CheckDlgButton(hwnd,103,BST_CHECKED); - - if (Settings.BackspaceUnindents) - CheckDlgButton(hwnd,104,BST_CHECKED); + CheckDlgButton(hwnd,IDC_TAB_AS_SPC, Settings.TabsAsSpaces ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwnd,IDC_TAB_INDENTS, Settings.TabIndents ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwnd,IDC_BACKTAB_INDENTS, Settings.BackspaceUnindents ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hwnd,IDC_WARN_INCONSISTENT_INDENTS, Settings.WarnInconsistentIndents ? BST_CHECKED : BST_UNCHECKED); CenterDlgInParent(hwnd); - } return true; @@ -2149,47 +2145,36 @@ INT_PTR CALLBACK TabSettingsDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lPa switch(LOWORD(wParam)) { - - case IDOK: { - - BOOL fTranslated1,fTranslated2; - - UINT iNewTabWidth = GetDlgItemInt(hwnd,100,&fTranslated1,FALSE); - UINT iNewIndentWidth = GetDlgItemInt(hwnd,101,&fTranslated2,FALSE); - - if (fTranslated1 && fTranslated2) + case IDOK: { - Settings.TabWidth = iNewTabWidth; - Settings.IndentWidth = iNewIndentWidth; - - Settings.TabsAsSpaces = (IsDlgButtonChecked(hwnd,102)) ? true : false; - - Settings.TabIndents = (IsDlgButtonChecked(hwnd,103)) ? true : false; - - Settings.BackspaceUnindents = (IsDlgButtonChecked(hwnd,104)) ? true : false; - - EndDialog(hwnd,IDOK); - } - - else - PostMessage(hwnd,WM_NEXTDLGCTL,(WPARAM)(GetDlgItem(hwnd,(fTranslated1) ? 101 : 100)),1); + BOOL fTranslated1, fTranslated2; + UINT const iNewTabWidth = GetDlgItemInt(hwnd, IDC_TAB_WIDTH, &fTranslated1, FALSE); + UINT const iNewIndentWidth = GetDlgItemInt(hwnd, IDC_INDENT_DEPTH, &fTranslated2, FALSE); + if (fTranslated1 && fTranslated2) { + Settings.TabWidth = iNewTabWidth; + Settings.IndentWidth = iNewIndentWidth; + Settings.TabsAsSpaces = (IsDlgButtonChecked(hwnd, IDC_TAB_AS_SPC)) ? true : false; + Settings.TabIndents = (IsDlgButtonChecked(hwnd, IDC_TAB_INDENTS)) ? true : false; + Settings.BackspaceUnindents = (IsDlgButtonChecked(hwnd, IDC_BACKTAB_INDENTS)) ? true : false; + Settings.WarnInconsistentIndents = (IsDlgButtonChecked(hwnd, IDC_WARN_INCONSISTENT_INDENTS)) ? true : false; + EndDialog(hwnd, IDOK); + } + else { + PostMessage(hwnd, WM_NEXTDLGCTL, (WPARAM)(GetDlgItem(hwnd, (fTranslated1) ? IDC_INDENT_DEPTH : IDC_TAB_WIDTH)), 1); + } } break; - case IDCANCEL: EndDialog(hwnd,IDCANCEL); break; + default: + break; } - return true; - } - - UNUSED(lParam); - return false; } diff --git a/src/Edit.c b/src/Edit.c index 5d58e5eed..e3a503c93 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -951,13 +951,16 @@ void EditDetectIndentMode(HWND hwnd) } } } - - if (((tabCount > 0) && (spaceCount > 0)) // mismatch - || (Settings.TabsAsSpaces && (tabCount > 0)) // existing tabs, should be replaced by spaces - || (!Settings.TabsAsSpaces && (spaceCount > 0))) // indent space, should be populated with tabs - { - MessageBox(hwnd, L"Found Indentation Inconsistency.", L"Notepad3 - Inconsistent Indentation", MB_OK | MB_ICONEXCLAMATION); + + if (Settings.WarnInconsistentIndents && !Style_IsCurLexerStandard()) { + if (((tabCount > 0) && (spaceCount > 0)) + //|| (Settings.TabsAsSpaces && (tabCount > 0)) // existing tabs, should be replaced by spaces + //|| (!Settings.TabsAsSpaces && (spaceCount > 0)) // indent space, should be populated with tabs + ) { + MessageBox(hwnd, L"Found Indentation Inconsistency.", L"Notepad3 - Inconsistent Indentation", MB_OK | MB_ICONEXCLAMATION); + } } + // TODO: Set correct Indent mode } @@ -1342,6 +1345,8 @@ bool EditSaveFile( if (hFile == INVALID_HANDLE_VALUE) return false; + EditDetectIndentMode(hwnd); + // ensure consistent line endings if (Settings.FixLineEndings) { EditEnsureConsistentLineEndings(hwnd); diff --git a/src/Notepad3.c b/src/Notepad3.c index ea1d4eb43..0ebb52e90 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -6825,6 +6825,7 @@ void LoadSettings() GET_BOOL_VALUE_FROM_INISECTION(BackspaceUnindents, false); GET_INT_VALUE_FROM_INISECTION(TabWidth, 4, 1, 1024); g_iTabWidthG = Settings.TabWidth; GET_INT_VALUE_FROM_INISECTION(IndentWidth, 4, 0, 1024); g_iIndentWidthG = Settings.IndentWidth; + GET_BOOL_VALUE_FROM_INISECTION(WarnInconsistentIndents, true); GET_BOOL_VALUE_FROM_INISECTION(MarkLongLines, true); GET_INT_VALUE_FROM_INISECTION(LongLinesLimit, 80, 0, LONG_LINES_MARKER_LIMIT); g_iLongLinesLimitG = Settings.LongLinesLimit; GET_INT_VALUE_FROM_INISECTION(LongLineMode, EDGE_LINE, EDGE_LINE, EDGE_BACKGROUND); @@ -7191,6 +7192,7 @@ void SaveSettings(bool bSaveSettingsNow) if (g_iIndentWidthG != Defaults.TabWidth) { IniSectionSetInt(pIniSection, L"IndentWidth", g_iIndentWidthG); } + SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, WarnInconsistentIndents); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, MarkLongLines); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, LongLinesLimit); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, LongLineMode); diff --git a/src/TypeDefs.h b/src/TypeDefs.h index 20773370d..e494d11f3 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -282,6 +282,7 @@ typedef struct _settings_t bool BackspaceUnindents; int TabWidth; int IndentWidth; + bool WarnInconsistentIndents; bool MarkLongLines; int LongLinesLimit; int LongLineMode;