[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