1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*-
2 
3    caja-window-info.h: Interface for caja windows
4 
5    Copyright (C) 2004 Red Hat Inc.
6 
7    This program is free software; you can redistribute it and/or
8    modify it under the terms of the GNU General Public License as
9    published by the Free Software Foundation; either version 2 of the
10    License, or (at your option) any later version.
11 
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15    General Public License for more details.
16 
17    You should have received a copy of the GNU General Public
18    License along with this program; if not, write to the
19    Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
20    Boston, MA 02110-1301, USA.
21 
22    Author: Alexander Larsson <alexl@redhat.com>
23 */
24 
25 #ifndef CAJA_WINDOW_INFO_H
26 #define CAJA_WINDOW_INFO_H
27 
28 #include <glib-object.h>
29 
30 #include <gtk/gtk.h>
31 
32 #include "caja-view.h"
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
38     typedef enum
39     {
40         CAJA_WINDOW_SHOW_HIDDEN_FILES_DEFAULT,
41         CAJA_WINDOW_SHOW_HIDDEN_FILES_ENABLE,
42         CAJA_WINDOW_SHOW_HIDDEN_FILES_DISABLE
43     }
44     CajaWindowShowHiddenFilesMode;
45 
46     typedef enum
47     {
48         CAJA_WINDOW_SHOW_BACKUP_FILES_DEFAULT,
49         CAJA_WINDOW_SHOW_BACKUP_FILES_ENABLE,
50         CAJA_WINDOW_SHOW_BACKUP_FILES_DISABLE
51     }
52     CajaWindowShowBackupFilesMode;
53 
54     typedef enum
55     {
56         CAJA_WINDOW_OPEN_ACCORDING_TO_MODE,
57         CAJA_WINDOW_OPEN_IN_SPATIAL,
58         CAJA_WINDOW_OPEN_IN_NAVIGATION
59     } CajaWindowOpenMode;
60 
61     typedef enum
62     {
63         /* used in spatial mode */
64         CAJA_WINDOW_OPEN_FLAG_CLOSE_BEHIND = 1<<0,
65         /* used in navigation mode */
66         CAJA_WINDOW_OPEN_FLAG_NEW_WINDOW = 1<<1,
67         CAJA_WINDOW_OPEN_FLAG_NEW_TAB = 1<<2
68     } CajaWindowOpenFlags;
69 
70     typedef	enum
71     {
72         CAJA_WINDOW_SPATIAL,
73         CAJA_WINDOW_NAVIGATION,
74         CAJA_WINDOW_DESKTOP
75     } CajaWindowType;
76 
77 #define CAJA_TYPE_WINDOW_INFO           (caja_window_info_get_type ())
78 #define CAJA_WINDOW_INFO(obj)           (G_TYPE_CHECK_INSTANCE_CAST ((obj), CAJA_TYPE_WINDOW_INFO, CajaWindowInfo))
79 #define CAJA_IS_WINDOW_INFO(obj)        (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CAJA_TYPE_WINDOW_INFO))
80 #define CAJA_WINDOW_INFO_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), CAJA_TYPE_WINDOW_INFO, CajaWindowInfoIface))
81 
82 #ifndef CAJA_WINDOW_DEFINED
83 #define CAJA_WINDOW_DEFINED
84     /* Using CajaWindow for the vtable to make implementing this in
85      * CajaWindow easier */
86     typedef struct CajaWindow          CajaWindow;
87 #endif
88 
89 #ifndef CAJA_WINDOW_SLOT_DEFINED
90 #define CAJA_WINDOW_SLOT_DEFINED
91     typedef struct CajaWindowSlot      CajaWindowSlot;
92 #endif
93 
94 
95     typedef CajaWindowSlot              CajaWindowSlotInfo;
96     typedef CajaWindow                  CajaWindowInfo;
97 
98     typedef struct _CajaWindowInfoIface CajaWindowInfoIface;
99 
100     typedef void (* CajaWindowGoToCallback) (CajaWindow *window,
101     					     GError *error,
102     					     gpointer user_data);
103 
104     struct _CajaWindowInfoIface
105     {
106         GTypeInterface g_iface;
107 
108         /* signals: */
109 
110         void           (* loading_uri)              (CajaWindowInfo *window,
111                 const char        *uri);
112         /* Emitted when the view in the window changes the selection */
113         void           (* selection_changed)        (CajaWindowInfo *window);
114         void           (* title_changed)            (CajaWindowInfo *window,
115                 const char         *title);
116         void           (* hidden_files_mode_changed)(CajaWindowInfo *window);
117 	void           (* backup_files_mode_changed)(CajaWindowInfo *window);
118 
119         /* VTable: */
120         /* A view calls this once after a load_location, once it starts loading the
121          * directory. Might be called directly, or later on the mainloop.
122          * This can also be called at any other time if the view needs to
123          * re-load the location. But the view needs to call load_complete first if
124          * its currently loading. */
125         void (* report_load_underway) (CajaWindowInfo *window,
126                                        CajaView *view);
127         /* A view calls this once after reporting load_underway, when the location
128            has been fully loaded, or when the load was stopped
129            (by an error or by the user). */
130         void (* report_load_complete) (CajaWindowInfo *window,
131                                        CajaView *view);
132         /* This can be called at any time when there has been a catastrophic failure of
133            the view. It will result in the view being removed. */
134         void (* report_view_failed)   (CajaWindowInfo *window,
135                                        CajaView *view);
136         void (* report_selection_changed) (CajaWindowInfo *window);
137 
138         /* Returns the number of selected items in the view */
139         int  (* get_selection_count)  (CajaWindowInfo    *window);
140 
141         /* Returns a list of uris for th selected items in the view, caller frees it */
142         GList *(* get_selection)      (CajaWindowInfo    *window);
143 
144         char * (* get_current_location)  (CajaWindowInfo *window);
145         void   (* push_status)           (CajaWindowInfo *window,
146                                           const char *status);
147         char * (* get_title)             (CajaWindowInfo *window);
148         GList *(* get_history)           (CajaWindowInfo *window);
149         CajaWindowType
150         (* get_window_type)       (CajaWindowInfo *window);
151         CajaWindowShowHiddenFilesMode
152         (* get_hidden_files_mode) (CajaWindowInfo *window);
153         void   (* set_hidden_files_mode) (CajaWindowInfo *window,
154                                           CajaWindowShowHiddenFilesMode mode);
155         CajaWindowShowBackupFilesMode
156         (* get_backup_files_mode) (CajaWindowInfo *window);
157         void   (* set_backup_files_mode) (CajaWindowInfo *window,
158                                           CajaWindowShowBackupFilesMode mode);
159 
160         CajaWindowSlotInfo * (* get_active_slot) (CajaWindowInfo *window);
161         CajaWindowSlotInfo * (* get_extra_slot)  (CajaWindowInfo *window);
162 
163         gboolean (* get_initiated_unmount) (CajaWindowInfo *window);
164         void   (* set_initiated_unmount) (CajaWindowInfo *window,
165                                           gboolean initiated_unmount);
166 
167         void   (* view_visible)        (CajaWindowInfo *window,
168                                         CajaView *view);
169         void   (* close_window)       (CajaWindowInfo *window);
170         GtkUIManager *     (* get_ui_manager)   (CajaWindowInfo *window);
171     };
172 
173     GType                             caja_window_info_get_type                 (void);
174     void                              caja_window_info_report_load_underway     (CajaWindowInfo                *window,
175             CajaView                      *view);
176     void                              caja_window_info_report_load_complete     (CajaWindowInfo                *window,
177             CajaView                      *view);
178     void                              caja_window_info_report_view_failed       (CajaWindowInfo                *window,
179             CajaView                      *view);
180     void                              caja_window_info_report_selection_changed (CajaWindowInfo                *window);
181     CajaWindowSlotInfo *          caja_window_info_get_active_slot          (CajaWindowInfo                *window);
182     CajaWindowSlotInfo *          caja_window_info_get_extra_slot           (CajaWindowInfo                *window);
183     void                              caja_window_info_view_visible             (CajaWindowInfo                *window,
184             CajaView                      *view);
185     void                              caja_window_info_close                    (CajaWindowInfo                *window);
186     void                              caja_window_info_push_status              (CajaWindowInfo                *window,
187             const char                        *status);
188     CajaWindowType                caja_window_info_get_window_type          (CajaWindowInfo                *window);
189     char *                            caja_window_info_get_title                (CajaWindowInfo                *window);
190     GList *                           caja_window_info_get_history              (CajaWindowInfo                *window);
191     char *                            caja_window_info_get_current_location     (CajaWindowInfo                *window);
192     int                               caja_window_info_get_selection_count      (CajaWindowInfo                *window);
193     GList *                           caja_window_info_get_selection            (CajaWindowInfo                *window);
194     CajaWindowShowHiddenFilesMode caja_window_info_get_hidden_files_mode    (CajaWindowInfo                *window);
195     void                              caja_window_info_set_hidden_files_mode    (CajaWindowInfo                *window,
196             CajaWindowShowHiddenFilesMode  mode);
197     CajaWindowShowBackupFilesMode     caja_window_info_get_backup_files_mode    (CajaWindowInfo                *window);
198     void                              caja_window_info_set_backup_files_mode    (CajaWindowInfo                *window,
199             CajaWindowShowBackupFilesMode  mode);
200 
201     gboolean                          caja_window_info_get_initiated_unmount    (CajaWindowInfo                *window);
202     void                              caja_window_info_set_initiated_unmount    (CajaWindowInfo                *window,
203             gboolean initiated_unmount);
204     GtkUIManager *                    caja_window_info_get_ui_manager           (CajaWindowInfo                *window);
205 
206 #ifdef __cplusplus
207 }
208 #endif
209 
210 #endif /* CAJA_WINDOW_INFO_H */
211