diff --git a/pw3270.cbp b/pw3270.cbp
index c57dd55..8736f16 100644
--- a/pw3270.cbp
+++ b/pw3270.cbp
@@ -136,6 +136,9 @@
+
+
+
diff --git a/src/include/pw3270/actions.h b/src/include/pw3270/actions.h
index 03a7e55..0cab245 100644
--- a/src/include/pw3270/actions.h
+++ b/src/include/pw3270/actions.h
@@ -104,7 +104,7 @@
void pw3270_action_view_move_selected(GtkWidget *from, GtkWidget *to);
void pw3270_action_view_append(GtkWidget *widget, const gchar *label, GdkPixbuf *pixbuf, const gchar *action_name, const PW3270ActionViewFlag flags);
gchar * pw3270_action_view_get_action_names(GtkWidget *widget);
- GtkWidget * pw3270_action_view_extract_button_new(GtkWidget *widget, const gchar *icon_name);
+ GtkWidget * pw3270_action_view_move_button_new(GtkWidget *from, GtkWidget *to, const gchar *icon_name);
Pw3270ActionList * pw3270_action_list_new(GtkApplication *application);
Pw3270ActionList * pw3270_action_list_append(Pw3270ActionList *action_list, const gchar *label, GdkPixbuf *pixbuf, const gchar *action_name, const PW3270ActionViewFlag flags);
diff --git a/src/include/pw3270/settings.h b/src/include/pw3270/settings.h
index 2c99ac3..22ab92a 100644
--- a/src/include/pw3270/settings.h
+++ b/src/include/pw3270/settings.h
@@ -36,6 +36,7 @@
#endif // _WIN32
#include
+ #include
G_BEGIN_DECLS
@@ -91,4 +92,18 @@
G_END_DECLS
+/*--[ PW3270 Action List Editor ]--------------------------------------------------------------------*/
+
+ #define GTK_TYPE_PW3270_SETTINGS_ACTIONS (PW3270SettingsActions_get_type())
+
+ typedef struct _PW3270SettingsActions PW3270SettingsActions;
+ typedef struct _PW3270SettingsActionsClass PW3270SettingsActionsClass;
+
+ GType PW3270SettingsActions_get_type(void);
+ GtkWidget * pw3270_settings_actions_new();
+ Pw3270ActionList * pw3270_settings_action_load(GtkWidget *widget, Pw3270ActionList *available, const gchar *value);
+
+ G_END_DECLS
+
+
#endif // V3270SETTINGS_H_INCLUDED
diff --git a/src/objects/actions/view.c b/src/objects/actions/view.c
index f079531..f847c76 100644
--- a/src/objects/actions/view.c
+++ b/src/objects/actions/view.c
@@ -436,16 +436,18 @@
}
- GtkWidget * pw3270_action_view_extract_button_new(GtkWidget *widget, const gchar *icon_name) {
+ GtkWidget * pw3270_action_view_move_button_new(GtkWidget *from, GtkWidget *to, const gchar *icon_name) {
GtkWidget * button = gtk_button_new_from_icon_name(icon_name,GTK_ICON_SIZE_DND);
gtk_widget_set_focus_on_click(button,FALSE);
gtk_button_set_relief(GTK_BUTTON(button),GTK_RELIEF_NONE);
gtk_widget_set_sensitive(button,FALSE);
+ gtk_widget_set_hexpand(button,FALSE);
+ gtk_widget_set_vexpand(button,FALSE);
g_signal_connect(
- gtk_tree_view_get_selection(GTK_TREE_VIEW(widget)),
+ gtk_tree_view_get_selection(GTK_TREE_VIEW(from)),
"changed",
G_CALLBACK(selection_changed),
button
diff --git a/src/objects/settings/actionview.c b/src/objects/settings/actionview.c
new file mode 100644
index 0000000..536e5bd
--- /dev/null
+++ b/src/objects/settings/actionview.c
@@ -0,0 +1,216 @@
+/*
+ * "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)
+ *
+ */
+
+#ifdef _WIN32
+ #include
+ #include
+#endif // _WIN32
+
+ #include
+ #include
+ #include
+ #include
+ #include
+
+ struct _PW3270SettingsActions {
+ GtkGrid parent;
+ GtkWidget * views[3];
+ GtkTreeModel * model;
+ };
+
+ struct _PW3270SettingsActionsClass {
+ GtkGridClass parent;
+
+ int dunno;
+ };
+
+ G_DEFINE_TYPE(PW3270SettingsActions, PW3270SettingsActions, GTK_TYPE_GRID);
+
+ static void PW3270SettingsActions_class_init(PW3270SettingsActionsClass *klass) {
+
+ }
+
+ static void PW3270SettingsActions_init(PW3270SettingsActions *grid) {
+
+ size_t ix;
+
+ static const struct View {
+ const gchar *label;
+ const gchar *tooltip;
+ } views[G_N_ELEMENTS(grid->views)] = {
+ {
+ .label = N_("Start"),
+ .tooltip = N_("Items packed from the start to the end")
+ },
+
+ {
+ .label = N_("Available"),
+ .tooltip = N_("List of the available and unpacked actions")
+ },
+
+ {
+ .label = N_("End"),
+ .tooltip = N_("Items packed from the end to the start")
+ }
+ };
+
+ gtk_grid_set_row_homogeneous(GTK_GRID(grid),FALSE);
+ gtk_grid_set_row_spacing(GTK_GRID(grid),12);
+ gtk_grid_set_column_spacing(GTK_GRID(grid),6);
+
+ {
+ // Create views
+ GtkTreeSelection * selection;
+ GtkWidget *box;
+
+ for(ix = 0; ix < G_N_ELEMENTS(grid->views); ix++) {
+
+ // Create label.
+ GtkWidget * label = gtk_label_new(gettext(views[ix].label));
+ gtk_widget_set_tooltip_markup(label,gettext(views[ix].tooltip));
+ //gtk_label_set_xalign(GTK_LABEL(label),0);
+ gtk_widget_set_hexpand(label,TRUE);
+ gtk_widget_set_vexpand(label,FALSE);
+
+ gtk_grid_attach(
+ GTK_GRID(grid),
+ label,
+ (ix*2),0,
+ 1,1
+ );
+
+ // Create view
+ grid->views[ix] = pw3270_action_view_new();
+ gtk_widget_set_hexpand(grid->views[ix],TRUE);
+ gtk_widget_set_vexpand(grid->views[ix],TRUE);
+
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(grid->views[ix]));
+ gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
+
+ GtkWidget * box = gtk_scrolled_window_new(NULL,NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(box),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
+ gtk_container_add(GTK_CONTAINER(box),grid->views[ix]);
+
+ gtk_grid_attach(
+ GTK_GRID(grid),
+ box,
+ (ix*2),1,
+ 1,4
+ );
+
+ }
+
+ }
+
+ // Create buttons
+ {
+ GtkWidget *buttons[] = {
+ pw3270_action_view_move_button_new(grid->views[1],grid->views[0],"go-previous"),
+ pw3270_action_view_move_button_new(grid->views[1],grid->views[2],"go-next"),
+ pw3270_action_view_move_button_new(grid->views[0],grid->views[1],"go-next"),
+ pw3270_action_view_move_button_new(grid->views[2],grid->views[1],"go-previous")
+ };
+
+ gtk_grid_attach(GTK_GRID(grid),buttons[0],1,1,1,1);
+ gtk_grid_attach(GTK_GRID(grid),buttons[1],3,1,1,1);
+
+ gtk_grid_attach(GTK_GRID(grid),buttons[2],1,2,1,1);
+ gtk_grid_attach(GTK_GRID(grid),buttons[3],3,2,1,1);
+
+ }
+
+ }
+
+ GtkWidget * pw3270_settings_actions_new() {
+
+ return GTK_WIDGET(g_object_new(
+ GTK_TYPE_PW3270_SETTINGS_ACTIONS,
+ NULL
+ ));
+
+ }
+
+ Pw3270ActionList * pw3270_settings_action_load(GtkWidget *widget, Pw3270ActionList *action_list, const gchar *action_names) {
+
+ PW3270SettingsActions *editor = (PW3270SettingsActions *) widget;
+
+ static const unsigned short columns[] = { 0, 2 };
+ unsigned short column;
+ size_t action;
+
+ gchar **views = g_strsplit(action_names,":",-1);
+
+ for(column = 0; column < G_N_ELEMENTS(columns); column++) {
+
+ if(!views[column])
+ break;
+
+ gchar ** actions = g_strsplit(views[column],",",-1);
+
+ for(action = 0; actions[action];action++) {
+ action_list = pw3270_action_list_move_action(
+ action_list,
+ actions[action],
+ editor->views[columns[column]]
+ );
+ }
+
+ g_strfreev(actions);
+ }
+
+ g_strfreev(views);
+
+ pw3270_action_view_set_actions(editor->views[1], action_list);
+
+ return action_list;
+ }
+
+ /*
+ static void remove_from_left(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) {
+ debug("%s(%p)",__FUNCTION__,settings);
+ pw3270_action_view_move_selected(settings->views[0],settings->views[2]);
+ }
+
+ static void add_to_left(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) {
+ debug("%s(%p)",__FUNCTION__,settings);
+ pw3270_action_view_move_selected(settings->views[2],settings->views[0]);
+ }
+
+ static void remove_from_right(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) {
+ debug("%s(%p)",__FUNCTION__,settings);
+ pw3270_action_view_move_selected(settings->views[1],settings->views[2]);
+ }
+
+ static void add_to_right(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) {
+ debug("%s(%p)",__FUNCTION__,settings);
+ pw3270_action_view_move_selected(settings->views[2],settings->views[1]);
+ }
+
+
+*/
diff --git a/src/objects/toolbar/settings.c b/src/objects/toolbar/settings.c
index 74d8616..1f6639c 100644
--- a/src/objects/toolbar/settings.c
+++ b/src/objects/toolbar/settings.c
@@ -59,7 +59,7 @@
struct _PW3270SettingsPrivate {
GtkWidget * views[2];
- GtkWidget * buttons[2];
+// GtkWidget * buttons[2];
GtkTreeModel * models[2];
GtkWidget * combos[G_N_ELEMENTS(comboboxes)];
};
@@ -150,6 +150,7 @@
gtk_widget_set_hexpand(box,FALSE);
gtk_widget_set_vexpand(box,FALSE);
+ /*
page->buttons[0] = pw3270_action_view_extract_button_new(page->views[0],"go-next"),
page->buttons[1] = pw3270_action_view_extract_button_new(page->views[1],"go-previous"),
@@ -169,6 +170,7 @@
G_CALLBACK(toolbar_insert),
page
);
+ */
gtk_grid_attach(
grid,
diff --git a/src/objects/window/header-settings.c b/src/objects/window/header-settings.c
index f80047f..6a4e87e 100644
--- a/src/objects/window/header-settings.c
+++ b/src/objects/window/header-settings.c
@@ -40,10 +40,14 @@
/*--[ Constants ]------------------------------------------------------------------------------------*/
struct _PW3270SettingsPrivate {
+ GtkWidget * editor;
+ /*
GtkWidget * views[3];
GtkTreeModel * model;
+ */
};
+ /*
static const struct _views {
const char * label;
gint left;
@@ -69,29 +73,10 @@
.height = 10
}
};
+ */
/*--[ Implement ]------------------------------------------------------------------------------------*/
- static void remove_from_left(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) {
- debug("%s(%p)",__FUNCTION__,settings);
- pw3270_action_view_move_selected(settings->views[0],settings->views[2]);
- }
-
- static void add_to_left(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) {
- debug("%s(%p)",__FUNCTION__,settings);
- pw3270_action_view_move_selected(settings->views[2],settings->views[0]);
- }
-
- static void remove_from_right(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) {
- debug("%s(%p)",__FUNCTION__,settings);
- pw3270_action_view_move_selected(settings->views[1],settings->views[2]);
- }
-
- static void add_to_right(GtkButton G_GNUC_UNUSED(*button), PW3270SettingsPrivate *settings) {
- debug("%s(%p)",__FUNCTION__,settings);
- pw3270_action_view_move_selected(settings->views[2],settings->views[1]);
- }
-
GtkWidget * pw3270_header_settings_new() {
size_t ix;
@@ -106,6 +91,15 @@
// Create private data.
PW3270SettingsPrivate * page = settings->settings = g_new0(PW3270SettingsPrivate,1);
+ page->editor = pw3270_settings_actions_new();
+
+ gtk_grid_attach(
+ GTK_GRID(settings),
+ v3270_dialog_section_new(_("Title bar actions"), _("Change the position of the title bar icons"), page->editor),
+ 0,0,4,3
+ );
+
+ /*
// Create dialog grid
GtkGrid * grid = GTK_GRID(gtk_grid_new());
gtk_grid_set_row_homogeneous(grid,FALSE);
@@ -222,7 +216,7 @@
}
}
-
+ */
gtk_widget_show_all(GTK_WIDGET(settings));
return GTK_WIDGET(settings);
@@ -230,11 +224,10 @@
void load(GtkWidget *widget, PW3270SettingsPrivate *page) {
- size_t view, action;
- g_autoptr(GSettings) settings = pw3270_application_window_settings_new();
+ g_autoptr(GSettings) settings = pw3270_application_window_settings_new();
- // Populate views
- Pw3270ActionList * action_list = pw3270_action_list_new(GTK_APPLICATION(g_application_get_default()));
+ // Get avaliable actions.
+ Pw3270ActionList * action_list = pw3270_action_list_new(GTK_APPLICATION(g_application_get_default()));
// Add standard menus
{
@@ -283,6 +276,10 @@
// Load settings
g_autofree gchar * action_names = g_settings_get_string(settings,"header-action-names");
+
+ action_list = pw3270_settings_action_load(page->editor, action_list, action_names);
+
+ /*
gchar **views = g_strsplit(action_names,":",-1);
for(view = 0; view < 2; view++) {
@@ -303,12 +300,14 @@
pw3270_action_view_set_actions(page->views[2], action_list);
- pw3270_action_list_free(action_list);
+ */
+ pw3270_action_list_free(action_list);
}
void apply(GtkWidget *widget, PW3270SettingsPrivate *page) {
+ /*
g_autofree gchar * left_names = pw3270_action_view_get_action_names(page->views[0]);
g_autofree gchar * right_names = pw3270_action_view_get_action_names(page->views[1]);
g_autofree gchar * action_names = g_strconcat(left_names,":",right_names,NULL);
@@ -317,6 +316,6 @@
g_autoptr(GSettings) settings = pw3270_application_window_settings_new();
g_settings_set_string(settings,"header-action-names",action_names);
-
+ */
}
--
libgit2 0.21.2