gphoto2.ds: add preview button and ability to disable import GUI

Lei Zhang thestig at google.com
Thu Aug 23 02:45:17 CDT 2007


Hi,

Following the discussion on the camera import UI removal patch, I have
implemented the following enhancements to the import UI instead:

- A button to get the thumbnails from the camera, instead of grabbing
them automatically
- A checkbox that disables the UI. For future sessions, all pictures
are imported automatically
-------------- next part --------------
From fb3ee27296c7c57b0e56eea4669f9a287af0c1dd Mon Sep 17 00:00:00 2001
From: Lei Zhang <thestig at google.com>
Date: Thu, 23 Aug 2007 00:34:48 -0700
Subject: [PATCH] gphoto2.ds: add preview button and ability to disable import GUI
---
 dlls/gphoto2.ds/Makefile.in   |    2 -
 dlls/gphoto2.ds/gphoto2_De.rc |    8 ++-
 dlls/gphoto2.ds/gphoto2_En.rc |    8 ++-
 dlls/gphoto2.ds/gphoto2_Fr.rc |    8 ++-
 dlls/gphoto2.ds/gphoto2_Ko.rc |    8 ++-
 dlls/gphoto2.ds/gphoto2_Nl.rc |    8 ++-
 dlls/gphoto2.ds/gphoto2_No.rc |    8 ++-
 dlls/gphoto2.ds/gphoto2_Pl.rc |    8 ++-
 dlls/gphoto2.ds/resource.h    |    3 +
 dlls/gphoto2.ds/ui.c          |  103 ++++++++++++++++++++++++++++-------------
 10 files changed, 109 insertions(+), 55 deletions(-)

diff --git a/dlls/gphoto2.ds/Makefile.in b/dlls/gphoto2.ds/Makefile.in
index 042cbc3..ae83714 100644
--- a/dlls/gphoto2.ds/Makefile.in
+++ b/dlls/gphoto2.ds/Makefile.in
@@ -3,7 +3,7 @@ TOPOBJDIR = ../..
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
 MODULE    = gphoto2.ds
-IMPORTS   = comctl32 user32 gdi32 kernel32 ntdll
+IMPORTS   = comctl32 user32 gdi32 kernel32 ntdll advapi32
 EXTRALIBS = @GPHOTO2LIBS@
 EXTRAINCL = @GPHOTO2INCL@
 
diff --git a/dlls/gphoto2.ds/gphoto2_De.rc b/dlls/gphoto2.ds/gphoto2_De.rc
index 000f3e3..ee17d6f 100644
--- a/dlls/gphoto2.ds/gphoto2_De.rc
+++ b/dlls/gphoto2.ds/gphoto2_De.rc
@@ -29,9 +29,11 @@ FONT 8, "MS Sans Serif"
 BEGIN
 	CONTROL         "List1",IDC_LIST1,"SysListView32", LVS_ICON | WS_BORDER |
 WS_TABSTOP,7,7,358,229
-    DEFPUSHBUTTON   "Gew?hlte importieren",IDC_IMPORT,225,252,56,14
-    PUSHBUTTON      "Alle importieren",IDC_IMPORTALL,7,252,52,14
-    PUSHBUTTON      "Beenden",IDC_EXIT,295,252,50,14
+    DEFPUSHBUTTON   "Gew?hlte importieren",IDC_IMPORT,152,252,72,14
+    PUSHBUTTON      "Preview",IDC_FETCH,7,252,64,14
+    PUSHBUTTON      "Alle importieren",IDC_IMPORTALL,80,252,64,14
+    CONTROL         "Skip This Dialog",IDC_SKIP,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,230,252,76,14
+    PUSHBUTTON      "Beenden",IDC_EXIT,315,252,50,14
 END
 
 IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 186, 46
diff --git a/dlls/gphoto2.ds/gphoto2_En.rc b/dlls/gphoto2.ds/gphoto2_En.rc
index 8b3b479..793bfa4 100644
--- a/dlls/gphoto2.ds/gphoto2_En.rc
+++ b/dlls/gphoto2.ds/gphoto2_En.rc
@@ -29,9 +29,11 @@ FONT 8, "MS Sans Serif"
 BEGIN
 	CONTROL         "List1",IDC_LIST1,"SysListView32", LVS_ICON | WS_BORDER |
 WS_TABSTOP,7,7,358,229
-    DEFPUSHBUTTON   "Import Selected",IDC_IMPORT,225,252,56,14
-    PUSHBUTTON      "Import All",IDC_IMPORTALL,7,252,52,14
-    PUSHBUTTON      "Exit",IDC_EXIT,295,252,50,14
+    DEFPUSHBUTTON   "Import Selected",IDC_IMPORT,152,252,72,14
+    PUSHBUTTON      "Preview",IDC_FETCH,7,252,64,14
+    PUSHBUTTON      "Import All",IDC_IMPORTALL,80,252,64,14
+    CONTROL         "Skip This Dialog",IDC_SKIP,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,230,252,76,14
+    PUSHBUTTON      "Exit",IDC_EXIT,315,252,50,14
 END
 
 IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 186, 46
diff --git a/dlls/gphoto2.ds/gphoto2_Fr.rc b/dlls/gphoto2.ds/gphoto2_Fr.rc
index c8a53be..2645fdf 100644
--- a/dlls/gphoto2.ds/gphoto2_Fr.rc
+++ b/dlls/gphoto2.ds/gphoto2_Fr.rc
@@ -29,9 +29,11 @@ FONT 8, "MS Sans Serif"
 BEGIN
 	CONTROL         "List1",IDC_LIST1,"SysListView32", LVS_ICON | WS_BORDER |
 WS_TABSTOP,7,7,358,229
-    DEFPUSHBUTTON   "Importer la s?lection",IDC_IMPORT,225,252,56,14
-    PUSHBUTTON      "Importer tous",IDC_IMPORTALL,7,252,52,14
-    PUSHBUTTON      "Fermer",IDC_EXIT,295,252,50,14
+    DEFPUSHBUTTON   "Importer la s?lection",IDC_IMPORT,152,252,72,14
+    PUSHBUTTON      "Preview",IDC_FETCH,7,252,64,14
+    PUSHBUTTON      "Importer tous",IDC_IMPORTALL,80,252,64,14
+    CONTROL         "Skip This Dialog",IDC_SKIP,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,230,252,76,14
+    PUSHBUTTON      "Fermer",IDC_EXIT,315,252,50,14
 END
 
 IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 186, 46
diff --git a/dlls/gphoto2.ds/gphoto2_Ko.rc b/dlls/gphoto2.ds/gphoto2_Ko.rc
index a486ce8..daaf24c 100644
--- a/dlls/gphoto2.ds/gphoto2_Ko.rc
+++ b/dlls/gphoto2.ds/gphoto2_Ko.rc
@@ -30,9 +30,11 @@ FONT 8, "MS Sans Serif"
 BEGIN
 	CONTROL         "List1",IDC_LIST1,"SysListView32", LVS_ICON | WS_BORDER |
 WS_TABSTOP,7,7,358,229
-    DEFPUSHBUTTON   "?????? ???? ????????",IDC_IMPORT,225,252,56,14
-    PUSHBUTTON      "???? ????????",IDC_IMPORTALL,7,252,52,14
-    PUSHBUTTON      "??????",IDC_EXIT,295,252,50,14
+    DEFPUSHBUTTON   "?????? ???? ????????",IDC_IMPORT,152,252,72,14
+    PUSHBUTTON      "Preview",IDC_FETCH,7,252,64,14
+    PUSHBUTTON      "???? ????????",IDC_IMPORTALL,80,252,64,14
+    CONTROL         "Skip This Dialog",IDC_SKIP,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,230,252,76,14
+    PUSHBUTTON      "??????",IDC_EXIT,315,252,50,14
 END
 
 IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 186, 46
diff --git a/dlls/gphoto2.ds/gphoto2_Nl.rc b/dlls/gphoto2.ds/gphoto2_Nl.rc
index 805ce49..fe8c006 100644
--- a/dlls/gphoto2.ds/gphoto2_Nl.rc
+++ b/dlls/gphoto2.ds/gphoto2_Nl.rc
@@ -29,9 +29,11 @@ FONT 8, "MS Sans Serif"
 BEGIN
 	CONTROL         "List1",IDC_LIST1,"SysListView32", LVS_ICON | WS_BORDER |
 WS_TABSTOP,7,7,358,229
-    DEFPUSHBUTTON   "Importeer geselecteerde bestanden",IDC_IMPORT,225,252,56,14
-    PUSHBUTTON      "Importeer alles",IDC_IMPORTALL,7,252,52,14
-    PUSHBUTTON      "Afsluiten",IDC_EXIT,295,252,50,14
+    DEFPUSHBUTTON   "Importeer geselecteerde bestanden",IDC_IMPORT,120,252,120,14
+    PUSHBUTTON      "Preview",IDC_FETCH,7,252,48,14
+    PUSHBUTTON      "Importeer alles",IDC_IMPORTALL,60,252,56,14
+    CONTROL         "Skip This Dialog",IDC_SKIP,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,244,252,76,14
+    PUSHBUTTON      "Afsluiten",IDC_EXIT,315,252,50,14
 END
 
 IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 186, 46
diff --git a/dlls/gphoto2.ds/gphoto2_No.rc b/dlls/gphoto2.ds/gphoto2_No.rc
index a5c5ad0..f29beb2 100644
--- a/dlls/gphoto2.ds/gphoto2_No.rc
+++ b/dlls/gphoto2.ds/gphoto2_No.rc
@@ -29,9 +29,11 @@ FONT 8, "MS Sans Serif"
 BEGIN
 	CONTROL         "List1",IDC_LIST1,"SysListView32", LVS_ICON | WS_BORDER |
 WS_TABSTOP,7,7,358,229
-    DEFPUSHBUTTON   "Importer valgte",IDC_IMPORT,225,252,56,14
-    PUSHBUTTON      "Importer alle",IDC_IMPORTALL,7,252,52,14
-    PUSHBUTTON      "Avslutt",IDC_EXIT,295,252,50,14
+    DEFPUSHBUTTON   "Importer valgte",IDC_IMPORT,152,252,72,14
+    PUSHBUTTON      "Preview",IDC_FETCH,7,252,64,14
+    PUSHBUTTON      "Importer alle",IDC_IMPORTALL,80,252,64,14
+    CONTROL         "Skip This Dialog",IDC_SKIP,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,230,252,76,14
+    PUSHBUTTON      "Avslutt",IDC_EXIT,315,252,50,14
 END
 
 IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 186, 46
diff --git a/dlls/gphoto2.ds/gphoto2_Pl.rc b/dlls/gphoto2.ds/gphoto2_Pl.rc
index c95eb20..e8657af 100644
--- a/dlls/gphoto2.ds/gphoto2_Pl.rc
+++ b/dlls/gphoto2.ds/gphoto2_Pl.rc
@@ -30,9 +30,11 @@ FONT 8, "MS Sans Serif"
 BEGIN
 	CONTROL         "List1",IDC_LIST1,"SysListView32", LVS_ICON | WS_BORDER |
 WS_TABSTOP,7,7,358,229
-    DEFPUSHBUTTON   "Skopiuj wybrane",IDC_IMPORT,205,252,76,14
-    PUSHBUTTON      "Skopiuj wszystkie",IDC_IMPORTALL,7,252,72,14
-    PUSHBUTTON      "Zako?cz",IDC_EXIT,295,252,50,14
+    DEFPUSHBUTTON   "Skopiuj wybrane",IDC_IMPORT,152,252,72,14
+    PUSHBUTTON      "Preview",IDC_FETCH,7,252,64,14
+    PUSHBUTTON      "Skopiuj wszystkie",IDC_IMPORTALL,80,252,64,14
+    CONTROL         "Skip This Dialog",IDC_SKIP,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,230,252,76,14
+    PUSHBUTTON      "Zako?cz",IDC_EXIT,315,252,50,14
 END
 
 IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 186, 46
diff --git a/dlls/gphoto2.ds/resource.h b/dlls/gphoto2.ds/resource.h
index d972978..d51d604 100644
--- a/dlls/gphoto2.ds/resource.h
+++ b/dlls/gphoto2.ds/resource.h
@@ -28,3 +28,6 @@ #define IDC_IMPORT                      
 #define IDC_IMPORTALL					1002
 #define IDC_EXIT                        1003
 #define IDC_BITMAP						1004
+#define IDC_FETCH						1005
+#define IDC_SKIP						1006
+
diff --git a/dlls/gphoto2.ds/ui.c b/dlls/gphoto2.ds/ui.c
index e709984..2c4950d 100644
--- a/dlls/gphoto2.ds/ui.c
+++ b/dlls/gphoto2.ds/ui.c
@@ -31,6 +31,7 @@ #include "winbase.h"
 #include "winuser.h"
 #include "winnls.h"
 #include "wingdi.h"
+#include "winreg.h"
 #include "commctrl.h"
 #include "prsht.h"
 #include "twain.h"
@@ -38,6 +39,9 @@ #include "gphoto2_i.h"
 #include "wine/debug.h"
 #include "resource.h"
 
+LPCSTR settings_key = "Software\\Wine\\Gphoto2";
+LPCSTR settings_value = "SkipUI";
+static BOOL disable_dialog;
 static HBITMAP static_bitmap;
 
 static INT_PTR CALLBACK ConnectingProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
@@ -45,6 +49,43 @@ static INT_PTR CALLBACK ConnectingProc(H
 	return FALSE;
 }
 
+static void on_disable_dialog_clicked(HWND dialog)
+{
+    if (IsDlgButtonChecked(dialog, IDC_SKIP) == BST_CHECKED)
+        disable_dialog = TRUE;
+    else
+        disable_dialog = FALSE;
+}
+
+static void UI_EndDialog(HWND hwnd, INT_PTR rc)
+{
+    if (disable_dialog)
+    {
+        HKEY key;
+        const DWORD data = 1;
+        if (RegCreateKeyExA(HKEY_CURRENT_USER, settings_key, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &key, NULL) == ERROR_SUCCESS)
+        {
+            RegSetValueExA(key, settings_value, 0, REG_DWORD, (const BYTE *)&data, sizeof(DWORD));
+            RegCloseKey(key);
+        }
+    }
+    EndDialog(hwnd, rc);
+}
+
+static int GetAllImages()
+{
+    struct gphoto2_file *file;
+    int has_images = 0;
+
+    LIST_FOR_EACH_ENTRY( file, &activeDS.files, struct gphoto2_file, entry)
+    {
+        if (strstr(file->filename,".JPG") || strstr(file->filename,".jpg")) 
+            file->download = TRUE;
+            has_images = 1;
+    }
+    return has_images;
+}
+ 
 static void PopulateListView(HWND List)
 {
 	struct gphoto2_file *file;
@@ -120,14 +161,8 @@ static INT_PTR CALLBACK DialogProc(HWND 
 	{
 		case WM_INITDIALOG:
 			{
-				HIMAGELIST ilist = 0;
-				HWND list = GetDlgItem(hwnd,IDC_LIST1);
+				disable_dialog = FALSE;
 				EnableWindow(GetDlgItem(hwnd,IDC_IMPORT),FALSE);
-
-				PopulateImageList(&ilist,list);
-
-				SendMessageA(list, LVM_SETIMAGELIST,LVSIL_NORMAL,(LPARAM)ilist);
-				PopulateListView(list);
 			}
 			break;
 		case WM_NOTIFY:
@@ -144,8 +179,11 @@ static INT_PTR CALLBACK DialogProc(HWND 
 		case WM_COMMAND:
 			switch LOWORD(wParam)
 			{
+				case IDC_SKIP:
+					on_disable_dialog_clicked(hwnd);
+					break;
 				case IDC_EXIT:
-					EndDialog(hwnd,0);
+					UI_EndDialog(hwnd,0);
 					break;
 				case IDC_IMPORT:
 					{
@@ -155,7 +193,7 @@ static INT_PTR CALLBACK DialogProc(HWND 
 
 						if (count ==0)
 						{
-							EndDialog(hwnd,0);
+							UI_EndDialog(hwnd,0);
 							return FALSE;
 						}
 
@@ -184,38 +222,28 @@ static INT_PTR CALLBACK DialogProc(HWND 
 							}
 						}
 
-						EndDialog(hwnd,1);
+						UI_EndDialog(hwnd,1);
 					}
 					break;
 				case IDC_IMPORTALL:
 					{
-						HWND list = GetDlgItem(hwnd,IDC_LIST1);
-						int count = SendMessageA(list,LVM_GETITEMCOUNT,0,0);
-						int i;
-
-						if (count ==0)
+						if (!GetAllImages())
 						{
-							EndDialog(hwnd,0);
+							UI_EndDialog(hwnd,0);
 							return FALSE;
 						}
+						UI_EndDialog(hwnd,1);
+					}
+					break;
+				case IDC_FETCH:
+					{
+						HIMAGELIST ilist = 0;
+						HWND list = GetDlgItem(hwnd,IDC_LIST1);
+						PopulateImageList(&ilist,list);
 
-						for ( i = 0; i < count; i++)
-						{
-							LVITEMA item;
-							struct gphoto2_file *file;
-
-
-							item.mask = LVIF_PARAM;
-							item.iItem = i;
-							item.iSubItem = 0;
-
-							SendMessageA(list,LVM_GETITEMA,0,(LPARAM)&item);
-
-							file = (struct gphoto2_file*)item.lParam;
-							file->download = TRUE;
-						}
-
-						EndDialog(hwnd,1);
+						SendMessageA(list, LVM_SETIMAGELIST,LVSIL_NORMAL,(LPARAM)ilist);
+						PopulateListView(list);
+						EnableWindow(GetDlgItem(hwnd,IDC_FETCH),FALSE);
 					}
 					break;
 			}
@@ -226,6 +254,15 @@ static INT_PTR CALLBACK DialogProc(HWND 
 
 BOOL DoCameraUI(void)
 {
+	HKEY key;
+	DWORD data = 0;
+	DWORD size = sizeof(data);
+	if (RegOpenKeyExA(HKEY_CURRENT_USER, settings_key, 0, KEY_READ, &key) == ERROR_SUCCESS) {
+		RegQueryValueExA(key, settings_value, NULL, NULL, (LPBYTE) &data, &size);
+		RegCloseKey(key);
+		if (data)
+			return GetAllImages();
+	}
 	return DialogBoxW(GPHOTO2_instance,
 			(LPWSTR)MAKEINTRESOURCE(IDD_CAMERAUI),NULL, DialogProc);
 }
-- 
1.4.1


More information about the wine-patches mailing list