[Goodies-commits] r7322 - in xfce4-dict/trunk: . lib po

Enrico Troeger enrico at xfce.org
Sun May 10 23:30:28 CEST 2009


Author: enrico
Date: 2009-05-10 21:30:27 +0000 (Sun, 10 May 2009)
New Revision: 7322

Added:
   xfce4-dict/trunk/lib/speedreader.c
   xfce4-dict/trunk/lib/speedreader.h
Modified:
   xfce4-dict/trunk/ChangeLog
   xfce4-dict/trunk/lib/Makefile.am
   xfce4-dict/trunk/lib/common.c
   xfce4-dict/trunk/lib/common.h
   xfce4-dict/trunk/lib/gui.c
   xfce4-dict/trunk/po/POTFILES.in
Log:
Add simple speed reader dialog to train fast reading.

Modified: xfce4-dict/trunk/ChangeLog
===================================================================
--- xfce4-dict/trunk/ChangeLog	2009-05-09 09:34:42 UTC (rev 7321)
+++ xfce4-dict/trunk/ChangeLog	2009-05-10 21:30:27 UTC (rev 7322)
@@ -1,3 +1,10 @@
+2009-05-10  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
+
+ * lib/Makefile.am, lib/common.c, lib/common.h, lib/gui.c,
+   lib/speedreader.c, lib/speedreader.h, po/POTFILES.in:
+   Add simple speed reader dialog to train fast reading.
+
+
 2009-05-09  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
 
  * New release: 0.5.3.

Modified: xfce4-dict/trunk/lib/Makefile.am
===================================================================
--- xfce4-dict/trunk/lib/Makefile.am	2009-05-09 09:34:42 UTC (rev 7321)
+++ xfce4-dict/trunk/lib/Makefile.am	2009-05-10 21:30:27 UTC (rev 7322)
@@ -17,6 +17,8 @@
 	sexy-icon-entry.h							\
 	searchentry.c								\
 	searchentry.h								\
+	speedreader.c								\
+	speedreader.h								\
 	spell.c										\
 	spell.h										\
 	wraplabel.c									\

Modified: xfce4-dict/trunk/lib/common.c
===================================================================
--- xfce4-dict/trunk/lib/common.c	2009-05-09 09:34:42 UTC (rev 7321)
+++ xfce4-dict/trunk/lib/common.c	2009-05-10 21:30:27 UTC (rev 7322)
@@ -367,6 +367,7 @@
 	gint mode_default = DICTMODE_LAST_USED;
 	gint port = 2628;
 	gint panel_entry_size = 150;
+	gint wpm = 400;
 	gboolean show_panel_entry = FALSE;
 	gchar *spell_bin_default = get_spell_program();
 	gchar *spell_dictionary_default = get_default_lang();
@@ -378,6 +379,7 @@
 	const gchar *geo = "-1;0;0;0;0;";
 	const gchar *link_color_str = "#0000ff";
 	const gchar *phon_color_str = "#006300";
+	const gchar *speedreader_font = "Sans 32";
 
 	if ((rc = xfce_rc_config_open(XFCE_RESOURCE_CONFIG, "xfce4-dict/xfce4-dict.rc", TRUE)) != NULL)
 	{
@@ -395,6 +397,9 @@
 		link_color_str = xfce_rc_read_entry(rc, "link_color", link_color_str);
 		phon_color_str = xfce_rc_read_entry(rc, "phonetic_color", phon_color_str);
 
+		speedreader_font = xfce_rc_read_entry(rc, "speedreader_font", speedreader_font);
+		wpm = xfce_rc_read_int_entry(rc, "speedreader_wpm", wpm);
+
 		geo = xfce_rc_read_entry(rc, "geometry", geo);
 		parse_geometry(dd, geo);
 	}
@@ -431,6 +436,9 @@
 	dd->phon_color = g_new0(GdkColor, 1);
 	gdk_color_parse(phon_color_str, dd->phon_color);
 
+	dd->speedreader_wpm = wpm;
+	dd->speedreader_font = g_strdup(speedreader_font);
+
 	xfce_rc_close(rc);
 }
 
@@ -464,6 +472,9 @@
 			dd->geometry[0], dd->geometry[1], dd->geometry[2], dd->geometry[3], dd->geometry[4]);
 		xfce_rc_write_entry(rc, "geometry", geometry_string);
 
+		xfce_rc_write_entry(rc, "speedreader_font", dd->speedreader_font);
+		xfce_rc_write_int_entry(rc, "speedreader_wpm", dd->speedreader_wpm);
+
 		g_free(link_color_str);
 		g_free(phon_color_str);
 		g_free(geometry_string);
@@ -486,6 +497,7 @@
 	g_free(dd->server);
 	g_free(dd->web_url);
 	g_free(dd->spell_bin);
+	g_free(dd->speedreader_font);
 
 	g_free(dd->link_color);
 	g_free(dd->phon_color);

Modified: xfce4-dict/trunk/lib/common.h
===================================================================
--- xfce4-dict/trunk/lib/common.h	2009-05-09 09:34:42 UTC (rev 7321)
+++ xfce4-dict/trunk/lib/common.h	2009-05-10 21:30:27 UTC (rev 7322)
@@ -105,6 +105,10 @@
 
 	GdkColor *link_color;
 	GdkColor *phon_color;
+
+	/* speed reader */
+	gint speedreader_wpm;
+	gchar *speedreader_font;
 } DictData;
 
 

Modified: xfce4-dict/trunk/lib/gui.c
===================================================================
--- xfce4-dict/trunk/lib/gui.c	2009-05-09 09:34:42 UTC (rev 7321)
+++ xfce4-dict/trunk/lib/gui.c	2009-05-10 21:30:27 UTC (rev 7322)
@@ -35,6 +35,7 @@
 #include "sexy-icon-entry.h"
 #include "searchentry.h"
 #include "inline-icon.h"
+#include "speedreader.h"
 
 
 
@@ -392,7 +393,7 @@
 
 	if (button == NULL)
 	{
-		button = gtk_button_new_from_stock("gtk-find");
+		button = gtk_button_new_from_stock(GTK_STOCK_FIND);
 		gtk_widget_show(button);
 		gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
 		g_signal_connect(button, "clicked", G_CALLBACK(entry_button_clicked_cb), dd);
@@ -405,7 +406,7 @@
 	{
 		case DICTMODE_DICT:
 		{
-			image = gtk_image_new_from_stock("gtk-find", GTK_ICON_SIZE_BUTTON);
+			image = gtk_image_new_from_stock(GTK_STOCK_FIND, GTK_ICON_SIZE_BUTTON);
 			break;
 		}
 		case DICTMODE_WEB:
@@ -415,7 +416,7 @@
 		}
 		case DICTMODE_SPELL:
 		{
-			image = gtk_image_new_from_stock("gtk-spell-check", GTK_ICON_SIZE_BUTTON);
+			image = gtk_image_new_from_stock(GTK_STOCK_SPELL_CHECK, GTK_ICON_SIZE_BUTTON);
 			break;
 		}
 		default:
@@ -467,8 +468,15 @@
 }
 
 
- static GtkWidget *create_file_menu(DictData *dd)
+static void speedreader_clicked_cb(GtkButton *button, DictData *dd)
 {
+	GtkWidget *dialog = xfd_speed_reader_new(GTK_WINDOW(dd->window), dd);
+	gtk_widget_show(dialog);
+}
+
+
+static GtkWidget *create_file_menu(DictData *dd)
+{
 	GtkWidget *menubar, *file, *file_menu, *help, *help_menu, *menu_item;
 	GtkAccelGroup *accel_group;
 
@@ -482,6 +490,16 @@
 	file_menu = gtk_menu_new();
 	gtk_menu_item_set_submenu(GTK_MENU_ITEM(file), file_menu);
 
+	menu_item = gtk_image_menu_item_new_with_mnemonic(_("Speed _Reader"));
+	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item),
+		gtk_image_new_from_stock(GTK_STOCK_JUSTIFY_CENTER, GTK_ICON_SIZE_MENU));
+	gtk_widget_add_accelerator(menu_item, "activate", accel_group,
+			GDK_r, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
+	g_signal_connect(menu_item, "activate", G_CALLBACK(speedreader_clicked_cb), dd);
+	gtk_container_add(GTK_CONTAINER(file_menu), menu_item);
+
+	gtk_container_add(GTK_CONTAINER(file_menu), gtk_separator_menu_item_new());
+
 	dd->pref_menu_item = gtk_image_menu_item_new_from_stock("gtk-preferences", accel_group);
 	gtk_widget_add_accelerator(dd->pref_menu_item, "activate", accel_group,
 			GDK_p, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
@@ -525,11 +543,11 @@
 	GtkWidget *main_box, *entry_box, *label_box;
 	GtkWidget *sep, *align, *scrolledwindow_results;
 	GdkPixbuf *icon;
-	GtkWidget *method_chooser, *radio, *label;
+	GtkWidget *method_chooser, *radio, *label, *button;
 
 	dd->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 	gtk_window_set_title(GTK_WINDOW(dd->window), _("Dictionary"));
-	gtk_window_set_default_size(GTK_WINDOW(dd->window), 500, 300);
+	gtk_window_set_default_size(GTK_WINDOW(dd->window), 580, 360);
 	gtk_widget_set_name(dd->window, "Xfce4Dict");
 
 	icon = gdk_pixbuf_new_from_inline(-1, dict_icon_data, FALSE, NULL);
@@ -543,14 +561,14 @@
 	gtk_box_pack_start(GTK_BOX(main_box), create_file_menu(dd), FALSE, TRUE, 0);
 
 	/* entry box (label, entry, buttons) */
-	entry_box = gtk_hbox_new(FALSE, 10);
+	entry_box = gtk_hbox_new(FALSE, 5);
 	gtk_widget_show(entry_box);
 	gtk_container_set_border_width(GTK_CONTAINER(entry_box), 2);
 	gtk_box_pack_start(GTK_BOX(main_box), entry_box, FALSE, TRUE, 5);
 
 	label_box = gtk_hbox_new(FALSE, 5);
 	gtk_widget_show(label_box);
-	gtk_box_pack_start(GTK_BOX(entry_box), label_box, TRUE, TRUE, 0);
+	gtk_box_pack_start(GTK_BOX(entry_box), label_box, TRUE, TRUE, 5);
 
 	dd->main_combo = xfd_search_entry_new(_("Search term"));
 	gtk_widget_show(dd->main_combo);
@@ -570,17 +588,28 @@
 	gtk_alignment_set_padding(GTK_ALIGNMENT(align), 0, 0, 10, 0);
 	gtk_widget_show(align);
 	gtk_container_add(GTK_CONTAINER(align), gtk_label_new(""));
-	gtk_box_pack_start(GTK_BOX(entry_box), align, FALSE, FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(entry_box), align, FALSE, FALSE, 5);
 
-	dd->close_button = gtk_button_new_from_stock((dd->is_plugin) ? "gtk-close" : "gtk-quit");
-	gtk_widget_show(dd->close_button);
-	gtk_box_pack_end(GTK_BOX(entry_box), dd->close_button, FALSE, FALSE, 2);
+	sep = gtk_vseparator_new();
+	gtk_widget_show(sep);
+	gtk_box_pack_start(GTK_BOX(entry_box), sep, FALSE, FALSE, 2);
 
-	/* insert it here and it will(hopefully) be placed before the Close button */
+	button = gtk_button_new_with_mnemonic("_Speed Reader");
+	gtk_button_set_image(GTK_BUTTON(button),
+		gtk_image_new_from_stock(GTK_STOCK_JUSTIFY_CENTER, GTK_ICON_SIZE_MENU));
+	g_signal_connect(button, "clicked", G_CALLBACK(speedreader_clicked_cb), dd);
+	gtk_widget_show(button);
+	gtk_box_pack_start(GTK_BOX(entry_box), button, FALSE, FALSE, 2);
+
 	sep = gtk_vseparator_new();
 	gtk_widget_show(sep);
-	gtk_box_pack_end(GTK_BOX(entry_box), sep, FALSE, FALSE, 5);
+	gtk_box_pack_start(GTK_BOX(entry_box), sep, FALSE, FALSE, 2);
 
+	dd->close_button = gtk_button_new_from_stock(
+		(dd->is_plugin) ? GTK_STOCK_CLOSE : GTK_STOCK_QUIT);
+	gtk_widget_show(dd->close_button);
+	gtk_box_pack_end(GTK_BOX(entry_box), dd->close_button, FALSE, FALSE, 0);
+
 	/* search method chooser */
 	method_chooser = gtk_hbox_new(FALSE, 0);
 	gtk_widget_show(method_chooser);

Added: xfce4-dict/trunk/lib/speedreader.c
===================================================================
--- xfce4-dict/trunk/lib/speedreader.c	                        (rev 0)
+++ xfce4-dict/trunk/lib/speedreader.c	2009-05-10 21:30:27 UTC (rev 7322)
@@ -0,0 +1,393 @@
+/*  $Id$
+ *
+ *  Copyright 2009 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gtk/gtk.h>
+
+#include <libxfcegui4/libxfcegui4.h>
+
+#include "common.h"
+#include "wraplabel.h"
+#include "speedreader.h"
+
+
+typedef struct _XfdSpeedReaderPrivate			XfdSpeedReaderPrivate;
+
+#define XFD_SPEED_READER_GET_PRIVATE(obj)		(G_TYPE_INSTANCE_GET_PRIVATE((obj),\
+			XFD_SPEED_READER_TYPE, XfdSpeedReaderPrivate))
+
+struct _XfdSpeedReaderPrivate
+{
+	GtkWidget *first_page;
+	GtkWidget *second_page;
+
+	GtkWidget *button_start;
+	GtkWidget *button_stop;
+
+	GtkWidget *spin_wpm;
+	GtkWidget *button_font;
+	GtkWidget *display_label;
+	GtkTextBuffer *buffer;
+
+	guint timer_id;
+	gint word_idx;
+	gint words_len;
+	gchar **words;
+
+	DictData *dd;
+};
+
+enum
+{
+	RESPONSE_START,
+	RESPONSE_STOP,
+};
+
+
+G_DEFINE_TYPE(XfdSpeedReader, xfd_speed_reader, GTK_TYPE_DIALOG);
+
+static void sr_stop(XfdSpeedReader *dialog);
+
+
+static void xfd_speed_reader_finalize(GObject *object)
+{
+	g_return_if_fail(object != NULL);
+	g_return_if_fail(IS_XFD_SPEED_READER(object));
+
+	sr_stop(XFD_SPEED_READER(object));
+
+	G_OBJECT_CLASS(xfd_speed_reader_parent_class)->finalize(object);
+}
+
+
+static void xfd_speed_reader_class_init(XfdSpeedReaderClass *klass)
+{
+	GObjectClass *g_object_class;
+
+	g_object_class = G_OBJECT_CLASS(klass);
+	g_object_class->finalize = xfd_speed_reader_finalize;
+
+	g_type_class_add_private((gpointer)klass, sizeof(XfdSpeedReaderPrivate));
+}
+
+
+static gboolean sr_timer(gpointer data)
+{
+	XfdSpeedReaderPrivate *priv = XFD_SPEED_READER_GET_PRIVATE(data);
+
+	if (priv->word_idx >= priv->words_len)
+	{
+		sr_stop(XFD_SPEED_READER(data));
+		return FALSE;
+	}
+
+	/* skip empty elements */
+	while (priv->word_idx < priv->words_len && ! NZV(priv->words[priv->word_idx]))
+		priv->word_idx++;
+
+	if (priv->word_idx < priv->words_len && NZV(priv->words[priv->word_idx]))
+	{
+		gtk_label_set_text(GTK_LABEL(priv->display_label), priv->words[priv->word_idx]);
+		g_message("-%s-", priv->words[priv->word_idx]);
+	}
+
+	priv->word_idx++;
+
+	return TRUE;
+}
+
+
+static void sr_start(XfdSpeedReader *dialog)
+{
+	XfdSpeedReaderPrivate *priv = XFD_SPEED_READER_GET_PRIVATE(dialog);
+	gint wpm;
+	gint interval;
+	const gchar *fontname;
+	PangoFontDescription *pfd;
+	gchar *text;
+	GtkTextIter start, end;
+
+	/* clear the label text */
+	gtk_label_set_text(GTK_LABEL(priv->display_label), NULL);
+
+	/* get the text */
+	gtk_text_buffer_get_start_iter(GTK_TEXT_BUFFER(priv->buffer), &start);
+	gtk_text_buffer_get_end_iter(GTK_TEXT_BUFFER(priv->buffer), &end);
+	text = gtk_text_buffer_get_text(GTK_TEXT_BUFFER(priv->buffer), &start, &end, FALSE);
+	if (! NZV(text))
+	{
+		gtk_dialog_response(GTK_DIALOG(dialog), RESPONSE_STOP);
+		/* FIXME use an own error dialog implementation */
+		xfce_err(_("You must enter a text."));
+		return;
+	}
+
+	/* set the font */
+	fontname = gtk_font_button_get_font_name(GTK_FONT_BUTTON(priv->button_font));
+	pfd = pango_font_description_from_string(fontname);
+	gtk_widget_modify_font(priv->display_label, pfd);
+	pango_font_description_free(pfd);
+
+	/* calculate the rate */
+	wpm = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(priv->spin_wpm));
+	interval = 60000 / wpm;
+
+	/* save the settings */
+	priv->dd->speedreader_wpm = wpm;
+	g_free(priv->dd->speedreader_font);
+	priv->dd->speedreader_font = g_strdup(fontname);
+
+	/* prepare word list and start the timer */
+	priv->word_idx = 0;
+	priv->words = g_strsplit_set(text, " ,.-_=\"\t\n\r", -1);
+	priv->words_len = g_strv_length(priv->words);
+
+	priv->timer_id = g_timeout_add(interval, sr_timer, dialog);
+}
+
+
+static void sr_stop(XfdSpeedReader *dialog)
+{
+	XfdSpeedReaderPrivate *priv = XFD_SPEED_READER_GET_PRIVATE(dialog);
+
+	if (priv->timer_id > 0)
+	{
+		g_source_remove(priv->timer_id);
+		priv->timer_id = 0;
+
+		g_strfreev(priv->words);
+		priv->words = NULL;
+	}
+}
+
+
+static void xfd_speed_reader_response_cb(XfdSpeedReader *dialog, gint response, gpointer data)
+{
+	XfdSpeedReaderPrivate *priv = XFD_SPEED_READER_GET_PRIVATE(dialog);
+
+	if (response == GTK_RESPONSE_CLOSE)
+	{
+		gtk_widget_destroy(GTK_WIDGET(dialog));
+	}
+	else if  (response == RESPONSE_START)
+	{
+		gtk_widget_hide(priv->button_start);
+		gtk_widget_show(priv->button_stop);
+
+		gtk_widget_hide(priv->first_page);
+		gtk_widget_show(priv->second_page);
+
+		sr_start(dialog);
+	}
+	else if  (response == RESPONSE_STOP)
+	{
+		gtk_widget_hide(priv->button_stop);
+		gtk_widget_show(priv->button_start);
+
+		gtk_widget_hide(priv->second_page);
+		gtk_widget_show(priv->first_page);
+
+		sr_stop(dialog);
+	}
+}
+
+
+static void sr_open_clicked_cb(GtkButton *button, XfdSpeedReader *window)
+{
+	GtkWidget *dialog;
+
+	dialog = gtk_file_chooser_dialog_new(_("Choose a file to load"),
+		GTK_WINDOW(window),
+		GTK_FILE_CHOOSER_ACTION_OPEN,
+		GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+		GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+		NULL);
+
+	gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT);
+	gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);
+	gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dialog), TRUE);
+	gtk_window_set_type_hint(GTK_WINDOW(dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+	gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), FALSE);
+	gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dialog), FALSE);
+
+	if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+	{
+		gchar *filename;
+		gchar *text;
+		gsize len;
+		XfdSpeedReaderPrivate *priv = XFD_SPEED_READER_GET_PRIVATE(window);
+
+		filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+		if (g_file_get_contents(filename, &text, &len, NULL))
+		{
+			gtk_text_buffer_set_text(GTK_TEXT_BUFFER(priv->buffer), text, len);
+			g_free(text);
+		}
+		else
+			xfce_err("The file '%s' could not be loaded.", filename);
+
+		g_free(filename);
+	}
+	gtk_widget_destroy(dialog);
+}
+
+
+static void sr_clear_clicked_cb(GtkButton *button, GtkTextBuffer *buffer)
+{
+	gtk_text_buffer_set_text(buffer, "", 0);
+}
+
+
+static void xfd_speed_reader_init(XfdSpeedReader *dialog)
+{
+	GtkWidget *label_intro, *label_words, *label_font;
+	GtkWidget *vbox, *hbox_words, *hbox_font, *swin, *textview;
+	GtkWidget *vbox_text_buttons, *hbox_text, *button_clear, *button_open;
+	GtkSizeGroup *sizegroup;
+	XfdSpeedReaderPrivate *priv = XFD_SPEED_READER_GET_PRIVATE(dialog);
+
+	gtk_window_set_title(GTK_WINDOW(dialog), _("Speed Reader"));
+	gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);
+	gtk_window_set_default_size(GTK_WINDOW(dialog), 400, 300);
+	gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CLOSE);
+	gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE);
+	gtk_widget_set_name(GTK_WIDGET(dialog), "Xfce4Dict");
+
+	/* First page */
+	label_intro = xfd_wrap_label_new(
+		_("This is an easy speed reading utility to help train you to read faster. "
+		  "It does this by flashing words at a rapid rate on the screen."));
+
+	label_words = gtk_label_new_with_mnemonic(_("_Words per minute:"));
+	gtk_misc_set_alignment(GTK_MISC(label_words), 1, 0.5);
+
+	priv->spin_wpm = gtk_spin_button_new_with_range(5.0, 10000.0, 5);
+	gtk_label_set_mnemonic_widget(GTK_LABEL(label_words), priv->spin_wpm);
+
+	hbox_words = gtk_hbox_new(FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(hbox_words), label_words, FALSE, FALSE, 6);
+	gtk_box_pack_start(GTK_BOX(hbox_words), priv->spin_wpm, FALSE, FALSE, 6);
+
+	label_font = gtk_label_new_with_mnemonic(_("_Font Size:"));
+	gtk_misc_set_alignment(GTK_MISC(label_font), 1, 0.5);
+
+	priv->button_font = gtk_font_button_new();
+	gtk_label_set_mnemonic_widget(GTK_LABEL(label_font), priv->button_font);
+
+	hbox_font = gtk_hbox_new(FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(hbox_font), label_font, FALSE, FALSE, 6);
+	gtk_box_pack_start(GTK_BOX(hbox_font), priv->button_font, FALSE, FALSE, 6);
+
+	sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+	gtk_size_group_add_widget(sizegroup, label_words);
+	gtk_size_group_add_widget(sizegroup, label_font);
+	g_object_unref(G_OBJECT(sizegroup));
+
+	textview = gtk_text_view_new();
+	priv->buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
+	gtk_text_buffer_set_text(priv->buffer,
+		_("Enter some text here you would like to read.\n\n"
+		  "Be relaxed and make yourself comfortable, then "
+		  "press Start to begin speed reading."),
+		-1);
+
+	swin = gtk_scrolled_window_new(NULL, NULL);
+	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(swin), GTK_SHADOW_IN);
+	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin),
+					GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+	gtk_container_add(GTK_CONTAINER(swin), textview);
+
+	button_open = gtk_button_new();
+	gtk_button_set_image(GTK_BUTTON(button_open),
+		gtk_image_new_from_stock(GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU));
+	g_signal_connect(button_open, "clicked", G_CALLBACK(sr_open_clicked_cb), dialog);
+#if GTK_CHECK_VERSION(2, 12, 0)
+	gtk_widget_set_tooltip_text(button_open, _("Load the contents of a file"));
+#endif
+
+	button_clear = gtk_button_new();
+	gtk_button_set_image(GTK_BUTTON(button_clear),
+		gtk_image_new_from_stock(GTK_STOCK_CLEAR, GTK_ICON_SIZE_MENU));
+	g_signal_connect(button_clear, "clicked", G_CALLBACK(sr_clear_clicked_cb), priv->buffer);
+#if GTK_CHECK_VERSION(2, 12, 0)
+	gtk_widget_set_tooltip_text(button_clear, _("Clear the contents of the text field"));
+#endif
+
+	vbox_text_buttons = gtk_vbox_new(FALSE, 6);
+	gtk_box_pack_start(GTK_BOX(vbox_text_buttons), button_open, FALSE, FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(vbox_text_buttons), button_clear, FALSE, FALSE, 0);
+
+	hbox_text = gtk_hbox_new(FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(hbox_text), swin, TRUE, TRUE, 0);
+	gtk_box_pack_start(GTK_BOX(hbox_text), vbox_text_buttons, FALSE, FALSE, 3);
+
+	priv->button_start = gtk_dialog_add_button(GTK_DIALOG(dialog), _("_Start"), RESPONSE_START);
+	priv->button_stop = gtk_dialog_add_button(GTK_DIALOG(dialog), _("St_op"), RESPONSE_STOP);
+	gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
+
+	gtk_widget_hide(priv->button_stop);
+
+	gtk_button_set_image(GTK_BUTTON(priv->button_start),
+		gtk_image_new_from_stock(GTK_STOCK_MEDIA_PLAY, GTK_ICON_SIZE_MENU));
+	gtk_button_set_image(GTK_BUTTON(priv->button_stop),
+		gtk_image_new_from_stock(GTK_STOCK_MEDIA_STOP, GTK_ICON_SIZE_MENU));
+
+	gtk_widget_grab_focus(textview);
+
+	g_signal_connect(dialog, "response", G_CALLBACK(xfd_speed_reader_response_cb), NULL);
+
+	vbox = gtk_vbox_new(FALSE, 6);
+	gtk_box_pack_start(GTK_BOX(vbox), label_intro, FALSE, FALSE, 6);
+	gtk_box_pack_start(GTK_BOX(vbox), hbox_words, FALSE, FALSE, 6);
+	gtk_box_pack_start(GTK_BOX(vbox), hbox_font, FALSE, FALSE, 6);
+	gtk_box_pack_start(GTK_BOX(vbox), hbox_text, TRUE, TRUE, 0);
+
+	priv->first_page = vbox;
+
+	/* Second page */
+	priv->display_label = gtk_label_new(NULL);
+	gtk_widget_show(priv->display_label);
+
+	vbox = gtk_vbox_new(FALSE, 6);
+	gtk_box_pack_start(GTK_BOX(vbox), priv->display_label, TRUE, TRUE, 6);
+
+	priv->second_page = vbox;
+
+	gtk_widget_show_all(priv->first_page);
+	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), priv->first_page, TRUE, TRUE, 6);
+	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), priv->second_page, TRUE, TRUE, 6);
+}
+
+
+GtkWidget *xfd_speed_reader_new(GtkWindow *parent, DictData *dd)
+{
+	GtkWidget *dialog = g_object_new(XFD_SPEED_READER_TYPE, "transient-for", parent, NULL);
+	XfdSpeedReaderPrivate *priv = XFD_SPEED_READER_GET_PRIVATE(dialog);
+
+	gtk_spin_button_set_value(GTK_SPIN_BUTTON(priv->spin_wpm), dd->speedreader_wpm);
+	gtk_font_button_set_font_name(GTK_FONT_BUTTON(priv->button_font), dd->speedreader_font);
+
+	priv->dd = dd;
+
+	return dialog;
+}
+


Property changes on: xfce4-dict/trunk/lib/speedreader.c
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Added: xfce4-dict/trunk/lib/speedreader.h
===================================================================
--- xfce4-dict/trunk/lib/speedreader.h	                        (rev 0)
+++ xfce4-dict/trunk/lib/speedreader.h	2009-05-10 21:30:27 UTC (rev 7322)
@@ -0,0 +1,54 @@
+/*  $Id$
+ *
+ *  Copyright 2009 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef __SPEEDREADER_H__
+#define __SPEEDREADER_H__
+
+G_BEGIN_DECLS
+
+#define XFD_SPEED_READER_TYPE				(xfd_speed_reader_get_type())
+#define XFD_SPEED_READER(obj)				(G_TYPE_CHECK_INSTANCE_CAST((obj),\
+			XFD_SPEED_READER_TYPE, XfdSpeedReader))
+#define XFD_SPEED_READER_CLASS(klass)		(G_TYPE_CHECK_CLASS_CAST((klass),\
+			XFD_SPEED_READER_TYPE, XfdSpeedReaderClass))
+#define IS_XFD_SPEED_READER(obj)			(G_TYPE_CHECK_INSTANCE_TYPE((obj),\
+			XFD_SPEED_READER_TYPE))
+#define IS_XFD_SPEED_READER_CLASS(klass)	(G_TYPE_CHECK_CLASS_TYPE((klass),\
+			XFD_SPEED_READER_TYPE))
+
+typedef struct _XfdSpeedReader			XfdSpeedReader;
+typedef struct _XfdSpeedReaderClass		XfdSpeedReaderClass;
+
+struct _XfdSpeedReader
+{
+	GtkDialog parent;
+};
+
+struct _XfdSpeedReaderClass
+{
+	GtkDialogClass parent_class;
+};
+
+GType		xfd_speed_reader_get_type		(void);
+GtkWidget*	xfd_speed_reader_new			(GtkWindow *parent, DictData *dd);
+
+G_END_DECLS
+
+#endif /* __SPEEDREADER_H__ */


Property changes on: xfce4-dict/trunk/lib/speedreader.h
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Modified: xfce4-dict/trunk/po/POTFILES.in
===================================================================
--- xfce4-dict/trunk/po/POTFILES.in	2009-05-09 09:34:42 UTC (rev 7321)
+++ xfce4-dict/trunk/po/POTFILES.in	2009-05-10 21:30:27 UTC (rev 7322)
@@ -4,6 +4,7 @@
 src/xfce4-dict.c
 src/xfce4-dict.desktop.in
 lib/spell.c
+lib/speedreader.c
 lib/common.c
 lib/dictd.c
 lib/gui.c




More information about the Goodies-commits mailing list