Refactor common code in dialog implementations
[pspp-builds.git] / src / ui / gui / transpose-dialog.c
index 3a1f3a931002e53e0127ff7ed9f6dff869e22cfd..9e8c18f44e2ac601bb9a56bca1ab245b78dce963 100644 (file)
 #include "psppire-selector.h"
 #include "psppire-dialog.h"
 #include "helper.h"
-#include "data-editor.h"
+#include "psppire-data-window.h"
 #include "dict-display.h"
 #include <language/syntax-string-source.h>
-#include "syntax-editor.h"
+#include "helper.h"
 
 #include "dialog-common.h"
 
@@ -37,7 +37,6 @@
 
 
 /* FIXME: These shouldn't be here */
-#include <gtksheet/gtksheet.h>
 #include "psppire-var-store.h"
 
 
@@ -55,18 +54,37 @@ refresh (PsppireDialog *dialog, gpointer data)
   gtk_entry_set_text (GTK_ENTRY (entry), "");
 }
 
+static gboolean
+dialog_state_valid (gpointer data)
+{
+  GladeXML *xml = data;
+
+  GtkWidget *tv = get_widget_assert (xml, "variables-treeview");
+  GtkWidget *entry = get_widget_assert (xml, "new-name-entry");
+
+  GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (tv));
+
+  gint n_rows = gtk_tree_model_iter_n_children  (model, NULL);
+
+  if ( n_rows == 0 )
+    return FALSE;
+
+  if ( 0 == strcmp ("", gtk_entry_get_text (GTK_ENTRY (entry))))
+    return FALSE;
+
+  return TRUE;
+}
+
+
 void
 transpose_dialog (GObject *o, gpointer data)
 {
   gint response ;
-  struct data_editor *de = data;
+  PsppireDataWindow *de = PSPPIRE_DATA_WINDOW (data);
 
   GladeXML *xml = XML_NEW ("psppire.glade");
 
-  GtkSheet *var_sheet =
-    GTK_SHEET (get_widget_assert (de->xml, "variable_sheet"));
-
-  PsppireVarStore *vs = PSPPIRE_VAR_STORE (gtk_sheet_get_model (var_sheet));
+  PsppireVarStore *vs = NULL;
 
   GtkWidget *dialog = get_widget_assert (xml, "transpose-dialog");
   GtkWidget *source = get_widget_assert (xml, "source-treeview");
@@ -75,6 +93,8 @@ transpose_dialog (GObject *o, gpointer data)
   GtkWidget *selector2 = get_widget_assert (xml, "psppire-selector3");
   GtkWidget *new_name_entry = get_widget_assert (xml, "new-name-entry");
 
+  g_object_get (de->data_editor, "var-store", &vs, NULL);
+
   attach_dictionary_to_treeview (GTK_TREE_VIEW (source),
                                 vs->dict,
                                 GTK_SELECTION_MULTIPLE, NULL);
@@ -97,7 +117,10 @@ transpose_dialog (GObject *o, gpointer data)
 
   g_signal_connect (dialog, "refresh", G_CALLBACK (refresh),  xml);
 
-  gtk_window_set_transient_for (GTK_WINDOW (dialog), de->parent.window);
+  gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (de));
+
+  psppire_dialog_set_valid_predicate (PSPPIRE_DIALOG (dialog),
+                                     dialog_state_valid, xml);
 
   response = psppire_dialog_run (PSPPIRE_DIALOG (dialog));
 
@@ -106,6 +129,7 @@ transpose_dialog (GObject *o, gpointer data)
     case GTK_RESPONSE_OK:
       {
        gchar *syntax = generate_syntax (vs->dict, xml);
+
        struct getl_interface *sss = create_syntax_string_source (syntax);
        execute_syntax (sss);
 
@@ -115,11 +139,7 @@ transpose_dialog (GObject *o, gpointer data)
     case PSPPIRE_RESPONSE_PASTE:
       {
        gchar *syntax = generate_syntax (vs->dict, xml);
-
-       struct syntax_editor *se =
-         (struct syntax_editor *) window_create (WINDOW_SYNTAX, NULL);
-
-       gtk_text_buffer_insert_at_cursor (se->buffer, syntax, -1);
+        paste_syntax_in_new_window (syntax);
 
        g_free (syntax);
       }