From 53268d5516083c47607dbd3acbbd6bafd6d15747 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 2 Sep 2009 15:21:35 -0400 Subject: Introduce an EShellView::execute-search signal. This addresses bug #593896 but is also a cleaner design than before. It introduces an EShellView::execute-search signal and renames the "search-execute" action to "search-quick" to clarify that it's only meant for the "quick" search bar in the main window. Shell view subclasses should implement the execute_search() method to actually execute a search. e_shell_view_execute_search() emits the new signal. --- modules/calendar/e-cal-shell-view-private.c | 155 ---------------------------- 1 file changed, 155 deletions(-) (limited to 'modules/calendar/e-cal-shell-view-private.c') diff --git a/modules/calendar/e-cal-shell-view-private.c b/modules/calendar/e-cal-shell-view-private.c index 3fe59945f5..d88c148bca 100644 --- a/modules/calendar/e-cal-shell-view-private.c +++ b/modules/calendar/e-cal-shell-view-private.c @@ -580,161 +580,6 @@ e_cal_shell_view_private_finalize (ECalShellView *cal_shell_view) /* XXX Nothing to do? */ } -void -e_cal_shell_view_execute_search (ECalShellView *cal_shell_view) -{ - ECalShellContent *cal_shell_content; - ECalShellSidebar *cal_shell_sidebar; - EShellView *shell_view; - EShellWindow *shell_window; - EShellContent *shell_content; - GnomeCalendar *calendar; - ECalendar *date_navigator; - GtkRadioAction *action; - GString *string; - FilterRule *rule; - const gchar *format; - const gchar *text; - time_t start_range; - time_t end_range; - gboolean range_search; - gchar *start, *end; - gchar *query; - gchar *temp; - gint value; - - shell_view = E_SHELL_VIEW (cal_shell_view); - shell_content = e_shell_view_get_shell_content (shell_view); - text = e_shell_content_get_search_text (shell_content); - - shell_window = e_shell_view_get_shell_window (shell_view); - action = GTK_RADIO_ACTION (ACTION (CALENDAR_SEARCH_ANY_FIELD_CONTAINS)); - value = gtk_radio_action_get_current_value (action); - - if (text == NULL || *text == '\0') { - text = ""; - value = CALENDAR_SEARCH_SUMMARY_CONTAINS; - } - - switch (value) { - default: - text = ""; - /* fall through */ - - case CALENDAR_SEARCH_SUMMARY_CONTAINS: - format = "(contains? \"summary\" %s)"; - break; - - case CALENDAR_SEARCH_DESCRIPTION_CONTAINS: - format = "(contains? \"description\" %s)"; - break; - - case CALENDAR_SEARCH_ANY_FIELD_CONTAINS: - format = "(contains? \"any\" %s)"; - break; - } - - /* Build the query. */ - string = g_string_new (""); - e_sexp_encode_string (string, text); - query = g_strdup_printf (format, string->str); - g_string_free (string, TRUE); - - range_search = FALSE; - start_range = end_range = 0; - - /* Apply selected filter. */ - value = e_shell_content_get_filter_value (shell_content); - switch (value) { - case CALENDAR_FILTER_ANY_CATEGORY: - break; - - case CALENDAR_FILTER_UNMATCHED: - temp = g_strdup_printf ( - "(and (has-categories? #f) %s)", query); - g_free (query); - query = temp; - break; - - case CALENDAR_FILTER_ACTIVE_APPOINTMENTS: - /* Show a year's worth of appointments. */ - start_range = time (NULL); - end_range = time_add_day (start_range, 365); - start = isodate_from_time_t (start_range); - end = isodate_from_time_t (end_range); - - temp = g_strdup_printf ( - "(and %s (occur-in-time-range? " - "(make-time \"%s\") (make-time \"%s\")))", - query, start, end); - g_free (query); - query = temp; - - range_search = TRUE; - break; - - case CALENDAR_FILTER_NEXT_7_DAYS_APPOINTMENTS: - start_range = time (NULL); - end_range = time_add_day (start_range, 7); - start = isodate_from_time_t (start_range); - end = isodate_from_time_t (end_range); - - temp = g_strdup_printf ( - "(and %s (occur-in-time-range? " - "(make-time \"%s\") (make-time \"%s\")))", - query, start, end); - g_free (query); - query = temp; - - range_search = TRUE; - break; - - default: - { - GList *categories; - const gchar *category_name; - - categories = e_categories_get_list (); - category_name = g_list_nth_data (categories, value); - g_list_free (categories); - - temp = g_strdup_printf ( - "(and (has-categories? \"%s\") %s)", - category_name, query); - g_free (query); - query = temp; - break; - } - } - - /* XXX This is wrong. We need to programmatically construct a - * FilterRule, tell it to build code, and pass the resulting - * expressing string to ECalModel. */ - rule = filter_rule_new (); - e_shell_content_set_search_rule (shell_content, rule); - g_object_unref (rule); - - cal_shell_sidebar = cal_shell_view->priv->cal_shell_sidebar; - date_navigator = e_cal_shell_sidebar_get_date_navigator (cal_shell_sidebar); - - if (range_search) { - /* Switch to list view and hide the date navigator. */ - action = GTK_RADIO_ACTION (ACTION (CALENDAR_VIEW_LIST)); - gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE); - gtk_widget_hide (GTK_WIDGET (date_navigator)); - } else { - /* Ensure the date navigator is visible. */ - gtk_widget_show (GTK_WIDGET (date_navigator)); - } - - /* Submit the query. */ - cal_shell_content = cal_shell_view->priv->cal_shell_content; - calendar = e_cal_shell_content_get_calendar (cal_shell_content); - gnome_calendar_set_search_query ( - calendar, query, range_search, start_range, end_range); - g_free (query); -} - void e_cal_shell_view_open_event (ECalShellView *cal_shell_view, ECalModelComponent *comp_data) -- cgit v1.2.3