118 |
decimals =atoi(gtk_entry_get_text |
decimals =atoi(gtk_entry_get_text |
119 |
(GTK_ENTRY(var_type_dialog->entry_decimals))); |
(GTK_ENTRY(var_type_dialog->entry_decimals))); |
120 |
|
|
121 |
|
var->type = NUMERIC; |
122 |
var->width = width; |
var->width = 0; |
123 |
|
switch (var_type_dialog->active_button) |
|
spec.w = width; |
|
|
spec.d = decimals; |
|
|
|
|
|
for(i = 0; i < num_BUTTONS; ++i ) |
|
124 |
{ |
{ |
125 |
if ( gtk_toggle_button_get_active |
case BUTTON_STRING: |
126 |
(GTK_TOGGLE_BUTTON(var_type_dialog->radioButton[i])) ) |
var->type = ALPHA; |
127 |
{ |
var->width = width; |
128 |
switch (i) |
spec = make_output_format(FMT_A, width, 0); |
129 |
{ |
break; |
130 |
case BUTTON_STRING: |
case BUTTON_NUMERIC: |
131 |
spec.type = FMT_A; |
spec = make_output_format(FMT_F, width, decimals); |
132 |
break; |
break; |
133 |
case BUTTON_NUMERIC: |
case BUTTON_COMMA: |
134 |
spec.type = FMT_F; |
spec = make_output_format(FMT_COMMA, width, decimals); |
135 |
break; |
break; |
136 |
default: |
case BUTTON_DOT: |
137 |
break; |
spec = make_output_format(FMT_DOT, width, decimals); |
138 |
} |
break; |
139 |
break; |
case BUTTON_SCIENTIFIC: |
140 |
} |
spec = make_output_format(FMT_E, width, decimals); |
141 |
|
break; |
142 |
|
case BUTTON_DATE: |
143 |
|
spec = make_output_format(FMT_DATE, 10, 0); |
144 |
|
break; |
145 |
|
case BUTTON_DOLLAR: |
146 |
|
spec = make_output_format(FMT_DOLLAR, width, decimals); |
147 |
|
break; |
148 |
|
case BUTTON_CUSTOM: |
149 |
|
spec = make_output_format(FMT_CCA, width, decimals); |
150 |
|
break; |
151 |
|
default: |
152 |
|
g_print("Unknown format\n"); |
153 |
|
break; |
154 |
} |
} |
|
|
|
|
var->write = var->print = spec; |
|
155 |
|
|
156 |
|
var->write = var->print = spec; |
157 |
|
|
158 |
pspp_dict_var_changed(pspp_dictionary, current_row); |
pspp_dict_var_changed(pspp_dictionary, current_row); |
159 |
|
|
|
|
|
160 |
return FALSE; |
return FALSE; |
161 |
} |
} |
162 |
|
|
180 |
var_sheet_cell_set (GtkSheet * sheet, gint row, gint column) |
var_sheet_cell_set (GtkSheet * sheet, gint row, gint column) |
181 |
{ |
{ |
182 |
gint r; |
gint r; |
|
g_print("Set row %d\n",row); |
|
|
|
|
|
g_print("%s:%d Last populated row: %d\n",__FILE__,__LINE__,last_populated_row); |
|
|
|
|
183 |
/* Fill out any rows above, which are empty */ |
/* Fill out any rows above, which are empty */ |
184 |
for ( r = last_populated_row + 1 ; r < row ; ++r ) |
for ( r = last_populated_row + 1 ; r < row ; ++r ) |
185 |
{ |
{ |
|
g_print("Autofilling row %d\n",r); |
|
186 |
gchar *name = auto_generate_var_name(pspp_dictionary); |
gchar *name = auto_generate_var_name(pspp_dictionary); |
187 |
pspp_dict_set_name(pspp_dictionary, r, name); |
pspp_dict_set_name(pspp_dictionary, r, name); |
188 |
g_free(name); |
g_free(name); |
189 |
} |
} |
190 |
if ( row - 1 > last_populated_row) |
if ( row - 1 > last_populated_row) |
191 |
last_populated_row = row - 1; |
last_populated_row = row - 1; |
|
g_print("%s:%d Last populated row: %d\n",__FILE__,__LINE__,last_populated_row); |
|
192 |
|
|
193 |
struct variable *var = pspp_dict_get_var(pspp_dictionary, row); |
struct variable *var = pspp_dict_get_var(pspp_dictionary, row); |
194 |
|
|
195 |
/* Fill out any cells to the left which are empty */ |
/* Fill out any cells to the left which are empty */ |
196 |
if ( var == NULL && column != 0 ) |
if ( var == NULL && column != 0 ) |
197 |
{ |
{ |
|
g_print("Filling Left\n"); |
|
198 |
gchar *name = auto_generate_var_name(pspp_dictionary); |
gchar *name = auto_generate_var_name(pspp_dictionary); |
199 |
pspp_dict_set_name(pspp_dictionary, row, name); |
pspp_dict_set_name(pspp_dictionary, row, name); |
200 |
g_free(name); |
g_free(name); |
201 |
last_populated_row = row ; |
last_populated_row = row ; |
202 |
var = pspp_dict_get_var(pspp_dictionary, row); |
var = pspp_dict_get_var(pspp_dictionary, row); |
203 |
} |
} |
|
g_print("%s:%d Last populated row: %d\n",__FILE__,__LINE__,last_populated_row); |
|
204 |
|
|
205 |
if ( column == COL_TYPE ) |
if ( column == COL_TYPE ) |
206 |
{ |
{ |
251 |
return; |
return; |
252 |
} |
} |
253 |
|
|
254 |
|
const struct fmt_spec *write_spec = &var->write; |
255 |
for ( c = 0 ; c < n_COLS ; ++c ) |
for ( c = 0 ; c < n_COLS ; ++c ) |
256 |
{ |
{ |
257 |
switch (c) |
switch (c) |
261 |
break; |
break; |
262 |
case COL_TYPE: |
case COL_TYPE: |
263 |
{ |
{ |
|
const struct fmt_spec *write_spec = &var->write; |
|
264 |
switch ( write_spec->type ) |
switch ( write_spec->type ) |
265 |
{ |
{ |
266 |
case FMT_F: |
case FMT_F: |
272 |
case FMT_DOT: |
case FMT_DOT: |
273 |
gtk_sheet_set_cell_text(sheet, row, c, _("Dot")); |
gtk_sheet_set_cell_text(sheet, row, c, _("Dot")); |
274 |
break; |
break; |
275 |
|
case FMT_E: |
276 |
|
gtk_sheet_set_cell_text(sheet, row, c, _("Scientific")); |
277 |
|
break; |
278 |
|
case FMT_DATE: |
279 |
|
gtk_sheet_set_cell_text(sheet, row, c, _("Date")); |
280 |
|
break; |
281 |
case FMT_DOLLAR: |
case FMT_DOLLAR: |
282 |
gtk_sheet_set_cell_text(sheet, row, c, _("Dollar")); |
gtk_sheet_set_cell_text(sheet, row, c, _("Dollar")); |
283 |
break; |
break; |
284 |
|
case FMT_CCA: |
285 |
|
case FMT_CCB: |
286 |
|
case FMT_CCC: |
287 |
|
case FMT_CCD: |
288 |
|
case FMT_CCE: |
289 |
|
gtk_sheet_set_cell_text(sheet, row, c, _("Custom")); |
290 |
|
break; |
291 |
case FMT_A: |
case FMT_A: |
292 |
gtk_sheet_set_cell_text(sheet, row, c, _("String")); |
gtk_sheet_set_cell_text(sheet, row, c, _("String")); |
293 |
break; |
break; |
299 |
break; |
break; |
300 |
case COL_WIDTH: |
case COL_WIDTH: |
301 |
{ |
{ |
302 |
GString *s = gint_to_gstring(var->width); |
GString *s = gint_to_gstring(var->write.w); |
303 |
gtk_sheet_set_cell_text(sheet, row, c, s->str); |
gtk_sheet_set_cell_text(sheet, row, c, s->str); |
304 |
g_string_free(s, TRUE); |
g_string_free(s, TRUE); |
305 |
} |
} |
306 |
break; |
break; |
307 |
case COL_DECIMALS: |
case COL_DECIMALS: |
308 |
{ |
{ |
309 |
|
GtkSheetRange range; |
310 |
|
range.col0 = range.coli = c; |
311 |
|
range.row0 = range.rowi = row; |
312 |
|
|
313 |
GString *s = gint_to_gstring(var->write.d); |
GString *s = gint_to_gstring(var->write.d); |
314 |
gtk_sheet_set_cell_text(sheet, row, c, s->str); |
gtk_sheet_set_cell_text(sheet, row, c, s->str); |
315 |
g_string_free(s, TRUE); |
g_string_free(s, TRUE); |
316 |
|
gtk_sheet_range_set_editable (sheet, |
317 |
|
&range, var->type == NUMERIC); |
318 |
} |
} |
319 |
break; |
break; |
320 |
case COL_COLUMNS: |
case COL_COLUMNS: |
324 |
g_string_free(s, TRUE); |
g_string_free(s, TRUE); |
325 |
} |
} |
326 |
break; |
break; |
327 |
|
case COL_LABEL: |
328 |
|
if (var->label) |
329 |
|
gtk_sheet_set_cell_text(sheet, row, c, var->label); |
330 |
|
else |
331 |
|
gtk_sheet_cell_clear(sheet, row, c); |
332 |
|
break; |
333 |
} |
} |
334 |
} |
} |
335 |
} |
} |
418 |
} |
} |
419 |
|
|
420 |
|
|
|
|
|
|
|
|
|
|
|
421 |
/* Update a variable. |
/* Update a variable. |
422 |
This callback is invoked whenever a cell on the var_sheet is |
This callback is invoked whenever a cell on the var_sheet is |
423 |
changed |
changed |
474 |
old_var->width = atoi(gtk_sheet_cell_get_text(sheet, row, col)); |
old_var->width = atoi(gtk_sheet_cell_get_text(sheet, row, col)); |
475 |
pspp_dict_var_changed(pspp_dictionary, row); |
pspp_dict_var_changed(pspp_dictionary, row); |
476 |
break; |
break; |
477 |
} |
case COL_LABEL: |
478 |
|
old_var->label = gtk_sheet_cell_get_text(sheet, row, col); |
479 |
|
break; |
480 |
|
} |
481 |
|
|
482 |
if ( row > last_populated_row ) |
if ( row > last_populated_row ) |
483 |
last_populated_row = row ; |
last_populated_row = row ; |
509 |
|
|
510 |
|
|
511 |
|
|
512 |
/* Associate a dictionary with the var sheet */ |
/* Associate a dictionary with the var sheet. |
513 |
|
*/ |
514 |
void |
void |
515 |
psppire_var_sheet_set_dictionary(GtkWidget *sheet, PSPP_Dict *d) |
psppire_var_sheet_set_dictionary(GtkWidget *sheet, PSPP_Dict *d) |
516 |
{ |
{ |
525 |
} |
} |
526 |
|
|
527 |
|
|
528 |
|
/* Blank the sheet */ |
529 |
|
void |
530 |
|
psppire_var_sheet_clear(GtkWidget *sheet) |
531 |
|
{ |
532 |
|
gtk_sheet_range_clear(sheet, NULL); |
533 |
|
last_populated_row = -1; |
534 |
|
} |