diff --git a/Contrib/InstallOptions/InstallerOptions.cpp b/Contrib/InstallOptions/InstallerOptions.cpp index 23ab8f17..4f755631 100644 --- a/Contrib/InstallOptions/InstallerOptions.cpp +++ b/Contrib/InstallOptions/InstallerOptions.cpp @@ -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; } diff --git a/Contrib/Language files/Hebrew.nlf b/Contrib/Language files/Hebrew.nlf index d70fe75a..d48779cb 100644 --- a/Contrib/Language files/Hebrew.nlf +++ b/Contrib/Language files/Hebrew.nlf @@ -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 -ג \ No newline at end of file +" ג" \ No newline at end of file diff --git a/Contrib/Modern UI/Language files/Hebrew.nsh b/Contrib/Modern UI/Language files/Hebrew.nsh index 7b0ea0a7..a5a460e4 100644 --- a/Contrib/Modern UI/Language files/Hebrew.nsh +++ b/Contrib/Modern UI/Language files/Hebrew.nsh @@ -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 diff --git a/Contrib/StartMenu/StartMenu.c b/Contrib/StartMenu/StartMenu.c index c07b44ce..39df9097 100644 --- a/Contrib/StartMenu/StartMenu.c +++ b/Contrib/StartMenu/StartMenu.c @@ -1,4 +1,5 @@ #include +#include #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) diff --git a/Plugins/InstallOptions.dll b/Plugins/InstallOptions.dll index 7dea3159..3c950eeb 100644 Binary files a/Plugins/InstallOptions.dll and b/Plugins/InstallOptions.dll differ diff --git a/Plugins/StartMenu.dll b/Plugins/StartMenu.dll index 8f380c8a..0cd6c38e 100644 Binary files a/Plugins/StartMenu.dll and b/Plugins/StartMenu.dll differ diff --git a/Source/DialogTemplate.cpp b/Source/DialogTemplate.cpp index 99760295..b76a6950 100644 --- a/Source/DialogTemplate.cpp +++ b/Source/DialogTemplate.cpp @@ -21,6 +21,7 @@ */ #include "DialogTemplate.h" +#include ////////////////////////////////////////////////////////////////////// // 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; } diff --git a/Source/exehead/Ui.c b/Source/exehead/Ui.c index 06cd8841..e625c197 100644 --- a/Source/exehead/Ui.c +++ b/Source/exehead/Ui.c @@ -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; } } diff --git a/Source/exehead/fileform.h b/Source/exehead/fileform.h index 4b8c5912..0fc8f70e 100644 --- a/Source/exehead/fileform.h +++ b/Source/exehead/fileform.h @@ -467,6 +467,7 @@ union exec_flags { int silent; #endif int instdir_error; + int rtl; }; int flags[1]; }; diff --git a/Source/exehead/util.c b/Source/exehead/util.c index fbe342c9..14c02bc5 100644 --- a/Source/exehead/util.c +++ b/Source/exehead/util.c @@ -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) { diff --git a/Source/lang.cpp b/Source/lang.cpp index ed72220f..e0ff9dfe 100644 --- a/Source/lang.cpp +++ b/Source/lang.cpp @@ -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;