From ddcc505dbf7893735bb02d971a6df1a411cdb646 Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Wed, 1 Aug 2001 23:33:40 +0000 Subject: The calendar search bar widget now includes a drop-down menu of available 2001-08-01 Federico Mena Quintero The calendar search bar widget now includes a drop-down menu of available categories. * pcs/query.c (func_has_categories): Handle one and only one #f value as meaning "unfiled", for components that have no categories at all. * pcs/cal-backend-file.c (open_cal): Duh, do not notify here about changed categories since at this point we don't have any clients bound to us yet. (create_cal): Likewise. (cal_backend_file_add_cal): Notify here. * gui/cal-search-bar.h (CalSearchBarClass): New signal "category_changed". * gui/cal-search-bar.c (cal_search_bar_construct): Add a drop-down menu for the list of categories. (search_option_items): Removed the "Has category" option, since we now have the drop-down menu instad and it would be confusing to have both options. (regen_query): Likewise. Also, this function is now the old cal_search_bar_query_changed() and is shared by that very function and by the callback from the drop-down menu. (notify_query_contains): Include the sub-sexp for the categories. (cal_search_bar_set_categories): New function. (cal_search_bar_get_category): New function. (categories_selection_done_cb): Emit the "category_changed" signal. * gui/e-tasks.c (obj_updated_cb): Removed function since it did not do anything; all updates are handled by the CalendarModel. (obj_removed_cb): Likewise. (ETasksPrivate): Removed the fields for the categories option menu, since now it is in the ESearchBar. (search_bar_sexp_changed_cb): Use calendar_model_set_query() directly here, as we do not need to frob the sexp anymore. (update_query): Removed. (client_categories_changed_cb): New callback. (search_bar_category_changed_cb): New callback. (e_tasks_new_task): Set the default category on the component to the one that is selected in the search bar. (e_tasks_on_filter_selected): Removed. (e_tasks_on_categories_changed): Removed. (e_tasks_rebuild_categories_menu): Removed. (e_tasks_add_menu_item): Removed. (e_tasks_setup_view_menus): Sanitized not to sink objects wildly. (e_tasks_discard_view_menus): New function. * gui/calendar-model.h (CalendarModelClass): Removed the "categories_changed" signal since this is handled in the Wombat now. * gui/calendar-model.c (calendar_model_get_categories): Removed. (calendar_model_set_value_at): Do not collect the categories. (query_obj_updated_cb): Likewise. (calendar_model_collect_categories): Removed. (calendar_model_set_default_category): Constify. * gui/tasks-control.c (tasks_control_deactivate): Call e_tasks_discard_view_menus(). * gui/gnome-cal.c (search_bar_category_changed_cb): Set the default category for the task pad's model. svn path=/trunk/; revision=11559 --- calendar/gui/calendar-model.c | 87 +------------------------------------------ 1 file changed, 1 insertion(+), 86 deletions(-) (limited to 'calendar/gui/calendar-model.c') diff --git a/calendar/gui/calendar-model.c b/calendar/gui/calendar-model.c index 0cdd97b7d6..b41c0d2519 100644 --- a/calendar/gui/calendar-model.c +++ b/calendar/gui/calendar-model.c @@ -69,20 +69,10 @@ struct _CalendarModelPrivate { creating a new task. */ gchar *default_category; - /* A balanced tree of the categories used by all the tasks/events. */ - GTree *categories; - /* The current timezone. */ icaltimezone *zone; }; -enum { - CATEGORIES_CHANGED, - LAST_SIGNAL -}; - -static gint calendar_model_signals [LAST_SIGNAL] = { 0 }; - static void calendar_model_class_init (CalendarModelClass *class); @@ -104,8 +94,6 @@ static int remove_object (CalendarModel *model, const char *uid); static void ensure_task_complete (CalComponent *comp, time_t completed_date); static void ensure_task_not_complete (CalComponent *comp); -static gboolean calendar_model_collect_categories (CalendarModel *model, - CalComponent *comp); static ETableModelClass *parent_class; @@ -155,17 +143,6 @@ calendar_model_class_init (CalendarModelClass *class) parent_class = gtk_type_class (E_TABLE_MODEL_TYPE); - calendar_model_signals [CATEGORIES_CHANGED] = - gtk_signal_new ("categories-changed", - GTK_RUN_LAST, object_class->type, - GTK_SIGNAL_OFFSET (CalendarModelClass, - categories_changed), - gtk_signal_default_marshaller, - GTK_TYPE_NONE, 0); - - gtk_object_class_add_signals (object_class, calendar_model_signals, - LAST_SIGNAL); - object_class->destroy = calendar_model_destroy; etm_class->column_count = calendar_model_column_count; @@ -179,8 +156,6 @@ calendar_model_class_init (CalendarModelClass *class) etm_class->initialize_value = calendar_model_initialize_value; etm_class->value_is_empty = calendar_model_value_is_empty; etm_class->value_to_string = calendar_model_value_to_string; - - class->categories_changed = NULL; } /* Object initialization function for the calendar table model */ @@ -200,8 +175,6 @@ calendar_model_init (CalendarModel *model) priv->new_comp_vtype = CAL_COMPONENT_EVENT; priv->use_24_hour_format = TRUE; - priv->categories = g_tree_new ((GCompareFunc)strcmp); - priv->zone = NULL; } @@ -285,12 +258,6 @@ calendar_model_destroy (GtkObject *object) g_free (priv->default_category); - /* We only need to free the first argument, the key, so g_free will do. - */ - g_tree_traverse (priv->categories, (GTraverseFunc) g_free, - G_PRE_ORDER, NULL); - g_tree_destroy (priv->categories); - /* Free the private structure */ g_free (priv); @@ -1338,10 +1305,6 @@ calendar_model_set_value_at (ETableModel *etm, int col, int row, const void *val switch (col) { case CAL_COMPONENT_FIELD_CATEGORIES: set_categories (comp, value); - if (calendar_model_collect_categories (model, comp)) { - gtk_signal_emit (GTK_OBJECT (model), - calendar_model_signals [CATEGORIES_CHANGED]); - } break; case CAL_COMPONENT_FIELD_CLASSIFICATION: @@ -1815,14 +1778,6 @@ query_obj_updated_cb (CalQuery *query, const char *uid, e_table_model_row_changed (E_TABLE_MODEL (model), *new_idx); } - /* See if we need to add any categories. Note that old - categories won't be removed, but I don't think that matters - too much here. */ - if (calendar_model_collect_categories (model, new_comp)) { - gtk_signal_emit (GTK_OBJECT (model), - calendar_model_signals [CATEGORIES_CHANGED]); - } - break; case CAL_CLIENT_GET_NOT_FOUND: @@ -2330,7 +2285,7 @@ calendar_model_set_use_24_hour_format (CalendarModel *model, void calendar_model_set_default_category (CalendarModel *model, - gchar *default_category) + const char *default_category) { g_return_if_fail (IS_CALENDAR_MODEL (model)); @@ -2340,46 +2295,6 @@ calendar_model_set_default_category (CalendarModel *model, -static gboolean -calendar_model_collect_categories (CalendarModel *model, - CalComponent *comp) -{ - CalendarModelPrivate *priv; - GSList *categories_list, *elem; - gboolean changed = FALSE; - - priv = model->priv; - - cal_component_get_categories_list (comp, &categories_list); - - for (elem = categories_list; elem; elem = elem->next) { - if (!g_tree_lookup (priv->categories, elem->data)) { - /* We store a '1' as the data, just so we can use - g_tree_lookup() on it. Note that we don't free - the string since it is now part of the tree. */ - g_tree_insert (priv->categories, elem->data, - GINT_TO_POINTER (1)); - changed = TRUE; - } else { - g_free (elem->data); - } - } - - g_slist_free (categories_list); - - return changed; -} - - -GTree* -calendar_model_get_categories (CalendarModel *model) -{ - g_return_val_if_fail (IS_CALENDAR_MODEL (model), NULL); - - return model->priv->categories; -} - - /* The current timezone. */ icaltimezone* calendar_model_get_timezone (CalendarModel *model) -- cgit