Add the sort order to the right of the summary bar

Add the sort order to the right of the summary bar with a tooltip that
shows whether ascending or descending and an arrow. When arrow can
also be emphasized with css by using the class "gnc-class-highlight".
This commit is contained in:
Robert Fewell 2018-06-18 13:11:37 +01:00
parent c3724431e9
commit b4db066d84
2 changed files with 115 additions and 19 deletions

View File

@ -66,7 +66,9 @@ static QofLogModule log_module = GNC_MOD_GUI;
void gnc_split_reg_raise( GNCSplitReg *gsr );
static GtkWidget* add_summary_label( GtkWidget *summarybar, gboolean pack_start,
const char *label_str );
const char *label_str, GtkWidget *extra );
static void gsr_summarybar_set_arrow_draw (GNCSplitReg *gsr);
static void gnc_split_reg_determine_read_only( GNCSplitReg *gsr );
@ -347,6 +349,8 @@ gnc_split_reg_init( GNCSplitReg *gsr )
gtk_orientable_set_orientation (GTK_ORIENTABLE(gsr), GTK_ORIENTATION_VERTICAL);
gsr->sort_type = BY_STANDARD;
gsr->sort_rev = FALSE;
gsr->sort_arrow_handler_id = 0;
gsr->width = -1;
gsr->height = -1;
gsr->numRows = 10;
@ -546,6 +550,71 @@ gsr_redraw_all_cb (GnucashRegister *g_reg, gpointer data)
gsr_update_summary_label( gsr->projectedminimum_label,
xaccAccountGetProjectedMinimumBalance,
leader, print_info, commodity, reverse, euro );
// Sort label
if (gsr->sort_label != NULL)
{
gchar *old_tt_text = gtk_widget_get_tooltip_text (GTK_WIDGET(gsr->sort_label));
gchar *new_tt_text;
gchar *text = NULL;
switch (gsr->sort_type)
{
case (0):
text = _("None");
break;
case (1):
text = _("Standard Order");
break;
case (2):
text = _("Date");
break;
case (3):
text = _("Date of Entry");
break;
case (4):
text = _("Statement Date");
break;
case (5):
text = _("Number");
break;
case (6):
text = _("Amount");
break;
case (7):
text = _("Memo");
break;
case (8):
text = _("Description");
break;
case (9):
text = _("Action");
break;
case (10):
text = _("Notes");
break;
}
if (gsr->sort_rev)
gtk_widget_set_tooltip_text (GTK_WIDGET(gsr->sort_label), _("Descending"));
else
gtk_widget_set_tooltip_text (GTK_WIDGET(gsr->sort_label), _("Ascending"));
new_tt_text = gtk_widget_get_tooltip_text (GTK_WIDGET(gsr->sort_label));
// does the arrow need changing
if (g_strcmp0 (old_tt_text, new_tt_text) != 0)
gsr_summarybar_set_arrow_draw (gsr);
if (old_tt_text)
g_free (old_tt_text);
if (new_tt_text)
g_free (new_tt_text);
gtk_label_set_text (GTK_LABEL(gsr->sort_label), text);
}
if (gsr->shares_label == NULL && gsr->value_label == NULL)
return;
amount = xaccAccountGetBalance( leader );
@ -1868,14 +1937,15 @@ gnc_split_reg_sort_notes_cb(GtkWidget *w, gpointer data)
void
gnc_split_reg_set_sort_reversed(GNCSplitReg *gsr, gboolean rev)
{
/* Note: sort_reversed is the boolean opposite of sort_increasing
* so when rev == true, we're sorting decreasing
* In other words, qof_query_set_sort_increasing should
* always use the inverse of rev.
*/
Query *query = gnc_ledger_display_get_query( gsr->ledger );
qof_query_set_sort_increasing (query, !rev, !rev, !rev);
gnc_ledger_display_refresh( gsr->ledger );
/* Note: sort_reversed is the boolean opposite of sort_increasing
* so when rev == true, we're sorting decreasing
* In other words, qof_query_set_sort_increasing should
* always use the inverse of rev.
*/
Query *query = gnc_ledger_display_get_query( gsr->ledger );
qof_query_set_sort_increasing (query, !rev, !rev, !rev);
gsr->sort_rev = rev;
gnc_ledger_display_refresh( gsr->ledger );
}
static void
@ -2003,7 +2073,7 @@ gnc_split_reg_size_allocate (GtkWidget *widget,
static
GtkWidget*
add_summary_label (GtkWidget *summarybar, gboolean pack_start, const char *label_str)
add_summary_label (GtkWidget *summarybar, gboolean pack_start, const char *label_str, GtkWidget *extra)
{
GtkWidget *hbox;
GtkWidget *label;
@ -2022,10 +2092,25 @@ add_summary_label (GtkWidget *summarybar, gboolean pack_start, const char *label
label = gtk_label_new( "" );
gnc_label_set_alignment(label, 1.0, 0.5 );
gtk_box_pack_start( GTK_BOX(hbox), label, FALSE, FALSE, 0 );
if (extra != NULL)
gtk_box_pack_start( GTK_BOX(hbox), extra, FALSE, FALSE, 0 );
return label;
}
static void
gsr_summarybar_set_arrow_draw (GNCSplitReg *gsr)
{
if (gsr->sort_arrow_handler_id > 0)
g_signal_handler_disconnect (G_OBJECT(gsr->sort_arrow), gsr->sort_arrow_handler_id);
gsr->sort_arrow_handler_id = g_signal_connect (G_OBJECT (gsr->sort_arrow), "draw",
G_CALLBACK (gnc_draw_arrow_cb), GINT_TO_POINTER(gsr->sort_rev));
gtk_widget_queue_draw (gsr->sort_arrow);
}
GtkWidget *
gsr_create_summary_bar( GNCSplitReg *gsr )
{
@ -2036,6 +2121,8 @@ gsr_create_summary_bar( GNCSplitReg *gsr )
gsr->reconciled_label = NULL;
gsr->future_label = NULL;
gsr->projectedminimum_label = NULL;
gsr->sort_label = NULL;
gsr->sort_arrow = NULL;
gsr->shares_label = NULL;
gsr->value_label = NULL;
@ -2047,21 +2134,26 @@ gsr_create_summary_bar( GNCSplitReg *gsr )
summarybar = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4);
gtk_box_set_homogeneous (GTK_BOX (summarybar), FALSE);
gtk_widget_set_name (summarybar, "gnc-id-summarybar");
if (!xaccAccountIsPriced(gnc_ledger_display_leader(gsr->ledger)))
{
gsr->balance_label = add_summary_label (summarybar, TRUE, _("Present:"));
gsr->future_label = add_summary_label (summarybar, TRUE, _("Future:"));
gsr->cleared_label = add_summary_label (summarybar, TRUE, _("Cleared:"));
gsr->reconciled_label = add_summary_label (summarybar, TRUE, _("Reconciled:"));
gsr->projectedminimum_label = add_summary_label (summarybar, TRUE, _("Projected Minimum:"));
gsr->balance_label = add_summary_label (summarybar, TRUE, _("Present:"), NULL);
gsr->future_label = add_summary_label (summarybar, TRUE, _("Future:"), NULL);
gsr->cleared_label = add_summary_label (summarybar, TRUE, _("Cleared:"), NULL);
gsr->reconciled_label = add_summary_label (summarybar, TRUE, _("Reconciled:"), NULL);
gsr->projectedminimum_label = add_summary_label (summarybar, TRUE, _("Projected Minimum:"), NULL);
}
else
{
gsr->shares_label = add_summary_label (summarybar, TRUE, _("Shares:"));
gsr->value_label = add_summary_label (summarybar, TRUE, _("Current Value:"));
gsr->shares_label = add_summary_label (summarybar, TRUE, _("Shares:"), NULL);
gsr->value_label = add_summary_label (summarybar, TRUE, _("Current Value:"), NULL);
}
gsr->sort_arrow = gtk_image_new_from_icon_name ("image-missing", GTK_ICON_SIZE_SMALL_TOOLBAR);
gsr->sort_label = add_summary_label (summarybar, FALSE, _("Sort By: "), gsr->sort_arrow);
gnc_widget_set_style_context (GTK_WIDGET(gsr->sort_arrow), "gnc-class-highlight");
gsr->summarybar = summarybar;
/* Force the first update */

View File

@ -74,6 +74,8 @@ struct _GNCSplitReg
GtkWidget *projectedminimum_label;
GtkWidget *shares_label;
GtkWidget *value_label;
GtkWidget *sort_label;
GtkWidget *sort_arrow;
/** The current ledger display. **/
GNCLedgerDisplay *ledger;
@ -82,7 +84,9 @@ struct _GNCSplitReg
gint numRows;
guint sort_type;
guint sort_type;
gboolean sort_rev;
gulong sort_arrow_handler_id;
gboolean read_only;
};
@ -197,7 +201,7 @@ void gnc_split_reg_set_sort_type_force( GNCSplitReg *gsr, SortType t, gboolean f
/**
* Set/get sort order of register
**/
**/
void gnc_split_reg_set_sort_reversed(GNCSplitReg *gsr, gboolean rev);