Merge pull request #852 from RaiKoHoff/Dev_Fix4Releases

Fix for replace dialog
This commit is contained in:
Rainer Kottenhoff 2018-12-06 03:27:29 +01:00 committed by GitHub
commit af466c587f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 53 additions and 34 deletions

View File

@ -4952,7 +4952,7 @@ static void _DelayMarkAll(HWND hwnd, int delay, DocPos iStartPos)
//
// EditFindReplaceDlgProcW()
//
static char g_lastFind[FNDRPL_BUFFER] = { L'\0' };
static char s_lastFind[FNDRPL_BUFFER] = { L'\0' };
INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam)
{
@ -4971,11 +4971,12 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
static int iSaveMarkOcc = -1;
static bool bSaveOccVisible = false;
static bool bSaveTFBackSlashes = false;
static bool _bRestoreMarkOcc = true;
WCHAR tchBuf[FNDRPL_BUFFER] = { L'\0' };
switch (umsg)
{
case WM_INITDIALOG:
@ -4993,6 +4994,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
iSaveMarkOcc = s_bSwitchedFindReplace ? iSaveMarkOcc : Settings.MarkOccurrences;
bSaveOccVisible = s_bSwitchedFindReplace ? bSaveOccVisible : Settings.MarkOccurrencesMatchVisible;
_bRestoreMarkOcc = sg_pefrData->bMarkOccurences;
//const WORD wTabSpacing = (WORD)SendMessage(sg_pefrData->hwnd, SCI_GETTABWIDTH, 0, 0);; // dialog box units
//SendDlgItemMessage(hwnd, IDC_FINDTEXT, EM_SETTABSTOPS, 1, (LPARAM)&wTabSpacing);
@ -5062,6 +5064,12 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
DialogEnableWindow(hwnd, IDC_DOT_MATCH_ALL, false);
}
// switch off "mark all occ" in case of initial replace dialog on multiline selection
if (GetDlgItem(hwnd, IDC_REPLACE) && !s_bSwitchedFindReplace) {
if (Sci_IsMultiLineSelection()) {
sg_pefrData->bMarkOccurences = false;
}
}
if (sg_pefrData->bMarkOccurences) {
Settings.MarkOccurrences = 0;
Settings.MarkOccurrencesMatchVisible = false;
@ -5155,6 +5163,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
}
}
sg_pefrData->szFind[0] = '\0';
sg_pefrData->bMarkOccurences = _bRestoreMarkOcc;
Settings.MarkOccurrences = iSaveMarkOcc;
Settings.MarkOccurrencesMatchVisible = bSaveOccVisible;
@ -5225,7 +5234,8 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
EditEnsureSelectionVisible(Globals.hwndEdit);
DialogEnableWindow(hwnd, IDC_REPLACEINSEL, !SciCall_IsSelectionEmpty());
bool const bEnableReplInSel = !(SciCall_IsSelectionEmpty() || SciCall_IsSelectionRectangle());
DialogEnableWindow(hwnd, IDC_REPLACEINSEL, bEnableReplInSel);
break;
}
@ -5318,13 +5328,13 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
StringCchCopyNA(szFind, FNDRPL_BUFFER, szCmpBuf, FNDRPL_BUFFER);
}
bool bEnableF = (GetWindowTextLengthW(GetDlgItem(hwnd, IDC_FINDTEXT)) ||
bool const bEnableF = (GetWindowTextLengthW(GetDlgItem(hwnd, IDC_FINDTEXT)) ||
CB_ERR != SendDlgItemMessage(hwnd, IDC_FINDTEXT, CB_GETCURSEL, 0, 0));
bool bEnableR = (GetWindowTextLengthW(GetDlgItem(hwnd, IDC_REPLACETEXT)) ||
bool const bEnableR = (GetWindowTextLengthW(GetDlgItem(hwnd, IDC_REPLACETEXT)) ||
CB_ERR != SendDlgItemMessage(hwnd, IDC_REPLACETEXT, CB_GETCURSEL, 0, 0));
bool bEnableIS = !(bool)SendMessage(Globals.hwndEdit, SCI_GETSELECTIONEMPTY, 0, 0);
bool const bEnableIS = !(SciCall_IsSelectionEmpty() || SciCall_IsSelectionRectangle());
DialogEnableWindow(hwnd, IDOK, bEnableF);
DialogEnableWindow(hwnd, IDC_FINDPREV, bEnableF);
@ -5351,10 +5361,10 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
{
_SetSearchFlags(hwnd, sg_pefrData);
if (sg_pefrData->bMarkOccurences) {
if (sg_pefrData->bStateChanged || (StringCchCompareXA(g_lastFind, sg_pefrData->szFind) != 0)) {
if (sg_pefrData->bStateChanged || (StringCchCompareXA(s_lastFind, sg_pefrData->szFind) != 0)) {
_IGNORE_NOTIFY_CHANGE_;
if (EditToggleView(Globals.hwndEdit, false)) { _DeleteLineStateAll(LINESTATE_OCCURRENCE_MARK); }
StringCchCopyA(g_lastFind, COUNTOF(g_lastFind), sg_pefrData->szFind);
StringCchCopyA(s_lastFind, COUNTOF(s_lastFind), sg_pefrData->szFind);
RegExResult_t match = _FindHasMatch(Globals.hwndEdit, sg_pefrData, 0, (sg_pefrData->bMarkOccurences), false);
if (s_anyMatch != match) { s_anyMatch = match; }
// we have to set Sci's regex instance to first find (have substitution in place)
@ -5391,6 +5401,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
{
iSaveMarkOcc = Settings.MarkOccurrences;
bSaveOccVisible = Settings.MarkOccurrencesMatchVisible;
_bRestoreMarkOcc = true;
Settings.MarkOccurrences = 0;
Settings.MarkOccurrencesMatchVisible = false;
@ -5403,6 +5414,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA
else { // switched OFF
Settings.MarkOccurrences = iSaveMarkOcc;
Settings.MarkOccurrencesMatchVisible = bSaveOccVisible;
_bRestoreMarkOcc = false;
//DialogEnableWindow(hwnd, IDC_TOGGLE_VISIBILITY, (Settings.MarkOccurrences > 0) && !Settings.MarkOccurrencesMatchVisible);
DialogEnableWindow(hwnd, IDC_TOGGLE_VISIBILITY, false);
if (EditToggleView(Globals.hwndEdit, false)) {

View File

@ -84,8 +84,7 @@ static WCHAR s_wchTmpFilePath[MAX_PATH + 1] = { L'\0' };
static WCHAR* const s_tchAvailableLanguages = L"af-ZA be-BY de-DE es-ES en-GB fr-FR ja-JP nl-NL ru-RU zh-CN"; // en-US internal
static int s_iSettingsVersion = CFG_VER_NONE;
static bool s_bSaveSettings = true;
static int s_iSettingsVersion = CFG_VER_CURRENT;
static bool s_bEnableSaveSettings = true;
static prefix_t s_mxSBPrefix[STATUS_SECTOR_COUNT];
@ -2950,7 +2949,7 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam)
CheckMenuRadioItem(hmenu,IDM_VIEW_NOESCFUNC,IDM_VIEW_ESCEXIT,i,MF_BYCOMMAND);
i = (int)StringCchLenW(Globals.IniFile,COUNTOF(Globals.IniFile));
CheckCmd(hmenu,IDM_VIEW_SAVESETTINGS,s_bSaveSettings && i);
CheckCmd(hmenu,IDM_VIEW_SAVESETTINGS,Settings.SaveSettings && i);
EnableCmd(hmenu,IDM_VIEW_REUSEWINDOW,i);
EnableCmd(hmenu,IDM_VIEW_STICKYWINPOS,i);
@ -5011,11 +5010,11 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
case IDM_VIEW_SAVESETTINGS:
if (IsCmdEnabled(hwnd, IDM_VIEW_SAVESETTINGS)) {
s_bSaveSettings = !s_bSaveSettings;
if (s_bSaveSettings)
Settings.SaveSettings = !Settings.SaveSettings;
if (Settings.SaveSettings == Defaults.SaveSettings)
IniSetString(L"Settings", L"SaveSettings", NULL);
else
IniSetBool(L"Settings", L"SaveSettings", s_bSaveSettings);
IniSetBool(L"Settings", L"SaveSettings", Settings.SaveSettings);
}
break;
@ -6614,9 +6613,11 @@ void LoadSettings()
if (pIniSection)
{
// prerequisites
s_bSaveSettings = IniGetBool(L"Settings", L"SaveSettings", true);
s_iSettingsVersion = IniGetInt(L"Settings", L"SettingsVersion", CFG_VER_NONE);
Defaults.SaveSettings = true;
Settings.SaveSettings = IniGetBool(L"Settings", L"SaveSettings", Defaults.SaveSettings);
// first load "hard coded" .ini-Settings
// --------------------------------------------------------------------------
LoadIniSection(L"Settings2", pIniSection, cchIniSection);
@ -6648,7 +6649,7 @@ void LoadSettings()
// deprecated
Defaults.RenderingTechnology = IniSectionGetInt(pIniSection, L"SciDirectWriteTech", -111);
if ((Defaults.RenderingTechnology != -111) && s_bSaveSettings) {
if ((Defaults.RenderingTechnology != -111) && Settings.SaveSettings) {
// cleanup
IniSetString(L"Settings2", L"SciDirectWriteTech", NULL);
}
@ -6656,7 +6657,7 @@ void LoadSettings()
// Settings2 deprecated
Defaults.Bidirectional = IniSectionGetInt(pIniSection, L"EnableBidirectionalSupport", -111);
if ((Defaults.Bidirectional != -111) && s_bSaveSettings) {
if ((Defaults.Bidirectional != -111) && Settings.SaveSettings) {
// cleanup
IniSetString(L"Settings2", L"EnableBidirectionalSupport", NULL);
}
@ -6747,12 +6748,12 @@ void LoadSettings()
LoadIniSection(L"Settings", pIniSection, cchIniSection);
// --------------------------------------------------------------------------
#define GET_BOOL_VALUE_FROM_INISECTION(VARNAME,DEFAULT) \
Defaults.##VARNAME = DEFAULT; \
#define GET_BOOL_VALUE_FROM_INISECTION(VARNAME,DEFAULT) \
Defaults.##VARNAME = DEFAULT; \
Settings.##VARNAME = IniSectionGetBool(pIniSection, STRGW(VARNAME), Defaults.##VARNAME)
#define GET_INT_VALUE_FROM_INISECTION(VARNAME,DEFAULT,MIN,MAX) \
Defaults.##VARNAME = DEFAULT; \
#define GET_INT_VALUE_FROM_INISECTION(VARNAME,DEFAULT,MIN,MAX) \
Defaults.##VARNAME = DEFAULT; \
Settings.##VARNAME = clampi(IniSectionGetInt(pIniSection, STRGW(VARNAME), Defaults.##VARNAME),MIN,MAX)
GET_BOOL_VALUE_FROM_INISECTION(SaveRecentFiles, true);
@ -6840,8 +6841,8 @@ void LoadSettings()
GET_BOOL_VALUE_FROM_INISECTION(ViewWhiteSpace, false);
GET_BOOL_VALUE_FROM_INISECTION(ViewEOLs, false);
GET_INT_VALUE_FROM_INISECTION(DefaultEncoding, CPI_NONE, CED_NO_MAPPING, Encoding_CountOf()-1);
// if DefaultEncoding is not defined set to UTF-8 //~system's current code-page
int const iPrefEncIniSetting = Encoding_MapIniSetting(false, PREFERRED_DEFAULT_ENCODING);
GET_INT_VALUE_FROM_INISECTION(DefaultEncoding, iPrefEncIniSetting, CED_NO_MAPPING, Encoding_CountOf()-1);
Settings.DefaultEncoding = ((Settings.DefaultEncoding == CPI_NONE) ?
PREFERRED_DEFAULT_ENCODING : Encoding_MapIniSetting(true, Settings.DefaultEncoding));
@ -7080,7 +7081,7 @@ void LoadSettings()
#define SAVE_VALUE_IF_NOT_EQ_DEFAULT(TYPE,VARNAME) \
if (Settings.##VARNAME != Defaults.##VARNAME) { \
IniSectionSet##TYPE(pIniSection, STRGW(VARNAME), Settings.##VARNAME); \
IniSectionSet##TYPE(pIniSection, STRGW(VARNAME), Settings.##VARNAME); \
}
// ----------------------------------------------------------------------------
@ -7096,8 +7097,11 @@ void SaveSettings(bool bSaveSettingsNow)
CreateIniFile();
if (!(s_bSaveSettings || bSaveSettingsNow)) {
IniSetBool(L"Settings", L"SaveSettings", s_bSaveSettings);
if (!(Settings.SaveSettings || bSaveSettingsNow)) {
IniSetInt(L"Settings", L"SettingsVersion", CFG_VER_CURRENT);
if (Settings.SaveSettings != Defaults.SaveSettings) {
IniSetBool(L"Settings", L"SaveSettings", Settings.SaveSettings);
}
return;
}
// update window placement
@ -7110,10 +7114,11 @@ void SaveSettings(bool bSaveSettingsNow)
int const cchIniSection = INISECTIONBUFCNT * HUGE_BUFFER;
WCHAR *pIniSection = AllocMem(sizeof(WCHAR) * cchIniSection, HEAP_ZERO_MEMORY);
if (pIniSection) {
if (pIniSection)
{
IniSectionSetInt(pIniSection, L"SettingsVersion", CFG_VER_CURRENT);
IniSectionSetBool(pIniSection, L"SaveSettings", s_bSaveSettings);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, SaveSettings);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, SaveRecentFiles);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, PreserveCaretPos);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, SaveFindReplace);
@ -7200,9 +7205,10 @@ void SaveSettings(bool bSaveSettingsNow)
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, ViewWhiteSpace);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, ViewEOLs);
if (Settings.DefaultEncoding != Defaults.DefaultEncoding) {
IniSectionSetInt(pIniSection, L"DefaultEncoding", Encoding_MapIniSetting(false, Settings.DefaultEncoding));
}
Settings.DefaultEncoding = Encoding_MapIniSetting(false, Settings.DefaultEncoding);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, DefaultEncoding);
Settings.DefaultEncoding = Encoding_MapIniSetting(true, Settings.DefaultEncoding);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, UseDefaultForFileEncoding);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, SkipUnicodeDetection);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, SkipANSICodePageDetection);
@ -7903,8 +7909,8 @@ int FindIniFile() {
bFound = _CheckIniFile(tchPath,tchModule);
}
if (bFound) {
if (bFound)
{
// allow two redirections: administrator -> user -> custom
if (_CheckIniFileRedirect(MKWCS(APPNAME), MKWCS(APPNAME) L".ini", tchPath, tchModule)) {
_CheckIniFileRedirect(MKWCS(APPNAME), MKWCS(APPNAME) L".ini", tchPath, tchModule);
@ -8843,7 +8849,7 @@ void UpdateSettingsCmds()
{
HMENU hmenu = GetSystemMenu(Globals.hwndMain, false);
bool hasIniFile = (StringCchLenW(Globals.IniFile,COUNTOF(Globals.IniFile)) > 0 || StringCchLenW(s_wchIniFile2,COUNTOF(s_wchIniFile2)) > 0);
CheckCmd(hmenu, IDM_VIEW_SAVESETTINGS, s_bSaveSettings && s_bEnableSaveSettings);
CheckCmd(hmenu, IDM_VIEW_SAVESETTINGS, Settings.SaveSettings && s_bEnableSaveSettings);
EnableCmd(hmenu, IDM_VIEW_SAVESETTINGS, hasIniFile && s_bEnableSaveSettings);
EnableCmd(hmenu, IDM_VIEW_SAVESETTINGSNOW, hasIniFile && s_bEnableSaveSettings);
if (SciCall_GetZoom() != 100) { EditShowZoomCallTip(Globals.hwndEdit); }

View File

@ -258,6 +258,7 @@ extern GLOBALS_T Globals;
typedef struct _settings_t
{
bool SaveSettings;
bool SaveRecentFiles;
bool PreserveCaretPos;
bool SaveFindReplace;