diff --git a/src/include/pw3270/application.h b/src/include/pw3270/application.h new file mode 100644 index 0000000..ae6582a --- /dev/null +++ b/src/include/pw3270/application.h @@ -0,0 +1,71 @@ +/* + * "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 Declares the pw3270 application. + * + */ + +#ifndef PW3270_APPLICATION_H_INCLUDED + + #define PW3270_APPLICATION_H_INCLUDED + + #include + + G_BEGIN_DECLS + + #define PW3270_TYPE_APPLICATION (pw3270Application_get_type ()) + #define PW3270_APPLICATION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \ + PW3270_TYPE_APPLICATION, pw3270Application)) + #define PW3270_APPLICATION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \ + PW3270_TYPE_APPLICATION, pw3270ApplicationClass)) + #define PW3270_IS_APPLICATION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \ + PW3270_TYPE_APPLICATION)) + #define PW3270_IS_APPLICATION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \ + PW3270_TYPE_APPLICATION)) + #define PW3270_APPLICATION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ + GTK_TYPE_APPLICATION, pw3270ApplicationClass)) + + typedef enum _pw3270_ui_type { + PW3270_UI_STYLE_CLASSICAL, ///< @brief Interface "classica", com menu e toolbar. + PW3270_UI_STYLE_GNOME, ///< @brief Interface padrão gnome. + } PW3270_UI_TYPE; + + + typedef struct _pw3270ApplicationClass pw3270ApplicationClass; + typedef struct _pw3270Application pw3270Application; + + GType pw3270Application_get_type(); + GtkApplication * pw3270_application_new(const gchar *application_id, GApplicationFlags flags); + PW3270_UI_TYPE pw3270_application_get_ui_type(GApplication *app); + + G_END_DECLS + + +#endif // PW3270_WINDOW_H_INCLUDED diff --git a/src/include/pw3270/window.h b/src/include/pw3270/window.h index 07a59b4..f9629e2 100644 --- a/src/include/pw3270/window.h +++ b/src/include/pw3270/window.h @@ -53,7 +53,6 @@ #define PW3270_APPLICATION_WINDOW_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), \ GTK_TYPE_APPLICATION_WINDOW, pw3270ApplicationWindowClass)) - typedef struct _pw3270ApplicationWindowClass pw3270ApplicationWindowClass; typedef struct _pw3270ApplicationWindow pw3270ApplicationWindow; diff --git a/src/objects/window/application.c b/src/objects/window/application.c new file mode 100644 index 0000000..982ede4 --- /dev/null +++ b/src/objects/window/application.c @@ -0,0 +1,159 @@ +/* + * "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) + * + * References: + * + * https://fossies.org/linux/gtk+/examples/plugman.c + * + */ + + #include "private.h" + #include + + struct _pw3270ApplicationClass { + GtkApplicationClass parent_class; + }; + + struct _pw3270Application { + GtkApplication parent; + }; + + static void startup(GApplication * application); + static void activate(GApplication * application); + static void open(GApplication * application, GFile **files, gint n_files, const gchar *hint); + + G_DEFINE_TYPE(pw3270Application, pw3270Application, GTK_TYPE_APPLICATION); + + static void pw3270Application_class_init(pw3270ApplicationClass *klass) { + + GApplicationClass *application_class = G_APPLICATION_CLASS(klass); + + application_class->startup = startup; + application_class->activate = activate; + application_class->open = open; + + } + + static void pw3270Application_init(pw3270Application *app) { + + + } + + GtkApplication * pw3270_application_new(const gchar *application_id, GApplicationFlags flags) { + + return g_object_new( + PW3270_TYPE_APPLICATION, + "application-id", application_id, + "flags", G_APPLICATION_HANDLES_OPEN, + NULL); + + } + + static void action_activated(GSimpleAction * action, GVariant *parameter, gpointer application) { + + debug("%s",__FUNCTION__); + + } + + void startup(GApplication *application) { + + G_APPLICATION_CLASS(pw3270Application_parent_class)->startup(application); + + // + // Setup application default actions. + // + static GActionEntry app_entries[] = { + { + "app.about", + action_activated, + NULL, + NULL, + NULL + }, + { + "app.preferences", + action_activated, + NULL, + NULL, + NULL + }, + { + "app.quit", + action_activated, + NULL, + NULL, + NULL + } + }; + + g_action_map_add_action_entries( + G_ACTION_MAP(application), + app_entries, + G_N_ELEMENTS(app_entries), + application + ); + + // + // Setup application menus + // + GtkBuilder * builder = gtk_builder_new_from_file("ui/application.xml"); + gtk_application_set_app_menu(GTK_APPLICATION (application), G_MENU_MODEL(gtk_builder_get_object (builder, "app-menu"))); + + if(pw3270_application_get_ui_type(application) == PW3270_UI_STYLE_CLASSICAL) + gtk_application_set_menubar(GTK_APPLICATION (application), G_MENU_MODEL(gtk_builder_get_object (builder, "menubar"))); + + g_object_unref(builder); + + } + + void activate(GApplication *application) { + + GtkWidget * window = pw3270_application_window_new(GTK_APPLICATION(application)); + + gtk_application_window_set_show_menubar(GTK_APPLICATION_WINDOW(window),TRUE); + + // Create terminal widget + pw3270_terminal_new(window); + pw3270_terminal_new(window); + + // Setup and show main window + gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); + gtk_window_set_default_size (GTK_WINDOW (window), 800, 500); + + // gtk_widget_show_all(window); + gtk_window_present(GTK_WINDOW(window)); + + } + + void open(GApplication *application, GFile **files, gint n_files, const gchar *hint) { + + } + + PW3270_UI_TYPE pw3270_application_get_ui_type(GApplication *app) { + return PW3270_UI_STYLE_GNOME; + } + diff --git a/src/objects/window/application.xml b/src/objects/window/application.xml deleted file mode 100644 index 5310c44..0000000 --- a/src/objects/window/application.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - -
- - About PW3270 - app.about - - - Preferences - app.help - - - Quit - app.quit - -
-
- - - - _Edit -
- - _Copy - app.quit - - - _Paste - app.quit - -
-
- - Plugins - app.quit - -
-
- - - _View -
- - _Fullscreen - app.quit - -
-
- -
-
diff --git a/src/objects/window/init.c b/src/objects/window/init.c deleted file mode 100644 index e5236bc..0000000 --- a/src/objects/window/init.c +++ /dev/null @@ -1,64 +0,0 @@ -/* - * "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 - - G_DEFINE_TYPE(pw3270ApplicationWindow, pw3270ApplicationWindow, GTK_TYPE_APPLICATION_WINDOW); - - static void pw3270ApplicationWindow_class_init(pw3270ApplicationWindowClass *klass) { - - } - - static void pw3270ApplicationWindow_init(pw3270ApplicationWindow *widget) { - - GtkBox * vBox = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL,0)); - - widget->notebook = GTK_NOTEBOOK(gtk_notebook_new()); - widget->terminal = pw3270_terminal_new(GTK_WIDGET(widget)); - widget->toolbar = GTK_TOOLBAR(pw3270_toolbar_new()); - - gtk_notebook_set_show_tabs(widget->notebook,FALSE); - gtk_notebook_set_show_border(widget->notebook, FALSE); - - gtk_box_pack_start(vBox,GTK_WIDGET(widget->toolbar),FALSE,TRUE,0); - gtk_box_pack_start(vBox,GTK_WIDGET(widget->notebook),TRUE,TRUE,0); - - gtk_widget_show_all(GTK_WIDGET(vBox)); - gtk_container_add(GTK_CONTAINER(widget),GTK_WIDGET(vBox)); - - } - - GtkWidget * pw3270_application_window_new(GtkApplication * application) { - - g_return_val_if_fail(GTK_IS_APPLICATION(application), NULL); - return g_object_new(PW3270_TYPE_APPLICATION_WINDOW, "application", application, NULL); - - } - diff --git a/src/objects/window/testprogram/testprogram.c b/src/objects/window/testprogram/testprogram.c index 871eb96..7337a5f 100644 --- a/src/objects/window/testprogram/testprogram.c +++ b/src/objects/window/testprogram/testprogram.c @@ -29,7 +29,7 @@ */ #include - #include + #include #include #include #include @@ -37,25 +37,6 @@ /*---[ Implement ]----------------------------------------------------------------------------------*/ - static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { - - GtkWidget * window = pw3270_application_window_new(app); - - gtk_application_window_set_show_menubar(GTK_APPLICATION_WINDOW(window),TRUE); - - // Create terminal widget - pw3270_terminal_new(window); - pw3270_terminal_new(window); - - // Setup and show main window - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); - gtk_window_set_default_size (GTK_WINDOW (window), 800, 500); - - // gtk_widget_show_all(window); - gtk_window_present(GTK_WINDOW(window)); - -} - GtkWidget * pw3270_toolbar_new(void) { static const struct _item { @@ -89,86 +70,16 @@ GtkWidget * pw3270_toolbar_new(void) { return toolbar; } -static void preferences_activated(GSimpleAction * action, GVariant *parameter, gpointer application) { - - debug("%s",__FUNCTION__); - -} - -static void quit_activated(GSimpleAction * action, GVariant *parameter, gpointer application) { - - debug("%s",__FUNCTION__); - -} - -void startup(GtkApplication *app) { - - static GActionEntry app_entries[] = { - { - "app.about", - quit_activated, - NULL, - NULL, - NULL - }, - { - "app.help", - quit_activated, - NULL, - NULL, - NULL - }, - { - "app.preferences", - preferences_activated, - NULL, - NULL, - NULL - }, - { - "app.quit", - quit_activated, - NULL, - NULL, - NULL - } - }; - - g_action_map_add_action_entries( - G_ACTION_MAP(app), - app_entries, - G_N_ELEMENTS(app_entries), - app - ); - - GtkBuilder * builder = gtk_builder_new_from_file("application.xml"); - - debug("Builder: %p",builder); - - gtk_application_set_app_menu(GTK_APPLICATION (app), G_MENU_MODEL (gtk_builder_get_object (builder, "app-menu"))); - gtk_application_set_menubar(GTK_APPLICATION (app), G_MENU_MODEL (gtk_builder_get_object (builder, "menubar"))); - - g_object_unref(builder); - -} - - int main (int argc, char **argv) { GtkApplication *app; int status; - app = gtk_application_new("br.com.bb.pw3270",G_APPLICATION_HANDLES_OPEN); - - g_signal_connect (app, "activate", G_CALLBACK(activate), NULL); - g_signal_connect (app, "startup", G_CALLBACK(startup), NULL); - + app = pw3270_application_new("br.com.bb.pw3270",G_APPLICATION_HANDLES_OPEN); status = g_application_run (G_APPLICATION (app), argc, argv); g_object_unref (app); - g_message("rc=%d",status); - - return 0; + return status; } diff --git a/src/objects/window/ui/application.xml b/src/objects/window/ui/application.xml new file mode 100644 index 0000000..5310c44 --- /dev/null +++ b/src/objects/window/ui/application.xml @@ -0,0 +1,53 @@ + + + + +
+ + About PW3270 + app.about + + + Preferences + app.help + + + Quit + app.quit + +
+
+ + + + _Edit +
+ + _Copy + app.quit + + + _Paste + app.quit + +
+
+ + Plugins + app.quit + +
+
+ + + _View +
+ + _Fullscreen + app.quit + +
+
+ +
+
diff --git a/src/objects/window/window.c b/src/objects/window/window.c new file mode 100644 index 0000000..a63a891 --- /dev/null +++ b/src/objects/window/window.c @@ -0,0 +1,82 @@ +/* + * "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 + + G_DEFINE_TYPE(pw3270ApplicationWindow, pw3270ApplicationWindow, GTK_TYPE_APPLICATION_WINDOW); + + static void pw3270ApplicationWindow_class_init(pw3270ApplicationWindowClass *klass) { + + /* + window_props[PROP_UI_STYLE] = + g_param_spec_uint ( + "ui_style", // P_() + "ui_style", // P_() + _( "The application interface style" ), + PW3270_UI_STYLE_CLASSICAL, + PW3270_UI_STYLE_GNOME, + PW3270_UI_STYLE_GNOME, + G_PARAM_READABLE + ); + */ + + + } + + static void pw3270ApplicationWindow_init(pw3270ApplicationWindow *widget) { + + GtkBox * vBox = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL,0)); + + widget->notebook = GTK_NOTEBOOK(gtk_notebook_new()); + widget->terminal = pw3270_terminal_new(GTK_WIDGET(widget)); + widget->toolbar = GTK_TOOLBAR(pw3270_toolbar_new()); + + gtk_notebook_set_show_tabs(widget->notebook,FALSE); + gtk_notebook_set_show_border(widget->notebook, FALSE); + + gtk_box_pack_start(vBox,GTK_WIDGET(widget->toolbar),FALSE,TRUE,0); + gtk_box_pack_start(vBox,GTK_WIDGET(widget->notebook),TRUE,TRUE,0); + + gtk_widget_show_all(GTK_WIDGET(vBox)); + gtk_container_add(GTK_CONTAINER(widget),GTK_WIDGET(vBox)); + + } + + GtkWidget * pw3270_application_window_new(GtkApplication * application) { + + g_return_val_if_fail(GTK_IS_APPLICATION(application), NULL); + return g_object_new( + PW3270_TYPE_APPLICATION_WINDOW, + "application", application, + NULL); + + + } + diff --git a/src/objects/window/window.cbp b/src/objects/window/window.cbp index c00e20d..05a086c 100644 --- a/src/objects/window/window.cbp +++ b/src/objects/window/window.cbp @@ -39,9 +39,10 @@ + - + @@ -51,6 +52,9 @@ + + -- libgit2 0.21.2