From 8585341b48b72f6da5584f95637e47a108bc04cb Mon Sep 17 00:00:00 2001 From: jait Date: Thu, 14 Sep 2006 13:48:15 +0000 Subject: [PATCH] added format info into UI git-svn-id: svn+ssh://garage/svnroot/maemo-recorder/trunk@14 2441f5eb-5316-0410-9386-a49b32a51a4a --- maemo_recorder.desktop | 2 +- src/maemo-recorder-au.h | 4 ++ src/maemo-recorder-file.h | 4 ++ src/maemo-recorder-ui.c | 170 ++++++++++++++++++++++++++++++--------------- src/maemo-recorder.h | 7 +- src/settings.h | 4 ++ 6 files changed, 133 insertions(+), 58 deletions(-) diff --git a/maemo_recorder.desktop b/maemo_recorder.desktop index 7714a75..d5fb059 100644 --- a/maemo_recorder.desktop +++ b/maemo_recorder.desktop @@ -11,5 +11,5 @@ X-Icon-path=/usr/share/pixmaps/ X-HildonDesk-ShowInToolbar=true X-Osso-Service=com.nokia.maemo_recorder X-Osso-Type=application/x-executable -MimeType=audio/basic;audio/x-raw-ilbc;audio/x-mp3 +MimeType=audio/basic;audio/x-raw-ilbc;audio/x-mp3;audio/x-wav StartupWMClass=maemo_recorder diff --git a/src/maemo-recorder-au.h b/src/maemo-recorder-au.h index 27e8cd9..3d2b792 100644 --- a/src/maemo-recorder-au.h +++ b/src/maemo-recorder-au.h @@ -28,6 +28,8 @@ #include +G_BEGIN_DECLS + #define AU_MAGIC ((uint32_t) 0x2e736e64) /* ".snd" */ #define AU_SIZE_UNKNOWN (~0) /* (unsigned) -1 */ @@ -71,4 +73,6 @@ gint au_copy_data(GnomeVFSHandle *to_handle, GnomeVFSHandle *from_handle, guint3 guint32 au_get_encoding(AudioFormat format); +G_END_DECLS + #endif diff --git a/src/maemo-recorder-file.h b/src/maemo-recorder-file.h index 2f4d324..f741af5 100644 --- a/src/maemo-recorder-file.h +++ b/src/maemo-recorder-file.h @@ -27,6 +27,8 @@ #include #include +G_BEGIN_DECLS + #define EXTENSION_ILBC ".ilbc" #define EXTENSION_RAW ".raw" #define EXTENSION_PCMA ".pcma" @@ -55,5 +57,7 @@ const gchar * getExtension(gint format); GnomeVFSFileSize getFileLength(const gchar *file); +G_END_DECLS + #endif diff --git a/src/maemo-recorder-ui.c b/src/maemo-recorder-ui.c index e9f3497..0d58ce9 100644 --- a/src/maemo-recorder-ui.c +++ b/src/maemo-recorder-ui.c @@ -20,7 +20,6 @@ * */ - #include #include #include @@ -33,7 +32,7 @@ #include #include #include -#include "osso-helplib.h" +#include #include #include "maemo-recorder.h" @@ -66,6 +65,8 @@ #define RECORDER_MSG_RECORDING _("Recording") #define RECORDER_FILE_UNTITLED _("Untitled") +#define RECORDER_FMT_STRING_NONE _("N/A") + /* general enumerations */ typedef enum @@ -74,19 +75,6 @@ typedef enum DTX_ON = 1 } DTX; -/* menu codes */ -typedef enum -{ - MENU_FILE_NEW = 1, - MENU_FILE_OPEN, - MENU_FILE_SAVE, - MENU_FILE_SAVE_AS, - MENU_FILE_REC, - MENU_FILE_PLAY, - MENU_FILE_STOP, - MENU_FILE_QUIT -} MenuActionCode; - typedef enum { PIPELINE_PLAY = 1, @@ -109,6 +97,7 @@ static void pipelineStateChanged (GstElement *element, static void seekToTime(GstElement *pipeline, gdouble secs); static gboolean seekToZero(AppData *data, GstElement *pipeline); static void setLength(AppData *data, gdouble secs); +static void setFormatString(AppData *data, AudioFormat afmt); static gboolean cbStopPlayback(AppData *data); static void cbStop(GtkWidget* widget, AppData *data); static void cbPlay(GtkWidget* widget, AppData *data); @@ -131,6 +120,7 @@ static gboolean cbUpdateRecLength(AppData *data); static void cbDestroy(GtkWidget* widget, GdkEvent *event, gpointer data); static gboolean openURI(gpointer user_data); static gboolean closeFile(AppData *data); +static const gchar *getFileName(AppData *data); static gdouble guessMediaLength(AppData *data); static GstCaps *createCapsFilter(AudioFormat format); @@ -828,6 +818,7 @@ static void cbOpen(GtkWidget* widget, AppData *data) else setLength(data, 0.0); + setFormatString(data, data->file_format); data->saved = TRUE; } else @@ -1013,7 +1004,15 @@ closeFile(AppData *data) } return FALSE; } - + +static const gchar * +getFileName(AppData *data) +{ + g_assert(data); + return gtk_entry_get_text(GTK_ENTRY(data->mainViewData.fileNameEntry)); + +} + #if 0 static void cbSave(GtkWidget* widget, AppData *data) { @@ -1098,15 +1097,17 @@ static void cbEmailing(GtkWidget* widget, AppData *data) g_assert(NULL != data); - file = gtk_entry_get_text(GTK_ENTRY(data->mainViewData.fileNameEntry)); - if ( g_file_test( file, G_FILE_TEST_EXISTS ) ) + if (g_file_test(getFileName(data), G_FILE_TEST_EXISTS)) { + file = g_strdup_printf("file://%s", getFileName(data)); ULOG_INFO("Emailing: %s", file); - list= g_slist_append( list , file ); - osso_email_files_email( data->osso, list ); + list = g_slist_append(list, file); + if (osso_email_files_email(data->osso, list) != OSSO_OK) + hildon_banner_show_information(GTK_WIDGET(data->mainView), GTK_STOCK_DIALOG_ERROR, _("Emailing failed")); + g_slist_free(list); + g_free(file); } - g_free(file); } static void cbSaveAs(GtkWidget* widget, AppData *data) @@ -1119,7 +1120,7 @@ static void cbSaveAs(GtkWidget* widget, AppData *data) ULOG_DEBUG("%s() - begin", G_STRFUNC); - current = gtk_entry_get_text(GTK_ENTRY(data->mainViewData.fileNameEntry)); + current = getFileName(data); if (NULL == current || strcmp(current, RECORDER_FILE_UNTITLED) == 0) { hildon_banner_show_information(GTK_WIDGET(data->mainView), GTK_STOCK_DIALOG_ERROR, _("Nothing to save")); @@ -1263,6 +1264,7 @@ static void cbRec(GtkWidget* widget, AppData *data) gtk_widget_set_sensitive(data->buttonSaveAs, TRUE); gtk_window_set_title(GTK_WINDOW(data->mainView), RECORDER_FILE_UNTITLED); data->file_format = data->filter; + setFormatString(data, data->file_format); } else { @@ -1282,7 +1284,7 @@ static void cbPlay(GtkWidget* widget, AppData *data) ULOG_DEBUG("%s() - begin", G_STRFUNC); - file = gtk_entry_get_text(GTK_ENTRY(data->mainViewData.fileNameEntry)); + file = getFileName(data); if (NULL == data->openFileName || NULL == file || strcmp(file, RECORDER_FILE_UNTITLED) == 0) { ULOG_WARN("%s() - nothing to play", G_STRFUNC); @@ -1601,18 +1603,18 @@ static void createMenu( AppData *data ) item_separator = gtk_separator_menu_item_new(); /* Add menu items to right menus */ - gtk_menu_append( main_menu, item_file ); - gtk_menu_append( menu_file, item_file_open ); - gtk_menu_append( menu_file, item_file_save_as ); - gtk_menu_append( menu_file, item_email ); - gtk_menu_append( main_menu, item_others ); - gtk_menu_append( menu_others, item_pcm ); - gtk_menu_append( menu_others, item_pcma ); - gtk_menu_append( menu_others, item_ilbc); + gtk_menu_append(main_menu, item_file ); + gtk_menu_append(menu_file, item_file_open ); + gtk_menu_append(menu_file, item_file_save_as ); + gtk_menu_append(menu_file, item_email ); + gtk_menu_append(main_menu, item_others ); + gtk_menu_append(menu_others, item_pcm ); + gtk_menu_append(menu_others, item_pcma ); + gtk_menu_append(menu_others, item_ilbc); - gtk_menu_append( main_menu, item_settings ); + gtk_menu_append(main_menu, item_settings ); - gtk_menu_append( main_menu, item_close ); + gtk_menu_append(main_menu, item_close ); /* Add others submenu to the "Others" item */ gtk_menu_item_set_submenu( @@ -1629,7 +1631,6 @@ static void createMenu( AppData *data ) GTK_SIGNAL_FUNC (cbSettings), data); g_signal_connect( G_OBJECT( item_email ), "activate", GTK_SIGNAL_FUNC (cbEmailing), data); - g_signal_connect( G_OBJECT( item_close ), "activate", GTK_SIGNAL_FUNC (cbItemClose), data); @@ -1652,6 +1653,7 @@ gboolean maemo_recorder_ui_new(AppData *data) GtkWidget *entry2 = NULL; GtkWidget *entry3 = NULL; GtkWidget *toolBar = NULL; + GtkWidget *infohbox = NULL; GtkWidget *table = NULL; GtkWidget *scale = NULL; GtkObject *adjustment = NULL; @@ -1678,30 +1680,27 @@ gboolean maemo_recorder_ui_new(AppData *data) toolBar = createToolBar(data); /* create table for labels */ - table = gtk_table_new (4, 3, FALSE); + table = gtk_table_new (4, 2, FALSE); gtk_table_set_homogeneous(GTK_TABLE(table), FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 4); - gtk_table_set_col_spacings (GTK_TABLE (table), 0); + gtk_table_set_col_spacings (GTK_TABLE (table), HILDON_MARGIN_TRIPLE); label = gtk_label_new_with_mnemonic(_("Filename:")); - /* gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); - */ gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 0, 1); - entry1 = gtk_entry_new (); + entry1 = gtk_entry_new(); gtk_entry_set_has_frame(GTK_ENTRY(entry1), FALSE); - gtk_entry_set_text (GTK_ENTRY (entry1), _(RECORDER_FILE_UNTITLED)); - gtk_table_attach_defaults (GTK_TABLE (table), entry1, 1, 3, 0, 1); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry1); + gtk_entry_set_text(GTK_ENTRY (entry1), _(RECORDER_FILE_UNTITLED)); + gtk_entry_set_editable(GTK_ENTRY(entry1), FALSE); + gtk_table_attach_defaults(GTK_TABLE (table), entry1, 1, 2, 0, 1); + gtk_label_set_mnemonic_widget(GTK_LABEL (label), entry1); label = gtk_label_new_with_mnemonic (_("Length:")); - /* gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); - */ gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); @@ -1709,22 +1708,39 @@ gboolean maemo_recorder_ui_new(AppData *data) entry2 = gtk_entry_new (); gtk_entry_set_has_frame(GTK_ENTRY(entry2), FALSE); gtk_entry_set_text (GTK_ENTRY (entry2), "0:00.00"); - gtk_table_attach_defaults (GTK_TABLE (table), entry2, 1, 3, 1, 2); + gtk_entry_set_editable(GTK_ENTRY(entry2), FALSE); + gtk_table_attach_defaults (GTK_TABLE (table), entry2, 1, 2, 1, 2); gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry2); - label = gtk_label_new_with_mnemonic (_("State:")); - /* + /* audio format field */ + label = gtk_label_new_with_mnemonic(_("Format:")); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); - */ gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3); + entry3 = gtk_entry_new(); + gtk_entry_set_has_frame(GTK_ENTRY(entry3), FALSE); + gtk_entry_set_width_chars(GTK_ENTRY(entry3), 40); + gtk_entry_set_text (GTK_ENTRY (entry3), RECORDER_FMT_STRING_NONE); + gtk_entry_set_editable(GTK_ENTRY(entry3), FALSE); + data->mainViewData.formatEntry = GTK_WIDGET(entry3); + + gtk_table_attach_defaults (GTK_TABLE (table), entry3, 1, 2, 2, 3); + gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry3); + + label = gtk_label_new_with_mnemonic(_("State:")); + gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); + gtk_table_attach_defaults (GTK_TABLE (table), + label, + 0, 1, 3, 4); + entry3 = gtk_entry_new (); gtk_entry_set_has_frame(GTK_ENTRY(entry3), FALSE); gtk_entry_set_text (GTK_ENTRY (entry3), RECORDER_MSG_READY); - gtk_table_attach_defaults (GTK_TABLE (table), entry3, 1, 3, 2, 3); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry3); + gtk_entry_set_editable(GTK_ENTRY(entry3), FALSE); + gtk_table_attach_defaults (GTK_TABLE (table), entry3, 1, 2, 3, 4); + gtk_label_set_mnemonic_widget(GTK_LABEL (label), entry3); adjustment = gtk_adjustment_new (0.00, 0.00, @@ -1746,17 +1762,14 @@ gboolean maemo_recorder_ui_new(AppData *data) /* packing the view */ gtk_container_add (GTK_CONTAINER(window), vbox); - gtk_box_pack_start (GTK_BOX(vbox), table, FALSE, TRUE, 0); + infohbox = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start (GTK_BOX(infohbox), table, FALSE, TRUE, 0); + gtk_box_pack_start (GTK_BOX(vbox), infohbox, FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX(vbox), scale, FALSE, FALSE, 0); /* gtk_box_pack_start (GTK_BOX(vbox), hbox, TRUE, TRUE, 0); */ hildon_window_add_toolbar(window, GTK_TOOLBAR(toolBar)); - /* initialise the ui */ - gtk_entry_set_editable(GTK_ENTRY(entry1), FALSE); - gtk_entry_set_editable(GTK_ENTRY(entry2), FALSE); - gtk_entry_set_editable(GTK_ENTRY(entry3), FALSE); - /* store needed widgets */ data->app = app; data->mainView = window; @@ -1836,6 +1849,50 @@ static gboolean seekToZero(AppData *data, GstElement *pipeline) return TRUE; } +static void +setFormatString(AppData *data, AudioFormat afmt) +{ + gchar *str; + gchar *format; + + /* these are pretty much always the same */ + gint channels = 1; + gint rate = DEFAULT_RATE; /* 8000 */ + gint bits = 8; + + g_assert(data); + g_assert(GTK_IS_ENTRY(data->mainViewData.formatEntry)); + + switch (afmt) + { + case FORMAT_PCMA: + format = FORMAT_NAME_PCMA; + break; + case FORMAT_PCMU: + format = FORMAT_NAME_PCMU; + break; + case FORMAT_ILBC: + format = FORMAT_NAME_ILBC; + rate = ILBC_RATE; + break; + case FORMAT_WAV: + format = FORMAT_NAME_WAV; + bits = PCM_WIDTH; + break; + case FORMAT_PCM: + format = FORMAT_NAME_PCM; + bits = PCM_WIDTH; + break; + default: + gtk_entry_set_text(GTK_ENTRY(data->mainViewData.formatEntry), RECORDER_FMT_STRING_NONE); + return; + } + + str = g_strdup_printf("%s, %d %s, %d Hz, %d %s", format, channels, _("ch"), rate, bits, _("bits")); + gtk_entry_set_text(GTK_ENTRY(data->mainViewData.formatEntry), str); + g_free(str); +} + static void setLength(AppData *data, gdouble secs) { guint mins = 0; @@ -2033,3 +2090,4 @@ static gboolean cbUpdateRecLength(AppData *data) return FALSE; } + diff --git a/src/maemo-recorder.h b/src/maemo-recorder.h index d878a4e..6fd9434 100644 --- a/src/maemo-recorder.h +++ b/src/maemo-recorder.h @@ -80,7 +80,11 @@ typedef enum #define FORMAT_NAME_WAV "WAV" #define FORMAT_NAME_PCMA "PCM A-law" -#define FORMAT_NAME_PCMU "PCM u-law" +#define FORMAT_NAME_PCMU "PCM \u03BC-law" +/* +#define FORMAT_NAME_PCMU "PCM mu-law" +*/ +#define FORMAT_NAME_PCM "PCM raw" #define FORMAT_NAME_ILBC "iLBC" /* TODO: this kind of struct might be more handy when passing around audioformat info */ @@ -113,6 +117,7 @@ typedef struct _mainViewStr GtkWidget *fileNameEntry; GtkWidget *lengthEntry; GtkWidget *stateEntry; + GtkWidget *formatEntry; GtkObject *adjustment; } mainViewStr; diff --git a/src/settings.h b/src/settings.h index ed6164a..3e8891a 100755 --- a/src/settings.h +++ b/src/settings.h @@ -26,6 +26,8 @@ #include +G_BEGIN_DECLS + void settings_edit(GtkWidget* widget, AppData *data); gint get_default_filter(void); @@ -36,5 +38,7 @@ void set_default_dir(gchar* selected); GConfClient *settings_init(gint argc, gchar *argv[]); +G_END_DECLS + #endif /* _SETTINGS_H */ -- 1.7.9.5