1 /* GSequencer - Advanced GTK Sequencer
2  * Copyright (C) 2005-2021 Joël Krähemann
3  *
4  * This file is part of GSequencer.
5  *
6  * GSequencer is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * GSequencer 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
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with GSequencer.  If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #include <ags/X/ags_server_preferences.h>
21 #include <ags/X/ags_server_preferences_callbacks.h>
22 
23 #include <ags/X/ags_window.h>
24 #include <ags/X/ags_preferences.h>
25 
26 #include <ags/i18n.h>
27 
28 void ags_server_preferences_class_init(AgsServerPreferencesClass *server_preferences);
29 void ags_server_preferences_connectable_interface_init(AgsConnectableInterface *connectable);
30 void ags_server_preferences_applicable_interface_init(AgsApplicableInterface *applicable);
31 void ags_server_preferences_init(AgsServerPreferences *server_preferences);
32 
33 void ags_server_preferences_connect(AgsConnectable *connectable);
34 void ags_server_preferences_disconnect(AgsConnectable *connectable);
35 
36 void ags_server_preferences_set_update(AgsApplicable *applicable, gboolean update);
37 void ags_server_preferences_apply(AgsApplicable *applicable);
38 void ags_server_preferences_reset(AgsApplicable *applicable);
39 
40 /**
41  * SECTION:ags_server_preferences
42  * @short_description: A composite widget to do server related preferences
43  * @title: AgsServerPreferences
44  * @section_id:
45  * @include: ags/X/ags_server_preferences.h
46  *
47  * #AgsServerPreferences enables you to make server related preferences.
48  */
49 
50 static gpointer ags_server_preferences_parent_class = NULL;
51 
52 GType
ags_server_preferences_get_type(void)53 ags_server_preferences_get_type(void)
54 {
55   static volatile gsize g_define_type_id__volatile = 0;
56 
57   if(g_once_init_enter (&g_define_type_id__volatile)){
58     GType ags_type_server_preferences = 0;
59 
60     static const GTypeInfo ags_server_preferences_info = {
61       sizeof (AgsServerPreferencesClass),
62       NULL, /* base_init */
63       NULL, /* base_finalize */
64       (GClassInitFunc) ags_server_preferences_class_init,
65       NULL, /* class_finalize */
66       NULL, /* class_data */
67       sizeof (AgsServerPreferences),
68       0,    /* n_preallocs */
69       (GInstanceInitFunc) ags_server_preferences_init,
70     };
71 
72     static const GInterfaceInfo ags_connectable_interface_info = {
73       (GInterfaceInitFunc) ags_server_preferences_connectable_interface_init,
74       NULL, /* interface_finalize */
75       NULL, /* interface_data */
76     };
77 
78     static const GInterfaceInfo ags_applicable_interface_info = {
79       (GInterfaceInitFunc) ags_server_preferences_applicable_interface_init,
80       NULL, /* interface_finalize */
81       NULL, /* interface_data */
82     };
83 
84     ags_type_server_preferences = g_type_register_static(GTK_TYPE_BOX,
85 							 "AgsServerPreferences", &ags_server_preferences_info,
86 							 0);
87 
88     g_type_add_interface_static(ags_type_server_preferences,
89 				AGS_TYPE_CONNECTABLE,
90 				&ags_connectable_interface_info);
91 
92     g_type_add_interface_static(ags_type_server_preferences,
93 				AGS_TYPE_APPLICABLE,
94 				&ags_applicable_interface_info);
95 
96     g_once_init_leave(&g_define_type_id__volatile, ags_type_server_preferences);
97   }
98 
99   return g_define_type_id__volatile;
100 }
101 
102 void
ags_server_preferences_class_init(AgsServerPreferencesClass * server_preferences)103 ags_server_preferences_class_init(AgsServerPreferencesClass *server_preferences)
104 {
105   ags_server_preferences_parent_class = g_type_class_peek_parent(server_preferences);
106 }
107 
108 void
ags_server_preferences_connectable_interface_init(AgsConnectableInterface * connectable)109 ags_server_preferences_connectable_interface_init(AgsConnectableInterface *connectable)
110 {
111   connectable->is_ready = NULL;
112   connectable->is_connected = NULL;
113   connectable->connect = ags_server_preferences_connect;
114   connectable->disconnect = ags_server_preferences_disconnect;
115 }
116 
117 void
ags_server_preferences_applicable_interface_init(AgsApplicableInterface * applicable)118 ags_server_preferences_applicable_interface_init(AgsApplicableInterface *applicable)
119 {
120   applicable->set_update = ags_server_preferences_set_update;
121   applicable->apply = ags_server_preferences_apply;
122   applicable->reset = ags_server_preferences_reset;
123 }
124 
125 void
ags_server_preferences_init(AgsServerPreferences * server_preferences)126 ags_server_preferences_init(AgsServerPreferences *server_preferences)
127 {
128   GtkGrid *grid;
129   GtkLabel *label;
130 
131   gtk_orientable_set_orientation(GTK_ORIENTABLE(server_preferences),
132 				 GTK_ORIENTATION_VERTICAL);
133 
134   grid = (GtkGrid *) gtk_grid_new();
135   gtk_box_pack_start(GTK_BOX(server_preferences),
136 		     GTK_WIDGET(grid),
137 		     FALSE, FALSE,
138 		     2);
139 
140   server_preferences->start = (GtkCheckButton *) gtk_check_button_new_with_label(i18n("start server"));
141 
142   gtk_widget_set_valign(server_preferences->start,
143 			GTK_ALIGN_FILL);
144   gtk_widget_set_halign(server_preferences->start,
145 			GTK_ALIGN_FILL);
146 
147   gtk_grid_attach(grid,
148 		   GTK_WIDGET(server_preferences->start),
149 		   0, 0,
150 		   2, 1);
151 
152   gtk_widget_set_sensitive((GtkWidget *) server_preferences->start,
153 			   FALSE);
154 
155   /* address */
156   label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL,
157 				    "label", i18n("address"),
158 				    "xalign", 0.0,
159 				    NULL);
160 
161   gtk_widget_set_valign(label,
162 			GTK_ALIGN_FILL);
163   gtk_widget_set_halign(label,
164 			GTK_ALIGN_FILL);
165 
166   gtk_grid_attach(grid,
167 		  GTK_WIDGET(label),
168 		  0, 1,
169 		  1, 1);
170 
171   server_preferences->address = (GtkEntry *) gtk_entry_new();
172   gtk_grid_attach(grid,
173 		   GTK_WIDGET(server_preferences->address),
174 		   1, 1,
175 		   1, 1);
176   gtk_widget_set_sensitive((GtkWidget *) server_preferences->address,
177 			   FALSE);
178 
179   /* port */
180   label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL,
181 				    "label", i18n("port"),
182 				    "xalign", 0.0,
183 				    NULL);
184 
185   gtk_widget_set_valign(label,
186 			GTK_ALIGN_FILL);
187   gtk_widget_set_halign(label,
188 			GTK_ALIGN_FILL);
189 
190   gtk_grid_attach(grid,
191 		  GTK_WIDGET(label),
192 		  0, 2,
193 		  1, 1);
194 
195   server_preferences->port = (GtkEntry *) gtk_entry_new();
196 
197   gtk_widget_set_valign(server_preferences->port,
198 			GTK_ALIGN_FILL);
199   gtk_widget_set_halign(server_preferences->port,
200 			GTK_ALIGN_FILL);
201 
202   gtk_grid_attach(grid,
203 		   GTK_WIDGET(server_preferences->port),
204 		   1, 2,
205 		   1, 1);
206 
207   gtk_widget_set_sensitive((GtkWidget *) server_preferences->port,
208 			   FALSE);
209 
210   /* username */
211   label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL,
212 				    "label", i18n("username"),
213 				    "xalign", 0.0,
214 				    NULL);
215 
216   gtk_widget_set_valign(label,
217 			GTK_ALIGN_FILL);
218   gtk_widget_set_halign(label,
219 			GTK_ALIGN_FILL);
220 
221   gtk_grid_attach(grid,
222 		  GTK_WIDGET(label),
223 		  0, 3,
224 		  1, 1);
225 
226   server_preferences->username = (GtkEntry *) gtk_entry_new();
227 
228   gtk_widget_set_valign(server_preferences->username,
229 			GTK_ALIGN_FILL);
230   gtk_widget_set_halign(server_preferences->username,
231 			GTK_ALIGN_FILL);
232 
233   gtk_grid_attach(grid,
234 		   GTK_WIDGET(server_preferences->username),
235 		   1, 3,
236 		   1, 1);
237 
238   gtk_widget_set_sensitive((GtkWidget *) server_preferences->username,
239 			   FALSE);
240 
241   /* password */
242   label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL,
243 				    "label", i18n("password"),
244 				    "xalign", 0.0,
245 				    NULL);
246 
247   gtk_widget_set_valign(label,
248 			GTK_ALIGN_FILL);
249   gtk_widget_set_halign(label,
250 			GTK_ALIGN_FILL);
251 
252   gtk_grid_attach(grid,
253 		  GTK_WIDGET(label),
254 		  0, 4,
255 		  1, 1);
256 
257   server_preferences->password = (GtkEntry *) gtk_entry_new();
258 
259   gtk_widget_set_valign(server_preferences->password,
260 			GTK_ALIGN_FILL);
261   gtk_widget_set_halign(server_preferences->password,
262 			GTK_ALIGN_FILL);
263 
264   gtk_entry_set_visibility(server_preferences->password,
265 			   FALSE);
266 
267   gtk_grid_attach(grid,
268 		  GTK_WIDGET(server_preferences->password),
269 		  1, 4,
270 		  1, 1);
271 
272   gtk_widget_set_sensitive((GtkWidget *) server_preferences->password,
273 			   FALSE);
274 }
275 
276 void
ags_server_preferences_connect(AgsConnectable * connectable)277 ags_server_preferences_connect(AgsConnectable *connectable)
278 {
279   //TODO:JK: implement me
280 }
281 
282 void
ags_server_preferences_disconnect(AgsConnectable * connectable)283 ags_server_preferences_disconnect(AgsConnectable *connectable)
284 {
285   //TODO:JK: implement me
286 }
287 
288 
289 void
ags_server_preferences_set_update(AgsApplicable * applicable,gboolean update)290 ags_server_preferences_set_update(AgsApplicable *applicable, gboolean update)
291 {
292   //TODO:JK: implement me
293 }
294 
295 void
ags_server_preferences_apply(AgsApplicable * applicable)296 ags_server_preferences_apply(AgsApplicable *applicable)
297 {
298   //TODO:JK: implement me
299 }
300 
301 void
ags_server_preferences_reset(AgsApplicable * applicable)302 ags_server_preferences_reset(AgsApplicable *applicable)
303 {
304   //TODO:JK: implement me
305 }
306 
307 /**
308  * ags_server_preferences_new:
309  *
310  * Create a new instance of #AgsServerPreferences
311  *
312  * Returns: the new #AgsServerPreferences
313  *
314  * Since: 3.0.0
315  */
316 AgsServerPreferences*
ags_server_preferences_new()317 ags_server_preferences_new()
318 {
319   AgsServerPreferences *server_preferences;
320 
321   server_preferences = (AgsServerPreferences *) g_object_new(AGS_TYPE_SERVER_PREFERENCES,
322 							     NULL);
323 
324   return(server_preferences);
325 }
326