46 static gpointer parent_class = NULL;
51 static void gnc_plugin_page_finalize (GObject *
object);
52 static void gnc_plugin_page_set_property (GObject *
object,
56 static void gnc_plugin_page_get_property (GObject *
object,
84 static guint signals[LAST_SIGNAL] = { 0 };
92 GtkUIManager *ui_merge;
98 gboolean use_new_window;
101 gchar *page_long_name;
104 gchar *statusbar_text;
107 #define GNC_PLUGIN_PAGE_GET_PRIVATE(o) \
108 (G_TYPE_INSTANCE_GET_PRIVATE ((o), GNC_TYPE_PLUGIN_PAGE, GncPluginPagePrivate))
113 static GType gnc_plugin_page_type = 0;
115 if (gnc_plugin_page_type == 0)
117 static const GTypeInfo our_info =
123 (GClassInitFunc) gnc_plugin_page_class_init,
128 (GInstanceInitFunc) gnc_plugin_page_init,
131 gnc_plugin_page_type = g_type_register_static (G_TYPE_OBJECT,
136 return gnc_plugin_page_type;
151 g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (plugin_page), NULL);
153 klass = GNC_PLUGIN_PAGE_GET_CLASS (plugin_page);
154 g_return_val_if_fail (klass != NULL, NULL);
166 g_object_ref(widget);
180 g_return_if_fail (GNC_IS_PLUGIN_PAGE (plugin_page));
182 klass = GNC_PLUGIN_PAGE_GET_CLASS (plugin_page);
183 g_return_if_fail (klass != NULL);
195 g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
218 const gchar *group_name)
222 g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
223 g_return_if_fail (key_file != NULL);
224 g_return_if_fail (group_name != NULL);
227 klass = GNC_PLUGIN_PAGE_GET_CLASS (page);
228 g_return_if_fail (klass != NULL);
229 g_return_if_fail (klass->
save_page != NULL);
231 klass->
save_page(page, key_file, group_name);
241 const gchar *page_type,
243 const gchar *page_group)
249 ENTER(
"type %s, keyfile %p, group %s", page_type, key_file, page_group);
250 type = g_type_from_name(page_type);
253 LEAVE(
"Cannot find type named %s", page_type);
257 klass = g_type_class_ref(type);
260 const gchar *type_name = g_type_name(type);
261 LEAVE(
"Cannot create class %s(%s)", page_type, type_name ? type_name :
"invalid type");
267 LEAVE(
"Class %shas no recreate function.", page_type);
268 g_type_class_unref(klass);
273 g_type_class_unref(klass);
282 GtkUIManager *ui_merge)
286 g_return_if_fail (GNC_IS_PLUGIN_PAGE(page));
288 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
289 priv->ui_merge = ui_merge;
292 priv->ui_description);
299 GtkUIManager *ui_merge)
303 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
305 g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
306 g_return_if_fail (priv->merge_id != 0);
309 gtk_ui_manager_remove_ui(ui_merge, priv->merge_id);
310 gtk_ui_manager_remove_action_group(ui_merge, priv->
action_group);
312 priv->ui_merge = NULL;
322 g_return_val_if_fail(GNC_IS_PLUGIN_PAGE(page), NULL);
323 g_return_val_if_fail(name != NULL, NULL);
325 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
328 return gtk_action_group_get_action (priv->
action_group, name);
338 g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (plugin_page), NULL);
340 klass = GNC_PLUGIN_PAGE_GET_CLASS (plugin_page);
341 g_return_val_if_fail (klass != NULL, NULL);
351 g_return_if_fail (GNC_IS_PLUGIN_PAGE (plugin_page));
353 g_signal_emit (G_OBJECT (plugin_page), signals[INSERTED], 0);
359 g_return_if_fail (GNC_IS_PLUGIN_PAGE (plugin_page));
361 g_signal_emit (G_OBJECT (plugin_page), signals[REMOVED], 0);
367 g_return_if_fail (GNC_IS_PLUGIN_PAGE (plugin_page));
369 g_signal_emit (G_OBJECT (plugin_page), signals[SELECTED], 0);
375 g_return_if_fail (GNC_IS_PLUGIN_PAGE (plugin_page));
377 g_signal_emit (G_OBJECT (plugin_page), signals[UNSELECTED], 0);
391 GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
393 parent_class = g_type_class_peek_parent (klass);
394 gobject_class->finalize = gnc_plugin_page_finalize;
395 gobject_class->set_property = gnc_plugin_page_set_property;
396 gobject_class->get_property = gnc_plugin_page_get_property;
403 g_object_class_install_property
406 g_param_spec_string (
"page-name",
408 "The name of this page. This value is "
409 "used to generate the notebook tab and "
410 "menu items, and also the window title "
411 "when this page is visible.",
415 g_object_class_install_property
418 g_param_spec_string (
"page-color",
420 "The color of this page. This value is "
421 "used to generate the notebook tab color "
422 "when this page is visible.",
426 g_object_class_install_property
429 g_param_spec_string (
"page-uri",
431 "The uri for this page.",
435 g_object_class_install_property
438 g_param_spec_string (
"statusbar-text",
440 "The text to be displayed in the statusbar "
441 "at the bottom of the window when this page "
446 g_object_class_install_property
449 g_param_spec_boolean (
"use-new-window",
451 "When TRUE a new top level window will be "
452 "created to hold this page.",
456 g_object_class_install_property
459 g_param_spec_string (
"ui-description",
460 "UI Description File",
461 "The filename containing the XML data that "
462 "describes this pages menus and toolbars.",
466 g_object_class_install_property
469 g_param_spec_object (
"ui-merge",
471 "A pointer to the GtkUIManager object that "
472 "represents this pages menu hierarchy.",
476 g_object_class_install_property
479 g_param_spec_object (
"action-group",
481 "A pointer to the GtkActionGroup object that "
482 "represents this pages available menu/toolbar "
484 GTK_TYPE_ACTION_GROUP,
490 signals[INSERTED] = g_signal_new (
"inserted",
491 G_OBJECT_CLASS_TYPE (klass),
495 g_cclosure_marshal_VOID__VOID,
498 signals[REMOVED] = g_signal_new (
"removed",
499 G_OBJECT_CLASS_TYPE (klass),
503 g_cclosure_marshal_VOID__VOID,
506 signals[SELECTED] = g_signal_new (
"selected",
507 G_OBJECT_CLASS_TYPE (klass),
511 g_cclosure_marshal_VOID__VOID,
514 signals[UNSELECTED] = g_signal_new (
"unselected",
515 G_OBJECT_CLASS_TYPE (klass),
519 g_cclosure_marshal_VOID__VOID,
538 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
539 priv->page_name = NULL;
540 priv->page_color = NULL;
558 gnc_plugin_page_finalize (GObject *
object)
563 page = GNC_PLUGIN_PAGE (
object);
565 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
567 g_free(priv->page_name);
568 if (priv->page_color)
569 g_free(priv->page_color);
572 if (priv->statusbar_text)
573 g_free(priv->statusbar_text);
577 g_list_free(priv->books);
584 G_OBJECT_CLASS (parent_class)->finalize (
object);
615 gnc_plugin_page_get_property (GObject *
object,
623 g_return_if_fail(GNC_IS_PLUGIN_PAGE(
object));
625 page = GNC_PLUGIN_PAGE(
object);
626 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
630 g_value_set_string (value, priv->page_name);
632 case PROP_PAGE_COLOR:
633 g_value_set_string (value, priv->page_color);
636 g_value_set_string (value, priv->uri);
638 case PROP_STATUSBAR_TEXT:
639 g_value_set_string (value, priv->statusbar_text);
641 case PROP_USE_NEW_WINDOW:
642 g_value_set_boolean (value, priv->use_new_window);
644 case PROP_UI_DESCRIPTION:
645 g_value_set_string (value, priv->ui_description);
648 g_value_take_object (value, priv->ui_merge);
650 case PROP_ACTION_GROUP:
654 G_OBJECT_WARN_INVALID_PROPERTY_ID (
object, prop_id, pspec);
677 gnc_plugin_page_set_property (GObject *
object,
684 g_return_if_fail(GNC_IS_PLUGIN_PAGE(
object));
686 page = GNC_PLUGIN_PAGE(
object);
693 case PROP_PAGE_COLOR:
699 case PROP_STATUSBAR_TEXT:
702 case PROP_USE_NEW_WINDOW:
705 case PROP_UI_DESCRIPTION:
709 G_OBJECT_WARN_INVALID_PROPERTY_ID (
object, prop_id, pspec);
724 g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
725 g_return_if_fail (book != NULL);
727 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
728 priv->books = g_list_append(priv->books, book);
739 g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), FALSE);
740 g_return_val_if_fail (book != NULL, FALSE);
742 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
743 for (item = priv->books; item; item = g_list_next(item))
745 if (item->data == book)
760 g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), FALSE);
762 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
763 return (priv->books != NULL);
772 g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), NULL);
785 g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), NULL);
787 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
788 return priv->page_name;
800 g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
802 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
804 g_free(priv->page_name);
805 priv->page_name = g_strdup(name);
808 klass = GNC_PLUGIN_PAGE_GET_CLASS (page);
824 g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), NULL);
826 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
827 return priv->page_long_name;
838 g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
840 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
841 if (priv->page_long_name)
842 g_free(priv->page_long_name);
843 priv->page_long_name = g_strdup(name);
853 g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), NULL);
855 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
856 return priv->page_color;
866 g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
868 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
869 if (priv->page_color)
870 g_free(priv->page_color);
872 priv->page_color = g_strdup(color);
882 g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), NULL);
884 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
895 g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
897 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
900 priv->uri = g_strdup(name);
910 g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), NULL);
912 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
913 return priv->statusbar_text;
923 g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
925 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
926 if (priv->statusbar_text)
927 g_free(priv->statusbar_text);
928 priv->statusbar_text = g_strdup(message);
938 g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), FALSE);
940 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
941 return priv->use_new_window;
954 g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
956 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
957 priv->use_new_window = use_new;
967 g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), FALSE);
969 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
970 return priv->ui_description;
978 const char *ui_filename)
982 g_return_if_fail(GNC_IS_PLUGIN_PAGE(page));
984 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
985 if (priv->ui_description)
986 g_free(priv->ui_description);
987 priv->ui_description = g_strdup(ui_filename);
997 g_return_val_if_fail(GNC_IS_PLUGIN_PAGE(page), NULL);
999 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
1000 return priv->ui_merge;
1010 g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), NULL);
1011 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
1021 GtkActionGroup *group;
1023 priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
1024 group = gtk_action_group_new(group_name);
1035 if (!GNC_IS_PLUGIN_PAGE(page))
1038 if (!GNC_PLUGIN_PAGE_GET_CLASS(page)->finish_pending)
1040 return (GNC_PLUGIN_PAGE_GET_CLASS(page)->finish_pending)(page);
gboolean gnc_plugin_page_finish_pending(GncPluginPage *page)
GtkWidget * gnc_plugin_page_get_window(GncPluginPage *page)
gboolean gnc_plugin_page_has_books(GncPluginPage *page)
gboolean gnc_plugin_page_get_use_new_window(GncPluginPage *page)
GType gnc_plugin_page_get_type(void)
void gnc_plugin_page_destroy_widget(GncPluginPage *plugin_page)
GncPluginPage *(* recreate_page)(GtkWidget *window, GKeyFile *file, const gchar *group)
void gnc_plugin_page_set_statusbar_text(GncPluginPage *page, const char *name)
void(* page_name_changed)(GncPluginPage *plugin_page, const gchar *name)
void gnc_gobject_tracking_remember(GObject *object, GObjectClass *klass)
const gchar * gnc_plugin_page_get_page_long_name(GncPluginPage *page)
void gnc_gobject_tracking_forget(GObject *object)
struct _GncPluginPagePrivate GncPluginPagePrivate
void gnc_plugin_page_set_uri(GncPluginPage *page, const char *name)
void gnc_plugin_page_set_ui_description(GncPluginPage *page, const char *ui_filename)
const gchar * gnc_plugin_page_get_page_name(GncPluginPage *page)
void gnc_plugin_page_merge_actions(GncPluginPage *page, GtkUIManager *ui_merge)
const gchar * gnc_plugin_page_get_page_color(GncPluginPage *page)
void gnc_plugin_page_set_page_long_name(GncPluginPage *page, const char *name)
const gchar * gnc_plugin_page_get_ui_description(GncPluginPage *page)
GtkActionGroup * gnc_plugin_page_get_action_group(GncPluginPage *page)
#define ENTER(format, args...)
GtkActionGroup * action_group
struct GncPluginPage GncPluginPage
void gnc_plugin_page_unmerge_actions(GncPluginPage *page, GtkUIManager *ui_merge)
GtkWidget * gnc_plugin_page_create_widget(GncPluginPage *plugin_page)
const gchar * gnc_plugin_page_get_uri(GncPluginPage *page)
void gnc_plugin_page_set_use_new_window(GncPluginPage *page, gboolean use_new)
void(* destroy_widget)(GncPluginPage *plugin_page)
gboolean gnc_plugin_page_has_book(GncPluginPage *page, QofBook *book)
const gchar * plugin_name
Functions for adding plugins to a GnuCash window.
const gchar * gnc_plugin_page_get_statusbar_text(GncPluginPage *page)
void gnc_plugin_page_save_page(GncPluginPage *page, GKeyFile *key_file, const gchar *group_name)
All type declarations for the whole Gnucash engine.
GtkAction * gnc_plugin_page_get_action(GncPluginPage *page, const gchar *name)
void gnc_plugin_page_set_page_color(GncPluginPage *page, const char *color)
GtkWidget *(* create_widget)(GncPluginPage *plugin_page)
Functions for adding plugins to a GnuCash window.
#define LEAVE(format, args...)
void(* save_page)(GncPluginPage *page, GKeyFile *file, const gchar *group)
void gnc_plugin_page_set_page_name(GncPluginPage *page, const char *name)
void gnc_plugin_page_add_book(GncPluginPage *page, QofBook *book)
GtkActionGroup * gnc_plugin_page_create_action_group(GncPluginPage *page, const gchar *group_name)
GtkUIManager * gnc_plugin_page_get_ui_merge(GncPluginPage *page)
void gnc_gtk_action_group_set_translation_domain(GtkActionGroup *action_group, const gchar *domain)
GncPluginPage * gnc_plugin_page_recreate_page(GtkWidget *window, const gchar *page_type, GKeyFile *key_file, const gchar *page_group)
void gnc_plugin_page_show_summarybar(GncPluginPage *page, gboolean visible)
const gchar * QofLogModule
const gchar * gnc_plugin_page_get_plugin_name(GncPluginPage *plugin_page)