[Gnucash-changes] r13361 - gnucash/trunk - Provide a callback whereby the core register code can tell the upper

David Hampton hampton at cvs.gnucash.org
Wed Feb 22 10:41:18 EST 2006


Author: hampton
Date: 2006-02-22 10:41:18 -0500 (Wed, 22 Feb 2006)
New Revision: 13361
Trac: http://svn.gnucash.org/trac/changeset/13361

Modified:
   gnucash/trunk/ChangeLog
   gnucash/trunk/src/gnome/gnc-plugin-page-register.c
   gnucash/trunk/src/register/ledger-core/split-register-control.c
   gnucash/trunk/src/register/ledger-core/split-register.c
   gnucash/trunk/src/register/ledger-core/split-register.h
Log:
Provide a callback whereby the core register code can tell the upper
layers that it has moved from an expanded transaction to a collapsed
transaction.  This lets the upper layer adjust the "split" transaction
toolbar button properly.  Fixes 332165.


Modified: gnucash/trunk/ChangeLog
===================================================================
--- gnucash/trunk/ChangeLog	2006-02-22 14:22:30 UTC (rev 13360)
+++ gnucash/trunk/ChangeLog	2006-02-22 15:41:18 UTC (rev 13361)
@@ -1,3 +1,13 @@
+2006-02-22  David Hampton  <hampton at employees.org>
+
+	* src/register/ledger-core/split-register.[ch]:
+	* src/register/ledger-core/split-register-control.c:
+	* src/gnome/gnc-plugin-page-register.c: Provide a callback whereby
+	the core register code can tell the upper layers that it has moved
+	from an expanded transaction to a collapsed transaction.  This
+	lets the upper layer adjust the "split" transaction toolbar button
+	properly.  Fixes 332165.
+
 2006-02-21  David Hampton  <hampton at employees.org>
 
 	* src/gnome/gnc-plugin-page-register.c: Fix from Andreas Köhler to

Modified: gnucash/trunk/src/gnome/gnc-plugin-page-register.c
===================================================================
--- gnucash/trunk/src/gnome/gnc-plugin-page-register.c	2006-02-22 14:22:30 UTC (rev 13360)
+++ gnucash/trunk/src/gnome/gnc-plugin-page-register.c	2006-02-22 15:41:18 UTC (rev 13361)
@@ -146,6 +146,8 @@
 static void gnc_plugin_page_help_changed_cb( GNCSplitReg *gsr, GncPluginPageRegister *register_page );
 static void gnc_plugin_page_register_refresh_cb (GHashTable *changes, gpointer user_data);
 
+static void gnc_plugin_page_register_update_split_button (SplitRegister *reg, GncPluginPageRegister *page);
+
 /************************************************************/
 /*                          Actions                         */
 /************************************************************/
@@ -407,6 +409,7 @@
 	GncPluginPageRegisterPrivate *priv;
 	GncPluginPage *plugin_page;
 	GNCSplitReg *gsr;
+	SplitRegister *reg;
 	const GList *item;
 	GList *book_list;
 	gchar *label;
@@ -440,6 +443,10 @@
 	  gnc_plugin_page_add_book (plugin_page, (QofBook *)item->data);
 	// Do not free the list. It is owned by the query.
 	
+	reg = gnc_ledger_display_get_split_register(priv->ledger);
+	gnc_split_register_set_trans_collapsed_cb
+	  (reg, (GFunc)gnc_plugin_page_register_update_split_button, register_page);
+
 	priv->component_manager_id = 0;
 	return plugin_page;
 }
@@ -578,6 +585,26 @@
 
 
 static void
+gnc_plugin_page_register_update_split_button (SplitRegister *reg, GncPluginPageRegister *page)
+{
+	GtkActionGroup *action_group;
+	GtkAction *action;
+	gboolean expanded;
+
+	expanded = gnc_split_register_current_trans_expanded(reg);
+
+	action_group = gnc_plugin_page_get_action_group(GNC_PLUGIN_PAGE(page));
+	action = gtk_action_group_get_action (action_group,
+					      "SplitTransactionAction");
+
+	g_signal_handlers_block_by_func
+	  (action, gnc_plugin_page_register_cmd_expand_transaction, page);
+	gtk_toggle_action_set_active (GTK_TOGGLE_ACTION(action), expanded);
+	g_signal_handlers_unblock_by_func
+	  (action, gnc_plugin_page_register_cmd_expand_transaction, page);
+}
+
+static void
 gnc_plugin_page_register_update_toolbar (GncPluginPageRegister *page, SplitRegisterStyle style)
 {
 	GtkActionGroup *action_group;

Modified: gnucash/trunk/src/register/ledger-core/split-register-control.c
===================================================================
--- gnucash/trunk/src/register/ledger-core/split-register-control.c	2006-02-22 14:22:30 UTC (rev 13360)
+++ gnucash/trunk/src/register/ledger-core/split-register-control.c	2006-02-22 15:41:18 UTC (rev 13361)
@@ -448,7 +448,7 @@
                                             reg->style == REG_STYLE_JOURNAL);
     }
 
-    info->trans_expanded = FALSE;
+    gnc_split_register_collapse_current_trans(reg);
 
     do_refresh = TRUE;
   }

Modified: gnucash/trunk/src/register/ledger-core/split-register.c
===================================================================
--- gnucash/trunk/src/register/ledger-core/split-register.c	2006-02-22 14:22:30 UTC (rev 13360)
+++ gnucash/trunk/src/register/ledger-core/split-register.c	2006-02-22 15:41:18 UTC (rev 13361)
@@ -229,6 +229,29 @@
                                    reg->table->current_cursor_loc.vcell_loc);
 }
 
+void
+gnc_split_register_collapse_current_trans (SplitRegister *reg)
+{
+  SRInfo *info = gnc_split_register_get_info (reg);
+
+  if (!reg)
+    return;
+
+  info->trans_expanded = FALSE;
+  if (reg->expand_changed_cb)
+    (reg->expand_changed_cb)(reg, reg->expand_changed_cb_data);
+}
+
+void
+gnc_split_register_set_trans_collapsed_cb (SplitRegister *reg, GFunc cb, gpointer cb_data)
+{
+  if (!reg)
+    return;
+
+  reg->expand_changed_cb = cb;
+  reg->expand_changed_cb_data = cb_data;
+}
+
 gboolean
 gnc_split_register_current_trans_expanded (SplitRegister *reg)
 {
@@ -540,7 +563,7 @@
     info->cursor_hint_trans_split = trans_split;
     info->cursor_hint_cursor_class = CURSOR_CLASS_TRANS;
 
-    info->trans_expanded = FALSE;
+    gnc_split_register_collapse_current_trans(reg);
   }
 
   /* Refresh the GUI. */
@@ -928,7 +951,7 @@
     return;
   }
 
-  info->trans_expanded = FALSE;
+  gnc_split_register_collapse_current_trans(reg);
 
   gnc_suspend_gui_refresh ();
 
@@ -980,7 +1003,7 @@
   if (xaccSplitGetReconcile (split) == VREC)
     return;
 
-  info->trans_expanded = FALSE;
+  gnc_split_register_collapse_current_trans(reg);
 
   gnc_suspend_gui_refresh ();
 
@@ -1029,7 +1052,7 @@
   if (xaccSplitGetReconcile (split) != VREC)
     return;
 
-  info->trans_expanded = FALSE;
+  gnc_split_register_collapse_current_trans(reg);
 
   gnc_suspend_gui_refresh ();
 

Modified: gnucash/trunk/src/register/ledger-core/split-register.h
===================================================================
--- gnucash/trunk/src/register/ledger-core/split-register.h	2006-02-22 14:22:30 UTC (rev 13360)
+++ gnucash/trunk/src/register/ledger-core/split-register.h	2006-02-22 15:41:18 UTC (rev 13361)
@@ -240,6 +240,9 @@
 {
   Table * table;   /**< The table itself that implements the underlying GUI. */
 
+  GFunc expand_changed_cb;
+  gpointer expand_changed_cb_data;
+
   SplitRegisterType type;
   SplitRegisterStyle style;
 
@@ -410,6 +413,14 @@
 void gnc_split_register_expand_current_trans (SplitRegister *reg,
                                               gboolean expand);
 
+/** Mark the current transaction as collapsed, and do callbacks. */
+void gnc_split_register_collapse_current_trans (SplitRegister *reg);
+
+/** Register a callback function for when the register closes a
+ *  transaction without the user explicitly asking for this to
+ *  be changed. */
+void gnc_split_register_set_trans_collapsed_cb (SplitRegister *reg, GFunc cb, gpointer cb_data);
+
 /** Return TRUE if current trans is expanded and style is REG_STYLE_LEDGER. */
 gboolean gnc_split_register_current_trans_expanded (SplitRegister *reg);
 



More information about the gnucash-changes mailing list