Commit 2d504fcfe926903b2d632d2dfcae7d8f4b61753a

Authored by Perry Werneck
1 parent 83b7128d

Experimentando com o diálogo padrão do windows.

Showing 2 changed files with 61 additions and 29 deletions   Show diff stats
src/pw3270/Makefile.in
@@ -66,7 +66,8 @@ LIB_SOURCES= window.c actions.c fonts.c dialog.c hostdialog.c print.c colors.c \ @@ -66,7 +66,8 @@ LIB_SOURCES= window.c actions.c fonts.c dialog.c hostdialog.c print.c colors.c \
66 $(foreach SRC, $(UI_PARSER_SRC), uiparser/$(SRC)) \ 66 $(foreach SRC, $(UI_PARSER_SRC), uiparser/$(SRC)) \
67 $(foreach SRC, $(V3270_SRC), v3270/$(SRC)) \ 67 $(foreach SRC, $(V3270_SRC), v3270/$(SRC)) \
68 $(foreach SRC, $(COMMON_SRC), common/$(SRC)) \ 68 $(foreach SRC, $(COMMON_SRC), common/$(SRC)) \
69 - filetransfer.c ft/ftdialog.c ft/ftprogress.c 69 + filetransfer.c ft/ftdialog.c ft/ftprogress.c \
  70 + ft/browse.c
70 71
71 DEPENDS=*.h common/*.h uiparser/*.h v3270/*.h $(GLOBAL_DEPS) 72 DEPENDS=*.h common/*.h uiparser/*.h v3270/*.h $(GLOBAL_DEPS)
72 73
src/pw3270/ft/browse.c
@@ -36,58 +36,89 @@ @@ -36,58 +36,89 @@
36 /*---[ Implement ]----------------------------------------------------------------------------------*/ 36 /*---[ Implement ]----------------------------------------------------------------------------------*/
37 37
38 #ifdef WIN32 38 #ifdef WIN32
  39 +
  40 +struct file
  41 +{
  42 + OPENFILENAME ofn;
  43 + char szName[260]; // buffer for file name
  44 + int mode;
  45 + BOOL ok;
  46 +};
  47 +
  48 +static gpointer select_file(struct file *fl)
  49 +{
  50 + if(fl->mode == 1)
  51 + {
  52 + fl->ok = GetSaveFileName(&fl->ofn);
  53 + }
  54 + else
  55 + {
  56 + fl->ok = GetOpenFileName(&fl->ofn);
  57 + }
  58 +
  59 + fl->mode = 3;
  60 +
  61 + return 0;
  62 +}
  63 +
39 void browse_file(GtkButton *button,v3270FTD *parent) 64 void browse_file(GtkButton *button,v3270FTD *parent)
40 { 65 {
41 - char szFile[260]; // buffer for file name 66 + GThread * thd;
  67 + struct file fl;
42 GdkWindow * win = gtk_widget_get_window(GTK_WIDGET(parent)); 68 GdkWindow * win = gtk_widget_get_window(GTK_WIDGET(parent));
43 69
44 gtk_widget_set_sensitive(GTK_WIDGET(parent),FALSE); 70 gtk_widget_set_sensitive(GTK_WIDGET(parent),FALSE);
45 71
46 - OPENFILENAME ofn;  
47 -  
48 - memset(&ofn,0,sizeof(ofn));  
49 - ofn.lStructSize = sizeof(ofn);  
50 - ofn.hwndOwner = GDK_WINDOW_HWND(win);  
51 - ofn.lpstrFile = szFile; 72 + memset(&fl,0,sizeof(fl));
  73 + fl.ofn.lStructSize = sizeof(fl.ofn);
  74 + fl.ofn.hwndOwner = GDK_WINDOW_HWND(win);
  75 + fl.ofn.lpstrFile = fl.szName;
52 76
53 // Set lpstrFile[0] to '\0' so that GetOpenFileName does not 77 // Set lpstrFile[0] to '\0' so that GetOpenFileName does not
54 // use the contents of szFile to initialize itself. 78 // use the contents of szFile to initialize itself.
55 - ofn.lpstrFile[0] = '\0'; 79 + fl.ofn.lpstrFile[0] = '\0';
  80 +
  81 + fl.ofn.nMaxFile = sizeof(fl.szName);
  82 + fl.ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
  83 + fl.ofn.nFilterIndex = 1;
  84 + fl.ofn.nMaxFileTitle = 0;
  85 + fl.ofn.lpstrInitialDir = NULL;
56 86
57 - ofn.nMaxFile = sizeof(szFile);  
58 - ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";  
59 - ofn.nFilterIndex = 1;  
60 - ofn.nMaxFileTitle = 0;  
61 - ofn.lpstrInitialDir = NULL; 87 + // Guarda o valor atual
  88 + strncpy(fl.szName,gtk_entry_get_text(GTK_ENTRY(parent->filename[FILENAME_LOCAL])),fl.ofn.nMaxFile);
62 89
63 - if(parent->options & LIB3270_FT_OPTION_RECEIVE) 90 + fl.mode = (parent->options & LIB3270_FT_OPTION_RECEIVE) ? 1 : 0;
  91 +
  92 + if(fl.mode == 1)
64 { 93 {
65 // Receber arquivo 94 // Receber arquivo
66 // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646839(v=vs.85).aspx 95 // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646839(v=vs.85).aspx
67 // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646829(v=vs.85).aspx#open_file 96 // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646829(v=vs.85).aspx#open_file
68 97
69 -// ofn.lpstrFileTitle = _( "Select file to receive" );  
70 - ofn.Flags = OFN_OVERWRITEPROMPT;  
71 -  
72 - if(GetSaveFileName(&ofn)==TRUE)  
73 - {  
74 - gtk_entry_set_text(GTK_ENTRY(parent->filename[FILENAME_LOCAL]),szFile);  
75 - } 98 +// fl.ofn.lpstrFileTitle = _( "Select file to receive" );
  99 + fl.ofn.Flags = OFN_OVERWRITEPROMPT;
76 100
77 } 101 }
78 else 102 else
79 { 103 {
80 // Enviar arquivo 104 // Enviar arquivo
81 // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646928(v=vs.85).aspx 105 // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646928(v=vs.85).aspx
82 - OPENFILENAME ofn; 106 +// fl.ofn.lpstrFileTitle = _( "Select file to send" );
  107 + fl.ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
83 108
84 -// ofn.lpstrFileTitle = _( "Select file to send" );  
85 - ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; 109 + }
86 110
87 - if(GetOpenFileName(&ofn)==TRUE)  
88 - {  
89 - gtk_entry_set_text(GTK_ENTRY(parent->filename[FILENAME_LOCAL]),szFile);  
90 - } 111 + thd = g_thread_new("GetFileName",(GThreadFunc) select_file, &fl);
  112 +
  113 + while(fl.mode != 3) {
  114 + g_main_context_iteration(NULL,TRUE);
  115 + }
  116 +
  117 + g_thread_unref(thd);
  118 +
  119 + if(fl.ok)
  120 + {
  121 + gtk_entry_set_text(GTK_ENTRY(parent->filename[FILENAME_LOCAL]),fl.szName);
91 } 122 }
92 123
93 gtk_widget_set_sensitive(GTK_WIDGET(parent),TRUE); 124 gtk_widget_set_sensitive(GTK_WIDGET(parent),TRUE);