[Goodies-commits] r6253 - xfce4-radio-plugin/branches/newpresets/panel-plugin

Stefan Ott cockroach at xfce.org
Wed Dec 3 04:15:21 CET 2008


Author: cockroach
Date: 2008-12-03 03:15:20 +0000 (Wed, 03 Dec 2008)
New Revision: 6253

Modified:
   xfce4-radio-plugin/branches/newpresets/panel-plugin/radio.c
   xfce4-radio-plugin/branches/newpresets/panel-plugin/radio.h
Log:
Cleanup


Modified: xfce4-radio-plugin/branches/newpresets/panel-plugin/radio.c
===================================================================
--- xfce4-radio-plugin/branches/newpresets/panel-plugin/radio.c	2008-12-03 01:57:30 UTC (rev 6252)
+++ xfce4-radio-plugin/branches/newpresets/panel-plugin/radio.c	2008-12-03 03:15:20 UTC (rev 6253)
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
 #ifdef HAVE_CONFIG_H
@@ -51,11 +51,14 @@
 static gboolean
 update_signal_bar (radio_gui* data)
 {
-	if (!data->on || !data->show_signal) {
+	if (!data->on || !data->show_signal)
+	{
 		gtk_widget_hide (data->signal_bar);
 		data->signal_timeout_id = 0;
 		return FALSE;
-	} else {
+	}
+	else
+	{
 		gtk_widget_show (data->signal_bar);
 		double signal = radio_get_signal (data->fd);
 
@@ -75,7 +78,8 @@
 
 		gtk_widget_modify_bg (data->signal_bar, GTK_STATE_PRELIGHT,
 								&color);
-		if (data->signal_timeout_id == 0) {
+		if (data->signal_timeout_id == 0)
+		{
 			data->signal_timeout_id = g_timeout_add(500,
 					(GtkFunction) update_signal_bar,
 							(gpointer) data);
@@ -84,10 +88,36 @@
 	}
 }
 
-static gboolean
-find_preset_by_freq (GtkTreeModel *model, gint search_freq,
-						GtkTreeIter *search_iter);
+#define make_preset_finder(name, arg, search_arg, get_col, get_var,	\
+						free, comparison)	\
+	static gboolean							\
+	find_preset_by_##name (GtkTreeModel *model,			\
+			search_arg,					\
+			GtkTreeIter *search_iter)			\
+	{								\
+		arg;							\
+		GtkTreeIter iter;					\
+		gboolean valid;						\
+		valid = gtk_tree_model_get_iter_first (model, &iter);	\
+		while (valid)						\
+		{							\
+			gtk_tree_model_get (model, &iter,		\
+					get_col, get_var, -1);		\
+			if (comparison) {				\
+				*search_iter = iter;			\
+				return TRUE;				\
+			}						\
+			free;						\
+			valid = gtk_tree_model_iter_next (model, &iter);\
+		}							\
+		return FALSE;						\
+	}								\
 
+make_preset_finder (freq, gint freq, gint search_freq, 1, &freq, freq = 0,
+							freq == search_freq);
+make_preset_finder (name, gchar *name, const gchar *search_name, 0, &name,
+				g_free(name), strcmp (name, search_name) == 0);
+
 static void
 update_tooltip (radio_gui* data)
 {
@@ -115,10 +145,13 @@
 {
 	gchar *label;
 
-	if (data->on) {
+	if (data->on)
+	{
 		label = g_strdup_printf ("%5.1f", ((float) data->freq) / 100);
 		update_tooltip (data);
-	} else {
+	}
+	else
+	{
 		label = g_strdup (_("- off -"));
 	}
 
@@ -138,7 +171,8 @@
 	struct video_audio vid_aud;
 	long freq;
 
-	if (!data->on) {
+	if (!data->on)
+	{
 		data->fd = open (data->device, O_RDONLY);
 
 		// We return TRUE to keep the timer alive, same reason as above
@@ -149,26 +183,31 @@
 	if (ioctl (data->fd, VIDIOCGAUDIO, &vid_aud))
 		perror ("VIDIOCGAUDIO");
 
-	if (vid_aud.flags & VIDEO_AUDIO_MUTE) {
+	if (vid_aud.flags & VIDEO_AUDIO_MUTE)
+	{
 		close (data->fd);
-		printf ("It just happened\n");
 
 		// Radio is off.  Did I think it was on?
-		if (data->on) {
+		if (data->on)
+		{
 			// manually clean up; radio_stop would call ioctl
 			if (data->show_signal)
 				gtk_widget_hide (data->signal_bar);
 			data->on = FALSE;
 		}
-	} else {
+	}
+	else
+	{
 		// Radio is on.  Did I think it was off?
-		if (!data->on) {
+		if (!data->on)
+		{
 			// manually clean up; radio_start would tune the radio
 			gtk_tooltips_enable (data->tooltips);
 			data->on = TRUE;
 		}
 
-		if (ioctl (data->fd, VIDIOCGFREQ, &freq)) {
+		if (ioctl (data->fd, VIDIOCGFREQ, &freq))
+		{
 			perror ("VIDIOCGFREQ");
 			return TRUE; // should maybe be FALSE?
 		}
@@ -192,7 +231,8 @@
 	struct video_tuner tuner;
 	struct video_audio vid_aud;
 
-	if (-1 == (data->fd = open (data->device, O_RDONLY))) {
+	if (-1 == (data->fd = open (data->device, O_RDONLY)))
+	{
 		GtkWindow* win = GTK_WINDOW (gtk_widget_get_toplevel(
 								data->box));
 		GtkWidget* warn = gtk_message_dialog_new (win, 0,
@@ -212,7 +252,8 @@
 	vid_aud.flags &= ~VIDEO_AUDIO_MUTE;
 	if (ioctl (data->fd, VIDIOCSAUDIO, &vid_aud)) perror("VIDIOCSAUDIO");
 
-	if (strcmp(data->startup_command, "") != 0) {
+	if (strcmp(data->startup_command, "") != 0)
+	{
 		xfce_exec(data->startup_command, FALSE, FALSE, NULL);
 	}
 
@@ -235,243 +276,53 @@
 
 	if (data->show_signal) gtk_widget_hide (data->signal_bar);
 
-	if (strcmp (data->shutdown_command, "") != 0) {
+	if (strcmp (data->shutdown_command, "") != 0)
+	{
 		xfce_exec (data->shutdown_command, FALSE, FALSE, NULL);
 	}
 }
 
-#define make_preset_finder(name, arg, search_arg, get_col, get_var,	\
-						free, comparison)	\
-	static gboolean							\
-	find_preset_by_##name (GtkTreeModel *model,			\
-			search_arg,					\
-			GtkTreeIter *search_iter)			\
-	{								\
-		arg;							\
-		GtkTreeIter iter;					\
-		gboolean valid;						\
-		valid = gtk_tree_model_get_iter_first (model, &iter);	\
-		while (valid)						\
-		{							\
-			gtk_tree_model_get (model, &iter,		\
-					get_col, get_var, -1);		\
-			if (comparison) {				\
-				*search_iter = iter;			\
-				return TRUE;				\
-			}						\
-			free;						\
-			valid = gtk_tree_model_iter_next (model, &iter);\
-		}							\
-		return FALSE;						\
-	}								\
-
-
-make_preset_finder (freq, gint freq, gint search_freq, 1, &freq, freq = 0,
-							freq == search_freq);
-make_preset_finder (name, gchar *name, const gchar *search_name, 0, &name,
-				g_free(name), strcmp (name, search_name) == 0);
-
-static gboolean
-add_before (radio_preset* a, radio_preset* b)
-{
-	return (b == NULL || strcmp (a->name, b->name) < 0);
-}
-
-// TODO: what's this?
 static gint
-get_two_digit (const gint big_number)
+parse_freq (const gchar *freq_char)
 {
-	gint base = 10, a = 0, b = 0, number = big_number, num;
-	while (1) {
-		num = number % base;
-		b = a;
-		a = num;
-		number = (number - num) / base;
-		if (number == 0)
-			return a * base + b;
-	}
-}
-
-// TODO: figure out what the decimals variable does exactly
-parse_freq (const gchar *const_freq_char)
-{
 	gint mult, decimal_int;
-	gchar *freq_char = g_strdup (const_freq_char);
 
 	gint freq_int = 100 * atoi (freq_char);
 
 	gchar *decimals = strstr (freq_char, ".");
-	if (decimals) {
+	if (decimals)
 		decimals++;
-	} else {
-		// Запятая тоже может использоваться для разделения целой и
-		// десятичной части в других локалях, например в русской.
-		//
-		// Google translate says:
-		// "Comma also can be used to divide a whole and decimal part
-		// in other locale, for example, in Russian." which seems to
-		// make sense :)
+	else
+	{
+		// In some languages, a comma can be used instead of a point
 		decimals = strstr (freq_char, ",");
-		if (decimals) {
+		if (decimals)
 			decimals++;
-		} else {
+		else
 			decimals = "0";
-		}
 	}
 
-	if (decimals != '\0' && decimals[1] != '\0' && decimals[2] != '\0') {
-		decimals[2] = '\0';
-	}
 	decimal_int = atoi (decimals);
-	if ((decimal_int > 9) && (decimal_int < 99)) {
-		mult = 1;
-	} else {
+
+	if (decimal_int < 10)
 		mult = 10;
-	}
+	else if (decimal_int < 100)
+		mult = 1;
+	else
+		mult = 0;
+
 	freq_int += mult * decimal_int;
 
-	g_free (freq_char);
 	return freq_int;
 }
 
-/*static gboolean
-append_to_presets (radio_preset* new_preset, radio_gui* data)
-{
-	radio_preset *preset = data->presets, *prev;
-
-	if (find_preset_by_freq (new_preset->freq, data)) return FALSE;
-
-	if (data->presets == NULL) {
-		data->presets = new_preset;
-		return TRUE;
-	} else if (add_before (new_preset, data->presets)) {
-		new_preset->next = data->presets;
-		data->presets = new_preset;
-		return TRUE;
-	} else {
-		while (preset != NULL) {
-			prev = preset;
-
-			preset = preset->next;
-			if (add_before (new_preset, preset)) {
-				new_preset->next = preset;
-				prev->next = new_preset;
-				return TRUE;
-			}
-		}
-	}
-	return FALSE;
-}*/
-
-/*static radio_preset *
-pop_preset (radio_preset *target, radio_gui *data)
-{
-	radio_preset *preset = data->presets, *prev;
-
-	while (preset != NULL) {
-		if (preset->freq == target->freq) {
-			if (preset == data->presets) {
-				data->presets = preset->next;
-			} else {
-				prev->next = preset->next;
-			}
-			return preset;
-		} else {
-			prev = preset;
-		}
-		preset = preset->next;
-	}
-	return NULL;
-}*/
-
-/*static void
-rename_preset (GtkEditable* menu_item, void *pointer)
-{
-	radio_gui* data = (radio_gui*) pointer;
-	radio_preset* preset = find_preset_by_freq (data->freq, data);
-	if (!preset) return;
-	GtkWidget* dialog = gtk_dialog_new_with_buttons (_("Add preset"),
-				NULL, GTK_DIALOG_DESTROY_WITH_PARENT,
-				GTK_STOCK_OK, GTK_RESPONSE_OK,
-				GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL);
-	GtkWidget* box = GTK_DIALOG (dialog)->vbox;
-
-	GtkWidget* label = gtk_label_new (_("Station name:"));
-	gtk_widget_show (label);
-	gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
-
-	GtkWidget* station = gtk_entry_new();
-	gtk_entry_set_text (GTK_ENTRY (station), preset->name);
-	gtk_widget_show (station);
-	gtk_box_pack_start (GTK_BOX (box), station, FALSE, FALSE, 0);
-
-	if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) {
-		g_free (preset->name);
-		preset->name = g_strdup (gtk_entry_get_text (GTK_ENTRY (station)));
-		pop_preset (preset, data);
-		append_to_presets (preset, data);
-	}
-	gtk_widget_destroy (dialog);
-	update_tooltip (data);
-	write_config (data->plugin, data);
-}*/
-
-/*static void
-add_preset_dialog (GtkEditable* menu_item, void *pointer)
-{
-	radio_gui* data = (radio_gui*) pointer;
-	GtkWindow* win = GTK_WINDOW (gtk_widget_get_toplevel (data->box));
-	GtkWidget* dialog = gtk_dialog_new_with_buttons (_("Add preset"),
-				NULL, GTK_DIALOG_DESTROY_WITH_PARENT,
-				GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
-				GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL);
-	GtkWidget* box = GTK_DIALOG (dialog)->vbox;
-
-	GtkWidget* label = gtk_label_new (_("Station name:"));
-	gtk_widget_show (label);
-	gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
-
-	char buf[8];
-	sprintf (buf, "%5.1f FM", ((float) data->freq) / 100);
-	GtkWidget* station = gtk_entry_new();
-	gtk_entry_set_text (GTK_ENTRY (station), buf);
-	gtk_widget_show (station);
-	gtk_box_pack_start (GTK_BOX (box), station, FALSE, FALSE, 0);
-
-	if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
-		radio_preset* preset = malloc (sizeof (radio_preset));
-		preset->name = g_strdup(gtk_entry_get_text (GTK_ENTRY (station)));
-		preset->freq = data->freq;
-		preset->next = NULL;
-		if (!append_to_presets (preset, data)) {
-			GtkWidget* warn = gtk_message_dialog_new(win, 0,
-					GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
-			_("There is already a preset with this frequency."));
-			gtk_dialog_run (GTK_DIALOG (warn));
-			gtk_widget_destroy (warn);
-		} else {
-			write_config (data->plugin, data);
-		}
-	}
-	gtk_widget_destroy (dialog);
-}*/
-
 static gboolean
 parse_freq_and_tune (const char* freq_char, radio_gui* data)
 {
-	int freq_int = 100 * atoi (freq_char);
+	int freq_int = parse_freq (freq_char);
 
-	char* decimals = strstr (freq_char, ".");
-	if (!decimals) {
-		decimals = "0";
-	} else {
-		decimals++;
-	}
-	int decimal_int = atoi (decimals);
-	if (decimal_int > 10) return FALSE;
-	freq_int += 10 * decimal_int;
-
-	if (freq_int >= FREQ_MIN && freq_int <= FREQ_MAX) {
+	if (freq_int >= FREQ_MIN && freq_int <= FREQ_MAX)
+	{
 		data->freq = freq_int;
 		radio_tune (data);
 		return TRUE;
@@ -499,10 +350,11 @@
 	gtk_box_pack_start (GTK_BOX (box), freq, FALSE, FALSE, 0);
 
 	int retval;
-	for (;;) {
+	for (;;)
+	{
 		retval = gtk_dialog_run (GTK_DIALOG (dialog));
 
-		if (	retval == GTK_RESPONSE_CANCEL || 
+		if (	retval == GTK_RESPONSE_CANCEL ||
 			retval == GTK_RESPONSE_DELETE_EVENT ||
 			retval == GTK_RESPONSE_NONE) {
 				break;
@@ -526,8 +378,9 @@
 	char *file;
 	XfceRc *rc;
 
-	//take data from a clearly defined place RADIO_CONFIG
-	file = xfce_resource_save_location (XFCE_RESOURCE_CONFIG, RADIO_CONFIG, TRUE);
+	// Take data from a clearly defined place RADIO_CONFIG
+	file = xfce_resource_save_location (XFCE_RESOURCE_CONFIG, RADIO_CONFIG,
+									TRUE);
 
 	if (G_UNLIKELY (!file))
 		return NULL;
@@ -545,7 +398,8 @@
 	const gchar* text = gtk_label_get_text (GTK_LABEL (label));
 	GtkTreeModel *presets = GTK_TREE_MODEL(data->presets);
 	GtkTreeIter iter;
-	if (find_preset_by_name (presets, text, &iter)) {
+	if (find_preset_by_name (presets, text, &iter))
+	{
 		gtk_tree_model_get (presets, &iter, 1, &data->freq, -1);
 		radio_tune (data);
 	}
@@ -554,14 +408,18 @@
 static gboolean
 mouse_click (GtkWidget* src, GdkEventButton *event, radio_gui* data)
 {
-	if (event->button == 1) {
-		if (!data->on) {
+	if (event->button == 1)
+	{
+		if (!data->on)
 			data->on = radio_start (data);
-		} else {
+		else
+		{
 			data->on = FALSE;
 			radio_stop (data);
 		}
-	} else if (event->button == 2 && data->on) {
+	}
+	else if (event->button == 2 && data->on)
+	{
 		GtkWidget* menu = gtk_menu_new ();
 		GtkWidget* item = gtk_menu_item_new_with_label (_("Presets"));
 		gtk_widget_show (item);
@@ -627,36 +485,46 @@
 	GtkTreePath *path;
 	GtkTreeIter iter, iter1;
 	GtkTreeModel *presets;
-	if (!data->on) 
+
+	if (!data->on)
 		return;
+
 	int direction = event->direction == GDK_SCROLL_UP ? -1 : 1;
 	if (data->scroll == CHANGE_FREQ) {
 		data->freq += direction * FREQ_STEP;
 		if (data->freq > FREQ_MAX) data->freq = FREQ_MIN;
 		if (data->freq < FREQ_MIN) data->freq = FREQ_MAX;
 		radio_tune (data);
-	} else if (data->scroll == CHANGE_PRESET) {
+	}
+	else if (data->scroll == CHANGE_PRESET)
+	{
 		presets = GTK_TREE_MODEL(data->presets);
-		if (!find_preset_by_freq (presets, data->freq, &iter)) {
+		if (!find_preset_by_freq (presets, data->freq, &iter))
+		{
 			// tune to first preset, if it exists
 			if (!gtk_tree_model_get_iter_first (presets, &iter))
 				return;
+
 			gtk_tree_model_get (presets, &iter,
 					1, &data->freq, -1);
 			radio_tune (data);
 			return;
 		}
 		// preset found
-		if (direction == 1) {
+		if (direction == 1)
+		{
 			if (!gtk_tree_model_iter_next (presets, &iter))
 				return;
-			gtk_tree_model_get (presets, &iter,
-					1, &data->freq, -1);
+			gtk_tree_model_get (presets, &iter, 1, &data->freq, -1);
 			radio_tune (data);
-		} else {
+		}
+		else
+		{
 			path = gtk_tree_model_get_path (presets, &iter);
+
 			if (!gtk_tree_path_prev (path))
 				return;
+
 			gtk_tree_model_get_iter (presets, &iter1, path);
 			gtk_tree_path_free (path);
 			gtk_tree_model_get (presets, &iter1,
@@ -705,14 +573,6 @@
 free_presets (radio_gui *data)
 {
 	g_object_unref (data->presets);
-/*	radio_preset *preset = data->presets;
-
-	while (preset != NULL) {
-		free(preset);
-		preset = preset->next;
-	}
-
-	data->presets = NULL;*/
 }
 
 static void
@@ -744,17 +604,23 @@
 	// have to get the freqfact here now because someone else might
 	// turn on the radio
 	fd = open(plugin_data->device, O_RDONLY);
-	if (fd != -1) {
-		if (ioctl(fd, VIDIOCGTUNER, &tuner) == 0) {
+	if (fd != -1)
+	{
+		if (ioctl(fd, VIDIOCGTUNER, &tuner) == 0)
+		{
 			if (tuner.flags & VIDEO_TUNER_LOW)
 				plugin_data->freqfact = 16000;
 			else
 				plugin_data->freqfact = 16;
-		} else {
+		}
+		else
+		{
 			plugin_data->freqfact = 16;
 		}
 		close (fd);
-	} else {
+	}
+	else
+	{
 		plugin_data->freqfact = 16;
 	}
 	plugin_data->show_signal = TRUE;
@@ -822,9 +688,13 @@
 {
 	radio_gui* data = (radio_gui*) pointer;
 	gboolean frq = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(button));
-	if (frq) {
+
+	if (frq)
+	{
 		data->scroll = CHANGE_FREQ;
-	} else {
+	}
+	else
+	{
 		data->scroll = CHANGE_PRESET;
 	}
 }
@@ -865,14 +735,14 @@
 
 	gtk_tree_selection_get_selected (selection, &model, &iter);
 	gtk_list_store_append (GTK_LIST_STORE(model), &iter);
-	gtk_list_store_set    (GTK_LIST_STORE(model), &iter, 
-				0, _("unnamed"), 
+	gtk_list_store_set    (GTK_LIST_STORE(model), &iter,
+				0, _("unnamed"),
 				1, data->freq, -1);
 	gtk_tree_selection_select_iter (selection, &iter);
 	write_config (data, TRUE);
 }
 
-static void 
+static void
 del_button_clicked_cb (GtkWidget *widget, GtkTreeSelection *selection)
 {
 	GtkTreeIter iter;
@@ -880,8 +750,10 @@
 
 	radio_gui *data = g_object_get_data(G_OBJECT(selection), "data");
 
-	if (gtk_tree_selection_get_selected (selection, &model, &iter)){
-		if(gtk_list_store_remove(GTK_LIST_STORE(model), &iter)){
+	if (gtk_tree_selection_get_selected (selection, &model, &iter))
+	{
+		if (gtk_list_store_remove(GTK_LIST_STORE(model), &iter))
+		{
 			gtk_tree_selection_select_iter(selection,&iter);
 		}
 	}
@@ -889,7 +761,7 @@
 	update_tooltip (data);
 }
 
-static void 
+static void
 up_button_clicked_cb (GtkWidget *widget, GtkTreeSelection *selection)
 {
 	GtkTreeIter iter;
@@ -904,21 +776,21 @@
 		{
 			GtkTreeIter iter1 = iter;
 			gtk_tree_model_get_iter (model, &iter1, path);
-			gtk_list_store_swap (GTK_LIST_STORE (model), 
+			gtk_list_store_swap (GTK_LIST_STORE (model),
 					&iter, &iter1);
 		}
 		gtk_tree_path_free (path);
 	}
 	write_config (data, TRUE);
-	/*    
-	 *  update_tooltip берет первое попавшееся значение из нескольких 
-	 *  с одной и той же частотой, а при перемещении записи вверх или 
-	 *  вниз может измениться первое попавшееся значение. 
-	 */   
+	/*  TODO
+	 *  update_tooltip берет первое попавшееся значение из нескольких
+	 *  с одной и той же частотой, а при перемещении записи вверх или
+	 *  вниз может измениться первое попавшееся значение.
+	 */
 	update_tooltip (data);
 }
 
-static void 
+static void
 down_button_clicked_cb (GtkWidget *widget, GtkTreeSelection *selection)
 {
 	GtkTreeIter iter;
@@ -936,29 +808,29 @@
 		}
 	}
 	write_config (data, TRUE);
-	//Читай комментарий выше
+	// See up_button_clicked_cb
 	update_tooltip (data);
 }
 
-static gboolean 
-list_view_key_press_event_cb (GtkWidget *widget, GdkEventKey *event, 
-			      GtkTreeSelection *data)
+static gboolean
+list_view_key_press_event_cb (GtkWidget *widget, GdkEventKey *event,
+							GtkTreeSelection *data)
 {
 	if (event->keyval == GDK_Delete)
 		del_button_clicked_cb(widget, data);
 	if (event->keyval == GDK_Insert)
 		add_button_clicked_cb(widget, data);
-	
+
 	return FALSE;
 }
 
-static void 
-name_cell_edited_cb(GtkCellRendererText *cellrenderertext, gchar *path_str,
-		    gchar *new_val, radio_gui *data)
+static void
+name_cell_edited_cb (GtkCellRendererText *cellrenderertext, gchar *path_str,
+						gchar *new_val, radio_gui *data)
 {
 	GtkTreeIter iter;
 	gboolean valid;
-	
+
 	GtkListStore *presets = data->presets;
 	valid = gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL(presets),
 			&iter, path_str);
@@ -967,22 +839,21 @@
 	gtk_list_store_set (presets, &iter, 0, new_val, -1);
 	write_config (data, TRUE);
 	update_tooltip (data);
-}	
+}
 
-static void 
-freq_cell_edited_cb(GtkCellRendererText *cellrenderertext, gchar *path_str,
-		gchar *new_val, radio_gui *data)
+static void
+freq_cell_edited_cb (GtkCellRendererText *cellrenderertext, gchar *path_str,
+						gchar *new_val, radio_gui *data)
 {
 	GtkTreeIter iter;
 	gboolean valid;
 	gint value;
-	
+
 	value = parse_freq (new_val);
-	//value = g_strtod (new_val, NULL) * 100;
-	
+
 	if (value < FREQ_MIN) value = FREQ_MIN;
 	if (value > FREQ_MAX) value = FREQ_MAX;
-	
+
 	GtkListStore *presets = data->presets;
 	valid = gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL(presets),
 			&iter, path_str);
@@ -996,7 +867,7 @@
 static void
 radio_plugin_create_options (XfcePanelPlugin *plugin, radio_gui *data)
 {
-	DBG("%f", data->freq);
+	DBG("%d", data->freq);
 	GtkWidget *table;
 	GtkWidget *label;
 	GtkWidget *hbox;
@@ -1022,10 +893,8 @@
 	GtkWidget *scrolled_window;
 	GtkWidget *list_view;
 	GtkTreeSelection *selection;
-	GtkTreeIter iter;
 	GtkCellRenderer *cellrenderer;
 	GtkTreeViewColumn *list_column;
-	GtkListStore *list_store;
 
 	xfce_panel_plugin_block_menu (plugin);
 
@@ -1041,34 +910,34 @@
 	g_signal_connect (dialog, "response",
 			G_CALLBACK (radio_plugin_dialog_response), data);
 
-	list_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(data->presets));
+	list_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(data->presets));
 	gtk_widget_set_size_request(list_view, 200, 150);
 	gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list_view), FALSE);
 	gtk_widget_show(list_view);
 
 	cellrenderer = gtk_cell_renderer_text_new();
 	g_object_set (G_OBJECT (cellrenderer),
-		      "mode", GTK_CELL_RENDERER_MODE_EDITABLE, \
-		      "editable", TRUE, NULL);
+		"mode", GTK_CELL_RENDERER_MODE_EDITABLE,
+		"editable", TRUE, NULL);
 	list_column = gtk_tree_view_column_new_with_attributes
-			(NULL, cellrenderer, "text", 0, NULL);
+					(NULL, cellrenderer, "text", 0, NULL);
 	gtk_tree_view_column_set_min_width(list_column, 300);
 	gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), list_column);
-	g_signal_connect(GTK_OBJECT(cellrenderer), "edited", 
+	g_signal_connect(GTK_OBJECT(cellrenderer), "edited",
 			GTK_SIGNAL_FUNC(name_cell_edited_cb), (gpointer)data);
 
 	cellrenderer = gtk_cell_renderer_text_new();
 	g_object_set (G_OBJECT (cellrenderer),
-		      "mode", GTK_CELL_RENDERER_MODE_EDITABLE, \
-		      "editable", TRUE, \
-		      "xalign", 1.0f, NULL);
+		"mode", GTK_CELL_RENDERER_MODE_EDITABLE,
+		"editable", TRUE, \
+		"xalign", 1.0f, NULL);
 	list_column = gtk_tree_view_column_new_with_attributes
 			(NULL, cellrenderer, "text", 1, NULL);
 	gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), list_column);
 	gtk_tree_view_column_set_cell_data_func (list_column, cellrenderer,
-						 cell_float_to_text_cb, 
-						 NULL, NULL);
-	g_signal_connect(GTK_OBJECT(cellrenderer), "edited", 
+						cell_float_to_text_cb,
+						NULL, NULL);
+	g_signal_connect(GTK_OBJECT(cellrenderer), "edited",
 			GTK_SIGNAL_FUNC(freq_cell_edited_cb), (gpointer)data);
 
 	button_box = gtk_hbox_new(FALSE, 0);
@@ -1077,46 +946,43 @@
 	GtkWidget *del_button  = gtk_button_new_from_stock(GTK_STOCK_DELETE);
 	GtkWidget *up_button   = gtk_button_new_from_stock(GTK_STOCK_GO_UP);
 	GtkWidget *down_button = gtk_button_new_from_stock(GTK_STOCK_GO_DOWN);
-	
+
 	gtk_box_pack_end(GTK_BOX(button_box), del_button, FALSE, FALSE, 0);
 	gtk_box_pack_end(GTK_BOX(button_box), add_button, FALSE, FALSE, 0);
 	gtk_box_pack_end(GTK_BOX(button_box), up_button,  FALSE, FALSE, 0);
 	gtk_box_pack_end(GTK_BOX(button_box), down_button,FALSE, FALSE, 0);
-	
+
 	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list_view));
 	gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
 
 	g_object_set_data(G_OBJECT(selection), "data", data);
 
-	g_signal_connect(GTK_OBJECT(add_button), "clicked", 
+	g_signal_connect(GTK_OBJECT(add_button), "clicked",
 		GTK_SIGNAL_FUNC( add_button_clicked_cb), selection);
-	g_signal_connect(GTK_OBJECT(del_button), "clicked", 
+	g_signal_connect(GTK_OBJECT(del_button), "clicked",
 		GTK_SIGNAL_FUNC( del_button_clicked_cb), selection);
-	g_signal_connect(GTK_OBJECT(up_button), "clicked", 
+	g_signal_connect(GTK_OBJECT(up_button), "clicked",
 		GTK_SIGNAL_FUNC(up_button_clicked_cb), selection);
-	g_signal_connect(GTK_OBJECT(down_button), "clicked", 
+	g_signal_connect(GTK_OBJECT(down_button), "clicked",
 		GTK_SIGNAL_FUNC(down_button_clicked_cb), selection);
-	g_signal_connect(GTK_OBJECT(list_view), "key-press-event", 
+	g_signal_connect(GTK_OBJECT(list_view), "key-press-event",
 		GTK_SIGNAL_FUNC(list_view_key_press_event_cb), selection);
-	//g_signal_connect(selection, "changed", 
-	//	GTK_SIGNAL_FUNC(selection_changed_cb), (gpointer)prefs);
 
-	//g_signal_connect(GTK_OBJECT(list_view), "cursor-changed", GTK_SIGNAL_FUNC(list_view_cursor_changed_cb), (gpointer)list_view);
-
 	scrolled_window = gtk_scrolled_window_new(NULL, NULL);
 	gtk_container_add(GTK_CONTAINER(scrolled_window), list_view);
-	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window),
-					    GTK_SHADOW_IN); 
-	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), 
+	gtk_scrolled_window_set_shadow_type(
+					GTK_SCROLLED_WINDOW(scrolled_window),
+					GTK_SHADOW_IN);
+	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
 					GTK_POLICY_AUTOMATIC,
 					GTK_POLICY_AUTOMATIC);
 	gtk_widget_show(scrolled_window);
-	
+
 	preset_box = gtk_vbox_new(FALSE, 4);
-	gtk_box_pack_start(GTK_BOX(preset_box), scrolled_window, 
-			   TRUE, TRUE, 0);
+	gtk_box_pack_start(GTK_BOX(preset_box), scrolled_window,
+			TRUE, TRUE, 0);
 	gtk_box_pack_start(GTK_BOX(preset_box), button_box,
-			   FALSE, FALSE, 0);
+			FALSE, FALSE, 0);
 	gtk_container_set_border_width (GTK_CONTAINER(preset_box), 4);
 	gtk_widget_show_all (preset_box);
 
@@ -1129,12 +995,12 @@
 	gtk_notebook_set_show_tabs (GTK_NOTEBOOK(notebook), TRUE);
 	label_properties = gtk_label_new (_("Properties"));
 	label_presets =	gtk_label_new (_("Presets"));
-	gtk_notebook_append_page (GTK_NOTEBOOK(notebook), preset_box, 
-				  label_presets);
+	gtk_notebook_append_page (GTK_NOTEBOOK(notebook), preset_box,
+								label_presets);
 	gtk_notebook_append_page (GTK_NOTEBOOK(notebook), table,
-				  label_properties); 
+							label_properties);
 	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), notebook,
-			    TRUE, TRUE, 0);
+								TRUE, TRUE, 0);
 	gtk_widget_show (notebook);
 
 	// V4L device
@@ -1299,11 +1165,6 @@
 	gtk_widget_set_size_request (data->signal_bar, size - BORDER, BORDER);
 }
 
-// TODO: move these somewhere else
-#define DEFAULT_NAME "unnamed"
-#define PRESET_NAMES "preset_names"
-#define PRESET_FREQS "preset_freqs"
-
 static void
 write_config_signal (XfcePanelPlugin *plugin, radio_gui *data)
 {
@@ -1331,9 +1192,8 @@
 	xfce_rc_write_bool_entry(rc, "update_display",
 						data->auto_update_display);
 
-	// TODO: why would we not want to write configs? can we only override
-	// parts of the file? find out! :)
-	if (!save_presets) {
+	if (!save_presets)
+	{
 		xfce_rc_close (rc);
 		return;
 	}
@@ -1344,27 +1204,28 @@
 	GtkTreeModel *presets = GTK_TREE_MODEL(data->presets);
 	gboolean valid = gtk_tree_model_get_iter_first (presets, &iter);
 
-	// TODO: 10?
+	// We start at 10 since there seems to be a problem loading keys which
+	// are only 1 char long
 	i = 10;
 	while (valid)
 	{
-		if (i == 10) {
+		if (i == 10)
+		{
 			xfce_rc_delete_group (rc, PRESET_NAMES, FALSE);
 			xfce_rc_delete_group (rc, PRESET_FREQS, FALSE);
 		}
 
-		// TODO: si?
 		gtk_tree_model_get (presets, &iter, 0, &name, 1, &freq, -1);
-		gchar *si = g_strdup_printf ("%d", i);
+		gchar *key = g_strdup_printf ("%d", i);
 		DBG("freq=%d, name=%s", freq, name);
 
 		xfce_rc_set_group (rc, PRESET_NAMES);
-		xfce_rc_write_entry (rc, si, name);
+		xfce_rc_write_entry (rc, key, name);
 		xfce_rc_set_group (rc, PRESET_FREQS);
-		xfce_rc_write_int_entry (rc, si, freq);
+		xfce_rc_write_int_entry (rc, key, freq);
 
 		g_free (name);
-		g_free (si);
+		g_free (key);
 		i++;
 		valid = gtk_tree_model_iter_next (presets, &iter);
 	}
@@ -1372,12 +1233,77 @@
 }
 
 static void
-read_config (XfcePanelPlugin *plugin, radio_gui *data)
+import_old_config (XfcePanelPlugin *plugin, radio_gui *data)
 {
 	const char *value;
 	char *file;
 	XfceRc *rc;
 
+	// Abort if there's nothing to be imported
+	if (!(file = xfce_panel_plugin_lookup_rc_file (plugin)))
+		return;
+
+	DBG ("Importing data from old conig file %s", file);
+
+	rc = xfce_rc_simple_open (file, TRUE);
+	g_free (file);
+
+	if (!rc)
+		return;
+
+	xfce_rc_set_group (rc, "radio plugin");
+
+	data->freq = xfce_rc_read_int_entry (rc, "frq", FREQ_INIT);
+	data->scroll = xfce_rc_read_int_entry (rc, "scroll", CHANGE_FREQ);
+	data->show_signal = xfce_rc_read_bool_entry (rc, "show_signal", TRUE);
+
+	if ((value = xfce_rc_read_entry (rc, "dev", NULL)) && *value)
+		strncpy (data->device, value, MAX_DEVICE_NAME_LENGTH);
+	if ((value = xfce_rc_read_entry (rc, "startup_cmd", NULL)) && *value)
+		strncpy (data->startup_command, value, MAX_COMMAND_LENGTH);
+	if ((value = xfce_rc_read_entry (rc, "shutdown_cmd", NULL)) && *value)
+		strncpy (data->shutdown_command, value, MAX_COMMAND_LENGTH);
+
+	GtkTreeIter iter;
+	GtkListStore *presets = data->presets;
+
+	gchar** entries = xfce_rc_get_entries (rc, "presets");
+	if (entries != NULL)
+	{
+		gchar **entry;
+		entry = entries;
+
+		xfce_rc_set_group (rc, "presets");
+
+		while (*entry)
+		{
+			if ((value = xfce_rc_read_entry (rc, *entry, NULL))
+								&& *value)
+			{
+				gint vfreq = atoi (*entry);
+				const gchar *vname = value;
+
+				DBG("freq=%d, name=%s", vfreq, vname);
+
+				gtk_list_store_append (presets, &iter);
+				gtk_list_store_set (presets, &iter, 0, vname,
+								1, vfreq, -1);
+			}
+			entry++;
+		}
+	}
+	g_strfreev (entries);
+	xfce_rc_close (rc);
+
+	write_config (data, TRUE);
+}
+
+static void
+read_config (XfcePanelPlugin *plugin, radio_gui *data)
+{
+	const char *value;
+	XfceRc *rc;
+
 	if (!(rc = get_config_rc ()))
 		return;
 
@@ -1387,7 +1313,7 @@
 	data->scroll = xfce_rc_read_int_entry (rc, "scroll", CHANGE_FREQ);
 	data->show_signal = xfce_rc_read_bool_entry (rc, "show_signal", TRUE);
 	data->auto_update_display = xfce_rc_read_bool_entry
-					(rc, "update_display", TRUE);
+						(rc, "update_display", TRUE);
 
 	if ((value = xfce_rc_read_entry (rc, "dev", NULL)) && *value)
 		strncpy (data->device, value, MAX_DEVICE_NAME_LENGTH);
@@ -1407,6 +1333,7 @@
 	gchar** freqs = xfce_rc_get_entries (rc, PRESET_FREQS);
 
 	if (names == NULL || freqs == NULL) {
+		import_old_config (plugin, data);
 		xfce_rc_close (rc);
 		return;
 	}

Modified: xfce4-radio-plugin/branches/newpresets/panel-plugin/radio.h
===================================================================
--- xfce4-radio-plugin/branches/newpresets/panel-plugin/radio.h	2008-12-03 01:57:30 UTC (rev 6252)
+++ xfce4-radio-plugin/branches/newpresets/panel-plugin/radio.h	2008-12-03 03:15:20 UTC (rev 6253)
@@ -42,6 +42,10 @@
 
 #define BORDER 8
 
+#define DEFAULT_NAME "unnamed"
+#define PRESET_NAMES "preset_names"
+#define PRESET_FREQS "preset_freqs"
+
 const char RADIO_CONFIG[] = "xfce4/panel/radio.rc";
 
 typedef enum {




More information about the Goodies-commits mailing list