112 |
|
|
113 |
static void psppire_var_sheet_block(GtkSheet *sheet); |
static void psppire_var_sheet_block(GtkSheet *sheet); |
114 |
|
|
115 |
/* Callback for when the Value Labels dialog is closed using the OK button. |
static gboolean |
|
It sets the appropriate variable accordingly. */ |
|
|
static gint |
|
|
apply_val_labs(GtkWidget *w, gpointer data) |
|
|
{ |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
gboolean |
|
116 |
click2row(GtkWidget *w, gint row, gpointer data) |
click2row(GtkWidget *w, gint row, gpointer data) |
117 |
{ |
{ |
118 |
gint current_row, current_column; |
gint current_row, current_column; |
222 |
return name; |
return name; |
223 |
} |
} |
224 |
|
|
225 |
|
static const gchar *alignments[]={ |
226 |
|
_("Left"), |
227 |
|
_("Right"), |
228 |
|
_("Centre"), |
229 |
|
0 |
230 |
|
}; |
231 |
|
|
232 |
|
static const gchar *measures[]={ |
233 |
|
_("Nominal"), |
234 |
|
_("Ordinal"), |
235 |
|
_("Scale"), |
236 |
|
0 |
237 |
|
}; |
238 |
|
|
239 |
|
static GtkListStore * |
240 |
|
create_label_list(const gchar **labels) |
241 |
|
{ |
242 |
|
gint i = 0; |
243 |
|
GtkTreeIter iter; |
244 |
|
|
245 |
|
GtkListStore *list_store; |
246 |
|
list_store = gtk_list_store_new (1, G_TYPE_STRING); |
247 |
|
|
248 |
|
const gchar *s; |
249 |
|
while ( (s = labels[i++])) |
250 |
|
{ |
251 |
|
gtk_list_store_append (list_store, &iter); |
252 |
|
gtk_list_store_set (list_store, &iter, |
253 |
|
0, s, |
254 |
|
-1); |
255 |
|
} |
256 |
|
|
257 |
|
return list_store; |
258 |
|
} |
259 |
|
|
260 |
|
/* Callback for when the alignment combo box |
261 |
|
item is selected */ |
262 |
|
static void |
263 |
|
change_alignment(GtkComboBox *cb, |
264 |
|
gpointer user_data) |
265 |
|
{ |
266 |
|
struct variable *var = user_data; |
267 |
|
gint active_item = gtk_combo_box_get_active(cb); |
268 |
|
|
269 |
|
if ( active_item < 0 ) return ; |
270 |
|
|
271 |
|
var->alignment = active_item; |
272 |
|
|
273 |
|
/* Inform the dictionary of the change so that it can emit a signal |
274 |
|
to let the data sheet know */ |
275 |
|
pspp_dict_var_changed(pspp_dictionary, var->index); |
276 |
|
|
277 |
|
} |
278 |
|
|
279 |
|
|
280 |
|
/* Callback for when the alignment combo box |
281 |
|
item is selected */ |
282 |
|
static void |
283 |
|
change_measure(GtkComboBox *cb, |
284 |
|
gpointer user_data) |
285 |
|
{ |
286 |
|
struct variable *var = user_data; |
287 |
|
gint active_item = gtk_combo_box_get_active(cb); |
288 |
|
|
289 |
|
if ( active_item < 0 ) return ; |
290 |
|
|
291 |
|
var->measure = active_item + 1; |
292 |
|
} |
293 |
|
|
294 |
|
|
295 |
|
|
296 |
|
|
297 |
/* Callback whenever the cell on the var sheet is entered or left. |
/* Callback whenever the cell on the var sheet is entered or left. |
312 |
GtkSheetCellAttr attributes; |
GtkSheetCellAttr attributes; |
313 |
gtk_sheet_get_attributes(sheet, row, column, &attributes); |
gtk_sheet_get_attributes(sheet, row, column, &attributes); |
314 |
|
|
|
|
|
315 |
switch (column) |
switch (column) |
316 |
{ |
{ |
317 |
|
case COL_ALIGN: |
318 |
|
{ |
319 |
|
static GtkListStore *list_store = 0; |
320 |
|
GtkComboBoxEntry *cbe; |
321 |
|
gtk_sheet_change_entry(sheet, GTK_TYPE_COMBO_BOX_ENTRY); |
322 |
|
cbe = |
323 |
|
GTK_COMBO_BOX_ENTRY(gtk_sheet_get_entry(sheet)->parent); |
324 |
|
|
325 |
|
|
326 |
|
if ( ! list_store) list_store = create_label_list(alignments); |
327 |
|
|
328 |
|
gtk_combo_box_set_model(GTK_COMBO_BOX(cbe), |
329 |
|
GTK_TREE_MODEL(list_store)); |
330 |
|
|
331 |
|
gtk_combo_box_entry_set_text_column (cbe, 0); |
332 |
|
|
333 |
|
struct variable *var = pspp_dict_get_var(pspp_dictionary, row); |
334 |
|
|
335 |
|
g_signal_connect(G_OBJECT(cbe),"changed", |
336 |
|
G_CALLBACK(change_alignment), var); |
337 |
|
} |
338 |
|
break; |
339 |
|
case COL_MEASURE: |
340 |
|
{ |
341 |
|
static GtkListStore *list_store = 0; |
342 |
|
GtkComboBoxEntry *cbe; |
343 |
|
gtk_sheet_change_entry(sheet, GTK_TYPE_COMBO_BOX_ENTRY); |
344 |
|
cbe = |
345 |
|
GTK_COMBO_BOX_ENTRY(gtk_sheet_get_entry(sheet)->parent); |
346 |
|
|
347 |
|
|
348 |
|
if ( ! list_store) list_store = create_label_list(measures); |
349 |
|
|
350 |
|
gtk_combo_box_set_model(GTK_COMBO_BOX(cbe), |
351 |
|
GTK_TREE_MODEL(list_store)); |
352 |
|
|
353 |
|
gtk_combo_box_entry_set_text_column (cbe, 0); |
354 |
|
|
355 |
|
struct variable *var = pspp_dict_get_var(pspp_dictionary, row); |
356 |
|
|
357 |
|
g_signal_connect(G_OBJECT(cbe),"changed", |
358 |
|
G_CALLBACK(change_measure), var); |
359 |
|
} |
360 |
|
break; |
361 |
|
|
362 |
case COL_VALUES: |
case COL_VALUES: |
363 |
{ |
{ |
364 |
PsppireCustomEntry *customEntry; |
PsppireCustomEntry *customEntry; |
372 |
|
|
373 |
|
|
374 |
if (!val_labs_dialog ) |
if (!val_labs_dialog ) |
|
{ |
|
375 |
val_labs_dialog = val_labs_dialog_create(xml); |
val_labs_dialog = val_labs_dialog_create(xml); |
376 |
|
|
|
g_signal_connect(GTK_OBJECT(val_labs_dialog->ok), |
|
|
"clicked", |
|
|
GTK_SIGNAL_FUNC(apply_val_labs), sheet); |
|
|
|
|
|
|
|
|
} |
|
|
|
|
377 |
val_labs_dialog->target = &var->val_labs ; |
val_labs_dialog->target = &var->val_labs ; |
378 |
g_signal_connect_swapped(GTK_OBJECT(customEntry), |
g_signal_connect_swapped(GTK_OBJECT(customEntry), |
379 |
"clicked", |
"clicked", |
463 |
} |
} |
464 |
} |
} |
465 |
break; |
break; |
466 |
|
|
467 |
default: |
default: |
468 |
gtk_sheet_change_entry(sheet, GTK_TYPE_ENTRY); |
gtk_sheet_change_entry(sheet, GTK_TYPE_ENTRY); |
469 |
break; |
break; |
709 |
val_labs_done(&ip); |
val_labs_done(&ip); |
710 |
} |
} |
711 |
break; |
break; |
712 |
|
case COL_ALIGN: |
713 |
|
gtk_sheet_set_cell_text(sheet, row, c, alignments[var->alignment]); |
714 |
|
break; |
715 |
|
case COL_MEASURE: |
716 |
|
gtk_sheet_set_cell_text(sheet, row, c, measures[var->measure-1]); |
717 |
|
break; |
718 |
} |
} |
|
|
|
719 |
} |
} |
|
|
|
|
|
|
720 |
} |
} |
721 |
|
|
722 |
|
|
726 |
{ |
{ |
727 |
gint r; |
gint r; |
728 |
|
|
|
/* |
|
|
gtk_sheet_freeze (sheet); |
|
|
*/ |
|
729 |
for ( r = from ; r <= to ; ++r ) |
for ( r = from ; r <= to ; ++r ) |
730 |
{ |
{ |
731 |
struct variable *var = pspp_dict_get_var(dict, r); |
struct variable *var = pspp_dict_get_var(dict, r); |
732 |
populate_row_from_var(sheet, var, r); |
populate_row_from_var(sheet, var, r); |
733 |
} |
} |
|
/* |
|
|
gtk_sheet_thaw (sheet); |
|
|
*/ |
|
734 |
} |
} |
735 |
|
|
736 |
|
|
1040 |
G_CALLBACK(update_variable), |
G_CALLBACK(update_variable), |
1041 |
0); |
0); |
1042 |
|
|
|
|
|
1043 |
g_signal_handlers_block_by_func(sheet, |
g_signal_handlers_block_by_func(sheet, |
1044 |
G_CALLBACK(var_sheet_cell_change_entry), |
G_CALLBACK(var_sheet_cell_change_entry), |
1045 |
0); |
0); |