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;
36 static struct task *current_task;
38 static void enable(int enable)
42 gtk_widget_set_sensitive(GTK_WIDGET(w_tasksave_btn), enable);
43 gtk_widget_set_sensitive(GTK_WIDGET(w_taskdone_btn), enable);
45 if (current_task && current_task->recur) {
46 gtk_widget_set_sensitive(GTK_WIDGET(w_taskremove_btn), FALSE);
47 gtk_widget_set_tooltip_text
49 "The removal of recurrent tasks is not supported due "
50 "to the taskwarrior bug TW-638");
51 gtk_widget_set_has_tooltip(w_taskremove_btn, TRUE);
53 gtk_widget_set_sensitive(GTK_WIDGET(w_taskremove_btn), enable);
54 gtk_widget_set_has_tooltip(w_taskremove_btn, FALSE);
57 gtk_widget_set_sensitive(GTK_WIDGET(w_taskcancel_btn), enable);
59 buf = gtk_text_view_get_buffer(w_note);
61 gtk_text_buffer_set_text(buf, "", 0);
62 gtk_widget_set_sensitive(GTK_WIDGET(w_note), enable);
65 gtk_entry_set_text(w_description, "");
66 gtk_widget_set_sensitive(GTK_WIDGET(w_description), enable);
69 gtk_entry_set_text(w_project, "");
70 gtk_widget_set_sensitive(GTK_WIDGET(w_project), enable);
73 gtk_combo_box_set_active(w_priority, 0);
74 gtk_widget_set_sensitive(GTK_WIDGET(w_priority), enable);
77 static int tasksave_clicked_cbk(GtkButton *btn, gpointer data)
82 GtkTextIter sIter, eIter;
90 log_fct("%d", task->id);
92 buf = gtk_text_view_get_buffer(w_note);
94 gtk_text_buffer_get_iter_at_offset(buf, &sIter, 0);
95 gtk_text_buffer_get_iter_at_offset(buf, &eIter, -1);
96 txt = gtk_text_buffer_get_text(buf, &sIter, &eIter, TRUE);
98 log_debug("note=%s", txt);
100 if (!task->note || strcmp(txt, task->note))
101 note_put(task->uuid, txt);
103 ctxt = gtk_entry_get_text(w_description);
104 if (!task->description || strcmp(ctxt, task->description))
105 tw_modify_description(task->uuid, ctxt);
107 ctxt = gtk_entry_get_text(w_project);
108 if (!task->project || strcmp(ctxt, task->project))
109 tw_modify_project(task->uuid, ctxt);
111 priority = gtk_combo_box_get_active(w_priority);
112 log_debug("priority: %d", priority);
128 if (strcmp(task->priority, pri))
129 tw_modify_priority(task->uuid, pri);
136 void ui_taskpanel_init(GtkBuilder *builder)
140 w_note = GTK_TEXT_VIEW(gtk_builder_get_object(builder, "tasknote"));
142 w_description = GTK_ENTRY(gtk_builder_get_object(builder,
144 w_project = GTK_ENTRY(gtk_builder_get_object(builder, "taskproject"));
145 w_priority = GTK_COMBO_BOX(gtk_builder_get_object(builder,
148 w_tasksave_btn = GTK_BUTTON(gtk_builder_get_object(builder,
150 w_taskremove_btn = GTK_BUTTON(gtk_builder_get_object(builder,
153 g_signal_connect(w_tasksave_btn,
155 (GCallback)tasksave_clicked_cbk,
158 w_taskdone_btn = GTK_BUTTON(gtk_builder_get_object(builder,
160 w_taskcancel_btn = GTK_BUTTON(gtk_builder_get_object(builder,
168 static int priority_to_int(const char *str)
182 void ui_taskpanel_update(struct task *task)
190 buf = gtk_text_view_get_buffer(w_note);
192 gtk_text_buffer_set_text(buf,
196 gtk_text_buffer_set_text(buf, "", 0);
198 gtk_entry_set_text(w_description, task->description);
201 gtk_entry_set_text(w_project, task->project);
203 gtk_entry_set_text(w_project, "");
205 priority = priority_to_int(task->priority);
206 gtk_combo_box_set_active(w_priority, priority);
215 int taskdone_clicked_cbk(GtkButton *btn, gpointer data)
218 tw_task_done(current_task->uuid);
225 int taskremove_clicked_cbk(GtkButton *btn, gpointer data)
230 log_fct("uuid=%d", current_task->uuid);
231 tw_task_remove(current_task->uuid);
240 int taskpanel_cancel_clicked_cbk(GtkButton *btn, gpointer data)
244 ui_taskpanel_update(current_task);