11 #include "../model/FileUtils.hpp"
12 #include "../model/Timer.hpp"
14 #define BOOST_FILESYSTEM_VERSION 2
15 #include <boost/filesystem/operations.hpp>
16 #include <boost/filesystem/convenience.hpp>
17 #include <boost/filesystem/fstream.hpp>
18 #include <boost/filesystem/path.hpp>
23 namespace fs = boost::filesystem;
26 GtkWidget * WidgetUtils::main_window;
27 bool WidgetUtils::wait_box_open =
false;
28 bool WidgetUtils::wait_box_cancelled =
false;
29 GtkWidget * WidgetUtils::wait_box_btn_cancel = NULL;
30 GtkWidget * WidgetUtils::wait_box_label_text = NULL;
31 double WidgetUtils::wait_box_progress = -1.0;
37 GtkWidget *alert_dialog;
38 alert_dialog = gtk_message_dialog_new(GTK_WINDOW(main_window),
39 GTK_DIALOG_DESTROY_WITH_PARENT,
44 gtk_window_set_title(GTK_WINDOW(alert_dialog),title);
45 gtk_dialog_run(GTK_DIALOG (alert_dialog));
46 gtk_widget_destroy(alert_dialog);
72 GtkWidget *confirm_dialog;
73 confirm_dialog = gtk_message_dialog_new(GTK_WINDOW(main_window),
74 GTK_DIALOG_DESTROY_WITH_PARENT,
79 gtk_window_set_title(GTK_WINDOW(confirm_dialog),title);
80 gint response = gtk_dialog_run(GTK_DIALOG (confirm_dialog));
81 gtk_widget_destroy(confirm_dialog);
82 return response==GTK_RESPONSE_YES;
105 dialog = gtk_file_chooser_dialog_new (
"Save As",
107 GTK_FILE_CHOOSER_ACTION_SAVE,
108 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
109 GTK_STOCK_SAVE, GTK_RESPONSE_OK,
111 gtk_widget_set_size_request(dialog,400,600);
113 while (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
116 tmp = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
117 string filename = tmp;
125 full_path = fs::system_complete(fs::path(filename, fs::native));
126 string leaf = full_path.leaf();
127 int dot = leaf.find(
".");
143 ret_filename = filename;
146 gtk_widget_destroy (dialog);
158 dialog = gtk_file_chooser_dialog_new (
"Load",
160 GTK_FILE_CHOOSER_ACTION_OPEN,
161 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
162 GTK_STOCK_OPEN, GTK_RESPONSE_OK,
164 gtk_widget_set_size_request(dialog,400,600);
166 while (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
170 filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
172 ret_filename = filename;
177 gtk_widget_destroy (dialog);
190 wait_box_progress = -1.0;
191 WidgetUtils::waitBox(
true, text, show_progress_bar);
196 WidgetUtils::waitBox(
false, NULL);
201 wait_box_progress = progress;
206 return wait_box_cancelled;
211 string str_text =
"<small>"+string(text)+
"</small>";
212 if(GTK_IS_LABEL(wait_box_label_text))
213 gtk_label_set_markup(GTK_LABEL(wait_box_label_text),str_text.c_str());
218 if(GTK_IS_BUTTON(wait_box_btn_cancel))
221 gtk_widget_show(wait_box_btn_cancel);
223 gtk_widget_hide(wait_box_btn_cancel);
225 wait_box_cancelled =
false;
227 void WidgetUtils::CB_waitBoxCancel(GtkWidget *w, gpointer data)
229 WidgetUtils::wait_box_cancelled =
true;
232 gint WidgetUtils::pulseProgressBar(gpointer progress)
234 bool is_progress = GTK_IS_PROGRESS_BAR(progress);
237 if(wait_box_progress < 0)
238 gtk_progress_bar_pulse(GTK_PROGRESS_BAR(progress));
240 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress),
246 void WidgetUtils::waitBox(
bool show,
const char * text,
bool show_progress_bar)
248 static GtkWidget *dialog;
249 if(show && !wait_box_open)
251 wait_box_open =
true;
252 wait_box_cancelled =
false;
254 gtk_widget_set_sensitive(main_window,
false);
256 dialog = gtk_window_new(GTK_WINDOW_POPUP);
257 gtk_window_set_title(GTK_WINDOW(dialog),
"Wait");
258 gtk_window_set_position(GTK_WINDOW(dialog),GTK_WIN_POS_CENTER_ON_PARENT);
259 gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(main_window));
260 gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog),
true);
261 gtk_window_set_default_size(GTK_WINDOW(dialog),250,150);
265 GtkWidget * container = gtk_vbox_new(
false, 0);
266 wait_box_label_text = gtk_label_new(text);
268 gtk_box_pack_start(GTK_BOX(container),
269 wait_box_label_text,
true,
true, 0);
272 if(show_progress_bar)
274 GtkWidget * progress = gtk_progress_bar_new();
275 gtk_box_pack_start(GTK_BOX(container),
276 progress,
false,
false, 10);
277 gtk_widget_set_size_request(progress,200,30);
278 g_timeout_add(150, pulseProgressBar, gpointer(progress));
281 wait_box_btn_cancel = gtk_button_new_with_label(
"Cancel");
282 g_signal_connect(G_OBJECT(wait_box_btn_cancel),
284 G_CALLBACK(CB_waitBoxCancel),
287 GtkWidget * cancel_btn_box = gtk_hbutton_box_new();
288 gtk_button_box_set_layout(GTK_BUTTON_BOX(cancel_btn_box),GTK_BUTTONBOX_CENTER);
289 gtk_widget_set_size_request(wait_box_btn_cancel,60,25);
290 gtk_box_pack_start(GTK_BOX(cancel_btn_box),
291 wait_box_btn_cancel,
false,
false, 5);
292 gtk_box_pack_start(GTK_BOX(container),
293 cancel_btn_box,
false,
false, 5);
294 gtk_widget_hide(wait_box_btn_cancel);
297 GtkWidget * container_frame = gtk_viewport_new(NULL,NULL);
298 gtk_container_border_width(GTK_CONTAINER(container_frame),2);
299 gtk_container_add(GTK_CONTAINER(container_frame), container);
300 gtk_container_add(GTK_CONTAINER(dialog), container_frame);
301 gtk_widget_show_all(dialog);
302 gtk_widget_hide(wait_box_btn_cancel);
305 while(gtk_events_pending())
307 gtk_main_iteration();
310 else if(!show && wait_box_open)
312 gtk_widget_destroy(dialog);
313 gtk_widget_set_sensitive(main_window,
true);
314 wait_box_open =
false;