From 891467e0aa734130bfaf5da3845a4327c25900e4 Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Sun, 1 Dec 2013 12:22:48 +0000 Subject: [PATCH] Implementando novos dialogos de transferencia de arquivos --- src/pw3270/ft/ft.cbp | 3 +++ src/pw3270/ft/ftdialog.c | 147 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------- src/pw3270/ft/ftprogress.c | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/pw3270/ft/testprogram.c | 16 +++++++++++++--- src/pw3270/ft/v3270ft.h | 25 +++++++++++++++++++++++-- 5 files changed, 251 insertions(+), 49 deletions(-) create mode 100644 src/pw3270/ft/ftprogress.c diff --git a/src/pw3270/ft/ft.cbp b/src/pw3270/ft/ft.cbp index 2a540b2..6dc1866 100644 --- a/src/pw3270/ft/ft.cbp +++ b/src/pw3270/ft/ft.cbp @@ -40,6 +40,9 @@ + + diff --git a/src/pw3270/ft/ftdialog.c b/src/pw3270/ft/ftdialog.c index 7c4014a..771ee50 100644 --- a/src/pw3270/ft/ftdialog.c +++ b/src/pw3270/ft/ftdialog.c @@ -54,7 +54,8 @@ { GtkDialog parent; GtkWidget * filename[FILENAME_COUNT]; /**< Filenames for the transfer */ - int value[VALUE_COUNT]; + GtkWidget * units; /**< Units frame box */ + GtkSpinButton * value[VALUE_COUNT]; LIB3270_FT_OPTION options; }; @@ -166,22 +167,6 @@ static GtkWidget * ftoption_new(v3270FTD *dialog, const struct ftoptions *opt) return GTK_WIDGET(frame); } -/* -http://stackoverflow.com/questions/16539127/gtkentry-change-text-on-user-input -void entry_insert(GtkEntryBuffer *buffer, guint position, gchar *chars, guint n_chars, gpointer user_data) -{ - -} -static void setup_numeric_entry(GtkEntry *entry) -{ - gtk_entry_set_max_length(entry,10); - gtk_entry_set_width_chars(entry,10); - gtk_entry_set_alignment(entry,1); - gtk_entry_set_input_purpose(entry,GTK_INPUT_PURPOSE_NUMBER); - g_signal_connect_after(G_OBJECT(entry), "insert-text", G_CALLBACK(entry_insert),NULL); -} -*/ - static GtkWidget * ftvalue_new(v3270FTD *dialog, GtkGrid *grid, int r, const struct ftvalues *val) { int f; @@ -190,20 +175,22 @@ static GtkWidget * ftvalue_new(v3270FTD *dialog, GtkGrid *grid, int r, const str { int col = (f&1)*2; int row = (f/2)+r; + int id = val[f].id; GtkWidget * label = gtk_label_new_with_mnemonic(gettext(val[f].label)); - GtkWidget * entry = GTK_WIDGET(gtk_spin_button_new_with_range(0,99999,1)); + + dialog->value[id] = GTK_SPIN_BUTTON(gtk_spin_button_new_with_range(0,99999,1)); gtk_widget_set_hexpand(GTK_WIDGET(label),TRUE); gtk_widget_set_tooltip_text(GTK_WIDGET(label),gettext(val[f].tooltip)); gtk_misc_set_alignment(GTK_MISC(label),0,0.5); - gtk_label_set_mnemonic_widget(GTK_LABEL(label),GTK_WIDGET(entry)); - gtk_widget_set_tooltip_text(GTK_WIDGET(entry),gettext(val[f].tooltip)); + gtk_label_set_mnemonic_widget(GTK_LABEL(label),GTK_WIDGET(dialog->value[id])); + gtk_widget_set_tooltip_text(GTK_WIDGET(dialog->value[id]),gettext(val[f].tooltip)); - g_object_set_data(G_OBJECT(entry),"cfg",(gpointer) &val[f]); + g_object_set_data(G_OBJECT(dialog->value[id]),"cfg",(gpointer) &val[f]); gtk_grid_attach(grid,GTK_WIDGET(label),col,row,1,1); - gtk_grid_attach(grid,GTK_WIDGET(entry),col+1,row,1,1); + gtk_grid_attach(grid,GTK_WIDGET(dialog->value[id]),col+1,row,1,1); } @@ -237,7 +224,7 @@ static GtkWidget * ftradio_new(v3270FTD *dialog, const gchar *title, const gchar return GTK_WIDGET(frame); } -GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) +GtkWidget * v3270_ft_dialog_new(LIB3270_FT_OPTION options) { v3270FTD *dialog = g_object_new(GTK_TYPE_V3270FTD, NULL); @@ -266,7 +253,12 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) gtk_grid_set_column_spacing(grid,5); gtk_grid_set_row_spacing(grid,5); +#if GTK_CHECK_VERSION(3,10,0) GtkButton * browse = GTK_BUTTON(gtk_button_new_from_icon_name("text-x-generic",GTK_ICON_SIZE_BUTTON)); +#else + GtkButton * browse = GTK_BUTTON(gtk_button_new_from_stock(GTK_STOCK_FILE)); +#endif // GTK_CHECK_VERSION + gtk_button_set_focus_on_click(browse,FALSE); gtk_widget_set_tooltip_text(GTK_WIDGET(browse),_("Select file")); g_signal_connect(G_OBJECT(browse),"clicked",G_CALLBACK(browse_file),dialog); @@ -308,7 +300,7 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) }, { LIB3270_FT_OPTION_REMAP, - N_("_Remap to ASCII Characters."), + N_("Re_map to ASCII Characters."), N_("Remap the text to ensure maximum compatibility between the workstation's character set and encoding and the host's EBCDIC code page.") }, { @@ -320,25 +312,19 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),ftoption_new(dialog,opt),FALSE,TRUE,2); - // Create values box - /* - static const struct ftvalues val[] = - { - { - VALUE_DFT, - N_( "DFT B_uffer size:" ), - N_( "Buffer size for DFT-mode transfers. Can range from 256 to 32768. Larger values give better performance, but some hosts may not be able to support them." ) - }, + // Create DFT + GtkBox * box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2)); + GtkWidget * label = gtk_label_new_with_mnemonic(_("DFT B_uffer size:")); + dialog->value[VALUE_DFT] = GTK_SPIN_BUTTON(gtk_spin_button_new_with_range(256,32768,1)); + gtk_misc_set_alignment(GTK_MISC(label),0,0.5); - { - 0, - NULL, - NULL - } - }; + gtk_label_set_mnemonic_widget(GTK_LABEL(label),GTK_WIDGET(dialog->value[VALUE_DFT])); + + gtk_box_pack_start(box,label,FALSE,TRUE,2); + gtk_box_pack_start(box,GTK_WIDGET(dialog->value[VALUE_DFT]),FALSE,TRUE,2); + + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),GTK_WIDGET(box),FALSE,TRUE,2); - // gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),ftvalue_new(dialog,val),FALSE,TRUE,2); - */ } else { @@ -378,7 +364,7 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) }, { LIB3270_FT_OPTION_REMAP, - N_("_Remap to EBCDIC Characters."), + N_("Re_map to EBCDIC Characters."), N_("Remap the text to ensure maximum compatibility between the workstation's character set and encoding and the host's EBCDIC code page.") }, { @@ -462,8 +448,10 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) } }; + dialog->units = ftradio_new(dialog,_("Space allocation units"),_("Specifies the units for the TSO host primary and secondary space options."),units); + gtk_grid_attach( grid, - ftradio_new(dialog,_("Space allocation units"),_("Specifies the units for the TSO host primary and secondary space options."),units), + dialog->units, 2,0,2,1 ); @@ -499,7 +487,7 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) { VALUE_DFT, N_( "DFT B_uffer size:" ), - N_( "Buffer size for DFT-mode transfers. Can range from 256 to 32768. Larger values give better performance, but some hosts may not be able to support them." ) + "" }, { @@ -513,8 +501,79 @@ GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options) gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),GTK_WIDGET(grid),FALSE,TRUE,2); + gtk_spin_button_set_range(dialog->value[VALUE_DFT],256,32768); } + gtk_widget_set_tooltip_text(GTK_WIDGET(dialog->value[VALUE_DFT]),_( "Buffer size for DFT-mode transfers. Can range from 256 to 32768. Larger values give better performance, but some hosts may not be able to support them.")); + gtk_spin_button_set_value(dialog->value[VALUE_DFT],4096); + + gtk_dialog_add_buttons(GTK_DIALOG(dialog), + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + (options & LIB3270_FT_OPTION_RECEIVE) != 0 ? GTK_STOCK_SAVE : GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, + NULL); + + gtk_widget_show_all(gtk_dialog_get_content_area(GTK_DIALOG(dialog))); + return GTK_WIDGET(dialog); } +void v3270_ft_dialog_set_host_filename(GtkWidget *widget, const gchar *name) +{ + g_return_if_fail(GTK_IS_V3270FTD(widget)); + gtk_entry_set_text(GTK_ENTRY(GTK_V3270FTD(widget)->filename[FILENAME_HOST]),name); +} + +void v3270_ft_dialog_set_local_filename(GtkWidget *widget, const gchar *name) +{ + g_return_if_fail(GTK_IS_V3270FTD(widget)); + gtk_entry_set_text(GTK_ENTRY(GTK_V3270FTD(widget)->filename[FILENAME_LOCAL]),name); +} + +const gchar * v3270_ft_dialog_get_host_filename(GtkWidget *widget) +{ + g_return_val_if_fail(GTK_IS_V3270FTD(widget),NULL); + return gtk_entry_get_text(GTK_ENTRY(GTK_V3270FTD(widget)->filename[FILENAME_HOST])); +} + +const gchar * v3270_ft_dialog_get_local_filename(GtkWidget *widget) +{ + g_return_val_if_fail(GTK_IS_V3270FTD(widget),NULL); + return gtk_entry_get_text(GTK_ENTRY(GTK_V3270FTD(widget)->filename[FILENAME_LOCAL])); +} + +LIB3270_FT_OPTION v3270_ft_dialog_get_options(GtkWidget *widget) +{ + g_return_val_if_fail(GTK_IS_V3270FTD(widget),0); + return GTK_V3270FTD(widget)->options; +} + +void v3270_ft_dialog_set_options(GtkWidget *widget,LIB3270_FT_OPTION options) +{ + g_return_if_fail(GTK_IS_V3270FTD(widget)); + + #warning Implementar +} + +void v3270_ft_dialog_set_tso(GtkWidget *widget,gboolean flag) +{ + g_return_if_fail(GTK_IS_V3270FTD(widget)); + + v3270FTD *dialog = GTK_V3270FTD(widget); + + GtkWidget *tsoWidget[] = + { + GTK_WIDGET(dialog->value[VALUE_BLKSIZE]), + GTK_WIDGET(dialog->value[VALUE_PRIMSPACE]), + GTK_WIDGET(dialog->value[VALUE_SECSPACE]), + GTK_WIDGET(dialog->units), + }; + + int f; + + for(f=0;f + * + * 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 ftprogress.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 "v3270ft.h" + +/*--[ Widget definition ]----------------------------------------------------------------------------*/ + + enum _filename + { + TEXT_LOCALFILE, + TEXT_HOSTFILE, + TEXT_STATUS, + + TEXT_COUNT + }; + + struct _v3270FTProgress + { + GtkBin parent; + GtkWidget * text[TEXT_COUNT]; + }; + + struct _v3270FTProgressClass + { + GtkBinClass parent_class; + + }; + + G_DEFINE_TYPE(v3270FTProgress, v3270FTProgress, GTK_TYPE_BIN); + + +/*--[ Implement ]------------------------------------------------------------------------------------*/ + +static void v3270FTProgress_class_init(v3270FTProgressClass *klass) +{ +// GtkDialogClass * widget_class = GTK_DIALOG_CLASS(klass); + +#if GTK_CHECK_VERSION(3,0,0) + +#else + + #error Implementar + +#endif // GTK_CHECK_VERSION + +} + +static void v3270FTProgress_init(v3270FTProgress *widget) +{ + int f; + + // Create From/to fields + static const gchar * label[TEXT_COUNT] = { N_("From"), N_("To"), N_("Status") }; + GtkWidget * frame = gtk_frame_new( _( "Informations" ) ); + GtkGrid * grid = GTK_GRID(gtk_grid_new()); + + gtk_grid_set_column_spacing(grid,5); + gtk_grid_set_row_spacing(grid,5); + + for(f=0;f%s:",gettext(label[f])); + + gtk_label_set_markup(GTK_LABEL(l),ptr); + gtk_misc_set_alignment(GTK_MISC(l),0,0); + g_free(ptr); + + gtk_grid_attach(grid,l,0,f,1,1); + + } + gtk_container_add(GTK_CONTAINER(frame),GTK_WIDGET(grid)); + + + + gtk_container_add(GTK_CONTAINER(widget),GTK_WIDGET(frame)); + +} + +GtkWidget * v3270_ft_progress_new(void) +{ + return g_object_new(GTK_TYPE_V3270FTProgress, NULL); +} diff --git a/src/pw3270/ft/testprogram.c b/src/pw3270/ft/testprogram.c index 30d3d63..d40d420 100644 --- a/src/pw3270/ft/testprogram.c +++ b/src/pw3270/ft/testprogram.c @@ -37,12 +37,22 @@ int main (int argc, char *argv[]) GtkWidget *win; gtk_init (&argc, &argv); -// win = v3270_dialog_ft_new(LIB3270_FT_OPTION_RECEIVE|LIB3270_FT_OPTION_ASCII); - win = v3270_dialog_ft_new(LIB3270_FT_OPTION_SEND|LIB3270_FT_OPTION_REMAP); + /* +// win = v3270_ft_dialog_new(LIB3270_FT_OPTION_RECEIVE|LIB3270_FT_OPTION_ASCII); + win = v3270_ft_dialog_new(LIB3270_FT_OPTION_SEND|LIB3270_FT_OPTION_REMAP); + v3270_ft_dialog_set_tso(win,TRUE); + */ - gtk_widget_show_all (win); + win = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_container_add(GTK_CONTAINER(win),v3270_ft_progress_new()); + + + gtk_widget_show_all(win); gtk_main (); + + gtk_dialog_run(GTK_DIALOG(win)); + return 0; } diff --git a/src/pw3270/ft/v3270ft.h b/src/pw3270/ft/v3270ft.h index d8b27f2..478fdaf 100644 --- a/src/pw3270/ft/v3270ft.h +++ b/src/pw3270/ft/v3270ft.h @@ -47,6 +47,7 @@ G_BEGIN_DECLS +/*--[ Select file dialog ]---------------------------------------------------------------------------*/ #define GTK_TYPE_V3270FTD (v3270FTD_get_type ()) #define GTK_V3270FTD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_V3270FTD, v3270FTD)) #define GTK_V3270FTD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_V3270FTD, v3270FTDClass)) @@ -57,9 +58,29 @@ typedef struct _v3270FTD v3270FTD; typedef struct _v3270FTDClass v3270FTDClass; - // Prototipes - GtkWidget * v3270_dialog_ft_new(LIB3270_FT_OPTION options); +/*--[ Progress widget ]------------------------------------------------------------------------------*/ + #define GTK_TYPE_V3270FTProgress (v3270FTProgress_get_type ()) + #define GTK_V3270FTProcess(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_V3270FTProgress, v3270FTProgress)) + #define GTK_V3270FTProgress_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_V3270FTProgress, v3270FTProgressClass)) + #define GTK_IS_V3270FTProgress(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_V3270FTProgress)) + #define GTK_IS_V3270FTProgress_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_V3270FTProgress)) + #define GTK_V3270FTProgress_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_V3270FTProgress, v3270FTProgressClass)) + + typedef struct _v3270FTProgress v3270FTProgress; + typedef struct _v3270FTProgressClass v3270FTProgressClass; + +/*--[ Prototipes ]-----------------------------------------------------------------------------------*/ + LIB3270_EXPORT GtkWidget * v3270_ft_dialog_new(LIB3270_FT_OPTION options); + LIB3270_EXPORT void v3270_ft_dialog_set_host_filename(GtkWidget *widget, const gchar *name); + LIB3270_EXPORT void v3270_ft_dialog_set_local_filename(GtkWidget *widget, const gchar *name); + LIB3270_EXPORT const gchar * v3270_ft_dialog_get_host_filename(GtkWidget *widget); + LIB3270_EXPORT const gchar * v3270_ft_dialog_get_local_filename(GtkWidget *widget); + LIB3270_EXPORT void v3270_ft_dialog_set_options(GtkWidget *widget,LIB3270_FT_OPTION options); + LIB3270_EXPORT LIB3270_FT_OPTION v3270_ft_dialog_get_options(GtkWidget *widget); + LIB3270_EXPORT void v3270_ft_dialog_set_tso(GtkWidget *widget,gboolean flag); + + LIB3270_EXPORT GtkWidget * v3270_ft_progress_new(void); G_END_DECLS -- libgit2 0.21.2