5 A Linux/Unix GUI for Nokia mobile phones.
6 Copyright (C) 1999 Pavel Janík ml., Hugh Blemings
7 & Ján Derfiòák <ja@mail.upjs.sk>.
9 Released under the terms of the GNU GPL, see file COPYING for more details.
11 Last modification: Sun Apr 30 2000
12 Modified by Jan Derfinak
19 #include "xgnokii_common.h"
21 #include "xgnokii_lowlevel.h"
22 #include "xgnokii_dtmf.h"
23 #include "xpm/Send.xpm"
24 #include "xpm/Delete.xpm"
26 #define MAX_DTMF_LENGTH 50
28 static GtkWidget *GUI_DTMFWindow;
29 static GtkWidget *displayEntry;
30 static ErrorDialog errorDialog = {NULL, NULL};
31 static gchar *saveFileName;
34 static inline void Help1 (GtkWidget *w, gpointer data)
36 gchar *indx = g_strdup_printf ("/help/%s/windows/dtmf/index.html", xgnokiiConfig.locale);
42 static inline void ButtonCB (GtkWidget *widget,
47 *buf = GPOINTER_TO_INT (data);
48 gtk_entry_append_text (GTK_ENTRY (displayEntry), buf);
52 static inline void ClearCB (GtkWidget *widget,
55 gtk_entry_set_text (GTK_ENTRY (displayEntry), "");
59 static inline void SendCB (GtkWidget *widget,
63 gchar *buf = g_strdup (gtk_entry_get_text (GTK_ENTRY (displayEntry)));
71 e = g_malloc (sizeof (PhoneEvent));
72 e->event = Event_SendDTMF;
78 static void OkLoadDialog (GtkWidget *w, GtkFileSelection *fs)
82 gchar line[MAX_DTMF_LENGTH + 1];
85 fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
86 gtk_widget_hide (GTK_WIDGET (fs));
88 if ((f = fopen (fileName, "r")) == NULL)
90 g_snprintf (buf, 80, _("Can't open file %s for reading!"), fileName);
91 gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
92 gtk_widget_show (errorDialog.dialog);
96 fgets (line, MAX_DTMF_LENGTH + 1, f);
97 gtk_entry_set_text (GTK_ENTRY (displayEntry), line);
102 static void LoadFileDialog ()
104 static GtkWidget *fileDialog = NULL;
106 if (fileDialog == NULL)
108 fileDialog = gtk_file_selection_new (_("Load"));
109 gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
110 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
111 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
112 "clicked", GTK_SIGNAL_FUNC (OkLoadDialog), (gpointer) fileDialog);
113 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
114 "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
117 gtk_widget_show (fileDialog);
121 static void SaveDTMF ()
126 if ((f = fopen (saveFileName, "w")) == NULL)
128 g_snprintf (buf, 80, _("Can't open file %s for writing!"), saveFileName);
129 gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
130 gtk_widget_show (errorDialog.dialog);
134 fputs (gtk_entry_get_text (GTK_ENTRY (displayEntry)), f);
139 static inline void YesSaveDialog (GtkWidget *w, gpointer data)
141 gtk_widget_hide (GTK_WIDGET (data));
146 static void OkSaveDialog (GtkWidget *w, GtkFileSelection *fs)
149 static YesNoDialog dialog = { NULL, NULL};
152 saveFileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
153 gtk_widget_hide (GTK_WIDGET (fs));
155 if ((f = fopen (saveFileName, "r")) != NULL)
158 if (dialog.dialog == NULL)
160 CreateYesNoDialog (&dialog, YesSaveDialog, CancelDialog, GUI_DTMFWindow);
161 gtk_window_set_title (GTK_WINDOW (dialog.dialog), _("Overwrite file?"));
162 g_snprintf ( err, 80, _("File %s already exist.\nOverwrite?"), saveFileName);
163 gtk_label_set_text (GTK_LABEL(dialog.text), err);
165 gtk_widget_show (dialog.dialog);
172 static void SaveFileDialog ()
174 static GtkWidget *fileDialog = NULL;
176 if (fileDialog == NULL)
178 fileDialog = gtk_file_selection_new (_("Save"));
179 gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
180 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
181 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
182 "clicked", GTK_SIGNAL_FUNC (OkSaveDialog), (gpointer) fileDialog);
183 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
184 "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
187 gtk_widget_show (fileDialog);
191 static inline void CloseDTMF (GtkWidget *w, gpointer data)
193 gtk_widget_hide (GUI_DTMFWindow);
197 inline void GUI_ShowDTMF ()
199 gtk_widget_show (GUI_DTMFWindow);
203 static GtkItemFactoryEntry menu_items[] = {
204 { NULL, NULL, NULL, 0, "<Branch>"},
205 { NULL, "<control>O", LoadFileDialog, 0, NULL},
206 { NULL, "<control>S", SaveFileDialog, 0, NULL},
207 { NULL, NULL, NULL, 0, "<Separator>"},
208 { NULL, "<control>W", CloseDTMF, 0, NULL},
209 { NULL, NULL, NULL, 0, "<LastBranch>"},
210 { NULL, NULL, Help1, 0, NULL},
211 { NULL, NULL, GUI_ShowAbout, 0, NULL},
215 static void InitMainMenu (void)
217 menu_items[0].path = g_strdup (_("/_File"));
218 menu_items[1].path = g_strdup (_("/File/_Open"));
219 menu_items[2].path = g_strdup (_("/File/_Save"));
220 menu_items[3].path = g_strdup (_("/File/Sep1"));
221 menu_items[4].path = g_strdup (_("/File/_Close"));
222 menu_items[5].path = g_strdup (_("/_Help"));
223 menu_items[6].path = g_strdup (_("/Help/_Help"));
224 menu_items[7].path = g_strdup (_("/Help/_About"));
228 void GUI_CreateDTMFWindow ()
230 int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
231 GtkItemFactory *item_factory;
232 GtkAccelGroup *accel_group;
234 GtkWidget *main_vbox;
244 GUI_DTMFWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
245 gtk_window_set_wmclass (GTK_WINDOW (GUI_DTMFWindow), "DTMFWindow", "Xgnokii");
246 gtk_window_set_title (GTK_WINDOW (GUI_DTMFWindow), _("Dial Tone"));
247 //gtk_widget_set_usize (GTK_WIDGET (GUI_DTMFWindow), 436, 220);
248 gtk_signal_connect (GTK_OBJECT (GUI_DTMFWindow), "delete_event",
249 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
250 gtk_widget_realize (GUI_DTMFWindow);
252 accel_group = gtk_accel_group_new ();
253 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
256 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
258 gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_DTMFWindow));
260 /* Finally, return the actual menu bar created by the item factory. */
261 menubar = gtk_item_factory_get_widget (item_factory, "<main>");
263 main_vbox = gtk_vbox_new (FALSE, 1);
264 gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
265 gtk_container_add (GTK_CONTAINER (GUI_DTMFWindow), main_vbox);
266 gtk_widget_show (main_vbox);
268 gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
269 gtk_widget_show (menubar);
271 table = gtk_table_new (8, 3, TRUE);
273 frame = gtk_frame_new (NULL);
274 gtk_container_add (GTK_CONTAINER (frame), table);
275 gtk_container_border_width (GTK_CONTAINER (frame), 10);
276 gtk_container_border_width (GTK_CONTAINER (table), 3);
277 gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
278 gtk_widget_show (frame);
280 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
281 gtk_table_set_col_spacings (GTK_TABLE (table), 2);
283 displayEntry = gtk_entry_new_with_max_length (MAX_DTMF_LENGTH);
284 gtk_table_attach_defaults (GTK_TABLE (table), displayEntry, 0, 3, 0, 1);
285 gtk_widget_set_usize (displayEntry, 110, 22);
287 for (i = 0; i < 3; i++)
288 for (j = 0; j < 3; j++)
290 g_snprintf (buf, 2, "%d", j * 3 + i + 1);
291 button = gtk_button_new_with_label (buf);
292 gtk_signal_connect (GTK_OBJECT (button), "clicked",
293 GTK_SIGNAL_FUNC (ButtonCB), (gpointer) ((gint) *buf));
294 gtk_table_attach_defaults (GTK_TABLE (table), button, i, i + 1, j + 2, j + 3);
297 button = gtk_button_new_with_label ("*");
298 gtk_signal_connect (GTK_OBJECT (button), "clicked",
299 GTK_SIGNAL_FUNC (ButtonCB), (gpointer) '*');
300 gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 5, 6);
302 button = gtk_button_new_with_label ("0");
303 gtk_signal_connect (GTK_OBJECT (button), "clicked",
304 GTK_SIGNAL_FUNC (ButtonCB), (gpointer) '0');
305 gtk_table_attach_defaults (GTK_TABLE (table), button, 1, 2, 5, 6);
307 button = gtk_button_new_with_label ("#");
308 gtk_signal_connect (GTK_OBJECT (button), "clicked",
309 GTK_SIGNAL_FUNC (ButtonCB), (gpointer) '#');
310 gtk_table_attach_defaults (GTK_TABLE (table), button, 2, 3, 5, 6);
313 button = gtk_button_new_with_label ("Pause");
314 gtk_signal_connect (GTK_OBJECT (button), "clicked",
315 GTK_SIGNAL_FUNC (ButtonCB), (gpointer) 'p');
316 gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 6, 7);
318 button = gtk_button_new_with_label ("Wait");
319 gtk_signal_connect (GTK_OBJECT (button), "clicked",
320 GTK_SIGNAL_FUNC (ButtonCB), (gpointer) 'w');
321 gtk_table_attach_defaults (GTK_TABLE (table), button, 1, 2, 6, 7);
323 button = gtk_button_new ();
324 pixmap = NewPixmap(Send_xpm, GUI_DTMFWindow->window,
325 &GUI_DTMFWindow->style->bg[GTK_STATE_NORMAL]);
326 gtk_container_add (GTK_CONTAINER (button), pixmap);
327 gtk_signal_connect (GTK_OBJECT (button), "clicked",
328 GTK_SIGNAL_FUNC (SendCB), (gpointer) NULL);
329 gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 3, 7, 8);
331 button = gtk_button_new ();
332 pixmap = NewPixmap(Delete_xpm, GUI_DTMFWindow->window,
333 &GUI_DTMFWindow->style->bg[GTK_STATE_NORMAL]);
334 gtk_container_add (GTK_CONTAINER (button), pixmap);
335 gtk_signal_connect (GTK_OBJECT (button), "clicked",
336 GTK_SIGNAL_FUNC (ClearCB), (gpointer) NULL);
337 gtk_table_attach_defaults (GTK_TABLE (table), button, 2, 3, 6, 7);
339 gtk_widget_show_all (table);
341 CreateErrorDialog (&errorDialog, GUI_DTMFWindow);