1 /* PSPPIRE - a graphical user interface for PSPP.
2 Copyright (C) 2007 Free Software Foundation
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
18 #ifndef __PSPPIRE_SELECTOR_H__
19 #define __PSPPIRE_SELECTOR_H__
23 #include <glib-object.h>
24 #include <gtk/gtkbutton.h>
25 #include <gtk/gtkaction.h>
26 #include <gtk/gtkarrow.h>
27 #include <gtk/gtktreemodel.h>
28 #include <gtk/gtktreemodelfilter.h>
32 #define PSPPIRE_SELECTOR_TYPE (psppire_selector_get_type ())
33 #define PSPPIRE_SELECTOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PSPPIRE_SELECTOR_TYPE, PsppireSelector))
34 #define PSPPIRE_SELECTOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), \
35 PSPPIRE_SELECTOR_TYPE, PsppireSelectorClass))
36 #define PSPPIRE_IS_SELECTOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
37 PSPPIRE_SELECTOR_TYPE))
38 #define PSPPIRE_IS_SELECTOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), \
39 PSPPIRE_SELECTOR_TYPE))
42 typedef struct _PsppireSelector PsppireSelector;
43 typedef struct _PsppireSelectorClass PsppireSelectorClass;
46 /* Function for appending selected items to the destination widget */
47 typedef void SelectItemsFunc (GtkTreeIter iter,
49 GtkTreeModel *source_model,
52 /* Function to determine if items may be selected */
53 typedef gboolean AllowSelectionFunc (GtkWidget *src, GtkWidget *dest);
56 /* Function to determine whether an item in MODEL, pointed to by ITER
57 is currently selected.
59 Returns TRUE if the item is currently selected, FALSE otherwise.
61 typedef gboolean FilterItemsFunc (GtkTreeModel *model,
63 PsppireSelector *selector);
65 enum psppire_selector_dir
67 PSPPIRE_SELECTOR_SOURCE_TO_DEST,
68 PSPPIRE_SELECTOR_DEST_TO_SOURCE
72 struct _PsppireSelector
80 gboolean dispose_has_run;
82 enum psppire_selector_dir direction;
87 /* A flag indicating that the object is in the process of
88 updating its subjects.
89 (not thread safe if two threads access the same object)
95 GtkTreeModelFilter *filtered_source;
97 SelectItemsFunc *select_items;
98 gpointer select_user_data;
100 FilterItemsFunc *filter;
102 AllowSelectionFunc *allow_selection;
104 gulong row_activate_id ;
106 gulong source_select_id ;
108 gboolean primary_requested;
111 struct _PsppireSelectorClass
113 GtkButtonClass parent_class;
115 /* This is a hash of Lists of FilterItemsFunc pointers, keyed by address of
117 GHashTable *source_hash;
119 /* A hash of SelectItemFuncs indexed by GType */
120 GHashTable *default_selection_funcs;
123 GType psppire_selector_get_type (void);
124 GtkWidget* psppire_selector_new (void);
127 /* Set FILTER_FUNC for this selector */
128 void psppire_selector_set_filter_func (PsppireSelector *selector,
129 FilterItemsFunc *filter_func);
131 /* Set SELECT_FUNC for this selector */
132 void psppire_selector_set_select_func (PsppireSelector *selector,
133 SelectItemsFunc *select_func,
137 void psppire_selector_set_allow (PsppireSelector *, AllowSelectionFunc *);
140 GType psppire_selector_orientation_get_type (void) G_GNUC_CONST;
144 PSPPIRE_SELECT_SOURCE_BEFORE_DEST,
145 PSPPIRE_SELECT_SOURCE_AFTER_DEST,
146 PSPPIRE_SELECT_SOURCE_ABOVE_DEST,
147 PSPPIRE_SELECT_SOURCE_BELOW_DEST
148 } PsppireSelectorOrientation;
150 #define PSPPIRE_TYPE_SELECTOR_ORIENTATION \
151 (psppire_selector_orientation_get_type())
154 void psppire_selector_set_default_selection_func (GType type, SelectItemsFunc *);
159 #endif /* __PSPPIRE_SELECTOR_H__ */