- 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:
kichik 2003-12-06 20:45:35 +00:00
parent 740ae21f2d
commit 4eb2881b5b
11 changed files with 186 additions and 158 deletions

View file

@ -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;
}

View file

@ -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
ג
" ג"

View file

@ -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

View file

@ -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.

View file

@ -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;
}

View file

@ -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;
}
}

View file

@ -467,6 +467,7 @@ union exec_flags {
int silent;
#endif
int instdir_error;
int rtl;
};
int flags[1];
};

View file

@ -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) {

View file

@ -405,6 +405,10 @@ int CEXEBuild::GenerateLangTables() {
while (i--) {
build_langtables.add(&lt[i].lang_id, sizeof(LANGID));
build_langtables.add(&lt[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(&lt[i].lang_id, sizeof(LANGID));
ubuild_langtables.add(&lt[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;