- Better RTL support:
* use RTL reading wherever possible (shows the dots, commas, etc. in the correct order) * Message boxes are now RTL too * Fixed RTL for links in InstallOptions - Fixed tab order in StartMenu - Made StartMenu use SHGetSpecialFolderLocation (soon to be in NSIS core too) git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3259 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
740ae21f2d
commit
4eb2881b5b
11 changed files with 186 additions and 158 deletions
|
@ -566,8 +566,8 @@ int WINAPI ReadSettings(void) {
|
|||
|
||||
|
||||
LRESULT WINAPI WMCommandProc(HWND hWnd, UINT id, HWND hwndCtl, UINT codeNotify) {
|
||||
switch (codeNotify) {
|
||||
case BN_CLICKED:
|
||||
switch (codeNotify) {
|
||||
case BN_CLICKED:
|
||||
{
|
||||
char szBrowsePath[MAX_PATH];
|
||||
int nIdx = FindControlIdx(id);
|
||||
|
@ -659,8 +659,8 @@ LRESULT WINAPI WMCommandProc(HWND hWnd, UINT id, HWND hwndCtl, UINT codeNotify)
|
|||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -691,61 +691,66 @@ BOOL CALLBACK ParentWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPara
|
|||
return bRes;
|
||||
}
|
||||
|
||||
BOOL CALLBACK cfgDlgProc(HWND hwndDlg,
|
||||
UINT uMsg,
|
||||
WPARAM wParam,
|
||||
LPARAM lParam)
|
||||
BOOL CALLBACK cfgDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (uMsg)
|
||||
{
|
||||
HANDLE_MSG(hwndDlg, WM_COMMAND, WMCommandProc);
|
||||
case WM_DRAWITEM:
|
||||
{
|
||||
DRAWITEMSTRUCT* lpdis = (DRAWITEMSTRUCT*)lParam;
|
||||
int nIdx = FindControlIdx(lpdis->CtlID);
|
||||
DRAWITEMSTRUCT* lpdis = (DRAWITEMSTRUCT*)lParam;
|
||||
int nIdx = FindControlIdx(lpdis->CtlID);
|
||||
#ifdef IO_LINK_UNDERLINED
|
||||
HFONT OldFont;
|
||||
LOGFONT lf;
|
||||
HFONT OldFont;
|
||||
LOGFONT lf;
|
||||
#endif
|
||||
|
||||
if (nIdx < 0)
|
||||
break;
|
||||
FieldType *pField = pFields + nIdx;
|
||||
|
||||
#ifdef IO_LINK_UNDERLINED
|
||||
GetObject(GetCurrentObject(lpdis->hDC, OBJ_FONT), sizeof(lf), &lf);
|
||||
lf.lfUnderline = TRUE;
|
||||
OldFont = (HFONT)SelectObject(lpdis->hDC, CreateFontIndirect(&lf));
|
||||
#endif
|
||||
// Set up tranparent background
|
||||
HBRUSH brush = (HBRUSH)GetWindowLong(lpdis->hwndItem, GWL_USERDATA);
|
||||
if ( brush )
|
||||
FillRect(lpdis->hDC, &lpdis->rcItem, brush);
|
||||
|
||||
if ( ( lpdis->itemState & ODS_FOCUS && lpdis->itemAction & ODA_DRAWENTIRE) || (lpdis->itemAction & ODA_FOCUS) ||
|
||||
(lpdis->itemAction & ODA_SELECT))
|
||||
DrawFocusRect(lpdis->hDC, &pField->rect);
|
||||
|
||||
SetTextColor(lpdis->hDC, (COLORREF)pField->hImage);
|
||||
|
||||
pField->rect = lpdis->rcItem;
|
||||
// Calculate needed size of the control
|
||||
DrawText(lpdis->hDC, pField->pszText, -1, &pField->rect, DT_LEFT | DT_VCENTER | DT_SINGLELINE | DT_CALCRECT);
|
||||
pField->rect.right += 4;
|
||||
pField->rect.bottom = lpdis->rcItem.bottom;
|
||||
// Resize but don't move
|
||||
SetWindowPos(lpdis->hwndItem, NULL, 0, 0, pField->rect.right - pField->rect.left,
|
||||
pField->rect.bottom - pField->rect.top, SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE);
|
||||
// Draw the text
|
||||
lpdis->rcItem = pField->rect;
|
||||
// Add little margin to avoid focus rect over text
|
||||
lpdis->rcItem.right += 2; lpdis->rcItem.left += 2;
|
||||
|
||||
DrawText(lpdis->hDC, pField->pszText, -1, &lpdis->rcItem, DT_LEFT | DT_VCENTER | DT_SINGLELINE );
|
||||
#ifdef IO_LINK_UNDERLINED
|
||||
DeleteObject(SelectObject(lpdis->hDC, OldFont));
|
||||
#endif
|
||||
if (nIdx < 0)
|
||||
break;
|
||||
FieldType *pField = pFields + nIdx;
|
||||
|
||||
#ifdef IO_LINK_UNDERLINED
|
||||
GetObject(GetCurrentObject(lpdis->hDC, OBJ_FONT), sizeof(lf), &lf);
|
||||
lf.lfUnderline = TRUE;
|
||||
OldFont = (HFONT)SelectObject(lpdis->hDC, CreateFontIndirect(&lf));
|
||||
#endif
|
||||
|
||||
// We need lpdis->rcItem later
|
||||
RECT rc = lpdis->rcItem;
|
||||
|
||||
// Get TxtColor unless the user has set another using SetCtlColors
|
||||
if (!GetWindowLong(lpdis->hwndItem, GWL_USERDATA))
|
||||
SetTextColor(lpdis->hDC, (COLORREF) pField->hImage);
|
||||
|
||||
// Calculate needed size of the control
|
||||
DrawText(lpdis->hDC, pField->pszText, -1, &rc, DT_VCENTER | DT_SINGLELINE | DT_CALCRECT);
|
||||
|
||||
// Move rect to right if in RTL mode
|
||||
if (bRTL)
|
||||
{
|
||||
rc.left += lpdis->rcItem.right - rc.right;
|
||||
rc.right += lpdis->rcItem.right - rc.right;
|
||||
}
|
||||
|
||||
// Make some more room so the focus rect won't cut letters off
|
||||
rc.left = max(rc.left - 2, lpdis->rcItem.left);
|
||||
rc.right = min(rc.right + 2, lpdis->rcItem.right);
|
||||
/*rc.top = max(rc.top - 2, lpdis->rcItem.top);
|
||||
rc.bottom = min(rc.bottom + 2, lpdis->rcItem.bottom);*/
|
||||
|
||||
// Draw the text
|
||||
DrawText(lpdis->hDC, pField->pszText, -1, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE | (bRTL ? DT_RTLREADING : 0));
|
||||
|
||||
// Draw the focus rect if needed
|
||||
if (((lpdis->itemState & ODS_FOCUS) && (lpdis->itemAction & ODA_DRAWENTIRE)) || (lpdis->itemAction & ODA_FOCUS) || (lpdis->itemAction & ODA_SELECT))
|
||||
{
|
||||
DrawFocusRect(lpdis->hDC, &rc);
|
||||
}
|
||||
|
||||
#ifdef IO_LINK_UNDERLINED
|
||||
DeleteObject(SelectObject(lpdis->hDC, OldFont));
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
case WM_CTLCOLORSTATIC:
|
||||
case WM_CTLCOLOREDIT:
|
||||
|
@ -753,7 +758,7 @@ BOOL CALLBACK cfgDlgProc(HWND hwndDlg,
|
|||
case WM_CTLCOLORBTN:
|
||||
case WM_CTLCOLORLISTBOX:
|
||||
{
|
||||
ctlcolors *c = (ctlcolors *)GetWindowLong((HWND)lParam, GWL_USERDATA);
|
||||
ctlcolors *c = (ctlcolors *) GetWindowLong((HWND) lParam, GWL_USERDATA);
|
||||
|
||||
if (c) {
|
||||
SetBkMode((HDC)wParam, c->bkmode);
|
||||
|
@ -766,7 +771,7 @@ BOOL CALLBACK cfgDlgProc(HWND hwndDlg,
|
|||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef IO_ENABLE_LINK
|
||||
|
@ -908,47 +913,47 @@ int WINAPI createCfgDlg()
|
|||
DEFAULT_STYLES /*| WS_TABSTOP*/,
|
||||
DEFAULT_STYLES | SS_RIGHT /*| WS_TABSTOP*/,
|
||||
WS_EX_TRANSPARENT,
|
||||
WS_EX_TRANSPARENT },
|
||||
WS_EX_TRANSPARENT | WS_EX_RTLREADING },
|
||||
{ "STATIC", // FIELD_ICON
|
||||
DEFAULT_STYLES /*| WS_TABSTOP*/ | SS_ICON,
|
||||
DEFAULT_STYLES /*| WS_TABSTOP*/ | SS_ICON,
|
||||
0,
|
||||
0 },
|
||||
WS_EX_RTLREADING },
|
||||
{ "STATIC", // FIELD_BITMAP
|
||||
DEFAULT_STYLES /*| WS_TABSTOP*/ | SS_BITMAP | SS_CENTERIMAGE,
|
||||
DEFAULT_STYLES /*| WS_TABSTOP*/ | SS_BITMAP | SS_CENTERIMAGE,
|
||||
0,
|
||||
0 },
|
||||
WS_EX_RTLREADING },
|
||||
{ "BUTTON", // FIELD_BROWSEBUTTON
|
||||
DEFAULT_STYLES | WS_TABSTOP,
|
||||
DEFAULT_STYLES | WS_TABSTOP,
|
||||
0,
|
||||
0 },
|
||||
WS_EX_RTLREADING },
|
||||
{ "BUTTON", // FIELD_CHECKBOX
|
||||
DEFAULT_STYLES | WS_TABSTOP | BS_TEXT | BS_VCENTER | BS_AUTOCHECKBOX | BS_MULTILINE,
|
||||
DEFAULT_STYLES | WS_TABSTOP | BS_TEXT | BS_VCENTER | BS_AUTOCHECKBOX | BS_MULTILINE | BS_RIGHT | BS_LEFTTEXT,
|
||||
0,
|
||||
0 },
|
||||
WS_EX_RTLREADING },
|
||||
{ "BUTTON", // FIELD_RADIOBUTTON
|
||||
DEFAULT_STYLES | WS_TABSTOP | BS_TEXT | BS_VCENTER | BS_AUTORADIOBUTTON | BS_MULTILINE,
|
||||
DEFAULT_STYLES | WS_TABSTOP | BS_TEXT | BS_VCENTER | BS_AUTORADIOBUTTON | BS_MULTILINE | BS_RIGHT | BS_LEFTTEXT,
|
||||
0,
|
||||
0 },
|
||||
WS_EX_RTLREADING },
|
||||
{ "EDIT", // FIELD_TEXT
|
||||
DEFAULT_STYLES | WS_TABSTOP | ES_AUTOHSCROLL,
|
||||
DEFAULT_STYLES | WS_TABSTOP | ES_AUTOHSCROLL | ES_RIGHT,
|
||||
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE,
|
||||
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE },
|
||||
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE | WS_EX_RTLREADING },
|
||||
{ "EDIT", // FIELD_FILEREQUEST
|
||||
DEFAULT_STYLES | WS_TABSTOP | ES_AUTOHSCROLL,
|
||||
DEFAULT_STYLES | WS_TABSTOP | ES_AUTOHSCROLL | ES_RIGHT,
|
||||
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE,
|
||||
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE },
|
||||
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE | WS_EX_RTLREADING },
|
||||
{ "EDIT", // FIELD_DIRREQUEST
|
||||
DEFAULT_STYLES | WS_TABSTOP | ES_AUTOHSCROLL,
|
||||
DEFAULT_STYLES | WS_TABSTOP | ES_AUTOHSCROLL | ES_RIGHT,
|
||||
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE,
|
||||
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE },
|
||||
WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE | WS_EX_RTLREADING },
|
||||
{ "COMBOBOX", // FIELD_COMBOBOX
|
||||
DEFAULT_STYLES | WS_TABSTOP | WS_VSCROLL | WS_CLIPCHILDREN | CBS_AUTOHSCROLL | CBS_HASSTRINGS,
|
||||
DEFAULT_STYLES | WS_TABSTOP | WS_VSCROLL | WS_CLIPCHILDREN | CBS_AUTOHSCROLL | CBS_HASSTRINGS,
|
||||
|
@ -963,17 +968,17 @@ int WINAPI createCfgDlg()
|
|||
DEFAULT_STYLES | BS_GROUPBOX,
|
||||
DEFAULT_STYLES | BS_GROUPBOX | BS_RIGHT,
|
||||
WS_EX_TRANSPARENT,
|
||||
WS_EX_TRANSPARENT },
|
||||
WS_EX_TRANSPARENT | WS_EX_RTLREADING },
|
||||
{ "BUTTON", // FIELD_LINK
|
||||
DEFAULT_STYLES | WS_TABSTOP | BS_OWNERDRAW,
|
||||
DEFAULT_STYLES | WS_TABSTOP | BS_OWNERDRAW | BS_RIGHT,
|
||||
0,
|
||||
0 },
|
||||
WS_EX_RTLREADING },
|
||||
{ "BUTTON", // FIELD_BUTTON
|
||||
DEFAULT_STYLES | WS_TABSTOP,
|
||||
DEFAULT_STYLES | WS_TABSTOP | BS_RIGHT,
|
||||
DEFAULT_STYLES | WS_TABSTOP,
|
||||
0,
|
||||
0 }
|
||||
WS_EX_RTLREADING }
|
||||
};
|
||||
|
||||
FieldType *pField = pFields + nIdx;
|
||||
|
@ -1233,12 +1238,12 @@ void WINAPI showCfgDlg()
|
|||
|
||||
g_done = g_NotifyField = 0;
|
||||
|
||||
while (!g_done) {
|
||||
while (!g_done) {
|
||||
MSG msg;
|
||||
int nResult = GetMessage(&msg, NULL, 0, 0);
|
||||
if (!IsDialogMessage(hConfigWindow,&msg) && !IsDialogMessage(hMainWindow,&msg) && !TranslateMessage(&msg))
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
|
||||
// we don't save settings on cancel since that means your installer will likely
|
||||
// quit soon, which means the ini might get flushed late and cause crap. :) anwyay.
|
||||
|
@ -1325,7 +1330,7 @@ extern "C" BOOL WINAPI DllMain(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lp
|
|||
m_hInstance=(HINSTANCE) hInst;
|
||||
if (ul_reason_for_call == DLL_THREAD_DETACH || ul_reason_for_call == DLL_PROCESS_DETACH)
|
||||
DestroyWindow(hConfigWindow);
|
||||
return TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -37,9 +37,9 @@ Nullsoft Install System %s
|
|||
# ^UnCompletedSubCaption
|
||||
: ההסרה הושלמה
|
||||
# ^BackBtn
|
||||
ה&קודם >
|
||||
< ה&קודם
|
||||
# ^NextBtn
|
||||
< ה&בא
|
||||
ה&בא >
|
||||
# ^AgreeBtn
|
||||
אני &מסכים
|
||||
# ^AcceptBtn
|
||||
|
@ -55,7 +55,7 @@ Nullsoft Install System %s
|
|||
# ^CloseBtn
|
||||
סגור&
|
||||
# ^BrowseBtn
|
||||
...&עיין
|
||||
&עיין...
|
||||
# ^ShowDetailsBtn
|
||||
ה&צג פרטים
|
||||
# ^ClickNext
|
||||
|
@ -85,31 +85,31 @@ Nullsoft Install System %s
|
|||
# ^ComponentsText
|
||||
סמן את הרכיבים שברצונך להתקין ובטל את הסימון של רכיבים שאין ברצונך להתקין. $_CLICK
|
||||
# ^ComponentsSubText1
|
||||
:בחר סוג התקנה
|
||||
בחר סוג התקנה:
|
||||
# ^ComponentsSubText2_NoInstTypes
|
||||
:בחר רכיבים להתקנה
|
||||
בחר רכיבים להתקנה:
|
||||
# ^ComponentsSubText2
|
||||
:או, בחר רכיבי רשות להתקנה
|
||||
או, בחר רכיבי רשות להתקנה:
|
||||
# ^UnComponentsText
|
||||
סמן את הרכיבים שברצונך להסיר ובטל את הסימון של רכיבים שאין ברצונך להסיר. $_CLICK
|
||||
# ^UnComponentsSubText1
|
||||
:בחר סוג הסרה
|
||||
בחר סוג הסרה:
|
||||
# ^UnComponentsSubText2_NoInstTypes
|
||||
:בחר רכיבים להסרה
|
||||
בחר רכיבים להסרה:
|
||||
# ^UnComponentsSubText2
|
||||
:או, בחר רכיבי רשות להסרה
|
||||
או, בחר רכיבי רשות להסרה:
|
||||
# ^DirText
|
||||
תוכנית זו תתקין את $(^Name) לתיקייה שלהלן. כדי להתקין לתיקייה אחרת, לחץ על 'עיין' ובחר תיקייה אחרת. $_CLICK
|
||||
# ^DirSubText
|
||||
תיקיית יעד
|
||||
# ^DirBrowseText
|
||||
:בחר תיקייה להתקנת $(^Name)
|
||||
בחר תיקייה להתקנת $(^Name):
|
||||
# ^UnDirText
|
||||
תוכנית זו תסיר את $(^Name) מהתיקייה שלהלן. כדי להסיר מתיקייה אחרת, לחץ על 'עיין' ובחר תיקייה אחרת. $_CLICK
|
||||
# ^UnDirSubText
|
||||
""
|
||||
# ^UnDirBrowseText
|
||||
:בחר תיקייה ממנה תוסר $(^Name)
|
||||
בחר תיקייה ממנה תוסר $(^Name):
|
||||
# ^SpaceAvailable
|
||||
"מקום פנוי: "
|
||||
# ^SpaceRequired
|
||||
|
@ -117,7 +117,7 @@ Nullsoft Install System %s
|
|||
# ^UninstallingText
|
||||
הסרת $(^Name) תתבצע מהתיקייה שלהלן. $_CLICK
|
||||
# ^UninstallingSubText
|
||||
:מסיר מ
|
||||
מסיר מ:
|
||||
# ^FileError
|
||||
ארעה שגיאה בעת פתיחת קובץ לכתיבה:\r\n\t"$0"\r\nלחץ על ביטול כדי לבטל את ההתקנה,\r\nנסה שנית כדי לנסות לפתוח את הקובץ שוב, או\r\nהתעלם כדי לדלג על הקובץ
|
||||
# ^FileError_NoIgnore
|
||||
|
@ -183,8 +183,8 @@ Nullsoft Install System %s
|
|||
# ^Byte
|
||||
"ב
|
||||
# ^Kilo
|
||||
ק
|
||||
" ק"
|
||||
# ^Mega
|
||||
מ
|
||||
" מ"
|
||||
# ^Giga
|
||||
ג
|
||||
" ג"
|
|
@ -14,77 +14,77 @@
|
|||
!define MUI_TEXT_WELCOME_INFO_TEXT "àùó æä éðçä àåúëí áîäìê ääú÷ðä ùì $(^Name).\r\n\r\nîåîìõ ìñâåø ëì úåëðéú àçøú ìôðé äúçìú ääú÷ðä. ôòåìä æå úàôùø ìàùó ìòãëï ÷áöé îòøëú ììà àéúçåì äîçùá.\r\n\r\n$_CLICK"
|
||||
|
||||
!define MUI_TEXT_LICENSE_TITLE "äñëí øéùåé"
|
||||
!define MUI_TEXT_LICENSE_SUBTITLE ". $(^Name) אנא עיין בתנאי הרשיון לפני התקנת"
|
||||
!define MUI_INNERTEXT_LICENSE_TOP ".בכדי לצפות בשאר הרשיון Page Down לחץ על"
|
||||
!define MUI_INNERTEXT_LICENSE_BOTTOM ".אם לא תסכים לתנאי הרשיון$(^Name) אם אתה מקבל את תנאי הרשיון, לחץ על 'אני מסכים' כדי להמשיך. לא תוכל להתקין את"
|
||||
!define MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "$_CLICK .$(^Name) אם אתה מקבל את תנאי ההסכם, סמן את תיבת הבחירה שלהלן. עלייך לקבל את תנאי ההסכם בכדי להתקין את"
|
||||
!define MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "$_CLICK .$(^Name) אם אתה מקבל את תנאי ההסכם, בחר באפשרות הראשונה שלהלן. עלייך לקבל את ההסכם בכדי להתקין את"
|
||||
!define MUI_TEXT_LICENSE_SUBTITLE "אנא עיין בתנאי הרשיון לפני התקנת $(^Name)."
|
||||
!define MUI_INNERTEXT_LICENSE_TOP "בכדי לצפות בשאר הרשיון לחץ על Page Down."
|
||||
!define MUI_INNERTEXT_LICENSE_BOTTOM "אם אתה מקבל את תנאי הרשיון, לחץ על 'אני מסכים' כדי להמשיך. אם לא תסכים לתנאי הרשיון לא תוכל להתקין את $(^Name)."
|
||||
!define MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "אם אתה מקבל את תנאי ההסכם, סמן את תיבת הבחירה שלהלן. עלייך לקבל את תנאי ההסכם בכדי להתקין את $(^Name). $_CLICK"
|
||||
!define MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "אם אתה מקבל את תנאי ההסכם, בחר באפשרות הראשונה שלהלן. עלייך לקבל את ההסכם בכדי להתקין את $(^Name). $_CLICK"
|
||||
|
||||
!define MUI_TEXT_COMPONENTS_TITLE "áçø øëéáéí"
|
||||
!define MUI_TEXT_COMPONENTS_SUBTITLE ".ברצונך להתקין $(^Name) בחר אילו רכיבים של"
|
||||
!define MUI_TEXT_COMPONENTS_SUBTITLE "בחר אילו רכיבים של $(^Name) ברצונך להתקין."
|
||||
!define MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "úéàåø"
|
||||
!define MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO ".העבר את העכבר מעל רכיב כלשהו בכדי לצפות בתיאורו"
|
||||
!define MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "העבר את העכבר מעל רכיב כלשהו בכדי לצפות בתיאורו."
|
||||
|
||||
!define MUI_TEXT_DIRECTORY_TITLE "áçø îé÷åí ìäú÷ðä"
|
||||
!define MUI_TEXT_DIRECTORY_SUBTITLE ".$(^Name) בחר את התיקייה בה אתה מעוניין להתקין את"
|
||||
!define MUI_TEXT_DIRECTORY_SUBTITLE "בחר את התיקייה בה אתה מעוניין להתקין את $(^Name)."
|
||||
|
||||
!define MUI_TEXT_INSTALLING_TITLE "îú÷éï"
|
||||
!define MUI_TEXT_INSTALLING_SUBTITLE ".מותקן $(^Name) -אנא המתן בזמן ש "
|
||||
!define MUI_TEXT_INSTALLING_SUBTITLE "אנא המתן בזמן ש-$(^Name) מותקן."
|
||||
|
||||
!define MUI_TEXT_FINISH_TITLE "ääú÷ðä äåùìîä"
|
||||
!define MUI_TEXT_FINISH_SUBTITLE ".ההתקנה הושלמה במלואה"
|
||||
!define MUI_TEXT_FINISH_SUBTITLE "ההתקנה הושלמה במלואה."
|
||||
|
||||
!define MUI_TEXT_ABORT_TITLE "ääú÷ðä áåèìä"
|
||||
!define MUI_TEXT_ABORT_SUBTITLE ".ההתקנה לא הושלמה המלואה"
|
||||
!define MUI_TEXT_ABORT_SUBTITLE "ההתקנה לא הושלמה המלואה."
|
||||
|
||||
!define MUI_BUTTONTEXT_FINISH "&ñééí"
|
||||
!define MUI_TEXT_FINISH_INFO_TITLE "$(^Name) משלים את אשף ההתקנה של"
|
||||
!define MUI_TEXT_FINISH_INFO_TEXT "הותקן בהצלחה $(^Name)\r\n\r\nלחץ על סיום בכדי .לסגור את האשף"
|
||||
!define MUI_TEXT_FINISH_INFO_REBOOT "?האם ברצונך לאתחל כעת .$(^Name) עלייך לאתחל את המחשב בכדי לסיים את התקנת"
|
||||
!define MUI_TEXT_FINISH_INFO_TITLE "משלים את אשף ההתקנה של $(^Name)"
|
||||
!define MUI_TEXT_FINISH_INFO_TEXT "$(^Name) הותקן בהצלחה.\r\n\r\nלחץ על סיום בכדי לסגור את האשף."
|
||||
!define MUI_TEXT_FINISH_INFO_REBOOT "עלייך לאתחל את המחשב בכדי לסיים את התקנת $(^Name). האם ברצונך לאתחל כעת?"
|
||||
!define MUI_TEXT_FINISH_REBOOTNOW "àúçì ëòú"
|
||||
!define MUI_TEXT_FINISH_REBOOTLATER "áøöåðé ìàúçì éãðéú îàåçø éåúø"
|
||||
!define MUI_TEXT_FINISH_RUN "$(^Name) &הרץ את"
|
||||
!define MUI_TEXT_FINISH_RUN "&הרץ את $(^Name)"
|
||||
!define MUI_TEXT_FINISH_SHOWREADME "'&äöâ îñîê '÷øà àåúé"
|
||||
|
||||
!define MUI_TEXT_STARTMENU_TITLE "áçø úé÷ééä áúôøéè äúçì"
|
||||
!define MUI_TEXT_STARTMENU_SUBTITLE ".בחר בתיקיית תפריט התחל בכדי לשים בה את קיצורי הדרך של התוכנית"
|
||||
!define MUI_INNERTEXT_STARTMENU_TOP ".בחר בתיקייה בתפריט התחל בה ברצונך למקם את קיצורי הדרך עבור התוכנית. באפשרותך גם להקיש את שם התיקייה בכדי ליצור תיקייה חדשה"
|
||||
!define MUI_TEXT_STARTMENU_SUBTITLE "בחר בתיקיית תפריט התחל בכדי לשים בה את קיצורי הדרך של התוכנית."
|
||||
!define MUI_INNERTEXT_STARTMENU_TOP "בחר בתיקייה בתפריט התחל בה ברצונך למקם את קיצורי הדרך עבור התוכנית. באפשרותך גם להקיש את שם התיקייה בכדי ליצור תיקייה חדשה."
|
||||
!define MUI_INNERTEXT_STARTMENU_CHECKBOX "àì úéöåø ÷éöåøé ãøê"
|
||||
|
||||
!define MUI_TEXT_ABORTWARNING "?$(^Name) האם אתה בטוח שברצונך לצאת מהתקנת המוצר"
|
||||
!define MUI_TEXT_ABORTWARNING "האם אתה בטוח שברצונך לצאת מהתקנת $(^Name)?"
|
||||
|
||||
|
||||
!define MUI_UNTEXT_WELCOME_INFO_TITLE "áøåëéí äáàéí ìàùó ääñøä ùì $(^Name)"
|
||||
!define MUI_UNTEXT_WELCOME_INFO_TEXT "àùó æä éðçä àåúëí áîäìê ääñøä ùì $(^Name).\r\n\r\nîåîìõ ìñâåø ëì úåëðéú àçøú ìôðé äúçìú ääú÷ðä. ôòåìä æå úàôùø ìàùó ìòãëï ÷áöé îòøëú ììà àéúçåì äîçùá.\r\n\r\n$_CLICK"
|
||||
|
||||
!define MUI_UNTEXT_CONFIRM_TITLE "$(^Name) הסר את"
|
||||
!define MUI_UNTEXT_CONFIRM_SUBTITLE ".מהמחשב $(^Name) הסר את"
|
||||
!define MUI_UNTEXT_CONFIRM_TITLE "הסר את $(^Name)"
|
||||
!define MUI_UNTEXT_CONFIRM_SUBTITLE "הסר את $(^Name) מהמחשב."
|
||||
|
||||
!define MUI_UNTEXT_LICENSE_TITLE "äñëí øéùåé"
|
||||
!define MUI_UNTEXT_LICENSE_SUBTITLE ". $(^Name) אנא עיין בתנאי הרשיון לפני הסרת"
|
||||
!define MUI_UNINNERTEXT_LICENSE_BOTTOM ".אם לא תסכים לתנאי הרשיון$(^Name) אם אתה מקבל את תנאי הרשיון, לחץ על 'אני מסכים' כדי להמשיך. לא תוכל להסיר את"
|
||||
!define MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "$_CLICK .$(^Name) אם אתה מקבל את תנאי ההסכם, סמן את תיבת הבחירה שלהלן. עלייך לקבל את תנאי ההסכם בכדי להסיר את"
|
||||
!define MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "$_CLICK .$(^Name) אם אתה מקבל את תנאי ההסכם, בחר באפשרות הראשונה שלהלן. עלייך לקבל את ההסכם בכדי להסיר את"
|
||||
!define MUI_UNTEXT_LICENSE_SUBTITLE "אנא עיין בתנאי הרשיון לפני הסרת $(^Name)."
|
||||
!define MUI_UNINNERTEXT_LICENSE_BOTTOM "אם אתה מקבל את תנאי הרשיון, לחץ על 'אני מסכים' כדי להמשיך. אם לא תסכים לתנאי הרשיון לא תוכל להסיר את $(^Name)."
|
||||
!define MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "אם אתה מקבל את תנאי ההסכם, סמן את תיבת הבחירה שלהלן. עלייך לקבל את תנאי ההסכם בכדי להסיר את $(^Name). $_CLICK"
|
||||
!define MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "אם אתה מקבל את תנאי ההסכם, בחר באפשרות הראשונה שלהלן. עלייך לקבל את ההסכם בכדי להסיר את $(^Name). $_CLICK"
|
||||
|
||||
!define MUI_UNTEXT_COMPONENTS_TITLE "áçø øëéáéí"
|
||||
!define MUI_UNTEXT_COMPONENTS_SUBTITLE ".ברצונך להסיר $(^Name) בחר אילו תכונות של"
|
||||
!define MUI_UNTEXT_COMPONENTS_SUBTITLE "בחר אילו תכונות של $(^Name) ברצונך להסיר."
|
||||
|
||||
!define MUI_UNTEXT_DIRECTORY_TITLE "áçø îé÷åí ìäñøä"
|
||||
!define MUI_UNTEXT_DIRECTORY_SUBTITLE ".$(^Name) בחר את התיקייה ממנה אתה מעוניין להסיר את"
|
||||
!define MUI_UNTEXT_DIRECTORY_SUBTITLE "בחר את התיקייה ממנה אתה מעוניין להסיר את $(^Name)."
|
||||
|
||||
!define MUI_UNTEXT_UNINSTALLING_TITLE "îñéø"
|
||||
!define MUI_UNTEXT_UNINSTALLING_SUBTITLE ".מוסר מהמחשב $(^Name) אנא המתן בזמן ש-"
|
||||
!define MUI_UNTEXT_UNINSTALLING_SUBTITLE "אנא המתן בזמן ש-$(^Name) מוסר מהמחשב."
|
||||
|
||||
!define MUI_UNTEXT_FINISH_TITLE "ääñøä äåùìîä"
|
||||
!define MUI_UNTEXT_FINISH_SUBTITLE ".ההסרה הושלמה במלואה"
|
||||
!define MUI_UNTEXT_FINISH_SUBTITLE "ההסרה הושלמה במלואה."
|
||||
|
||||
!define MUI_UNTEXT_ABORT_TITLE "ääñøä áåèìä"
|
||||
!define MUI_UNTEXT_ABORT_SUBTITLE ".ההסרה לא הושלמה במלואה"
|
||||
!define MUI_UNTEXT_ABORT_SUBTITLE "ההסרה לא הושלמה במלואה."
|
||||
|
||||
!define MUI_UNTEXT_FINISH_INFO_TITLE "$(^Name) משלים את אשף ההסרה של"
|
||||
!define MUI_UNTEXT_FINISH_INFO_TEXT "הותקן בהצלחה $(^Name)\r\n\r\nלחץ על סיום בכדי .לסגור את האשף"
|
||||
!define MUI_UNTEXT_FINISH_INFO_REBOOT "?האם ברצונך לאתחל כעת .$(^Name) עלייך לאתחל את המחשב בכדי לסיים את הסרת"
|
||||
!define MUI_UNTEXT_FINISH_INFO_TITLE "משלים את אשף ההסרה של $(^Name)"
|
||||
!define MUI_UNTEXT_FINISH_INFO_TEXT "$(^Name) הוסר בהצלחה.\r\n\r\nלחץ על סיום בכדי לסגור את האשף."
|
||||
!define MUI_UNTEXT_FINISH_INFO_REBOOT "עלייך לאתחל את המחשב בכדי לסיים את הסרת $(^Name). האם ברצונך לאתחל כעת?"
|
||||
|
||||
!define MUI_UNTEXT_ABORTWARNING "?$(^Name) האם אתה בטוח שברצונך לצאת מהסרת"
|
||||
!define MUI_UNTEXT_ABORTWARNING "האם אתה בטוח שברצונך לצאת מהסרת $(^Name)?"
|
||||
|
||||
!insertmacro MUI_LANGUAGEFILE_END
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include <windows.h>
|
||||
#include <shlobj.h>
|
||||
#include "../exdll/exdll.h"
|
||||
#include "resource.h"
|
||||
|
||||
|
@ -9,7 +10,7 @@ HWND hwChild;
|
|||
HWND g_hwStartMenuSelect;
|
||||
HWND g_hwDirList;
|
||||
|
||||
char buf[MAX_PATH];
|
||||
char buf[1024];
|
||||
char text[1024];
|
||||
char progname[1024];
|
||||
char lastused[1024];
|
||||
|
@ -24,7 +25,7 @@ void *lpWndProcOld;
|
|||
|
||||
BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
BOOL CALLBACK ParentWndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
void AddFolderFromReg(HKEY rootKey);
|
||||
void AddFolderFromReg(int nFolder);
|
||||
|
||||
void __declspec(dllexport) Select(HWND hwndParent, int string_size, char *variables, stack_t **stacktop)
|
||||
{
|
||||
|
@ -125,7 +126,7 @@ static BOOL CALLBACK ParentWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARA
|
|||
y_offset, \
|
||||
cx, \
|
||||
cy, \
|
||||
SWP_NOACTIVATE \
|
||||
SWP_NOACTIVATE | SWP_NOZORDER \
|
||||
); \
|
||||
\
|
||||
y_offset += cy + 5;
|
||||
|
@ -182,14 +183,24 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
if (rtl)
|
||||
{
|
||||
long s;
|
||||
|
||||
s = GetWindowLong(hwText, GWL_STYLE);
|
||||
SetWindowLong(hwText, GWL_STYLE, (s & ~SS_LEFT) | SS_RIGHT);
|
||||
s = GetWindowLong(hwText, GWL_EXSTYLE);
|
||||
SetWindowLong(hwText, GWL_EXSTYLE, s | WS_EX_RTLREADING);
|
||||
|
||||
s = GetWindowLong(hwLocation, GWL_STYLE);
|
||||
SetWindowLong(hwLocation, GWL_STYLE, (s & ~ES_LEFT) | ES_RIGHT);
|
||||
s = GetWindowLong(hwLocation, GWL_EXSTYLE);
|
||||
SetWindowLong(hwLocation, GWL_EXSTYLE, s | WS_EX_RTLREADING);
|
||||
|
||||
s = GetWindowLong(hwDirList, GWL_EXSTYLE);
|
||||
SetWindowLong(hwDirList, GWL_EXSTYLE, s | WS_EX_RIGHT | WS_EX_RTLREADING);
|
||||
|
||||
s = GetWindowLong(hwCheckBox, GWL_STYLE);
|
||||
SetWindowLong(hwCheckBox, GWL_STYLE, s | BS_RIGHT | BS_LEFTTEXT);
|
||||
s = GetWindowLong(hwCheckBox, GWL_EXSTYLE);
|
||||
SetWindowLong(hwCheckBox, GWL_EXSTYLE, s | WS_EX_RTLREADING);
|
||||
}
|
||||
|
||||
if (!noicon)
|
||||
|
@ -211,7 +222,7 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
0,
|
||||
temp_r.right,
|
||||
temp_r.bottom,
|
||||
SWP_NOACTIVATE | (noicon ? SWP_HIDEWINDOW : 0)
|
||||
SWP_NOZORDER | SWP_NOACTIVATE | (noicon ? SWP_HIDEWINDOW : 0)
|
||||
);
|
||||
|
||||
if (rtl)
|
||||
|
@ -278,8 +289,8 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
SetWindowText(hwCheckBox, checkbox);
|
||||
}
|
||||
|
||||
AddFolderFromReg(HKEY_LOCAL_MACHINE);
|
||||
AddFolderFromReg(HKEY_CURRENT_USER);
|
||||
AddFolderFromReg(CSIDL_COMMON_PROGRAMS);
|
||||
AddFolderFromReg(CSIDL_PROGRAMS);
|
||||
|
||||
// Tell NSIS to remove old inner dialog and pass handle of the new inner dialog
|
||||
SendMessage(hwParent, WM_NOTIFY_CUSTOM_READY, (WPARAM)hwndDlg, 0);
|
||||
|
@ -329,40 +340,30 @@ BOOL WINAPI DllMain(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
void AddFolderFromReg(HKEY rootKey)
|
||||
void AddFolderFromReg(int nFolder)
|
||||
{
|
||||
DWORD dwResult;
|
||||
DWORD dwLength = MAX_PATH;
|
||||
DWORD dwType = REG_SZ;
|
||||
HKEY hKey;
|
||||
|
||||
//DWORD idx;
|
||||
WIN32_FIND_DATA FileData;
|
||||
HANDLE hSearch;
|
||||
|
||||
char szName[20] = "Common Programs";
|
||||
|
||||
dwResult = RegOpenKeyEx(
|
||||
rootKey,
|
||||
"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders",
|
||||
0,
|
||||
KEY_READ,
|
||||
&hKey
|
||||
);
|
||||
|
||||
if (dwResult == ERROR_SUCCESS)
|
||||
LPMALLOC ppMalloc;
|
||||
if (SHGetMalloc(&ppMalloc) == NOERROR)
|
||||
{
|
||||
dwResult = RegQueryValueEx(
|
||||
hKey,
|
||||
rootKey == HKEY_LOCAL_MACHINE ? szName : szName + 7,
|
||||
NULL,
|
||||
&dwType,
|
||||
(BYTE *) buf,
|
||||
&dwLength
|
||||
);
|
||||
RegCloseKey(hKey);
|
||||
LPITEMIDLIST ppidl;
|
||||
|
||||
buf[0] = 0;
|
||||
if (SHGetSpecialFolderLocation(hwParent, nFolder, &ppidl) == S_OK)
|
||||
{
|
||||
SHGetPathFromIDList(ppidl, buf);
|
||||
ppMalloc->lpVtbl->Free(ppMalloc, ppidl);
|
||||
}
|
||||
|
||||
ppMalloc->lpVtbl->Release(ppMalloc);
|
||||
}
|
||||
|
||||
if (!buf[0])
|
||||
return;
|
||||
|
||||
lstrcat(buf, "\\*.*");
|
||||
hSearch = FindFirstFile(buf, &FileData);
|
||||
if (hSearch != INVALID_HANDLE_VALUE)
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -21,6 +21,7 @@
|
|||
*/
|
||||
|
||||
#include "DialogTemplate.h"
|
||||
#include <commctrl.h>
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Utilities
|
||||
|
@ -424,10 +425,9 @@ void CDialogTemplate::CTrimToString(WORD id, char *str, int margins) {
|
|||
void CDialogTemplate::ConvertToRTL() {
|
||||
for (unsigned int i = 0; i < m_vItems.size(); i++) {
|
||||
bool addExStyle = false;
|
||||
if (m_vItems[i]->dwExtStyle & WS_EX_LEFT)
|
||||
addExStyle = true;
|
||||
|
||||
// Button
|
||||
else if (int(m_vItems[i]->szClass) == 0x80) {
|
||||
if (int(m_vItems[i]->szClass) == 0x80) {
|
||||
m_vItems[i]->dwStyle ^= BS_LEFTTEXT;
|
||||
m_vItems[i]->dwStyle ^= BS_RIGHT;
|
||||
m_vItems[i]->dwStyle ^= BS_LEFT;
|
||||
|
@ -435,14 +435,16 @@ void CDialogTemplate::ConvertToRTL() {
|
|||
if ((m_vItems[i]->dwStyle & (BS_LEFT|BS_RIGHT)) == (BS_LEFT|BS_RIGHT)) {
|
||||
m_vItems[i]->dwStyle ^= BS_LEFT;
|
||||
m_vItems[i]->dwStyle ^= BS_RIGHT;
|
||||
if (m_vItems[i]->dwStyle & (BS_RADIOBUTTON|BS_CHECKBOX|BS_USERBUTTON))
|
||||
if (m_vItems[i]->dwStyle & (BS_RADIOBUTTON|BS_CHECKBOX|BS_USERBUTTON)) {
|
||||
m_vItems[i]->dwStyle |= BS_RIGHT;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Edit
|
||||
else if (int(m_vItems[i]->szClass) == 0x81) {
|
||||
if ((m_vItems[i]->dwStyle & ES_CENTER) == 0)
|
||||
if ((m_vItems[i]->dwStyle & ES_CENTER) == 0) {
|
||||
m_vItems[i]->dwStyle ^= ES_RIGHT;
|
||||
}
|
||||
}
|
||||
// Static
|
||||
else if (int(m_vItems[i]->szClass) == 0x82) {
|
||||
|
@ -455,14 +457,21 @@ void CDialogTemplate::ConvertToRTL() {
|
|||
m_vItems[i]->dwStyle |= SS_CENTERIMAGE;
|
||||
}
|
||||
}
|
||||
else if (!IS_INTRESOURCE(m_vItems[i]->szClass) && strcmpi(m_vItems[i]->szClass, "RichEdit20A")) {
|
||||
if ((m_vItems[i]->dwStyle & ES_CENTER) == 0)
|
||||
else if (!IS_INTRESOURCE(m_vItems[i]->szClass) && !strcmpi(m_vItems[i]->szClass, "RichEdit20A")) {
|
||||
if ((m_vItems[i]->dwStyle & ES_CENTER) == 0) {
|
||||
m_vItems[i]->dwStyle ^= ES_RIGHT;
|
||||
}
|
||||
}
|
||||
else if (!IS_INTRESOURCE(m_vItems[i]->szClass) && !strcmpi(m_vItems[i]->szClass, "SysTreeView32")) {
|
||||
m_vItems[i]->dwStyle |= TVS_RTLREADING;
|
||||
addExStyle = true;
|
||||
}
|
||||
else addExStyle = true;
|
||||
|
||||
if (addExStyle)
|
||||
m_vItems[i]->dwExtStyle |= WS_EX_RIGHT | WS_EX_RTLREADING;
|
||||
m_vItems[i]->dwExtStyle |= WS_EX_RIGHT;
|
||||
|
||||
m_vItems[i]->dwExtStyle |= WS_EX_RTLREADING;
|
||||
|
||||
m_vItems[i]->sX = m_sWidth - m_vItems[i]->sWidth - m_vItems[i]->sX;
|
||||
}
|
||||
|
|
|
@ -146,7 +146,8 @@ lang_again:
|
|||
language_table=((char*)g_blocks[NB_LANGTABLES].offset)+lang_num*g_header->langtable_size;
|
||||
if (!((lang ^ *(LANGID*)language_table) & lang_mask)) {
|
||||
dlg_offset=*(int*)(language_table+sizeof(LANGID));
|
||||
cur_langtable=(int*)(language_table+sizeof(LANGID)+sizeof(int));
|
||||
g_exec_flags.rtl=*(int*)(language_table+sizeof(LANGID)+sizeof(int));
|
||||
cur_langtable=(int*)(language_table+sizeof(LANGID)+2*sizeof(int));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -467,6 +467,7 @@ union exec_flags {
|
|||
int silent;
|
||||
#endif
|
||||
int instdir_error;
|
||||
int rtl;
|
||||
};
|
||||
int flags[1];
|
||||
};
|
||||
|
|
|
@ -85,7 +85,10 @@ int NSISCALL my_MessageBox(const char *text, UINT type) {
|
|||
if (g_exec_flags.silent && type >> 20)
|
||||
return type >> 20;
|
||||
// no silent or no default, just show
|
||||
return MessageBox(g_hwnd, text, g_caption, type & 0x000FFFFF);
|
||||
if (!g_exec_flags.rtl)
|
||||
return MessageBox(g_hwnd, text, g_caption, type & 0x000FFFFF);
|
||||
else
|
||||
return MessageBox(g_hwnd, text, g_caption, (type & 0x000FFFFF) ^ (MB_RIGHT | MB_RTLREADING));
|
||||
}
|
||||
|
||||
void * NSISCALL my_GlobalAlloc(DWORD dwBytes) {
|
||||
|
|
|
@ -405,6 +405,10 @@ int CEXEBuild::GenerateLangTables() {
|
|||
while (i--) {
|
||||
build_langtables.add(<[i].lang_id, sizeof(LANGID));
|
||||
build_langtables.add(<[i].dlg_offset, sizeof(int));
|
||||
{
|
||||
int rtl = lt[i].nlf.m_bRTL ? 1 : 0;
|
||||
build_langtables.add(&rtl, sizeof(int));
|
||||
}
|
||||
|
||||
int *lst = (int *)((char *)build_langtables.get() + build_langtables.getlen());
|
||||
cnt = 0;
|
||||
|
@ -488,6 +492,10 @@ int CEXEBuild::GenerateLangTables() {
|
|||
while (i--) {
|
||||
ubuild_langtables.add(<[i].lang_id, sizeof(LANGID));
|
||||
ubuild_langtables.add(<[i].dlg_offset, sizeof(int));
|
||||
{
|
||||
int rtl = lt[i].nlf.m_bRTL ? 1 : 0;
|
||||
ubuild_langtables.add(&rtl, sizeof(int));
|
||||
}
|
||||
|
||||
int *lst = (int *)((char *)ubuild_langtables.get() + ubuild_langtables.getlen());
|
||||
cnt = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue