4 * Copyright 2006 CodeWeavers, Aric Stewart
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
27 #define NONAMELESSUNION
28 #define NONAMELESSSTRUCT
38 #include "gphoto2_i.h"
39 #include "wine/debug.h"
42 LPCSTR settings_key = "Software\\Wine\\Gphoto2";
43 LPCSTR settings_value = "SkipUI";
44 static BOOL disable_dialog;
45 static HBITMAP static_bitmap;
47 static INT_PTR CALLBACK ConnectingProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
52 static void on_disable_dialog_clicked(HWND dialog)
54 if (IsDlgButtonChecked(dialog, IDC_SKIP) == BST_CHECKED)
55 disable_dialog = TRUE;
57 disable_dialog = FALSE;
60 static void UI_EndDialog(HWND hwnd, INT_PTR rc)
66 if (RegCreateKeyExA(HKEY_CURRENT_USER, settings_key, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &key, NULL) == ERROR_SUCCESS)
68 RegSetValueExA(key, settings_value, 0, REG_DWORD, (const BYTE *)&data, sizeof(DWORD));
75 static int GetAllImages(void)
77 struct gphoto2_file *file;
80 LIST_FOR_EACH_ENTRY( file, &activeDS.files, struct gphoto2_file, entry)
82 if (strstr(file->filename,".JPG") || strstr(file->filename,".jpg"))
84 file->download = TRUE;
91 static void PopulateListView(HWND List)
93 struct gphoto2_file *file;
97 LIST_FOR_EACH_ENTRY( file, &activeDS.files, struct gphoto2_file, entry)
99 if (strstr(file->filename,".JPG") || strstr(file->filename,".jpg"))
101 item.mask = LVIF_PARAM | LVIF_TEXT | LVIF_IMAGE ;
104 item.pszText = file->filename;
106 item.lParam= (LPARAM)file;
108 SendMessageA(List, LVM_INSERTITEMA,0,(LPARAM)&item);
114 static void PopulateImageList(HIMAGELIST *iList, HWND list)
116 struct gphoto2_file *file;
118 HWND progress_dialog;
121 CreateDialogW(GPHOTO2_instance,(LPWSTR)MAKEINTRESOURCE(IDD_CONNECTING),
122 NULL, ConnectingProc);
124 LIST_FOR_EACH_ENTRY( file, &activeDS.files, struct gphoto2_file, entry)
126 if (strstr(file->filename,".JPG") || strstr(file->filename,".jpg"))
132 _get_gphoto2_file_as_DIB(file->folder, file->filename,
133 GP_FILE_TYPE_PREVIEW, 0, &bitmap);
137 GetObjectA(bitmap,sizeof(BITMAP),(LPVOID)&bmpInfo);
141 *iList = ImageList_Create(bmpInfo.bmWidth,
142 bmpInfo.bmHeight,ILC_COLOR24, 10,10);
144 SendMessageW(list, LVM_SETICONSPACING, 0,
145 MAKELONG(bmpInfo.bmWidth+6, bmpInfo.bmHeight+15) ); }
147 rc = ImageList_Add(*iList, bitmap, 0);
149 DeleteObject(static_bitmap);
150 static_bitmap = bitmap;
151 SendMessageW(GetDlgItem(progress_dialog,IDC_BITMAP),STM_SETIMAGE,
152 IMAGE_BITMAP, (LPARAM)static_bitmap);
153 RedrawWindow(progress_dialog,NULL,NULL,RDW_INTERNALPAINT|RDW_UPDATENOW|RDW_ALLCHILDREN);
156 EndDialog(progress_dialog,0);
160 static INT_PTR CALLBACK DialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
166 disable_dialog = FALSE;
167 EnableWindow(GetDlgItem(hwnd,IDC_IMPORT),FALSE);
171 if (((LPNMHDR)lParam)->code == LVN_ITEMCHANGED)
173 HWND list = GetDlgItem(hwnd,IDC_LIST1);
174 int count = SendMessageA(list,LVM_GETSELECTEDCOUNT,0,0);
176 EnableWindow(GetDlgItem(hwnd,IDC_IMPORT),TRUE);
178 EnableWindow(GetDlgItem(hwnd,IDC_IMPORT),FALSE);
182 switch LOWORD(wParam)
185 on_disable_dialog_clicked(hwnd);
188 UI_EndDialog(hwnd,0);
192 HWND list = GetDlgItem(hwnd,IDC_LIST1);
193 int count = SendMessageA(list,LVM_GETSELECTEDCOUNT,0,0);
198 UI_EndDialog(hwnd,0);
202 count = SendMessageA(list,LVM_GETITEMCOUNT,0,0);
203 for ( i = 0; i < count; i++)
205 INT state = 0x00000000;
207 state = SendMessageA(list,LVM_GETITEMSTATE,i,
213 struct gphoto2_file *file;
216 item.mask = LVIF_PARAM;
220 SendMessageA(list,LVM_GETITEMA,0,(LPARAM)&item);
222 file = (struct gphoto2_file*)item.lParam;
223 file->download = TRUE;
227 UI_EndDialog(hwnd,1);
234 UI_EndDialog(hwnd,0);
237 UI_EndDialog(hwnd,1);
242 HIMAGELIST ilist = 0;
243 HWND list = GetDlgItem(hwnd,IDC_LIST1);
244 PopulateImageList(&ilist,list);
246 SendMessageA(list, LVM_SETIMAGELIST,LVSIL_NORMAL,(LPARAM)ilist);
247 PopulateListView(list);
248 EnableWindow(GetDlgItem(hwnd,IDC_FETCH),FALSE);
257 BOOL DoCameraUI(void)
261 DWORD size = sizeof(data);
262 if (RegOpenKeyExA(HKEY_CURRENT_USER, settings_key, 0, KEY_READ, &key) == ERROR_SUCCESS) {
263 RegQueryValueExA(key, settings_value, NULL, NULL, (LPBYTE) &data, &size);
266 return GetAllImages();
268 return DialogBoxW(GPHOTO2_instance,
269 (LPWSTR)MAKEINTRESOURCE(IDD_CAMERAUI),NULL, DialogProc);
272 static INT_PTR CALLBACK ProgressProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
278 HWND TransferringDialogBox(HWND dialog, DWORD progress)
281 dialog = CreateDialogW(GPHOTO2_instance,
282 (LPWSTR)MAKEINTRESOURCE(IDD_DIALOG1), NULL, ProgressProc);
290 RedrawWindow(dialog,NULL,NULL,
291 RDW_INTERNALPAINT|RDW_UPDATENOW|RDW_ALLCHILDREN);