X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fmenu-actions.c;h=fb62f8a52cf81774c699a2dfba96e0235144a615;hb=0fa141762183890ebd139ccd9264f08db9011539;hp=c8f945c0bd660762be8dc249cf496046f6f72822;hpb=87b6d42a2d540b92baf0db8fe28657eda747b3b0;p=pspp diff --git a/src/ui/gui/menu-actions.c b/src/ui/gui/menu-actions.c index c8f945c0bd..fb62f8a52c 100644 --- a/src/ui/gui/menu-actions.c +++ b/src/ui/gui/menu-actions.c @@ -34,6 +34,8 @@ #include #include +#include + #include #include "helper.h" #include "menu-actions.h" @@ -194,9 +196,7 @@ load_system_file(const gchar *file_name) g_warning("Cannot write case to casefile\n"); break; } - case_destroy(&c); - } sfm_close_reader(reader); @@ -262,9 +262,10 @@ on_open1_activate (GtkMenuItem *menuitem, /* Re initialise HANDLE, by interrogating the user for a new file name */ -static void +static gboolean recreate_save_handle(struct file_handle **handle) { + gint response; GtkWidget *dialog; GtkWidget *data_editor = get_widget_assert(xml, "data_editor"); @@ -276,16 +277,19 @@ recreate_save_handle(struct file_handle **handle) GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); - if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) + response = gtk_dialog_run (GTK_DIALOG (dialog)); + + if (response == GTK_RESPONSE_ACCEPT) { char *file_name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); -#if 0 + if ( *handle ) - destroy_file_handle(*handle, 0); -#endif - *handle = fh_create_file (handle_name, file_name, fh_default_properties()); + fh_free(*handle); + + *handle = fh_create_file (handle_name, file_name, + fh_default_properties()); psppire_set_window_title(basename(file_name)); @@ -293,6 +297,8 @@ recreate_save_handle(struct file_handle **handle) } gtk_widget_destroy (dialog); + + return ( response == GTK_RESPONSE_ACCEPT ) ; } void @@ -303,7 +309,10 @@ on_save1_activate (GtkMenuItem *menuitem, PsppireDataStore *data_store ; if ( ! psppire_handle ) - recreate_save_handle(&psppire_handle); + { + if ( ! recreate_save_handle(&psppire_handle) ) + return; + } data_sheet = GTK_SHEET(get_widget_assert(xml, "data_sheet")); data_store = PSPPIRE_DATA_STORE(gtk_sheet_get_model(data_sheet)); @@ -321,7 +330,9 @@ on_save_as1_activate (GtkMenuItem *menuitem, GtkSheet *data_sheet ; PsppireDataStore *data_store ; - recreate_save_handle(&psppire_handle); + if ( ! recreate_save_handle(&psppire_handle) ) + return ; + if ( ! psppire_handle ) return ; @@ -343,61 +354,8 @@ on_quit1_activate (GtkMenuItem *menuitem, void -on_cut1_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - -} - - -void -on_copy1_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - -} - - -void -on_paste1_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - -} - -/* Fill a case with SYSMIS for numeric and whitespace for string - variables respectively */ -static gboolean -blank_case(struct ccase *cc, gpointer _dict) -{ - gint i; - PsppireDict *dict = _dict; - - for(i = 0 ; i < psppire_dict_get_var_cnt(dict); ++i ) - { - union value *val ; - - const struct PsppireVariable *var = psppire_dict_get_variable(dict, i); - - gint idx = psppire_variable_get_fv(var); - - val = case_data_rw(cc, idx) ; - - if ( psppire_variable_get_type(var) == ALPHA ) - memset(val->s, ' ', psppire_variable_get_width(var)); - else - val->f = SYSMIS; - - case_unshare(cc); - } - - return TRUE; -} - - -void -on_insert1_activate (GtkMenuItem *menuitem, - gpointer user_data) +on_clear_activate (GtkMenuItem *menuitem, + gpointer user_data) { GtkNotebook *notebook = GTK_NOTEBOOK(get_widget_assert(xml, "notebook1")); gint page = -1; @@ -406,74 +364,52 @@ on_insert1_activate (GtkMenuItem *menuitem, switch (page) { - case PAGE_DATA_SHEET: -#if 0 - { - GtkSheet *data_sheet = GTK_SHEET(get_widget_assert(xml, "data_sheet")); - PsppireDataStore *data_store = - PSPPIRE_DATA_STORE(gtk_sheet_get_model(data_sheet)); - - psppire_case_array_insert_case(data_store->cases, - data_sheet->range.row0, - blank_case, the_dictionary); - } - break; -#endif case PAGE_VAR_SHEET: - { - GtkSheet *var_sheet = - GTK_SHEET(get_widget_assert(xml, "variable_sheet")); - - PsppireVarStore *var_store = - PSPPIRE_VAR_STORE(gtk_sheet_get_model(var_sheet)); - - psppire_dict_insert_variable(var_store->dict, var_sheet->range.row0, 0); - } - break; - } -} - -void -on_delete1_activate (GtkMenuItem *menuitem, - gpointer user_data) -{ - gint page = -1; - GtkWidget *notebook = get_widget_assert(xml, "notebook1"); - - page = gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook)); - switch ( page) - { -#if 0 + break; case PAGE_DATA_SHEET: { GtkSheet *data_sheet = GTK_SHEET(get_widget_assert(xml, "data_sheet")); PsppireDataStore *data_store = PSPPIRE_DATA_STORE(gtk_sheet_get_model(data_sheet)); + - psppire_case_array_delete_cases(data_store->cases, - data_sheet->range.row0, - 1 + data_sheet->range.rowi - - data_sheet->range.row0 ); - } - break; -#endif - case PAGE_VAR_SHEET: - { - GtkSheet *var_sheet = - GTK_SHEET(get_widget_assert(xml, "variable_sheet")); - - PsppireVarStore *var_store = - PSPPIRE_VAR_STORE(gtk_sheet_get_model(var_sheet)); + switch ( data_sheet->state ) + { + case GTK_SHEET_ROW_SELECTED: + psppire_case_file_delete_cases(data_store->case_file, + data_sheet->range.rowi + - data_sheet->range.row0 + 1, + data_sheet->range.row0); + break; + case GTK_SHEET_COLUMN_SELECTED: + { + gint fv; + struct PsppireVariable *pv = + psppire_dict_get_variable(the_dictionary, + data_sheet->range.col0); + fv = psppire_variable_get_fv(pv); + + + psppire_dict_delete_variables(the_dictionary, + data_sheet->range.col0, + 1); + + psppire_case_file_insert_values(data_store->case_file, + -1, fv); + } + break; + default: + gtk_sheet_cell_clear(data_sheet, + data_sheet->active_cell.row, + data_sheet->active_cell.col); + break; + } - psppire_dict_delete_variables(var_store->dict, - var_sheet->range.row0, - 1 + var_sheet->range.rowi - - var_sheet->range.row0 ); } break; } -} +} void on_about1_activate(GtkMenuItem *menuitem, @@ -599,15 +535,22 @@ static GtkNotebook *notebook = 0; static void switch_menus(gint page) { + GtkWidget *insert_variable = get_widget_assert(xml, "insert-variable"); + GtkWidget *insert_cases = get_widget_assert(xml, "insert-cases"); + switch (page) { case PAGE_VAR_SHEET: gtk_widget_hide(menuitems[PAGE_VAR_SHEET]); gtk_widget_show(menuitems[PAGE_DATA_SHEET]); + gtk_widget_set_sensitive(insert_variable, TRUE); + gtk_widget_set_sensitive(insert_cases, FALSE); break; case PAGE_DATA_SHEET: gtk_widget_show(menuitems[PAGE_VAR_SHEET]); gtk_widget_hide(menuitems[PAGE_DATA_SHEET]); + gtk_widget_set_sensitive(insert_variable, FALSE); + gtk_widget_set_sensitive(insert_cases, TRUE); break; default: g_assert_not_reached(); @@ -734,3 +677,44 @@ on_sort_cases_activate (GtkMenuItem *menuitem, break; } } + + +static void +insert_case(void) +{ + gint row, col; + PsppireDataStore *data_store ; + GtkSheet *data_sheet = GTK_SHEET(get_widget_assert(xml, "data_sheet")); + + data_store = PSPPIRE_DATA_STORE(gtk_sheet_get_model(data_sheet)); + + gtk_sheet_get_active_cell(data_sheet, &row, &col); + + psppire_data_store_insert_new_case(data_store, row); +} + +void +on_insert_case_clicked (GtkButton *button, gpointer user_data) +{ + insert_case(); +} + +void +on_insert_cases (GtkMenuItem *menuitem, gpointer user_data) +{ + insert_case(); +} + + +void +on_insert_variable (GtkMenuItem *menuitem, gpointer user_data) +{ + gint row, col; + GtkSheet *var_sheet = GTK_SHEET(get_widget_assert(xml, "variable_sheet")); + + gtk_sheet_get_active_cell(var_sheet, &row, &col); + + psppire_dict_insert_variable(the_dictionary, row, NULL); +} + +