[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pspp-cvs] psppire ./TODO ./psppire.glade src/ChangeLog sr...
From: |
John Darrington |
Subject: |
[Pspp-cvs] psppire ./TODO ./psppire.glade src/ChangeLog sr... |
Date: |
Sun, 18 Dec 2005 04:57:43 +0000 |
CVSROOT: /sources/pspp
Module name: psppire
Branch:
Changes by: John Darrington <address@hidden> 05/12/18 04:57:43
Modified files:
. : TODO psppire.glade
src : ChangeLog var_type_dialog.c var_type_dialog.h
Log message:
Implemented Custom Currency input.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pspp/psppire/TODO.diff?tr1=1.16&tr2=1.17&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/psppire/psppire.glade.diff?tr1=1.15&tr2=1.16&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/psppire/src/ChangeLog.diff?tr1=1.10&tr2=1.11&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/psppire/src/var_type_dialog.c.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/pspp/psppire/src/var_type_dialog.h.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
Patches:
Index: psppire/TODO
diff -u psppire/TODO:1.16 psppire/TODO:1.17
--- psppire/TODO:1.16 Wed Dec 14 11:39:12 2005
+++ psppire/TODO Sun Dec 18 04:57:43 2005
@@ -42,8 +42,6 @@
* When switching between data/variables sheets by double-clicking title
buttons, we need to scroll the sheet to the right position.
-* Implement Custom Currency sub type in Variable Type dialog.
-
* Value labels currently don't work properly for Date, Dot, Comma variables.
* Implement mechanism for handling errors (use GError ?).
Index: psppire/psppire.glade
diff -u psppire/psppire.glade:1.15 psppire/psppire.glade:1.16
--- psppire/psppire.glade:1.15 Wed Dec 14 11:39:12 2005
+++ psppire/psppire.glade Sun Dec 18 04:57:43 2005
@@ -784,7 +784,7 @@
<child>
<widget class="GtkScrolledWindow" id="scrolledwindow4">
- <property name="width_request">185</property>
+ <property name="width_request">20</property>
<property name="height_request">194</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
@@ -808,8 +808,8 @@
</widget>
<packing>
<property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
</packing>
</child>
@@ -820,6 +820,8 @@
<child>
<widget class="GtkScrolledWindow" id="scrolledwindow5">
+ <property name="width_request">1</property>
+ <property name="height_request">120</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
@@ -828,9 +830,7 @@
<property
name="window_placement">GTK_CORNER_TOP_LEFT</property>
<child>
- <widget class="GtkTreeView" id="treeview2">
- <property name="width_request">36</property>
- <property name="height_request">115</property>
+ <widget class="GtkTreeView" id="custom_treeview">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="headers_visible">False</property>
@@ -876,9 +876,9 @@
<property name="spacing">0</property>
<child>
- <widget class="GtkLabel" id="label14">
+ <widget class="GtkLabel" id="psample_label">
<property name="visible">True</property>
- <property name="label"
translatable="yes">label14</property>
+ <property name="label"
translatable="yes">positive</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property
name="justify">GTK_JUSTIFY_LEFT</property>
@@ -895,15 +895,15 @@
</widget>
<packing>
<property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label15">
+ <widget class="GtkLabel" id="nsample_label">
<property name="visible">True</property>
- <property name="label"
translatable="yes">label15</property>
+ <property name="label"
translatable="yes">negative</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property
name="justify">GTK_JUSTIFY_LEFT</property>
@@ -920,8 +920,8 @@
</widget>
<packing>
<property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
</packing>
</child>
</widget>
@@ -956,6 +956,7 @@
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
</widget>
Index: psppire/src/ChangeLog
diff -u psppire/src/ChangeLog:1.10 psppire/src/ChangeLog:1.11
--- psppire/src/ChangeLog:1.10 Wed Dec 14 11:39:12 2005
+++ psppire/src/ChangeLog Sun Dec 18 04:57:43 2005
@@ -1,3 +1,7 @@
+Sun Dec 18 12:41:56 WST 2005 John Darrington <address@hidden>
+
+ * var_type_dialog.c: Implemented custom currency type selection.
+
Wed Dec 14 19:37:01 WST 2005 John Darrington <address@hidden>
* val_labs_dialog.c: When entering value, treeview item is now
Index: psppire/src/var_type_dialog.c
diff -u psppire/src/var_type_dialog.c:1.7 psppire/src/var_type_dialog.c:1.8
--- psppire/src/var_type_dialog.c:1.7 Wed Dec 14 11:39:12 2005
+++ psppire/src/var_type_dialog.c Sun Dec 18 04:57:43 2005
@@ -29,6 +29,7 @@
#include "misc.h"
#include "var.h"
+#include "settings.h"
struct tgs
{
@@ -42,7 +43,8 @@
struct fmt_spec spec;
};
-static struct format_opt format_option[] =
+
+static const struct format_opt format_option[] =
{
{ "dd-mmm-yyyy", {FMT_DATE, 11, 0} },
{ "dd-mmm-yy", {FMT_DATE, 9, 0} },
@@ -64,7 +66,7 @@
};
-static struct fmt_spec dollar_format[] =
+static const struct fmt_spec dollar_format[] =
{
{FMT_DOLLAR, 2, 0},
{FMT_DOLLAR, 3, 0},
@@ -80,9 +82,21 @@
{FMT_DOLLAR, 19, 2}
};
+static const int cc_format[] =
+ {
+ FMT_CCA,
+ FMT_CCB,
+ FMT_CCC,
+ FMT_CCD,
+ FMT_CCE,
+ };
+
static void select_treeview_from_format
- (GtkTreeView *treeview, const struct fmt_spec *fmt);
+ (GtkTreeView *treeview, const struct fmt_spec *fmt);
+
+static void select_treeview_from_format_type(GtkTreeView *treeview,
+ const int fmt_type);
/* callback for when any of the radio buttons are toggled */
@@ -97,6 +111,30 @@
tgs->dialog->active_button = tgs->button;
}
+static void update_width_decimals(const struct var_type_dialog *dialog);
+
+#define force_max(x, val) if (x > val) x = val
+
+/*
+ Set the local format from the variable
+ and force them to have sensible values */
+static void
+set_local_width_decimals(struct var_type_dialog *dialog)
+{
+ *dialog->fmt_l = dialog->var->write;
+
+ switch (dialog->active_button)
+ {
+ case BUTTON_STRING:
+ force_max( dialog->fmt_l->w, 255);
+ break;
+ default:
+ force_max( dialog->fmt_l->w, 40);
+ force_max( dialog->fmt_l->d, 16);
+ break;
+ }
+}
+
/* callback for when any of the radio buttons are toggled */
static void
@@ -123,7 +161,10 @@
}
return ;
}
-
+
+ set_local_width_decimals(dialog);
+ update_width_decimals(dialog);
+
switch (dialog->active_button)
{
case BUTTON_STRING:
@@ -144,6 +185,9 @@
gtk_widget_show_all(dialog->width_decimals);
break;
case BUTTON_CUSTOM:
+ select_treeview_from_format_type(dialog->custom_treeview,
+ cc_format[0]);
+
gtk_widget_show(dialog->width_decimals);
gtk_widget_show(dialog->custom_currency_hbox);
break;
@@ -202,28 +246,88 @@
gtk_size_group_add_widget(sg, w);
}
-/* Callback for when a treeview row is changed.
- It sets the fmt_spec to reflect the selected format */
+/* Set the local width and decimals entry boxes to reflec the local format */
static void
-update_width_decimals(GtkTreeView *treeview, gpointer data)
+update_width_decimals(const struct var_type_dialog *dialog)
{
- struct var_type_dialog *dialog = data;
+ g_assert(dialog);
+ g_assert(dialog->fmt_l);
- gchar *text = g_strdup_printf("%d", dialog->fmt_spec->w);
+ gchar *text = g_strdup_printf("%d", dialog->fmt_l->w);
gtk_entry_set_text(GTK_ENTRY(dialog->entry_width), text);
g_free(text);
- text = g_strdup_printf("%d", dialog->fmt_spec->d);
+ text = g_strdup_printf("%d", dialog->fmt_l->d);
gtk_entry_set_text(GTK_ENTRY(dialog->entry_decimals), text);
g_free(text);
}
+/* Callback for when the custom treeview row is changed.
+ It sets dialog box to reflect the selected format */
+static void
+preview_custom(GtkWidget *w, gpointer data)
+{
+ struct var_type_dialog *dialog = data;
+
+ if ( dialog->active_button != BUTTON_CUSTOM )
+ return;
+
+ const gchar *text = gtk_entry_get_text(GTK_ENTRY(dialog->entry_decimals));
+ dialog->fmt_l->d = atoi(text);
+
+ text = gtk_entry_get_text(GTK_ENTRY(dialog->entry_width));
+ dialog->fmt_l->w = atoi(text);
+
+ if ( ! check_output_specifier(dialog->fmt_l, 0))
+ {
+ gtk_label_set_text(GTK_LABEL(dialog->label_psample), "---");
+ gtk_label_set_text(GTK_LABEL(dialog->label_nsample), "---");
+ }
+ else
+ {
+ gchar *sample_text;
+ union value v;
+ v.f = 1234.56;
+
+ sample_text = value_to_text(v, *dialog->fmt_l);
+ gtk_label_set_text(GTK_LABEL(dialog->label_psample), sample_text);
+ g_free(sample_text);
+
+ v.f = -v.f;
+ sample_text = value_to_text(v, *dialog->fmt_l);
+ gtk_label_set_text(GTK_LABEL(dialog->label_nsample), sample_text);
+ g_free(sample_text);
+ }
+}
+
+/* Callback for when a treeview row is changed.
+ It sets the fmt_l_spec to reflect the selected format */
+static void
+set_format_from_treeview(GtkTreeView *treeview, gpointer data)
+{
+ struct var_type_dialog *dialog = data;
+ GtkTreeIter iter ;
+ GValue the_value = {0};
+
+ GtkTreeSelection* sel = gtk_tree_view_get_selection(treeview);
+
+ GtkTreeModel * model = gtk_tree_view_get_model(treeview);
+
+ gtk_tree_selection_get_selected (sel, &model, &iter);
+
+ gtk_tree_model_get_value(model, &iter, 1, &the_value);
+
+ *dialog->fmt_l = *(struct fmt_spec *) g_value_get_pointer(&the_value);
+
+}
+
/* Callback for when a treeview row is changed.
- It sets the fmt_spec to reflect the selected format */
+ It sets the type of the fmt_l to reflect the selected type */
static void
-set_format(GtkTreeView *treeview, gpointer data)
+set_format_type_from_treeview(GtkTreeView *treeview, gpointer data)
{
+ static struct fmt_spec custom_format = {0,0,0};
struct var_type_dialog *dialog = data;
GtkTreeIter iter ;
GValue the_value = {0};
@@ -236,11 +340,14 @@
gtk_tree_model_get_value(model, &iter, 1, &the_value);
- dialog->fmt_spec = g_value_get_pointer(&the_value);
+ *dialog->fmt_l = custom_format;
+ dialog->fmt_l->type = *(int*) g_value_get_pointer(&the_value);
+
}
+
/* Create the structure from the XML definitions */
struct var_type_dialog *
var_type_dialog_create(GladeXML *xml)
@@ -250,7 +357,7 @@
struct var_type_dialog *dialog = g_malloc(sizeof(struct var_type_dialog));
- dialog->fmt_spec = 0;
+ dialog->fmt_l = g_malloc(sizeof *dialog->fmt_l);
dialog->window = get_widget_assert(xml,"var_type_dialog");
@@ -280,6 +387,9 @@
dialog->label_decimals = get_widget_assert(xml, "decimals_label");
dialog->entry_decimals = get_widget_assert(xml, "decimals_entry");
+ dialog->label_psample = get_widget_assert(xml, "psample_label");
+ dialog->label_nsample = get_widget_assert(xml, "nsample_label");
+
dialog->entry_width = get_widget_assert(xml,"width_entry");
@@ -290,6 +400,10 @@
dialog->dollar_treeview =
GTK_TREE_VIEW(get_widget_assert(xml, "dollar_treeview"));
+ dialog->custom_treeview =
+ GTK_TREE_VIEW(get_widget_assert(xml, "custom_treeview"));
+
+
dialog->ok = get_widget_assert(xml,"var_type_ok");
@@ -298,7 +412,7 @@
We need to make sure that they all have the same width, to avoid
upleasant resizing effects */
GtkSizeGroup *sizeGroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
- gtk_container_foreach(get_widget_assert(xml, "middle_box"),
+ gtk_container_foreach(GTK_CONTAINER(get_widget_assert(xml, "middle_box")),
add_to_group, sizeGroup);
@@ -351,7 +465,7 @@
g_object_unref(list_store);
g_signal_connect(GTK_OBJECT(dialog->date_format_treeview), "cursor-changed",
- GTK_SIGNAL_FUNC(set_format), dialog);
+ GTK_SIGNAL_FUNC(set_format_from_treeview), dialog);
/* populate the dollar treeview */
@@ -387,13 +501,66 @@
g_signal_connect(GTK_OBJECT(dialog->dollar_treeview),
"cursor-changed",
- GTK_SIGNAL_FUNC(set_format), dialog);
+ GTK_SIGNAL_FUNC(set_format_from_treeview), dialog);
- g_signal_connect(GTK_OBJECT(dialog->dollar_treeview),
+ g_signal_connect_swapped(GTK_OBJECT(dialog->dollar_treeview),
"cursor-changed",
GTK_SIGNAL_FUNC(update_width_decimals), dialog);
+ /* populate the custom treeview */
+
+ renderer = gtk_cell_renderer_text_new();
+
+ column = gtk_tree_view_column_new_with_attributes ("Title",
+ renderer,
+ "text",
+ 0,
+ NULL);
+
+ gtk_tree_view_append_column (GTK_TREE_VIEW (dialog->custom_treeview),
+ column);
+
+
+ list_store = gtk_list_store_new (2, G_TYPE_STRING,
+ G_TYPE_POINTER);
+
+ for ( i = 0 ; i < CC_CNT ; ++i )
+ {
+ gchar text[4];
+ g_snprintf(text, 4, "CC%c", 'A' + i);
+ gtk_list_store_append (list_store, &iter);
+ gtk_list_store_set (list_store, &iter,
+ 0, text,
+ 1, &cc_format[i],
+ -1);
+ }
+
+ gtk_tree_view_set_model(GTK_TREE_VIEW(dialog->custom_treeview),
+ GTK_TREE_MODEL(list_store));
+
+ g_object_unref(list_store);
+
+
+ g_signal_connect(GTK_OBJECT(dialog->custom_treeview),
+ "cursor-changed",
+ GTK_SIGNAL_FUNC(set_format_type_from_treeview), dialog);
+
+
+ g_signal_connect(GTK_OBJECT(dialog->custom_treeview),
+ "cursor-changed",
+ GTK_SIGNAL_FUNC(preview_custom), dialog);
+
+
+ g_signal_connect(GTK_OBJECT(dialog->entry_width),
+ "changed",
+ GTK_SIGNAL_FUNC(preview_custom), dialog);
+
+
+ g_signal_connect(GTK_OBJECT(dialog->entry_decimals),
+ "changed",
+ GTK_SIGNAL_FUNC(preview_custom), dialog);
+
/* Connect the OK button */
g_signal_connect(dialog->ok, "clicked", G_CALLBACK(on_var_type_ok_clicked),
@@ -454,6 +621,45 @@
}
+/* Set the TREEVIEW list cursor to the item described by FMT_TYPE */
+static void
+select_treeview_from_format_type(GtkTreeView *treeview,
+ const int fmt_type)
+{
+ /*
+ We do this with a linear search through the model --- hardly
+ efficient, but the list is short ... */
+ GtkTreeIter iter;
+
+ GtkTreeModel * model = gtk_tree_view_get_model(treeview);
+
+ gboolean success;
+ for (success = gtk_tree_model_get_iter_first(model, &iter);
+ success;
+ success = gtk_tree_model_iter_next(model, &iter))
+ {
+ GValue value = {0};
+
+ gtk_tree_model_get_value(model, &iter, 1, &value);
+
+ const int spec = * ((int *) g_value_get_pointer(&value));
+
+ if ( spec == fmt_type)
+ break;
+ }
+
+ GtkTreePath *path = gtk_tree_model_get_path(model, &iter);
+ if ( path )
+ {
+ gtk_tree_view_set_cursor(treeview, path, 0, 0);
+ gtk_tree_path_free(path);
+ }
+ else
+ g_warning("Unknown custom type %d\n", fmt_type);
+
+}
+
+
/* Set up the state of the dialog box to match the variable VAR */
void
@@ -465,7 +671,6 @@
g_assert(dialog);
-
dialog->var = var;
GString *str = g_string_new("");
@@ -480,7 +685,7 @@
gtk_entry_set_text(GTK_ENTRY(dialog->entry_width),
str->str);
- g_string_free(str,TRUE);
+ g_string_free(str, TRUE);
/* Populate the radio button states */
switch (write_spec.type)
@@ -526,6 +731,16 @@
gtk_widget_show(dialog->date_format_list);
select_treeview_from_format(dialog->date_format_treeview, &var->write);
break;
+ case FMT_CCA:
+ case FMT_CCB:
+ case FMT_CCC:
+ case FMT_CCD:
+ case FMT_CCE:
+ var_type_dialog_set_active_button(dialog, BUTTON_CUSTOM);
+ select_treeview_from_format_type(dialog->custom_treeview,
+ var->write.type);
+ gtk_widget_show_all(dialog->width_decimals);
+ break;
default:
gtk_widget_show_all(dialog->width_decimals);
break;
@@ -600,16 +815,14 @@
result = make_output_format_try(&spec, FMT_E, width, decimals);
break;
case BUTTON_DATE:
- g_assert(dialog->fmt_spec);
- g_assert(check_output_specifier(dialog->fmt_spec, TRUE));
- result = memcpy(&spec, dialog->fmt_spec, sizeof(struct fmt_spec));
+ case BUTTON_CUSTOM:
+ g_assert(dialog->fmt_l);
+ g_assert(check_output_specifier(dialog->fmt_l, TRUE));
+ result = memcpy(&spec, dialog->fmt_l, sizeof(struct fmt_spec));
break;
case BUTTON_DOLLAR:
result = make_output_format_try(&spec, FMT_DOLLAR, width, decimals);
break;
- case BUTTON_CUSTOM:
- result = make_output_format_try(&spec, FMT_CCA, width, decimals);
- break;
default:
g_print("Unknown variable type: %d\n", dialog->active_button) ;
result = false;
Index: psppire/src/var_type_dialog.h
diff -u psppire/src/var_type_dialog.h:1.5 psppire/src/var_type_dialog.h:1.6
--- psppire/src/var_type_dialog.h:1.5 Wed Dec 14 11:39:12 2005
+++ psppire/src/var_type_dialog.h Sun Dec 18 04:57:43 2005
@@ -48,7 +48,7 @@
struct variable *var;
/* Local copy of format specifier */
- struct fmt_spec *fmt_spec;
+ struct fmt_spec *fmt_l;
/* Toggle Buttons */
GtkWidget *radioButton[num_BUTTONS];
@@ -73,6 +73,9 @@
/* Custom Currency */
GtkWidget *custom_currency_hbox;
+ GtkTreeView *custom_treeview;
+ GtkWidget *label_psample;
+ GtkWidget *label_nsample;
/* Actions */
GtkWidget *ok;