#include "modest-ui-constants.h"
#include "widgets/modest-window.h"
#include <modest-account-protocol.h>
+#ifdef MODEST_TOOLKIT_HILDON2
+#include <hildon/hildon.h>
+#endif
/* Folder view drag types */
const GtkTargetEntry folder_view_drag_types[] =
GtkTreeIter *iter,
gpointer data);
-static gboolean on_key_pressed (GtkWidget *self,
- GdkEventKey *event,
- gpointer user_data);
-
static void on_configuration_key_changed (ModestConf* conf,
const gchar *key,
ModestConfEvent event,
gchar **hidding_ids;
guint n_selected;
ModestFolderViewFilter filter;
+#ifdef MODEST_TOOLKIT_HILDON2
+ GtkWidget *live_search;
+#endif
TnyFolderStoreQuery *query;
gboolean do_refresh;
TnyFolder *folder;
gboolean is_special;
TnyFolderType folder_type;
+ gboolean l_use_markup;
if (!TNY_IS_FOLDER (instance))
return;
g_object_unref (account);
*item_name = g_string_free (buffer, FALSE);
- *use_markup = FALSE;
+ l_use_markup = FALSE;
} else {
- *use_markup = FALSE;
+ l_use_markup = FALSE;
}
+ if (use_markup)
+ *use_markup = l_use_markup;
+}
+
+static void
+replace_special_folder_prefix (gchar **item_name)
+{
+ const gchar *separator;
+ gchar *prefix;
+
+ if (item_name == NULL || *item_name == NULL || **item_name == '\0')
+ return;
+ separator = g_strstr_len (*item_name, -1, MODEST_FOLDER_PATH_SEPARATOR);
+ if (separator == NULL)
+ return;
+
+ prefix = g_strndup (*item_name, separator - *item_name);
+ g_strstrip (prefix);
+
+ if (prefix && *prefix != '\0') {
+ TnyFolderType folder_type;
+ gchar *new_name;
+ gchar *downcase;
+
+ downcase = g_utf8_strdown (prefix, -1);
+ g_free (prefix);
+ prefix = downcase;
+
+ if (strcmp (downcase, "inbox") == 0) {
+ folder_type = TNY_FOLDER_TYPE_INBOX;
+ new_name = g_strconcat (_("mcen_me_folder_inbox"), separator, NULL);
+ g_free (*item_name);
+ *item_name = new_name;
+ } else {
+ folder_type = modest_local_folder_info_get_type (prefix);
+ switch (folder_type) {
+ case TNY_FOLDER_TYPE_INBOX:
+ case TNY_FOLDER_TYPE_ARCHIVE:
+ new_name = g_strconcat (modest_local_folder_info_get_type_display_name (folder_type), separator, NULL);
+ g_free (*item_name);
+ *item_name = new_name;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ g_free (prefix);
}
static void
format_compact_style (&item_name, instance, priv->mailbox,
item_weight == 800,
multiaccount, &use_markup);
+ } else {
+ replace_special_folder_prefix (&item_name);
}
if (item_name && item_weight) {
gtk_tree_view_column_set_fixed_width (column, TRUE);
gtk_tree_view_set_headers_clickable (GTK_TREE_VIEW(treeview), FALSE);
gtk_tree_view_set_enable_search (GTK_TREE_VIEW(treeview), FALSE);
+ gtk_tree_view_set_rules_hint ((GtkTreeView *) treeview, TRUE);
/* Add column */
gtk_tree_view_append_column (GTK_TREE_VIEW(treeview),column);
priv->outbox_deleted_handler = 0;
priv->reexpand = TRUE;
priv->signal_handlers = 0;
+#ifdef MODEST_TOOLKIT_HILDON2
+ priv->live_search = NULL;
+#endif
/* Initialize the local account name */
conf = modest_runtime_get_conf();
/* Build treeview */
add_columns (GTK_WIDGET (obj));
- /* Connect signals */
- g_signal_connect (G_OBJECT (obj),
- "key-press-event",
- G_CALLBACK (on_key_pressed), NULL);
-
priv->display_name_changed_signal =
g_signal_connect (modest_runtime_get_account_mgr (),
"display_name_changed",
g_signal_connect (self, "expose-event", G_CALLBACK (modest_folder_view_on_map), NULL);
+ /* Hide headers by default */
+ gtk_tree_view_set_headers_visible ((GtkTreeView *)self, FALSE);
+
return GTK_WIDGET(self);
}
/* apply special filters */
if (retval && (priv->filter & MODEST_FOLDER_VIEW_FILTER_HIDE_ACCOUNTS)) {
if (TNY_IS_ACCOUNT (instance))
- return FALSE;
+ retval = FALSE;
}
if (retval && (priv->filter & MODEST_FOLDER_VIEW_FILTER_HIDE_FOLDERS)) {
if (TNY_IS_FOLDER (instance))
- return FALSE;
+ retval = FALSE;
}
if (retval && (priv->filter & MODEST_FOLDER_VIEW_FILTER_HIDE_LOCAL_FOLDERS)) {
if (TNY_IS_ACCOUNT (instance)) {
if (modest_tny_account_is_virtual_local_folders (TNY_ACCOUNT (instance)))
- return FALSE;
+ retval = FALSE;
} else if (TNY_IS_FOLDER (instance)) {
if (modest_tny_folder_is_local_folder (TNY_FOLDER (instance)))
- return FALSE;
+ retval = FALSE;
}
}
if (retval && (priv->filter & MODEST_FOLDER_VIEW_FILTER_HIDE_MCC_FOLDERS)) {
if (TNY_IS_ACCOUNT (instance)) {
if (modest_tny_account_is_memory_card_account (TNY_ACCOUNT (instance)))
- return FALSE;
+ retval = FALSE;
} else if (TNY_IS_FOLDER (instance)) {
if (modest_tny_folder_is_memory_card_folder (TNY_FOLDER (instance)))
- return FALSE;
+ retval = FALSE;
}
}
/* A mailbox is a fake folder with an @ in the middle of the name */
if (!TNY_IS_FOLDER (instance) ||
!(tny_folder_get_caps (TNY_FOLDER (instance)) & TNY_FOLDER_CAPS_NOSELECT)) {
- return FALSE;
+ retval = FALSE;
} else {
const gchar *folder_name;
folder_name = tny_folder_get_name (TNY_FOLDER (instance));
if (!folder_name || strchr (folder_name, '@') == NULL)
- return FALSE;
+ retval = FALSE;
}
}
}
}
+#ifdef MODEST_TOOLKIT_HILDON2
+ if (retval && (priv->live_search)) {
+ const gchar *needle;
+ needle = hildon_live_search_get_text (HILDON_LIVE_SEARCH (priv->live_search));
+ if (needle && needle[0] != '\0') {
+ gchar *haystack;
+ gboolean is_local;
+
+ haystack = g_strdup (fname);
+ if (type != TNY_FOLDER_TYPE_ROOT) {
+ is_local = modest_tny_folder_is_local_folder (TNY_FOLDER (instance)) ||
+ modest_tny_folder_is_memory_card_folder (TNY_FOLDER (instance));
+ if (is_local) {
+ TnyFolderType type = TNY_FOLDER_TYPE_UNKNOWN;
+ type = modest_tny_folder_get_local_or_mmc_folder_type (TNY_FOLDER (instance));
+ if (type != TNY_FOLDER_TYPE_UNKNOWN) {
+ g_free (haystack);
+ haystack = g_strdup (modest_local_folder_info_get_type_display_name (type));
+ }
+ } else {
+ }
+ } else {
+ if (modest_tny_account_is_virtual_local_folders (TNY_ACCOUNT (instance))) {
+ g_free (haystack);
+ haystack = g_strdup (priv->local_account_name);
+ } else if (modest_tny_account_is_memory_card_account (TNY_ACCOUNT (instance))) {
+ g_free (haystack);
+ haystack = g_strdup (tny_account_get_name (TNY_ACCOUNT (instance)));
+ }
+ }
+
+ if (type == TNY_FOLDER_TYPE_INBOX &&
+ g_str_has_suffix (haystack, "Inbox")) {
+ g_free (haystack);
+ haystack = g_strdup (_("mcen_me_folder_inbox"));
+ }
+ format_compact_style (&haystack, instance, priv->mailbox, FALSE,
+ priv->style == MODEST_FOLDER_VIEW_STYLE_SHOW_ALL, NULL);
+ retval = modest_text_utils_live_search_find (haystack, needle);
+ g_free (haystack);
+ }
+ }
+#endif
+
/* Free */
g_object_unref (instance);
g_free (fname);
/*
- * This function manages the navigation through the folders using the
- * keyboard or the hardware keys in the device
- */
-static gboolean
-on_key_pressed (GtkWidget *self,
- GdkEventKey *event,
- gpointer user_data)
-{
- GtkTreeSelection *selection;
- GtkTreeIter iter;
- GtkTreeModel *model;
- gboolean retval = FALSE;
-
- /* Up and Down are automatically managed by the treeview */
- if (event->keyval == GDK_Return) {
- /* Expand/Collapse the selected row */
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self));
- if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
- GtkTreePath *path;
-
- path = gtk_tree_model_get_path (model, &iter);
-
- if (gtk_tree_view_row_expanded (GTK_TREE_VIEW (self), path))
- gtk_tree_view_collapse_row (GTK_TREE_VIEW (self), path);
- else
- gtk_tree_view_expand_row (GTK_TREE_VIEW (self), path, FALSE);
- gtk_tree_path_free (path);
- }
- /* No further processing */
- retval = TRUE;
- }
-
- return retval;
-}
-
-/*
* We listen to the changes in the local folder account name key,
* because we want to show the right name in the view. The local
* folder account name corresponds to the device name in the Maemo
return (const gchar *) priv->visible_account_id;
}
-static gboolean
-find_inbox_iter (GtkTreeModel *model, GtkTreeIter *iter, GtkTreeIter *inbox_iter)
-{
- do {
- GtkTreeIter child;
- TnyFolderType type = TNY_FOLDER_TYPE_UNKNOWN;
-
- gtk_tree_model_get (model, iter,
- TYPE_COLUMN,
- &type, -1);
-
- gboolean result = FALSE;
- if (type == TNY_FOLDER_TYPE_INBOX) {
- result = TRUE;
- }
- if (result) {
- *inbox_iter = *iter;
- return TRUE;
- }
-
- if (gtk_tree_model_iter_children (model, &child, iter)) {
- if (find_inbox_iter (model, &child, inbox_iter))
- return TRUE;
- }
-
- } while (gtk_tree_model_iter_next (model, iter));
-
- return FALSE;
-}
-
/* recursive */
static gboolean
find_folder_iter (GtkTreeModel *model, GtkTreeIter *iter, GtkTreeIter *folder_iter,
attr_list = pango_attr_list_new ();
if (!gtk_style_lookup_color (gtk_widget_get_style (GTK_WIDGET (self)), "SecondaryTextColor", &style_color)) {
- gdk_color_parse ("grey", &style_color);
+ gdk_color_parse (MODEST_SECONDARY_COLOR, &style_color);
}
attr = pango_attr_foreground_new (style_color.red, style_color.green, style_color.blue);
pango_attr_list_insert (attr_list, attr);
g_return_val_if_fail (MODEST_IS_FOLDER_VIEW (self), FALSE);
priv = MODEST_FOLDER_VIEW_GET_PRIVATE (self);
- g_return_val_if_fail (get_inner_models (self, NULL, NULL, &inner_model), FALSE);
+
+ if (!get_inner_models (self, NULL, NULL, &inner_model))
+ return FALSE;
if (TNY_IS_GTK_FOLDER_LIST_STORE (inner_model)) {
return tny_gtk_folder_list_store_get_activity (TNY_GTK_FOLDER_LIST_STORE (inner_model));
return ret_value;
}
+
+#ifdef MODEST_TOOLKIT_HILDON2
+static gboolean
+on_live_search_refilter (HildonLiveSearch *livesearch,
+ ModestFolderView *self)
+{
+ GtkTreeModel *filter_model;
+
+ if (get_inner_models (self, &filter_model, NULL, NULL))
+ gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model));
+
+ return TRUE;
+}
+
+GtkWidget *
+modest_folder_view_setup_live_search (ModestFolderView *self)
+{
+ ModestFolderViewPrivate *priv;
+
+ g_return_val_if_fail (MODEST_IS_FOLDER_VIEW (self), NULL);
+ priv = MODEST_FOLDER_VIEW_GET_PRIVATE (self);
+ priv->live_search = hildon_live_search_new ();
+
+ g_signal_connect (G_OBJECT (priv->live_search), "refilter", G_CALLBACK (on_live_search_refilter), self);
+
+ return priv->live_search;
+}
+#endif