diff --git a/pw3270.cbp b/pw3270.cbp
index e29a01f..a03bb6e 100644
--- a/pw3270.cbp
+++ b/pw3270.cbp
@@ -149,6 +149,9 @@
+
+
+
diff --git a/src/objects/toolbar/models.c b/src/objects/toolbar/models.c
new file mode 100644
index 0000000..8c7334d
--- /dev/null
+++ b/src/objects/toolbar/models.c
@@ -0,0 +1,214 @@
+/*
+ * "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"
+ #include
+ #include
+
+ #define GTK_TOOLBAR_DEFAULT_STYLE ((GtkToolbarStyle) -1)
+
+ static const struct _models {
+ const gchar *name;
+ const gchar *label;
+ const struct _contents {
+ const gchar * label;
+ guint value;
+ } *contents;
+ } models[] = {
+
+ {
+ "toolbar-icon-size",
+ N_("Icon _size"),
+ (const struct _contents[]) {
+ {
+ .label = N_( "System default" ),
+ .value = GTK_ICON_SIZE_INVALID
+
+ },
+
+ {
+ .label = N_( "Small" ),
+ .value = GTK_ICON_SIZE_SMALL_TOOLBAR
+ },
+
+ {
+ .label = N_( "Large" ),
+ .value = GTK_ICON_SIZE_LARGE_TOOLBAR
+ },
+
+ {
+ .label = NULL
+ }
+ }
+ },
+
+ {
+ "toolbar-style",
+ N_("Toolbar s_tyle"),
+ (const struct _contents[]) {
+ {
+ .label = N_( "System default" ),
+ .value = GTK_TOOLBAR_DEFAULT_STYLE
+ },
+
+ {
+ .label = N_( "Icons only" ),
+ .value = GTK_TOOLBAR_ICONS
+ },
+
+ {
+ .label = N_( "Text only" ),
+ .value = GTK_TOOLBAR_TEXT
+ },
+
+ {
+ .label = N_( "Icons & text" ),
+ .value = GTK_TOOLBAR_BOTH
+ },
+ {
+ .label = NULL
+ }
+ }
+ },
+ {
+ "toolbar-icon-type",
+ N_("Icon type"),
+ (const struct _contents[]) {
+ {
+ .label = N_( "System default" ),
+ .value = 0
+ },
+ {
+ .label = N_( "Symbolic" ),
+ .value = 1
+ },
+ {
+ .label = NULL
+ }
+ }
+ }
+
+ };
+
+ GtkTreeModel * pw3270_model_from_name(const gchar *name) {
+
+ size_t model;
+
+ for(model = 0; model < G_N_ELEMENTS(models); model++) {
+
+ if(g_ascii_strcasecmp(models[model].name,name))
+ continue;
+
+ // Create model
+ size_t row;
+ GtkTreeIter iter;
+ GtkListStore * store = gtk_list_store_new(2, G_TYPE_STRING,G_TYPE_UINT);
+
+ for(row = 0; models[model].contents[row].label; row++) {
+ gtk_list_store_append(store,&iter);
+ gtk_list_store_set( store,
+ &iter,
+ 0, gettext(models[model].contents[row].label),
+ 1, models[model].contents[row].value,
+ -1);
+ }
+
+ return GTK_TREE_MODEL(store);
+
+ }
+
+ return NULL;
+ }
+
+ void pw3270_model_get_iter_from_value(GtkTreeModel * model, GtkTreeIter *iter, guint value) {
+
+ if(gtk_tree_model_get_iter_first(model,iter)) {
+
+ do {
+
+ GValue gVal = { 0, };
+ gtk_tree_model_get_value(model,iter,1,&gVal);
+ guint iVal = g_value_get_uint(&gVal);
+ g_value_unset(&gVal);
+
+ if(iVal == value) {
+ return;
+ }
+
+ } while(gtk_tree_model_iter_next(model,iter));
+
+ }
+
+ }
+
+ guint pw3270_model_get_value_from_iter(GtkTreeModel * model, GtkTreeIter *iter) {
+ GValue gVal = { 0, };
+ gtk_tree_model_get_value(model,iter,1,&gVal);
+ guint iVal = g_value_get_uint(&gVal);
+ g_value_unset(&gVal);
+ return iVal;
+ }
+
+ GtkWidget * pw3270_menu_item_from_name(const gchar *name) {
+
+ size_t model;
+
+ for(model = 0; model < G_N_ELEMENTS(models); model++) {
+
+ if(g_ascii_strcasecmp(models[model].name,name))
+ continue;
+
+ // Create submenu
+ size_t row;
+ GtkWidget * item;
+ GtkWidget * menu = gtk_menu_item_new_with_mnemonic(gettext(models[model].label));
+
+ GtkWidget * submenu = gtk_menu_new();
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu),submenu);
+
+ g_object_set_data(G_OBJECT(submenu),"model-data",(gpointer) &models[model]);
+
+ for(row = 0; models[model].contents[row].label; row++) {
+
+ item = gtk_check_menu_item_new_with_mnemonic(gettext(models[model].contents[row].label));
+ gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(item),TRUE);
+
+ //g_signal_connect(item, "toggled", G_CALLBACK(set_icon_size), menu);
+
+ gtk_menu_shell_append(GTK_MENU_SHELL(submenu),item);
+
+ }
+
+ gtk_widget_show_all(menu);
+
+ return menu;
+ }
+
+ return NULL;
+ }
diff --git a/src/objects/toolbar/private.h b/src/objects/toolbar/private.h
index d933a9a..ff1a153 100644
--- a/src/objects/toolbar/private.h
+++ b/src/objects/toolbar/private.h
@@ -50,8 +50,8 @@
G_GNUC_INTERNAL GtkWidget * pw3270_tool_button_new(GAction *action);
G_GNUC_INTERNAL GtkWidget * pw3270_tool_button_new_from_action_name(const gchar * action_name);
- G_GNUC_INTERNAL GtkTreeModel * pw3270_toolbar_style_model_new();
- G_GNUC_INTERNAL GtkTreeModel * pw3270_toolbar_icon_size_model_new();
+ GtkTreeModel * pw3270_model_from_name(const gchar *name);
+ GtkWidget * pw3270_menu_item_from_name(const gchar *name);
G_GNUC_INTERNAL void pw3270_model_get_iter_from_value(GtkTreeModel * model, GtkTreeIter *iter, guint value);
G_GNUC_INTERNAL guint pw3270_model_get_value_from_iter(GtkTreeModel * model, GtkTreeIter *iter);
diff --git a/src/objects/toolbar/settings.c b/src/objects/toolbar/settings.c
index f474e86..4accdfb 100644
--- a/src/objects/toolbar/settings.c
+++ b/src/objects/toolbar/settings.c
@@ -41,16 +41,22 @@
/*--[ Constants ]------------------------------------------------------------------------------------*/
static const struct _comboboxes {
- const gchar * name;
- const gchar * label;
+ const gchar * name; ///< @brief The gsettings name.
+ const gchar * label; ///< @brief The combo name.
+ guint left;
+ guint top;
} comboboxes[] = {
{
+ .left = 0,
+ .top = 0,
.name = "toolbar-icon-size",
.label = N_("Icon Size"),
},
{
+ .left = 3,
+ .top = 0,
.name = "toolbar-style",
.label = N_("Style")
}
@@ -170,17 +176,16 @@
gtk_grid_set_column_spacing(grid,12);
gtk_widget_set_hexpand(GTK_WIDGET(grid),TRUE);
- page->models[0] = pw3270_toolbar_icon_size_model_new();
- page->models[1] = pw3270_toolbar_style_model_new();
-
GtkCellRenderer * renderer = gtk_cell_renderer_text_new();
for(ix = 0; ix < G_N_ELEMENTS(page->models); ix++) {
+ page->models[ix] = pw3270_model_from_name(comboboxes[ix].name);
+
GtkWidget * label = gtk_label_new(gettext(comboboxes[ix].label));
gtk_label_set_xalign(GTK_LABEL(label),1);
- gtk_grid_attach(grid,label,(ix*3),0,1,1);
+ gtk_grid_attach(grid,label,comboboxes[ix].left,comboboxes[ix].top,1,1);
page->combos[ix] = gtk_combo_box_new_with_model(page->models[ix]);
gtk_widget_set_hexpand(page->combos[ix],TRUE);
@@ -188,7 +193,7 @@
gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(page->combos[ix]), renderer, TRUE);
gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(page->combos[ix]), renderer, "text", 0, NULL);
- gtk_grid_attach(grid,page->combos[ix],(ix*3)+1,0,2,1);
+ gtk_grid_attach(grid,page->combos[ix],comboboxes[ix].left+1,comboboxes[ix].top,2,1);
}
diff --git a/src/objects/toolbar/toolbar.c b/src/objects/toolbar/toolbar.c
index a1c0b64..67fa1e1 100644
--- a/src/objects/toolbar/toolbar.c
+++ b/src/objects/toolbar/toolbar.c
@@ -38,54 +38,6 @@
static void get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
static void set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
- const struct icon_size {
- const gchar * label;
- GtkIconSize icon_size;
- } icon_sizes[] = {
-
- {
- .label = N_( "System default" ),
- .icon_size = GTK_ICON_SIZE_INVALID
-
- },
-
- {
- .label = N_( "Small" ),
- .icon_size = GTK_ICON_SIZE_SMALL_TOOLBAR
- },
-
- {
- .label = N_( "Large" ),
- .icon_size = GTK_ICON_SIZE_LARGE_TOOLBAR
- },
- };
-
- static const struct style {
- const gchar * label;
- GtkToolbarStyle style;
- } styles[] = {
-
- {
- .label = N_( "System default" ),
- .style = GTK_TOOLBAR_DEFAULT_STYLE
- },
-
- {
- .label = N_( "Icons only" ),
- .style = GTK_TOOLBAR_ICONS
- },
-
- {
- .label = N_( "Text only" ),
- .style = GTK_TOOLBAR_TEXT
- },
-
- {
- .label = N_( "Icons & text" ),
- .style = GTK_TOOLBAR_BOTH
- },
- };
-
enum {
PROP_NONE,
PROP_ACTION_NAMES,
@@ -94,17 +46,19 @@
PROP_STYLE
};
+
struct _pw3270ToolBar {
GtkToolbar parent;
GtkToolbarStyle style;
+ GtkWidget *menu;
int icon_type;
/// @brief Popup Menu
- struct {
- GtkWidget * menu;
- GtkWidget * styles[G_N_ELEMENTS(styles)];
- GtkWidget * icon_sizes[G_N_ELEMENTS(icon_sizes)];
- } popup;
+// struct {
+// GtkWidget * menu;
+// GtkWidget * styles[G_N_ELEMENTS(styles)];
+// GtkWidget * icon_sizes[G_N_ELEMENTS(icon_sizes)];
+// } popup;
};
@@ -235,10 +189,11 @@
static void detacher(GtkWidget *attach_widget, GtkMenu G_GNUC_UNUSED(*menu)) {
pw3270ToolBar * toolbar = PW3270_TOOLBAR(attach_widget);
- toolbar->popup.menu = NULL;
+ toolbar->menu = NULL;
}
+ /*
static void set_icon_size(GtkCheckMenuItem *menuitem, GtkWidget *toolbar) {
if(gtk_check_menu_item_get_active(menuitem)) {
@@ -256,6 +211,7 @@
}
}
+ */
static void open_preferences(GtkMenuItem G_GNUC_UNUSED(*menuitem), GtkWidget *toolbar) {
@@ -277,66 +233,21 @@
static void pw3270ToolBar_init(pw3270ToolBar *widget) {
- widget->popup.menu = gtk_menu_new();
-
- // Size options
- {
- size_t ix;
-
- GtkWidget * item = gtk_menu_item_new_with_mnemonic( _("Icon _size") );
- gtk_menu_shell_append(GTK_MENU_SHELL(widget->popup.menu),item);
-
- GtkWidget * submenu = gtk_menu_new();
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(item),submenu);
-
- for(ix = 0; ix < G_N_ELEMENTS(icon_sizes); ix++) {
-
- widget->popup.icon_sizes[ix] = item = gtk_check_menu_item_new_with_mnemonic(gettext(icon_sizes[ix].label));
- gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(item),TRUE);
-
- g_object_set_data(G_OBJECT(item),"icon_size", (gpointer) &icon_sizes[ix]);
- g_signal_connect(item, "toggled", G_CALLBACK(set_icon_size), widget);
-
- gtk_menu_shell_append(GTK_MENU_SHELL(submenu),item);
-
- }
-
- }
-
- // Style option
- {
- size_t ix;
-
- GtkWidget * item = gtk_menu_item_new_with_mnemonic( _("S_tyle") );
- gtk_menu_shell_append(GTK_MENU_SHELL(widget->popup.menu),item);
-
- GtkWidget * submenu = gtk_menu_new();
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(item),submenu);
-
- for(ix = 0; ix < G_N_ELEMENTS(styles); ix++) {
-
- widget->popup.styles[ix] = item = gtk_check_menu_item_new_with_mnemonic(gettext(styles[ix].label));
- gtk_check_menu_item_set_draw_as_radio(GTK_CHECK_MENU_ITEM(item),TRUE);
+ widget->menu = gtk_menu_new();
- g_object_set_data(G_OBJECT(item),"toolbar_style", (gpointer) &styles[ix]);
- g_signal_connect(item, "toggled", G_CALLBACK(set_style), widget);
-
- gtk_menu_shell_append(GTK_MENU_SHELL(submenu),item);
-
- }
-
- }
+ gtk_menu_shell_append(GTK_MENU_SHELL(widget->menu),pw3270_menu_item_from_name("toolbar-style"));
+ gtk_menu_shell_append(GTK_MENU_SHELL(widget->menu),pw3270_menu_item_from_name("toolbar-icon-size"));
+ gtk_menu_shell_append(GTK_MENU_SHELL(widget->menu),pw3270_menu_item_from_name("toolbar-icon-type"));
// Toolbar preferences.
{
GtkWidget * item = gtk_menu_item_new_with_mnemonic( _("_Preferences") );
- gtk_menu_shell_append(GTK_MENU_SHELL(widget->popup.menu),item);
+ gtk_menu_shell_append(GTK_MENU_SHELL(widget->menu),item);
g_signal_connect(item, "activate", G_CALLBACK(open_preferences), widget);
}
- // gtk_container_set_border_width(GTK_CONTAINER(widget->popup_menu),6);
- gtk_widget_show_all(widget->popup.menu);
- gtk_menu_attach_to_widget(GTK_MENU(widget->popup.menu),GTK_WIDGET(widget),detacher);
+ gtk_widget_show_all(widget->menu);
+ gtk_menu_attach_to_widget(GTK_MENU(widget->menu),GTK_WIDGET(widget),detacher);
}
@@ -356,11 +267,11 @@
debug("%s button_number=%d",__FUNCTION__,button_number);
- if(toolbar->popup.menu) {
+ if(toolbar->menu) {
#if GTK_CHECK_VERSION(3,22,0)
- gtk_menu_popup_at_pointer(GTK_MENU(toolbar->popup.menu),NULL);
+ gtk_menu_popup_at_pointer(GTK_MENU(toolbar->menu),NULL);
#else
- gtk_menu_popup(GTK_MENU(toolbar->popup.menu), NULL, NULL, NULL, NULL, 0, 0);
+ gtk_menu_popup(GTK_MENU(toolbar->menu), NULL, NULL, NULL, NULL, 0, 0);
#endif
}
@@ -379,9 +290,10 @@
else
gtk_toolbar_set_style(GTK_TOOLBAR(toolbar),style);
+ /*
// Update menu
pw3270ToolBar * tb = PW3270_TOOLBAR(toolbar);
- if(tb && tb->popup.menu) {
+ if(tb && tb->menu) {
size_t ix;
for(ix = 0; ix < G_N_ELEMENTS(styles); ix++) {
@@ -391,9 +303,7 @@
);
}
}
-
- // Store value
-// pw3270_settings_set_int("toolbar-style",(int) style);
+ */
g_object_notify(G_OBJECT(toolbar), "style");
@@ -422,8 +332,9 @@
gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar),icon_size);
// Update menu
+ /*
pw3270ToolBar * tb = PW3270_TOOLBAR(toolbar);
- if(tb && tb->popup.menu) {
+ if(tb && tb->menu) {
size_t ix;
for(ix = 0; ix < G_N_ELEMENTS(icon_sizes); ix++) {
@@ -433,6 +344,7 @@
);
}
}
+ */
// Store value
g_object_notify(G_OBJECT(toolbar), "icon-size");
@@ -527,71 +439,3 @@
return g_string_free(str,FALSE);
}
- GtkTreeModel * pw3270_toolbar_style_model_new() {
-
- size_t ix;
- GtkTreeIter iter;
- GtkListStore * model = gtk_list_store_new(2, G_TYPE_STRING,G_TYPE_UINT);
-
- for(ix = 0; ix < G_N_ELEMENTS(icon_sizes); ix++) {
- gtk_list_store_append(model,&iter);
- gtk_list_store_set( model,
- &iter,
- 0, gettext(styles[ix].label),
- 1, (guint) styles[ix].style,
- -1);
-
- }
-
- return GTK_TREE_MODEL(model);
-
- }
-
- GtkTreeModel * pw3270_toolbar_icon_size_model_new() {
-
- size_t ix;
- GtkTreeIter iter;
- GtkListStore * model = gtk_list_store_new(2, G_TYPE_STRING,G_TYPE_UINT);
-
- for(ix = 0; ix < G_N_ELEMENTS(icon_sizes); ix++) {
- gtk_list_store_append(model,&iter);
- gtk_list_store_set( model,
- &iter,
- 0, gettext(icon_sizes[ix].label),
- 1, (guint) icon_sizes[ix].icon_size,
- -1);
-
- }
-
- return GTK_TREE_MODEL(model);
- }
-
- void pw3270_model_get_iter_from_value(GtkTreeModel * model, GtkTreeIter *iter, guint value) {
-
- if(gtk_tree_model_get_iter_first(model,iter)) {
-
- do {
-
- GValue gVal = { 0, };
- gtk_tree_model_get_value(model,iter,1,&gVal);
- guint iVal = g_value_get_uint(&gVal);
- g_value_unset(&gVal);
-
- if(iVal == value) {
- return;
- }
-
- } while(gtk_tree_model_iter_next(model,iter));
-
- }
-
- }
-
- guint pw3270_model_get_value_from_iter(GtkTreeModel * model, GtkTreeIter *iter) {
- GValue gVal = { 0, };
- gtk_tree_model_get_value(model,iter,1,&gVal);
- guint iVal = g_value_get_uint(&gVal);
- g_value_unset(&gVal);
- return iVal;
-}
-
--
libgit2 0.21.2