parent
51ae076bf8
commit
a04c4ea1e4
|
@ -11,6 +11,7 @@ vn_include_HEADERS = \
|
|||
vn-column.h \
|
||||
vn-login.h \
|
||||
vn-gui.h \
|
||||
vn-window.h \
|
||||
vn-mod.h \
|
||||
vn-form.h \
|
||||
vn-grid-model.h \
|
||||
|
@ -20,6 +21,9 @@ vn_include_HEADERS = \
|
|||
field/field.h \
|
||||
column/column.h
|
||||
|
||||
noinst_HEADERS = \
|
||||
vn-gui-private.h
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir) \
|
||||
$(DEFINES) \
|
||||
|
@ -37,6 +41,7 @@ libvn_files = \
|
|||
vn-column.c \
|
||||
vn-login.c \
|
||||
vn-gui.c \
|
||||
vn-window.c \
|
||||
vn-mod.c \
|
||||
vn-form.c \
|
||||
vn-grid-model.c \
|
||||
|
@ -52,6 +57,7 @@ glade_files = \
|
|||
$(top_srcdir)/vn/glade/vn-batch.c
|
||||
libvn_la_SOURCES = \
|
||||
$(libvn_files) \
|
||||
$(noinst_HEADERS) \
|
||||
$(glade_files)
|
||||
|
||||
pkgconfig_DATA = vn.pc
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Copyright (C) 2012 - Juan Ferrer Toribio
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef VN_GUI_PRIVATE_H
|
||||
#define VN_GUI_PRIVATE_H
|
||||
|
||||
#include "vn-gui.h"
|
||||
|
||||
VnWindow * vn_gui_add_window (VnGui * obj, VnWindow * window);
|
||||
|
||||
gboolean vn_gui_on_last_window_deleted (GtkWidget * widget, GdkEvent * event, VnWindow * window);
|
||||
void vn_gui_on_window_destroyed (GtkWindow * widget, VnWindow * window);
|
||||
gboolean vn_gui_on_window_focused (GtkWidget * widget, GdkEvent * event, VnWindow * window);
|
||||
|
||||
GtkNotebook * vn_gui_on_page_detached (GtkNotebook * old_notebook, GtkWidget * page, gint x, gint y, VnWindow * window);
|
||||
void vn_gui_on_switch_page (GtkNotebook * notebook, VnForm * form, guint num, VnWindow * window);
|
||||
void vn_gui_on_page_removed (GtkNotebook * notebook, GtkWidget * page, guint num, VnWindow * window);
|
||||
void vn_gui_on_page_added (GtkNotebook * notebook, GtkWidget * page, guint num, VnWindow * window);
|
||||
|
||||
#endif
|
91
vn/vn-gui.c
91
vn/vn-gui.c
|
@ -142,17 +142,6 @@ static void gui_data_free (GuiData * gui_data)
|
|||
g_free (gui_data);
|
||||
}
|
||||
|
||||
static void vn_gui_free_window (VnGui * obj, VnWindow * window)
|
||||
{
|
||||
g_signal_handlers_disconnect_by_func (window->widget,
|
||||
vn_gui_on_window_destroyed, window);
|
||||
g_signal_handlers_disconnect_by_func (window->notebook,
|
||||
vn_gui_on_page_removed, window);
|
||||
|
||||
gtk_widget_destroy (GTK_WIDGET (window->widget));
|
||||
g_free (window);
|
||||
}
|
||||
|
||||
/*
|
||||
* Validates a module definition file at @path against the DTD
|
||||
*/
|
||||
|
@ -464,22 +453,19 @@ static void vn_gui_set_menu_accels (VnGui * obj, GMenuModel * menu, gboolean ena
|
|||
}
|
||||
}
|
||||
|
||||
static VnWindow * vn_gui_add_window (VnGui * obj, GtkWindow * widget, GtkNotebook * notebook)
|
||||
VnWindow * vn_gui_add_window (VnGui * obj, VnWindow * window)
|
||||
{
|
||||
GSList * n;
|
||||
GtkWidget * button;
|
||||
VnWindow * window = g_new (VnWindow, 1);
|
||||
GtkWindow * widget = window->widget;
|
||||
|
||||
window->obj = obj;
|
||||
window->widget = widget;
|
||||
window->notebook = notebook;
|
||||
window->active_form = NULL;
|
||||
window->merge_id = 0;
|
||||
|
||||
obj->windows = g_slist_prepend (obj->windows, window);
|
||||
|
||||
gtk_application_add_window (obj->app, widget);
|
||||
gtk_notebook_set_group_name (notebook,
|
||||
gtk_notebook_set_group_name (window->notebook,
|
||||
g_application_get_application_id (G_APPLICATION (obj->app)));
|
||||
|
||||
// Setting header and window menu
|
||||
|
@ -492,7 +478,7 @@ static VnWindow * vn_gui_add_window (VnGui * obj, GtkWindow * widget, GtkNoteboo
|
|||
gtk_window_set_titlebar (widget, GTK_WIDGET (window->header));
|
||||
|
||||
button = gtk_menu_button_new ();
|
||||
g_action_map_add_action_entries (G_ACTION_MAP (window->widget),
|
||||
g_action_map_add_action_entries (G_ACTION_MAP (widget),
|
||||
win_entries, G_N_ELEMENTS (win_entries), window);
|
||||
gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button), obj->main_menu);
|
||||
gtk_button_set_image (GTK_BUTTON (button),
|
||||
|
@ -511,7 +497,7 @@ static VnWindow * vn_gui_add_window (VnGui * obj, GtkWindow * widget, GtkNoteboo
|
|||
|
||||
// Loading the modules actions
|
||||
|
||||
g_action_map_add_action_entries (G_ACTION_MAP (window->widget),
|
||||
g_action_map_add_action_entries (G_ACTION_MAP (widget),
|
||||
open_action, G_N_ELEMENTS (open_action), window);
|
||||
|
||||
for (n = obj->modules; n; n = n->next)
|
||||
|
@ -519,7 +505,7 @@ static VnWindow * vn_gui_add_window (VnGui * obj, GtkWindow * widget, GtkNoteboo
|
|||
gint size;
|
||||
VnMod * mod = VN_MOD (n->data);
|
||||
const GActionEntry * actions = vn_mod_get_actions (mod, &size);
|
||||
g_action_map_add_action_entries (G_ACTION_MAP (window->widget),
|
||||
g_action_map_add_action_entries (G_ACTION_MAP (widget),
|
||||
actions, size, mod);
|
||||
}
|
||||
|
||||
|
@ -586,7 +572,7 @@ static void vn_gui_close (VnGui * obj)
|
|||
);
|
||||
|
||||
for (n = obj->windows; n; n = n->next)
|
||||
vn_gui_free_window (obj, n->data);
|
||||
g_object_unref (n->data);
|
||||
|
||||
g_slist_free (obj->windows);
|
||||
obj->windows = NULL;
|
||||
|
@ -715,8 +701,8 @@ gboolean vn_gui_on_last_window_deleted (GtkWidget * widget, GdkEvent * event, Vn
|
|||
*/
|
||||
void vn_gui_on_window_destroyed (GtkWindow * widget, VnWindow * window)
|
||||
{
|
||||
VnGui * obj = window->obj;
|
||||
vn_gui_free_window (obj, window);
|
||||
VnGui * obj = window->gui;
|
||||
g_object_unref (window);
|
||||
obj->windows = g_slist_remove (obj->windows, window);
|
||||
}
|
||||
|
||||
|
@ -739,7 +725,7 @@ gboolean vn_gui_on_window_focused (GtkWidget * widget, GdkEvent * event, VnWindo
|
|||
GtkNotebook * vn_gui_on_page_detached (GtkNotebook * old_notebook,
|
||||
GtkWidget * page, gint x, gint y, VnWindow * window)
|
||||
{
|
||||
VnWindow * new_window = vn_gui_create_window (window->obj, x, y);
|
||||
VnWindow * new_window = vn_window_new (window->gui, x, y);
|
||||
return (window) ? new_window->notebook : NULL;
|
||||
}
|
||||
|
||||
|
@ -832,12 +818,8 @@ void vn_gui_on_open_form_activated (GSimpleAction * a, GVariant * p, gpointer ob
|
|||
void vn_gui_on_new_window_activated (GSimpleAction * a, GVariant * v, gpointer obj)
|
||||
{
|
||||
gint x , y;
|
||||
VnWindow * w;
|
||||
VnGui * o = obj;
|
||||
|
||||
gtk_window_get_position (o->active_window->widget, &x, &y);
|
||||
w = vn_gui_create_window (obj, x + 100, y + 100);
|
||||
gtk_window_resize (w->widget, 500, 500);
|
||||
gtk_window_get_position (VN_GUI (obj)->active_window->widget, &x, &y);
|
||||
vn_window_new (obj, x + 100, y + 100);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1013,7 +995,7 @@ void vn_gui_open (VnGui * obj)
|
|||
height = g_key_file_get_integer (config, windows[m], "height", NULL);
|
||||
maximized = g_key_file_get_boolean (config, windows[m], "maximized", NULL);
|
||||
|
||||
window = vn_gui_create_window (obj, x, y);
|
||||
window = vn_window_new (obj, x, y);
|
||||
gtk_window_resize (window->widget, width, height);
|
||||
|
||||
if (maximized)
|
||||
|
@ -1031,10 +1013,7 @@ void vn_gui_open (VnGui * obj)
|
|||
g_strfreev (windows);
|
||||
}
|
||||
else
|
||||
{
|
||||
VnWindow * window = vn_gui_create_window (obj, 100, 100);
|
||||
gtk_window_resize (window->widget, 500, 400);
|
||||
}
|
||||
vn_window_new (obj, 100, 100);
|
||||
|
||||
g_key_file_free (config);
|
||||
|
||||
|
@ -1075,7 +1054,7 @@ void vn_gui_save (VnGui * obj)
|
|||
|
||||
for (m = obj->windows; m; m = m->next)
|
||||
{
|
||||
window = (VnWindow *) m->data;
|
||||
window = m->data;
|
||||
group = g_strdup_printf ("window%d", i++);
|
||||
|
||||
// Saving the window position and size
|
||||
|
@ -1113,46 +1092,6 @@ void vn_gui_save (VnGui * obj)
|
|||
g_key_file_free (config);
|
||||
}
|
||||
|
||||
/**
|
||||
* vn_gui_create_window:
|
||||
* @obj: the #VnGui
|
||||
* @x: the x coordinate
|
||||
* @y: the y coordinate
|
||||
*
|
||||
* Creates a new window.
|
||||
*
|
||||
* Return value: VnWindow.
|
||||
**/
|
||||
VnWindow * vn_gui_create_window (VnGui * obj, gint x, gint y)
|
||||
{
|
||||
GtkBuilder * builder;
|
||||
VnWindow * window = NULL;
|
||||
GError * err = NULL;
|
||||
|
||||
g_return_val_if_fail (VN_IS_GUI (obj), NULL);
|
||||
|
||||
builder = gtk_builder_new ();
|
||||
|
||||
if (gtk_builder_add_from_file (builder, MAIN_UI, &err))
|
||||
{
|
||||
GtkWindow * widget = gtk_builder_get (builder, "window");
|
||||
GtkNotebook * notebook = gtk_builder_get (builder, "notebook");
|
||||
gtk_window_move (widget, x, y);
|
||||
|
||||
window = vn_gui_add_window (obj, widget, notebook);
|
||||
window->about = gtk_builder_get (builder, "about");
|
||||
gtk_builder_connect_signals (builder, window);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning ("VnGui: %s", err->message);
|
||||
g_error_free (err);
|
||||
}
|
||||
|
||||
g_object_unref (builder);
|
||||
return window;
|
||||
}
|
||||
|
||||
/**
|
||||
* vn_gui_open_form_at_window:
|
||||
* @obj: the #VnGui
|
||||
|
|
|
@ -35,6 +35,7 @@ typedef struct _VnWindow VnWindow;
|
|||
|
||||
#include "vn-mod.h"
|
||||
#include "vn-form.h"
|
||||
#include "vn-window.h"
|
||||
|
||||
/*
|
||||
* @windows: (element-type VnWindow):
|
||||
|
@ -69,7 +70,6 @@ GType vn_gui_get_type ();
|
|||
VnGui * vn_gui_new (GtkApplication * app, DbConn * conn);
|
||||
void vn_gui_open (VnGui * obj);
|
||||
void vn_gui_save (VnGui * obj);
|
||||
VnWindow * vn_gui_create_window (VnGui * obj, gint x, gint y);
|
||||
VnForm * vn_gui_open_form_at_window (VnGui * obj, const gchar * form_name, VnWindow * window);
|
||||
VnForm * vn_gui_open_form (VnGui * obj, const gchar * form_name);
|
||||
void vn_gui_close_form (VnGui * obj, VnForm * form);
|
||||
|
|
|
@ -0,0 +1,110 @@
|
|||
/*
|
||||
* Copyright (C) 2012 - Juan Ferrer Toribio
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "vn-window.h"
|
||||
#include "vn-gui-private.h"
|
||||
|
||||
#define MAIN_UI _GUI_DIR"/main.glade"
|
||||
|
||||
#define gtk_builder_get(builder, id) ((gpointer) gtk_builder_get_object (builder, id))
|
||||
|
||||
/**
|
||||
* SECTION: vn-window
|
||||
* @Short_description: The windows used by hedera
|
||||
* @Title: VnWindow
|
||||
*
|
||||
* The windows used by hedera.
|
||||
*/
|
||||
G_DEFINE_TYPE (VnWindow, vn_window, G_TYPE_OBJECT);
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Public
|
||||
|
||||
/**
|
||||
* vn_window_new:
|
||||
* @gui: the #VnGui
|
||||
* @x: the global x coordinate position
|
||||
* @y: the global y coordinate position
|
||||
*
|
||||
* Creates a new window at (@x, @y).
|
||||
*
|
||||
* Return value: #VnWindow.
|
||||
**/
|
||||
VnWindow * vn_window_new (VnGui * gui, gint x, gint y)
|
||||
{
|
||||
VnWindow * self;
|
||||
GtkBuilder * builder;
|
||||
GError * err = NULL;
|
||||
|
||||
g_return_val_if_fail (VN_IS_GUI (gui), NULL);
|
||||
|
||||
self = g_object_new (VN_TYPE_WINDOW, NULL);
|
||||
self->gui = g_object_ref (gui);
|
||||
builder = gtk_builder_new ();
|
||||
|
||||
if (gtk_builder_add_from_file (builder, MAIN_UI, &err))
|
||||
{
|
||||
self->widget = gtk_builder_get (builder, "window");
|
||||
self->notebook = gtk_builder_get (builder, "notebook");
|
||||
gtk_window_move (self->widget, x, y);
|
||||
|
||||
self = vn_gui_add_window (gui, self);
|
||||
self->about = gtk_builder_get (builder, "about");
|
||||
gtk_builder_connect_signals (builder, self);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning ("VnGui: %s", err->message);
|
||||
g_error_free (err);
|
||||
}
|
||||
|
||||
g_object_unref (builder);
|
||||
return self;
|
||||
}
|
||||
|
||||
//+++++++++++++++++++++++++++++++++++++++++++++++++++ Class
|
||||
|
||||
static void vn_window_init (VnWindow * self)
|
||||
{
|
||||
self->gui = NULL;
|
||||
self->widget = NULL;
|
||||
self->about = NULL;
|
||||
self->header = NULL;
|
||||
self->menu_button = NULL;
|
||||
self->spinner = NULL;
|
||||
self->notebook = NULL;
|
||||
self->active_form = NULL;
|
||||
self->maximized = FALSE;
|
||||
}
|
||||
|
||||
static void vn_window_finalize (VnWindow * self)
|
||||
{
|
||||
g_signal_handlers_disconnect_by_func (self->widget,
|
||||
vn_gui_on_window_destroyed, self);
|
||||
g_signal_handlers_disconnect_by_func (self->notebook,
|
||||
vn_gui_on_page_removed, self);
|
||||
|
||||
gtk_widget_destroy (GTK_WIDGET (self->widget));
|
||||
g_object_unref (self->gui);
|
||||
|
||||
G_OBJECT_CLASS (vn_window_parent_class)->finalize (G_OBJECT (self));
|
||||
}
|
||||
|
||||
static void vn_window_class_init (VnWindowClass * klass)
|
||||
{
|
||||
GObjectClass * k = G_OBJECT_CLASS (klass);
|
||||
k->finalize = (GObjectFinalizeFunc) vn_window_finalize;
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
* Copyright (C) 2012 - Juan Ferrer Toribio
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef VN_WINDOW_H
|
||||
#define VN_WINDOW_H
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#define VN_TYPE_WINDOW (vn_window_get_type ())
|
||||
#define VN_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, VN_TYPE_WINDOW, VnWindow))
|
||||
#define VN_IS_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj, VN_TYPE_WINDOW))
|
||||
#define VN_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST (klass, VN_TYPE_WINDOW, VnWindowClass))
|
||||
#define VN_IS_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE (klass, VN_TYPE_WINDOW))
|
||||
#define VN_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (obj, VN_TYPE_WINDOW, VnWindowClass))
|
||||
|
||||
typedef struct _VnWindow VnWindow;
|
||||
typedef struct _VnWindowClass VnWindowClass;
|
||||
|
||||
#include "vn-gui.h"
|
||||
|
||||
struct _VnWindow
|
||||
{
|
||||
GObject parent;
|
||||
|
||||
VnGui * gui;
|
||||
GtkWindow * widget;
|
||||
GtkDialog * about;
|
||||
GtkHeaderBar * header;
|
||||
GtkWidget * menu_button;
|
||||
GtkWidget * spinner;
|
||||
GtkNotebook * notebook;
|
||||
VnForm * active_form;
|
||||
gboolean maximized;
|
||||
};
|
||||
|
||||
struct _VnWindowClass
|
||||
{
|
||||
GObjectClass parent;
|
||||
};
|
||||
|
||||
GType vn_window_get_type ();
|
||||
|
||||
VnWindow * vn_window_new (VnGui * gui, gint x, gint y);
|
||||
|
||||
#endif
|
Reference in New Issue