diff --git a/pw3270.cbp b/pw3270.cbp index b748d7b..ab69997 100644 --- a/pw3270.cbp +++ b/pw3270.cbp @@ -162,6 +162,9 @@ + + diff --git a/src/objects/windows/savedesktopicon.c b/src/objects/windows/savedesktopicon.c new file mode 100644 index 0000000..a8df662 --- /dev/null +++ b/src/objects/windows/savedesktopicon.c @@ -0,0 +1,176 @@ +/* + * "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 - e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + */ + + /** + * @brief Implement Windows version of the save desktop icon action. + * + * References: + * + * + * + * + */ + + #include + #include + + #include + #include + #include + #include + #include + #include + + static GtkWidget * factory(V3270SimpleAction *action, GtkWidget *terminal); + static void response(GtkWidget *dialog, gint response_id, GtkWidget *terminal); + + static const struct _entry { + + const gchar * label; + const gchar * tooltip; + gint width; + + } entries[] = { + + { + .label = N_("File name"), + .width = 40, + }, + + { + .label = N_("Launcher name"), + .width = 20, + } + + }; + + GAction * pw3270_action_save_desktop_icon_new(void) { + + V3270SimpleAction * action = v3270_dialog_action_new(factory); + + action->name = "save.launcher"; + action->label = _("Save desktop icon"); + action->tooltip = _("Create a desktop icon for the current session"); + + return G_ACTION(action); + + } + + GtkWidget * factory(V3270SimpleAction *action, GtkWidget *terminal) { + + size_t ix; + + gboolean use_header; + g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &use_header, NULL); + + GtkWidget * dialog = + GTK_WIDGET(g_object_new( + GTK_TYPE_DIALOG, + "use-header-bar", (use_header ? 1 : 0), + NULL + )); + + gtk_window_set_modal(GTK_WINDOW(dialog),TRUE); + gtk_window_set_title(GTK_WINDOW(dialog),action->label); + + gtk_dialog_add_buttons( + GTK_DIALOG(dialog), + _("_Cancel"), GTK_RESPONSE_CANCEL, + _("_Save"), GTK_RESPONSE_APPLY, + NULL + ); + + g_signal_connect(dialog,"response",G_CALLBACK(response),terminal); + + // Create entry fields + GtkWidget ** inputs = g_new0(GtkWidget *,G_N_ELEMENTS(entries)); + g_object_set_data_full(G_OBJECT(dialog),"inputs",inputs,g_free); + debug("Dialog=%p inputs=%p",dialog,inputs); + + GtkGrid * grid = GTK_GRID(gtk_grid_new()); + + gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),GTK_WIDGET(grid),TRUE,TRUE,0); + + // https://developer.gnome.org/hig/stable/visual-layout.html.en + gtk_container_set_border_width(GTK_CONTAINER(grid),18); + gtk_grid_set_row_spacing(GTK_GRID(grid),6); + gtk_grid_set_column_spacing(GTK_GRID(grid),12); + + // https://developer.gnome.org/hig/stable/visual-layout.html.en + // gtk_box_set_spacing(GTK_BOX(content_area),18); + + for(ix = 0; ix < G_N_ELEMENTS(entries); ix++) { + + GtkWidget * label = gtk_label_new(gettext(entries[ix].label)); + gtk_label_set_xalign(GTK_LABEL(label),1); + gtk_grid_attach(grid,label,0,ix,1,1); + + inputs[ix] = gtk_entry_new(); + debug("inputs[%u]=%p",(unsigned int) ix, inputs[ix]); + + gtk_entry_set_width_chars(GTK_ENTRY(inputs[ix]),entries[ix].width); +// gtk_entry_set_max_width_chars(GTK_ENTRY(inputs[ix]),entries[ix].n_chars); + gtk_widget_set_hexpand(inputs[ix],FALSE); + gtk_widget_set_vexpand(inputs[ix],FALSE); + + gtk_grid_attach(grid,inputs[ix],1,ix,entries[ix].width,1); + + } + + /* + + gtk_entry_set_text(GTK_ENTRY(inputs[0]),filename); + + gtk_entry_set_placeholder_text(GTK_ENTRY(inputs[1]),G_STRINGIFY(PRODUCT_NAME)); + gtk_entry_set_text(GTK_ENTRY(inputs[1]),G_STRINGIFY(PRODUCT_NAME)); + + gtk_entry_set_placeholder_text(GTK_ENTRY(inputs[2]),G_STRINGIFY(PRODUCT_NAME)); + gtk_entry_set_text(GTK_ENTRY(inputs[2]),G_STRINGIFY(PRODUCT_NAME)); + + gtk_entry_set_placeholder_text(GTK_ENTRY(inputs[3]),v3270_get_url(terminal)); + gtk_entry_set_text(GTK_ENTRY(inputs[3]),v3270_get_url(terminal)); + gtk_entry_set_input_hints(GTK_ENTRY(inputs[3]),GTK_INPUT_HINT_SPELLCHECK); + + */ + + gtk_widget_show_all(GTK_WIDGET(grid)); + return dialog; + } + + void response(GtkWidget *dialog, gint response_id, GtkWidget *terminal) { + + debug("%s(%d)",__FUNCTION__,response_id); + + if(response_id == GTK_RESPONSE_APPLY) { + + } + + gtk_widget_destroy(dialog); + +} -- libgit2 0.21.2