From fe68be2d9a20149559c9e524497cdabec4efb71d Mon Sep 17 00:00:00 2001 From: Derek Atkins Date: Mon, 11 Feb 2002 04:32:45 +0000 Subject: [PATCH] dance a widget shuffle when rebuilding the order and invoice dialogs git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@6710 57a11ea4-9604-0410-9ed3-97b8803252fd --- src/business/business-gnome/dialog-invoice.c | 49 ++++++++++++++------ src/business/business-gnome/dialog-order.c | 47 +++++++++++++------ 2 files changed, 67 insertions(+), 29 deletions(-) diff --git a/src/business/business-gnome/dialog-invoice.c b/src/business/business-gnome/dialog-invoice.c index 5298ea31cc..78cf2f65d9 100644 --- a/src/business/business-gnome/dialog-invoice.c +++ b/src/business/business-gnome/dialog-invoice.c @@ -50,11 +50,14 @@ typedef struct _invoice_window { GtkWidget * id_entry; GtkWidget * terms_entry; - GtkWidget * owner_choice; GtkWidget * notes_text; GtkWidget * opened_date; GtkWidget * active_check; + GtkWidget * owner_box; + GtkWidget * owner_label; + GtkWidget * owner_choice; + GnucashRegister * reg; GncEntryLedger * ledger; @@ -295,10 +298,10 @@ gnc_invoice_window_pay_invoice_cb (GtkWidget *widget, gpointer data) acct_label = _("Pay to Account"); /* Add "appropriate" accounts */ - acct_types = g_list_prepend (NULL, BANK); - acct_types = g_list_prepend (acct_types, CASH); - acct_types = g_list_prepend (acct_types, ASSET); - acct_types = g_list_prepend (acct_types, LIABILITY); + acct_types = g_list_prepend (NULL, (gpointer)BANK); + acct_types = g_list_prepend (acct_types, (gpointer)CASH); + acct_types = g_list_prepend (acct_types, (gpointer)ASSET); + acct_types = g_list_prepend (acct_types, (gpointer)LIABILITY); timespecFromTime_t (&paid_date, time(NULL)); if (!gnc_dialog_date_acct_parented (iw->dialog, message, date_label, @@ -445,6 +448,29 @@ gnc_invoice_update_window (InvoiceWindow *iw) invoice = iw_get_invoice (iw); owner = gncInvoiceGetOwner (invoice); + if (iw->owner_choice) { + gtk_container_remove (GTK_CONTAINER (iw->owner_box), iw->owner_choice); + gtk_object_destroy (GTK_OBJECT (iw->owner_choice)); + } + + switch (iw->dialog_type) { + case VIEW_INVOICE: + case EDIT_INVOICE: + iw->owner_choice = + gnc_owner_edit_create (iw->owner_label, iw->owner_box, iw->book, + owner); + break; + case NEW_INVOICE: + iw->owner_choice = + gnc_owner_select_create (iw->owner_label, iw->owner_box, iw->book, + owner); + break; + } + + gtk_signal_connect (GTK_OBJECT (iw->owner_choice), "changed", + GTK_SIGNAL_FUNC (gnc_invoice_owner_changed_cb), + iw); + gtk_widget_show_all (iw->dialog); paid_date = glade_xml_get_widget (iw->xml, "paid_date"); @@ -587,7 +613,7 @@ gnc_invoice_new_window (GtkWidget *parent, GNCBook *bookp, { InvoiceWindow *iw; GladeXML *xml; - GtkWidget *label, *hbox, *vbox, *regWidget; + GtkWidget *vbox, *regWidget; GncEntryLedger *entry_ledger = NULL; GnomeDialog *iwd; @@ -618,9 +644,8 @@ gnc_invoice_new_window (GtkWidget *parent, GNCBook *bookp, iw->notes_text = glade_xml_get_widget (xml, "notes_text"); iw->opened_date = glade_xml_get_widget (xml, "opened_date"); iw->active_check = glade_xml_get_widget (xml, "active_check"); - - hbox = glade_xml_get_widget (xml, "owner_hbox"); - label = glade_xml_get_widget (xml, "owner_label"); + iw->owner_box = glade_xml_get_widget (xml, "owner_hbox"); + iw->owner_label = glade_xml_get_widget (xml, "owner_label"); /* default to ok */ gnome_dialog_editable_enters (iwd, GTK_EDITABLE (iw->id_entry)); @@ -694,7 +719,6 @@ gnc_invoice_new_window (GtkWidget *parent, GNCBook *bookp, class_name = DIALOG_VIEW_INVOICE_CM_CLASS; /* FALLTHROUGH */ case EDIT_INVOICE: - iw->owner_choice = gnc_owner_edit_create (label, hbox, bookp, owner); gtk_entry_set_text (GTK_ENTRY (iw->id_entry), gncInvoiceGetID (invoice)); if (class_name == NULL) @@ -702,7 +726,6 @@ gnc_invoice_new_window (GtkWidget *parent, GNCBook *bookp, break; case NEW_INVOICE: - iw->owner_choice = gnc_owner_select_create (label, hbox, bookp, owner); gtk_entry_set_text (GTK_ENTRY (iw->id_entry), g_strdup_printf ("%.6d", gncInvoiceNextID(bookp))); @@ -721,10 +744,6 @@ gnc_invoice_new_window (GtkWidget *parent, GNCBook *bookp, GNC_INVOICE_MODULE_NAME, GNC_EVENT_MODIFY | GNC_EVENT_DESTROY); - gtk_signal_connect (GTK_OBJECT (iw->owner_choice), "changed", - GTK_SIGNAL_FUNC (gnc_invoice_owner_changed_cb), - iw); - gnc_table_realize_gui (gnc_entry_ledger_get_table (entry_ledger)); /* Now fill in a lot of the pieces and display properly */ diff --git a/src/business/business-gnome/dialog-order.c b/src/business/business-gnome/dialog-order.c index bd763bc745..7845fc5075 100644 --- a/src/business/business-gnome/dialog-order.c +++ b/src/business/business-gnome/dialog-order.c @@ -51,12 +51,15 @@ typedef struct _order_window { GtkWidget * id_entry; GtkWidget * ref_entry; - GtkWidget * owner_choice; GtkWidget * notes_text; GtkWidget * opened_date; GtkWidget * closed_date; GtkWidget * active_check; + GtkWidget * owner_box; + GtkWidget * owner_label; + GtkWidget * owner_choice; + GnucashRegister * reg; GncEntryLedger * ledger; @@ -416,6 +419,29 @@ gnc_order_update_window (OrderWindow *ow) order = ow_get_order (ow); owner = gncOrderGetOwner (order); + if (ow->owner_choice) { + gtk_container_remove (GTK_CONTAINER (ow->owner_box), ow->owner_choice); + gtk_object_destroy (GTK_OBJECT (ow->owner_choice)); + } + + switch (ow->dialog_type) { + case VIEW_ORDER: + case EDIT_ORDER: + ow->owner_choice = + gnc_owner_edit_create (ow->owner_label, ow->owner_box, ow->book, + owner); + break; + case NEW_ORDER: + ow->owner_choice = + gnc_owner_select_create (ow->owner_label, ow->owner_box, ow->book, + owner); + break; + } + + gtk_signal_connect (GTK_OBJECT (ow->owner_choice), "changed", + GTK_SIGNAL_FUNC (gnc_order_owner_changed_cb), + ow); + gtk_widget_show_all (ow->dialog); { @@ -495,7 +521,7 @@ gnc_order_new_window (GtkWidget *parent, GNCBook *bookp, { OrderWindow *ow; GladeXML *xml; - GtkWidget *label, *hbox, *vbox, *regWidget; + GtkWidget *vbox, *regWidget; GncEntryLedger *entry_ledger = NULL; GnomeDialog *owd; @@ -527,9 +553,8 @@ gnc_order_new_window (GtkWidget *parent, GNCBook *bookp, ow->opened_date = glade_xml_get_widget (xml, "opened_date"); ow->closed_date = glade_xml_get_widget (xml, "closed_date"); ow->active_check = glade_xml_get_widget (xml, "active_check"); - - hbox = glade_xml_get_widget (xml, "owner_hbox"); - label = glade_xml_get_widget (xml, "owner_label"); + ow->owner_box = glade_xml_get_widget (xml, "owner_hbox"); + ow->owner_label = glade_xml_get_widget (xml, "owner_label"); /* default to ok */ gnome_dialog_editable_enters (owd, GTK_EDITABLE (ow->id_entry)); @@ -600,7 +625,6 @@ gnc_order_new_window (GtkWidget *parent, GNCBook *bookp, class_name = DIALOG_VIEW_ORDER_CM_CLASS; /* FALLTHROUGH */ case EDIT_ORDER: - ow->owner_choice = gnc_owner_edit_create (label, hbox, bookp, owner); gtk_entry_set_text (GTK_ENTRY (ow->id_entry), gncOrderGetID (order)); if (class_name == NULL) @@ -608,7 +632,6 @@ gnc_order_new_window (GtkWidget *parent, GNCBook *bookp, break; case NEW_ORDER: - ow->owner_choice = gnc_owner_select_create (label, hbox, bookp, owner); gtk_entry_set_text (GTK_ENTRY (ow->id_entry), g_strdup_printf ("%.6d", gncOrderNextID(bookp))); @@ -623,18 +646,14 @@ gnc_order_new_window (GtkWidget *parent, GNCBook *bookp, ow); } - gtk_signal_connect (GTK_OBJECT (ow->owner_choice), "changed", - GTK_SIGNAL_FUNC (gnc_order_owner_changed_cb), - ow); - gnc_table_realize_gui (gnc_entry_ledger_get_table (entry_ledger)); - /* Set the Reference */ - gnc_order_owner_changed_cb (ow->owner_choice, ow); - /* Now fill in a lot of the pirces and display properly */ gnc_order_update_window (ow); + /* Set the Reference */ + gnc_order_owner_changed_cb (ow->owner_choice, ow); + return ow; }