]> Pileus Git - ~andy/gtk/blob - gtk/gtkfilechooserutils.c
Initial revision
[~andy/gtk] / gtk / gtkfilechooserutils.c
1 /* GTK - The GIMP Toolkit
2  * gtkfilechooserutils.c: Private utility functions useful for
3  *                        implementing a GtkFileChooser interface
4  * Copyright (C) 2003, Red Hat, Inc.
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the
18  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19  * Boston, MA 02111-1307, USA.
20  */
21
22 #include "gtkfilechooserutils.h"
23 #include "gtkfilechooser.h"
24 #include "gtkfilechooserenums.h"
25
26 static void    delegate_set_current_folder (GtkFileChooser *chooser,
27                                             const char     *uri);
28 static char *  delegate_get_current_folder (GtkFileChooser *chooser);
29 static void    delegate_select_uri         (GtkFileChooser *chooser,
30                                             const char     *uri);
31 static void    delegate_unselect_uri       (GtkFileChooser *chooser,
32                                             const char     *uri);
33 static void    delegate_select_all         (GtkFileChooser *chooser);
34 static void    delegate_unselect_all       (GtkFileChooser *chooser);
35 static GSList *delegate_get_uris           (GtkFileChooser *chooser);
36
37 static void    delegate_current_folder_changed (GtkFileChooser *chooser,
38                                                 gpointer        data);
39 static void    delegate_selection_changed      (GtkFileChooser *chooser,
40                                                 gpointer        data);
41
42 void
43 _gtk_file_chooser_install_properties (GObjectClass *klass)
44 {
45   g_object_class_install_property (klass,
46                                    GTK_FILE_CHOOSER_PROP_ACTION,
47                                    g_param_spec_override ("action",
48                                                           GTK_TYPE_FILE_CHOOSER_ACTION,
49                                                           G_PARAM_READWRITE));
50   g_object_class_install_property (klass,
51                                    GTK_FILE_CHOOSER_PROP_FOLDER_MODE,
52                                    g_param_spec_override ("folder_mode",
53                                                           G_TYPE_BOOLEAN,
54                                                           G_PARAM_READWRITE));
55   g_object_class_install_property (klass,
56                                    GTK_FILE_CHOOSER_PROP_LOCAL_ONLY,
57                                    g_param_spec_override ("local_only",
58                                                           G_TYPE_BOOLEAN,
59                                                           G_PARAM_READWRITE));
60   g_object_class_install_property (klass,
61                                    GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET,
62                                    g_param_spec_override ("preview_widget",
63                                                           GTK_TYPE_WIDGET,
64                                                           G_PARAM_READWRITE));
65   g_object_class_install_property (klass,
66                                    GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE,
67                                    g_param_spec_override ("preview_widget_active",
68                                                           G_TYPE_BOOLEAN,
69                                                           G_PARAM_READWRITE));
70   g_object_class_install_property (klass,
71                                    GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE,
72                                    g_param_spec_override ("select_multiple",
73                                                           G_TYPE_BOOLEAN,
74                                                           G_PARAM_READWRITE));
75   g_object_class_install_property (klass,
76                                    GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN,
77                                    g_param_spec_override ("show_hidden",
78                                                           G_TYPE_BOOLEAN,
79                                                           G_PARAM_READWRITE));
80 }
81
82 void
83 _gtk_file_chooser_delegate_iface_init (GtkFileChooserIface *iface)
84 {
85   iface->set_current_folder = delegate_set_current_folder;
86   iface->get_current_folder = delegate_get_current_folder;
87   iface->select_uri = delegate_select_uri;
88   iface->unselect_uri = delegate_unselect_uri;
89   iface->select_all = delegate_select_all;
90   iface->unselect_all = delegate_unselect_all;
91   iface->get_uris = delegate_get_uris;
92 }
93
94 void
95 _gtk_file_chooser_set_delegate (GtkFileChooser *receiver,
96                                 GtkFileChooser *delegate)
97 {
98   g_return_if_fail (GTK_IS_FILE_CHOOSER (receiver));
99   g_return_if_fail (GTK_IS_FILE_CHOOSER (delegate));
100   
101   g_object_set_data (G_OBJECT (receiver), "gtk-file-chooser-delegate", delegate);
102
103   g_signal_connect (delegate, "current_folder_changed",
104                     G_CALLBACK (delegate_current_folder_changed), receiver);
105   g_signal_connect (delegate, "selection_changed",
106                     G_CALLBACK (delegate_selection_changed), receiver);
107 }
108
109 GtkFileChooser *
110 get_delegate (GtkFileChooser *receiver)
111 {
112   return g_object_get_data (G_OBJECT (receiver), "gtk-file-chooser-delegate");
113 }
114
115 static void
116 delegate_select_uri (GtkFileChooser *chooser,
117                      const char     *uri)
118 {
119   gtk_file_chooser_select_uri (get_delegate (chooser), uri);
120 }
121
122 static void
123 delegate_unselect_uri (GtkFileChooser *chooser,
124                                       const char     *uri)
125 {
126   gtk_file_chooser_unselect_uri (get_delegate (chooser), uri);
127 }
128
129 static void
130 delegate_select_all (GtkFileChooser *chooser)
131 {
132   gtk_file_chooser_select_all (get_delegate (chooser));
133 }
134
135 static void
136 delegate_unselect_all (GtkFileChooser *chooser)
137 {
138   gtk_file_chooser_unselect_all (get_delegate (chooser));
139 }
140
141 static GSList *
142 delegate_get_uris (GtkFileChooser *chooser)
143 {
144   return gtk_file_chooser_get_uris (get_delegate (chooser));
145 }
146
147 static void
148 delegate_set_current_folder (GtkFileChooser *chooser,
149                              const char     *uri)
150 {
151   gtk_file_chooser_set_current_folder_uri (chooser, uri);
152 }
153
154 static char *
155 delegate_get_current_folder (GtkFileChooser *chooser)
156 {
157   return gtk_file_chooser_get_current_folder_uri (get_delegate (chooser));
158 }
159
160 static void
161 delegate_selection_changed (GtkFileChooser *chooser,
162                             gpointer        data)
163 {
164   g_signal_emit_by_name (data, "selection_changed", 0);
165 }
166
167 static void
168 delegate_current_folder_changed (GtkFileChooser *chooser,
169                                  gpointer        data)
170 {
171   g_signal_emit_by_name (data, "current_folder_changed", 0);
172 }