From d66016acfe4ec66a971257485ad5aa36a69ee477 Mon Sep 17 00:00:00 2001 From: kichik Date: Sat, 21 Dec 2002 11:24:42 +0000 Subject: [PATCH] Added group box, and made dir request not crash and use Text field git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@1989 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/InstallOptions/InstallerOptions.cpp | 28 +++++----- Contrib/InstallOptions/test.ini | 56 ++++++++++++-------- Contrib/InstallOptions/test.nsi | 4 +- Plugins/InstallOptions.dll | Bin 12288 -> 12800 bytes 4 files changed, 50 insertions(+), 38 deletions(-) diff --git a/Contrib/InstallOptions/InstallerOptions.cpp b/Contrib/InstallOptions/InstallerOptions.cpp index 8914cb66..bc671fb3 100644 --- a/Contrib/InstallOptions/InstallerOptions.cpp +++ b/Contrib/InstallOptions/InstallerOptions.cpp @@ -110,6 +110,7 @@ char *STRDUP(const char *c) #define FIELD_DIRREQUEST (9) #define FIELD_COMBOBOX (10) #define FIELD_LISTBOX (11) +#define FIELD_GROUPBOX (12) // general flags #define FLAG_BOLD (0x1) @@ -209,7 +210,7 @@ bool BrowseForFile(int nControlIdx) { // ofn.lpstrCustomFilter = NULL; // ofn.lpstrDefExt = NULL; ofn.nMaxFile = MAX_PATH; - ofn.lpstrFile = (char*)MALLOC(ofn.nMaxFile); + ofn.lpstrFile = (char*)MALLOC(MAX_PATH); // ofn.nMaxFileTitle = MAX_PATH; // we ignore this for simplicity, leave lpstrFileTitle at NULL // ofn.lpstrFileTitle = new char [ofn.nMaxFileTitle]; @@ -224,9 +225,9 @@ bool BrowseForFile(int nControlIdx) { // ofn.nFilterIndex = 1; // since we use no custom filters, leaving it at 0 means use the first. // ofn.nMaxCustFilter = 0; - GetWindowText(hControl, ofn.lpstrFile, ofn.nMaxFile); + GetWindowText(hControl, ofn.lpstrFile, MAX_PATH); - for(;;) { + //for(;;) { if (pThisField->bSaveDlg) { bResult = GetSaveFileName(&ofn); } else { @@ -241,9 +242,9 @@ bool BrowseForFile(int nControlIdx) { // if (*(ofn.lpstrFile)) { //&& (CommDlgExtendedError() == FNERR_INVALIDFILENAME)) { // *(ofn.lpstrFile) = '\0'; // } else { - break; + //break; // } - } + //} return false; } @@ -263,14 +264,11 @@ int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lp, LPARAM pData) { bool BrowseForFolder(int nControlIdx) { BROWSEINFO bi; - HWND hControl; - - hControl = pFields[nControlIdx].hwnd; bi.hwndOwner = hConfigWindow; bi.pidlRoot = NULL; bi.pszDisplayName = (char*)MALLOC(MAX_PATH); - LPCTSTR lpszTitle = NULL; + bi.lpszTitle = pFields[nControlIdx].pszText; bi.ulFlags = BIF_STATUSTEXT; bi.lpfn = BrowseCallbackProc; bi.lParam = nControlIdx; @@ -299,7 +297,7 @@ bool BrowseForFolder(int nControlIdx) { char *pszFolder = (char*)MALLOC(MAX_PATH); if (SHGetPathFromIDList(pResult, pszFolder)) { - SetWindowText(hControl, pszFolder); + SetWindowText(pFields[nControlIdx].hwnd, pszFolder); } LPMALLOC pMalloc; @@ -413,7 +411,7 @@ void AddBrowseButtons() { // control is found, then it adds the corresponding browse button. // NOTE: this also resizes the text box created to make room for the button. int nIdx; - int nWidth = 22; + int nWidth = 15; FieldType *pNewField; for (nIdx = nNumFields - 1; nIdx >= 0; nIdx--) { @@ -501,6 +499,7 @@ bool ReadSettings(void) { { "RADIOBUTTON", FIELD_RADIOBUTTON }, { "ICON", FIELD_ICON }, { "BITMAP", FIELD_BITMAP }, + { "GROUPBOX", FIELD_GROUPBOX }, { NULL, 0 } }; // Control flags @@ -869,7 +868,10 @@ int createCfgDlg() WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE }, { "LISTBOX", // FIELD_LISTBOX DEFAULT_STYLES | WS_GROUP | WS_TABSTOP | LBS_DISABLENOSCROLL | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT, - WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE } + WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE }, + { "BUTTON", // FIELD_GROUPBOX + DEFAULT_STYLES | BS_GROUPBOX, + WS_EX_TRANSPARENT } }; #undef DEFAULT_STYLES @@ -891,7 +893,7 @@ int createCfgDlg() rect.top = MulDiv(pFields[nIdx].rect.top, baseUnitY, 8); rect.bottom = MulDiv(pFields[nIdx].rect.bottom, baseUnitY, 8); - if (pFields[nIdx].rect.left < 0) + if (pFields[nIdx].rect.left < 0) rect.left += dialog_r.right - dialog_r.left; if (pFields[nIdx].rect.right < 0) rect.right += dialog_r.right - dialog_r.left; diff --git a/Contrib/InstallOptions/test.ini b/Contrib/InstallOptions/test.ini index 6a5666f0..61143fd7 100644 --- a/Contrib/InstallOptions/test.ini +++ b/Contrib/InstallOptions/test.ini @@ -1,54 +1,64 @@ [Settings] -NumFields=6 +NumFields=7 [Field 1] Type=checkbox text=Install support for X -left=0 -right=300 -top=0 -bottom=10 +left=5 +right=-5 +top=10 +bottom=18 state=0 [Field 2] Type=checkbox text=Install support for Y -left=0 -right=-1 -top=13 -bottom=23 +left=5 +right=-5 +top=19 +bottom=27 state=1 [Field 3] Type=checkbox text=Install support for Z -left=0 -right=-1 -top=26 +left=5 +right=-5 +top=28 bottom=36 state=0 [Field 4] Type=FileRequest State=C:\poop.poop -Left=0 -Right=-1 -Top=46 -Bottom=59 +Left=5 +Right=-5 +Top=38 +Bottom=50 Filter=Poop Files|*.poop|All files|*.* Flags=FILE_MUST_EXIST|OFN_EXPLORER|OFN_HIDEREADONLY [Field 5] Type=DirRequest -Left=0 -Right=-1 -Top=64 -Bottom=77 +Left=5 +Right=-5 +Top=51 +Bottom=63 +Text=Select a directory... +State=C:\Program Files\NSIS [Field 6] Type=Label +Left=5 +Right=-5 +Top=64 +Bottom=78 +Text=This is a label... + +[Field 7] +Type=GroupBox Left=0 Right=-1 -Top=87 -Bottom=97 -Text=This is a label... \ No newline at end of file +Top=0 +Bottom=-1 +Text=This is a group box... \ No newline at end of file diff --git a/Contrib/InstallOptions/test.nsi b/Contrib/InstallOptions/test.nsi index 73c84595..b0c5e6dd 100644 --- a/Contrib/InstallOptions/test.nsi +++ b/Contrib/InstallOptions/test.nsi @@ -18,7 +18,7 @@ InstallDir "$PROGRAMFILES\IOTest" ;Use ReserveFile for your own InstallOptions INI files too! ReserveFile "${NSISDIR}\Plugins\InstallOptions.dll" -ReserveFile "test.ini" +ReserveFile "Copy of test.ini" ;Texts on the dialogs DirText "Choose a directory" @@ -56,7 +56,7 @@ Function .onInit ;$PLUGINSDIR will automatically be removed when the installer closes InitPluginsDir - File /oname=$PLUGINSDIR\test.ini "test.ini" + File /oname=$PLUGINSDIR\test.ini "copy of test.ini" FunctionEnd diff --git a/Plugins/InstallOptions.dll b/Plugins/InstallOptions.dll index 5fbb0f689735ae23b56c3ddeb544ec3c9b724e1d..44cfaeab052ec502bcc1fc5eb49edd62fbd4a8e5 100644 GIT binary patch delta 5113 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 delta 5146 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 O+DMM9CE>q%o&OEdI5}7V