Merge pull request #952 from RaiKoHoff/Dev_Master

Menu for language switching
This commit is contained in:
Rainer Kottenhoff 2019-02-27 02:42:09 +01:00 committed by GitHub
commit 6734ce3d4d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
30 changed files with 839 additions and 375 deletions

View File

@ -364,6 +364,22 @@
//#define CMD_LEFT 20054
//#define CMD_RIGHT 20055
#define IDM_MUI_LANG_EN_US 34500
#define IDM_MUI_LANG_AF_ZA 34501
#define IDM_MUI_LANG_BE_BY 34502
#define IDM_MUI_LANG_DE_DE 34503
#define IDM_MUI_LANG_EN_GB 34504
#define IDM_MUI_LANG_ES_ES 34505
#define IDM_MUI_LANG_FR_FR 34506
#define IDM_MUI_LANG_HU_HU 34507
#define IDM_MUI_LANG_IT_IT 34508
#define IDM_MUI_LANG_JP_JP 34509
#define IDM_MUI_LANG_KO_KR 34510
#define IDM_MUI_LANG_NL_NL 34511
#define IDM_MUI_LANG_PT_BR 34512
#define IDM_MUI_LANG_RU_RU 34513
#define IDM_MUI_LANG_ZH_CN 34514
#define IDM_FILE_NEW 40000
#define IDM_FILE_OPEN 40001
#define IDM_FILE_REVERT 40002

View File

@ -426,6 +426,24 @@ BEGIN
MENUITEM "Maak Stellings Lêer &Oop\tCtrl+F7", CMD_OPENINIFILE
END
END
POPUP "Language"
BEGIN
MENUITEM "English (United States)", IDM_MUI_LANG_EN_US
MENUITEM "Afrikaans (South Africa )", IDM_MUI_LANG_AF_ZA
MENUITEM "Belarusian (Belarus)", IDM_MUI_LANG_BE_BY
MENUITEM "German (Germany)", IDM_MUI_LANG_DE_DE
MENUITEM "English (United Kingdom)", IDM_MUI_LANG_EN_GB
MENUITEM "Spanish (Spain Modern)", IDM_MUI_LANG_ES_ES
MENUITEM "French (France )", IDM_MUI_LANG_FR_FR
MENUITEM "Hungarian (Hungary)", IDM_MUI_LANG_HU_HU
MENUITEM "Italian (Italy)", IDM_MUI_LANG_IT_IT
MENUITEM "Japanese (Japan)", IDM_MUI_LANG_JP_JP
MENUITEM "Korean (Korea)", IDM_MUI_LANG_KO_KR
MENUITEM "Dutch (Netherlands )", IDM_MUI_LANG_NL_NL
MENUITEM "Portuguese (Brazil)", IDM_MUI_LANG_PT_BR
MENUITEM "Russian (Russia)", IDM_MUI_LANG_RU_RU
MENUITEM "Chinese (Hans)", IDM_MUI_LANG_ZH_CN
END
POPUP "&Help"
BEGIN
MENUITEM "Aanlyn &Dokumentasie\tF1", IDM_HELP_ONLINEDOCUMENTATION

View File

@ -426,6 +426,24 @@ BEGIN
MENUITEM "&Àäêðûöü ôàéë íàëàäà¢\tCtrl+F7", CMD_OPENINIFILE
END
END
POPUP "Language"
BEGIN
MENUITEM "English (United States)", IDM_MUI_LANG_EN_US
MENUITEM "Afrikaans (South Africa )", IDM_MUI_LANG_AF_ZA
MENUITEM "Belarusian (Belarus)", IDM_MUI_LANG_BE_BY
MENUITEM "German (Germany)", IDM_MUI_LANG_DE_DE
MENUITEM "English (United Kingdom)", IDM_MUI_LANG_EN_GB
MENUITEM "Spanish (Spain Modern)", IDM_MUI_LANG_ES_ES
MENUITEM "French (France )", IDM_MUI_LANG_FR_FR
MENUITEM "Hungarian (Hungary)", IDM_MUI_LANG_HU_HU
MENUITEM "Italian (Italy)", IDM_MUI_LANG_IT_IT
MENUITEM "Japanese (Japan)", IDM_MUI_LANG_JP_JP
MENUITEM "Korean (Korea)", IDM_MUI_LANG_KO_KR
MENUITEM "Dutch (Netherlands )", IDM_MUI_LANG_NL_NL
MENUITEM "Portuguese (Brazil)", IDM_MUI_LANG_PT_BR
MENUITEM "Russian (Russia)", IDM_MUI_LANG_RU_RU
MENUITEM "Chinese (Hans)", IDM_MUI_LANG_ZH_CN
END
POPUP "&Äàâåäêà"
BEGIN
MENUITEM "Äàïà&ìîæí³ê Online\tF1", IDM_HELP_ONLINEDOCUMENTATION

View File

@ -426,6 +426,24 @@ BEGIN
MENUITEM "&Einstellungsdatei bearbeiten\tCtrl+F7", CMD_OPENINIFILE
END
END
POPUP "Sprache"
BEGIN
MENUITEM "English (United States)", IDM_MUI_LANG_EN_US
MENUITEM "Afrikaans (South Africa )", IDM_MUI_LANG_AF_ZA
MENUITEM "Belarusian (Belarus)", IDM_MUI_LANG_BE_BY
MENUITEM "German (Germany)", IDM_MUI_LANG_DE_DE
MENUITEM "English (United Kingdom)", IDM_MUI_LANG_EN_GB
MENUITEM "Spanish (Spain Modern)", IDM_MUI_LANG_ES_ES
MENUITEM "French (France )", IDM_MUI_LANG_FR_FR
MENUITEM "Hungarian (Hungary)", IDM_MUI_LANG_HU_HU
MENUITEM "Italian (Italy)", IDM_MUI_LANG_IT_IT
MENUITEM "Japanese (Japan)", IDM_MUI_LANG_JP_JP
MENUITEM "Korean (Korea)", IDM_MUI_LANG_KO_KR
MENUITEM "Dutch (Netherlands )", IDM_MUI_LANG_NL_NL
MENUITEM "Portuguese (Brazil)", IDM_MUI_LANG_PT_BR
MENUITEM "Russian (Russia)", IDM_MUI_LANG_RU_RU
MENUITEM "Chinese (Hans)", IDM_MUI_LANG_ZH_CN
END
POPUP "&Hilfe"
BEGIN
MENUITEM "&Online Dokumentation\tF1", IDM_HELP_ONLINEDOCUMENTATION

View File

@ -426,6 +426,24 @@ BEGIN
MENUITEM "&Open Settings File\tCtrl+F7", CMD_OPENINIFILE
END
END
POPUP "Language"
BEGIN
MENUITEM "English (United States)", IDM_MUI_LANG_EN_US
MENUITEM "Afrikaans (South Africa )", IDM_MUI_LANG_AF_ZA
MENUITEM "Belarusian (Belarus)", IDM_MUI_LANG_BE_BY
MENUITEM "German (Germany)", IDM_MUI_LANG_DE_DE
MENUITEM "English (United Kingdom)", IDM_MUI_LANG_EN_GB
MENUITEM "Spanish (Spain Modern)", IDM_MUI_LANG_ES_ES
MENUITEM "French (France )", IDM_MUI_LANG_FR_FR
MENUITEM "Hungarian (Hungary)", IDM_MUI_LANG_HU_HU
MENUITEM "Italian (Italy)", IDM_MUI_LANG_IT_IT
MENUITEM "Japanese (Japan)", IDM_MUI_LANG_JP_JP
MENUITEM "Korean (Korea)", IDM_MUI_LANG_KO_KR
MENUITEM "Dutch (Netherlands )", IDM_MUI_LANG_NL_NL
MENUITEM "Portuguese (Brazil)", IDM_MUI_LANG_PT_BR
MENUITEM "Russian (Russia)", IDM_MUI_LANG_RU_RU
MENUITEM "Chinese (Hans)", IDM_MUI_LANG_ZH_CN
END
POPUP "&Help"
BEGIN
MENUITEM "&Online Documentation\tF1", IDM_HELP_ONLINEDOCUMENTATION

View File

@ -426,6 +426,24 @@ BEGIN
MENUITEM "&Open Settings File\tCtrl+F7", CMD_OPENINIFILE
END
END
POPUP "Language"
BEGIN
MENUITEM "English (United States)", IDM_MUI_LANG_EN_US
MENUITEM "Afrikaans (South Africa )", IDM_MUI_LANG_AF_ZA
MENUITEM "Belarusian (Belarus)", IDM_MUI_LANG_BE_BY
MENUITEM "German (Germany)", IDM_MUI_LANG_DE_DE
MENUITEM "English (United Kingdom)", IDM_MUI_LANG_EN_GB
MENUITEM "Spanish (Spain Modern)", IDM_MUI_LANG_ES_ES
MENUITEM "French (France )", IDM_MUI_LANG_FR_FR
MENUITEM "Hungarian (Hungary)", IDM_MUI_LANG_HU_HU
MENUITEM "Italian (Italy)", IDM_MUI_LANG_IT_IT
MENUITEM "Japanese (Japan)", IDM_MUI_LANG_JP_JP
MENUITEM "Korean (Korea)", IDM_MUI_LANG_KO_KR
MENUITEM "Dutch (Netherlands )", IDM_MUI_LANG_NL_NL
MENUITEM "Portuguese (Brazil)", IDM_MUI_LANG_PT_BR
MENUITEM "Russian (Russia)", IDM_MUI_LANG_RU_RU
MENUITEM "Chinese (Hans)", IDM_MUI_LANG_ZH_CN
END
POPUP "&Help"
BEGIN
MENUITEM "&Online Documentation\tF1", IDM_HELP_ONLINEDOCUMENTATION

View File

@ -426,6 +426,24 @@ BEGIN
MENUITEM "Abrir el archiv&o de configuración\tCtrl+F7", CMD_OPENINIFILE
END
END
POPUP "Language"
BEGIN
MENUITEM "English (United States)", IDM_MUI_LANG_EN_US
MENUITEM "Afrikaans (South Africa )", IDM_MUI_LANG_AF_ZA
MENUITEM "Belarusian (Belarus)", IDM_MUI_LANG_BE_BY
MENUITEM "German (Germany)", IDM_MUI_LANG_DE_DE
MENUITEM "English (United Kingdom)", IDM_MUI_LANG_EN_GB
MENUITEM "Spanish (Spain Modern)", IDM_MUI_LANG_ES_ES
MENUITEM "French (France )", IDM_MUI_LANG_FR_FR
MENUITEM "Hungarian (Hungary)", IDM_MUI_LANG_HU_HU
MENUITEM "Italian (Italy)", IDM_MUI_LANG_IT_IT
MENUITEM "Japanese (Japan)", IDM_MUI_LANG_JP_JP
MENUITEM "Korean (Korea)", IDM_MUI_LANG_KO_KR
MENUITEM "Dutch (Netherlands )", IDM_MUI_LANG_NL_NL
MENUITEM "Portuguese (Brazil)", IDM_MUI_LANG_PT_BR
MENUITEM "Russian (Russia)", IDM_MUI_LANG_RU_RU
MENUITEM "Chinese (Hans)", IDM_MUI_LANG_ZH_CN
END
POPUP "&Ayuda"
BEGIN
MENUITEM "D&ocumentación en línea\tF1", IDM_HELP_ONLINEDOCUMENTATION

View File

@ -426,6 +426,24 @@ BEGIN
MENUITEM "&Ouvrir le ficher de configuration\tCtrl+F7", CMD_OPENINIFILE
END
END
POPUP "Language"
BEGIN
MENUITEM "English (United States)", IDM_MUI_LANG_EN_US
MENUITEM "Afrikaans (South Africa )", IDM_MUI_LANG_AF_ZA
MENUITEM "Belarusian (Belarus)", IDM_MUI_LANG_BE_BY
MENUITEM "German (Germany)", IDM_MUI_LANG_DE_DE
MENUITEM "English (United Kingdom)", IDM_MUI_LANG_EN_GB
MENUITEM "Spanish (Spain Modern)", IDM_MUI_LANG_ES_ES
MENUITEM "French (France )", IDM_MUI_LANG_FR_FR
MENUITEM "Hungarian (Hungary)", IDM_MUI_LANG_HU_HU
MENUITEM "Italian (Italy)", IDM_MUI_LANG_IT_IT
MENUITEM "Japanese (Japan)", IDM_MUI_LANG_JP_JP
MENUITEM "Korean (Korea)", IDM_MUI_LANG_KO_KR
MENUITEM "Dutch (Netherlands )", IDM_MUI_LANG_NL_NL
MENUITEM "Portuguese (Brazil)", IDM_MUI_LANG_PT_BR
MENUITEM "Russian (Russia)", IDM_MUI_LANG_RU_RU
MENUITEM "Chinese (Hans)", IDM_MUI_LANG_ZH_CN
END
POPUP "&Aide"
BEGIN
MENUITEM "Documentation &en ligne\tF1", IDM_HELP_ONLINEDOCUMENTATION

View File

@ -426,6 +426,24 @@ BEGIN
MENUITEM "&Open Settings File\tCtrl+F7", CMD_OPENINIFILE
END
END
POPUP "Language"
BEGIN
MENUITEM "English (United States)", IDM_MUI_LANG_EN_US
MENUITEM "Afrikaans (South Africa )", IDM_MUI_LANG_AF_ZA
MENUITEM "Belarusian (Belarus)", IDM_MUI_LANG_BE_BY
MENUITEM "German (Germany)", IDM_MUI_LANG_DE_DE
MENUITEM "English (United Kingdom)", IDM_MUI_LANG_EN_GB
MENUITEM "Spanish (Spain Modern)", IDM_MUI_LANG_ES_ES
MENUITEM "French (France )", IDM_MUI_LANG_FR_FR
MENUITEM "Hungarian (Hungary)", IDM_MUI_LANG_HU_HU
MENUITEM "Italian (Italy)", IDM_MUI_LANG_IT_IT
MENUITEM "Japanese (Japan)", IDM_MUI_LANG_JP_JP
MENUITEM "Korean (Korea)", IDM_MUI_LANG_KO_KR
MENUITEM "Dutch (Netherlands )", IDM_MUI_LANG_NL_NL
MENUITEM "Portuguese (Brazil)", IDM_MUI_LANG_PT_BR
MENUITEM "Russian (Russia)", IDM_MUI_LANG_RU_RU
MENUITEM "Chinese (Hans)", IDM_MUI_LANG_ZH_CN
END
POPUP "&Help"
BEGIN
MENUITEM "&Online Documentation\tF1", IDM_HELP_ONLINEDOCUMENTATION

View File

@ -426,6 +426,24 @@ BEGIN
MENUITEM "&Open Settings File\tCtrl+F7", CMD_OPENINIFILE
END
END
POPUP "Language"
BEGIN
MENUITEM "English (United States)", IDM_MUI_LANG_EN_US
MENUITEM "Afrikaans (South Africa )", IDM_MUI_LANG_AF_ZA
MENUITEM "Belarusian (Belarus)", IDM_MUI_LANG_BE_BY
MENUITEM "German (Germany)", IDM_MUI_LANG_DE_DE
MENUITEM "English (United Kingdom)", IDM_MUI_LANG_EN_GB
MENUITEM "Spanish (Spain Modern)", IDM_MUI_LANG_ES_ES
MENUITEM "French (France )", IDM_MUI_LANG_FR_FR
MENUITEM "Hungarian (Hungary)", IDM_MUI_LANG_HU_HU
MENUITEM "Italian (Italy)", IDM_MUI_LANG_IT_IT
MENUITEM "Japanese (Japan)", IDM_MUI_LANG_JP_JP
MENUITEM "Korean (Korea)", IDM_MUI_LANG_KO_KR
MENUITEM "Dutch (Netherlands )", IDM_MUI_LANG_NL_NL
MENUITEM "Portuguese (Brazil)", IDM_MUI_LANG_PT_BR
MENUITEM "Russian (Russia)", IDM_MUI_LANG_RU_RU
MENUITEM "Chinese (Hans)", IDM_MUI_LANG_ZH_CN
END
POPUP "&Help"
BEGIN
MENUITEM "&Online Documentation\tF1", IDM_HELP_ONLINEDOCUMENTATION

View File

@ -426,6 +426,24 @@ BEGIN
MENUITEM "設定ファイルを開く(&O)\tCtrl+F7", CMD_OPENINIFILE
END
END
POPUP "Language"
BEGIN
MENUITEM "English (United States)", IDM_MUI_LANG_EN_US
MENUITEM "Afrikaans (South Africa )", IDM_MUI_LANG_AF_ZA
MENUITEM "Belarusian (Belarus)", IDM_MUI_LANG_BE_BY
MENUITEM "German (Germany)", IDM_MUI_LANG_DE_DE
MENUITEM "English (United Kingdom)", IDM_MUI_LANG_EN_GB
MENUITEM "Spanish (Spain Modern)", IDM_MUI_LANG_ES_ES
MENUITEM "French (France )", IDM_MUI_LANG_FR_FR
MENUITEM "Hungarian (Hungary)", IDM_MUI_LANG_HU_HU
MENUITEM "Italian (Italy)", IDM_MUI_LANG_IT_IT
MENUITEM "Japanese (Japan)", IDM_MUI_LANG_JP_JP
MENUITEM "Korean (Korea)", IDM_MUI_LANG_KO_KR
MENUITEM "Dutch (Netherlands )", IDM_MUI_LANG_NL_NL
MENUITEM "Portuguese (Brazil)", IDM_MUI_LANG_PT_BR
MENUITEM "Russian (Russia)", IDM_MUI_LANG_RU_RU
MENUITEM "Chinese (Hans)", IDM_MUI_LANG_ZH_CN
END
POPUP "ヘルプ(&H)"
BEGIN
MENUITEM "オンラインヘルプの表示(英)(&O)\tF1", IDM_HELP_ONLINEDOCUMENTATION

View File

@ -426,6 +426,24 @@ BEGIN
MENUITEM "설정 파일 열기(&O)\tCtrl+F7", CMD_OPENINIFILE
END
END
POPUP "Language"
BEGIN
MENUITEM "English (United States)", IDM_MUI_LANG_EN_US
MENUITEM "Afrikaans (South Africa )", IDM_MUI_LANG_AF_ZA
MENUITEM "Belarusian (Belarus)", IDM_MUI_LANG_BE_BY
MENUITEM "German (Germany)", IDM_MUI_LANG_DE_DE
MENUITEM "English (United Kingdom)", IDM_MUI_LANG_EN_GB
MENUITEM "Spanish (Spain Modern)", IDM_MUI_LANG_ES_ES
MENUITEM "French (France )", IDM_MUI_LANG_FR_FR
MENUITEM "Hungarian (Hungary)", IDM_MUI_LANG_HU_HU
MENUITEM "Italian (Italy)", IDM_MUI_LANG_IT_IT
MENUITEM "Japanese (Japan)", IDM_MUI_LANG_JP_JP
MENUITEM "Korean (Korea)", IDM_MUI_LANG_KO_KR
MENUITEM "Dutch (Netherlands )", IDM_MUI_LANG_NL_NL
MENUITEM "Portuguese (Brazil)", IDM_MUI_LANG_PT_BR
MENUITEM "Russian (Russia)", IDM_MUI_LANG_RU_RU
MENUITEM "Chinese (Hans)", IDM_MUI_LANG_ZH_CN
END
POPUP "도움말(&H)"
BEGIN
MENUITEM "온라인 설명서(&O)\tF1", IDM_HELP_ONLINEDOCUMENTATION

View File

@ -426,6 +426,24 @@ BEGIN
MENUITEM "&Open het configuratie bestand\tCtrl+F7", CMD_OPENINIFILE
END
END
POPUP "Language"
BEGIN
MENUITEM "English (United States)", IDM_MUI_LANG_EN_US
MENUITEM "Afrikaans (South Africa )", IDM_MUI_LANG_AF_ZA
MENUITEM "Belarusian (Belarus)", IDM_MUI_LANG_BE_BY
MENUITEM "German (Germany)", IDM_MUI_LANG_DE_DE
MENUITEM "English (United Kingdom)", IDM_MUI_LANG_EN_GB
MENUITEM "Spanish (Spain Modern)", IDM_MUI_LANG_ES_ES
MENUITEM "French (France )", IDM_MUI_LANG_FR_FR
MENUITEM "Hungarian (Hungary)", IDM_MUI_LANG_HU_HU
MENUITEM "Italian (Italy)", IDM_MUI_LANG_IT_IT
MENUITEM "Japanese (Japan)", IDM_MUI_LANG_JP_JP
MENUITEM "Korean (Korea)", IDM_MUI_LANG_KO_KR
MENUITEM "Dutch (Netherlands )", IDM_MUI_LANG_NL_NL
MENUITEM "Portuguese (Brazil)", IDM_MUI_LANG_PT_BR
MENUITEM "Russian (Russia)", IDM_MUI_LANG_RU_RU
MENUITEM "Chinese (Hans)", IDM_MUI_LANG_ZH_CN
END
POPUP "&Help"
BEGIN
MENUITEM "&Online documentatie\tF1", IDM_HELP_ONLINEDOCUMENTATION

View File

@ -426,6 +426,24 @@ BEGIN
MENUITEM "&Open Settings File\tCtrl+F7", CMD_OPENINIFILE
END
END
POPUP "Language"
BEGIN
MENUITEM "English (United States)", IDM_MUI_LANG_EN_US
MENUITEM "Afrikaans (South Africa )", IDM_MUI_LANG_AF_ZA
MENUITEM "Belarusian (Belarus)", IDM_MUI_LANG_BE_BY
MENUITEM "German (Germany)", IDM_MUI_LANG_DE_DE
MENUITEM "English (United Kingdom)", IDM_MUI_LANG_EN_GB
MENUITEM "Spanish (Spain Modern)", IDM_MUI_LANG_ES_ES
MENUITEM "French (France )", IDM_MUI_LANG_FR_FR
MENUITEM "Hungarian (Hungary)", IDM_MUI_LANG_HU_HU
MENUITEM "Italian (Italy)", IDM_MUI_LANG_IT_IT
MENUITEM "Japanese (Japan)", IDM_MUI_LANG_JP_JP
MENUITEM "Korean (Korea)", IDM_MUI_LANG_KO_KR
MENUITEM "Dutch (Netherlands )", IDM_MUI_LANG_NL_NL
MENUITEM "Portuguese (Brazil)", IDM_MUI_LANG_PT_BR
MENUITEM "Russian (Russia)", IDM_MUI_LANG_RU_RU
MENUITEM "Chinese (Hans)", IDM_MUI_LANG_ZH_CN
END
POPUP "&Help"
BEGIN
MENUITEM "&Online Documentation\tF1", IDM_HELP_ONLINEDOCUMENTATION

View File

@ -426,6 +426,24 @@ BEGIN
MENUITEM "&Îòêðûòü ôàéë íàñòðîåê\tCtrl+F7", CMD_OPENINIFILE
END
END
POPUP "Language"
BEGIN
MENUITEM "English (United States)", IDM_MUI_LANG_EN_US
MENUITEM "Afrikaans (South Africa )", IDM_MUI_LANG_AF_ZA
MENUITEM "Belarusian (Belarus)", IDM_MUI_LANG_BE_BY
MENUITEM "German (Germany)", IDM_MUI_LANG_DE_DE
MENUITEM "English (United Kingdom)", IDM_MUI_LANG_EN_GB
MENUITEM "Spanish (Spain Modern)", IDM_MUI_LANG_ES_ES
MENUITEM "French (France )", IDM_MUI_LANG_FR_FR
MENUITEM "Hungarian (Hungary)", IDM_MUI_LANG_HU_HU
MENUITEM "Italian (Italy)", IDM_MUI_LANG_IT_IT
MENUITEM "Japanese (Japan)", IDM_MUI_LANG_JP_JP
MENUITEM "Korean (Korea)", IDM_MUI_LANG_KO_KR
MENUITEM "Dutch (Netherlands )", IDM_MUI_LANG_NL_NL
MENUITEM "Portuguese (Brazil)", IDM_MUI_LANG_PT_BR
MENUITEM "Russian (Russia)", IDM_MUI_LANG_RU_RU
MENUITEM "Chinese (Hans)", IDM_MUI_LANG_ZH_CN
END
POPUP "&Ñïðàâêà"
BEGIN
MENUITEM "&Ðóêîâîäñòâî Online\tF1", IDM_HELP_ONLINEDOCUMENTATION

View File

@ -426,6 +426,24 @@ BEGIN
MENUITEM "打开配置文件(&O)\tCtrl+F7", CMD_OPENINIFILE
END
END
POPUP "Language"
BEGIN
MENUITEM "English (United States)", IDM_MUI_LANG_EN_US
MENUITEM "Afrikaans (South Africa )", IDM_MUI_LANG_AF_ZA
MENUITEM "Belarusian (Belarus)", IDM_MUI_LANG_BE_BY
MENUITEM "German (Germany)", IDM_MUI_LANG_DE_DE
MENUITEM "English (United Kingdom)", IDM_MUI_LANG_EN_GB
MENUITEM "Spanish (Spain Modern)", IDM_MUI_LANG_ES_ES
MENUITEM "French (France )", IDM_MUI_LANG_FR_FR
MENUITEM "Hungarian (Hungary)", IDM_MUI_LANG_HU_HU
MENUITEM "Italian (Italy)", IDM_MUI_LANG_IT_IT
MENUITEM "Japanese (Japan)", IDM_MUI_LANG_JP_JP
MENUITEM "Korean (Korea)", IDM_MUI_LANG_KO_KR
MENUITEM "Dutch (Netherlands )", IDM_MUI_LANG_NL_NL
MENUITEM "Portuguese (Brazil)", IDM_MUI_LANG_PT_BR
MENUITEM "Russian (Russia)", IDM_MUI_LANG_RU_RU
MENUITEM "Chinese (Hans)", IDM_MUI_LANG_ZH_CN
END
POPUP "帮助(&H)"
BEGIN
MENUITEM "在线文档(&O)\tF1", IDM_HELP_ONLINEDOCUMENTATION

View File

@ -12,19 +12,8 @@
* *
* *
*******************************************************************************/
#if !defined(WINVER)
#define WINVER 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#if !defined(_WIN32_WINNT)
#define _WIN32_WINNT 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#if !defined(NTDDI_VERSION)
#define NTDDI_VERSION 0x06010000 /*NTDDI_WIN7*/
#endif
#define VC_EXTRALEAN 1
#define WIN32_LEAN_AND_MEAN 1
#define NOMINMAX 1
#include <windows.h>
#include "Helpers.h"
#include <commctrl.h>
#include <shlobj.h>
#include <shellapi.h>
@ -43,9 +32,9 @@
#include "Dlapi.h"
#include "resource.h"
#include "Version.h"
#include "Helpers.h"
#include "Encoding.h"
#include "TypeDefs.h"
#include "MuiLanguage.h"
#include "SciCall.h"
#include "Dialogs.h"

View File

@ -12,25 +12,14 @@
* *
* *
*******************************************************************************/
#if !defined(WINVER)
#define WINVER 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#if !defined(_WIN32_WINNT)
#define _WIN32_WINNT 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#if !defined(NTDDI_VERSION)
#define NTDDI_VERSION 0x06010000 /*NTDDI_WIN7*/
#endif
#define VC_EXTRALEAN 1
#define WIN32_LEAN_AND_MEAN 1
#define NOMINMAX 1
#include <windows.h>
#include "Helpers.h"
#include <commctrl.h>
#include <shlobj.h>
#include <shellapi.h>
#include <shlwapi.h>
#include <string.h>
#include "Helpers.h"
#include "Dlapi.h"

View File

@ -13,20 +13,8 @@
* *
*******************************************************************************/
#if !defined(WINVER)
#define WINVER 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#if !defined(_WIN32_WINNT)
#define _WIN32_WINNT 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#if !defined(NTDDI_VERSION)
#define NTDDI_VERSION 0x06010000 /*NTDDI_WIN7*/
#endif
#include "Helpers.h"
#define VC_EXTRALEAN 1
#define WIN32_LEAN_AND_MEAN 1
#define NOMINMAX 1
#include <windows.h>
#include <shlwapi.h>
#include <commctrl.h>
#include <commdlg.h>
@ -46,9 +34,8 @@
//#include "../uthash/utstring.h"
#include "../tinyexpr/tinyexpr.h"
#include "Helpers.h"
#include "Encoding.h"
#include "TypeDefs.h"
#include "MuiLanguage.h"
#include "SciCall.h"
#include "SciLexer.h"

View File

@ -15,19 +15,8 @@
* *
*******************************************************************************/
#if !defined(WINVER)
#define WINVER 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#if !defined(_WIN32_WINNT)
#define _WIN32_WINNT 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#if !defined(NTDDI_VERSION)
#define NTDDI_VERSION 0x06010000 /*NTDDI_WIN7*/
#endif
#define VC_EXTRALEAN 1
#define WIN32_LEAN_AND_MEAN 1
#define NOMINMAX 1
#include <windows.h>
#include "Helpers.h"
#include <shellapi.h>
#include <commctrl.h>
#include <stdlib.h>
@ -35,10 +24,12 @@
#include "../uthash/utarray.h"
#include "Scintilla.h"
#include "Helpers.h"
#include "resource.h"
#include "Encoding.h"
#include "MuiLanguage.h"
#include "Scintilla.h"
//=============================================================================
//

View File

@ -15,30 +15,20 @@
* *
*******************************************************************************/
#if !defined(WINVER)
#define WINVER 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#if !defined(_WIN32_WINNT)
#define _WIN32_WINNT 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#if !defined(NTDDI_VERSION)
#define NTDDI_VERSION 0x06010000 /*NTDDI_WIN7*/
#endif
#define VC_EXTRALEAN 1
#define WIN32_LEAN_AND_MEAN 1
#define NOMINMAX 1
#include <windows.h>
#include "Helpers.h"
//#include <uxtheme.h>
#include <shlobj.h>
#include <shellapi.h>
//#include <pathcch.h>
#include "Scintilla.h"
#include "resource.h"
#include "Edit.h"
#include "Encoding.h"
#include "MuiLanguage.h"
#include "Notepad3.h"
#include "Helpers.h"
#include "Scintilla.h"
//=============================================================================
@ -676,75 +666,6 @@ bool IsCmdEnabled(HWND hwnd,UINT uId)
return (!(ustate & (MF_GRAYED|MF_DISABLED)));
}
//=============================================================================
//
// LoadLngStringW()
//
int LoadLngStringW(UINT uID, LPWSTR lpBuffer, int nBufferMax)
{
const int nLen = LoadStringW(Globals.hLngResContainer, uID, lpBuffer, nBufferMax);
return (nLen != 0) ? nLen : LoadStringW(Globals.hInstance, uID, lpBuffer, nBufferMax);
}
//=============================================================================
//
// LoadLngStringW2MB()
//
static WCHAR s_tmpStringBuffer[512];
int LoadLngStringW2MB(UINT uID, LPSTR lpBuffer, int nBufferMax)
{
const int nLen = LoadStringW(Globals.hLngResContainer, uID, s_tmpStringBuffer, COUNTOF(s_tmpStringBuffer));
if (nLen == 0) { LoadStringW(Globals.hInstance, uID, s_tmpStringBuffer, COUNTOF(s_tmpStringBuffer)); }
return WideCharToMultiByte(CP_UTF8, 0, s_tmpStringBuffer, -1, lpBuffer, nBufferMax, NULL, NULL);
}
//=============================================================================
//
// LoadLngStringA()
//
int LoadLngStringA(UINT uID, LPSTR lpBuffer, int nBufferMax)
{
const int nLen = LoadStringA(Globals.hLngResContainer, uID, lpBuffer, nBufferMax);
return (nLen != 0) ? nLen : LoadStringA(Globals.hInstance, uID, lpBuffer, nBufferMax);
}
//=============================================================================
//
// FormatLngStringW()
//
int FormatLngStringW(LPWSTR lpOutput, int nOutput, UINT uIdFormat, ...)
{
WCHAR* pBuffer = AllocMem(sizeof(WCHAR)*nOutput, HEAP_ZERO_MEMORY);
if (pBuffer) {
if (LoadLngStringW(uIdFormat, pBuffer, nOutput)) {
StringCchVPrintfW(lpOutput, nOutput, pBuffer, (LPVOID)((PUINT_PTR)&uIdFormat + 1));
}
FreeMem(pBuffer);
return (int)StringCchLenW(lpOutput, nOutput);
}
return 0;
}
//=============================================================================
//
// FormatLngStringA()
//
int FormatLngStringA(LPSTR lpOutput, int nOutput, UINT uIdFormat, ...)
{
CHAR* pBuffer = AllocMem(sizeof(CHAR)*nOutput, HEAP_ZERO_MEMORY);
if (pBuffer) {
if (LoadLngStringA(uIdFormat, pBuffer, nOutput)) {
StringCchVPrintfA(lpOutput, nOutput, pBuffer, (LPVOID)((PUINT_PTR)&uIdFormat + 1));
}
FreeMem(pBuffer);
return (int)StringCchLenA(lpOutput, nOutput);
}
return 0;
}
//=============================================================================
//
// GetKnownFolderPath()
@ -764,7 +685,6 @@ bool GetKnownFolderPath(REFKNOWNFOLDERID rfid, LPWSTR lpOutPath, size_t cchCount
return false;
}
//=============================================================================
//
// PathRelativeToApp()

View File

@ -19,13 +19,12 @@
#define STRSAFE_NO_CB_FUNCTIONS
#define STRSAFE_NO_DEPRECATE // don't allow deprecated functions
#include "TypeDefs.h"
#include <math.h>
#include <strsafe.h>
#include <shlwapi.h>
#include <versionhelpers.h>
#include "TypeDefs.h"
// ============================================================================
// --- Disable/Enable some CodeAnalysis Warnings ---
@ -262,17 +261,6 @@ bool IsCmdEnabled(HWND hwnd, UINT uId);
if (GetFocus() == hctrl) { SendMessage((hdlg), WM_NEXTDLGCTL, 0, false); } }; EnableWindow(hctrl, (b)); }
int LoadLngStringW(UINT uID, LPWSTR lpBuffer, int nBufferMax);
int LoadLngStringA(UINT uID, LPSTR lpBuffer, int nBufferMax);
int FormatLngStringW(LPWSTR lpOutput, int nOutput, UINT uIdFormat, ...);
int FormatLngStringA(LPSTR lpOutput, int nOutput, UINT uIdFormat, ...);
int LoadLngStringW2MB(UINT uID, LPSTR lpBuffer, int nBufferMax);
#define GetLngString(id,pb,cb) LoadLngStringW((id),(pb),(cb))
#define GetLngStringA(id,pb,cb) LoadLngStringA((id),(pb),(cb))
#define GetLngStringW2MB(id,pb,cb) LoadLngStringW2MB((id),(pb),(cb))
bool GetKnownFolderPath(REFKNOWNFOLDERID, LPWSTR lpOutPath, size_t cchCount);
void PathRelativeToApp(LPWSTR lpszSrc,LPWSTR lpszDest,int cchDest,bool,bool,bool);
void PathAbsoluteFromApp(LPWSTR lpszSrc,LPWSTR lpszDest,int cchDest,bool);

354
src/MuiLanguage.c Normal file
View File

@ -0,0 +1,354 @@
/******************************************************************************
* *
* *
* Notepad3 *
* *
* MuiLanguage.c *
* General MUI Language support functions *
* *
* (c) Rizonesoft 2008-2019 *
* https://rizonesoft.com *
* *
* *
*******************************************************************************/
#include "Helpers.h"
#include <muiload.h>
#include "resource.h"
#include "Encoding.h"
#include "MuiLanguage.h"
//=============================================================================
MUILANGUAGE MUI_LanguageDLLs[NUM_OF_MUI_LANGUAGES] =
{
{ IDM_MUI_LANG_EN_US, L"en-US", MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), true, false }, // internal - must be 1st
//
{ IDM_MUI_LANG_AF_ZA, L"af-ZA", MAKELANGID(LANG_AFRIKAANS, SUBLANG_AFRIKAANS_SOUTH_AFRICA), false, false },
{ IDM_MUI_LANG_BE_BY, L"be-BY", MAKELANGID(LANG_BELARUSIAN, SUBLANG_BELARUSIAN_BELARUS), false, false },
{ IDM_MUI_LANG_DE_DE, L"de-DE", MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN), false, false },
{ IDM_MUI_LANG_EN_GB, L"en-GB", MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_UK), false, false },
{ IDM_MUI_LANG_ES_ES, L"es-ES", MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MODERN), false, false },
{ IDM_MUI_LANG_FR_FR, L"fr-FR", MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH), false, false },
{ IDM_MUI_LANG_HU_HU, L"hu-HU", MAKELANGID(LANG_HUNGARIAN, SUBLANG_HUNGARIAN_HUNGARY), false, false },
{ IDM_MUI_LANG_IT_IT, L"it-IT", MAKELANGID(LANG_ITALIAN, SUBLANG_ITALIAN), false, false },
{ IDM_MUI_LANG_JP_JP, L"ja-JP", MAKELANGID(LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN), false, false },
{ IDM_MUI_LANG_KO_KR, L"ko-KR", MAKELANGID(LANG_KOREAN, SUBLANG_KOREAN), false, false },
{ IDM_MUI_LANG_NL_NL, L"nl-NL", MAKELANGID(LANG_DUTCH, SUBLANG_DUTCH), false, false },
{ IDM_MUI_LANG_PT_BR, L"pt-BR", MAKELANGID(LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN), false, false },
{ IDM_MUI_LANG_RU_RU, L"ru-RU", MAKELANGID(LANG_RUSSIAN, SUBLANG_RUSSIAN_RUSSIA), false, false },
{ IDM_MUI_LANG_ZH_CN, L"zh-CN", MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), false, false}
};
//=============================================================================
//
// CheckAvailableLanguages
//
//
static void _CheckAvailableLanguageDLLs()
{
WCHAR wchRelPath[MAX_PATH];
WCHAR wchAbsPath[MAX_PATH];
for (int i = 1; i < NUM_OF_MUI_LANGUAGES; ++i)
{
if (IsValidLocaleName(MUI_LanguageDLLs[i].szLocaleName))
{
//WCHAR wchLngLocalName[LOCALE_NAME_MAX_LENGTH];
//if (ResolveLocaleName(MUI_LanguageDLLs[i].szLocaleName, wchLngLocalName, LOCALE_NAME_MAX_LENGTH)) {
// StringCchCopy(MUI_LanguageDLLs[i].szLocaleName, COUNTOF(MUI_LanguageDLLs[i].szLocaleName), wchLngLocalName); // put back resolved name
//}
// get LANGID
GetLocaleInfoEx(MUI_LanguageDLLs[i].szLocaleName, LOCALE_ILANGUAGE | LOCALE_RETURN_NUMBER, (LPWSTR)&(MUI_LanguageDLLs[i].LangId), sizeof(LANGID));
// check for DLL
StringCchPrintf(wchRelPath, COUNTOF(wchRelPath), L"lng/%s/np3lng.dll.mui", MUI_LanguageDLLs[i].szLocaleName);
PathAbsoluteFromApp(wchRelPath, wchAbsPath, COUNTOF(wchAbsPath), false);
MUI_LanguageDLLs[i].bHasDLL = PathFileExists(wchAbsPath);
}
}
}
//=============================================================================
//
// _LngStrToMultiLngStr
//
//
static bool _LngStrToMultiLngStr(WCHAR* pLngStr, WCHAR* pLngMultiStr, size_t lngMultiStrSize)
{
bool rtnVal = true;
size_t strLen = StringCchLenW(pLngStr, 0);
if ((strLen > 0) && pLngMultiStr && (lngMultiStrSize > 0)) {
WCHAR* lngMultiStrPtr = pLngMultiStr;
WCHAR* last = pLngStr + (Has_UTF16_LE_BOM((char*)pLngStr, clampi((int)strLen, 0, 8)) ? 1 : 0);
while (last && rtnVal) {
// make sure you validate the user input
WCHAR* next = StrNextTok(last, L",; :");
if (next) { *next = L'\0'; }
strLen = StringCchLenW(last, LOCALE_NAME_MAX_LENGTH);
if (strLen && IsValidLocaleName(last)) {
lngMultiStrPtr[0] = L'\0';
rtnVal &= SUCCEEDED(StringCchCatW(lngMultiStrPtr, (lngMultiStrSize - (lngMultiStrPtr - pLngMultiStr)), last));
lngMultiStrPtr += strLen + 1;
}
last = (next ? next + 1 : next);
}
if (rtnVal && (lngMultiStrSize - (lngMultiStrPtr - pLngMultiStr))) // make sure there is a double null term for the multi-string
{
lngMultiStrPtr[0] = L'\0';
}
else // fail and guard anyone whom might use the multi-string
{
lngMultiStrPtr[0] = L'\0';
lngMultiStrPtr[1] = L'\0';
}
}
return rtnVal;
}
//=============================================================================
//
// _GetUserPreferredLanguage
//
//
static bool _GetUserPreferredLanguage(LPWSTR pszPrefLocaleName, int cchBuffer, LANGID* pLangID)
{
int res = 0;
LANGID lngID = *pLangID;
WCHAR wchLngLocalName[LOCALE_NAME_MAX_LENGTH+1];
if (StringCchLen(pszPrefLocaleName, cchBuffer) > 0)
{
res = ResolveLocaleName(pszPrefLocaleName, wchLngLocalName, COUNTOF(wchLngLocalName));
if (res > 0) {
// get LANGID
DWORD value;
res = GetLocaleInfoEx(wchLngLocalName, LOCALE_ILANGUAGE | LOCALE_RETURN_NUMBER, (LPWSTR)&value, sizeof(value) / sizeof(WCHAR));
if (res > 0) {
lngID = (LANGID)value;
}
}
}
if (res == 0) // No preferred language defined or retrievable, try to get User UI Language
{
//~GetUserDefaultLocaleName(pszPrefLocaleName, cchBuffer);
ULONG numLngs = 0;
DWORD cchLngsBuffer = 0;
BOOL hr = GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, &numLngs, NULL, &cchLngsBuffer);
if (hr) {
WCHAR* pwszLngsBuffer = AllocMem((cchLngsBuffer + 2) * sizeof(WCHAR), HEAP_ZERO_MEMORY);
if (pwszLngsBuffer) {
hr = GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, &numLngs, pwszLngsBuffer, &cchLngsBuffer);
if (hr && (numLngs > 0)) {
// get the first
StringCchCopy(wchLngLocalName, COUNTOF(wchLngLocalName), pwszLngsBuffer);
lngID = LANGIDFROMLCID(LocaleNameToLCID(wchLngLocalName, 0));
res = 1;
}
FreeMem(pwszLngsBuffer);
}
}
if (res == 0) { // last try
lngID = GetUserDefaultUILanguage();
LCID const lcid = MAKELCID(lngID, SORT_DEFAULT);
res = LCIDToLocaleName(lcid, wchLngLocalName, COUNTOF(wchLngLocalName), 0);
}
}
if (res != 0) {
*pLangID = lngID;
StringCchCopy(pszPrefLocaleName, cchBuffer, wchLngLocalName);
return true;
}
return false;
}
//=============================================================================
//
// LoadLanguageResources
//
//
HMODULE LoadLanguageResources(LANGID* pPrefLanguageID)
{
// 1st check language resources
_CheckAvailableLanguageDLLs();
LANGID languageID = MUI_LanguageDLLs[0].LangId;
WCHAR wchLngLocalName[LOCALE_NAME_MAX_LENGTH];
StringCchCopy(wchLngLocalName, COUNTOF(wchLngLocalName), Settings2.PreferredLanguageLocaleName);
if (_GetUserPreferredLanguage(wchLngLocalName, COUNTOF(wchLngLocalName), &languageID)) {
// push-back (corrected) name found
StringCchCopy(Settings2.PreferredLanguageLocaleName, COUNTOF(Settings2.PreferredLanguageLocaleName), wchLngLocalName);
}
// set the appropriate fallback list
int iPrefLngIndex = -1;
WCHAR tchAvailLngs[2 * (LOCALE_NAME_MAX_LENGTH + 1)] = { L'\0' };
for (int lng = 0; lng < NUM_OF_MUI_LANGUAGES; ++lng) {
if (StringCchCompareXIW(MUI_LanguageDLLs[lng].szLocaleName, Settings2.PreferredLanguageLocaleName) == 0) {
if (MUI_LanguageDLLs[lng].bHasDLL && (lng > 0)) {
StringCchCatW(tchAvailLngs, COUNTOF(tchAvailLngs), MUI_LanguageDLLs[lng].szLocaleName);
StringCchCatW(tchAvailLngs, COUNTOF(tchAvailLngs), L" ");
}
iPrefLngIndex = lng;
break;
}
}
StringCchCatW(tchAvailLngs, COUNTOF(tchAvailLngs), MUI_LanguageDLLs[0].szLocaleName); // en-US
// NOTES:
// an application developer that makes the assumption the fallback list provided by the
// system / OS is entirely sufficient may or may not be making a good assumption based mostly on:
// A. your choice of languages installed with your application
// B. the languages on the OS at application install time
// C. the OS users propensity to install/uninstall language packs
// D. the OS users propensity to change language settings
bool bFallbackOK = true;
WCHAR tchUserLangMultiStrg[LARGE_BUFFER] = { L'\0' };
if (!_LngStrToMultiLngStr(tchAvailLngs, tchUserLangMultiStrg, COUNTOF(tchUserLangMultiStrg)))
{
GetLastErrorToMsgBox(L"_LngStrToMultiLngStr()", ERROR_MUI_INVALID_LOCALE_NAME);
bFallbackOK = false;
}
DWORD langCount = 0;
// using SetProcessPreferredUILanguages is recommended for new applications (esp. multi-threaded applications)
if (!SetThreadPreferredUILanguages(MUI_LANGUAGE_NAME, tchUserLangMultiStrg, &langCount) || (langCount == 0))
{
GetLastErrorToMsgBox(L"SetProcessPreferredUILanguages()", 0);
bFallbackOK = false;
}
// obtains access to the proper resource container
// for standard Win32 resource loading this is normally a PE module - use LoadLibraryEx
HMODULE hLangResourceContainer = NULL;
Globals.bPrefLngNotAvail = (iPrefLngIndex < 0);
if ((iPrefLngIndex >= 0) && MUI_LanguageDLLs[iPrefLngIndex].bHasDLL) {
hLangResourceContainer = (0 == iPrefLngIndex) ? Globals.hInstance :
LoadMUILibrary(L"lng/np3lng.dll", MUI_LANGUAGE_NAME | MUI_LANGUAGE_EXACT, languageID);
MUI_LanguageDLLs[iPrefLngIndex].bIsLoaded = true;
}
if (!hLangResourceContainer) {
// fallback to ENGLISH_US
Globals.bPrefLngNotAvail = (languageID != MUI_LanguageDLLs[0].LangId);
languageID = MUI_LanguageDLLs[0].LangId;
hLangResourceContainer = Globals.hInstance;
MUI_LanguageDLLs[0].bIsLoaded = true;
}
SetThreadUILanguage(languageID);
*pPrefLanguageID = languageID;
return hLangResourceContainer;
}
//=============================================================================
//
// FreeLanguageResources
//
//
void FreeLanguageResources(HMODULE hLangResourceContainer)
{
if (hLangResourceContainer) {
if (hLangResourceContainer != Globals.hInstance) {
FreeMUILibrary(hLangResourceContainer);
}
}
for (int i = 0; i < NUM_OF_MUI_LANGUAGES; ++i) {
MUI_LanguageDLLs[i].bIsLoaded = false;
}
}
//=============================================================================
//
// LoadLngStringW()
//
int LoadLngStringW(UINT uID, LPWSTR lpBuffer, int nBufferMax)
{
const int nLen = LoadStringW(Globals.hLngResContainer, uID, lpBuffer, nBufferMax);
return (nLen != 0) ? nLen : LoadStringW(Globals.hInstance, uID, lpBuffer, nBufferMax);
}
//=============================================================================
//
// LoadLngStringW2MB()
//
static WCHAR s_tmpStringBuffer[512];
int LoadLngStringW2MB(UINT uID, LPSTR lpBuffer, int nBufferMax)
{
const int nLen = LoadStringW(Globals.hLngResContainer, uID, s_tmpStringBuffer, COUNTOF(s_tmpStringBuffer));
if (nLen == 0) { LoadStringW(Globals.hInstance, uID, s_tmpStringBuffer, COUNTOF(s_tmpStringBuffer)); }
return WideCharToMultiByte(CP_UTF8, 0, s_tmpStringBuffer, -1, lpBuffer, nBufferMax, NULL, NULL);
}
//=============================================================================
//
// LoadLngStringA()
//
int LoadLngStringA(UINT uID, LPSTR lpBuffer, int nBufferMax)
{
const int nLen = LoadStringA(Globals.hLngResContainer, uID, lpBuffer, nBufferMax);
return (nLen != 0) ? nLen : LoadStringA(Globals.hInstance, uID, lpBuffer, nBufferMax);
}
//=============================================================================
//
// FormatLngStringW()
//
int FormatLngStringW(LPWSTR lpOutput, int nOutput, UINT uIdFormat, ...)
{
WCHAR* pBuffer = AllocMem(sizeof(WCHAR) * nOutput, HEAP_ZERO_MEMORY);
if (pBuffer) {
if (LoadLngStringW(uIdFormat, pBuffer, nOutput)) {
StringCchVPrintfW(lpOutput, nOutput, pBuffer, (LPVOID)((PUINT_PTR)& uIdFormat + 1));
}
FreeMem(pBuffer);
return (int)StringCchLenW(lpOutput, nOutput);
}
return 0;
}
//=============================================================================
//
// FormatLngStringA()
//
int FormatLngStringA(LPSTR lpOutput, int nOutput, UINT uIdFormat, ...)
{
CHAR* pBuffer = AllocMem(sizeof(CHAR) * nOutput, HEAP_ZERO_MEMORY);
if (pBuffer) {
if (LoadLngStringA(uIdFormat, pBuffer, nOutput)) {
StringCchVPrintfA(lpOutput, nOutput, pBuffer, (LPVOID)((PUINT_PTR)& uIdFormat + 1));
}
FreeMem(pBuffer);
return (int)StringCchLenA(lpOutput, nOutput);
}
return 0;
}
//=============================================================================
/// End of MuiLanguage.c ///

53
src/MuiLanguage.h Normal file
View File

@ -0,0 +1,53 @@
/******************************************************************************
* *
* *
* Notepad3 *
* *
* MuiLanguage.h *
* Definitions for MUI Language support *
* Based on code from Notepad2, (c) Florian Balmer 1996-2011 *
* *
* (c) Rizonesoft 2008-2019 *
* https://rizonesoft.com *
* *
* *
*******************************************************************************/
#pragma once
#ifndef _NP3_MUI_LANGUAGE_H_
#define _NP3_MUI_LANGUAGE_H_
typedef struct _muilanguage
{
UINT rid;
WCHAR szLocaleName[LOCALE_NAME_MAX_LENGTH];
// !!! WARNING: LCID is DEPRECATED
LANGID LangId; // just for historic reasons
bool bHasDLL;
bool bIsLoaded;
} MUILANGUAGE, *PMUILANGUAGE;
#define NUM_OF_MUI_LANGUAGES 15
extern MUILANGUAGE MUI_LanguageDLLs[];
HMODULE LoadLanguageResources(LANGID* pPrefLanguageID);
void FreeLanguageResources(HMODULE hLangResourceContainer);
int LoadLngStringW(UINT uID, LPWSTR lpBuffer, int nBufferMax);
int LoadLngStringA(UINT uID, LPSTR lpBuffer, int nBufferMax);
int FormatLngStringW(LPWSTR lpOutput, int nOutput, UINT uIdFormat, ...);
int FormatLngStringA(LPSTR lpOutput, int nOutput, UINT uIdFormat, ...);
int LoadLngStringW2MB(UINT uID, LPSTR lpBuffer, int nBufferMax);
#define GetLngString(id,pb,cb) LoadLngStringW((id),(pb),(cb))
#define GetLngStringA(id,pb,cb) LoadLngStringA((id),(pb),(cb))
#define GetLngStringW2MB(id,pb,cb) LoadLngStringW2MB((id),(pb),(cb))
#endif //_NP3_MUI_LANGUAGE_H_
/// End of MuiLanguage.h ///

View File

@ -13,19 +13,8 @@
* *
*******************************************************************************/
#if !defined(WINVER)
#define WINVER 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#if !defined(_WIN32_WINNT)
#define _WIN32_WINNT 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#if !defined(NTDDI_VERSION)
#define NTDDI_VERSION 0x06010000 /*NTDDI_WIN7*/
#endif
#define VC_EXTRALEAN 1
#define WIN32_LEAN_AND_MEAN 1
#define NOMINMAX 1
#include <windows.h>
#include "Helpers.h"
#include <commctrl.h>
#include <uxtheme.h>
#include <shlobj.h>
@ -36,7 +25,6 @@
#include <string.h>
//#include <pathcch.h>
#include <time.h>
#include <muiload.h>
#include "Edit.h"
#include "Styles.h"
@ -47,12 +35,14 @@
#include "../uthash/utlist.h"
#include "../tinyexpr/tinyexpr.h"
#include "Encoding.h"
#include "Helpers.h"
#include "VersionEx.h"
#include "SciCall.h"
#include "SciLexer.h"
#include "SciXLexer.h"
#include "MuiLanguage.h"
#include "Notepad3.h"
@ -84,9 +74,6 @@ static HWND s_hwndReBar = NULL;
static WCHAR s_wchIniFile2[MAX_PATH] = { L'\0' };
static WCHAR s_wchTmpFilePath[MAX_PATH] = { L'\0' };
// 'en-US' internal default
static WCHAR* const s_tchAvailableLanguages = L"af-ZA be-BY de-DE en-GB es-ES fr-FR hu-HU it-IT ja-JP ko-KR nl-NL pt-BR ru-RU zh-CN";
static int s_iSettingsVersion = CFG_VER_CURRENT;
static bool s_bEnableSaveSettings = true;
@ -413,7 +400,6 @@ static int s_flagChangeNotify = 0;
// static forward declarations
static void _UpdateStatusbarDelayed(bool bForceRedraw);
static void _UpdateToolbarDelayed();
static HMODULE _LoadLanguageResources(const WCHAR* localeName, LANGID langID);
//==============================================================================
//
@ -450,7 +436,7 @@ static void _InitGlobals()
Constants.FileBrowserMiniPath = L"minipath.exe";
Globals.hMainMenu = NULL;
Globals.CallTipType = CT_NONE;
Globals.iWrapCol = 0;
Globals.bCodeFoldingAvailable = false;
@ -512,9 +498,8 @@ static void _CleanUpResources(const HWND hwnd, bool bIsInitialized)
DestroyMenu(Globals.hMainMenu);
}
if (Globals.hLngResContainer != Globals.hInstance) {
FreeMUILibrary(Globals.hLngResContainer);
}
FreeLanguageResources(Globals.hLngResContainer);
Globals.hLngResContainer = NULL;
if (s_hRichEdit) {
FreeLibrary(s_hRichEdit);
@ -617,55 +602,9 @@ int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance,
// ----------------------------------------------------
// MultiLingual
//
bool bPrefLngNotAvail = false;
int res = 0;
if (StringCchLen(Settings2.PreferredLanguageLocaleName, COUNTOF(Settings2.PreferredLanguageLocaleName)) > 0)
{
WCHAR wchLngLocalName[LOCALE_NAME_MAX_LENGTH];
res = ResolveLocaleName(Settings2.PreferredLanguageLocaleName, wchLngLocalName, LOCALE_NAME_MAX_LENGTH);
if (res > 0) {
StringCchCopy(Settings2.PreferredLanguageLocaleName, COUNTOF(Settings2.PreferredLanguageLocaleName), wchLngLocalName); // put back resolved name
}
// get LANGID
Globals.iPrefLANGID = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
res = GetLocaleInfoEx(Settings2.PreferredLanguageLocaleName, LOCALE_ILANGUAGE | LOCALE_RETURN_NUMBER, (LPWSTR)&Globals.iPrefLANGID, sizeof(LANGID));
}
Globals.iPrefLANGID = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
Globals.hLngResContainer = LoadLanguageResources(&Globals.iPrefLANGID);
if (res == 0) // No preferred language defined or retrievable, try to get User UI Language
{
//~GetUserDefaultLocaleName(&Settings2.PreferredLanguageLocaleName[0], COUNTOF(Settings2.PreferredLanguageLocaleName));
ULONG numLngs = 0;
DWORD cchLngsBuffer = 0;
BOOL hr = GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, &numLngs, NULL, &cchLngsBuffer);
if (hr) {
WCHAR* pwszLngsBuffer = AllocMem((cchLngsBuffer + 2) * sizeof(WCHAR), HEAP_ZERO_MEMORY);
if (pwszLngsBuffer) {
hr = GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, &numLngs, pwszLngsBuffer, &cchLngsBuffer);
if (hr && (numLngs > 0)) {
// get the first
StringCchCopy(Settings2.PreferredLanguageLocaleName, COUNTOF(Settings2.PreferredLanguageLocaleName), pwszLngsBuffer);
Globals.iPrefLANGID = LANGIDFROMLCID(LocaleNameToLCID(Settings2.PreferredLanguageLocaleName, 0));
res = 1;
}
FreeMem(pwszLngsBuffer);
}
}
if (res == 0) { // last try
Globals.iPrefLANGID = GetUserDefaultUILanguage();
LCID const lcid = MAKELCID(Globals.iPrefLANGID, SORT_DEFAULT);
/*res = */LCIDToLocaleName(lcid, Settings2.PreferredLanguageLocaleName, COUNTOF(Settings2.PreferredLanguageLocaleName), 0);
}
}
Globals.hLngResContainer = _LoadLanguageResources(Settings2.PreferredLanguageLocaleName, Globals.iPrefLANGID);
if (!Globals.hLngResContainer) // fallback en-US (1033)
{
LANGID const langID = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
Globals.hLngResContainer = Globals.hInstance;
if (Globals.iPrefLANGID != langID) { bPrefLngNotAvail = true; }
}
// ----------------------------------------------------
if (s_hRichEdit == INVALID_HANDLE_VALUE) {
@ -691,7 +630,6 @@ int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance,
s_msgTaskbarCreated = RegisterWindowMessage(L"TaskbarCreated");
Globals.hMainMenu = NULL;
if (Globals.hLngResContainer != Globals.hInstance) {
Globals.hMainMenu = LoadMenu(Globals.hLngResContainer, MAKEINTRESOURCE(IDR_MUI_MAINMENU));
if (!Globals.hMainMenu) {
@ -730,7 +668,7 @@ int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance,
SetTimer(hwnd, IDT_TIMER_MRKALL, USER_TIMER_MINIMUM, (TIMERPROC)MQ_ExecuteNext);
if (bPrefLngNotAvail) {
if (Globals.bPrefLngNotAvail) {
InfoBoxLng(MBWARN, L"MsgPrefLanguageNotAvailable", IDS_WARN_PREF_LNG_NOT_AVAIL, Settings2.PreferredLanguageLocaleName);
}
@ -760,98 +698,6 @@ int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance,
}
//=============================================================================
//
// _LngStrToMultiLngStr
//
//
static bool _LngStrToMultiLngStr(WCHAR* pLngStr, WCHAR* pLngMultiStr, size_t lngMultiStrSize)
{
bool rtnVal = true;
size_t strLen = StringCchLenW(pLngStr,0);
if ((strLen > 0) && pLngMultiStr && (lngMultiStrSize > 0)) {
WCHAR* lngMultiStrPtr = pLngMultiStr;
WCHAR* last = pLngStr + (Has_UTF16_LE_BOM((char*)pLngStr,clampi((int)strLen,0,8)) ? 1 : 0);
while (last && rtnVal) {
// make sure you validate the user input
WCHAR* next = StrNextTok(last, L",; :");
if (next) { *next = L'\0'; }
strLen = StringCchLenW(last, LOCALE_NAME_MAX_LENGTH);
if (strLen && IsValidLocaleName(last)) {
lngMultiStrPtr[0] = L'\0';
rtnVal &= SUCCEEDED(StringCchCatW(lngMultiStrPtr, (lngMultiStrSize - (lngMultiStrPtr - pLngMultiStr)), last));
lngMultiStrPtr += strLen + 1;
}
last = (next ? next + 1 : next);
}
if (rtnVal && (lngMultiStrSize - (lngMultiStrPtr - pLngMultiStr))) // make sure there is a double null term for the multi-string
{
lngMultiStrPtr[0] = L'\0';
}
else // fail and guard anyone whom might use the multi-string
{
lngMultiStrPtr[0] = L'\0';
lngMultiStrPtr[1] = L'\0';
}
}
return rtnVal;
}
//=============================================================================
//
// _LoadLanguageResources
//
//
static HMODULE _LoadLanguageResources(const WCHAR* localeName, LANGID langID)
{
bool bLngAvailable = (StrStrIW(s_tchAvailableLanguages, localeName) != NULL);
if (!bLngAvailable) { return NULL; }
WCHAR tchAvailLngs[LARGE_BUFFER] = { L'\0' };
StringCchCopyW(tchAvailLngs, LARGE_BUFFER, s_tchAvailableLanguages);
WCHAR tchUserLangMultiStrg[LARGE_BUFFER] = { L'\0' };
if (!_LngStrToMultiLngStr(tchAvailLngs, tchUserLangMultiStrg, LARGE_BUFFER))
{
GetLastErrorToMsgBox(L"_LngStrToMultiLngStr()", ERROR_MUI_INVALID_LOCALE_NAME);
return NULL;
}
// set the appropriate fallback list
DWORD langCount = 0;
// using SetProcessPreferredUILanguages is recommended for new applications (esp. multi-threaded applications)
if (!SetThreadPreferredUILanguages(MUI_LANGUAGE_NAME, tchUserLangMultiStrg, &langCount) || (langCount == 0))
{
GetLastErrorToMsgBox(L"SetProcessPreferredUILanguages()", 0);
return NULL;
}
SetThreadUILanguage(langID);
// NOTES:
// an application developer that makes the assumption the fallback list provided by the
// system / OS is entirely sufficient may or may not be making a good assumption based mostly on:
// A. your choice of languages installed with your application
// B. the languages on the OS at application install time
// C. the OS users propensity to install/uninstall language packs
// D. the OS users propensity to change language settings
// obtains access to the proper resource container
// for standard Win32 resource loading this is normally a PE module - use LoadLibraryEx
HMODULE hLangResourceContainer = LoadMUILibraryW(L"lng/np3lng.dll", MUI_LANGUAGE_NAME, langID);
//if (!hLangResourceContainer)
//{
// GetLastErrorToMsgBox(L"LoadMUILibrary", 0);
// return NULL;
//}
return hLangResourceContainer;
}
//=============================================================================
//
// WaitCursorStack
@ -2140,8 +1986,6 @@ LRESULT MsgDPIChanged(HWND hwnd, WPARAM wParam, LPARAM lParam)
DocPos const pos = SciCall_GetCurrentPos();
HINSTANCE hInstance = (HINSTANCE)(INT_PTR)GetWindowLongPtr(hwnd, GWLP_HINSTANCE);
#if 0
char buf[128];
sprintf(buf, "WM_DPICHANGED: dpi=%u,%u ppi=%u,%u\n", Globals.CurrentDPI.x, Globals.CurrentDPI.y, Globals.CurrentPPI.x, Globals.CurrentPPI.y);
@ -2157,7 +2001,7 @@ LRESULT MsgDPIChanged(HWND hwnd, WPARAM wParam, LPARAM lParam)
DestroyWindow(s_hwndToolbar);
DestroyWindow(s_hwndReBar);
DestroyWindow(Globals.hwndStatus);
CreateBars(hwnd, hInstance);
CreateBars(hwnd, Globals.hInstance);
RECT* const rc = (RECT*)lParam;
SendWMSize(hwnd, rc);
@ -3034,6 +2878,11 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam)
i = (int)StringCchLenW(Settings2.AdministrationTool, COUNTOF(Settings2.AdministrationTool));
EnableCmd(hmenu, IDM_HELP_ADMINEXE, i);
for (int lng = 0; lng < NUM_OF_MUI_LANGUAGES; ++lng) {
EnableCmd(hmenu, MUI_LanguageDLLs[lng].rid, MUI_LanguageDLLs[lng].bHasDLL);
CheckCmd(hmenu, MUI_LanguageDLLs[lng].rid, MUI_LanguageDLLs[lng].bIsLoaded);
}
return 0LL;
}
@ -3069,6 +2918,57 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
EditUpdateVisibleUrlHotspot(Settings.HyperlinkHotspot);
break;
case IDM_MUI_LANG_EN_US:
case IDM_MUI_LANG_AF_ZA:
case IDM_MUI_LANG_BE_BY:
case IDM_MUI_LANG_DE_DE:
case IDM_MUI_LANG_EN_GB:
case IDM_MUI_LANG_ES_ES:
case IDM_MUI_LANG_FR_FR:
case IDM_MUI_LANG_HU_HU:
case IDM_MUI_LANG_IT_IT:
case IDM_MUI_LANG_JP_JP:
case IDM_MUI_LANG_KO_KR:
case IDM_MUI_LANG_NL_NL:
case IDM_MUI_LANG_PT_BR:
case IDM_MUI_LANG_RU_RU:
case IDM_MUI_LANG_ZH_CN:
{
int iLngIdx = (int)LOWORD(wParam) - IDM_MUI_LANG_EN_US;
if (Globals.iPrefLANGID != MUI_LanguageDLLs[iLngIdx].LangId)
{
if (IsWindow(Globals.hwndDlgFindReplace)) {
SendMessage(Globals.hwndDlgFindReplace, WM_CLOSE, 0, 0);
}
if (IsWindow(Globals.hwndDlgCustomizeSchemes)) {
SendMessage(Globals.hwndDlgCustomizeSchemes, WM_CLOSE, 0, 0);
}
StringCchCopyW(Settings2.PreferredLanguageLocaleName, COUNTOF(Settings2.PreferredLanguageLocaleName), MUI_LanguageDLLs[iLngIdx].szLocaleName);
IniSetString(L"Settings2", L"PreferredLanguageLocaleName", Settings2.PreferredLanguageLocaleName);
DestroyMenu(Globals.hMainMenu);
FreeLanguageResources(Globals.hLngResContainer);
Globals.iPrefLANGID = MUI_LanguageDLLs[iLngIdx].LangId;
Globals.hLngResContainer = LoadLanguageResources(&Globals.iPrefLANGID);
Globals.hMainMenu = LoadMenu(Globals.hLngResContainer, MAKEINTRESOURCE(IDR_MUI_MAINMENU));
SetMenu(Globals.hwndMain, Globals.hMainMenu);
DrawMenuBar(Globals.hwndMain);
SendWMSize(Globals.hwndMain, NULL);
UpdateUI();
UpdateToolbar();
UpdateStatusbar(true);
}
}
break;
case IDM_FILE_NEW:
FileLoad(false,true,false,Settings.SkipUnicodeDetection,Settings.SkipANSICodePageDetection,L"");
break;
@ -8399,18 +8299,18 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw)
static DocLn s_iLnFromPos = -1;
static DocLn s_iLnCnt = -1;
if (s_iLnFromPos != iLnFromPos) {
if (bForceRedraw || (s_iLnFromPos != iLnFromPos)) {
StringCchPrintf(tchLn, COUNTOF(tchLn), DOCPOSFMTW, iLnFromPos + 1);
FormatNumberStr(tchLn);
}
DocLn const iLnCnt = SciCall_GetLineCount();
if (s_iLnCnt != iLnCnt) {
if (bForceRedraw || (s_iLnCnt != iLnCnt)) {
StringCchPrintf(tchLines, COUNTOF(tchLines), DOCPOSFMTW, iLnCnt);
FormatNumberStr(tchLines);
}
if ((s_iLnFromPos != iLnFromPos) || (s_iLnCnt != iLnCnt))
if (bForceRedraw || ((s_iLnFromPos != iLnFromPos) || (s_iLnCnt != iLnCnt)))
{
StringCchPrintf(tchStatusBar[STATUS_DOCLINE], txtWidth, L"%s%s / %s%s",
s_mxSBPrefix[STATUS_DOCLINE], tchLn, tchLines, s_mxSBPostfix[STATUS_DOCLINE]);
@ -8429,7 +8329,7 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw)
static DocPos s_iCol = -1;
DocPos const iCol = SciCall_GetColumn(iPos) + SciCall_GetSelectionNCaretVirtualSpace(0);
if (s_iCol != iCol) {
if (bForceRedraw || (s_iCol != iCol)) {
StringCchPrintf(tchCol, COUNTOF(tchCol), DOCPOSFMTW, iCol + colOffset);
FormatNumberStr(tchCol);
}
@ -8437,12 +8337,12 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw)
static DocPos s_iCols = -1;
static WCHAR tchCols[32] = { L'\0' };
DocPos const iCols = SciCall_GetColumn(iLineBack);
if (s_iCols != iCols) {
if (bForceRedraw || (s_iCols != iCols)) {
StringCchPrintf(tchCols, COUNTOF(tchCols), DOCPOSFMTW, iCols);
FormatNumberStr(tchCols);
}
if ((s_iCol != iCol) || (s_iCols != iCols)) {
if (bForceRedraw || ((s_iCol != iCol) || (s_iCols != iCols))) {
StringCchPrintf(tchStatusBar[STATUS_DOCCOLUMN], txtWidth, L"%s%s / %s%s",
s_mxSBPrefix[STATUS_DOCCOLUMN], tchCol, tchCols, s_mxSBPostfix[STATUS_DOCCOLUMN]);
@ -8461,14 +8361,14 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw)
DocPos const chrOffset = Globals.bZeroBasedCharacterCount ? 0 : 1;
DocPos const iChr = SciCall_CountCharacters(iLineBegin, iPos);
if (s_iChr != iChr) {
if (bForceRedraw || (s_iChr != iChr)) {
StringCchPrintf(tchChr, COUNTOF(tchChr), DOCPOSFMTW, iChr + chrOffset);
FormatNumberStr(tchChr);
}
static DocPos s_iChrs = -1;
DocPos const iChrs = SciCall_CountCharacters(iLineBegin, iLineBack);
if (s_iChrs != iChrs) {
if (bForceRedraw || (s_iChrs != iChrs)) {
StringCchPrintf(tchChrs, COUNTOF(tchChrs), DOCPOSFMTW, iChrs);
FormatNumberStr(tchChrs);
}
@ -8493,7 +8393,7 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw)
static DocPos s_iSelStart = -1;
static DocPos s_iSelEnd = -1;
if ((s_bIsSelCountable != bIsSelCountable) || (s_iSelStart != iSelStart) || (s_iSelEnd != iSelEnd))
if (bForceRedraw || ((s_bIsSelCountable != bIsSelCountable) || (s_iSelStart != iSelStart) || (s_iSelEnd != iSelEnd)))
{
static WCHAR tchSelB[64] = { L'\0' };
if (bIsSelCountable)
@ -8533,7 +8433,7 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw)
DocLn const iLinesSelected = ((iSelStart != iSelEnd) && (iStartOfLinePos != iSelEnd)) ? ((iLineEnd - iLineStart) + 1) : (iLineEnd - iLineStart);
if ((s_bIsSelectionEmpty != bIsSelectionEmpty) || (s_iLinesSelected != iLinesSelected))
if (bForceRedraw || ((s_bIsSelectionEmpty != bIsSelectionEmpty) || (s_iLinesSelected != iLinesSelected)))
{
static WCHAR tchLinesSelected[32] = { L'\0' };
if (bIsSelectionEmpty) {
@ -8601,8 +8501,8 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw)
StringCchPrintf(tchExpression, COUNTOF(tchExpression), L"^[%i]", s_iExprError);
}
if (!s_iExprError || (s_iExErr != s_iExprError)) {
if (bForceRedraw || (!s_iExprError || (s_iExErr != s_iExprError)))
{
StringCchPrintf(tchStatusBar[STATUS_TINYEXPR], txtWidth, L"%s%s%s ",
s_mxSBPrefix[STATUS_TINYEXPR], tchExpression, s_mxSBPostfix[STATUS_TINYEXPR]);
@ -8619,7 +8519,7 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw)
{
static int s_iMarkOccurrencesCount = -111;
static bool s_bMOVisible = false;
if ((s_bMOVisible != Settings.MarkOccurrencesMatchVisible) || (s_iMarkOccurrencesCount != Globals.iMarkOccurrencesCount))
if (bForceRedraw || ((s_bMOVisible != Settings.MarkOccurrencesMatchVisible) || (s_iMarkOccurrencesCount != Globals.iMarkOccurrencesCount)))
{
if ((Globals.iMarkOccurrencesCount >= 0) && !Settings.MarkOccurrencesMatchVisible)
{
@ -8654,7 +8554,7 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw)
{
static int s_iReplacedOccurrences = -1;
if (s_iReplacedOccurrences != Globals.iReplacedOccurrences)
if (bForceRedraw || (s_iReplacedOccurrences != Globals.iReplacedOccurrences))
{
static WCHAR tchRepl[32] = { L'\0' };
if (Globals.iReplacedOccurrences > 0)
@ -8680,7 +8580,8 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw)
{
static DocPos s_iTextLength = -1;
DocPos const iTextLength = SciCall_GetTextLength();
if (s_iTextLength != iTextLength) {
if (bForceRedraw || (s_iTextLength != iTextLength))
{
static WCHAR tchBytes[32] = { L'\0' };
StrFormatByteSize(iTextLength, tchBytes, COUNTOF(tchBytes));
@ -8697,7 +8598,8 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw)
{
static int s_iEncoding = -1;
int const iEncoding = Encoding_Current(CPI_GET);
if (s_iEncoding != iEncoding) {
if (bForceRedraw || (s_iEncoding != iEncoding))
{
Encoding_SetLabel(iEncoding);
StringCchPrintf(tchStatusBar[STATUS_CODEPAGE], txtWidth, L"%s%s%s",
@ -8714,7 +8616,7 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw)
static int s_iEOLMode = -1;
int const _eol_mode = SciCall_GetEOLMode();
if (s_iEOLMode != _eol_mode)
if (bForceRedraw || (s_iEOLMode != _eol_mode))
{
if (_eol_mode == SC_EOL_LF) {
StringCchPrintf(tchStatusBar[STATUS_EOLMODE], txtWidth, L"%sLF%s",
@ -8738,7 +8640,8 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw)
{
static bool s_bIsOVR = -1;
bool const bIsOVR = (bool)SendMessage(Globals.hwndEdit, SCI_GETOVERTYPE, 0, 0);
if (s_bIsOVR != bIsOVR) {
if (bForceRedraw || (s_bIsOVR != bIsOVR))
{
if (bIsOVR)
{
StringCchPrintf(tchStatusBar[STATUS_OVRMODE], txtWidth, L"%sOVR%s",
@ -8758,7 +8661,7 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw)
{
static bool s_bUse2ndDefault = -1;
bool const bUse2ndDefault = Style_GetUse2ndDefault();
if (s_bUse2ndDefault != bUse2ndDefault)
if (bForceRedraw || (s_bUse2ndDefault != bUse2ndDefault))
{
if (bUse2ndDefault)
StringCchPrintf(tchStatusBar[STATUS_2ND_DEF], txtWidth, L"%s2ND%s",
@ -8777,7 +8680,7 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw)
{
static int s_iCurLexer = -1;
int const iCurLexer = Style_GetCurrentLexerRID();
if (s_iCurLexer != iCurLexer)
if (bForceRedraw || (s_iCurLexer != iCurLexer))
{
static WCHAR tchLexerName[MINI_BUFFER];
if (Style_IsCurLexerStandard())

View File

@ -381,6 +381,7 @@
<ClCompile Include="Encoding.c" />
<ClCompile Include="EncodingCED.cpp" />
<ClCompile Include="Helpers.c" />
<ClCompile Include="MuiLanguage.c" />
<ClCompile Include="Notepad3.c" />
<ClCompile Include="Print.cpp" />
<ClCompile Include="StyleLexers\styleLexAHK.c" />
@ -468,6 +469,7 @@
<ClInclude Include="Edit.h" />
<ClInclude Include="Encoding.h" />
<ClInclude Include="Helpers.h" />
<ClInclude Include="MuiLanguage.h" />
<ClInclude Include="Notepad3.h" />
<ClInclude Include="SciCall.h" />
<ClInclude Include="StyleLexers\EditLexer.h" />

View File

@ -252,6 +252,9 @@
<ClCompile Include="StyleLexers\styleLexNim.c">
<Filter>Source Files\StyleLexers</Filter>
</ClCompile>
<ClCompile Include="MuiLanguage.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Dialogs.h">
@ -389,6 +392,9 @@
<ClInclude Include="..\uthash\utstack.h">
<Filter>Source Files\uthash</Filter>
</ClInclude>
<ClInclude Include="MuiLanguage.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\res\Copy.cur">

View File

@ -15,19 +15,11 @@
* *
*******************************************************************************/
#if !defined(WINVER)
#define WINVER 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#if !defined(_WIN32_WINNT)
#define _WIN32_WINNT 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#if !defined(NTDDI_VERSION)
#define NTDDI_VERSION 0x06010000 /*NTDDI_WIN7*/
#endif
#define VC_EXTRALEAN 1
#define WIN32_LEAN_AND_MEAN 1
#define NOMINMAX 1
#include <windows.h>
extern "C" {
#include "Helpers.h"
#include "MuiLanguage.h"
}
#include <commctrl.h>
#include <shellapi.h>
#include <shlwapi.h>
@ -44,8 +36,6 @@
extern "C" {
#include "Dialogs.h"
#include "Helpers.h"
#include "TypeDefs.h"
#include "SciCall.h"
}

View File

@ -13,19 +13,8 @@
* *
* *
*******************************************************************************/
#if !defined(WINVER)
#define WINVER 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#if !defined(_WIN32_WINNT)
#define _WIN32_WINNT 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#if !defined(NTDDI_VERSION)
#define NTDDI_VERSION 0x06010000 /*NTDDI_WIN7*/
#endif
#define VC_EXTRALEAN 1
#define WIN32_LEAN_AND_MEAN 1
#define NOMINMAX 1
#include <windows.h>
#include "Helpers.h"
#include <assert.h>
#include <commctrl.h>
#include <commdlg.h>
@ -42,7 +31,8 @@
#include "Dialogs.h"
#include "resource.h"
#include "Encoding.h"
#include "Helpers.h"
#include "MuiLanguage.h"
#include "SciCall.h"
#include "Styles.h"

View File

@ -14,7 +14,22 @@
#ifndef _NP3_TYPEDEFS_H_
#define _NP3_TYPEDEFS_H_
#if !defined(WINVER)
#define WINVER 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#if !defined(_WIN32_WINNT)
#define _WIN32_WINNT 0x601 /*_WIN32_WINNT_WIN7*/
#endif
#if !defined(NTDDI_VERSION)
#define NTDDI_VERSION 0x06010000 /*NTDDI_WIN7*/
#endif
#define VC_EXTRALEAN 1
#define WIN32_LEAN_AND_MEAN 1
#define NOMINMAX 1
#include <windows.h>
#include <intsafe.h>
#include <strsafe.h>
#ifndef __cplusplus
#include <stdbool.h>
@ -245,6 +260,7 @@ typedef struct _globals_t
HINSTANCE hInstance;
HINSTANCE hPrevInst;
HMODULE hLngResContainer;
bool bPrefLngNotAvail;
HWND hwndMain;
HANDLE hndlProcessHeap;
HWND hwndEdit;