57e5ade8051fc9519cb01640d335aa3bf30485e6
[ptask.git] / src / ui.c
1 /*
2  * Copyright (C) 2012-2013 jeanfi@gmail.com
3  *
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.
8  *
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.
13  *
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
17  * 02110-1301 USA
18  */
19 #include <config.h>
20
21 #include <glib/gi18n.h>
22
23 #include <log.h>
24 #include <settings.h>
25 #include <ui.h>
26 #include <ui_newtask_diag.h>
27 #include <ui_projecttree.h>
28 #include <ui_taskpanel.h>
29 #include <ui_tasktree.h>
30
31 static GtkComboBox *w_status;
32 static GtkWindow *window;
33 static GtkPaned *vpaned;
34 static GtkPaned *hpaned;
35
36 int newtask_clicked_cbk(GtkButton *btn, gpointer data)
37 {
38         ui_newtask();
39
40         return FALSE;
41 }
42
43 static void save_settings(GtkWindow *window)
44 {
45         int w, h, x, y, pos;
46
47         gtk_window_get_size(window, &w, &h);
48         gtk_window_get_position(window, &x, &y);
49
50         log_fct("x=%d, y=%d, w=%d, h=%d", x, y, w, h);
51
52         settings_set_int(SETTINGS_KEY_WINDOW_WIDTH, w);
53         settings_set_int(SETTINGS_KEY_WINDOW_HEIGHT, h);
54         settings_set_int(SETTINGS_KEY_WINDOW_X, x);
55         settings_set_int(SETTINGS_KEY_WINDOW_Y, y);
56
57         pos = gtk_paned_get_position(vpaned);
58         settings_set_int(SETTINGS_KEY_SPLITER_VERTICAL_POS, pos);
59
60         pos = gtk_paned_get_position(hpaned);
61         settings_set_int(SETTINGS_KEY_SPLITER_HORIZONTAL_POS, pos);
62
63         ui_tasktree_save_settings();
64
65         g_settings_sync();
66 }
67
68 int refresh_clicked_cbk(GtkButton *btn, gpointer data)
69 {
70         log_fct_enter();
71         refresh();
72         log_fct_exit();
73         return FALSE;
74 }
75
76
77 static void ui_quit()
78 {
79         save_settings(window);
80         gtk_widget_destroy(GTK_WIDGET(window));
81         gtk_main_quit();
82 }
83
84 static gboolean delete_event_cbk(GtkWidget *w, GdkEvent *evt, gpointer data)
85 {
86         log_fct_enter();
87
88         ui_quit();
89
90         log_fct_exit();
91
92         return TRUE;
93 }
94
95 static int status_changed_cbk(GtkComboBox *w, gpointer data)
96 {
97         log_fct_enter();
98
99         refresh();
100
101         log_fct_exit();
102
103         return FALSE;
104 }
105
106 GtkWindow *create_window(GtkBuilder *builder)
107 {
108         int x, y, w, h, pos;
109
110         window = GTK_WINDOW(gtk_builder_get_object(builder, "window"));
111
112         w_status = GTK_COMBO_BOX(gtk_builder_get_object(builder, "status"));
113         g_signal_connect(w_status,
114                          "changed", (GCallback)status_changed_cbk,
115                          NULL);
116
117         w = settings_get_int(SETTINGS_KEY_WINDOW_WIDTH);
118         h = settings_get_int(SETTINGS_KEY_WINDOW_HEIGHT);
119         gtk_window_set_default_size(window, w, h);
120
121         x = settings_get_int(SETTINGS_KEY_WINDOW_X);
122         y = settings_get_int(SETTINGS_KEY_WINDOW_Y);
123         gtk_window_move(window, x, y);
124
125         vpaned = GTK_PANED(gtk_builder_get_object(builder, "vpaned"));
126         pos = settings_get_int(SETTINGS_KEY_SPLITER_VERTICAL_POS);
127         gtk_paned_set_position(vpaned, pos);
128
129         hpaned = GTK_PANED(gtk_builder_get_object(builder, "hpaned"));
130         pos = settings_get_int(SETTINGS_KEY_SPLITER_HORIZONTAL_POS);
131         gtk_paned_set_position(hpaned, pos);
132
133         g_signal_connect(window, "delete_event",
134                          G_CALLBACK(delete_event_cbk), NULL);
135
136         ui_taskpanel_init(builder);
137         ui_tasktree_init(builder);
138         ui_projecttree_init(builder);
139
140         ui_tasktree_load_settings();
141
142         return window;
143 }
144
145 const char *ui_get_status_filter()
146 {
147         const char *status;
148
149         log_fct_enter();
150
151         status = gtk_combo_box_get_active_id(w_status);
152         log_fct("status: %d", status);
153
154         log_fct_exit();
155
156         return status;
157 }
158
159 void quit_activate_cbk(GtkWidget *menu_item, gpointer data)
160 {
161         log_fct_enter();
162         ui_quit();
163         log_fct_exit();
164 }
165
166
167
168 void preferences_activate_cbk(GtkWidget *menu_item, gpointer data)
169 {
170         gint result;
171         static GtkDialog *diag;
172         GtkBuilder *builder;
173
174         builder = gtk_builder_new();
175         gtk_builder_add_from_file
176                 (builder,
177                  PACKAGE_DATA_DIR G_DIR_SEPARATOR_S "ptask.glade",
178                  NULL);
179         diag = GTK_DIALOG(gtk_builder_get_object(builder, "diag_preferences"));
180         gtk_builder_connect_signals(builder, NULL);
181
182         result = gtk_dialog_run(diag);
183
184         if (result == GTK_RESPONSE_ACCEPT)
185                 log_debug("preferences_activate_cbk(): accept");
186         else
187                 log_debug("preferences_activate_cbk(): cancel");
188
189         g_object_unref(G_OBJECT(builder));
190
191         gtk_widget_destroy(GTK_WIDGET(diag));
192 }
193
194 void about_activate_cbk(GtkWidget *menu_item, gpointer data)
195 {
196         log_fct_enter();
197
198         gtk_show_about_dialog
199                 (NULL,
200                  "comments",
201                  _("ptask is a GTK+ task management application"),
202                  "copyright",
203                  _("Copyright(c) 2010-2013\njeanfi@gmail.com"),
204                  "logo-icon-name", "ptask",
205                  "program-name", "ptask",
206                  "title", _("About ptask"),
207                  "version", VERSION,
208                  "website", PACKAGE_URL,
209                  "website-label", _("ptask Homepage"),
210                  NULL);
211
212         log_fct_exit();
213 }