45 |
|
|
46 |
|
|
47 |
static gint last_populated_row = -1; |
static gint last_populated_row = -1; |
48 |
|
static struct var_type_dialog *var_type_dialog; |
49 |
|
static const gint n_initial_rows = 40; |
50 |
|
|
51 |
|
|
52 |
static gint var_sheet_update_callback(GObject *obj, |
static gint var_sheet_update_callback(GObject *obj, |
53 |
gint var_idx, gpointer data); |
gint var_idx, gpointer data); |
55 |
static gint update_variable(GtkSheet *sheet, gint row, gint col); |
static gint update_variable(GtkSheet *sheet, gint row, gint col); |
56 |
|
|
57 |
|
|
|
static struct var_type_dialog *var_type_dialog; |
|
|
|
|
58 |
extern GladeXML *xml; |
extern GladeXML *xml; |
59 |
|
|
|
|
|
60 |
static GdkColor enabled; |
static GdkColor enabled; |
61 |
static GdkColor disabled; |
static GdkColor disabled; |
62 |
|
|
104 |
return check_output_specifier (f, true); |
return check_output_specifier (f, true); |
105 |
} |
} |
106 |
|
|
107 |
|
static void psppire_var_sheet_unblock(GtkSheet *sheet); |
108 |
|
|
109 |
|
static void psppire_var_sheet_block(GtkSheet *sheet); |
110 |
|
|
111 |
/* Callback for when the var type dialog is closed using the OK button. |
/* Callback for when the var type dialog is closed using the OK button. |
112 |
It sets the appropriate variable accordingly. */ |
It sets the appropriate variable accordingly. */ |
287 |
g_return_val_if_fail(sheet, FALSE); |
g_return_val_if_fail(sheet, FALSE); |
288 |
|
|
289 |
if ( ! pspp_dictionary ) |
if ( ! pspp_dictionary ) |
290 |
return ; |
return FALSE; |
291 |
|
|
292 |
gint r; |
gint r; |
293 |
/* Fill out any rows above, which are empty */ |
/* Fill out any rows above, which are empty */ |
312 |
var = pspp_dict_get_var(pspp_dictionary, row); |
var = pspp_dict_get_var(pspp_dictionary, row); |
313 |
} |
} |
314 |
|
|
315 |
|
/* Add the necessary number of rows to the sheet */ |
316 |
|
const gint n_new_rows = |
317 |
|
n_initial_rows - gtk_sheet_get_rows_count(sheet) + |
318 |
|
(last_populated_row + 1) ; |
319 |
|
|
320 |
|
g_assert(n_new_rows >= 0); |
321 |
|
|
322 |
|
gtk_sheet_add_row(sheet, n_new_rows); |
323 |
|
|
324 |
|
g_assert(gtk_sheet_get_rows_count(sheet) - last_populated_row |
325 |
|
== n_initial_rows + 1); |
326 |
|
|
327 |
if ( column == COL_TYPE ) |
if ( column == COL_TYPE ) |
328 |
{ |
{ |
329 |
/* Popup the Variable Type dialog box */ |
/* Popup the Variable Type dialog box */ |
453 |
case FMT_E: |
case FMT_E: |
454 |
gtk_sheet_set_cell_text(sheet, row, c, _("Scientific")); |
gtk_sheet_set_cell_text(sheet, row, c, _("Scientific")); |
455 |
break; |
break; |
456 |
case FMT_DATE: |
case FMT_DATE: |
457 |
|
case FMT_EDATE: |
458 |
|
case FMT_SDATE: |
459 |
|
case FMT_ADATE: |
460 |
|
case FMT_JDATE: |
461 |
|
case FMT_QYR: |
462 |
|
case FMT_MOYR: |
463 |
|
case FMT_WKYR: |
464 |
|
case FMT_DATETIME: |
465 |
|
case FMT_TIME: |
466 |
|
case FMT_DTIME: |
467 |
|
case FMT_WKDAY: |
468 |
|
case FMT_MONTH: |
469 |
gtk_sheet_set_cell_text(sheet, row, c, _("Date")); |
gtk_sheet_set_cell_text(sheet, row, c, _("Date")); |
470 |
break; |
break; |
471 |
case FMT_DOLLAR: |
case FMT_DOLLAR: |
482 |
gtk_sheet_set_cell_text(sheet, row, c, _("String")); |
gtk_sheet_set_cell_text(sheet, row, c, _("String")); |
483 |
break; |
break; |
484 |
default: |
default: |
485 |
g_print("Unknown format: \"%s\"\n", fmt_to_string(write_spec)); |
g_warning("Unknown format: \"%s\"\n", |
486 |
|
fmt_to_string(write_spec)); |
487 |
break; |
break; |
488 |
} |
} |
489 |
} |
} |
550 |
|
|
551 |
GtkSheet *sheet = GTK_SHEET(data); |
GtkSheet *sheet = GTK_SHEET(data); |
552 |
|
|
553 |
|
g_signal_handlers_block_by_func(sheet, |
554 |
|
G_CALLBACK(var_sheet_cell_set), 0); |
555 |
|
g_signal_handlers_block_by_func(sheet, |
556 |
|
G_CALLBACK(var_sheet_cell_change_entry), 0); |
557 |
|
|
558 |
|
|
559 |
gtk_sheet_delete_rows(sheet, idx, 1); |
gtk_sheet_delete_rows(sheet, idx, 1); |
560 |
|
|
561 |
last_populated_row--; |
last_populated_row--; |
562 |
|
|
563 |
return FALSE; |
g_signal_handlers_unblock_by_func(sheet, |
564 |
} |
G_CALLBACK(var_sheet_cell_set), 0); |
565 |
|
g_signal_handlers_unblock_by_func(sheet, |
566 |
|
G_CALLBACK(var_sheet_cell_change_entry), 0); |
567 |
|
|
568 |
|
g_assert(gtk_sheet_get_rows_count(sheet) - last_populated_row |
569 |
|
== n_initial_rows + 1); |
570 |
|
|
571 |
|
return FALSE; |
572 |
|
} |
573 |
|
|
574 |
/* Create the var sheet */ |
/* Create the var sheet */ |
575 |
GtkWidget* |
GtkWidget* |
581 |
GtkWidget *sheet; |
GtkWidget *sheet; |
582 |
GtkWidget *entry; |
GtkWidget *entry; |
583 |
gint i; |
gint i; |
|
const gint rows = 25; |
|
584 |
|
|
585 |
sheet = gtk_sheet_new(rows, n_COLS, "variable sheet"); |
sheet = gtk_sheet_new(n_initial_rows, n_COLS, "variable sheet"); |
586 |
|
|
587 |
gtk_sheet_range_set_editable (GTK_SHEET(sheet), 0, TRUE); |
gtk_sheet_range_set_editable (GTK_SHEET(sheet), 0, TRUE); |
588 |
|
|
774 |
|
|
775 |
const int c = pspp_dict_get_var_cnt(d); |
const int c = pspp_dict_get_var_cnt(d); |
776 |
|
|
777 |
|
gtk_sheet_add_row(sheet, c); |
778 |
|
last_populated_row = c - 1; |
779 |
|
|
780 |
|
|
781 |
g_signal_connect(d, "variable_changed", |
g_signal_connect(d, "variable_changed", |
782 |
G_CALLBACK(var_sheet_update_callback), sheet); |
G_CALLBACK(var_sheet_update_callback), sheet); |
783 |
|
|
784 |
g_signal_connect(d, "variable_deleted", |
g_signal_connect(d, "variable_deleted", |
785 |
G_CALLBACK(remove_variable), sheet); |
G_CALLBACK(remove_variable), sheet); |
786 |
|
|
787 |
|
|
788 |
|
|
789 |
for (v = 0 ; v < c ; ++v ) |
for (v = 0 ; v < c ; ++v ) |
790 |
pspp_dict_var_changed(d, v); |
pspp_dict_var_changed(d, v); |
791 |
|
|
|
last_populated_row = c - 1; |
|
792 |
} |
} |
793 |
|
|
794 |
|
|
795 |
/* Blank the sheet */ |
/* Blank the sheet. And reset it ready for a fresh set of variables. */ |
796 |
void |
void |
797 |
psppire_var_sheet_clear(GtkSheet *sheet) |
psppire_var_sheet_clear(GtkSheet *sheet) |
798 |
{ |
{ |
799 |
g_return_if_fail(sheet); |
g_return_if_fail(sheet); |
800 |
|
|
801 |
gtk_sheet_range_clear(sheet, NULL); |
psppire_var_sheet_block(sheet); |
802 |
|
|
803 |
|
gtk_sheet_set_active_cell(sheet, 0, 0); |
804 |
|
|
805 |
|
gtk_sheet_delete_rows(sheet, |
806 |
|
0, last_populated_row + 1); |
807 |
|
|
808 |
|
gtk_sheet_range_delete(sheet, NULL); |
809 |
|
|
810 |
last_populated_row = -1; |
last_populated_row = -1; |
811 |
|
|
812 |
var_sheet_range_set_editable(sheet, 0, FALSE); |
var_sheet_range_set_editable(sheet, 0, FALSE); |
813 |
|
|
814 |
|
psppire_var_sheet_unblock(sheet); |
815 |
|
|
816 |
|
g_assert( gtk_sheet_get_rows_count(sheet) == n_initial_rows ); |
817 |
|
} |
818 |
|
|
819 |
|
|
820 |
|
|
821 |
|
static void |
822 |
|
psppire_var_sheet_unblock(GtkSheet *sheet) |
823 |
|
{ |
824 |
|
g_signal_handlers_unblock_by_func(sheet, |
825 |
|
G_CALLBACK(var_sheet_cell_change_entry), |
826 |
|
0); |
827 |
|
|
828 |
|
g_signal_handlers_unblock_by_func(sheet, |
829 |
|
G_CALLBACK(var_sheet_cell_set), 0); |
830 |
|
|
831 |
|
g_signal_handlers_unblock_by_func(sheet, |
832 |
|
G_CALLBACK(update_variable), |
833 |
|
0); |
834 |
|
|
835 |
|
} |
836 |
|
|
837 |
|
|
838 |
|
static void |
839 |
|
psppire_var_sheet_block(GtkSheet *sheet) |
840 |
|
{ |
841 |
|
g_signal_handlers_block_by_func(sheet, |
842 |
|
G_CALLBACK(update_variable), |
843 |
|
0); |
844 |
|
|
845 |
|
|
846 |
|
g_signal_handlers_block_by_func(sheet, |
847 |
|
G_CALLBACK(var_sheet_cell_change_entry), |
848 |
|
0); |
849 |
|
|
850 |
|
g_signal_handlers_block_by_func(sheet, |
851 |
|
G_CALLBACK(var_sheet_cell_set), 0); |
852 |
} |
} |
853 |
|
|