5 A Linux/Unix GUI for Nokia mobile phones.
7 Released under the terms of the GNU GPL, see file COPYING for more details.
14 #include "xgnokii_common.h"
16 #include "xgnokii_lowlevel.h"
17 #include "xgnokii_dtmf.h"
18 #include "xpm/Send.xpm"
19 #include "xpm/Delete.xpm"
21 #define MAX_DTMF_LENGTH 50
23 static GtkWidget *GUI_DTMFWindow;
24 static GtkWidget *displayEntry;
25 static ErrorDialog errorDialog = {NULL, NULL};
26 static gchar *saveFileName;
29 static inline void Help1 (GtkWidget *w, gpointer data)
31 gchar *indx = g_strdup_printf ("/%s/gnokii/xgnokii/dtmf/index.htm", xgnokiiConfig.locale);
37 static inline void ButtonCB (GtkWidget *widget,
42 *buf = GPOINTER_TO_INT (data);
43 gtk_entry_append_text (GTK_ENTRY (displayEntry), buf);
47 static inline void ClearCB (GtkWidget *widget,
50 gtk_entry_set_text (GTK_ENTRY (displayEntry), "");
54 static inline void SendCB (GtkWidget *widget,
58 gchar *buf = g_strdup (gtk_entry_get_text (GTK_ENTRY (displayEntry)));
66 e = g_malloc (sizeof (PhoneEvent));
67 e->event = Event_SendDTMF;
73 static void OkLoadDialog (GtkWidget *w, GtkFileSelection *fs)
77 gchar line[MAX_DTMF_LENGTH + 1];
80 fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
81 gtk_widget_hide (GTK_WIDGET (fs));
83 if ((f = fopen (fileName, "r")) == NULL)
85 g_snprintf (buf, 80, _("Can't open file %s for reading!"), fileName);
86 gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
87 gtk_widget_show (errorDialog.dialog);
91 fgets (line, MAX_DTMF_LENGTH + 1, f);
92 gtk_entry_set_text (GTK_ENTRY (displayEntry), line);
97 static void LoadFileDialog ()
99 static GtkWidget *fileDialog = NULL;
101 if (fileDialog == NULL)
103 fileDialog = gtk_file_selection_new (_("Load"));
104 gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
105 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
106 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
107 "clicked", GTK_SIGNAL_FUNC (OkLoadDialog), (gpointer) fileDialog);
108 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
109 "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
112 gtk_widget_show (fileDialog);
116 static void SaveDTMF ()
121 if ((f = fopen (saveFileName, "w")) == NULL)
123 g_snprintf (buf, 80, _("Can't open file %s for writing!"), saveFileName);
124 gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
125 gtk_widget_show (errorDialog.dialog);
129 fputs (gtk_entry_get_text (GTK_ENTRY (displayEntry)), f);
134 static inline void YesSaveDialog (GtkWidget *w, gpointer data)
136 gtk_widget_hide (GTK_WIDGET (data));
141 static void OkSaveDialog (GtkWidget *w, GtkFileSelection *fs)
144 static YesNoDialog dialog = { NULL, NULL};
147 saveFileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
148 gtk_widget_hide (GTK_WIDGET (fs));
150 if ((f = fopen (saveFileName, "r")) != NULL)
153 if (dialog.dialog == NULL)
155 CreateYesNoDialog (&dialog, YesSaveDialog, CancelDialog, GUI_DTMFWindow);
156 gtk_window_set_title (GTK_WINDOW (dialog.dialog), _("Overwrite file?"));
157 g_snprintf ( err, 80, _("File %s already exist.\nOverwrite?"), saveFileName);
158 gtk_label_set_text (GTK_LABEL(dialog.text), err);
160 gtk_widget_show (dialog.dialog);
167 static void SaveFileDialog ()
169 static GtkWidget *fileDialog = NULL;
171 if (fileDialog == NULL)
173 fileDialog = gtk_file_selection_new (_("Save"));
174 gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
175 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
176 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
177 "clicked", GTK_SIGNAL_FUNC (OkSaveDialog), (gpointer) fileDialog);
178 gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
179 "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
182 gtk_widget_show (fileDialog);
186 static inline void CloseDTMF (GtkWidget *w, gpointer data)
188 gtk_widget_hide (GUI_DTMFWindow);
192 inline void GUI_ShowDTMF ()
194 gtk_widget_show (GUI_DTMFWindow);
198 static GtkItemFactoryEntry menu_items[] = {
199 { NULL, NULL, NULL, 0, "<Branch>"},
200 { NULL, "<control>O", LoadFileDialog, 0, NULL},
201 { NULL, "<control>S", SaveFileDialog, 0, NULL},
202 { NULL, NULL, NULL, 0, "<Separator>"},
203 { NULL, "<control>W", CloseDTMF, 0, NULL},
204 { NULL, NULL, NULL, 0, "<LastBranch>"},
205 { NULL, NULL, Help1, 0, NULL},
206 { NULL, NULL, GUI_ShowAbout, 0, NULL},
210 static void InitMainMenu (void)
212 menu_items[0].path = g_strdup (_("/_File"));
213 menu_items[1].path = g_strdup (_("/File/_Open"));
214 menu_items[2].path = g_strdup (_("/File/_Save"));
215 menu_items[3].path = g_strdup (_("/File/Sep1"));
216 menu_items[4].path = g_strdup (_("/File/_Close"));
217 menu_items[5].path = g_strdup (_("/_Help"));
218 menu_items[6].path = g_strdup (_("/Help/_Help"));
219 menu_items[7].path = g_strdup (_("/Help/_About"));
223 void GUI_CreateDTMFWindow ()
225 int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
226 GtkItemFactory *item_factory;
227 GtkAccelGroup *accel_group;
229 GtkWidget *main_vbox;
239 GUI_DTMFWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
240 gtk_window_set_title (GTK_WINDOW (GUI_DTMFWindow), _("Dial Tone"));
241 //gtk_widget_set_usize (GTK_WIDGET (GUI_DTMFWindow), 436, 220);
242 gtk_signal_connect (GTK_OBJECT (GUI_DTMFWindow), "delete_event",
243 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
244 gtk_widget_realize (GUI_DTMFWindow);
246 accel_group = gtk_accel_group_new ();
247 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
250 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
252 gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_DTMFWindow));
254 /* Finally, return the actual menu bar created by the item factory. */
255 menubar = gtk_item_factory_get_widget (item_factory, "<main>");
257 main_vbox = gtk_vbox_new (FALSE, 1);
258 gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
259 gtk_container_add (GTK_CONTAINER (GUI_DTMFWindow), main_vbox);
260 gtk_widget_show (main_vbox);
262 gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
263 gtk_widget_show (menubar);
265 table = gtk_table_new (8, 3, TRUE);
267 frame = gtk_frame_new (NULL);
268 gtk_container_add (GTK_CONTAINER (frame), table);
269 gtk_container_border_width (GTK_CONTAINER (frame), 10);
270 gtk_container_border_width (GTK_CONTAINER (table), 3);
271 gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
272 gtk_widget_show (frame);
274 gtk_table_set_row_spacings (GTK_TABLE (table), 2);
275 gtk_table_set_col_spacings (GTK_TABLE (table), 2);
277 displayEntry = gtk_entry_new_with_max_length (MAX_DTMF_LENGTH);
278 gtk_table_attach_defaults (GTK_TABLE (table), displayEntry, 0, 3, 0, 1);
279 gtk_widget_set_usize (displayEntry, 110, 22);
281 for (i = 0; i < 3; i++)
282 for (j = 0; j < 3; j++)
284 g_snprintf (buf, 2, "%d", j * 3 + i + 1);
285 button = gtk_button_new_with_label (buf);
286 gtk_signal_connect (GTK_OBJECT (button), "clicked",
287 GTK_SIGNAL_FUNC (ButtonCB), (gpointer) ((gint) *buf));
288 gtk_table_attach_defaults (GTK_TABLE (table), button, i, i + 1, j + 2, j + 3);
291 button = gtk_button_new_with_label ("*");
292 gtk_signal_connect (GTK_OBJECT (button), "clicked",
293 GTK_SIGNAL_FUNC (ButtonCB), (gpointer) '*');
294 gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 5, 6);
296 button = gtk_button_new_with_label ("0");
297 gtk_signal_connect (GTK_OBJECT (button), "clicked",
298 GTK_SIGNAL_FUNC (ButtonCB), (gpointer) '0');
299 gtk_table_attach_defaults (GTK_TABLE (table), button, 1, 2, 5, 6);
301 button = gtk_button_new_with_label ("#");
302 gtk_signal_connect (GTK_OBJECT (button), "clicked",
303 GTK_SIGNAL_FUNC (ButtonCB), (gpointer) '#');
304 gtk_table_attach_defaults (GTK_TABLE (table), button, 2, 3, 5, 6);
307 button = gtk_button_new_with_label ("Pause");
308 gtk_signal_connect (GTK_OBJECT (button), "clicked",
309 GTK_SIGNAL_FUNC (ButtonCB), (gpointer) 'p');
310 gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 6, 7);
312 button = gtk_button_new_with_label ("Wait");
313 gtk_signal_connect (GTK_OBJECT (button), "clicked",
314 GTK_SIGNAL_FUNC (ButtonCB), (gpointer) 'w');
315 gtk_table_attach_defaults (GTK_TABLE (table), button, 1, 2, 6, 7);
317 button = gtk_button_new ();
318 pixmap = NewPixmap(Send_xpm, GUI_DTMFWindow->window,
319 &GUI_DTMFWindow->style->bg[GTK_STATE_NORMAL]);
320 gtk_container_add (GTK_CONTAINER (button), pixmap);
321 gtk_signal_connect (GTK_OBJECT (button), "clicked",
322 GTK_SIGNAL_FUNC (SendCB), (gpointer) NULL);
323 gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 3, 7, 8);
325 button = gtk_button_new ();
326 pixmap = NewPixmap(Delete_xpm, GUI_DTMFWindow->window,
327 &GUI_DTMFWindow->style->bg[GTK_STATE_NORMAL]);
328 gtk_container_add (GTK_CONTAINER (button), pixmap);
329 gtk_signal_connect (GTK_OBJECT (button), "clicked",
330 GTK_SIGNAL_FUNC (ClearCB), (gpointer) NULL);
331 gtk_table_attach_defaults (GTK_TABLE (table), button, 2, 3, 6, 7);
333 gtk_widget_show_all (table);
335 CreateErrorDialog (&errorDialog, GUI_DTMFWindow);