Added PickiconDlg dialog resources as a test
-- v3: shell32: add PickIconDlg resoures and first needed helb procedure
From: Matthias Zorn matthias0178@gmail.com
--- dlls/shell32/shell32.rc | 15 +++++++++++++++ dlls/shell32/shresdef.h | 8 ++++++++ 2 files changed, 23 insertions(+)
diff --git a/dlls/shell32/shell32.rc b/dlls/shell32/shell32.rc index f1b0bc50cca..dcec622713c 100644 --- a/dlls/shell32/shell32.rc +++ b/dlls/shell32/shell32.rc @@ -269,6 +269,21 @@ License along with Wine; if not, write to the Free Software \ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA." }
+IDD_PICKICONDLG DIALOG 0, 0, 230, 192 +STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Change Icon" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Search for icons in &file:", IDC_PICKICONDLG_LABELPATH, 10, 10, 210, 8 + EDITTEXT IDC_PICKICONDLG_EDIT, 10, 20, 160, 14, WS_VISIBLE | WS_CHILD | WS_TABSTOP | ES_AUTOHSCROLL | ES_LEFT + PUSHBUTTON "&Change...", IDC_PICKICONDLG_CHANGE, 171, 20, 49, 14, WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON + LTEXT "List of the icons in the file, please &select:", IDC_PICKICONDLG_LABELICONS, 10, 39, 210, 9 + CONTROL "", IDC_PICKICONDLG_ICONS, "SysListView32", LVS_ICON | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_AUTOARRANGE | LVS_ALIGNLEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 10, 49, 210, 115 + DEFPUSHBUTTON "OK", IDOK, 116, 170, 50, 14, WS_VISIBLE | WS_CHILD | WS_TABSTOP | BS_DEFPUSHBUTTON + PUSHBUTTON "Cancel", IDCANCEL, 170, 170, 50, 14, WS_VISIBLE | WS_CHILD | WS_TABSTOP +END + + SHBRSFORFOLDER_MSGBOX DIALOG 15, 40, 190, 195 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK CAPTION "Browse for Folder" diff --git a/dlls/shell32/shresdef.h b/dlls/shell32/shresdef.h index deabe568022..d1862cb9bb1 100644 --- a/dlls/shell32/shresdef.h +++ b/dlls/shell32/shresdef.h @@ -156,6 +156,8 @@ /* Note: this string is referenced from the registry*/ #define IDS_RECYCLEBIN_FOLDER_NAME 8964
+#define IDD_PICKICONDLG 7 + /* Properties dialog */ #define IDD_FILE_PROPERTIES 8 #define IDD_FOLDER_PROPERTIES 9 @@ -397,6 +399,12 @@ FIXME: Need to add them, but for now just let them use the same: searching.avi #define IDC_ABOUT_STATIC_TEXT2 101 #define IDC_ABOUT_STATIC_TEXT3 102
+#define IDC_PICKICONDLG_LABELPATH 1001 +#define IDC_PICKICONDLG_EDIT 1002 +#define IDC_PICKICONDLG_CHANGE 1003 +#define IDC_PICKICONDLG_LABELICONS 1004 +#define IDC_PICKICONDLG_ICONS 1005 + /* run dialog */ #define IDC_RUNDLG_DESCRIPTION 12289 #define IDC_RUNDLG_BROWSE 12288
From: Matthias Zorn matthias0178@gmail.com
--- dlls/shell32/shell32.rc | 12 ++++++++++++ dlls/shell32/shresdef.h | 10 ++++++++++ 2 files changed, 22 insertions(+)
diff --git a/dlls/shell32/shell32.rc b/dlls/shell32/shell32.rc index dcec622713c..4f38027b187 100644 --- a/dlls/shell32/shell32.rc +++ b/dlls/shell32/shell32.rc @@ -269,6 +269,18 @@ License along with Wine; if not, write to the Free Software \ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA." }
+STRINGTABLE +{ + IDS_PID_ICONFILEEXTENSIONS "Files containing icons (*.ico;*.dll;*.exe)\0*.ico;*.dll;*.exe\0All files (*.*)\0*.*\0\0" + IDS_PID_DIALOGCOULDNOTBEDISPLAYED "The 'Change Icon' dialog could not be displayed because:\r\n%1" + IDS_PID_FILEDOESNOTEXIST "The file '%1' does not exist." + IDS_PID_PROCESSINGFAILURE "The 'Change Icon' dialog module failed to process some data successfully because the following error occurred:\r\n%1" + IDS_PID_FILENOICONS "The file\r\n'%1'\r\ndoes not contain any icons." + IDS_PID_ICONSPARTLYLOADED "Only %1 of %2 icons could be loaded successfully from the file\r\n'%3'." + IDS_PID_CHANGEICONPROBLEM "Change Icon Problem" +} + + IDD_PICKICONDLG DIALOG 0, 0, 230, 192 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Change Icon" diff --git a/dlls/shell32/shresdef.h b/dlls/shell32/shresdef.h index d1862cb9bb1..49eb0b29f4f 100644 --- a/dlls/shell32/shresdef.h +++ b/dlls/shell32/shresdef.h @@ -101,6 +101,14 @@ #define IDS_DOCUMENTS 95 #define IDS_DOWNLOADS 96
+#define IDS_PID_ICONFILEEXTENSIONS 100 +#define IDS_PID_DIALOGCOULDNOTBEDISPLAYED 101 +#define IDS_PID_FILEDOESNOTEXIST 102 +#define IDS_PID_PROCESSINGFAILURE 103 +#define IDS_PID_FILENOICONS 104 +#define IDS_PID_ICONSPARTLYLOADED 105 +#define IDS_PID_CHANGEICONPROBLEM 106 + #define IDS_CREATEFOLDER_DENIED 128 #define IDS_CREATEFOLDER_CAPTION 129 #define IDS_DELETEITEM_CAPTION 130 @@ -399,12 +407,14 @@ FIXME: Need to add them, but for now just let them use the same: searching.avi #define IDC_ABOUT_STATIC_TEXT2 101 #define IDC_ABOUT_STATIC_TEXT3 102
+/* PickIconDlg dialog */ #define IDC_PICKICONDLG_LABELPATH 1001 #define IDC_PICKICONDLG_EDIT 1002 #define IDC_PICKICONDLG_CHANGE 1003 #define IDC_PICKICONDLG_LABELICONS 1004 #define IDC_PICKICONDLG_ICONS 1005
+ /* run dialog */ #define IDC_RUNDLG_DESCRIPTION 12289 #define IDC_RUNDLG_BROWSE 12288
From: Matthias Zorn matthias0178@gmail.com
--- dlls/shell32/dialogs.c | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+)
diff --git a/dlls/shell32/dialogs.c b/dlls/shell32/dialogs.c index 665c7093953..0a3204d9fec 100644 --- a/dlls/shell32/dialogs.c +++ b/dlls/shell32/dialogs.c @@ -72,6 +72,53 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell); static INT_PTR CALLBACK RunDlgProc (HWND, UINT, WPARAM, LPARAM) ; static void FillList (HWND, char *, BOOL) ;
+enum enumActionResult { eDoneSuccessfullyWithAcceptableConfirmation, eDoneSuccessfully, + eNotDoneNoError, eNotDoneErrorNotSerious, eNotDoneSeriousError }; + +static const WCHAR extended_length_path_prefix[] = { '\', '\', '?', '\', 0 }; +static const WCHAR system_root_var[] = { '%', 'S', 'y', 's', 't', 'e', 'm', 'R', 'o', + 'o', 't', '%', 0 }; +static const WCHAR shell32_dll_file_name[] = { 'S', 'H', 'E', 'L', 'L', '3', '2', + '.', 'd', 'l', 'l', 0 }; +static const WCHAR file_extension_ico[] = { '.', 'i', 'c', 'o', 0 }; +static const WCHAR backslash_text[] = { '\', 0 }; +static const WCHAR mask_integer[] = { '%', 'i', 0 }; +static const WCHAR trim_chars[] = { '"', '\t', ' ', 0 }; +static const WCHAR mask_s[] = { '%', 's', 0 }; + +struct tagIconNamesStruct +{ + union + { + INT index; + WCHAR *name; + } iconReferenceUnion; + BOOL icon_reference_to_index; + INT image_list_index; + struct tagIconNamesStruct *next; +}; + + +struct tagIconDialogStruct +{ + HWND parent_of_pick_icon_dialog; + WCHAR *path_filename_allocated; + UINT path_filename_max_chars; + UINT new_path_filename_max_length; + BOOL path_filename_changed_without_data_update; + BOOL bad_input_error_message_showed; + INT icon_index; + DWORD error_code; + BOOL ignore_notifications; + BOOL is_no_icon_selected_ok; + struct tagIconNamesStruct *first, *last; +}; + + +static BOOL PickIconDlg_ErrorCodeMeansSeriousError(DWORD error_code) +{ + return (error_code == ERROR_OUTOFMEMORY) || (error_code == ERROR_INTERNAL_ERROR); +}
/************************************************************************* * PickIconDlg [SHELL32.62]