+++ /dev/null
-/*
-
- X G N O K I I
-
- A Linux/Unix GUI for Nokia mobile phones.
-
- Released under the terms of the GNU GPL, see file COPYING for more details.
-
-*/
-
-#include <stdio.h>
-#include <gtk/gtk.h>
-#include "misc.h"
-#include "xgnokii_common.h"
-#include "xgnokii.h"
-#include "xgnokii_lowlevel.h"
-#include "xgnokii_dtmf.h"
-#include "xpm/Send.xpm"
-#include "xpm/Delete.xpm"
-
-#define MAX_DTMF_LENGTH 50
-
-static GtkWidget *GUI_DTMFWindow;
-static GtkWidget *displayEntry;
-static ErrorDialog errorDialog = {NULL, NULL};
-static gchar *saveFileName;
-
-
-static inline void Help1 (GtkWidget *w, gpointer data)
-{
- gchar *indx = g_strdup_printf ("/%s/gnokii/xgnokii/dtmf/index.htm", xgnokiiConfig.locale);
- Help (w, indx);
- g_free (indx);
-}
-
-
-static inline void ButtonCB (GtkWidget *widget,
- gpointer data )
-{
- gchar buf[2] = " ";
-
- *buf = GPOINTER_TO_INT (data);
- gtk_entry_append_text (GTK_ENTRY (displayEntry), buf);
-}
-
-
-static inline void ClearCB (GtkWidget *widget,
- gpointer data )
-{
- gtk_entry_set_text (GTK_ENTRY (displayEntry), "");
-}
-
-
-static inline void SendCB (GtkWidget *widget,
- gpointer data )
-{
- PhoneEvent *e;
- gchar *buf = g_strdup (gtk_entry_get_text (GTK_ENTRY (displayEntry)));
-
- if (*buf == '\0')
- {
- g_free (buf);
- return;
- }
-
- e = g_malloc (sizeof (PhoneEvent));
- e->event = Event_SendDTMF;
- e->data = buf;
- GUI_InsertEvent (e);
-}
-
-
-static void OkLoadDialog (GtkWidget *w, GtkFileSelection *fs)
-{
- FILE *f;
- gchar *fileName;
- gchar line[MAX_DTMF_LENGTH + 1];
- gchar buf[80];
-
- fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
- gtk_widget_hide (GTK_WIDGET (fs));
-
- if ((f = fopen (fileName, "r")) == NULL)
- {
- g_snprintf (buf, 80, _("Can't open file %s for reading!"), fileName);
- gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
- gtk_widget_show (errorDialog.dialog);
- return;
- }
-
- fgets (line, MAX_DTMF_LENGTH + 1, f);
- gtk_entry_set_text (GTK_ENTRY (displayEntry), line);
- fclose (f);
-}
-
-
-static void LoadFileDialog ()
-{
- static GtkWidget *fileDialog = NULL;
-
- if (fileDialog == NULL)
- {
- fileDialog = gtk_file_selection_new (_("Load"));
- gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
- GTK_SIGNAL_FUNC (DeleteEvent), NULL);
- gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
- "clicked", GTK_SIGNAL_FUNC (OkLoadDialog), (gpointer) fileDialog);
- gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
- "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
- }
-
- gtk_widget_show (fileDialog);
-}
-
-
-static void SaveDTMF ()
-{
- FILE *f;
- gchar buf[80];
-
- if ((f = fopen (saveFileName, "w")) == NULL)
- {
- g_snprintf (buf, 80, _("Can't open file %s for writing!"), saveFileName);
- gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
- gtk_widget_show (errorDialog.dialog);
- return;
- }
-
- fputs (gtk_entry_get_text (GTK_ENTRY (displayEntry)), f);
- fclose (f);
-}
-
-
-static inline void YesSaveDialog (GtkWidget *w, gpointer data)
-{
- gtk_widget_hide (GTK_WIDGET (data));
- SaveDTMF();
-}
-
-
-static void OkSaveDialog (GtkWidget *w, GtkFileSelection *fs)
-{
- FILE *f;
- static YesNoDialog dialog = { NULL, NULL};
- gchar err[80];
-
- saveFileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
- gtk_widget_hide (GTK_WIDGET (fs));
-
- if ((f = fopen (saveFileName, "r")) != NULL)
- {
- fclose (f);
- if (dialog.dialog == NULL)
- {
- CreateYesNoDialog (&dialog, YesSaveDialog, CancelDialog, GUI_DTMFWindow);
- gtk_window_set_title (GTK_WINDOW (dialog.dialog), _("Overwrite file?"));
- g_snprintf ( err, 80, _("File %s already exist.\nOverwrite?"), saveFileName);
- gtk_label_set_text (GTK_LABEL(dialog.text), err);
- }
- gtk_widget_show (dialog.dialog);
- }
- else
- SaveDTMF ();
-}
-
-
-static void SaveFileDialog ()
-{
- static GtkWidget *fileDialog = NULL;
-
- if (fileDialog == NULL)
- {
- fileDialog = gtk_file_selection_new (_("Save"));
- gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
- GTK_SIGNAL_FUNC (DeleteEvent), NULL);
- gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
- "clicked", GTK_SIGNAL_FUNC (OkSaveDialog), (gpointer) fileDialog);
- gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
- "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
- }
-
- gtk_widget_show (fileDialog);
-}
-
-
-static inline void CloseDTMF (GtkWidget *w, gpointer data)
-{
- gtk_widget_hide (GUI_DTMFWindow);
-}
-
-
-inline void GUI_ShowDTMF ()
-{
- gtk_widget_show (GUI_DTMFWindow);
-}
-
-
-static GtkItemFactoryEntry menu_items[] = {
- { NULL, NULL, NULL, 0, "<Branch>"},
- { NULL, "<control>O", LoadFileDialog, 0, NULL},
- { NULL, "<control>S", SaveFileDialog, 0, NULL},
- { NULL, NULL, NULL, 0, "<Separator>"},
- { NULL, "<control>W", CloseDTMF, 0, NULL},
- { NULL, NULL, NULL, 0, "<LastBranch>"},
- { NULL, NULL, Help1, 0, NULL},
- { NULL, NULL, GUI_ShowAbout, 0, NULL},
-};
-
-
-static void InitMainMenu (void)
-{
- menu_items[0].path = g_strdup (_("/_File"));
- menu_items[1].path = g_strdup (_("/File/_Open"));
- menu_items[2].path = g_strdup (_("/File/_Save"));
- menu_items[3].path = g_strdup (_("/File/Sep1"));
- menu_items[4].path = g_strdup (_("/File/_Close"));
- menu_items[5].path = g_strdup (_("/_Help"));
- menu_items[6].path = g_strdup (_("/Help/_Help"));
- menu_items[7].path = g_strdup (_("/Help/_About"));
-}
-
-
-void GUI_CreateDTMFWindow ()
-{
- int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
- GtkItemFactory *item_factory;
- GtkAccelGroup *accel_group;
- GtkWidget *menubar;
- GtkWidget *main_vbox;
- GtkWidget *table;
- GtkWidget *frame;
- GtkWidget *button;
- GtkWidget *pixmap;
- gchar buf[2];
- gint i,j;
-
-
- InitMainMenu ();
- GUI_DTMFWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title (GTK_WINDOW (GUI_DTMFWindow), _("Dial Tone"));
- //gtk_widget_set_usize (GTK_WIDGET (GUI_DTMFWindow), 436, 220);
- gtk_signal_connect (GTK_OBJECT (GUI_DTMFWindow), "delete_event",
- GTK_SIGNAL_FUNC (DeleteEvent), NULL);
- gtk_widget_realize (GUI_DTMFWindow);
-
- accel_group = gtk_accel_group_new ();
- item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
- accel_group);
-
- gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
-
- gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_DTMFWindow));
-
- /* Finally, return the actual menu bar created by the item factory. */
- menubar = gtk_item_factory_get_widget (item_factory, "<main>");
-
- main_vbox = gtk_vbox_new (FALSE, 1);
- gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
- gtk_container_add (GTK_CONTAINER (GUI_DTMFWindow), main_vbox);
- gtk_widget_show (main_vbox);
-
- gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
- gtk_widget_show (menubar);
-
- table = gtk_table_new (8, 3, TRUE);
-
- frame = gtk_frame_new (NULL);
- gtk_container_add (GTK_CONTAINER (frame), table);
- gtk_container_border_width (GTK_CONTAINER (frame), 10);
- gtk_container_border_width (GTK_CONTAINER (table), 3);
- gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
- gtk_widget_show (frame);
-
- gtk_table_set_row_spacings (GTK_TABLE (table), 2);
- gtk_table_set_col_spacings (GTK_TABLE (table), 2);
-
- displayEntry = gtk_entry_new_with_max_length (MAX_DTMF_LENGTH);
- gtk_table_attach_defaults (GTK_TABLE (table), displayEntry, 0, 3, 0, 1);
- gtk_widget_set_usize (displayEntry, 110, 22);
-
- for (i = 0; i < 3; i++)
- for (j = 0; j < 3; j++)
- {
- g_snprintf (buf, 2, "%d", j * 3 + i + 1);
- button = gtk_button_new_with_label (buf);
- gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (ButtonCB), (gpointer) ((gint) *buf));
- gtk_table_attach_defaults (GTK_TABLE (table), button, i, i + 1, j + 2, j + 3);
- }
-
- button = gtk_button_new_with_label ("*");
- gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (ButtonCB), (gpointer) '*');
- gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 5, 6);
-
- button = gtk_button_new_with_label ("0");
- gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (ButtonCB), (gpointer) '0');
- gtk_table_attach_defaults (GTK_TABLE (table), button, 1, 2, 5, 6);
-
- button = gtk_button_new_with_label ("#");
- gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (ButtonCB), (gpointer) '#');
- gtk_table_attach_defaults (GTK_TABLE (table), button, 2, 3, 5, 6);
-
-
- button = gtk_button_new_with_label ("Pause");
- gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (ButtonCB), (gpointer) 'p');
- gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 1, 6, 7);
-
- button = gtk_button_new_with_label ("Wait");
- gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (ButtonCB), (gpointer) 'w');
- gtk_table_attach_defaults (GTK_TABLE (table), button, 1, 2, 6, 7);
-
- button = gtk_button_new ();
- pixmap = NewPixmap(Send_xpm, GUI_DTMFWindow->window,
- &GUI_DTMFWindow->style->bg[GTK_STATE_NORMAL]);
- gtk_container_add (GTK_CONTAINER (button), pixmap);
- gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (SendCB), (gpointer) NULL);
- gtk_table_attach_defaults (GTK_TABLE (table), button, 0, 3, 7, 8);
-
- button = gtk_button_new ();
- pixmap = NewPixmap(Delete_xpm, GUI_DTMFWindow->window,
- &GUI_DTMFWindow->style->bg[GTK_STATE_NORMAL]);
- gtk_container_add (GTK_CONTAINER (button), pixmap);
- gtk_signal_connect (GTK_OBJECT (button), "clicked",
- GTK_SIGNAL_FUNC (ClearCB), (gpointer) NULL);
- gtk_table_attach_defaults (GTK_TABLE (table), button, 2, 3, 6, 7);
-
- gtk_widget_show_all (table);
-
- CreateErrorDialog (&errorDialog, GUI_DTMFWindow);
-}