r2640 - in trunk/src/target/OM-2007.2/applications/openmoko-feedreader2: . src
zecke at sita.openmoko.org
zecke at sita.openmoko.org
Sun Aug 5 23:21:28 CEST 2007
Author: zecke
Date: 2007-08-05 23:21:18 +0200 (Sun, 05 Aug 2007)
New Revision: 2640
Modified:
trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/ChangeLog
trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-data.c
trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-data.h
trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-item-view.c
trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-selection-view.c
trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-selection-view.h
Log:
2007-08-05 Holger Hans Peter Freyther <zecke at selfish.org>
Implement filtering of feeds again. Switch the position
of Prev/Next and use the right stock items in feed_item_view_init.
* src/feed-data.c:
(feed_filter_filter_category): Implement
(feed_filter_filter_text): Implement (similiar to _category)
* src/feed-data.h:
* src/feed-item-view.c:
(feed_item_view_init):
* src/feed-selection-view.c:
(treeview_keypress_event): Filter key presses in the treeview and forward to the search entry
(search_toggled):
(search_entry_changed):
(category_combo_update):
(feed_selection_view_init):
* src/feed-selection-view.h:
Modified: trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/ChangeLog 2007-08-05 09:00:11 UTC (rev 2639)
+++ trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/ChangeLog 2007-08-05 21:21:18 UTC (rev 2640)
@@ -1,3 +1,22 @@
+2007-08-05 Holger Hans Peter Freyther <zecke at selfish.org>
+
+ Implement filtering of feeds again. Switch the position
+ of Prev/Next and use the right stock items in feed_item_view_init.
+
+ * src/feed-data.c:
+ (feed_filter_filter_category): Implement
+ (feed_filter_filter_text): Implement (similiar to _category)
+ * src/feed-data.h:
+ * src/feed-item-view.c:
+ (feed_item_view_init):
+ * src/feed-selection-view.c:
+ (treeview_keypress_event): Filter key presses in the treeview and forward to the search entry
+ (search_toggled):
+ (search_entry_changed):
+ (category_combo_update):
+ (feed_selection_view_init):
+ * src/feed-selection-view.h:
+
2007-08-04 Holger Hans Peter Freyther <zecke at selfish.org>
First version that can fetch feeds again and display some part of the
Modified: trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-data.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-data.c 2007-08-05 09:00:11 UTC (rev 2639)
+++ trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-data.c 2007-08-05 21:21:18 UTC (rev 2640)
@@ -27,11 +27,13 @@
#include "feed-data.h"
#include "feed-configuration.h"
#include "rfcdate.h"
+#include "config.h"
#include <mrss.h>
#include <string.h>
#include <stdlib.h>
+#include <glib/gi18n.h>
static gboolean
rss_filter_entries (GtkTreeModel *model, GtkTreeIter *iter, FeedFilter *data)
@@ -412,13 +414,24 @@
}
void
-feed_filter_filter_category (FeedFilter* filter, GtkTreeIter* iter)
+feed_filter_filter_category (FeedFilter* filter, const gchar* text)
{
+ if (filter->category)
+ g_free (filter->category);
+
+ filter->category = g_strdup (text);
+ filter->is_all_filter = strcmp (_("All"), text) == 0;
+ gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter));
}
void
feed_filter_filter_text (FeedFilter* filter, const gchar* text)
{
+ if (filter->filter_string)
+ g_free (filter->filter_string);
+
+ filter->filter_string = g_strdup (text);
+ gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter));
}
GObject*
Modified: trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-data.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-data.h 2007-08-05 09:00:11 UTC (rev 2639)
+++ trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-data.h 2007-08-05 21:21:18 UTC (rev 2640)
@@ -145,7 +145,7 @@
GType feed_filter_get_type (void);
GObject* feed_filter_new (const FeedData*);
void feed_filter_reset (FeedFilter*);
-void feed_filter_filter_category (FeedFilter*, GtkTreeIter*);
+void feed_filter_filter_category (FeedFilter*, const gchar*);
void feed_filter_filter_text (FeedFilter*, const gchar*);
GType feed_sort_get_type (void);
Modified: trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-item-view.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-item-view.c 2007-08-05 09:00:11 UTC (rev 2639)
+++ trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-item-view.c 2007-08-05 21:21:18 UTC (rev 2640)
@@ -80,7 +80,7 @@
GtkWidget* toolbar = gtk_toolbar_new ();
gtk_box_pack_start (GTK_BOX(view), toolbar, FALSE, FALSE, 0);
- view->back = gtk_tool_button_new_from_stock (GTK_STOCK_GO_FORWARD);
+ view->back = gtk_tool_button_new_from_stock (GTK_STOCK_GO_BACK);
gtk_tool_item_set_expand (GTK_TOOL_ITEM(view->back), TRUE);
gtk_toolbar_insert (GTK_TOOLBAR(toolbar), view->back, 0);
g_signal_connect (view->back, "clicked", G_CALLBACK(prev_clicked), view);
Modified: trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-selection-view.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-selection-view.c 2007-08-05 09:00:11 UTC (rev 2639)
+++ trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-selection-view.c 2007-08-05 21:21:18 UTC (rev 2640)
@@ -57,30 +57,80 @@
g_free (message);
}
-gboolean treeview_keypress_event( GtkWidget *tree_view, GdkEventKey *key, FeedSelectionView *data) {
+gboolean treeview_keypress_event( GtkWidget *tree_view, GdkEventKey *key, FeedSelectionView *view) {
if (key->keyval == GDK_Left || key->keyval == GDK_Right || key->keyval == GDK_Up || key->keyval == GDK_Down)
return FALSE;
-#if 0
- moko_tool_box_set_search_visible (data->box, TRUE);
- gtk_entry_set_text (GTK_ENTRY(moko_tool_box_get_entry(data->box)), "");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (view->search_toggle), TRUE);
+ gtk_entry_set_text (GTK_ENTRY(view->search_entry), "");
+ GTK_WIDGET_CLASS(GTK_ENTRY_GET_CLASS(view->search_entry))->key_press_event (GTK_WIDGET(view->search_entry), key);
- /*
- * forward the key event
- */
- GtkEntry *entry = GTK_ENTRY(moko_tool_box_get_entry(data->box));
- GTK_WIDGET_CLASS(GTK_ENTRY_GET_CLASS(entry))->key_press_event (GTK_WIDGET(entry), key);
-#endif
-
return TRUE;
}
static void
+search_toggled (GtkWidget* button, FeedSelectionView* view)
+{
+ gboolean search_active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button));
+
+ if (search_active) {
+ gtk_widget_show (GTK_WIDGET (view->search_entry));
+ gtk_widget_hide (GTK_WIDGET (view->category_combo));
+ gtk_widget_grab_focus (GTK_WIDGET (view->search_entry));
+ } else {
+ gtk_widget_hide (GTK_WIDGET (view->search_entry));
+ gtk_widget_show (GTK_WIDGET (view->category_combo));
+ }
+}
+
+static void
+search_entry_changed (GtkEntry* entry, FeedSelectionView* view)
+{
+ feed_filter_filter_text (view->filter, gtk_entry_get_text (entry));
+}
+
+static void
refresh_feeds_closure (GtkWidget* button, FeedSelectionView* view)
{
feed_data_update_all (RSS_FEED_DATA (feed_data_get_instance ()));
}
+static void
+category_combo_update (FeedSelectionView* view, ...)
+{
+ gtk_list_store_clear (GTK_LIST_STORE (gtk_combo_box_get_model (GTK_COMBO_BOX (view->category_combo))));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (view->category_combo), _("All"));
+
+ GtkTreeModel *store = GTK_TREE_MODEL (feed_configuration_get_configuration ());
+ GtkTreeIter iter;
+
+ gboolean valid = gtk_tree_model_get_iter_first (store, &iter);
+ while (valid) {
+ gchar *category;
+ gtk_tree_model_get (store, &iter, FEED_NAME, &category, -1);
+
+ /*
+ * create the new item(s)
+ */
+ add_mrss_item (data, rss_data, url, category);
+
+ /*
+ * now cache the feed, a bit inefficient as we do not write to a file directly
+ */
+ if (buffer) {
+ moko_cache_write_object (data->cache, url, buffer, size, NULL);
+ free (buffer);
+ }
+
+ mrss_free( rss_data );
+
+next:
+ g_free (url);
+ g_free (category);
+ valid = gtk_tree_model_iter_next (store, &iter);
+ }
+}
+
G_DEFINE_TYPE(FeedSelectionView, feed_selection_view, GTK_TYPE_VBOX)
static void
@@ -106,7 +156,29 @@
/*
* search/filter
*/
+ GtkWidget *hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (view), hbox, FALSE, FALSE, 0);
+ view->search_toggle = gtk_toggle_button_new ();
+ gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (view->search_toggle), FALSE, FALSE, 0);
+ gtk_widget_set_name (GTK_WIDGET (view->search_toggle), "mokosearchbutton");
+ gtk_button_set_image (GTK_BUTTON (view->search_toggle), gtk_image_new_from_stock (GTK_STOCK_FIND, GTK_ICON_SIZE_SMALL_TOOLBAR));
+ g_signal_connect (G_OBJECT (view->search_toggle), "toggled", G_CALLBACK (search_toggled), view);
+
+ view->search_entry = GTK_ENTRY (gtk_entry_new ());
+ gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (view->search_entry), TRUE, TRUE, 0);
+ gtk_widget_set_name (GTK_WIDGET (view->search_entry), "mokosearchentry");
+ g_signal_connect (G_OBJECT (view->search_entry), "changed", G_CALLBACK (search_entry_changed), view);
+ g_object_set (G_OBJECT (view->search_entry), "no-show-all", TRUE, NULL);
+
+ view->category_combo = GTK_WIDGET (gtk_combo_box_new ());
+ gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (view->category_combo), TRUE, TRUE, 0);
+ category_combo_update (view);
+ g_signal_connect (G_OBJECT (view->category_combo), "changed", G_CALLBACK(category_selection_changed), view);
+ g_signal_connect_swapped (feed_configuration_get_configuration (), "row-changed", G_CALLBACK(category_combo_update), view);
+ g_signal_connect_swapped (feed_configuration_get_configuration (), "row-inserted", G_CALLBACK(category_combo_update), view);
+ g_signal_connect_swapped (feed_configuration_get_configuration (), "row-deleted", G_CALLBACK(category_combo_update), view);
+
/*
* selection view
*/
Modified: trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-selection-view.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-selection-view.h 2007-08-05 09:00:11 UTC (rev 2639)
+++ trunk/src/target/OM-2007.2/applications/openmoko-feedreader2/src/feed-selection-view.h 2007-08-05 21:21:18 UTC (rev 2640)
@@ -49,6 +49,10 @@
struct _FeedSelectionView {
GtkVBox parent;
+ GtkEntry *search_entry;
+ GtkWidget *search_toggle;
+ GtkWidget *category_combo;
+
FeedFilter *filter;
FeedSort *sort;
GtkTreeView *view;
More information about the commitlog
mailing list