diff --git a/configure.ac b/configure.ac index c1299b1..eec2fce 100644 --- a/configure.ac +++ b/configure.ac @@ -149,6 +149,7 @@ case "$host" in PLUGINS="hllapi" APP_GUI_SRC="resources.rc" DLLPREFIX="" + LIBS="$LIBS -lcomdlg32" AC_CONFIG_FILES(nsi/header-$host_cpu-no-gtk.nsi) AC_CONFIG_FILES(nsi/header-$host_cpu.nsi) @@ -792,7 +793,7 @@ if test "_$OFFICE_HOME" == "_" ; then fi # Find types.rdb -AC_CHECK_FILE($OO_SDK_URE_HOME/share/misc/types.rdb,OO_TYPES=$OO_SDK_URE_HOME/share/misc/types.rdb,app_cv_office="no") +OO_TYPES=$OO_SDK_URE_HOME/share/misc/types.rdb # Set targets if test "$app_cv_office" == "yes" ; then diff --git a/src/pw3270/ft/browse.c b/src/pw3270/ft/browse.c new file mode 100644 index 0000000..9bb22d4 --- /dev/null +++ b/src/pw3270/ft/browse.c @@ -0,0 +1,125 @@ +/* + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a + * aplicativos mainframe. Registro no INPI sob o nome G3270. + * + * Copyright (C) <2008> + * + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela + * Free Software Foundation. + * + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para + * obter mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin + * St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Este programa está nomeado como browse.c e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + */ + + #include "private.h" + +#ifdef WIN32 + #include +#endif // WIN32 + +/*---[ Implement ]----------------------------------------------------------------------------------*/ + +#ifdef WIN32 +void browse_file(GtkButton *button,v3270FTD *parent) +{ + char szFile[260]; // buffer for file name + GdkWindow * win = gtk_widget_get_window(GTK_WIDGET(parent)); + + gtk_widget_set_sensitive(GTK_WIDGET(parent),FALSE); + + OPENFILENAME ofn; + + memset(&ofn,0,sizeof(ofn)); + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = GDK_WINDOW_HWND(win); + ofn.lpstrFile = szFile; + + // Set lpstrFile[0] to '\0' so that GetOpenFileName does not + // use the contents of szFile to initialize itself. + ofn.lpstrFile[0] = '\0'; + + ofn.nMaxFile = sizeof(szFile); + ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0"; + ofn.nFilterIndex = 1; + ofn.nMaxFileTitle = 0; + ofn.lpstrInitialDir = NULL; + + if(parent->options & LIB3270_FT_OPTION_RECEIVE) + { + // Receber arquivo + // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646839(v=vs.85).aspx + // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646829(v=vs.85).aspx#open_file + +// ofn.lpstrFileTitle = _( "Select file to receive" ); + ofn.Flags = OFN_OVERWRITEPROMPT; + + if(GetSaveFileName(&ofn)==TRUE) + { + gtk_entry_set_text(GTK_ENTRY(parent->filename[FILENAME_LOCAL]),szFile); + } + + } + else + { + // Enviar arquivo + // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646928(v=vs.85).aspx + OPENFILENAME ofn; + +// ofn.lpstrFileTitle = _( "Select file to send" ); + ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; + + if(GetOpenFileName(&ofn)==TRUE) + { + gtk_entry_set_text(GTK_ENTRY(parent->filename[FILENAME_LOCAL]),szFile); + } + } + + gtk_widget_set_sensitive(GTK_WIDGET(parent),TRUE); + +} +#else +void browse_file(GtkButton *button,v3270FTD *parent) +{ + gboolean recv = (parent->options & LIB3270_FT_OPTION_RECEIVE); + GtkWidget * dialog = gtk_file_chooser_dialog_new + ( + recv ? _( "Select file to receive" ) : _( "Select file to send" ), + GTK_WINDOW(parent), + GTK_FILE_CHOOSER_ACTION_OPEN, + _("_Cancel" ), GTK_RESPONSE_CANCEL, + recv ? _("_Save") : _("_Send"), GTK_RESPONSE_ACCEPT, + NULL + ); + + const gchar * current = gtk_entry_get_text(GTK_ENTRY(parent->filename[FILENAME_LOCAL])); + if(current && *current) + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),current); + + if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) + { + gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + gtk_entry_set_text(GTK_ENTRY(parent->filename[FILENAME_LOCAL]),filename); + g_free(filename); + } + + gtk_widget_destroy(dialog); + + +} +#endif // WIN32 diff --git a/src/pw3270/ft/private.h b/src/pw3270/ft/private.h new file mode 100644 index 0000000..fbbd8c0 --- /dev/null +++ b/src/pw3270/ft/private.h @@ -0,0 +1,92 @@ +/* + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a + * aplicativos mainframe. Registro no INPI sob o nome G3270. + * + * Copyright (C) <2008> + * + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela + * Free Software Foundation. + * + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para + * obter mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin + * St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Este programa está nomeado como private.h e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + */ + +#ifndef PRIVATE_H_INCLUDED + + #define PRIVATE_H_INCLUDED + + #include "v3270ft.h" + +/*--[ Widget definition ]----------------------------------------------------------------------------*/ + + enum _filename + { + FILENAME_LOCAL, + FILENAME_HOST, + + FILENAME_COUNT + }; + + enum _value + { + VALUE_LRECL, + VALUE_BLKSIZE, + VALUE_PRIMSPACE, + VALUE_SECSPACE, + VALUE_DFT, + + VALUE_COUNT + }; + + enum _button + { + BUTTON_ASCII, + BUTTON_CRLF, + BUTTON_APPEND, + BUTTON_REMAP, + + BUTTON_COUNT + }; + + struct _v3270FTD + { + GtkDialog parent; + GtkWidget * filename[FILENAME_COUNT]; /**< Filenames for the transfer */ + GtkWidget * units; /**< Units frame box */ + GtkWidget * ready; /**< Send/Save button */ + GtkToggleButton * button[BUTTON_COUNT]; /**< Buttons */ + GtkToggleButton * recfm[4]; /**< Record format buttons */ + GtkToggleButton * btnUnits[4]; /**< Unit buttons */ + GtkSpinButton * value[VALUE_COUNT]; + gboolean local; /**< TRUE if local filename is ok */ + gboolean remote; /**< TRUE if remote filename is ok */ + LIB3270_FT_OPTION options; + }; + + struct _v3270FTDClass + { + GtkDialogClass parent_class; + + int dummy; + }; + + G_GNUC_INTERNAL void browse_file(GtkButton *button,v3270FTD *parent); + + +#endif // PRIVATE_H_INCLUDED -- libgit2 0.21.2