gui: Fix grammar in user message in psppire-data-window.c
[pspp] / src / ui / gui / psppire-selector.c
index 2b2b2ed5ceeb9f23fe4dcca11fd6fd216c3b8832..7b30106013b21297cd9085a9008856b02de04511 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2007, 2009 Free Software Foundation
+   Copyright (C) 2007, 2009, 2010 Free Software Foundation
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
 #include "psppire-dictview.h"
 #include "psppire-var-view.h"
+#include "psppire-dict.h"
+#include "psppire-select-dest.h"
 
-
-
-#include <gtk/gtksignal.h>
-#include <gtk/gtkbutton.h>
-#include <gtk/gtkentry.h>
+#include <gtk/gtk.h>
 
 #include "psppire-selector.h"
 
-#include <gtk/gtktreeview.h>
-#include <gtk/gtktreeselection.h>
-#include <gtk/gtktextview.h>
-#include <gtk/gtkwidget.h>
-
 static void psppire_selector_base_finalize (PsppireSelectorClass *, gpointer);
 static void psppire_selector_base_init     (PsppireSelectorClass *class);
 static void psppire_selector_class_init    (PsppireSelectorClass *class);
@@ -158,7 +151,7 @@ enum
 };
 
 
-static void on_activate (PsppireSelector *selector, gpointer data);
+static void on_click (GtkButton *b);
 
 static void update_subjects (PsppireSelector *selector);
 
@@ -225,6 +218,7 @@ static void
 psppire_selector_class_init (PsppireSelectorClass *class)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (class);
+  GtkButtonClass *button_class = GTK_BUTTON_CLASS (class);
   GParamSpec *orientation_spec =
     g_param_spec_enum ("orientation",
                       "Orientation",
@@ -257,6 +251,8 @@ psppire_selector_class_init (PsppireSelectorClass *class)
                         G_PARAM_READWRITE);
 
 
+  button_class->clicked = on_click;
+
   object_class->set_property = psppire_selector_set_property;
   object_class->get_property = psppire_selector_get_property;
 
@@ -330,9 +326,7 @@ on_row_activate (GtkTreeView       *tree_view,
                 GtkTreeViewColumn *column,
                 gpointer           data)
 {
-  PsppireSelector *selector  = data;
-
-  gtk_action_activate (selector->action);
+  on_click (GTK_BUTTON (data));
 }
 
 /* Callback for when the source selection changes */
@@ -345,12 +339,12 @@ on_source_select (GtkTreeSelection *treeselection, gpointer data)
 
   if ( selector->allow_selection )
     {
-      gtk_action_set_sensitive (selector->action,
+      gtk_widget_set_sensitive (GTK_WIDGET (selector),
                                selector->allow_selection (selector->source, selector->dest));
     }
   else if ( GTK_IS_ENTRY (selector->dest) )
     {
-      gtk_action_set_sensitive (selector->action,
+      gtk_widget_set_sensitive (GTK_WIDGET (selector),
                                gtk_tree_selection_count_selected_rows
                                (treeselection) <= 1 );
     }
@@ -399,16 +393,11 @@ psppire_selector_init (PsppireSelector *selector)
   selector->arrow = gtk_arrow_new (GTK_ARROW_LEFT, GTK_SHADOW_NONE);
   selector->filtered_source = NULL;
 
-  selector->action = gtk_action_new ("select", NULL, NULL, "pspp-stock-select");
-
-  gtk_action_connect_proxy (selector->action, GTK_WIDGET (selector));
 
   gtk_container_add (GTK_CONTAINER (selector), selector->arrow);
 
   gtk_widget_show (selector->arrow);
 
-  g_signal_connect_swapped (selector->action, "activate", G_CALLBACK (on_activate), selector);
-
   selector->selecting = FALSE;
 
   selector->source = NULL;
@@ -634,8 +623,10 @@ select_selection (PsppireSelector *selector)
    or other event which causes the selector's action to occur.
  */
 static void
-on_activate (PsppireSelector *selector, gpointer data)
+on_click (GtkButton *b)
 {
+  PsppireSelector *selector = PSPPIRE_SELECTOR (b);
+
   switch (selector->direction)
     {
     case PSPPIRE_SELECTOR_SOURCE_TO_DEST:
@@ -648,34 +639,27 @@ on_activate (PsppireSelector *selector, gpointer data)
       g_assert_not_reached ();
       break;
     }
-}
 
-static gboolean
-permissive_filter (GtkTreeModel *model, GtkTreeIter *iter,
-                PsppireSelector *selector)
-{
-  return FALSE;
+  if (GTK_BUTTON_CLASS (parent_class)->clicked)
+    GTK_BUTTON_CLASS (parent_class)->clicked (b);
+
 }
 
-/* Default visibility filter for GtkTreeView DEST widget */
 static gboolean
-is_item_in_dest (GtkTreeModel *model, GtkTreeIter *iter,
-                PsppireSelector *selector)
+is_item_in_dest (GtkTreeModel *model, GtkTreeIter *iter, PsppireSelector *selector)
 {
-  GtkTreeModel *dest_model;
-  GtkTreeIter dest_iter;
+  gboolean result = FALSE;
   GtkTreeIter source_iter;
-  gint index;
-  GtkTreePath *path ;
   GtkTreeModel *source_model;
+  GValue value = {0};
 
-  if ( GTK_IS_TREE_MODEL_FILTER (model) )
+  if (GTK_IS_TREE_MODEL_FILTER (model))
     {
       source_model = gtk_tree_model_filter_get_model
        (GTK_TREE_MODEL_FILTER (model));
 
       gtk_tree_model_filter_convert_iter_to_child_iter
-       ( GTK_TREE_MODEL_FILTER (model),  &source_iter,  iter  );
+       (GTK_TREE_MODEL_FILTER (model),  &source_iter, iter);
     }
   else
     {
@@ -683,40 +667,17 @@ is_item_in_dest (GtkTreeModel *model, GtkTreeIter *iter,
       source_iter = *iter;
     }
 
-  dest_model = gtk_tree_view_get_model (GTK_TREE_VIEW (selector->dest));
-
-  path = gtk_tree_model_get_path (source_model, &source_iter);
-
-  index = *gtk_tree_path_get_indices (path);
-
-  gtk_tree_path_free (path);
-
-  if ( ! gtk_tree_model_get_iter_first (dest_model, &dest_iter) )
-    return FALSE;
+  gtk_tree_model_get_value (source_model, &source_iter, DICT_TVM_COL_VAR, &value);
 
-  do
-    {
-      int x;
-      GValue value = {0};
-      GValue int_value = {0};
-      gtk_tree_model_get_value (dest_model, &dest_iter, 0, &value);
+  result = psppire_select_dest_widget_contains_var (PSPPIRE_SELECT_DEST_WIDGET (selector->dest),
+                                                   &value);
 
-      g_value_init (&int_value, G_TYPE_INT);
+  g_value_unset (&value);
 
-      g_value_transform (&value, &int_value);
+  return result;
+}
 
-      x = g_value_get_int (&int_value);
 
-      g_value_unset (&int_value);
-      g_value_unset (&value);
-
-      if ( x == index )
-       return TRUE;
-    }
-  while (gtk_tree_model_iter_next (dest_model, &dest_iter));
-
-  return FALSE;
-}
 
 /* Visibility function for items in the SOURCE widget.
    Returns TRUE iff *all* the selectors for which SOURCE is associated
@@ -751,7 +712,6 @@ static void
 set_tree_view_source (PsppireSelector *selector,
                      GtkTreeView *source)
 {
-
   GList *list = NULL;
 
   PsppireSelectorClass *class = g_type_class_peek (PSPPIRE_SELECTOR_TYPE);
@@ -790,8 +750,6 @@ set_tree_view_source (PsppireSelector *selector,
          g_hash_table_replace (class->source_hash, source, list);
        }
     }
-
-
 }
 
 
@@ -826,7 +784,7 @@ on_dest_data_delete (GtkTreeModel *tree_model,
 
 
 static void
-xxx (PsppireSelector *selector)
+on_dest_model_changed (PsppireSelector *selector)
 {
   GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (selector->dest));
 
@@ -850,12 +808,12 @@ set_tree_view_dest (PsppireSelector *selector,
   g_signal_connect (selection, "changed", G_CALLBACK (on_dest_treeview_select),
                    selector);
 
-
+  on_dest_model_changed (selector);
   g_signal_connect_swapped (dest, "notify::model",
-                           G_CALLBACK (xxx), selector);
-
+                           G_CALLBACK (on_dest_model_changed), selector);
 }
 
+
 /* Callback which causes the filter to be refiltered.
    Called when the DEST GtkEntry is activated (Enter is pressed), or when it
    looses focus.
@@ -867,6 +825,7 @@ refilter (PsppireSelector *selector)
   return FALSE;
 }
 
+
 /* Callback for when the DEST GtkEntry is selected (clicked) */
 static gboolean
 on_entry_dest_select (GtkWidget *widget, GdkEventFocus *event, gpointer data)
@@ -880,7 +839,6 @@ on_entry_dest_select (GtkWidget *widget, GdkEventFocus *event, gpointer data)
 }
 
 
-
 /* Callback for when an item disappears from the source list.
    By implication, this means that the item has been inserted into the
    destination.
@@ -934,7 +892,7 @@ set_default_filter (PsppireSelector *selector)
   if ( selector->filter == NULL)
     {
       if  (GTK_IS_TREE_VIEW (selector->dest))
-       selector->filter = permissive_filter;
+       selector->filter = is_item_in_dest;
     }
 }
 
@@ -1018,8 +976,6 @@ psppire_selector_set_filter_func (PsppireSelector *selector,
                                  FilterItemsFunc *filter_func)
 {
   selector->filter = filter_func ;
-  
-  set_default_filter (selector);
 }