/* * "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) * */ #include "private.h" /*---[ Implement ]----------------------------------------------------------------------------------*/ static void create_child(const KeypadElement *element, GtkGrid *grid) { GtkWidget * button; if(element->icon_name) { button = gtk_button_new_from_icon_name(element->icon_name,GTK_ICON_SIZE_SMALL_TOOLBAR); } else if(element->label) { g_autofree gchar * label = g_strcompress(element->label); button = gtk_button_new_with_label(label); } else { button = gtk_button_new(); } if(element->action && *element->action) { gtk_actionable_set_detailed_action_name(GTK_ACTIONABLE(button),element->action); } gtk_button_set_relief(GTK_BUTTON(button),GTK_RELIEF_NORMAL); gtk_widget_set_can_focus(button,FALSE); gtk_widget_set_can_default(button,FALSE); gtk_widget_set_focus_on_click(button,FALSE); gtk_widget_show_all(button); gtk_grid_attach( grid, button, element->col,element->row, element->width,element->height ); } static void destroy(GtkWidget *grid, KeypadModel * keypad) { keypad->widgets = g_list_remove(keypad->widgets,grid); g_object_unref(keypad); } GtkWidget * pw3270_keypad_get_from_model(GObject *model) { g_return_val_if_fail(PW_IS_KEYPAD_MODEL(model),NULL); GtkWidget * grid = gtk_grid_new(); gtk_grid_set_column_homogeneous(GTK_GRID(grid),TRUE); gtk_grid_set_row_homogeneous(GTK_GRID(grid),TRUE); KeypadModel * keypad = PW_KEYPAD_MODEL(model); keypad->widgets = g_list_prepend(keypad->widgets,grid); g_object_ref_sink(keypad); g_signal_connect(G_OBJECT(grid),"destroy", G_CALLBACK(destroy),keypad); g_list_foreach(keypad->elements,(GFunc) create_child, grid); gtk_widget_show(grid); // FIX-ME return grid; }