mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Do a better job enforcing placeholder accounts when a register is open
to such an account. Disable menu/toolbar items that can cause problems. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@7383 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
358333f4f5
commit
a1518276ff
@ -744,7 +744,7 @@
|
||||
|
||||
<widget>
|
||||
<class>GtkMenuItem</class>
|
||||
<name>reinitialize_transaction</name>
|
||||
<name>menu_reinitialize</name>
|
||||
<tooltip>Erase all splits except the one for this account.</tooltip>
|
||||
<signal>
|
||||
<name>activate</name>
|
||||
|
@ -125,6 +125,7 @@ struct _RegWindow
|
||||
|
||||
RegDateWindow *date_window;
|
||||
gpointer pcd;
|
||||
gboolean read_only;
|
||||
};
|
||||
GtkWidget *gnc_RegWindow_window (RegWindow *data)
|
||||
{
|
||||
@ -1188,7 +1189,7 @@ gnc_register_setup_menu_widgets(RegWindow *regData, GladeXML *xml)
|
||||
static GtkWidget *
|
||||
gnc_register_create_popup_menu (RegWindow *regData)
|
||||
{
|
||||
GtkWidget *popup;
|
||||
GtkWidget *popup, *menuitem;
|
||||
GladeXML *xml;
|
||||
|
||||
xml = gnc_glade_xml_new ("register.glade", "Check Register Popup Menu");
|
||||
@ -1210,6 +1211,14 @@ gnc_register_create_popup_menu (RegWindow *regData)
|
||||
|
||||
regData->split_popup_check = glade_xml_get_widget (xml, "popup_splits");
|
||||
|
||||
if (regData->read_only) {
|
||||
menuitem = glade_xml_get_widget (xml, "popup_delete");
|
||||
gtk_widget_set_sensitive(menuitem, FALSE);
|
||||
menuitem = glade_xml_get_widget (xml, "popup_duplicate");
|
||||
gtk_widget_set_sensitive(menuitem, FALSE);
|
||||
menuitem = glade_xml_get_widget (xml, "popup_reinitialize");
|
||||
gtk_widget_set_sensitive(menuitem, FALSE);
|
||||
}
|
||||
return popup;
|
||||
}
|
||||
|
||||
@ -1509,21 +1518,23 @@ gtk_callback_bug_workaround (gpointer argp)
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
* regWindowDetermineReadOnly *
|
||||
* gnc_reg_determine_read_only *
|
||||
* determines whether this register window should be read-only *
|
||||
* *
|
||||
* Args: regData - the register window instance *
|
||||
* Return: none *
|
||||
\********************************************************************/
|
||||
static void
|
||||
regWindowDetermineReadOnly (RegWindow *regData)
|
||||
gnc_reg_determine_read_only (RegWindow *regData)
|
||||
{
|
||||
dialog_args *args = g_malloc(sizeof(dialog_args));
|
||||
gchar *old_title, *new_title;
|
||||
SplitRegister *reg;
|
||||
GtkArg objarg;
|
||||
|
||||
switch (gnc_reg_get_placeholder(regData)) {
|
||||
case PLACEHOLDER_NONE:
|
||||
regData->read_only = FALSE;
|
||||
return;
|
||||
|
||||
case PLACEHOLDER_THIS:
|
||||
@ -1542,13 +1553,15 @@ regWindowDetermineReadOnly (RegWindow *regData)
|
||||
"of a set of accounts.");
|
||||
break;
|
||||
}
|
||||
regData->read_only = TRUE;
|
||||
|
||||
/* Put up a warning dialog */
|
||||
args->regData = regData;
|
||||
gtk_timeout_add (250, gtk_callback_bug_workaround, args); /* 0.25 seconds */
|
||||
|
||||
/* Make the contents immutable */
|
||||
gnucash_register_set_sensitive(regData->reg, FALSE);
|
||||
reg = gnc_ledger_display_get_split_register (regData->ledger);
|
||||
gnc_split_register_set_read_only (reg, TRUE);
|
||||
|
||||
/* Rename the window title */
|
||||
objarg.name = "GtkWindow::title";
|
||||
@ -1601,7 +1614,7 @@ regWindowLedger (GNCLedgerDisplay *ledger)
|
||||
SplitRegister *reg;
|
||||
RegWindow *regData;
|
||||
GtkWidget *register_window;
|
||||
GtkWidget *table_frame;
|
||||
GtkWidget *table_frame, *widget;
|
||||
gboolean show_all;
|
||||
gboolean has_date;
|
||||
GladeXML *xml;
|
||||
@ -1637,6 +1650,7 @@ regWindowLedger (GNCLedgerDisplay *ledger)
|
||||
regData->width = -1;
|
||||
|
||||
gnc_reg_set_window_name(regData);
|
||||
gnc_reg_determine_read_only(regData);
|
||||
|
||||
show_all = gnc_lookup_boolean_option ("Register",
|
||||
"Show All Transactions",
|
||||
@ -1678,6 +1692,20 @@ regWindowLedger (GNCLedgerDisplay *ledger)
|
||||
glade_xml_get_widget (xml, "menu_splits");
|
||||
|
||||
gnc_register_setup_menu_widgets(regData, xml);
|
||||
if (regData->read_only) {
|
||||
widget = glade_xml_get_widget (xml, "menu_paste");
|
||||
gtk_widget_set_sensitive(widget, FALSE);
|
||||
widget = glade_xml_get_widget (xml, "menu_cut_trans");
|
||||
gtk_widget_set_sensitive(widget, FALSE);
|
||||
widget = glade_xml_get_widget (xml, "menu_paste_trans");
|
||||
gtk_widget_set_sensitive(widget, FALSE);
|
||||
widget = glade_xml_get_widget (xml, "menu_delete");
|
||||
gtk_widget_set_sensitive(widget, FALSE);
|
||||
widget = glade_xml_get_widget (xml, "menu_duplicate");
|
||||
gtk_widget_set_sensitive(widget, FALSE);
|
||||
widget = glade_xml_get_widget (xml, "menu_reinitialize");
|
||||
gtk_widget_set_sensitive(widget, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
/* The tool bar */
|
||||
@ -1691,6 +1719,13 @@ regWindowLedger (GNCLedgerDisplay *ledger)
|
||||
id = gnc_register_option_change_callback(gnc_toolbar_change_cb, regData,
|
||||
"General", "Toolbar Buttons");
|
||||
regData->toolbar_change_callback_id = id;
|
||||
|
||||
if (regData->read_only) {
|
||||
widget = glade_xml_get_widget (xml, "toolbar_delete");
|
||||
gtk_widget_set_sensitive(widget, FALSE);
|
||||
widget = glade_xml_get_widget (xml, "toolbar_duplicate");
|
||||
gtk_widget_set_sensitive(widget, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
/* The summary bar */
|
||||
@ -1790,7 +1825,6 @@ regWindowLedger (GNCLedgerDisplay *ledger)
|
||||
gnc_reg_refresh_toolbar (regData);
|
||||
|
||||
gnc_window_adjust_for_screen (GTK_WINDOW(register_window));
|
||||
regWindowDetermineReadOnly(regData);
|
||||
|
||||
return regData;
|
||||
}
|
||||
|
@ -2327,3 +2327,9 @@ gnc_split_register_destroy (SplitRegister *reg)
|
||||
/* free the memory itself */
|
||||
g_free (reg);
|
||||
}
|
||||
|
||||
void
|
||||
gnc_split_register_set_read_only (SplitRegister *reg, gboolean read_only)
|
||||
{
|
||||
gnc_table_model_set_read_only (reg->table->model, read_only);
|
||||
}
|
||||
|
@ -163,6 +163,9 @@ void gnc_split_register_config (SplitRegister *reg,
|
||||
/* Destroy the split register. */
|
||||
void gnc_split_register_destroy (SplitRegister *reg);
|
||||
|
||||
/* Make a register window read-only. */
|
||||
void gnc_split_register_set_read_only (SplitRegister *reg, gboolean read_only);
|
||||
|
||||
/* Set the template account used by template registers */
|
||||
void gnc_split_register_set_template_account (SplitRegister *reg,
|
||||
Account *template_account);
|
||||
|
@ -2447,16 +2447,6 @@ gnucash_register_attach_popup (GnucashRegister *reg,
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
gnucash_register_set_sensitive (GnucashRegister *reg, gboolean sensitive)
|
||||
{
|
||||
g_return_if_fail (GNUCASH_IS_REGISTER(reg));
|
||||
g_return_if_fail (reg->sheet != NULL);
|
||||
|
||||
gtk_widget_set_sensitive(reg->sheet, sensitive);
|
||||
}
|
||||
|
||||
|
||||
GtkWidget *
|
||||
gnucash_register_new (Table *table)
|
||||
{
|
||||
|
@ -136,8 +136,6 @@ void gnucash_sheet_recompute_block_offsets (GnucashSheet *sheet);
|
||||
|
||||
GtkType gnucash_register_get_type (void);
|
||||
|
||||
void gnucash_register_set_sensitive (GnucashRegister *reg, gboolean sensitive);
|
||||
|
||||
/* this already has scrollbars attached */
|
||||
GtkWidget *gnucash_register_new (Table *table);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user