/* vim: set sts=2 sw=2 et: */
/*
- * Copyright (C) 2008 Jari Tenhunen <jari.tenhunen@iki.fi>
+ * Copyright (C) 2008-2009 Jari Tenhunen <jari.tenhunen@iki.fi>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
#endif
#include <gtk/gtk.h>
-#if HILDON == 1
#include <hildon/hildon-caption.h>
#include <hildon/hildon-defines.h>
#include <hildon/hildon-number-editor.h>
-#endif
+#include <hildon/hildon.h>
#include "settings.h"
return TRUE;
}
-#if HILDON == 1
static void
fix_hildon_number_editor (GtkWidget * widget, gpointer data)
{
{
GtkWidget *dialog;
GtkWidget *vbox;
- GtkWidget *caption;
- GtkSizeGroup *group;
GtkWidget *editor = NULL;
GtkWidget *control;
- GtkComboBox *combo;
gint res;
dialog = gtk_dialog_new_with_buttons("Settings",
GTK_DIALOG_MODAL |
GTK_DIALOG_DESTROY_WITH_PARENT |
GTK_DIALOG_NO_SEPARATOR,
- "OK", GTK_RESPONSE_OK,
+ "Save", GTK_RESPONSE_OK,
"Cancel",
GTK_RESPONSE_CANCEL,
NULL, NULL);
gtk_container_set_border_width (GTK_CONTAINER (vbox), HILDON_MARGIN_DEFAULT);
gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), vbox);
- group = GTK_SIZE_GROUP (gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL));
-
- combo = GTK_COMBO_BOX (gtk_combo_box_new_text ());
- gtk_combo_box_append_text (combo, "Simple FFT");
- gtk_combo_box_append_text (combo, "Harmonic Product Spectrum");
- gtk_combo_box_set_active (combo, settings_get_algorithm (DEFAULT_ALGORITHM));
- caption = hildon_caption_new (group, "Pitch detection algorithm:",
- GTK_WIDGET (combo), NULL, HILDON_CAPTION_OPTIONAL);
- gtk_box_pack_start (GTK_BOX (vbox), caption, FALSE, FALSE, 0);
+ HildonPickerButton *picker = HILDON_PICKER_BUTTON (hildon_picker_button_new (
+ HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_HALFSCREEN_WIDTH,
+ HILDON_BUTTON_ARRANGEMENT_VERTICAL));
+ hildon_button_set_title (HILDON_BUTTON (picker), "Pitch detection algorithm");
+ HildonTouchSelector *selector = HILDON_TOUCH_SELECTOR (hildon_touch_selector_new_text());
+ hildon_picker_button_set_selector (picker, selector);
+ hildon_touch_selector_append_text (selector, "Simple FFT");
+ hildon_touch_selector_append_text (selector, "Harmonic Product Spectrum");
+ hildon_picker_button_set_active (picker, settings_get_algorithm (DEFAULT_ALGORITHM));
+
+ gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (picker), FALSE, FALSE, 0);
#if 0
editor = calibration_editor_new (CALIB_MIN, CALIB_MAX);
hildon_number_editor_set_value (HILDON_NUMBER_EDITOR (editor), CALIB_DEFAULT);
gtk_box_pack_start (GTK_BOX (vbox), caption, FALSE, FALSE, 0);
#endif
- control = gtk_check_button_new ();
- caption = hildon_caption_new (group, "Keep display on:",
- control, NULL, HILDON_CAPTION_OPTIONAL);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (control),
+ control = hildon_check_button_new (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_HALFSCREEN_WIDTH | HILDON_BUTTON_ARRANGEMENT_VERTICAL);
+ gtk_button_set_label (GTK_BUTTON (control), "Keep display on");
+ hildon_check_button_set_active (HILDON_CHECK_BUTTON (control),
settings_get_display_keepalive (DEFAULT_DISPLAY_KEEPALIVE));
- gtk_box_pack_start (GTK_BOX (vbox), caption, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), control, FALSE, FALSE, 0);
gtk_widget_show_all (dialog);
res = gtk_dialog_run (GTK_DIALOG (dialog));
if (res == GTK_RESPONSE_OK) {
/* save settings */
- g_debug ("algorithm: %d", gtk_combo_box_get_active (combo));
- settings_set_algorithm (gtk_combo_box_get_active (combo));
+ g_debug ("algorithm: %d", hildon_picker_button_get_active (picker));
+ settings_set_algorithm (hildon_picker_button_get_active (picker));
if (editor) {
g_debug ("calib: %d", hildon_number_editor_get_value (HILDON_NUMBER_EDITOR (editor)));
settings_set_calibration (hildon_number_editor_get_value (HILDON_NUMBER_EDITOR (editor)));
}
- g_debug ("keepalive: %d", gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (control)));
- settings_set_display_keepalive (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (control)));
+ g_debug ("keepalive: %d", hildon_check_button_get_active (HILDON_CHECK_BUTTON (control)));
+ settings_set_display_keepalive (hildon_check_button_get_active (HILDON_CHECK_BUTTON (control)));
}
gtk_widget_destroy (dialog);
}
-#endif
#define TUNER_VERSION "0.4"
#ifdef HILDON
-# if HILDON==1
-# include <hildon/hildon-defines.h>
-# include <hildon/hildon-program.h>
-# include <hildon/hildon-number-editor.h>
-# elif defined(MAEMO1)
-# include <hildon-widgets/hildon-app.h>
-# include <hildon-widgets/hildon-appview.h>
-# else
-# include <hildon-widgets/hildon-program.h>
-# endif
+#include <hildon/hildon-defines.h>
+#include <hildon/hildon-program.h>
+#include <hildon/hildon-number-editor.h>
#include <libosso.h>
#endif /* ifdef HILDON */
#ifdef MAEMO
-# define DEFAULT_AUDIOSRC "dsppcmsrc"
-# define DEFAULT_AUDIOSINK "dsppcmsink"
+# define DEFAULT_AUDIOSRC "pulsesrc"
+# define DEFAULT_AUDIOSINK "pulsesink"
#else
# define DEFAULT_AUDIOSRC "alsasrc"
# define DEFAULT_AUDIOSINK "alsasink"
GstElement *tonesrc;
GstElement *pitch;
guint stop_timer_id;
+ guint vol_timer_id;
+ gdouble target_vol;
gboolean display_keepalive;
#ifdef MAEMO
static GdkColor ledOnColor = { 0, 0 * 255, 180 * 255, 95 * 255 };
static GdkColor ledOnColor2 = { 0, 180 * 255, 180 * 255, 0 * 255 };
static GdkColor ledOffColor = { 0, 80 * 255, 80 * 255, 80 * 255 };
+static GdkColor whiteColor = { 0, 65535, 65535, 65535 };
+static GdkColor blackColor = { 0, 0, 0, 0 };
static void
recalculate_scale (double a4)
gint frequency;
frequency = g_value_get_int (gst_structure_get_value (s, "frequency"));
- update_frequency (data, frequency);
+ if (frequency != 0)
+ update_frequency (data, frequency);
}
}
/* we handled the message we want, and ignored the ones we didn't want.
if (!gc) {
gc = gdk_gc_new (appdata->drawingarea2->window);
}
- gdk_gc_set_rgb_fg_color (gc, &appdata->drawingarea2->style->fg[0]);
+ gdk_gc_set_rgb_fg_color (gc, &whiteColor);
+ gdk_draw_rectangle (appdata->drawingarea2->window, gc, TRUE, 0, 0,
+ NUM_WKEYS * WKEY_WIDTH, appdata->drawingarea2->allocation.height - 1);
+ gdk_gc_set_rgb_fg_color (gc, &blackColor);
gdk_draw_rectangle (appdata->drawingarea2->window, gc, FALSE, 0, 0,
NUM_WKEYS * WKEY_WIDTH, appdata->drawingarea2->allocation.height - 1);
return FALSE;
}
+static gboolean
+fake_frequency (gpointer user_data)
+{
+ AppData * appdata = (AppData *) user_data;
+
+ update_frequency (appdata, 440);
+
+ return TRUE;
+}
+
#ifdef MAEMO
static void
osso_hw_state_cb (osso_hw_state_t *state, gpointer user_data)
}
static void
-close_activate (GtkWidget * widget, gpointer data)
+about_activate (GtkWidget * widget, GtkWindow * main_win)
{
- gtk_main_quit ();
+ GtkWidget *vbox;
+ GtkWidget *label;
+ GtkWidget *dialog;
+
+ dialog = gtk_dialog_new_with_buttons("About tuner", main_win,
+ GTK_DIALOG_MODAL |
+ GTK_DIALOG_DESTROY_WITH_PARENT |
+ GTK_DIALOG_NO_SEPARATOR,
+ NULL, NULL);
+
+ g_signal_connect (G_OBJECT (dialog), "delete_event", G_CALLBACK (gtk_widget_destroy), NULL);
+
+ vbox = gtk_vbox_new (FALSE, HILDON_MARGIN_DEFAULT);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), HILDON_MARGIN_DEFAULT);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), vbox);
+ label = gtk_label_new ("Tuner Tool is developed by Josep Torra and Jari Tenhunen.\n"
+ "http://n770galaxy.blogspot.com/\n");
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 5);
+
+ gtk_widget_show_all (dialog);
+ gtk_dialog_run (GTK_DIALOG (dialog));
+
+ gtk_widget_destroy (dialog);
+}
+
+static HildonAppMenu *
+create_menu (GtkWidget *parent)
+{
+ HildonSizeType button_size = HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH;
+ HildonAppMenu *menu = HILDON_APP_MENU (hildon_app_menu_new ());
+ GtkButton *button;
+
+ button = GTK_BUTTON (hildon_gtk_button_new (button_size));
+ gtk_button_set_label (button, "Settings");
+ g_signal_connect_after (G_OBJECT (button), "clicked",
+ G_CALLBACK (settings_activate), parent);
+ hildon_app_menu_append (menu, button);
+
+ button = GTK_BUTTON (hildon_gtk_button_new (button_size));
+ gtk_button_set_label (button, "About");
+ g_signal_connect_after (G_OBJECT (button), "clicked",
+ G_CALLBACK (about_activate), parent);
+ hildon_app_menu_append (menu, button);
+
+ gtk_widget_show_all (GTK_WIDGET (menu));
+
+ return menu;
}
int
{
AppData * appdata = NULL;
#ifdef HILDON
-#if defined(MAEMO1)
- HildonApp *app = NULL;
- HildonAppView *view = NULL;
-#else
HildonProgram *app = NULL;
- HildonWindow *view = NULL;
-#endif
osso_hw_state_t hw_state_mask = { TRUE, FALSE, FALSE, TRUE, 0 };
#endif
gint calib;
GtkWidget *alignment;
GtkWidget *calibrate;
GtkWidget *sep;
- GtkWidget *menu;
- GtkWidget *menuitem;
+ HildonAppMenu *menu;
#ifndef HILDON
GdkPixbuf *icon = NULL;
/* Init the gtk - must be called before any hildon stuff */
gtk_init (&argc, &argv);
-#ifdef HILDON
-#if defined(MAEMO1)
- /* Create the hildon application and setup the title */
- app = HILDON_APP (hildon_app_new ());
- hildon_app_set_title (app, "Tuner Tool");
- hildon_app_set_two_part_title (app, TRUE);
-#else
app = HILDON_PROGRAM (hildon_program_get_instance ());
g_set_application_name ("Tuner Tool");
-#endif
appdata->app = app;
mainBox = gtk_vbox_new (FALSE, 0);
gtk_container_set_border_width (GTK_CONTAINER (mainBox), 0);
-#if defined(MAEMO1)
- view = HILDON_APPVIEW (hildon_appview_new ("Tuner"));
- hildon_appview_set_fullscreen_key_allowed (view, TRUE);
- mainWin = GTK_WIDGET (app);
-#else
- view = HILDON_WINDOW (hildon_window_new ());
- mainWin = GTK_WIDGET (view);
+ mainWin = hildon_stackable_window_new ();
g_signal_connect (G_OBJECT (app), "notify::is-topmost", G_CALLBACK (topmost_notify), appdata);
- menu = gtk_menu_new ();
- hildon_window_set_menu (HILDON_WINDOW (view), GTK_MENU (menu));
-
- menuitem = gtk_menu_item_new_with_label ("Settings...");
- gtk_menu_append (GTK_MENU (menu), menuitem);
- g_signal_connect (G_OBJECT (menuitem), "activate",
- GTK_SIGNAL_FUNC (settings_activate), mainWin);
-
- menuitem = gtk_menu_item_new_with_label ("Close");
- gtk_menu_append (GTK_MENU (menu), menuitem);
- g_signal_connect (G_OBJECT (menuitem), "activate",
- GTK_SIGNAL_FUNC (close_activate), mainWin);
-
- gtk_widget_show_all (menu);
-
-#endif
-#else
- mainWin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title (GTK_WINDOW (mainWin), "Tuner " TUNER_VERSION);
- icon = gdk_pixbuf_new_from_file ("tuner64.png", &error);
- if (icon != NULL) {
- g_print ("Setting icon\n");
- gtk_window_set_icon (GTK_WINDOW (mainWin), icon);
- }
- mainBox = gtk_vbox_new (FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (mainBox), 0);
-#endif
+ menu = create_menu (mainWin);
+ hildon_program_set_common_app_menu (app, menu);
/* Bin for tuner functionality */
appdata->bin1 = gst_pipeline_new ("bin1");
src1 = gst_element_factory_make (DEFAULT_AUDIOSRC, "src1");
+ g_object_set (G_OBJECT (src1), "device", "source.voice.raw", NULL);
+
appdata->pitch = gst_element_factory_make ("pitch", "pitch");
g_object_set (G_OBJECT (appdata->pitch), "message", TRUE, "minfreq", 10,
/* Separator */
sep = gtk_hseparator_new ();
-
- /* Credits */
gtk_box_pack_start (GTK_BOX (mainBox), sep, FALSE, FALSE, 5);
- label = gtk_label_new ("Tuner Tool developed by Josep Torra.\n"
- "http://n770galaxy.blogspot.com/");
- gtk_box_pack_start (GTK_BOX (mainBox), label, FALSE, FALSE, 5);
-
/* Piano keyboard */
alignment = gtk_alignment_new (0.5, 0.5, 0, 0);
appdata->drawingarea2 = gtk_drawing_area_new ();
} else {
gtk_widget_set_events (appdata->drawingarea2, GDK_EXPOSURE_MASK);
}
-#ifdef HILDON
- gtk_container_add (GTK_CONTAINER (view), mainBox);
-#if defined(MAEMO1)
- hildon_app_set_appview (app, view);
- gtk_widget_show_all (GTK_WIDGET (app));
-#else
- hildon_program_add_window (app, view);
- gtk_widget_show_all (GTK_WIDGET (view));
-#endif
-#else
+
gtk_container_add (GTK_CONTAINER (mainWin), mainBox);
+ hildon_program_add_window (app, HILDON_WINDOW (mainWin));
gtk_widget_show_all (GTK_WIDGET (mainWin));
-#endif
-#if HILDON == 1
appdata->display_keepalive = settings_get_display_keepalive (DEFAULT_DISPLAY_KEEPALIVE);
if (appdata->display_keepalive)
display_keepalive (appdata);
-#endif
set_pipeline_states (appdata, GST_STATE_PLAYING);
+ //g_timeout_add (2000, (GSourceFunc) fake_frequency, appdata);
+
gtk_main ();
+
set_pipeline_states (appdata, GST_STATE_NULL);
gst_object_unref (appdata->bin1);