static void action_calendar_taskpad_forward_cb (GtkAction *action, ECalShellView *cal_shell_view) { ECalShellContent *cal_shell_content; ECalModelComponent *comp_data; ETaskTable *task_table; ECalComponent *comp; GSList *list; cal_shell_content = cal_shell_view->priv->cal_shell_content; task_table = e_cal_shell_content_get_task_table (cal_shell_content); list = e_task_table_get_selected (task_table); g_return_if_fail (list != NULL); comp_data = list->data; g_slist_free (list); /* XXX We only forward the first selected task. */ comp = e_cal_component_new_from_icalcomponent (icalcomponent_new_clone (comp_data->icalcomp)); g_return_if_fail (comp != NULL); itip_send_component (e_task_table_get_model (task_table), E_CAL_COMPONENT_METHOD_PUBLISH, comp, comp_data->client, NULL, NULL, NULL, TRUE, FALSE, TRUE); g_object_unref (comp); }
static void action_calendar_taskpad_open_url_cb (GtkAction *action, ECalShellView *cal_shell_view) { EShellView *shell_view; EShellWindow *shell_window; ECalShellContent *cal_shell_content; ECalModelComponent *comp_data; ETaskTable *task_table; icalproperty *prop; const gchar *uri; GSList *list; shell_view = E_SHELL_VIEW (cal_shell_view); shell_window = e_shell_view_get_shell_window (shell_view); cal_shell_content = cal_shell_view->priv->cal_shell_content; task_table = e_cal_shell_content_get_task_table (cal_shell_content); list = e_task_table_get_selected (task_table); g_return_if_fail (list != NULL); comp_data = list->data; /* XXX We only open the URI of the first selected task. */ prop = icalcomponent_get_first_property ( comp_data->icalcomp, ICAL_URL_PROPERTY); g_return_if_fail (prop != NULL); uri = icalproperty_get_url (prop); e_show_uri (GTK_WINDOW (shell_window), uri); }
static void action_calendar_taskpad_print_cb (GtkAction *action, ECalShellView *cal_shell_view) { ECalShellContent *cal_shell_content; ECalModelComponent *comp_data; ETaskTable *task_table; ECalComponent *comp; ECalModel *model; icalcomponent *clone; GSList *list; cal_shell_content = cal_shell_view->priv->cal_shell_content; task_table = e_cal_shell_content_get_task_table (cal_shell_content); model = e_task_table_get_model (task_table); list = e_task_table_get_selected (task_table); g_return_if_fail (list != NULL); comp_data = list->data; g_slist_free (list); /* XXX We only print the first selected task. */ comp = e_cal_component_new (); clone = icalcomponent_new_clone (comp_data->icalcomp); e_cal_component_set_icalcomponent (comp, clone); print_comp ( comp, comp_data->client, e_cal_model_get_timezone (model), e_cal_model_get_use_24_hour_format (model), GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG); g_object_unref (comp); }
static void action_calendar_taskpad_new_cb (GtkAction *action, ECalShellView *cal_shell_view) { EShellView *shell_view; EShellWindow *shell_window; ECalShellContent *cal_shell_content; ECalModelComponent *comp_data; ETaskTable *task_table; GSList *list; shell_view = E_SHELL_VIEW (cal_shell_view); shell_window = e_shell_view_get_shell_window (shell_view); cal_shell_content = cal_shell_view->priv->cal_shell_content; task_table = e_cal_shell_content_get_task_table (cal_shell_content); list = e_task_table_get_selected (task_table); g_return_if_fail (list != NULL); comp_data = list->data; g_slist_free (list); e_cal_ops_new_component_editor (shell_window, E_CAL_CLIENT_SOURCE_TYPE_TASKS, e_source_get_uid (e_client_get_source (E_CLIENT (comp_data->client))), FALSE); }
static void action_task_new_cb (GtkAction *action, ETaskShellView *task_shell_view) { EShellView *shell_view; EShellWindow *shell_window; ETaskShellContent *task_shell_content; ETaskTable *task_table; EClient *client = NULL; GSList *list; shell_view = E_SHELL_VIEW (task_shell_view); shell_window = e_shell_view_get_shell_window (shell_view); task_shell_content = task_shell_view->priv->task_shell_content; task_table = e_task_shell_content_get_task_table (task_shell_content); list = e_task_table_get_selected (task_table); if (list) { ECalModelComponent *comp_data; comp_data = list->data; client = g_object_ref (comp_data->client); g_slist_free (list); } e_cal_ops_new_component_editor (shell_window, E_CAL_CLIENT_SOURCE_TYPE_TASKS, client ? e_source_get_uid (e_client_get_source (client)) : NULL, FALSE); g_clear_object (&client); }
static void action_task_new_cb (GtkAction *action, ETaskShellView *task_shell_view) { EShell *shell; EShellView *shell_view; EShellWindow *shell_window; ETaskShellContent *task_shell_content; ETaskTable *task_table; ECalClient *client; ECalComponent *comp; CompEditor *editor; GSList *list; shell_view = E_SHELL_VIEW (task_shell_view); shell_window = e_shell_view_get_shell_window (shell_view); shell = e_shell_window_get_shell (shell_window); task_shell_content = task_shell_view->priv->task_shell_content; task_table = e_task_shell_content_get_task_table (task_shell_content); list = e_task_table_get_selected (task_table); if (list == NULL) { ECalModel *model; model = e_task_table_get_model (task_table); client = e_cal_model_ref_default_client (model); } else { ECalModelComponent *comp_data; comp_data = list->data; client = g_object_ref (comp_data->client); g_slist_free (list); } g_return_if_fail (client != NULL); editor = task_editor_new (client, shell, COMP_EDITOR_NEW_ITEM); comp = cal_comp_task_new_with_defaults (client); comp_editor_edit_comp (editor, comp); gtk_window_present (GTK_WINDOW (editor)); g_object_unref (comp); g_object_unref (client); }
static void action_calendar_taskpad_open_cb (GtkAction *action, ECalShellView *cal_shell_view) { ECalShellContent *cal_shell_content; ECalModelComponent *comp_data; ETaskTable *task_table; GSList *list; cal_shell_content = cal_shell_view->priv->cal_shell_content; task_table = e_cal_shell_content_get_task_table (cal_shell_content); list = e_task_table_get_selected (task_table); g_return_if_fail (list != NULL); comp_data = list->data; g_slist_free (list); /* XXX We only open the first selected task. */ e_cal_shell_view_taskpad_open_task (cal_shell_view, comp_data); }
static void action_task_forward_cb (GtkAction *action, ETaskShellView *task_shell_view) { ETaskShellContent *task_shell_content; EShell *shell; EShellView *shell_view; EShellWindow *shell_window; ESourceRegistry *registry; ECalModelComponent *comp_data; ETaskTable *task_table; ECalComponent *comp; icalcomponent *clone; GSList *list; shell_view = E_SHELL_VIEW (task_shell_view); shell_window = e_shell_view_get_shell_window (shell_view); shell = e_shell_window_get_shell (shell_window); registry = e_shell_get_registry (shell); task_shell_content = task_shell_view->priv->task_shell_content; task_table = e_task_shell_content_get_task_table (task_shell_content); list = e_task_table_get_selected (task_table); g_return_if_fail (list != NULL); comp_data = list->data; g_slist_free (list); /* XXX We only forward the first selected task. */ comp = e_cal_component_new (); clone = icalcomponent_new_clone (comp_data->icalcomp); e_cal_component_set_icalcomponent (comp, clone); itip_send_comp ( registry, E_CAL_COMPONENT_METHOD_PUBLISH, comp, comp_data->client, NULL, NULL, NULL, TRUE, FALSE); g_object_unref (comp); }
static void action_calendar_taskpad_mark_complete_cb (GtkAction *action, ECalShellView *cal_shell_view) { ECalShellContent *cal_shell_content; ETaskTable *task_table; ECalModel *model; GSList *list, *iter; cal_shell_content = cal_shell_view->priv->cal_shell_content; task_table = e_cal_shell_content_get_task_table (cal_shell_content); list = e_task_table_get_selected (task_table); model = e_task_table_get_model (task_table); for (iter = list; iter != NULL; iter = iter->next) { ECalModelComponent *comp_data = iter->data; e_cal_model_tasks_mark_comp_complete ( E_CAL_MODEL_TASKS (model), comp_data); } g_slist_free (list); }
static void action_task_assign_cb (GtkAction *action, ETaskShellView *task_shell_view) { ETaskShellContent *task_shell_content; ECalModelComponent *comp_data; ETaskTable *task_table; GSList *list; task_shell_content = task_shell_view->priv->task_shell_content; task_table = e_task_shell_content_get_task_table (task_shell_content); list = e_task_table_get_selected (task_table); g_return_if_fail (list != NULL); comp_data = list->data; g_slist_free (list); /* XXX We only open the first selected task. */ e_task_shell_view_open_task (task_shell_view, comp_data); /* FIXME Need to actually assign the task. */ }
void e_cal_shell_view_taskpad_actions_update (ECalShellView *cal_shell_view) { ECalShellContent *cal_shell_content; EShellWindow *shell_window; EShellView *shell_view; ETaskTable *task_table; GtkAction *action; GSList *list, *iter; gboolean assignable = TRUE; gboolean editable = TRUE; gboolean has_url = FALSE; gboolean sensitive; gint n_selected; gint n_complete = 0; gint n_incomplete = 0; shell_view = E_SHELL_VIEW (cal_shell_view); shell_window = e_shell_view_get_shell_window (shell_view); cal_shell_content = cal_shell_view->priv->cal_shell_content; task_table = e_cal_shell_content_get_task_table (cal_shell_content); n_selected = e_table_selected_count (E_TABLE (task_table)); list = e_task_table_get_selected (task_table); for (iter = list; iter != NULL; iter = iter->next) { ECalModelComponent *comp_data = iter->data; icalproperty *prop; const gchar *cap; gboolean read_only; read_only = e_client_is_readonly (E_CLIENT (comp_data->client)); editable &= !read_only; cap = CAL_STATIC_CAPABILITY_NO_TASK_ASSIGNMENT; if (e_client_check_capability (E_CLIENT (comp_data->client), cap)) assignable = FALSE; cap = CAL_STATIC_CAPABILITY_NO_CONV_TO_ASSIGN_TASK; if (e_client_check_capability (E_CLIENT (comp_data->client), cap)) assignable = FALSE; prop = icalcomponent_get_first_property ( comp_data->icalcomp, ICAL_URL_PROPERTY); has_url |= (prop != NULL); prop = icalcomponent_get_first_property ( comp_data->icalcomp, ICAL_COMPLETED_PROPERTY); if (prop != NULL) n_complete++; else n_incomplete++; } g_slist_free (list); action = ACTION (CALENDAR_TASKPAD_ASSIGN); sensitive = (n_selected == 1) && editable && assignable; gtk_action_set_sensitive (action, sensitive); action = ACTION (CALENDAR_TASKPAD_FORWARD); sensitive = (n_selected == 1); gtk_action_set_sensitive (action, sensitive); action = ACTION (CALENDAR_TASKPAD_MARK_COMPLETE); sensitive = (n_selected > 0) && editable && (n_incomplete > 0); gtk_action_set_sensitive (action, sensitive); action = ACTION (CALENDAR_TASKPAD_MARK_INCOMPLETE); sensitive = (n_selected > 0) && editable && (n_complete > 0); gtk_action_set_sensitive (action, sensitive); action = ACTION (CALENDAR_TASKPAD_OPEN); sensitive = (n_selected == 1); gtk_action_set_sensitive (action, sensitive); action = ACTION (CALENDAR_TASKPAD_OPEN_URL); sensitive = (n_selected == 1) && has_url; gtk_action_set_sensitive (action, sensitive); action = ACTION (CALENDAR_TASKPAD_PRINT); sensitive = (n_selected == 1); gtk_action_set_sensitive (action, sensitive); action = ACTION (CALENDAR_TASKPAD_SAVE_AS); sensitive = (n_selected == 1); gtk_action_set_sensitive (action, sensitive); }
static void action_calendar_taskpad_save_as_cb (GtkAction *action, ECalShellView *cal_shell_view) { EShell *shell; EShellView *shell_view; EShellWindow *shell_window; EShellBackend *shell_backend; ECalShellContent *cal_shell_content; ECalModelComponent *comp_data; ETaskTable *task_table; EActivity *activity; GSList *list; GFile *file; gchar *string; shell_view = E_SHELL_VIEW (cal_shell_view); shell_window = e_shell_view_get_shell_window (shell_view); shell_backend = e_shell_view_get_shell_backend (shell_view); shell = e_shell_window_get_shell (shell_window); cal_shell_content = cal_shell_view->priv->cal_shell_content; task_table = e_cal_shell_content_get_task_table (cal_shell_content); list = e_task_table_get_selected (task_table); g_return_if_fail (list != NULL); comp_data = list->data; g_slist_free (list); /* Translators: Default filename part saving a task to a file when * no summary is filed, the '.ics' extension is concatenated to it. */ string = icalcomp_suggest_filename (comp_data->icalcomp, _("task")); file = e_shell_run_save_dialog ( shell, _("Save as iCalendar"), string, "*.ics:text/calendar", NULL, NULL); g_free (string); if (file == NULL) return; string = e_cal_client_get_component_as_string ( comp_data->client, comp_data->icalcomp); if (string == NULL) { g_warning ("Could not convert task to a string"); g_object_unref (file); return; } /* XXX No callback means errors are discarded. */ activity = e_file_replace_contents_async ( file, string, strlen (string), NULL, FALSE, G_FILE_CREATE_NONE, (GAsyncReadyCallback) NULL, NULL); e_shell_backend_add_activity (shell_backend, activity); /* Free the string when the activity is finalized. */ g_object_set_data_full ( G_OBJECT (activity), "file-content", string, (GDestroyNotify) g_free); g_object_unref (file); }
static guint32 task_shell_content_check_state (EShellContent *shell_content) { ETaskShellContent *task_shell_content; ETaskTable *task_table; GSList *list, *iter; gboolean assignable = TRUE; gboolean editable = TRUE; gboolean has_url = FALSE; gint n_selected; gint n_complete = 0; gint n_incomplete = 0; guint32 state = 0; task_shell_content = E_TASK_SHELL_CONTENT (shell_content); task_table = e_task_shell_content_get_task_table (task_shell_content); n_selected = e_table_selected_count (E_TABLE (task_table)); list = e_task_table_get_selected (task_table); for (iter = list; iter != NULL; iter = iter->next) { ECalModelComponent *comp_data = iter->data; icalproperty *prop; const gchar *cap; gboolean read_only; if (!comp_data) continue; read_only = e_client_is_readonly (E_CLIENT (comp_data->client)); editable &= !read_only; cap = CAL_STATIC_CAPABILITY_NO_TASK_ASSIGNMENT; if (e_client_check_capability (E_CLIENT (comp_data->client), cap)) assignable = FALSE; cap = CAL_STATIC_CAPABILITY_NO_CONV_TO_ASSIGN_TASK; if (e_client_check_capability (E_CLIENT (comp_data->client), cap)) assignable = FALSE; prop = icalcomponent_get_first_property ( comp_data->icalcomp, ICAL_URL_PROPERTY); has_url |= (prop != NULL); prop = icalcomponent_get_first_property ( comp_data->icalcomp, ICAL_COMPLETED_PROPERTY); if (prop != NULL) n_complete++; else n_incomplete++; } g_slist_free (list); if (n_selected == 1) state |= E_CAL_BASE_SHELL_CONTENT_SELECTION_SINGLE; if (n_selected > 1) state |= E_CAL_BASE_SHELL_CONTENT_SELECTION_MULTIPLE; if (assignable) state |= E_CAL_BASE_SHELL_CONTENT_SELECTION_CAN_ASSIGN; if (editable) state |= E_CAL_BASE_SHELL_CONTENT_SELECTION_IS_EDITABLE; if (n_complete > 0) state |= E_CAL_BASE_SHELL_CONTENT_SELECTION_HAS_COMPLETE; if (n_incomplete > 0) state |= E_CAL_BASE_SHELL_CONTENT_SELECTION_HAS_INCOMPLETE; if (has_url) state |= E_CAL_BASE_SHELL_CONTENT_SELECTION_HAS_URL; return state; }