[Goodies-commits] r7710 - in xfce4-dict/trunk: . lib
Enrico Troeger
enrico at xfce.org
Thu Jul 9 19:58:19 CEST 2009
Author: enrico
Date: 2009-07-09 17:58:19 +0000 (Thu, 09 Jul 2009)
New Revision: 7710
Modified:
xfce4-dict/trunk/ChangeLog
xfce4-dict/trunk/lib/common.c
xfce4-dict/trunk/lib/common.h
xfce4-dict/trunk/lib/speedreader.c
Log:
Implement word grouping option for Speed Reading.
Modified: xfce4-dict/trunk/ChangeLog
===================================================================
--- xfce4-dict/trunk/ChangeLog 2009-07-09 15:14:15 UTC (rev 7709)
+++ xfce4-dict/trunk/ChangeLog 2009-07-09 17:58:19 UTC (rev 7710)
@@ -1,3 +1,9 @@
+2009-07-09 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
+
+ * lib/common.c, lib/common.h, lib/speedreader.c:
+ Implement word grouping option for Speed Reading.
+
+
2009-07-07 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* lib/common.c, lib/common.h, lib/gui.c, lib/prefs.c:
Modified: xfce4-dict/trunk/lib/common.c
===================================================================
--- xfce4-dict/trunk/lib/common.c 2009-07-09 15:14:15 UTC (rev 7709)
+++ xfce4-dict/trunk/lib/common.c 2009-07-09 17:58:19 UTC (rev 7710)
@@ -379,6 +379,7 @@
gint port = 2628;
gint panel_entry_size = 150;
gint wpm = 400;
+ gint grouping = 1;
gboolean mark_paragraphs = FALSE;
gboolean show_panel_entry = FALSE;
gchar *spell_bin_default = get_spell_program();
@@ -415,6 +416,7 @@
speedreader_font = xfce_rc_read_entry(rc, "speedreader_font", speedreader_font);
wpm = xfce_rc_read_int_entry(rc, "speedreader_wpm", wpm);
+ grouping = xfce_rc_read_int_entry(rc, "speedreader_grouping", grouping);
mark_paragraphs = xfce_rc_read_bool_entry(rc, "speedreader_mark_paragraphs", mark_paragraphs);
geo = xfce_rc_read_entry(rc, "geometry", geo);
@@ -462,6 +464,7 @@
dd->speedreader_mark_paragraphs = mark_paragraphs;
dd->speedreader_wpm = wpm;
+ dd->speedreader_grouping = grouping;
dd->speedreader_font = g_strdup(speedreader_font);
xfce_rc_close(rc);
@@ -504,6 +507,7 @@
xfce_rc_write_entry(rc, "speedreader_font", dd->speedreader_font);
xfce_rc_write_int_entry(rc, "speedreader_wpm", dd->speedreader_wpm);
+ xfce_rc_write_int_entry(rc, "speedreader_grouping", dd->speedreader_grouping);
xfce_rc_write_bool_entry(rc, "speedreader_mark_paragraphs", dd->speedreader_mark_paragraphs);
g_free(link_color_str);
Modified: xfce4-dict/trunk/lib/common.h
===================================================================
--- xfce4-dict/trunk/lib/common.h 2009-07-09 15:14:15 UTC (rev 7709)
+++ xfce4-dict/trunk/lib/common.h 2009-07-09 17:58:19 UTC (rev 7710)
@@ -119,6 +119,7 @@
/* speed reader */
gint speedreader_wpm;
+ gint speedreader_grouping;
gchar *speedreader_font;
gboolean speedreader_mark_paragraphs;
} DictData;
Modified: xfce4-dict/trunk/lib/speedreader.c
===================================================================
--- xfce4-dict/trunk/lib/speedreader.c 2009-07-09 15:14:15 UTC (rev 7709)
+++ xfce4-dict/trunk/lib/speedreader.c 2009-07-09 17:58:19 UTC (rev 7710)
@@ -43,6 +43,7 @@
GtkWidget *button_stop;
GtkWidget *spin_wpm;
+ GtkWidget *spin_grouping;
GtkWidget *button_font;
GtkWidget *check_mark_paragraphs;
GtkWidget *display_label;
@@ -53,6 +54,9 @@
gint words_len;
gchar **words;
+ GString *group;
+ gsize group_size;
+
DictData *dd;
};
@@ -264,6 +268,7 @@
static gboolean sr_timer(gpointer data)
{
XfdSpeedReaderPrivate *priv = XFD_SPEED_READER_GET_PRIVATE(data);
+ gsize i;
if (priv->word_idx >= priv->words_len)
{
@@ -272,17 +277,24 @@
return FALSE;
}
- /* skip empty elements */
- while (priv->word_idx < priv->words_len && ! NZV(priv->words[priv->word_idx]))
+ for (i = 0; (i < priv->group_size) && (priv->word_idx < priv->words_len); i++)
+ {
+ /* 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)
+ {
+ g_string_append(priv->group, priv->words[priv->word_idx]);
+ if (i < (priv->group_size - 1))
+ g_string_append_c(priv->group, ' ');
+ }
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]);
}
+ if (NZV(priv->group->str))
+ gtk_label_set_text(GTK_LABEL(priv->display_label), priv->group->str);
+ g_string_erase(priv->group, 0, -1);
- priv->word_idx++;
-
return TRUE;
}
@@ -290,7 +302,7 @@
static void sr_start(XfdSpeedReader *dialog)
{
XfdSpeedReaderPrivate *priv = XFD_SPEED_READER_GET_PRIVATE(dialog);
- gint wpm;
+ gint wpm = 400, grouping;
gint interval;
const gchar *fontname;
PangoFontDescription *pfd;
@@ -323,17 +335,25 @@
gtk_widget_modify_font(priv->display_label, pfd);
pango_font_description_free(pfd);
+ /* word grouping */
+ grouping = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(priv->spin_grouping));
+ if (grouping >= 1 && grouping < 100) /* paranoia */
+ priv->group_size = grouping;
+
/* calculate the rate */
wpm = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(priv->spin_wpm));
- interval = 60000 / wpm;
+ if (wpm >= 1)
+ interval = 60000 / wpm;
/* save the settings */
priv->dd->speedreader_wpm = wpm;
+ priv->dd->speedreader_grouping = grouping;
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->group = g_string_new(NULL);
/* replace Unicode dashes and spaces and mark paragraphs */
cleaned_text = sr_replace_unicode_characters(text, priv->dd->speedreader_mark_paragraphs);
priv->words = sr_strsplit_set(cleaned_text, " -_=\t\n\r");
@@ -355,6 +375,8 @@
g_source_remove(priv->timer_id);
priv->timer_id = 0;
+ g_string_free(priv->group, TRUE);
+ priv->group = NULL;
g_strfreev(priv->words);
priv->words = NULL;
}
@@ -440,17 +462,30 @@
}
+static void sr_spin_grouping_changed_cb(GtkSpinButton *button, GtkLabel *label)
+{
+ gint count = gtk_spin_button_get_value_as_int(button);
+ gchar *text = g_strdup_printf(ngettext(
+ "(display %d word at a time)",
+ "(display %d words at a time)", count),
+ count);
+
+ gtk_label_set_text(label, text);
+ g_free(text);
+}
+
+
static void xfd_speed_reader_init(XfdSpeedReader *dialog)
{
- GtkWidget *label_intro, *label_words, *label_font;
- GtkWidget *vbox, *hbox_words, *hbox_font, *swin, *textview;
+ GtkWidget *label_intro, *label_words, *label_font, *label_grouping, *label_grouping_desc;
+ GtkWidget *vbox, *hbox_words, *hbox_font, *hbox_grouping, *swin, *textview;
GtkWidget *vbox_text_buttons, *hbox_text, *button_clear, *button_open;
GtkSizeGroup *sizegroup;
XfdSpeedReaderPrivate *priv = XFD_SPEED_READER_GET_PRIVATE(dialog);
xfd_speed_reader_set_window_title(dialog, XSR_STATE_INITIAL);
gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE);
- gtk_window_set_default_size(GTK_WINDOW(dialog), 400, 300);
+ gtk_window_set_default_size(GTK_WINDOW(dialog), 400, 330);
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");
@@ -460,7 +495,7 @@
_("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:"));
+ 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);
@@ -473,6 +508,24 @@
gtk_box_pack_start(GTK_BOX(hbox_words), priv->spin_wpm, FALSE, FALSE, 6);
gtk_box_pack_start(GTK_BOX(hbox_words), priv->check_mark_paragraphs, FALSE, FALSE, 12);
+ label_grouping = gtk_label_new_with_mnemonic(_("Word _Grouping:"));
+ gtk_misc_set_alignment(GTK_MISC(label_grouping), 1, 0.5);
+
+ label_grouping_desc = gtk_label_new(NULL);
+
+ priv->spin_grouping = gtk_spin_button_new_with_range(1.0, 100.0, 1);
+ gtk_label_set_mnemonic_widget(GTK_LABEL(label_grouping), priv->spin_grouping);
+ //~ g_signal_connect(priv->spin_grouping, "value-changed",
+ //~ G_CALLBACK(sr_spin_grouping_changed_cb), label_grouping_desc);
+ g_signal_connect(priv->spin_grouping, "value-changed",
+ G_CALLBACK(sr_spin_grouping_changed_cb), label_grouping_desc);
+ sr_spin_grouping_changed_cb(GTK_SPIN_BUTTON(priv->spin_grouping), GTK_LABEL(label_grouping_desc));
+
+ hbox_grouping = gtk_hbox_new(FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox_grouping), label_grouping, FALSE, FALSE, 6);
+ gtk_box_pack_start(GTK_BOX(hbox_grouping), priv->spin_grouping, FALSE, FALSE, 6);
+ gtk_box_pack_start(GTK_BOX(hbox_grouping), label_grouping_desc, FALSE, FALSE, 6);
+
label_font = gtk_label_new_with_mnemonic(_("_Font Size:"));
gtk_misc_set_alignment(GTK_MISC(label_font), 1, 0.5);
@@ -485,6 +538,7 @@
sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
gtk_size_group_add_widget(sizegroup, label_words);
+ gtk_size_group_add_widget(sizegroup, label_grouping);
gtk_size_group_add_widget(sizegroup, label_font);
g_object_unref(G_OBJECT(sizegroup));
@@ -541,9 +595,10 @@
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), label_intro, FALSE, FALSE, 5);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox_words, FALSE, FALSE, 3);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox_grouping, FALSE, FALSE, 3);
+ gtk_box_pack_start(GTK_BOX(vbox), hbox_font, FALSE, FALSE, 3);
gtk_box_pack_start(GTK_BOX(vbox), hbox_text, TRUE, TRUE, 0);
priv->first_page = vbox;
@@ -572,6 +627,7 @@
XfdSpeedReaderPrivate *priv = XFD_SPEED_READER_GET_PRIVATE(dialog);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(priv->spin_wpm), dd->speedreader_wpm);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(priv->spin_grouping), dd->speedreader_grouping);
gtk_font_button_set_font_name(GTK_FONT_BUTTON(priv->button_font), dd->speedreader_font);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->check_mark_paragraphs),
dd->speedreader_mark_paragraphs);
More information about the Goodies-commits
mailing list