1 /*
2  * Copyright (C) 2015 Red Hat, Inc. (www.redhat.com)
3  *
4  * This program is free software: you can redistribute it and/or modify it
5  * under the terms of the GNU General Public License as published by
6  * the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
10  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
11  * for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  */
17 
18 #ifndef E_COMP_EDITOR_H
19 #define E_COMP_EDITOR_H
20 
21 #include <gtk/gtk.h>
22 #include <libecal/libecal.h>
23 
24 #include <e-util/e-util.h>
25 #include <shell/e-shell.h>
26 
27 #include <calendar/gui/e-comp-editor-page.h>
28 #include <calendar/gui/e-comp-editor-property-part.h>
29 
30 /* Standard GObject macros */
31 
32 #define E_TYPE_COMP_EDITOR \
33 	(e_comp_editor_get_type ())
34 #define E_COMP_EDITOR(obj) \
35 	(G_TYPE_CHECK_INSTANCE_CAST \
36 	((obj), E_TYPE_COMP_EDITOR, ECompEditor))
37 #define E_COMP_EDITOR_CLASS(cls) \
38 	(G_TYPE_CHECK_CLASS_CAST \
39 	((cls), E_TYPE_COMP_EDITOR, ECompEditorClass))
40 #define E_IS_COMP_EDITOR(obj) \
41 	(G_TYPE_CHECK_INSTANCE_TYPE \
42 	((obj), E_TYPE_COMP_EDITOR))
43 #define E_IS_COMP_EDITOR_CLASS(cls) \
44 	(G_TYPE_CHECK_CLASS_TYPE \
45 	((cls), E_TYPE_COMP_EDITOR))
46 #define E_COMP_EDITOR_GET_CLASS(obj) \
47 	(G_TYPE_INSTANCE_GET_CLASS \
48 	((obj), E_TYPE_COMP_EDITOR, ECompEditorClass))
49 
50 G_BEGIN_DECLS
51 
52 typedef enum {
53 	E_COMP_EDITOR_FLAG_IS_NEW		= 1 << 0,
54 	E_COMP_EDITOR_FLAG_IS_ALL_DAY_EVENT	= 1 << 1,
55 	E_COMP_EDITOR_FLAG_WITH_ATTENDEES	= 1 << 2,
56 	E_COMP_EDITOR_FLAG_ORGANIZER_IS_USER	= 1 << 3,
57 	E_COMP_EDITOR_FLAG_DELEGATE		= 1 << 4
58 } ECompEditorFlags;
59 
60 typedef struct _ECompEditor ECompEditor;
61 typedef struct _ECompEditorClass ECompEditorClass;
62 typedef struct _ECompEditorPrivate ECompEditorPrivate;
63 
64 struct _ECompEditor {
65 	GtkWindow parent;
66 
67 	ECompEditorPrivate *priv;
68 };
69 
70 struct _ECompEditorClass {
71 	GtkWindowClass parent_class;
72 
73 	const gchar *help_section;
74 	const gchar *title_format_with_attendees; /* should contain only one '%s', for the component summary */
75 	const gchar *title_format_without_attendees; /* should contain only one '%s', for the component summary */
76 	const gchar *icon_name; /* to be set as window icon */
77 
78 	/* Virtual functions */
79 	void		(* sensitize_widgets)	(ECompEditor *comp_editor,
80 						 gboolean force_insensitive);
81 	void		(* fill_widgets)	(ECompEditor *comp_editor,
82 						 ICalComponent *component);
83 	gboolean	(* fill_component)	(ECompEditor *comp_editor,
84 						 ICalComponent *component);
85 
86 	/* Signals */
87 	void		(* times_changed)	(ECompEditor *comp_editor);
88 	void		(* object_created)	(ECompEditor *comp_editor);
89 	void		(* editor_closed)	(ECompEditor *comp_editor,
90 						 gboolean saved);
91 };
92 
93 GType		e_comp_editor_get_type		(void) G_GNUC_CONST;
94 void		e_comp_editor_sensitize_widgets	(ECompEditor *comp_editor);
95 void		e_comp_editor_fill_widgets	(ECompEditor *comp_editor,
96 						 ICalComponent *component);
97 gboolean	e_comp_editor_fill_component	(ECompEditor *comp_editor,
98 						 ICalComponent *component);
99 void		e_comp_editor_set_validation_error
100 						(ECompEditor *comp_editor,
101 						 ECompEditorPage *error_page,
102 						 GtkWidget *error_widget,
103 						 const gchar *error_message);
104 EShell *	e_comp_editor_get_shell		(ECompEditor *comp_editor);
105 GSettings *	e_comp_editor_get_settings	(ECompEditor *comp_editor);
106 ESource *	e_comp_editor_get_origin_source	(ECompEditor *comp_editor);
107 ICalComponent *	e_comp_editor_get_component	(ECompEditor *comp_editor);
108 guint32		e_comp_editor_get_flags		(ECompEditor *comp_editor);
109 void		e_comp_editor_set_flags		(ECompEditor *comp_editor,
110 						 guint32 flags);
111 EFocusTracker *	e_comp_editor_get_focus_tracker	(ECompEditor *comp_editor);
112 GtkUIManager *	e_comp_editor_get_ui_manager	(ECompEditor *comp_editor);
113 GtkAction *	e_comp_editor_get_action	(ECompEditor *comp_editor,
114 						 const gchar *action_name);
115 GtkActionGroup *e_comp_editor_get_action_group	(ECompEditor *comp_editor,
116 						 const gchar *group_name);
117 GtkWidget *	e_comp_editor_get_managed_widget
118 						(ECompEditor *comp_editor,
119 						 const gchar *widget_path);
120 const gchar *	e_comp_editor_get_alarm_email_address
121 						(ECompEditor *comp_editor);
122 void		e_comp_editor_set_alarm_email_address
123 						(ECompEditor *comp_editor,
124 						 const gchar *alarm_email_address);
125 const gchar *	e_comp_editor_get_cal_email_address
126 						(ECompEditor *comp_editor);
127 void		e_comp_editor_set_cal_email_address
128 						(ECompEditor *comp_editor,
129 						 const gchar *cal_email_address);
130 gboolean	e_comp_editor_get_changed	(ECompEditor *comp_editor);
131 void		e_comp_editor_set_changed	(ECompEditor *comp_editor,
132 						 gboolean changed);
133 void		e_comp_editor_ensure_changed	(ECompEditor *comp_editor);
134 gboolean	e_comp_editor_get_updating	(ECompEditor *comp_editor);
135 void		e_comp_editor_set_updating	(ECompEditor *comp_editor,
136 						 gboolean updating);
137 ECalClient *	e_comp_editor_get_source_client	(ECompEditor *comp_editor);
138 void		e_comp_editor_set_source_client	(ECompEditor *comp_editor,
139 						 ECalClient *client);
140 ECalClient *	e_comp_editor_get_target_client	(ECompEditor *comp_editor);
141 void		e_comp_editor_set_target_client	(ECompEditor *comp_editor,
142 						 ECalClient *client);
143 const gchar *	e_comp_editor_get_title_suffix	(ECompEditor *comp_editor);
144 void		e_comp_editor_set_title_suffix	(ECompEditor *comp_editor,
145 						 const gchar *title_suffix);
146 void		e_comp_editor_set_time_parts	(ECompEditor *comp_editor,
147 						 ECompEditorPropertyPart *dtstart_part,
148 						 ECompEditorPropertyPart *dtend_part);
149 void		e_comp_editor_get_time_parts	(ECompEditor *comp_editor,
150 						 ECompEditorPropertyPart **out_dtstart_part,
151 						 ECompEditorPropertyPart **out_dtend_part);
152 void		e_comp_editor_add_page		(ECompEditor *comp_editor,
153 						 const gchar *label,
154 						 ECompEditorPage *page);
155 ECompEditorPage *
156 		e_comp_editor_get_page		(ECompEditor *comp_editor,
157 						 GType page_type);
158 GSList *	e_comp_editor_get_pages		(ECompEditor *comp_editor);
159 void		e_comp_editor_select_page	(ECompEditor *comp_editor,
160 						 ECompEditorPage *page);
161 EAlert *	e_comp_editor_add_information	(ECompEditor *comp_editor,
162 						 const gchar *primary_text,
163 						 const gchar *secondary_text);
164 EAlert *	e_comp_editor_add_warning	(ECompEditor *comp_editor,
165 						 const gchar *primary_text,
166 						 const gchar *secondary_text);
167 EAlert *	e_comp_editor_add_error		(ECompEditor *comp_editor,
168 						 const gchar *primary_text,
169 						 const gchar *secondary_text);
170 void		e_comp_editor_ensure_start_before_end
171 						(ECompEditor *comp_editor,
172 						 ECompEditorPropertyPart *start_datetime,
173 						 ECompEditorPropertyPart *end_datetime,
174 						 gboolean change_end_datetime);
175 ECompEditor *	e_comp_editor_open_for_component
176 						(GtkWindow *parent,
177 						 EShell *shell,
178 						 ESource *origin_source,
179 						 const ICalComponent *component,
180 						 guint32 flags /* bit-or of ECompEditorFlags */);
181 ECompEditor *	e_comp_editor_find_existing_for	(ESource *origin_source,
182 						 const ICalComponent *component);
183 ICalTimezone *	e_comp_editor_lookup_timezone	(ECompEditor *comp_editor,
184 						 const gchar *tzid);
185 ICalTimezone *	e_comp_editor_lookup_timezone_cb(const gchar *tzid,
186 						 gpointer user_data, /* ECompEditor * */
187 						 GCancellable *cancellable,
188 						 GError **error);
189 
190 G_END_DECLS
191 
192 #endif /* E_COMP_EDITOR_H */
193