1 #ifndef __XED_WINDOW_H__
2 #define __XED_WINDOW_H__
3 
4 #include <gtksourceview/gtksource.h>
5 
6 #include <xed/xed-tab.h>
7 #include <xed/xed-panel.h>
8 #include <xed/xed-message-bus.h>
9 #include <xed/xed-paned.h>
10 
11 G_BEGIN_DECLS
12 
13 typedef enum
14 {
15     XED_WINDOW_STATE_NORMAL = 0,
16     XED_WINDOW_STATE_SAVING = 1 << 1,
17     XED_WINDOW_STATE_PRINTING = 1 << 2,
18     XED_WINDOW_STATE_LOADING = 1 << 3,
19     XED_WINDOW_STATE_ERROR = 1 << 4,
20     XED_WINDOW_STATE_SAVING_SESSION = 1 << 5
21 } XedWindowState;
22 
23 #define XED_TYPE_WINDOW             (xed_window_get_type())
24 #define XED_WINDOW(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj), XED_TYPE_WINDOW, XedWindow))
25 #define XED_WINDOW_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass), XED_TYPE_WINDOW, XedWindowClass))
26 #define XED_IS_WINDOW(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj), XED_TYPE_WINDOW))
27 #define XED_IS_WINDOW_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), XED_TYPE_WINDOW))
28 #define XED_WINDOW_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj), XED_TYPE_WINDOW, XedWindowClass))
29 
30 typedef struct _XedWindow           XedWindow;
31 typedef struct _XedWindowPrivate    XedWindowPrivate;
32 typedef struct _XedWindowClass      XedWindowClass;
33 
34 struct _XedWindow
35 {
36     GtkApplicationWindow window;
37 
38     /*< private > */
39     XedWindowPrivate *priv;
40 };
41 
42 struct _XedWindowClass
43 {
44     GtkApplicationWindowClass parent_class;
45 
46     /* Signals */
47     void (* tab_added) (XedWindow *window, XedTab *tab);
48     void (* tab_removed) (XedWindow *window, XedTab *tab);
49     void (* tabs_reordered) (XedWindow *window);
50     void (* active_tab_changed) (XedWindow *window, XedTab *tab);
51     void (* active_tab_state_changed) (XedWindow *window);
52 };
53 
54 /* Public methods */
55 GType   xed_window_get_type (void) G_GNUC_CONST;
56 XedTab *xed_window_create_tab (XedWindow *window, gboolean jump_to);
57 XedTab *xed_window_create_tab_from_location (XedWindow *window, GFile *location, const GtkSourceEncoding *encoding,
58                                              gint line_pos, gboolean create, gboolean jump_to);
59 XedTab *xed_window_create_tab_from_stream (XedWindow *window, GInputStream *stream, const GtkSourceEncoding *encoding,
60                                            gint line_pos, gboolean jump_to);
61 void    xed_window_close_tab (XedWindow *window, XedTab *tab);
62 void    xed_window_close_all_tabs (XedWindow *window);
63 void    xed_window_close_tabs (XedWindow *window, const GList *tabs);
64 XedTab *xed_window_get_active_tab (XedWindow *window);
65 void    xed_window_set_active_tab (XedWindow *window, XedTab *tab);
66 
67 /* Helper functions */
68 XedView     *xed_window_get_active_view (XedWindow *window);
69 XedDocument *xed_window_get_active_document (XedWindow *window);
70 
71 /* Returns a newly allocated list with all the documents in the window */
72 GList *xed_window_get_documents (XedWindow *window);
73 
74 /* Returns a newly allocated list with all the documents that need to be
75  saved before closing the window */
76 GList *xed_window_get_unsaved_documents (XedWindow *window);
77 
78 /* Returns a newly allocated list with all the views in the window */
79 GList          *xed_window_get_views (XedWindow *window);
80 GtkWindowGroup *xed_window_get_group (XedWindow *window);
81 XedPanel       *xed_window_get_side_panel (XedWindow *window);
82 XedPanel       *xed_window_get_bottom_panel (XedWindow *window);
83 GtkWidget      *xed_window_get_statusbar (XedWindow *window);
84 GtkWidget      *xed_window_get_searchbar (XedWindow *window);
85 GtkUIManager   *xed_window_get_ui_manager (XedWindow *window);
86 XedWindowState  xed_window_get_state (XedWindow *window);
87 XedTab         *xed_window_get_tab_from_location (XedWindow *window, GFile *location);
88 
89 /* Message bus */
90 XedMessageBus *xed_window_get_message_bus (XedWindow *window);
91 
92 /*
93  * Non exported functions
94  */
95 GtkWidget *_xed_window_get_notebook (XedWindow *window);
96 XedWindow *_xed_window_move_tab_to_new_window (XedWindow *window, XedTab *tab);
97 gboolean   _xed_window_is_removing_tabs (XedWindow *window);
98 GFile     *_xed_window_get_default_location (XedWindow *window);
99 void       _xed_window_set_default_location (XedWindow *window, GFile *location);
100 void       _xed_window_set_saving_session_state (XedWindow *window, gboolean saving_session);
101 void       _xed_window_fullscreen (XedWindow *window);
102 void       _xed_window_unfullscreen (XedWindow *window);
103 gboolean   _xed_window_is_fullscreen (XedWindow *window);
104 
105 /* these are in xed-window because of screen safety */
106 void _xed_recent_add (XedWindow *window, GFile *location, const gchar *mime);
107 void _xed_recent_remove (XedWindow *window, GFile *location);
108 
109 void _xed_window_get_default_size (gint *width, gint *height);
110 gint _xed_window_get_side_panel_size (XedWindow *window);
111 gint _xed_window_get_bottom_panel_size (XedWindow *window);
112 
113 XedPaned *_xed_window_get_hpaned (XedWindow *window);
114 XedPaned *_xed_window_get_vpaned (XedWindow *window);
115 
116 G_END_DECLS
117 
118 #endif /* __XED_WINDOW_H__ */
119