From 329f59cbd10356549386c82f167be84796d55673 Mon Sep 17 00:00:00 2001 From: kichik Date: Wed, 7 Aug 2002 15:14:40 +0000 Subject: [PATCH] ChangeUI can change any dialog. Added UseOuterUIItem git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@656 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/Language files/Spanish.nlf | 61 +++++++++++++++++ Source/build.cpp | 8 +++ Source/exehead/Ui.c | 81 ++++++++++++++-------- Source/exehead/config.h | 2 +- Source/exehead/exec.c | 6 +- Source/exehead/fileform.h | 18 ++++- Source/exehead/lang.h | 106 +++++++++++++++-------------- Source/exehead/resource.rc | 8 +-- Source/script.cpp | 59 +++++++++++----- Source/tokens.cpp | 3 +- Source/tokens.h | 1 + 11 files changed, 247 insertions(+), 106 deletions(-) create mode 100644 Contrib/Language files/Spanish.nlf diff --git a/Contrib/Language files/Spanish.nlf b/Contrib/Language files/Spanish.nlf new file mode 100644 index 00000000..b0634547 --- /dev/null +++ b/Contrib/Language files/Spanish.nlf @@ -0,0 +1,61 @@ +# Header, don't edit +NLF v1 +# Language ID +1034 +# Start editing here +Sistema de Instalación Nullsoft %s +Instalación de %s +Desinstalación de %s +: Acuerdo de Licencia +: Opciones de Instalación +: Directorio de Instalación +: Instalando Archivos +: Completado +: Confirmación +: Desinstalando +: Completado +< Atras +Siguiente > +De acuerdo +Instalar +Desinstalar +Cancelar +Cerrar +Buscar... +Ver detalles +Nombre +Completado +Personalizada +Seleccione el tipo de instalación: +Seleccione los componentes: +O seleccione los componentes opcionales que desea instalar: +Seleccione el directorio en el que instalar %s: +Espacio disponible: +Espacio requerido: +Desinstalando desde: +Error abriendo archivo para escritura: \r\n\t"$0"\r\nPresione abortar para abortar la instalación,\r\nreintentar para reintentar escribir el archivo, o\r\nignorar para saltarse este archivo +No pudo escribirse: +Falló la copia +Copiar a +No pudo encontrarse simbolo: +No pudo cargarse: +Crear directorio: +Crear acceso directo: +Crear desinstalador: +Borrar archivo: +Borrar al reinicio: +Error creando acceso directo: +Error creando: +¡Error descomprimiendo datos! ¿Instalador corrupto? +Error registrando DLL +Ejecutar comando: +Ejecutar: +Extraer: +Extraer: error escribiendo al archivo +Instalador corrupto: código de operación no valido +No OLE para: +Directorio de salida: +Eliminar directorio: +Eliminar al reinicio: +Renombrar: +Saltado: \ No newline at end of file diff --git a/Source/build.cpp b/Source/build.cpp index d5abed5d..7aa3b1bd 100644 --- a/Source/build.cpp +++ b/Source/build.cpp @@ -227,6 +227,12 @@ CEXEBuild::CEXEBuild() build_header.no_custom_instmode_flag=0; #endif build_header.num_sections=0; + build_header.space_avail_id=0; + build_header.space_req_id=0; + build_header.dir_subtext_id=0; + build_header.com_subtext1_id=0; + build_header.com_subtext2_id=0; + build_header.common.intro_text_id=0; build_header.common.num_entries=0; #ifdef NSIS_CONFIG_SILENT_SUPPORT build_header.common.silent_install=0; @@ -242,6 +248,8 @@ CEXEBuild::CEXEBuild() uninstall_size=-1; memset(&build_uninst,-1,sizeof(build_uninst)); + build_uninst.uninst_subtext_id=0; + build_uninst.common.intro_text_id=0; build_uninst.common.lb_bg=RGB(0,0,0); build_uninst.common.lb_fg=RGB(0,255,0); build_uninst.common.num_entries=0; diff --git a/Source/exehead/Ui.c b/Source/exehead/Ui.c index 5babab9d..e9df10be 100644 --- a/Source/exehead/Ui.c +++ b/Source/exehead/Ui.c @@ -102,9 +102,32 @@ static int g_page_offs=4; #endif static int m_page=-1,m_abort; -static HWND m_curwnd; +HWND m_curwnd; static int m_whichcfg; +#ifdef NSIS_CONFIG_VISIBLE_SUPPORT +BOOL my_SetDlgItemText(HWND dlg, WORD id, int strtab) { + return SetDlgItemText(dlg,id,STR(strtab)); +} + +BOOL SetUIText(HWND defhw, WORD def, WORD custom, int strtab) { + return my_SetDlgItemText(custom?g_hwnd:defhw,custom?custom:def,strtab); +} + +// no tab +BOOL SetUITextNT(HWND defhw, WORD def, WORD custom, const char *text) { + return SetDlgItemText(custom?g_hwnd:defhw,custom?custom:def,text); +} + +UINT GetUIText(WORD def, WORD custom, char *str, int max_size) { + return GetDlgItemText(custom?g_hwnd:m_curwnd,custom?custom:def,str,max_size); +} + +HWND GetUIItem(HWND defhw, WORD def, WORD custom) { + return GetDlgItem(custom?g_hwnd:defhw,custom?custom:def); +} +#endif + #ifdef NSIS_CONFIG_LOG static void build_g_logfile() { @@ -398,14 +421,14 @@ static BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l if (uMsg == WM_INITDIALOG) { g_hwnd=hwndDlg; - SetDlgItemText(hwndDlg,IDC_VERSTR,LANG_BRANDING); + my_SetDlgItemText(hwndDlg,IDC_VERSTR,LANG_BRANDING); hIcon=LoadIcon(g_hInstance,MAKEINTRESOURCE(IDI_ICON2)); SetClassLong(hwndDlg,GCL_HICON,(long)hIcon); - SetDlgItemText(hwndDlg,IDCANCEL,LANG_BTN_CANCEL); + my_SetDlgItemText(hwndDlg,IDCANCEL,LANG_BTN_CANCEL); #ifdef NSIS_CONFIG_UNINSTALL_SUPPORT if (!g_is_uninstaller) #endif - SetDlgItemText(hwndDlg,IDC_BACK,LANG_BTN_BACK); + my_SetDlgItemText(hwndDlg,IDC_BACK,LANG_BTN_BACK); ShowWindow(hwndDlg,SW_SHOW); } @@ -472,7 +495,7 @@ static BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l else if (!m_curwnd) { HWND hwndtmp; - SetDlgItemText(hwndDlg,IDOK, + my_SetDlgItemText(hwndDlg,IDOK, (m_page == g_max_page) ? LANG_BTN_CLOSE : #ifdef NSIS_CONFIG_UNINSTALL_SUPPORT g_is_uninstaller ? LANG_BTN_UNINST : @@ -570,8 +593,8 @@ static BOOL CALLBACK LicenseProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM SendMessage(hwLicense,EM_AUTOURLDETECT,TRUE,0); SendMessage(hwLicense,EM_SETBKGNDCOLOR,0,g_inst_header->license_bg); SendMessage(hwLicense,EM_SETEVENTMASK,0,ENM_LINK); - SetWindowText(hwLicense,LANG_LICENSE_DATA); - SetDlgItemText(hwndDlg,IDC_INTROTEXT,LANG_LICENSE_TEXT); + SetWindowText(hwLicense,STR(LANG_LICENSE_DATA)); + SetUIText(hwndDlg,IDC_INTROTEXT,g_inst_header->common.intro_text_id,LANG_LICENSE_TEXT); } else if (uMsg == WM_NOTIFY) { ENLINK *enlink=(ENLINK *)lParam; @@ -607,8 +630,8 @@ static BOOL CALLBACK UninstProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM l { if (uMsg == WM_INITDIALOG) { - SetDlgItemText(hwndDlg,IDC_UNINSTFROM,LANG_UNINST_SUBTEXT); - SetDlgItemText(hwndDlg,IDC_INTROTEXT,LANG_UNINST_TEXT); + SetUIText(hwndDlg,IDC_INTROTEXT,g_inst_header->common.intro_text_id,LANG_UNINST_TEXT); + SetUIText(hwndDlg,IDC_UNINSTFROM,g_inst_uninstheader->uninst_subtext_id,LANG_UNINST_SUBTEXT); SetDlgItemText(hwndDlg,IDC_EDIT1,state_install_directory); } return 0; @@ -645,9 +668,9 @@ static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar } #endif SetDlgItemText(hwndDlg,IDC_DIR,state_install_directory); - SetDlgItemText(hwndDlg,IDC_INTROTEXT,LANG_DIR_TEXT); - SetDlgItemText(hwndDlg,IDC_BROWSE,LANG_BTN_BROWSE); - SetDlgItemText(hwndDlg,IDC_SELDIRTEXT,LANG_DIR_SUBTEXT); + SetUIText(hwndDlg,IDC_INTROTEXT,g_inst_header->common.intro_text_id,LANG_DIR_TEXT); + my_SetDlgItemText(hwndDlg,IDC_BROWSE,LANG_BTN_BROWSE); + SetUIText(hwndDlg,IDC_SELDIRTEXT,g_inst_header->dir_subtext_id,LANG_DIR_SUBTEXT); SendMessage(hwndDlg,WM_IN_UPDATEMSG,0,0); } if (uMsg == WM_COMMAND) @@ -664,7 +687,7 @@ static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar BROWSEINFO bi={0,}; ITEMIDLIST *idlist; GetDlgItemText(hwndDlg,IDC_DIR,name,256); - GetDlgItemText(hwndDlg,IDC_SELDIRTEXT,str,256); + GetUIText(IDC_SELDIRTEXT,g_inst_header->dir_subtext_id,str,256); bi.hwndOwner = hwndDlg; bi.pszDisplayName = name; bi.lpfn=BrowseCallbackProc; @@ -744,17 +767,17 @@ static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar // Added by Amir Szekely 24th July 2002 // Allows 'SpaceTexts none' if (INSTALL_STR(spacerequired) >= 0) { - lstrcpy(s,LANG_SPACE_REQ); + lstrcpy(s,STR(LANG_SPACE_REQ)); inttosizestr(total,s); - SetDlgItemText(hwndDlg,IDC_SPACEREQUIRED,s); + SetUITextNT(hwndDlg,IDC_SPACEREQUIRED,g_inst_header->space_req_id,s); if (available != -1) { - lstrcpy(s,LANG_SPACE_AVAIL); + lstrcpy(s,STR(LANG_SPACE_AVAIL)); inttosizestr(available,s); - SetDlgItemText(hwndDlg,IDC_SPACEAVAILABLE,s); + SetUITextNT(hwndDlg,IDC_SPACEAVAILABLE,g_inst_header->space_avail_id,s); } else - SetDlgItemText(hwndDlg,IDC_SPACEAVAILABLE,""); + SetUITextNT(hwndDlg,IDC_SPACEAVAILABLE,g_inst_header->space_avail_id,""); } EnableWindow(GetDlgItem(GetParent(hwndDlg),IDOK), @@ -798,9 +821,9 @@ static BOOL CALLBACK SelProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar hTreeItems=(HTREEITEM*)GlobalAlloc(GPTR,sizeof(HTREEITEM)*g_inst_header->num_sections); hBMcheck1=LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_BITMAP1)); - SetDlgItemText(hwndDlg,IDC_INTROTEXT,LANG_COMP_TEXT); - SetDlgItemText(hwndDlg,IDC_TEXT1,LANG_COMP_SUBTEXT(0)); - SetDlgItemText(hwndDlg,IDC_TEXT2,LANG_COMP_SUBTEXT(1)); + SetUIText(hwndDlg,IDC_INTROTEXT,g_inst_header->common.intro_text_id,LANG_COMP_TEXT); + SetUIText(hwndDlg,IDC_TEXT1,g_inst_header->com_subtext1_id,LANG_COMP_SUBTEXT(0)); + SetUIText(hwndDlg,IDC_TEXT2,g_inst_header->com_subtext2_id,LANG_COMP_SUBTEXT(1)); oldTreeWndProc=GetWindowLong(hwndTree1,GWL_WNDPROC); SetWindowLong(hwndTree1,GWL_WNDPROC,(DWORD)newTreeWndProc); @@ -826,7 +849,7 @@ static BOOL CALLBACK SelProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar { SendMessage(hwndCombo1,CB_ADDSTRING,0,(LPARAM)GetStringFromStringTab(g_inst_header->install_types_ptr[m_num_insttypes])); } - if (g_inst_header->no_custom_instmode_flag!=1) SendMessage(hwndCombo1,CB_ADDSTRING,0,(LPARAM)LANG_COMP_CUSTOM); + if (g_inst_header->no_custom_instmode_flag!=1) SendMessage(hwndCombo1,CB_ADDSTRING,0,(LPARAM)STR(LANG_COMP_CUSTOM)); SendMessage(hwndCombo1,CB_SETCURSEL,m_whichcfg,0); } @@ -1084,7 +1107,7 @@ static BOOL CALLBACK SelProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar { int c=(m_whichcfg == m_num_insttypes && m_num_insttypes)<<3;// SW_SHOWNA=8, SW_HIDE=0 ShowWindow(hwndTree1,c); - ShowWindow(GetDlgItem(hwndDlg,IDC_TEXT2),c); + ShowWindow(GetUIItem(hwndDlg,IDC_TEXT2,g_inst_header->com_subtext2_id),c); } if (INSTALL_STR(spacerequired) >= 0) { @@ -1095,9 +1118,9 @@ static BOOL CALLBACK SelProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar if (g_inst_section[x].default_state&DFS_SET) total+=g_inst_section[x].size_kb; } - lstrcpy(s,LANG_SPACE_REQ); + lstrcpy(s,STR(LANG_SPACE_REQ)); inttosizestr(total,s); - SetDlgItemText(hwndDlg,IDC_SPACEREQUIRED,s); + SetUITextNT(hwndDlg,IDC_SPACEREQUIRED,g_inst_header->space_req_id,s); } } return 0; @@ -1188,7 +1211,7 @@ static BOOL CALLBACK InstProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa LVCOLUMN lvc = {0, 0, -1, 0, 0, -1}; insthwndbutton=GetDlgItem(hwndDlg,IDC_SHOWDETAILS); - insthwnd2=GetDlgItem(hwndDlg,IDC_INTROTEXT); + insthwnd2=GetUIItem(hwndDlg,IDC_INTROTEXT,g_inst_header->common.intro_text_id); insthwnd=GetDlgItem(hwndDlg,IDC_LIST1); #ifdef NSIS_CONFIG_UNINSTALL_SUPPORT if (g_is_uninstaller) @@ -1198,7 +1221,7 @@ static BOOL CALLBACK InstProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa else #endif { - log_printf3("New install of \"%s\" to \"%s\"",LANG_NAME,state_install_directory); + log_printf3("New install of \"%s\" to \"%s\"",STR(LANG_NAME),state_install_directory); for (; x < g_inst_header->num_sections; x ++) { #ifdef NSIS_CONFIG_COMPONENTPAGE @@ -1214,7 +1237,7 @@ static BOOL CALLBACK InstProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa ListView_SetBkColor(insthwnd, g_inst_cmnheader->lb_bg); ListView_SetTextBkColor(insthwnd, g_inst_cmnheader->lb_bg); ListView_SetTextColor(insthwnd, g_inst_cmnheader->lb_fg); - SetWindowText(insthwndbutton,LANG_BTN_DETAILS); + SetWindowText(insthwndbutton,STR(LANG_BTN_DETAILS)); if (g_inst_cmnheader->show_details) { ShowWindow(insthwndbutton,SW_HIDE); @@ -1258,7 +1281,7 @@ static BOOL CALLBACK InstProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa ShowWindow(g_hwnd,SW_SHOWNA); lstrcpy(g_tmp,g_caption); process_string_fromtab(g_tmp+lstrlen(g_caption),COMMON_STR(subcaptions[g_max_page+1])); - update_status_text(LANG_COMPLETED,""); + update_status_text(STR(LANG_COMPLETED),""); SetWindowText(h2,g_tmp); SetFocus(h); } diff --git a/Source/exehead/config.h b/Source/exehead/config.h index 28bda974..82e5e253 100644 --- a/Source/exehead/config.h +++ b/Source/exehead/config.h @@ -200,7 +200,7 @@ // "CallInstDLL dll command" had been invoked. // - When the installer exits any extracted temporary dlls will // be deleted. -#define NSIS_CONFIG_PLUGIN_SUPPORT +//#define NSIS_CONFIG_PLUGIN_SUPPORT // fixes diff --git a/Source/exehead/exec.c b/Source/exehead/exec.c index 3248a5f7..8cf3baba 100644 --- a/Source/exehead/exec.c +++ b/Source/exehead/exec.c @@ -37,6 +37,8 @@ static int exec_rebootflag; HBITMAP g_hBrandingBitmap = 0; #endif +extern HWND m_curwnd; + static WIN32_FIND_DATA *file_exists(char *buf) { HANDLE h; @@ -698,8 +700,8 @@ static int ExecuteEntry(entry *entries, int pos) if (IsWindow((HWND)process_string_fromtab_toint(parms[0]))) return parms[1]; return parms[2]; case EW_SETDLGITEMTEXT: - process_string_fromtab(buf,parms[1]); - SetDlgItemText(g_hwnd,parms[0],buf); + process_string_fromtab(buf,parms[2]); + SetDlgItemText(parms[0]?g_hwnd:m_curwnd,parms[1],buf); return 0; #endif #ifdef NSIS_SUPPORT_SHELLEXECUTE diff --git a/Source/exehead/fileform.h b/Source/exehead/fileform.h index 3722dbc3..a4fa3c09 100644 --- a/Source/exehead/fileform.h +++ b/Source/exehead/fileform.h @@ -68,7 +68,7 @@ enum EW_FINDWINDOW, // FindWindow: 5, [outputvar,window class,window name, window_parent, window_after] EW_SENDMESSAGE, // SendMessage: 5 [output, hwnd, msg, lparam, wparam] EW_ISWINDOW, // IsWindow: 3 [hwnd, jump_if_window, jump_if_notwindow] - EW_SETDLGITEMTEXT, // SetDlgItemText: 2 [item_id, text] + EW_SETDLGITEMTEXT, // SetDlgItemText: 3 [outer? item_id, text] EW_SHELLEXEC, // ShellExecute program: 4, [shell action, complete commandline, parameters, showwindow] @@ -252,6 +252,10 @@ typedef struct // additional flags char misc_flags; // auto_close=&1, no_show_dirpage=&2, no_show_icon&4, no_rootdir&8; + // Added by Amir Szekely 6th August 2002 + // Adds the ability to make the inner text show up in a dialog item in the outer dialog. + WORD intro_text_id; + } common_header; // Strings specific to installers @@ -322,6 +326,14 @@ typedef struct #endif//NSIS_CONFIG_COMPONENTPAGE #endif//NSIS_SUPPORT_CODECALLBACKS + // Added by Amir Szekely 6th August 2002 + // Adds the ability to make the inner text show up in a dialog item in the outer dialog. + WORD space_avail_id; + WORD space_req_id; + WORD dir_subtext_id; + WORD com_subtext1_id; + WORD com_subtext2_id; + } header; // Strings specific to uninstallers @@ -347,6 +359,10 @@ typedef struct int code; int code_size; + // Added by Amir Szekely 6th August 2002 + // Adds the ability to make the inner text show up in a dialog item in the outer dialog. + WORD uninst_subtext_id; + } uninstall_header; typedef struct diff --git a/Source/exehead/lang.h b/Source/exehead/lang.h index 3e80af16..074e25eb 100644 --- a/Source/exehead/lang.h +++ b/Source/exehead/lang.h @@ -25,71 +25,73 @@ // Now supports more than one language in each installer // Please note that all of these define the offset not the string itself. -// To get the string it self use process_string_fromtab or GetStringFromStringTab. +// To get the string it self use process_string_fromtab, GetStringFromStringTab or STR(). + +#define STR(x) GetStringFromStringTab(x) #define INSTALL_STR(x) (cur_install_strings_table->x) // Installer specific strings -#define LANG_BTN_BACK GetStringFromStringTab(INSTALL_STR(backbutton)) -#define LANG_BTN_NEXT GetStringFromStringTab(INSTALL_STR(nextbutton)) -#define LANG_BTN_BROWSE GetStringFromStringTab(INSTALL_STR(browse)) -#define LANG_BTN_INSTALL GetStringFromStringTab(INSTALL_STR(installbutton)) -#define LANG_SPACE_REQ GetStringFromStringTab(INSTALL_STR(spacerequired)) -#define LANG_SPACE_AVAIL GetStringFromStringTab(INSTALL_STR(spaceavailable)) -#define LANG_COMP_CUSTOM GetStringFromStringTab(INSTALL_STR(custom)) -#define LANG_DIR_TEXT GetStringFromStringTab(INSTALL_STR(text)) -#define LANG_DIR_SUBTEXT GetStringFromStringTab(INSTALL_STR(dirsubtext)) -#define LANG_COMP_TEXT GetStringFromStringTab(INSTALL_STR(componenttext)) -#define LANG_COMP_SUBTEXT(x) GetStringFromStringTab(INSTALL_STR(componentsubtext[x])) -#define LANG_LICENSE_TEXT GetStringFromStringTab(INSTALL_STR(licensetext)) -#define LANG_LICENSE_DATA GetStringFromStringTab(INSTALL_STR(licensedata)) -#define LANG_BTN_LICENSE GetStringFromStringTab(INSTALL_STR(licensebutton)) +#define LANG_BTN_BACK (INSTALL_STR(backbutton)) +#define LANG_BTN_NEXT (INSTALL_STR(nextbutton)) +#define LANG_BTN_BROWSE (INSTALL_STR(browse)) +#define LANG_BTN_INSTALL (INSTALL_STR(installbutton)) +#define LANG_SPACE_REQ (INSTALL_STR(spacerequired)) +#define LANG_SPACE_AVAIL (INSTALL_STR(spaceavailable)) +#define LANG_COMP_CUSTOM (INSTALL_STR(custom)) +#define LANG_DIR_TEXT (INSTALL_STR(text)) +#define LANG_DIR_SUBTEXT (INSTALL_STR(dirsubtext)) +#define LANG_COMP_TEXT (INSTALL_STR(componenttext)) +#define LANG_COMP_SUBTEXT(x) (INSTALL_STR(componentsubtext[x])) +#define LANG_LICENSE_TEXT (INSTALL_STR(licensetext)) +#define LANG_LICENSE_DATA (INSTALL_STR(licensedata)) +#define LANG_BTN_LICENSE (INSTALL_STR(licensebutton)) #define UNINSTALL_STR(x) (cur_uninstall_strings_table->x) // Uninstall specific strings -#define LANG_BTN_UNINST GetStringFromStringTab(UNINSTALL_STR(uninstbutton)) -#define LANG_UNINST_TEXT GetStringFromStringTab(UNINSTALL_STR(uninstalltext)) -#define LANG_UNINST_SUBTEXT GetStringFromStringTab(UNINSTALL_STR(uninstalltext2)) +#define LANG_BTN_UNINST (UNINSTALL_STR(uninstbutton)) +#define LANG_UNINST_TEXT (UNINSTALL_STR(uninstalltext)) +#define LANG_UNINST_SUBTEXT (UNINSTALL_STR(uninstalltext2)) #define COMMON_STR(x) (cur_common_strings_table->x) // Common strings -#define LANG_BRANDING GetStringFromStringTab(COMMON_STR(branding)) -#define LANG_BTN_CANCEL GetStringFromStringTab(COMMON_STR(cancelbutton)) -#define LANG_BTN_DETAILS GetStringFromStringTab(COMMON_STR(showdetailsbutton)) -#define LANG_COMPLETED GetStringFromStringTab(COMMON_STR(completed)) -#define LANG_BTN_CLOSE GetStringFromStringTab(COMMON_STR(closebutton)) -#define LANG_NAME GetStringFromStringTab(COMMON_STR(name)) -#define LANG_CAPTION GetStringFromStringTab(COMMON_STR(caption)) -#define LANG_SUBCAPTION(x) GetStringFromStringTab(COMMON_STR(subcaptions[x])) +#define LANG_BRANDING (COMMON_STR(branding)) +#define LANG_BTN_CANCEL (COMMON_STR(cancelbutton)) +#define LANG_BTN_DETAILS (COMMON_STR(showdetailsbutton)) +#define LANG_COMPLETED (COMMON_STR(completed)) +#define LANG_BTN_CLOSE (COMMON_STR(closebutton)) +#define LANG_NAME (COMMON_STR(name)) +#define LANG_CAPTION (COMMON_STR(caption)) +#define LANG_SUBCAPTION(x) (COMMON_STR(subcaptions[x])) // instruction strings -#define LANG_FILEERR GetStringFromStringTab(COMMON_STR(fileerrtext)) -#define LANG_DELETEFILE GetStringFromStringTab(COMMON_STR(del_file)) -#define LANG_DLLREGERROR GetStringFromStringTab(COMMON_STR(err_reg_dll)) -#define LANG_REMOVEDIR GetStringFromStringTab(COMMON_STR(remove_dir)) -#define LANG_OUTPUTDIR GetStringFromStringTab(COMMON_STR(output_dir)) -#define LANG_CREATEDIR GetStringFromStringTab(COMMON_STR(create_dir)) -#define LANG_RENAME GetStringFromStringTab(COMMON_STR(rename)) -#define LANG_RENAMEONREBOOT GetStringFromStringTab(COMMON_STR(rename_on_reboot)) -#define LANG_SKIPPED GetStringFromStringTab(COMMON_STR(skipped)) -#define LANG_CANTWRITE GetStringFromStringTab(COMMON_STR(cant_write)) -#define LANG_EXTRACT GetStringFromStringTab(COMMON_STR(extract)) -#define LANG_ERRORWRITING GetStringFromStringTab(COMMON_STR(err_writing)) -#define LANG_ERRORDECOMPRESSING GetStringFromStringTab(COMMON_STR(err_decompressing)) -#define LANG_DELETEONREBOOT GetStringFromStringTab(COMMON_STR(del_on_reboot)) -#define LANG_EXECSHELL GetStringFromStringTab(COMMON_STR(exec_shell)) -#define LANG_EXECUTE GetStringFromStringTab(COMMON_STR(exec)) -#define LANG_CANNOTFINDSYMBOL GetStringFromStringTab(COMMON_STR(symbol_not_found)) -#define LANG_COULDNOTLOAD GetStringFromStringTab(COMMON_STR(could_not_load)) -#define LANG_NOOLE GetStringFromStringTab(COMMON_STR(no_ole)) -#define LANG_ERRORCREATINGSHORTCUT GetStringFromStringTab(COMMON_STR(err_creating_shortcut)) -#define LANG_CREATESHORTCUT GetStringFromStringTab(COMMON_STR(create_shortcut)) -#define LANG_COPYTO GetStringFromStringTab(COMMON_STR(copy_to)) -#define LANG_COPYFAILED GetStringFromStringTab(COMMON_STR(copy_failed)) -#define LANG_ERRORCREATING GetStringFromStringTab(COMMON_STR(err_creating)) -#define LANG_CREATEDUNINST GetStringFromStringTab(COMMON_STR(created_uninst)) -#define LANG_INSTCORRUPTED GetStringFromStringTab(COMMON_STR(inst_corrupted)) +#define LANG_FILEERR (COMMON_STR(fileerrtext)) +#define LANG_DELETEFILE (COMMON_STR(del_file)) +#define LANG_DLLREGERROR (COMMON_STR(err_reg_dll)) +#define LANG_REMOVEDIR (COMMON_STR(remove_dir)) +#define LANG_OUTPUTDIR (COMMON_STR(output_dir)) +#define LANG_CREATEDIR (COMMON_STR(create_dir)) +#define LANG_RENAME (COMMON_STR(rename)) +#define LANG_RENAMEONREBOOT (COMMON_STR(rename_on_reboot)) +#define LANG_SKIPPED (COMMON_STR(skipped)) +#define LANG_CANTWRITE (COMMON_STR(cant_write)) +#define LANG_EXTRACT (COMMON_STR(extract)) +#define LANG_ERRORWRITING (COMMON_STR(err_writing)) +#define LANG_ERRORDECOMPRESSING (COMMON_STR(err_decompressing)) +#define LANG_DELETEONREBOOT (COMMON_STR(del_on_reboot)) +#define LANG_EXECSHELL (COMMON_STR(exec_shell)) +#define LANG_EXECUTE (COMMON_STR(exec)) +#define LANG_CANNOTFINDSYMBOL (COMMON_STR(symbol_not_found)) +#define LANG_COULDNOTLOAD (COMMON_STR(could_not_load)) +#define LANG_NOOLE (COMMON_STR(no_ole)) +#define LANG_ERRORCREATINGSHORTCUT (COMMON_STR(err_creating_shortcut)) +#define LANG_CREATESHORTCUT (COMMON_STR(create_shortcut)) +#define LANG_COPYTO (COMMON_STR(copy_to)) +#define LANG_COPYFAILED (COMMON_STR(copy_failed)) +#define LANG_ERRORCREATING (COMMON_STR(err_creating)) +#define LANG_CREATEDUNINST (COMMON_STR(created_uninst)) +#define LANG_INSTCORRUPTED (COMMON_STR(inst_corrupted)) #endif//_NSIS_LANG_H_ \ No newline at end of file diff --git a/Source/exehead/resource.rc b/Source/exehead/resource.rc index fba1ba8f..4e1098d2 100644 --- a/Source/exehead/resource.rc +++ b/Source/exehead/resource.rc @@ -38,7 +38,7 @@ BEGIN ICON IDI_ICON2,IDC_ULICON,0,0,20,20 LTEXT "",IDC_INTROTEXT,25,0,241,23 CONTROL "",IDC_EDIT1,"RICHEDIT",ES_MULTILINE | ES_READONLY | - WS_VSCROLL | WS_BORDER,0,24,266,105 + WS_BORDER | WS_VSCROLL,0,24,266,105 END #endif @@ -77,7 +77,7 @@ FONT 8, "MS Sans Serif" BEGIN COMBOBOX IDC_COMBO1,114,25,152,102,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - ICON IDI_ICON2,IDC_ULICON,0,0,20,20 + ICON IDI_ICON2,IDC_ULICON,0,0,21,20 LTEXT "",IDC_TEXT2,0,40,108,21 CONTROL "",IDC_TEXT1,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,0,27, 108,8 @@ -125,8 +125,8 @@ BEGIN CONTROL "",IDC_INTROTEXT,"Static",SS_LEFTNOWORDWRAP | WS_GROUP, 24,0,241,8 CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_SINGLESEL | - LVS_NOCOLUMNHEADER | NOT WS_VISIBLE | WS_BORDER | - WS_TABSTOP, 0,25,265,104 + LVS_NOCOLUMNHEADER | NOT WS_VISIBLE | WS_BORDER | + WS_TABSTOP,0,25,265,104 ICON IDI_ICON2,IDC_ULICON,0,0,20,20 PUSHBUTTON "",IDC_SHOWDETAILS,0,28,50,14,NOT WS_TABSTOP END diff --git a/Source/script.cpp b/Source/script.cpp index ccc36d98..fe344e13 100644 --- a/Source/script.cpp +++ b/Source/script.cpp @@ -1058,7 +1058,6 @@ int CEXEBuild::doCommand(int which_token, LineParser &line, FILE *fp, const char if (!dlg) return PS_ERROR; CDialogTemplate UIDlg(dlg); SEARCH(IDC_EDIT1); - SEARCH(IDC_INTROTEXT); re.UpdateResource(RT_DIALOG, IDD_LICENSE, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), dlg, UIDlg.GetSize()); } @@ -1066,13 +1065,9 @@ int CEXEBuild::doCommand(int which_token, LineParser &line, FILE *fp, const char dlg = get_dlg(hUIFile, IDD_DIR, line.gettoken_str(2)); if (!dlg) return PS_ERROR; CDialogTemplate UIDlg(dlg); - SEARCH(IDC_SELDIRTEXT); - SEARCH(IDC_INTROTEXT); SEARCH(IDC_DIR); SEARCH(IDC_BROWSE); SEARCH(IDC_CHECK1); - SEARCH(IDC_SPACEREQUIRED); - SEARCH(IDC_SPACEAVAILABLE); re.UpdateResource(RT_DIALOG, IDD_DIR, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), dlg, UIDlg.GetSize()); } @@ -1080,10 +1075,6 @@ int CEXEBuild::doCommand(int which_token, LineParser &line, FILE *fp, const char dlg = get_dlg(hUIFile, IDD_SELCOM, line.gettoken_str(2)); if (!dlg) return PS_ERROR; CDialogTemplate UIDlg(dlg); - SEARCH(IDC_SPACEREQUIRED); - SEARCH(IDC_INTROTEXT); - SEARCH(IDC_TEXT1); - SEARCH(IDC_TEXT2); SEARCH(IDC_TREE1); SEARCH(IDC_COMBO1); re.UpdateResource(RT_DIALOG, IDD_SELCOM, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), dlg, UIDlg.GetSize()); @@ -1123,7 +1114,6 @@ int CEXEBuild::doCommand(int which_token, LineParser &line, FILE *fp, const char if (!dlg) return PS_ERROR; CDialogTemplate UIDlg(dlg); SEARCH(IDC_LIST1); - SEARCH(IDC_INTROTEXT); SEARCH(IDC_PROGRESS1); SEARCH(IDC_PROGRESS2); SEARCH(IDC_SHOWDETAILS); @@ -1135,8 +1125,6 @@ int CEXEBuild::doCommand(int which_token, LineParser &line, FILE *fp, const char if (!dlg) return PS_ERROR; CDialogTemplate UIDlg(dlg); SEARCH(IDC_EDIT1); - SEARCH(IDC_INTROTEXT); - SEARCH(IDC_UNINSTFROM); re.UpdateResource(RT_DIALOG, IDD_UNINST, MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), dlg, UIDlg.GetSize()); } @@ -1147,14 +1135,51 @@ int CEXEBuild::doCommand(int which_token, LineParser &line, FILE *fp, const char ERROR_MSG("can't free library!\n"); } - SCRIPT_MSG("ChangeUI: %s%s\n", line.gettoken_str(1), branding_image_found?" (branding image holder found)":""); + SCRIPT_MSG("ChangeUI: %s %s%s\n", line.gettoken_str(1), line.gettoken_str(2), branding_image_found?" (branding image holder found)":""); } catch (exception& err) { ERROR_MSG("Error while changing UI: %s\n", err.what()); return PS_ERROR; } return make_sure_not_in_secorfunc(line.gettoken_str(0)); + case TOK_USEOUTERUIITEM: + { + int k = line.gettoken_enum(1,"introtext\0spaceavail\0spacereq\0dirsubtext\0comsubtext1\0comsubtext2\0uninstsubtext\0"); + if (k < 0) PRINTHELP(); + int id = line.gettoken_int(2); + if (!id) { + ERROR_MSG("Error: Item id can't be zero!\n"); + return PS_ERROR; + } + switch (k) { + case 0: + build_header.common.intro_text_id=build_uninst.common.intro_text_id=id; + break; + case 1: + build_header.space_avail_id=id; + break; + case 2: + build_header.space_req_id=id; + break; + case 3: + build_header.dir_subtext_id=id; + break; + case 4: + build_header.com_subtext1_id=id; + break; + case 5: + build_header.com_subtext2_id=id; + break; + case 6: + build_uninst.uninst_subtext_id=id; + break; + } + SCRIPT_MSG("%s: %s now uses outer ui item %d\n",line.gettoken_str(0),line.gettoken_str(1),id); + } + return make_sure_not_in_secorfunc(line.gettoken_str(0)); #else + case TOK_CHANGEUI: + case TOK_USEOUTERUIITEM: ERROR_MSG("Error: %s specified, NSIS_CONFIG_VISIBLE_SUPPORT not defined.\n",line.gettoken_str(0)); return PS_ERROR; #endif// NSIS_CONFIG_VISIBLE_SUPPORT @@ -2168,9 +2193,11 @@ int CEXEBuild::doCommand(int which_token, LineParser &line, FILE *fp, const char return add_entry(&ent); case TOK_SETDLGITEMTEXT: ent.which=EW_SETDLGITEMTEXT; - ent.offsets[0]=line.gettoken_int(1); - ent.offsets[1]=add_string(line.gettoken_str(2)); - SCRIPT_MSG("SetDlgItemText: item=%s text=%s\n",line.gettoken_str(1),line.gettoken_str(2)); + ent.offsets[0]=line.gettoken_enum(1,"inner\0outer\0"); + if (ent.offsets[0]<0) PRINTHELP(); + ent.offsets[1]=line.gettoken_int(2); + ent.offsets[2]=add_string(line.gettoken_str(3)); + SCRIPT_MSG("SetDlgItemText: %s dialog item=%s text=%s\n",ent.offsets[0]?"outer":"inner",line.gettoken_str(1),line.gettoken_str(2)); return add_entry(&ent); #else//!NSIS_SUPPORT_HWNDS case TOK_ISWINDOW: diff --git a/Source/tokens.cpp b/Source/tokens.cpp index 6f6076b2..7bd61e55 100644 --- a/Source/tokens.cpp +++ b/Source/tokens.cpp @@ -133,7 +133,7 @@ static tokenType tokenlist[TOK__LAST] = {TOK_SETFILEATTRIBUTES,"SetFileAttributes",2,0,"file attribute[|attribute[...]]\n attribute=(NORMAL|ARCHIVE|HIDDEN|OFFLINE|READONLY|SYSTEM|TEMPORARY|0)"}, {TOK_SETFONT,"SetFont",2,0,"font_face_name font_size"}, {TOK_SETERRORS,"SetErrors",0,0,""}, -{TOK_SETDLGITEMTEXT,"SetDlgItemText",2,0,"item text"}, +{TOK_SETDLGITEMTEXT,"SetDlgItemText",3,0,"(outer|inner) item text"}, {TOK_SETOUTPATH,"SetOutPath",1,0,"output_path"}, {TOK_SETOVERWRITE,"SetOverwrite",1,0,"(on|off|try|ifnewer)"}, {TOK_SETREBOOTFLAG,"SetRebootFlag",1,0,"true|false"}, @@ -153,6 +153,7 @@ static tokenType tokenlist[TOK__LAST] = {TOK_UNINSTCAPTION,"UninstallCaption",1,1,"[/LANG=lang_id] uninstaller_caption"}, {TOK_UNINSTSUBCAPTION,"UninstallSubCaption",2,1,"[/LANG=lang_id] page_number(0-2) new_subcaption"}, {TOK_UNREGDLL,"UnRegDLL",1,0,"dll_path_on_target.dll"}, +{TOK_USEOUTERUIITEM,"UseOuterUIItem",2,0,"item id"}, {TOK_WINDOWICON,"WindowIcon",1,0,"on|off"}, {TOK_WRITEINISTR,"WriteINIStr",4,0,"ini_file section_name entry_name new_value"}, {TOK_WRITEREGBIN,"WriteRegBin",4,0,"rootkey subkey entry_name hex_string_like_12848412AB\n root_key=(HKCR|HKLM|HKCU|HKU|HKCC|HKDD|HKPD)"}, diff --git a/Source/tokens.h b/Source/tokens.h index b78282bb..33a8529f 100644 --- a/Source/tokens.h +++ b/Source/tokens.h @@ -40,6 +40,7 @@ enum TOK_INSTPROGRESSFLAGS, TOK_XPSTYLE, TOK_CHANGEUI, + TOK_USEOUTERUIITEM, TOK_ADDBRANDINGIMAGE, TOK_SETFONT, TOK_SETCOMPRESSOR,