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
);