gnucash maint: Multiple changes pushed
Geert Janssens
gjanssens at code.gnucash.org
Sat Aug 11 15:06:26 EDT 2018
Updated via https://github.com/Gnucash/gnucash/commit/14335b78 (commit)
via https://github.com/Gnucash/gnucash/commit/b3f1104d (commit)
via https://github.com/Gnucash/gnucash/commit/19d6eb90 (commit)
via https://github.com/Gnucash/gnucash/commit/9768a215 (commit)
via https://github.com/Gnucash/gnucash/commit/5ff8d8da (commit)
via https://github.com/Gnucash/gnucash/commit/847766fc (commit)
from https://github.com/Gnucash/gnucash/commit/22dd716b (commit)
commit 14335b78626762d0eba11888334796cff6809d27
Merge: 22dd716 b3f1104
Author: Geert Janssens <geert at kobaltwit.be>
Date: Sat Aug 11 21:04:26 2018 +0200
Merge branch 'Bug796788' of https://github.com/Bob-IT/gnucash into maint
commit b3f1104d39d2326cba7304e7981836e0725aba6d
Author: Robert Fewell <14uBobIT at gmail.com>
Date: Fri Aug 10 14:29:44 2018 +0100
Fix a possible transient parent dialogue warning
diff --git a/gnucash/gnome-utils/dialog-options.c b/gnucash/gnome-utils/dialog-options.c
index da5c14a..7952fb1 100644
--- a/gnucash/gnome-utils/dialog-options.c
+++ b/gnucash/gnome-utils/dialog-options.c
@@ -4335,7 +4335,7 @@ scm_apply_cb (GNCOptionWin *win, gpointer data)
results = gnc_option_db_commit (win->option_db);
for (iter = results; iter; iter = iter->next)
{
- GtkWidget *dialog = gtk_message_dialog_new(NULL,
+ GtkWidget *dialog = gtk_message_dialog_new(GTK_WINDOW(gnc_options_dialog_widget(win)),
0,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_OK,
diff --git a/gnucash/report/report-gnome/dialog-report-column-view.c b/gnucash/report/report-gnome/dialog-report-column-view.c
index ebd4e7e..4453c10 100644
--- a/gnucash/report/report-gnome/dialog-report-column-view.c
+++ b/gnucash/report/report-gnome/dialog-report-column-view.c
@@ -292,7 +292,7 @@ gnc_column_view_edit_apply_cb(GNCOptionWin * w, gpointer user_data)
results = gnc_option_db_commit (win->odb);
for (iter = results; iter; iter = iter->next)
{
- GtkWidget *dialog = gtk_message_dialog_new(NULL,
+ GtkWidget *dialog = gtk_message_dialog_new(GTK_WINDOW(gnc_options_dialog_widget(w)),
0,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_OK,
commit 19d6eb902824e7dbca1b12476dffb83a58b717b9
Author: Robert Fewell <14uBobIT at gmail.com>
Date: Sat Aug 11 12:39:48 2018 +0100
Improve the button sensitivity function
diff --git a/gnucash/report/report-gnome/dialog-report-column-view.c b/gnucash/report/report-gnome/dialog-report-column-view.c
index 82751d1..ebd4e7e 100644
--- a/gnucash/report/report-gnome/dialog-report-column-view.c
+++ b/gnucash/report/report-gnome/dialog-report-column-view.c
@@ -239,44 +239,45 @@ gnc_column_view_update_buttons_cb (GtkTreeSelection *selection,
{
GtkTreeModel *model;
GtkTreeIter iter;
- GtkTreeSelection *available_selection;
+ gboolean is_selected;
- /* compare selection to establish which treeview selected */
- available_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(r->available));
-
- /* available treeview */
- if (available_selection == selection)
+ /* compare treeviews to establish which selected treeview */
+ if (gtk_tree_selection_get_tree_view (selection) == r->available)
{
- if (gtk_tree_selection_get_selected(selection, &model, &iter))
- gtk_widget_set_sensitive (r->add_button, TRUE);
- else
- gtk_widget_set_sensitive (r->add_button, FALSE);
+ /* available treeview */
+ is_selected = gtk_tree_selection_get_selected (selection, &model, &iter);
+ gtk_widget_set_sensitive (r->add_button, is_selected);
return;
}
/* contents treeview */
- if (gtk_tree_selection_get_selected(selection, &model, &iter))
+ is_selected = gtk_tree_selection_get_selected (selection, &model, &iter);
+ gtk_widget_set_sensitive (r->size_button, is_selected);
+ gtk_widget_set_sensitive (r->remove_button, is_selected);
+
+ if (is_selected)
{
int len = scm_ilength (r->contents_list);
- gtk_tree_model_get(model, &iter,
+ gtk_tree_model_get (model, &iter,
CONTENTS_COL_ROW, &r->contents_selected, -1);
- gtk_widget_set_sensitive (r->size_button, TRUE);
- gtk_widget_set_sensitive (r->remove_button, TRUE);
-
if (len > 1)
{
gtk_widget_set_sensitive (r->up_button, TRUE);
gtk_widget_set_sensitive (r->down_button, TRUE);
+
+ if (r->contents_selected == len -1)
+ gtk_widget_set_sensitive (r->down_button, FALSE);
+
+ if (r->contents_selected == 0)
+ gtk_widget_set_sensitive (r->up_button, FALSE);
}
}
else
{
gtk_widget_set_sensitive (r->up_button, FALSE);
gtk_widget_set_sensitive (r->down_button, FALSE);
- gtk_widget_set_sensitive (r->size_button, FALSE);
- gtk_widget_set_sensitive (r->remove_button, FALSE);
}
}
commit 9768a2158d312d3d91c4661fd6f5ed1f4d73218c
Author: Robert Fewell <14uBobIT at gmail.com>
Date: Fri Aug 10 12:40:51 2018 +0100
Save the contents_selected value in selection callback
With the use of the selection call back for button sensitivity it make
sense to use that to store the contents_selected value for the contents
tree view.
diff --git a/gnucash/report/report-gnome/dialog-report-column-view.c b/gnucash/report/report-gnome/dialog-report-column-view.c
index 1dc5587..82751d1 100644
--- a/gnucash/report/report-gnome/dialog-report-column-view.c
+++ b/gnucash/report/report-gnome/dialog-report-column-view.c
@@ -259,6 +259,9 @@ gnc_column_view_update_buttons_cb (GtkTreeSelection *selection,
{
int len = scm_ilength (r->contents_list);
+ gtk_tree_model_get(model, &iter,
+ CONTENTS_COL_ROW, &r->contents_selected, -1);
+
gtk_widget_set_sensitive (r->size_button, TRUE);
gtk_widget_set_sensitive (r->remove_button, TRUE);
@@ -459,7 +462,7 @@ gnc_column_view_edit_add_cb(GtkButton * button, gpointer user_data)
int oldlength, id;
gchar *guid_str;
GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(r->available));
- GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW(r->available));
+ GtkTreeModel *model;
GtkTreeIter iter;
/* make sure there is a selected entry */
@@ -526,16 +529,6 @@ gnc_column_view_edit_remove_cb(GtkButton * button, gpointer user_data)
SCM oldlist = r->contents_list;
int count;
int oldlength;
- GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(r->contents));
- GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW(r->contents));
- GtkTreeIter iter;
-
- /* make sure there is a selected entry */
- if (gtk_tree_selection_get_selected(selection, &model, &iter))
- gtk_tree_model_get(model, &iter,
- CONTENTS_COL_ROW, &r->contents_selected, -1);
- else
- return;
if (scm_is_list(r->contents_list))
{
@@ -579,16 +572,6 @@ gnc_edit_column_view_move_up_cb(GtkButton * button, gpointer user_data)
SCM temp;
int oldlength;
int count;
- GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(r->contents));
- GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW(r->contents));
- GtkTreeIter iter;
-
- /* make sure there is a selected entry */
- if (gtk_tree_selection_get_selected(selection, &model, &iter))
- gtk_tree_model_get(model, &iter,
- CONTENTS_COL_ROW, &r->contents_selected, -1);
- else
- return;
oldlength = scm_ilength(r->contents_list);
if ((r->contents_selected > 0) && (oldlength > r->contents_selected))
@@ -627,16 +610,6 @@ gnc_edit_column_view_move_down_cb(GtkButton * button, gpointer user_data)
SCM temp;
int oldlength;
int count;
- GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(r->contents));
- GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW(r->contents));
- GtkTreeIter iter;
-
- /* make sure there is a selected entry */
- if (gtk_tree_selection_get_selected(selection, &model, &iter))
- gtk_tree_model_get(model, &iter,
- CONTENTS_COL_ROW, &r->contents_selected, -1);
- else
- return;
oldlength = scm_ilength(r->contents_list);
if (oldlength > (r->contents_selected + 1))
commit 5ff8d8daba7278b242628ba8c0f9f23fae868904
Author: Robert Fewell <14uBobIT at gmail.com>
Date: Fri Aug 10 11:36:41 2018 +0100
Update buttons on Multicolumn report options
Change the sensitivity of the multicolumn report options based on the
selection in the two tree views using the select callback.
diff --git a/gnucash/gtkbuilder/dialog-report.glade b/gnucash/gtkbuilder/dialog-report.glade
index c7dd029..17d2ea5 100644
--- a/gnucash/gtkbuilder/dialog-report.glade
+++ b/gnucash/gtkbuilder/dialog-report.glade
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
+<!-- Generated with glade 3.20.4 -->
<interface>
<requires lib="gtk+" version="3.10"/>
<object class="GtkAdjustment" id="col_adjustment">
@@ -95,9 +95,10 @@
</packing>
</child>
<child>
- <object class="GtkButton" id="button85">
+ <object class="GtkButton" id="add_button1">
<property name="label" translatable="yes">A_dd >></property>
<property name="visible">True</property>
+ <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_underline">True</property>
@@ -110,9 +111,10 @@
</packing>
</child>
<child>
- <object class="GtkButton" id="button86">
+ <object class="GtkButton" id="remove_button1">
<property name="label" translatable="yes"><< _Remove</property>
<property name="visible">True</property>
+ <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_underline">True</property>
@@ -137,9 +139,10 @@
</packing>
</child>
<child>
- <object class="GtkButton" id="button87">
+ <object class="GtkButton" id="up_button1">
<property name="label" translatable="yes">Move _up</property>
<property name="visible">True</property>
+ <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_underline">True</property>
@@ -152,9 +155,10 @@
</packing>
</child>
<child>
- <object class="GtkButton" id="button88">
+ <object class="GtkButton" id="down_button1">
<property name="label" translatable="yes">Move dow_n</property>
<property name="visible">True</property>
+ <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_underline">True</property>
@@ -179,9 +183,10 @@
</packing>
</child>
<child>
- <object class="GtkButton" id="button89">
+ <object class="GtkButton" id="size_button1">
<property name="label" translatable="yes">Si_ze...</property>
<property name="visible">True</property>
+ <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_underline">True</property>
@@ -241,9 +246,11 @@
</child>
</object>
</child>
+ <child type="titlebar">
+ <placeholder/>
+ </child>
</object>
<object class="GtkDialog" id="html_style_sheet_dialog">
- <property name="visible">False</property>
<property name="can_focus">False</property>
<property name="title" translatable="yes">HTML Style Sheets</property>
<property name="type_hint">dialog</property>
@@ -416,6 +423,9 @@
<action-widgets>
<action-widget response="-7">closebutton1</action-widget>
</action-widgets>
+ <child>
+ <placeholder/>
+ </child>
</object>
<object class="GtkAdjustment" id="row_adjustment">
<property name="upper">100</property>
@@ -573,6 +583,9 @@
<action-widget response="-6">cancelbutton</action-widget>
<action-widget response="-5">okbutton</action-widget>
</action-widgets>
+ <child>
+ <placeholder/>
+ </child>
</object>
<object class="GtkDialog" id="select_style_sheet_dialog">
<property name="can_focus">False</property>
@@ -690,6 +703,9 @@
<action-widget response="2">delete_button</action-widget>
<action-widget response="-7">close_button</action-widget>
</action-widgets>
+ <child>
+ <placeholder/>
+ </child>
</object>
<object class="GtkListStore" id="template_liststore">
<columns>
@@ -849,5 +865,8 @@
<action-widget response="-6">cancelbutton1</action-widget>
<action-widget response="-5">okbutton1</action-widget>
</action-widgets>
+ <child>
+ <placeholder/>
+ </child>
</object>
</interface>
diff --git a/gnucash/report/report-gnome/dialog-report-column-view.c b/gnucash/report/report-gnome/dialog-report-column-view.c
index 84bdd93..1dc5587 100644
--- a/gnucash/report/report-gnome/dialog-report-column-view.c
+++ b/gnucash/report/report-gnome/dialog-report-column-view.c
@@ -67,6 +67,12 @@ struct gncp_column_view_edit
SCM available_list;
SCM contents_list;
int contents_selected;
+
+ GtkWidget *add_button;
+ GtkWidget *remove_button;
+ GtkWidget *up_button;
+ GtkWidget *down_button;
+ GtkWidget *size_button;
};
void gnc_column_view_edit_add_cb(GtkButton * button, gpointer user_data);
@@ -228,6 +234,50 @@ update_contents_lists(gnc_column_view_edit * view)
}
static void
+gnc_column_view_update_buttons_cb (GtkTreeSelection *selection,
+ gnc_column_view_edit *r)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GtkTreeSelection *available_selection;
+
+ /* compare selection to establish which treeview selected */
+ available_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(r->available));
+
+ /* available treeview */
+ if (available_selection == selection)
+ {
+ if (gtk_tree_selection_get_selected(selection, &model, &iter))
+ gtk_widget_set_sensitive (r->add_button, TRUE);
+ else
+ gtk_widget_set_sensitive (r->add_button, FALSE);
+ return;
+ }
+
+ /* contents treeview */
+ if (gtk_tree_selection_get_selected(selection, &model, &iter))
+ {
+ int len = scm_ilength (r->contents_list);
+
+ gtk_widget_set_sensitive (r->size_button, TRUE);
+ gtk_widget_set_sensitive (r->remove_button, TRUE);
+
+ if (len > 1)
+ {
+ gtk_widget_set_sensitive (r->up_button, TRUE);
+ gtk_widget_set_sensitive (r->down_button, TRUE);
+ }
+ }
+ else
+ {
+ gtk_widget_set_sensitive (r->up_button, FALSE);
+ gtk_widget_set_sensitive (r->down_button, FALSE);
+ gtk_widget_set_sensitive (r->size_button, FALSE);
+ gtk_widget_set_sensitive (r->remove_button, FALSE);
+ }
+}
+
+static void
gnc_column_view_edit_apply_cb(GNCOptionWin * w, gpointer user_data)
{
SCM dirty_report = scm_c_eval_string("gnc:report-set-dirty?!");
@@ -278,6 +328,7 @@ gnc_column_view_edit_options(SCM options, SCM view)
GtkListStore *store;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
+ GtkTreeSelection *selection;
ptr = scm_call_1(get_editor, view);
if (ptr != SCM_BOOL_F)
@@ -304,6 +355,13 @@ gnc_column_view_edit_options(SCM options, SCM view)
editor = GTK_WIDGET(gtk_builder_get_object (builder, "view_contents_table"));
r->available = GTK_TREE_VIEW (gtk_builder_get_object (builder, "available_view"));
r->contents = GTK_TREE_VIEW (gtk_builder_get_object (builder, "contents_view"));
+
+ r->add_button = GTK_WIDGET(gtk_builder_get_object (builder, "add_button1"));
+ r->remove_button = GTK_WIDGET(gtk_builder_get_object (builder, "remove_button1"));
+ r->up_button = GTK_WIDGET(gtk_builder_get_object (builder, "up_button1"));
+ r->down_button = GTK_WIDGET(gtk_builder_get_object (builder, "down_button1"));
+ r->size_button = GTK_WIDGET(gtk_builder_get_object (builder, "size_button1"));
+
r->options = options;
r->view = view;
r->available_list = SCM_EOL;
@@ -335,6 +393,11 @@ gnc_column_view_edit_options(SCM options, SCM view)
NULL);
gtk_tree_view_append_column(r->available, column);
+ /* use the selection cb to update buttons */
+ selection = gtk_tree_view_get_selection(r->available);
+ g_signal_connect(selection, "changed",
+ G_CALLBACK(gnc_column_view_update_buttons_cb), r);
+
/* Build the 'contents' view */
store = gtk_list_store_new (NUM_CONTENTS_COLS, G_TYPE_STRING, G_TYPE_INT,
G_TYPE_INT, G_TYPE_INT);
@@ -359,6 +422,11 @@ gnc_column_view_edit_options(SCM options, SCM view)
NULL);
gtk_tree_view_append_column(r->contents, column);
+ /* use the selection cb to update buttons */
+ selection = gtk_tree_view_get_selection(r->contents);
+ g_signal_connect(selection, "changed",
+ G_CALLBACK(gnc_column_view_update_buttons_cb), r);
+
update_available_lists(r);
update_contents_lists(r);
commit 847766fc136154dc35ebcb6eeb7dc7bf6c1bc30a
Author: Robert Fewell <14uBobIT at gmail.com>
Date: Wed Aug 8 15:43:36 2018 +0100
Bug 796788 - strange behaviour in options of multicolumn report
This bug stemmed from the use of GTK_TREE_SORTABLE, the list store
entries for available reports are not stored as entered but in a sorted
order. Replaced the use of entry numbers to that of the report guid and
also used the tree selection to maintain a pointer to the
selected report. Also separated the updating of the two treeviews so
selected report position will be maintained.
diff --git a/gnucash/report/report-gnome/dialog-report-column-view.c b/gnucash/report/report-gnome/dialog-report-column-view.c
index 76e0b9d..84bdd93 100644
--- a/gnucash/report/report-gnome/dialog-report-column-view.c
+++ b/gnucash/report/report-gnome/dialog-report-column-view.c
@@ -41,7 +41,7 @@
enum available_cols
{
AVAILABLE_COL_NAME = 0,
- AVAILABLE_COL_ROW,
+ AVAILABLE_COL_GUID,
NUM_AVAILABLE_COLS
};
@@ -65,8 +65,6 @@ struct gncp_column_view_edit
GNCOptionDB * odb;
SCM available_list;
- int available_selected;
-
SCM contents_list;
int contents_selected;
};
@@ -104,82 +102,95 @@ gnc_column_view_edit_destroy(gnc_column_view_edit * view)
}
static void
-update_display_lists(gnc_column_view_edit * view)
+update_available_lists(gnc_column_view_edit * view)
{
SCM get_rpt_guids = scm_c_eval_string("gnc:all-report-template-guids");
SCM template_menu_name = scm_c_eval_string("gnc:report-template-menu-name/report-guid");
- SCM report_menu_name = scm_c_eval_string("gnc:report-menu-name");
SCM rpt_guids = scm_call_0(get_rpt_guids);
- SCM contents =
- gnc_option_db_lookup_option(view->odb, "__general", "report-list",
- SCM_BOOL_F);
- SCM this_report;
SCM selection;
+
gchar *name;
- int row, i, id;
+ gchar *guid_str;
+
+ GtkTreeModel *model;
GtkListStore *store;
GtkTreeIter iter;
- GtkTreePath *path;
GtkTreeSelection *tree_selection;
-
/* Update the list of available reports (left selection box). */
- row = view->available_selected;
+ tree_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(view->available));
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW(view->available));
- if (scm_is_list(view->available_list) && !scm_is_null (view->available_list))
+ if (gtk_tree_selection_get_selected(tree_selection, &model, &iter))
{
- row = MIN (row, scm_ilength (view->available_list) - 1);
- selection = scm_list_ref (view->available_list, scm_from_int (row));
+ gchar *guid_str;
+ gtk_tree_model_get(model, &iter,
+ AVAILABLE_COL_GUID, &guid_str,
+ -1);
+ selection = scm_from_utf8_string(guid_str);
+ g_free (guid_str);
}
else
- {
selection = SCM_UNDEFINED;
- }
scm_gc_unprotect_object(view->available_list);
view->available_list = rpt_guids;
scm_gc_protect_object(view->available_list);
- store = GTK_LIST_STORE(gtk_tree_view_get_model(view->available));
+ store = GTK_LIST_STORE(model);
gtk_list_store_clear(store);
if (scm_is_list(rpt_guids))
{
- for (i = 0; !scm_is_null(rpt_guids); rpt_guids = SCM_CDR(rpt_guids), i++)
+ for (int i = 0; !scm_is_null(rpt_guids); rpt_guids = SCM_CDR(rpt_guids), i++)
{
- if (scm_is_equal (SCM_CAR(rpt_guids), selection))
- row = i;
- name = gnc_scm_to_utf8_string (scm_call_2(template_menu_name, SCM_CAR(rpt_guids),
+ SCM rpt_guids_temp = SCM_CAR(rpt_guids);
+
+ guid_str = scm_to_utf8_string (rpt_guids_temp);
+ name = gnc_scm_to_utf8_string (scm_call_2(template_menu_name, rpt_guids_temp,
SCM_BOOL_F));
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
AVAILABLE_COL_NAME, _(name),
- AVAILABLE_COL_ROW, i,
+ AVAILABLE_COL_GUID, guid_str,
-1);
+
+ if (scm_is_equal (rpt_guids_temp, selection))
+ gtk_tree_selection_select_iter (tree_selection, &iter);
+
g_free (name);
+ g_free (guid_str);
}
-
}
+}
- tree_selection = gtk_tree_view_get_selection(view->available);
- path = gtk_tree_path_new_from_indices(row, -1);
- gtk_tree_selection_select_path(tree_selection, path);
- gtk_tree_path_free(path);
+static void
+update_contents_lists(gnc_column_view_edit * view)
+{
+ SCM report_menu_name = scm_c_eval_string("gnc:report-menu-name");
+ SCM contents =
+ gnc_option_db_lookup_option(view->odb, "__general", "report-list",
+ SCM_BOOL_F);
+ SCM this_report;
+ SCM selection;
+ gchar *name;
+ GtkListStore *store;
+ GtkTreeIter iter;
+ GtkTreeSelection *tree_selection;
/* Update the list of selected reports (right selection box). */
- row = view->contents_selected;
+ tree_selection = gtk_tree_view_get_selection(view->contents);
if (scm_is_list(view->contents_list) && !scm_is_null (view->contents_list))
{
+ int row = view->contents_selected;
row = MIN (row, scm_ilength (view->contents_list) - 1);
- selection = scm_list_ref (view->contents_list, scm_from_int (row));
+ selection = scm_list_ref (view->contents_list, scm_from_int (row));
}
else
- {
selection = SCM_UNDEFINED;
- }
scm_gc_unprotect_object(view->contents_list);
view->contents_list = contents;
@@ -187,14 +198,15 @@ update_display_lists(gnc_column_view_edit * view)
store = GTK_LIST_STORE(gtk_tree_view_get_model(view->contents));
gtk_list_store_clear(store);
+
if (scm_is_list(contents))
{
- for (i = 0; !scm_is_null(contents); contents = SCM_CDR(contents), i++)
+ for (int i = 0; !scm_is_null(contents); contents = SCM_CDR(contents), i++)
{
- if (scm_is_equal (SCM_CAR(contents), selection))
- row = i;
+ SCM contents_temp = SCM_CAR(contents);
+
+ int id = scm_to_int(SCM_CAAR(contents));
- id = scm_to_int(SCM_CAAR(contents));
this_report = gnc_report_find(id);
name = gnc_scm_to_utf8_string (scm_call_1(report_menu_name, this_report));
@@ -203,44 +215,16 @@ update_display_lists(gnc_column_view_edit * view)
(store, &iter,
CONTENTS_COL_NAME, _(name),
CONTENTS_COL_ROW, i,
- CONTENTS_COL_REPORT_COLS, scm_to_int(SCM_CADR(SCM_CAR(contents))),
- CONTENTS_COL_REPORT_ROWS, scm_to_int(SCM_CADDR(SCM_CAR(contents))),
+ CONTENTS_COL_REPORT_COLS, scm_to_int(SCM_CADR(contents_temp)),
+ CONTENTS_COL_REPORT_ROWS, scm_to_int(SCM_CADDR(contents_temp)),
-1);
+
+ if (scm_is_equal (contents_temp, selection))
+ gtk_tree_selection_select_iter (tree_selection, &iter);
+
g_free (name);
}
}
-
- tree_selection = gtk_tree_view_get_selection(view->contents);
- path = gtk_tree_path_new_from_indices(row, -1);
- gtk_tree_selection_select_path(tree_selection, path);
- // gtk_tree_view_scroll_to_cell(view->contents, path, NULL, TRUE, 0.5, 0.0);
- gtk_tree_path_free(path);
-}
-
-static void
-gnc_column_view_select_avail_cb(GtkTreeSelection *selection,
- gnc_column_view_edit *r)
-{
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- if (gtk_tree_selection_get_selected(selection, &model, &iter))
- gtk_tree_model_get(model, &iter,
- AVAILABLE_COL_ROW, &r->available_selected,
- -1);
-}
-
-static void
-gnc_column_view_select_contents_cb(GtkTreeSelection *selection,
- gnc_column_view_edit *r)
-{
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- if (gtk_tree_selection_get_selected(selection, &model, &iter))
- gtk_tree_model_get(model, &iter,
- AVAILABLE_COL_ROW, &r->contents_selected,
- -1);
}
static void
@@ -294,7 +278,6 @@ gnc_column_view_edit_options(SCM options, SCM view)
GtkListStore *store;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
- GtkTreeSelection *selection;
ptr = scm_call_1(get_editor, view);
if (ptr != SCM_BOOL_F)
@@ -323,7 +306,6 @@ gnc_column_view_edit_options(SCM options, SCM view)
r->contents = GTK_TREE_VIEW (gtk_builder_get_object (builder, "contents_view"));
r->options = options;
r->view = view;
- r->available_selected = 0;
r->available_list = SCM_EOL;
r->contents_selected = 0;
r->contents_list = SCM_EOL;
@@ -342,7 +324,7 @@ gnc_column_view_edit_options(SCM options, SCM view)
scm_gc_protect_object(r->contents_list);
/* Build the 'available' view */
- store = gtk_list_store_new (NUM_AVAILABLE_COLS, G_TYPE_STRING, G_TYPE_INT);
+ store = gtk_list_store_new (NUM_AVAILABLE_COLS, G_TYPE_STRING, G_TYPE_STRING);
gtk_tree_view_set_model(r->available, GTK_TREE_MODEL(store));
gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), AVAILABLE_COL_NAME, GTK_SORT_ASCENDING);
g_object_unref(store);
@@ -353,10 +335,6 @@ gnc_column_view_edit_options(SCM options, SCM view)
NULL);
gtk_tree_view_append_column(r->available, column);
- selection = gtk_tree_view_get_selection(r->available);
- g_signal_connect(selection, "changed",
- G_CALLBACK(gnc_column_view_select_avail_cb), r);
-
/* Build the 'contents' view */
store = gtk_list_store_new (NUM_CONTENTS_COLS, G_TYPE_STRING, G_TYPE_INT,
G_TYPE_INT, G_TYPE_INT);
@@ -381,11 +359,8 @@ gnc_column_view_edit_options(SCM options, SCM view)
NULL);
gtk_tree_view_append_column(r->contents, column);
- selection = gtk_tree_view_get_selection(r->contents);
- g_signal_connect(selection, "changed",
- G_CALLBACK(gnc_column_view_select_contents_cb), r);
-
- update_display_lists(r);
+ update_available_lists(r);
+ update_contents_lists(r);
gnc_options_dialog_set_apply_cb(r->optwin,
gnc_column_view_edit_apply_cb, r);
@@ -414,12 +389,22 @@ gnc_column_view_edit_add_cb(GtkButton * button, gpointer user_data)
SCM oldlist = r->contents_list;
int count;
int oldlength, id;
+ gchar *guid_str;
+ GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(r->available));
+ GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW(r->available));
+ GtkTreeIter iter;
+
+ /* make sure there is a selected entry */
+ if (gtk_tree_selection_get_selected(selection, &model, &iter))
+ gtk_tree_model_get(model, &iter,
+ AVAILABLE_COL_GUID, &guid_str, -1);
+ else
+ return;
- if (scm_is_list(r->available_list) &&
- (scm_ilength(r->available_list) > r->available_selected))
+ if (scm_is_list(r->available_list))
{
- template_name = scm_list_ref(r->available_list,
- scm_from_int (r->available_selected));
+ template_name = scm_from_utf8_string(guid_str);
+
new_report = scm_call_1(make_report, template_name);
id = scm_to_int(new_report);
scm_call_2(mark_report, gnc_report_find(id), SCM_BOOL_T);
@@ -461,8 +446,8 @@ gnc_column_view_edit_add_cb(GtkButton * button, gpointer user_data)
r->contents_list);
gnc_options_dialog_changed (r->optwin);
}
-
- update_display_lists(r);
+ g_free (guid_str);
+ update_contents_lists(r);
}
void
@@ -473,6 +458,16 @@ gnc_column_view_edit_remove_cb(GtkButton * button, gpointer user_data)
SCM oldlist = r->contents_list;
int count;
int oldlength;
+ GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(r->contents));
+ GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW(r->contents));
+ GtkTreeIter iter;
+
+ /* make sure there is a selected entry */
+ if (gtk_tree_selection_get_selected(selection, &model, &iter))
+ gtk_tree_model_get(model, &iter,
+ CONTENTS_COL_ROW, &r->contents_selected, -1);
+ else
+ return;
if (scm_is_list(r->contents_list))
{
@@ -504,8 +499,7 @@ gnc_column_view_edit_remove_cb(GtkButton * button, gpointer user_data)
gnc_options_dialog_changed (r->optwin);
}
-
- update_display_lists(r);
+ update_contents_lists(r);
}
void
@@ -517,6 +511,16 @@ gnc_edit_column_view_move_up_cb(GtkButton * button, gpointer user_data)
SCM temp;
int oldlength;
int count;
+ GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(r->contents));
+ GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW(r->contents));
+ GtkTreeIter iter;
+
+ /* make sure there is a selected entry */
+ if (gtk_tree_selection_get_selected(selection, &model, &iter))
+ gtk_tree_model_get(model, &iter,
+ CONTENTS_COL_ROW, &r->contents_selected, -1);
+ else
+ return;
oldlength = scm_ilength(r->contents_list);
if ((r->contents_selected > 0) && (oldlength > r->contents_selected))
@@ -542,7 +546,7 @@ gnc_edit_column_view_move_up_cb(GtkButton * button, gpointer user_data)
gnc_options_dialog_changed (r->optwin);
- update_display_lists(r);
+ update_contents_lists(r);
}
}
@@ -555,6 +559,16 @@ gnc_edit_column_view_move_down_cb(GtkButton * button, gpointer user_data)
SCM temp;
int oldlength;
int count;
+ GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(r->contents));
+ GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW(r->contents));
+ GtkTreeIter iter;
+
+ /* make sure there is a selected entry */
+ if (gtk_tree_selection_get_selected(selection, &model, &iter))
+ gtk_tree_model_get(model, &iter,
+ CONTENTS_COL_ROW, &r->contents_selected, -1);
+ else
+ return;
oldlength = scm_ilength(r->contents_list);
if (oldlength > (r->contents_selected + 1))
@@ -580,7 +594,7 @@ gnc_edit_column_view_move_down_cb(GtkButton * button, gpointer user_data)
gnc_options_dialog_changed (r->optwin);
- update_display_lists(r);
+ update_contents_lists(r);
}
}
@@ -636,7 +650,7 @@ gnc_column_view_edit_size_cb(GtkButton * button, gpointer user_data)
current);
scm_gc_protect_object(r->contents_list);
gnc_options_dialog_changed (r->optwin);
- update_display_lists(r);
+ update_contents_lists(r);
}
g_object_unref(G_OBJECT(builder));
Summary of changes:
gnucash/gnome-utils/dialog-options.c | 2 +-
gnucash/gtkbuilder/dialog-report.glade | 33 +++-
.../report-gnome/dialog-report-column-view.c | 214 +++++++++++++--------
3 files changed, 162 insertions(+), 87 deletions(-)
More information about the gnucash-changes
mailing list