/[pspp]/psppire/src/var_sheet.c
ViewVC logotype

Diff of /psppire/src/var_sheet.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.19 by jmd, Sun Nov 13 01:35:44 2005 UTC revision 1.20 by jmd, Thu Nov 17 11:19:17 2005 UTC
# Line 45  static PSPP_Dict *pspp_dictionary; Line 45  static PSPP_Dict *pspp_dictionary;
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);
# Line 52  static gint var_sheet_update_callback(GO Line 55  static gint var_sheet_update_callback(GO
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    
# Line 104  make_output_format_try (struct fmt_spec Line 104  make_output_format_try (struct fmt_spec
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. */
# Line 284  var_sheet_cell_set (GtkSheet * sheet, gi Line 287  var_sheet_cell_set (GtkSheet * sheet, gi
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 */
# Line 309  var_sheet_cell_set (GtkSheet * sheet, gi Line 312  var_sheet_cell_set (GtkSheet * sheet, gi
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 */
# Line 438  populate_row_from_var(GtkSheet *sheet, c Line 453  populate_row_from_var(GtkSheet *sheet, c
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:
# Line 455  populate_row_from_var(GtkSheet *sheet, c Line 482  populate_row_from_var(GtkSheet *sheet, c
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            }            }
# Line 522  remove_variable(GObject *obj, gint idx, Line 550  remove_variable(GObject *obj, gint idx,
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*
# Line 541  psppire_variable_sheet_create (gchar *wi Line 581  psppire_variable_sheet_create (gchar *wi
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    
# Line 735  psppire_var_sheet_set_dictionary(GtkShee Line 774  psppire_var_sheet_set_dictionary(GtkShee
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    

Legend:
Removed from v.1.19  
changed lines
  Added in v.1.20

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26