gnucash stable: Bug 799705 - Remove Old Prices by Namespace
Robert Fewell
bobit at code.gnucash.org
Sun Jan 18 06:40:12 EST 2026
Updated via https://github.com/Gnucash/gnucash/commit/c32002bd (commit)
from https://github.com/Gnucash/gnucash/commit/e5fe2f3e (commit)
commit c32002bd774d03dda067a0f84d2a44595fe554a8
Author: Robert Fewell <14uBobIT at gmail.com>
Date: Sun Jan 11 12:19:23 2026 +0000
Bug 799705 - Remove Old Prices by Namespace
Add visibility of the namespace used for commodities so prices to
remove can be more specific.
Add a further option to restrict which namespaces are shown in the
list view. This also allows for quick selection by entering the
namespace in the combo entry.
diff --git a/gnucash/gnome/dialog-price-edit-db.cpp b/gnucash/gnome/dialog-price-edit-db.cpp
index c129a0f8ab..336edfdc31 100644
--- a/gnucash/gnome/dialog-price-edit-db.cpp
+++ b/gnucash/gnome/dialog-price-edit-db.cpp
@@ -31,6 +31,7 @@
#include <gnc-quotes.hpp>
#include "dialog-utils.h"
+#include "dialog-commodity.h"
#include "gnc-accounting-period.h"
#include "gnc-amount-edit.h"
#include "gnc-commodity-edit.h"
@@ -39,6 +40,7 @@
#include "gnc-currency-edit.h"
#include "gnc-date-edit.h"
#include "gnc-engine.h"
+#include "gnc-gtk-utils.h"
#include "gnc-gui-query.h"
#include "gnc-pricedb.h"
#include "gnc-session.h"
@@ -85,9 +87,11 @@ struct PricesDialog
GtkWidget * remove_button;
GtkWidget * add_button;
- GtkWidget *remove_dialog;
+ GtkWidget *remove_dialog;
GtkTreeView *remove_view;
- int remove_source;
+ GtkWidget *namespace_cbwe;
+ gchar *target_namespace_name;
+ int remove_source;
};
@@ -234,21 +238,51 @@ gnc_prices_dialog_remove_clicked (GtkWidget *widget, gpointer data)
/** Enumeration for the price delete list-store */
-enum GncPriceColumn {PRICED_FULL_NAME, PRICED_COMM, PRICED_DATE, PRICED_COUNT};
+enum GncPriceColumn {PRICED_NAMESPACE_NAME, PRICED_FULL_NAME, PRICED_COMM, PRICED_DATE, PRICED_COUNT};
+
+static bool
+continue_namespace_check (const gchar *target_namespace_name, const gchar *namespace_name)
+{
+ if ((g_strcmp0 (target_namespace_name, GNC_COMMODITY_NS_CURRENCY) == 0) &&
+ (g_strcmp0 (namespace_name, GNC_COMMODITY_NS_CURRENCY) != 0))
+ return true;
+
+ if ((g_strcmp0 (target_namespace_name, GNC_COMMODITY_NS_NONISO_GUI) == 0) &&
+ (g_strcmp0 (namespace_name, GNC_COMMODITY_NS_CURRENCY) == 0))
+ return true;
+
+ if ((g_strcmp0 (target_namespace_name, GNC_COMMODITY_NS_NONISO_GUI) != 0) &&
+ (g_strcmp0 (target_namespace_name, GNC_COMMODITY_NS_CURRENCY) != 0) &&
+ (g_strcmp0 (target_namespace_name, namespace_name) != 0))
+ return true;
+
+ return false;
+}
static time64
-gnc_prices_dialog_load_view (GtkTreeView *view, GNCPriceDB *pdb)
+gnc_prices_dialog_load_view (GtkTreeView *view, GNCPriceDB *pdb, const gchar *target_namespace_name)
{
auto oldest = gnc_time (nullptr);
auto model = gtk_tree_view_get_model (view);
const auto commodity_table = gnc_get_current_commodities ();
- auto namespace_list = gnc_commodity_table_get_namespaces (commodity_table);
+ auto namespace_list = gnc_commodity_table_get_namespaces_list (commodity_table);
+
+ // disconnect the model to the price treeview
+ g_object_ref (G_OBJECT(model));
+ gtk_tree_view_set_model (GTK_TREE_VIEW(view), nullptr);
+
+ gtk_list_store_clear (GTK_LIST_STORE(model));
for (auto node_n = namespace_list; node_n; node_n = g_list_next (node_n))
{
- auto tmp_namespace = static_cast<char*>(node_n->data);
- DEBUG("Looking at namespace %s", tmp_namespace);
- auto commodity_list = gnc_commodity_table_get_commodities (commodity_table, tmp_namespace);
+ auto tmp_namespace = static_cast<gnc_commodity_namespace*>(node_n->data);
+ auto tmp_namespace_name_str = gnc_commodity_namespace_get_name (tmp_namespace);
+
+ DEBUG("Restricted to %s, looking at namespace %s", target_namespace_name, tmp_namespace_name_str);
+ if (continue_namespace_check (target_namespace_name, tmp_namespace_name_str))
+ continue;
+
+ auto commodity_list = gnc_commodity_table_get_commodities (commodity_table, tmp_namespace_name_str);
for (auto node_c = commodity_list; node_c; node_c = g_list_next (node_c))
{
auto tmp_commodity = static_cast<gnc_commodity*>(node_c->data);
@@ -262,6 +296,7 @@ gnc_prices_dialog_load_view (GtkTreeView *view, GNCPriceDB *pdb)
auto price = static_cast<GNCPrice*> (node->data);
auto price_time = gnc_price_get_time64 (price);
auto name_str = gnc_commodity_get_printname (tmp_commodity);
+ auto tmp_namespace_gui_str = gnc_commodity_namespace_get_gui_name (tmp_namespace);
if (oldest > price_time)
oldest = price_time;
@@ -271,8 +306,13 @@ gnc_prices_dialog_load_view (GtkTreeView *view, GNCPriceDB *pdb)
GtkTreeIter iter;
gtk_list_store_append (GTK_LIST_STORE(model), &iter);
- gtk_list_store_set (GTK_LIST_STORE(model), &iter, PRICED_FULL_NAME, name_str,
- PRICED_COMM, tmp_commodity, PRICED_DATE, date_str, PRICED_COUNT, num_str, -1);
+ gtk_list_store_set (GTK_LIST_STORE(model), &iter,
+ PRICED_NAMESPACE_NAME, tmp_namespace_gui_str,
+ PRICED_FULL_NAME, name_str,
+ PRICED_COMM, tmp_commodity,
+ PRICED_DATE, date_str,
+ PRICED_COUNT, num_str,
+ -1);
g_free (date_str);
g_free (num_str);
@@ -283,6 +323,10 @@ gnc_prices_dialog_load_view (GtkTreeView *view, GNCPriceDB *pdb)
}
g_list_free (namespace_list);
+ // reconnect the model to the price treeview
+ gtk_tree_view_set_model (GTK_TREE_VIEW(view), model);
+ g_object_unref (G_OBJECT(model));
+
return oldest;
}
@@ -315,17 +359,20 @@ static void
change_source_flag (PriceRemoveSourceFlags source, gboolean set, gpointer data)
{
auto pdb_dialog = static_cast<PricesDialog *> (data);
- GtkWidget *w = gtk_dialog_get_widget_for_response (GTK_DIALOG(pdb_dialog->remove_dialog), GTK_RESPONSE_OK);
- gboolean enable_button;
+ auto widget_ok = gtk_dialog_get_widget_for_response (GTK_DIALOG(pdb_dialog->remove_dialog),
+ GTK_RESPONSE_OK);
+ auto widget_apply = gtk_dialog_get_widget_for_response (GTK_DIALOG(pdb_dialog->remove_dialog),
+ GTK_RESPONSE_APPLY);
if (set)
pdb_dialog->remove_source = pdb_dialog->remove_source | source;
else
pdb_dialog->remove_source = pdb_dialog->remove_source & (~source);
- // Check if we have the required options to enable OK button
- enable_button = (pdb_dialog->remove_source > 8 ? TRUE : FALSE); // commodities flag is 8
- gtk_widget_set_sensitive (w, enable_button);
+ // Check if we have the required options to enable OK and Apply buttons
+ gboolean enable_button = (pdb_dialog->remove_source > 8 ? TRUE : FALSE); // commodities flag is 8
+ gtk_widget_set_sensitive (widget_ok, enable_button);
+ gtk_widget_set_sensitive (widget_apply, enable_button);
DEBUG("Source is: %d, remove_source is %d", source, pdb_dialog->remove_source);
}
@@ -383,6 +430,46 @@ get_fiscal_end_date (void)
return time64_to_gdate (end);
}
+static void
+namespace_changed_cb (GtkComboBox *cbwe, gpointer data)
+{
+ auto pdb_dialog = static_cast<PricesDialog *>(data);
+
+ if (pdb_dialog->target_namespace_name)
+ g_free (pdb_dialog->target_namespace_name);
+ pdb_dialog->target_namespace_name = gnc_ui_namespace_picker_ns (GTK_WIDGET(cbwe));
+
+ gnc_prices_dialog_load_view (pdb_dialog->remove_view,
+ pdb_dialog->price_db,
+ pdb_dialog->target_namespace_name);
+}
+
+static PriceRemoveKeepOptions
+get_keep_options_value (GtkBuilder *builder)
+{
+ if (!builder)
+ return PRICE_REMOVE_KEEP_LAST_WEEKLY;
+
+ auto button = GTK_WIDGET(gtk_builder_get_object (builder, "radiobutton_none"));
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(button)))
+ return PRICE_REMOVE_KEEP_NONE;
+ button = GTK_WIDGET(gtk_builder_get_object (builder, "radiobutton_last_month"));
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(button)))
+ return PRICE_REMOVE_KEEP_LAST_MONTHLY;
+ button = GTK_WIDGET(gtk_builder_get_object (builder, "radiobutton_last_quarter"));
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(button)))
+ return PRICE_REMOVE_KEEP_LAST_QUARTERLY;
+ button = GTK_WIDGET(gtk_builder_get_object (builder, "radiobutton_last_period"));
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(button)))
+ return PRICE_REMOVE_KEEP_LAST_PERIOD;
+ button = GTK_WIDGET(gtk_builder_get_object (builder, "radiobutton_scaled"));
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(button)))
+ return PRICE_REMOVE_KEEP_SCALED;
+
+ // default which is also "radiobutton_last_week"
+ return PRICE_REMOVE_KEEP_LAST_WEEKLY;
+}
+
void
gnc_prices_dialog_remove_old_clicked (GtkWidget *widget, gpointer data)
{
@@ -390,6 +477,7 @@ gnc_prices_dialog_remove_old_clicked (GtkWidget *widget, gpointer data)
ENTER(" ");
auto builder = gtk_builder_new();
+ gnc_builder_add_from_file (builder, "dialog-price.glade", "liststore3");
gnc_builder_add_from_file (builder, "dialog-price.glade", "liststore4");
gnc_builder_add_from_file (builder, "dialog-price.glade", "deletion_date_dialog");
@@ -404,6 +492,14 @@ gnc_prices_dialog_remove_old_clicked (GtkWidget *widget, gpointer data)
auto label = GTK_WIDGET(gtk_builder_get_object (builder, "date_label"));
gnc_date_make_mnemonic_target (GNC_DATE_EDIT(date), label);
+ // Setup namespace
+ pdb_dialog->namespace_cbwe = GTK_WIDGET(gtk_builder_get_object (builder, "namespace_combo_we"));
+ gnc_ui_update_namespace_picker (pdb_dialog->namespace_cbwe, nullptr, DIAG_COMM_ALL);
+ gnc_cbwe_require_list_item (GTK_COMBO_BOX(pdb_dialog->namespace_cbwe));
+ gtk_combo_box_set_active (GTK_COMBO_BOX(pdb_dialog->namespace_cbwe), 1);
+ g_signal_connect (G_OBJECT(pdb_dialog->namespace_cbwe), "changed",
+ G_CALLBACK(namespace_changed_cb), pdb_dialog);
+
// Setup the commodity view
pdb_dialog->remove_view = GTK_TREE_VIEW(gtk_builder_get_object (builder, "commodty_treeview"));
auto selection = gtk_tree_view_get_selection (pdb_dialog->remove_view);
@@ -422,15 +518,20 @@ gnc_prices_dialog_remove_old_clicked (GtkWidget *widget, gpointer data)
gtk_cell_renderer_set_alignment (cr, 0.5, 0.5);
// Load the view and get the earliest date
- gnc_prices_dialog_load_view (pdb_dialog->remove_view, pdb_dialog->price_db);
- gtk_tree_selection_select_all (selection);
+ pdb_dialog->target_namespace_name = g_strdup (GNC_COMMODITY_NS_NONISO_GUI);
+ gnc_prices_dialog_load_view (pdb_dialog->remove_view,
+ pdb_dialog->price_db,
+ pdb_dialog->target_namespace_name);
+
g_signal_connect (selection, "changed", G_CALLBACK(selection_changed_cb), pdb_dialog);
gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, pdb_dialog);
gtk_window_set_transient_for (GTK_WINDOW (pdb_dialog->remove_dialog), GTK_WINDOW (pdb_dialog->window));
- pdb_dialog->remove_source = PRICE_REMOVE_SOURCE_FQ + PRICE_REMOVE_SOURCE_COMM; // FQ and Commodities highlighted
+ pdb_dialog->remove_source = PRICE_REMOVE_SOURCE_FQ;
+ change_source_flag (PRICE_REMOVE_SOURCE_FQ, TRUE, pdb_dialog);
+
auto button = GTK_WIDGET(gtk_builder_get_object (builder, "checkbutton_fq"));
g_signal_connect (button, "toggled", G_CALLBACK (check_event_fq_cb), pdb_dialog);
button = GTK_WIDGET(gtk_builder_get_object (builder, "checkbutton_user"));
@@ -438,76 +539,87 @@ gnc_prices_dialog_remove_old_clicked (GtkWidget *widget, gpointer data)
button = GTK_WIDGET(gtk_builder_get_object (builder, "checkbutton_app"));
g_signal_connect (button, "toggled", G_CALLBACK (check_event_app_cb), pdb_dialog);
- auto result = gtk_dialog_run (GTK_DIALOG (pdb_dialog->remove_dialog));
- if (result == GTK_RESPONSE_OK)
+ bool leave = false;
+ int response = 0;
+ while (!leave && (response = gtk_dialog_run (GTK_DIALOG(pdb_dialog->remove_dialog))))
{
- const char *fmt = _("Are you sure you want to delete these prices?");
- auto comm_list = gnc_prices_dialog_get_commodities (pdb_dialog->remove_view);
+ if ((response == GTK_RESPONSE_CLOSE) || (response == GTK_RESPONSE_DELETE_EVENT))
+ leave = true;
- // Are you sure you want to delete the entries and we have commodities
- if ((g_list_length (comm_list) != 0) && (gnc_verify_dialog (GTK_WINDOW (pdb_dialog->remove_dialog), FALSE, fmt, NULL)))
+ if ((response == GTK_RESPONSE_OK) || (response == GTK_RESPONSE_APPLY))
{
- time64 last;
- GDate fiscal_end_date = get_fiscal_end_date ();
- PriceRemoveKeepOptions keep = PRICE_REMOVE_KEEP_NONE;
-
- // disconnect the model to the price treeview
- auto model = gtk_tree_view_get_model (GTK_TREE_VIEW(pdb_dialog->price_tree));
- g_object_ref (G_OBJECT(model));
- gtk_tree_view_set_model (GTK_TREE_VIEW(pdb_dialog->price_tree), NULL);
-
- DEBUG("deleting prices");
- last = gnc_date_edit_get_date (GNC_DATE_EDIT (date));
-
- button = GTK_WIDGET(gtk_builder_get_object (builder, "radiobutton_last_week"));
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
- keep = PRICE_REMOVE_KEEP_LAST_WEEKLY;
- button = GTK_WIDGET(gtk_builder_get_object (builder, "radiobutton_last_month"));
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
- keep = PRICE_REMOVE_KEEP_LAST_MONTHLY;
- button = GTK_WIDGET(gtk_builder_get_object (builder, "radiobutton_last_quarter"));
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
- keep = PRICE_REMOVE_KEEP_LAST_QUARTERLY;
- button = GTK_WIDGET(gtk_builder_get_object (builder, "radiobutton_last_period"));
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
- keep = PRICE_REMOVE_KEEP_LAST_PERIOD;
- button = GTK_WIDGET(gtk_builder_get_object (builder, "radiobutton_scaled"));
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
- keep = PRICE_REMOVE_KEEP_SCALED;
-
- if (keep != PRICE_REMOVE_KEEP_SCALED)
- gnc_pricedb_remove_old_prices (pdb_dialog->price_db, comm_list,
- &fiscal_end_date, last,
- static_cast<PriceRemoveSourceFlags> (pdb_dialog->remove_source),
- keep);
+ const char *fmt = _("Are you sure you want to delete these prices?");
+ auto comm_list = gnc_prices_dialog_get_commodities (pdb_dialog->remove_view);
+ bool delete_entries = false;
+
+ // Are you sure you want to delete the entries and we have commodities
+ if ((g_list_length (comm_list) != 0) &&
+ (gnc_verify_dialog (GTK_WINDOW(pdb_dialog->remove_dialog), FALSE, fmt, NULL)))
+ {
+ time64 last;
+ GDate fiscal_end_date = get_fiscal_end_date ();
+ PriceRemoveKeepOptions keep = get_keep_options_value (builder);
+ delete_entries = true;
+
+ // disconnect the model to the price treeview
+ auto model = gtk_tree_view_get_model (GTK_TREE_VIEW(pdb_dialog->price_tree));
+ g_object_ref (G_OBJECT(model));
+ gtk_tree_view_set_model (GTK_TREE_VIEW(pdb_dialog->price_tree), nullptr);
+
+ DEBUG("deleting prices for keep option %d", keep);
+ last = gnc_date_edit_get_date (GNC_DATE_EDIT (date));
+
+ if (keep != PRICE_REMOVE_KEEP_SCALED)
+ gnc_pricedb_remove_old_prices (pdb_dialog->price_db, comm_list,
+ &fiscal_end_date, last,
+ static_cast<PriceRemoveSourceFlags> (pdb_dialog->remove_source),
+ keep);
+ else
+ {
+ auto tmp_date = time64_to_gdate (last);
+ g_date_subtract_months (&tmp_date, 6);
+ auto tmp = gdate_to_time64 (tmp_date);
+
+ gnc_pricedb_remove_old_prices (pdb_dialog->price_db, comm_list,
+ &fiscal_end_date, tmp,
+ static_cast<PriceRemoveSourceFlags> (pdb_dialog->remove_source),
+ PRICE_REMOVE_KEEP_LAST_WEEKLY);
+
+ g_date_subtract_months (&tmp_date, 6);
+ tmp = gdate_to_time64 (tmp_date);
+
+ gnc_pricedb_remove_old_prices (pdb_dialog->price_db, comm_list,
+ &fiscal_end_date, tmp,
+ static_cast<PriceRemoveSourceFlags> (pdb_dialog->remove_source),
+ PRICE_REMOVE_KEEP_LAST_MONTHLY);
+ }
+ // reconnect the model to the price treeview
+ gtk_tree_view_set_model (GTK_TREE_VIEW(pdb_dialog->price_tree), model);
+ g_object_unref (G_OBJECT(model));
+ }
+ g_list_free (comm_list);
+
+ if (response == GTK_RESPONSE_OK)
+ {
+ if (delete_entries)
+ leave = true;
+ }
else
{
- auto tmp_date = time64_to_gdate (last);
- g_date_subtract_months (&tmp_date, 6);
- auto tmp = gdate_to_time64 (tmp_date);
-
- gnc_pricedb_remove_old_prices (pdb_dialog->price_db, comm_list,
- &fiscal_end_date, tmp,
- static_cast<PriceRemoveSourceFlags> (pdb_dialog->remove_source),
- PRICE_REMOVE_KEEP_LAST_WEEKLY);
-
- g_date_subtract_months (&tmp_date, 6);
- tmp = gdate_to_time64 (tmp_date);
-
- gnc_pricedb_remove_old_prices (pdb_dialog->price_db, comm_list,
- &fiscal_end_date, tmp,
- static_cast<PriceRemoveSourceFlags> (pdb_dialog->remove_source),
- PRICE_REMOVE_KEEP_LAST_MONTHLY);
+ if (delete_entries)
+ gnc_prices_dialog_load_view (pdb_dialog->remove_view,
+ pdb_dialog->price_db,
+ pdb_dialog->target_namespace_name);
}
- // reconnect the model to the price treeview
- gtk_tree_view_set_model (GTK_TREE_VIEW(pdb_dialog->price_tree), model);
- g_object_unref(G_OBJECT(model));
}
- g_list_free (comm_list);
}
gnc_gui_refresh_all ();
+
+ if (pdb_dialog->target_namespace_name)
+ g_free (pdb_dialog->target_namespace_name);
+
gtk_widget_destroy (pdb_dialog->remove_dialog);
- g_object_unref (G_OBJECT (builder));
+ g_object_unref (G_OBJECT(builder));
LEAVE(" ");
}
diff --git a/gnucash/gtkbuilder/dialog-price.glade b/gnucash/gtkbuilder/dialog-price.glade
index e2178311f1..780167f73f 100644
--- a/gnucash/gtkbuilder/dialog-price.glade
+++ b/gnucash/gtkbuilder/dialog-price.glade
@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.38.2 -->
+<!-- Generated with glade 3.40.0 -->
<interface>
<requires lib="gtk+" version="3.22"/>
+ <object class="GtkTreeModelSort"/>
<object class="GtkListStore" id="liststore1">
<columns>
<!-- column-name item -->
@@ -135,7 +136,7 @@
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">end</property>
- <property name="label" translatable="yes">Nam_espace</property>
+ <property name="label" translatable="yes">_Namespace</property>
<property name="use-underline">True</property>
<property name="justify">center</property>
<property name="mnemonic-widget">namespace_cbwe</property>
@@ -358,6 +359,8 @@
</object>
<object class="GtkListStore" id="liststore4">
<columns>
+ <!-- column-name namespace_name -->
+ <column type="gchararray"/>
<!-- column-name full_name -->
<column type="gchararray"/>
<!-- column-name commodity -->
@@ -386,8 +389,8 @@
<property name="can-focus">False</property>
<property name="layout-style">end</property>
<child>
- <object class="GtkButton" id="cancel_button">
- <property name="label" translatable="yes">_Cancel</property>
+ <object class="GtkButton" id="del_close_button">
+ <property name="label" translatable="yes">_Close</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="can-default">True</property>
@@ -401,7 +404,21 @@
</packing>
</child>
<child>
- <object class="GtkButton" id="ok_button">
+ <object class="GtkButton" id="del_apply_button">
+ <property name="label" translatable="yes">_Apply</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">True</property>
+ <property name="use-underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="del_ok_button">
<property name="label" translatable="yes">_OK</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
@@ -412,7 +429,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="position">1</property>
+ <property name="position">2</property>
</packing>
</child>
</object>
@@ -423,7 +440,7 @@
</packing>
</child>
<child>
- <!-- n-columns=2 n-rows=7 -->
+ <!-- n-columns=2 n-rows=8 -->
<object class="GtkGrid" id="table2">
<property name="visible">True</property>
<property name="can-focus">False</property>
@@ -554,7 +571,7 @@
</object>
<packing>
<property name="left-attach">0</property>
- <property name="top-attach">6</property>
+ <property name="top-attach">7</property>
<property name="width">2</property>
</packing>
</child>
@@ -575,13 +592,24 @@
<child internal-child="selection">
<object class="GtkTreeSelection" id="selection1"/>
</child>
+ <child>
+ <object class="GtkTreeViewColumn" id="namespace_column">
+ <property name="title" translatable="yes">Namespace</property>
+ <child>
+ <object class="GtkCellRendererText" id="namespace_cellr"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
<child>
<object class="GtkTreeViewColumn" id="name_column">
<property name="title" translatable="yes">Commodity</property>
<child>
<object class="GtkCellRendererText" id="name_cellr"/>
<attributes>
- <attribute name="text">0</attribute>
+ <attribute name="text">1</attribute>
</attributes>
</child>
</object>
@@ -592,7 +620,7 @@
<child>
<object class="GtkCellRendererText" id="date_cellr"/>
<attributes>
- <attribute name="text">2</attribute>
+ <attribute name="text">3</attribute>
</attributes>
</child>
</object>
@@ -609,7 +637,7 @@
</object>
<packing>
<property name="left-attach">0</property>
- <property name="top-attach">4</property>
+ <property name="top-attach">5</property>
<property name="width">2</property>
</packing>
</child>
@@ -623,7 +651,7 @@
</object>
<packing>
<property name="left-attach">0</property>
- <property name="top-attach">3</property>
+ <property name="top-attach">4</property>
<property name="width">2</property>
</packing>
</child>
@@ -637,7 +665,7 @@
</object>
<packing>
<property name="left-attach">0</property>
- <property name="top-attach">5</property>
+ <property name="top-attach">6</property>
<property name="width">2</property>
</packing>
</child>
@@ -705,7 +733,7 @@
<property name="can-focus">False</property>
<child>
<object class="GtkCheckButton" id="checkbutton_app">
- <property name="label" translatable="yes">_Added by the application</property>
+ <property name="label" translatable="yes">Added _by the application</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
@@ -779,6 +807,39 @@ These prices were added so that there's always a "nearest in time" price for eve
<property name="top-attach">2</property>
</packing>
</child>
+ <child>
+ <object class="GtkLabel" id="namespace_label">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes">_Namespace</property>
+ <property name="use-underline">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="namespace_combo_we">
+ <property name="width-request">250</property>
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="halign">start</property>
+ <property name="model">liststore3</property>
+ <property name="has-entry">True</property>
+ <property name="entry-text-column">0</property>
+ <child internal-child="entry">
+ <object class="GtkEntry" id="combobox-entry4">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">3</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">True</property>
@@ -789,8 +850,9 @@ These prices were added so that there's always a "nearest in time" price for eve
</object>
</child>
<action-widgets>
- <action-widget response="-6">cancel_button</action-widget>
- <action-widget response="-5">ok_button</action-widget>
+ <action-widget response="-7">del_close_button</action-widget>
+ <action-widget response="-10">del_apply_button</action-widget>
+ <action-widget response="-5">del_ok_button</action-widget>
</action-widgets>
</object>
<object class="GtkWindow" id="prices_window">
Summary of changes:
gnucash/gnome/dialog-price-edit-db.cpp | 268 +++++++++++++++++++++++----------
gnucash/gtkbuilder/dialog-price.glade | 94 ++++++++++--
2 files changed, 268 insertions(+), 94 deletions(-)
More information about the gnucash-changes
mailing list