2 * Copyright (C) 2012-2013 jeanfi@gmail.com
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License as
6 * published by the Free Software Foundation; either version 2 of the
7 * License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
25 #include <ui_taskpanel.h>
27 static GtkTextView *w_note;
28 static GtkEntry *w_description;
29 static GtkEntry *w_project;
30 static GtkComboBox *w_priority;
31 static GtkButton *w_tasksave_btn;
32 static GtkButton *w_taskremove_btn;
33 static GtkButton *w_taskdone_btn;
34 static GtkButton *w_taskcancel_btn;
35 static GtkLabel *w_tasktags;
37 static struct task *current_task;
39 static void enable(int enable)
43 gtk_widget_set_sensitive(GTK_WIDGET(w_tasksave_btn), enable);
44 gtk_widget_set_sensitive(GTK_WIDGET(w_taskdone_btn), enable);
46 if (current_task && current_task->recur) {
47 gtk_widget_set_sensitive(GTK_WIDGET(w_taskremove_btn), FALSE);
48 gtk_widget_set_tooltip_text
49 (GTK_WIDGET(w_taskremove_btn),
50 "The removal of recurrent tasks is not supported due "
51 "to the taskwarrior bug TW-638");
52 gtk_widget_set_has_tooltip(GTK_WIDGET(w_taskremove_btn), TRUE);
54 gtk_widget_set_sensitive(GTK_WIDGET(w_taskremove_btn), enable);
55 gtk_widget_set_has_tooltip(GTK_WIDGET(w_taskremove_btn), FALSE);
58 gtk_widget_set_sensitive(GTK_WIDGET(w_taskcancel_btn), enable);
60 buf = gtk_text_view_get_buffer(w_note);
62 gtk_text_buffer_set_text(buf, "", 0);
63 gtk_widget_set_sensitive(GTK_WIDGET(w_note), enable);
66 gtk_entry_set_text(w_description, "");
67 gtk_widget_set_sensitive(GTK_WIDGET(w_description), enable);
70 gtk_entry_set_text(w_project, "");
71 gtk_widget_set_sensitive(GTK_WIDGET(w_project), enable);
74 gtk_label_set_label(w_tasktags, "");
77 gtk_combo_box_set_active(w_priority, 0);
78 gtk_widget_set_sensitive(GTK_WIDGET(w_priority), enable);
81 static int tasksave_clicked_cbk(GtkButton *btn, gpointer data)
86 GtkTextIter sIter, eIter;
94 log_fct("%d", task->id);
96 buf = gtk_text_view_get_buffer(w_note);
98 gtk_text_buffer_get_iter_at_offset(buf, &sIter, 0);
99 gtk_text_buffer_get_iter_at_offset(buf, &eIter, -1);
100 txt = gtk_text_buffer_get_text(buf, &sIter, &eIter, TRUE);
102 log_debug("note=%s", txt);
104 if (!task->note || strcmp(txt, task->note))
105 note_put(task->uuid, txt);
107 ctxt = gtk_entry_get_text(w_description);
108 if (!task->description || strcmp(ctxt, task->description))
109 tw_modify_description(task->uuid, ctxt);
111 ctxt = gtk_entry_get_text(w_project);
112 if (!task->project || strcmp(ctxt, task->project))
113 tw_modify_project(task->uuid, ctxt);
115 priority = gtk_combo_box_get_active(w_priority);
116 log_debug("priority: %d", priority);
132 if (strcmp(task->priority, pri))
133 tw_modify_priority(task->uuid, pri);
140 void ui_taskpanel_init(GtkBuilder *builder)
144 w_note = GTK_TEXT_VIEW(gtk_builder_get_object(builder, "tasknote"));
145 w_tasktags = GTK_LABEL(gtk_builder_get_object(builder, "tasktags"));
146 w_description = GTK_ENTRY(gtk_builder_get_object(builder,
148 w_project = GTK_ENTRY(gtk_builder_get_object(builder, "taskproject"));
149 w_priority = GTK_COMBO_BOX(gtk_builder_get_object(builder,
152 w_tasksave_btn = GTK_BUTTON(gtk_builder_get_object(builder,
154 w_taskremove_btn = GTK_BUTTON(gtk_builder_get_object(builder,
157 g_signal_connect(w_tasksave_btn,
159 (GCallback)tasksave_clicked_cbk,
162 w_taskdone_btn = GTK_BUTTON(gtk_builder_get_object(builder,
164 w_taskcancel_btn = GTK_BUTTON(gtk_builder_get_object(builder,
172 static int priority_to_int(const char *str)
186 void ui_taskpanel_update(struct task *task)
196 buf = gtk_text_view_get_buffer(w_note);
198 gtk_text_buffer_set_text(buf,
202 gtk_text_buffer_set_text(buf, "", 0);
204 gtk_entry_set_text(w_description, task->description);
207 gtk_entry_set_text(w_project, task->project);
209 gtk_entry_set_text(w_project, "");
211 priority = priority_to_int(task->priority);
212 gtk_combo_box_set_active(w_priority, priority);
219 tmp = g_strconcat(gtags,
226 gtags = g_strdup(*tags);
230 gtk_label_set_label(w_tasktags, gtags);
232 gtk_label_set_label(w_tasktags, "");
242 int taskdone_clicked_cbk(GtkButton *btn, gpointer data)
245 tw_task_done(current_task->uuid);
252 int taskremove_clicked_cbk(GtkButton *btn, gpointer data)
257 log_fct("uuid=%d", current_task->uuid);
258 tw_task_remove(current_task->uuid);
267 int taskpanel_cancel_clicked_cbk(GtkButton *btn, gpointer data)
271 ui_taskpanel_update(current_task);