1 /* Hey EMACS -*- linux-c -*- */
2 /*  tilp - a linking program for TI graphing calculators
3  *  Copyright (C) 1999-2003  Romain Lievin
4  *
5  *  This program is free software you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation either version 2 of the License, or
8  *  (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with this program; if not, write to the Free Software Foundation,
17  *  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18  */
19 
20 #ifdef HAVE_CONFIG_H
21 #  include <config.h>
22 #endif
23 
24 #include <gtk/gtk.h>
25 #include <stdlib.h>
26 #include <string.h>
27 
28 #include "support.h"
29 
30 #include "gstruct.h"
31 #include "tilp_core.h"
32 #include "tilp.h"
33 #include "dboxes.h"
34 #include "pbars.h"
35 #include "about.h"
36 #include "manpage.h"
37 #include "labels.h"
38 #include "clock.h"
39 #include "release.h"
40 #include "options.h"
41 #include "device.h"
42 #include "clist.h"
43 #include "ctree.h"
44 #include "dnd.h"
45 #include "filesel.h"
46 #include "action.h"
47 #include "gtk_update.h"
48 #include "screenshot.h"
49 #include "bookmark.h"
50 
51 #ifdef __WIN32__
52 #define strcasecmp _stricmp
53 #endif /* __WIN32__ */
54 
55 GtkBuilder *builder = NULL;
56 GtkWidget *main_wnd  = NULL;
57 GtkWidget *clist_wnd = NULL;
58 GtkWidget *ctree_wnd = NULL;
59 GtkWidget *help_menu = NULL;
60 
61 
62 /* Main window */
63 
show_right_view(int view)64 void show_right_view(int view)
65 {
66 	gpointer data;
67 
68 	if(view)
69 	{
70 		data = GTK_WIDGET (gtk_builder_get_object (builder, "vbox2"));
71 		gtk_widget_show_all(data);
72 	}
73 	else
74 	{
75 		data = GTK_WIDGET (gtk_builder_get_object (builder, "vbox2"));
76 		gtk_widget_hide(data);
77 
78 		//gtk_window_resize(dbox, options.xsize, options.ysize);
79 	}
80 }
81 
display_tilp_dbox(void)82 GtkWidget *display_tilp_dbox(void)
83 {
84 	GtkWidget *dbox;
85 	GtkWidget *paned;
86 	GError* error = NULL;
87 
88 	builder = gtk_builder_new();
89 	if (!gtk_builder_add_from_file (builder, tilp_paths_build_builder("tilp.ui"), &error))
90 	{
91 		g_warning (_("Couldn't load builder file: %s\n"), error->message);
92 		g_error_free (error);
93 		return NULL; // THIS RETURNS !
94 	}
95 	gtk_builder_connect_signals(builder, NULL);
96 
97 	dbox = GTK_WIDGET (gtk_builder_get_object (builder, "tilp_dbox"));
98 	if(options.full_gui)
99 		gtk_window_resize(GTK_WINDOW(dbox), options.wnd_x_size1, options.wnd_y_size1);
100 	else
101 		gtk_window_resize(GTK_WINDOW(dbox), options.wnd_x_size2, options.wnd_y_size2);
102 
103 	ctree_wnd = GTK_WIDGET (gtk_builder_get_object (builder, "treeview1"));
104 	clist_wnd = GTK_WIDGET (gtk_builder_get_object (builder, "treeview2"));
105 
106 	label_wnd.label11 = GTK_WIDGET (gtk_builder_get_object (builder, "label11"));
107 	label_wnd.label12 = GTK_WIDGET (gtk_builder_get_object (builder, "label12"));
108 	label_wnd.label13 = GTK_WIDGET (gtk_builder_get_object (builder, "label13"));
109 	label_wnd.label14 = GTK_WIDGET (gtk_builder_get_object (builder, "label14"));
110 	label_wnd.label21 = GTK_WIDGET (gtk_builder_get_object (builder, "label21"));
111 
112 	toolbar_wnd.toolbar = GTK_WIDGET (gtk_builder_get_object (builder, "toolbar2"));
113 	toolbar_wnd.button10 = GTK_WIDGET (gtk_builder_get_object (builder, "button1"));
114 	toolbar_wnd.button11 = GTK_WIDGET (gtk_builder_get_object (builder, "button2"));
115 	toolbar_wnd.button12 = GTK_WIDGET (gtk_builder_get_object (builder, "button3"));
116 	toolbar_wnd.button13 = GTK_WIDGET (gtk_builder_get_object (builder, "button4"));
117 	toolbar_wnd.button14 = GTK_WIDGET (gtk_builder_get_object (builder, "button5"));
118 	toolbar_wnd.button15 = GTK_WIDGET (gtk_builder_get_object (builder, "button6"));
119 	toolbar_wnd.button20 = GTK_WIDGET (gtk_builder_get_object (builder, "button10"));
120 	toolbar_wnd.button21 = GTK_WIDGET (gtk_builder_get_object (builder, "button11"));
121 	toolbar_wnd.button22 = GTK_WIDGET (gtk_builder_get_object (builder, "button12"));
122 
123 	menubar_wnd.menubar = GTK_WIDGET (gtk_builder_get_object (builder, "menubar1"));
124 	menubar_wnd.viewlocal = GTK_WIDGET (gtk_builder_get_object (builder, "menuitem13"));
125 	menubar_wnd.showall = GTK_WIDGET (gtk_builder_get_object (builder, "show_all_files1"));
126 	menubar_wnd.restore = GTK_WIDGET (gtk_builder_get_object (builder, "imagemenuitem4"));
127 	menubar_wnd.backup = GTK_WIDGET (gtk_builder_get_object (builder, "imagemenuitem3"));
128 	menubar_wnd.idlist = GTK_WIDGET (gtk_builder_get_object (builder, "menuitem10"));
129 	menubar_wnd.setclock = GTK_WIDGET (gtk_builder_get_object (builder, "menuitem9"));
130 	menubar_wnd.dumprom = GTK_WIDGET (gtk_builder_get_object (builder, "menuitem8"));
131 
132 	paned = GTK_WIDGET (gtk_builder_get_object (builder, "hpaned1"));
133 	gtk_paned_set_position(GTK_PANED(paned), options.pane_x_size);
134 
135 	show_right_view(options.full_gui);
136 
137 	clist_init();
138 	ctree_init();
139 	dnd_init();
140 
141 	return dbox;
142 }
143 
on_hpaned1_size_request(GtkPaned * paned,gpointer user_data)144 TILP_EXPORT void on_hpaned1_size_request(GtkPaned* paned, gpointer user_data)
145 {
146 	options.pane_x_size = gtk_paned_get_position(paned);
147 }
148 
on_tilp_dbox_destroy(GtkObject * object,gpointer user_data)149 TILP_EXPORT void on_tilp_dbox_destroy(GtkObject* object, gpointer user_data)
150 {
151 	tilp_config_write();
152 	gtk_main_quit();
153 }
154 
on_tilp_dbox_delete_event(GtkWidget * widget,GdkEvent * event,gpointer user_data)155 TILP_EXPORT gboolean on_tilp_dbox_delete_event(GtkWidget* widget, GdkEvent* event, gpointer user_data)
156 {
157 	if(options.full_gui)
158 		gtk_window_get_size(GTK_WINDOW(widget), &options.wnd_x_size1, &options.wnd_y_size1);
159 	else
160 		gtk_window_get_size(GTK_WINDOW(widget), &options.wnd_x_size2, &options.wnd_y_size2);
161 
162 	return FALSE;
163 }
164 
165 /* Help menu */
166 
on_manual1_activate(GtkMenuItem * menuitem,gpointer user_data)167 TILP_EXPORT void on_manual1_activate(GtkMenuItem* menuitem, gpointer user_data)
168 {
169 	gchar *path = g_strconcat(inst_paths.help_dir, _("Manual_en.html"), NULL);
170 
171 	if(go_to_bookmark(path) < 0)
172 		msg_box1(_("Error"), _("Failed to run browser."));
173 	g_free(path);
174 }
175 
on_manpage1_activate(GtkMenuItem * menuitem,gpointer user_data)176 TILP_EXPORT void on_manpage1_activate(GtkMenuItem* menuitem, gpointer user_data)
177 {
178 	display_manpage_dbox();
179 }
180 
on_ti_s_web_site1_activate(GtkMenuItem * menuitem,gpointer user_data)181 TILP_EXPORT void on_ti_s_web_site1_activate(GtkMenuItem* menuitem, gpointer user_data)
182 {
183 	go_to_bookmark("http://education.ti.com");
184 }
185 
on_calculator_software1_activate(GtkMenuItem * menuitem,gpointer user_data)186 TILP_EXPORT void on_calculator_software1_activate(GtkMenuItem* menuitem, gpointer user_data)
187 {
188 	go_to_bookmark("http://epsstore.ti.com");
189 }
190 
on_ticalcorg1_activate(GtkMenuItem * menuitem,gpointer user_data)191 TILP_EXPORT void on_ticalcorg1_activate(GtkMenuItem* menuitem, gpointer user_data)
192 {
193 	go_to_bookmark("http://www.ticalc.org");
194 }
195 
on_tiplanetorg1_activate(GtkMenuItem * menuitem,gpointer user_data)196 TILP_EXPORT void on_tiplanetorg1_activate(GtkMenuItem* menuitem, gpointer user_data)
197 {
198 	go_to_bookmark("http://tiplanet.org");
199 }
200 
on_ti_frorg1_activate(GtkMenuItem * menuitem,gpointer user_data)201 TILP_EXPORT void on_ti_frorg1_activate(GtkMenuItem* menuitem, gpointer user_data)
202 {
203 	go_to_bookmark("http://www.ti-fr.com");
204 }
205 
on_the_lpg1_activate(GtkMenuItem * menuitem,gpointer user_data)206 TILP_EXPORT void on_the_lpg1_activate(GtkMenuItem* menuitem, gpointer user_data)
207 {
208 	go_to_bookmark("http://lpg.ticalc.org");
209 }
210 
on_tilp_s_web_site1_activate(GtkMenuItem * menuitem,gpointer user_data)211 TILP_EXPORT void on_tilp_s_web_site1_activate(GtkMenuItem* menuitem, gpointer user_data)
212 {
213 	go_to_bookmark("http://tilp.info");
214 }
215 
on_bug_report1_activate(GtkMenuItem * menuitem,gpointer user_data)216 TILP_EXPORT void on_bug_report1_activate(GtkMenuItem* menuitem, gpointer user_data)
217 {
218 	GtkWidget *dialog;
219 	const gchar *message = _("There are several ways to get in touch if you encounter a problem with TiLP or if you have questions, suggestions, bug reports, etc:\n- if you have general questions or problems, please consider the users' mailing list first (mailto:tilp-users@list.sf.net).\n- if you want to discuss about TiLP, you can use the TiLP forum (http://sourceforge.net/forum/?group_id=18378).\n- for bug reports, use the 'Bug Tracking System' (http://sourceforge.net/tracker/?group_id=18378).\n\nBefore e-mailing the TiLP team, make sure you have read the FAQ....");
220 
221 	dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL,
222 				  GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
223 				  "%s", message);
224 	gtk_dialog_run(GTK_DIALOG(dialog));
225 	gtk_widget_destroy(dialog);
226 }
227 
on_changelog1_activate(GtkMenuItem * menuitem,gpointer user_data)228 TILP_EXPORT void on_changelog1_activate(GtkMenuItem* menuitem, gpointer user_data)
229 {
230 	display_release_dbox();
231 }
232 
on_about1_activate(GtkMenuItem * menuitem,gpointer user_data)233 TILP_EXPORT void on_about1_activate(GtkMenuItem* menuitem, gpointer user_data)
234 {
235 	display_about_dbox();
236 }
237 
238 /* Toolbar buttons callbacks */
239 
on_rom_dump1_activate(GtkMenuItem * menuitem,gpointer user_data)240 TILP_EXPORT void on_rom_dump1_activate(GtkMenuItem* menuitem, gpointer user_data)
241 {
242 	char* src_filename;
243 	const char *dst_filename;
244 	const char *dst_filename2;
245 	char filename[128];
246 
247 	if (tilp_calc_rom_dump())
248 		return;
249 
250 	src_filename = g_strconcat(g_get_tmp_dir(), G_DIR_SEPARATOR_S, TMPFILE_ROMDUMP, NULL);
251 
252 	sprintf(filename, "dump%s", tifiles_model_to_string(options.calc_model));
253 	dst_filename = create_fsel(local.cwdir, filename, "*.rom", TRUE);
254 	if (!dst_filename)
255 	{
256 		g_free(src_filename);
257 		return;
258 	}
259 
260 	if (!strcmp(tifiles_fext_get(dst_filename), ""))
261 		dst_filename2 = g_strconcat(dst_filename, ".", "rom", NULL);
262 	else
263 		dst_filename2 = g_strdup(dst_filename);
264 	//g_free((void *)dst_filename);
265 
266 	if (dst_filename2)
267 	{
268 		tilp_file_move_with_check(src_filename, dst_filename2);
269 	}
270 	g_free(src_filename);
271 	g_free((void *)dst_filename2);
272 
273 	tilp_dirlist_local();
274 	clist_refresh();
275 	labels_refresh();
276 }
277 
278 // Ready
on_tilp_button1_clicked(GtkButton * button,gpointer user_data)279 TILP_EXPORT void on_tilp_button1_clicked(GtkButton* button, gpointer user_data)
280 {
281 	tilp_calc_isready();
282 }
283 
284 // Dirlist
on_tilp_button2_clicked(GtkButton * button,gpointer user_data)285 TILP_EXPORT void on_tilp_button2_clicked(GtkButton* button, gpointer user_data)
286 {
287 	if (tilp_calc_dirlist() != 0)
288 		return;
289 
290 	ctree_refresh();
291 	labels_refresh();
292 }
293 
294 // Backup
on_tilp_button3b_clicked(GtkButton * button,gpointer user_data)295 TILP_EXPORT void on_tilp_button3b_clicked(GtkButton* button, gpointer user_data)
296 {
297 	char* src_filename;
298 	const char *dst_filename;
299 	const char *dst_filename2;
300 	char *ext;
301 
302 	if (tilp_calc_recv_backup() != 0)
303 		return;
304 
305 	src_filename = g_strconcat(g_get_tmp_dir(), G_DIR_SEPARATOR_S, TMPFILE_BACKUP, NULL);
306 
307 	ext = g_strconcat("*.", tifiles_fext_of_backup(options.calc_model), NULL);
308 	dst_filename = create_fsel(local.cwdir, "backup", ext, TRUE);
309 	g_free(ext);
310 
311 	if (!dst_filename)
312 	{
313 		g_free(src_filename);
314 		return;
315 	}
316 
317 	if (!strcmp(tifiles_fext_get(dst_filename), ""))
318 		dst_filename2 = g_strconcat(dst_filename, ".", tifiles_fext_of_backup(options.calc_model), NULL);
319 	else
320 		dst_filename2 = g_strdup(dst_filename);
321 	//g_free((void *)dst_filename);
322 
323 	if (dst_filename2)
324 	{
325 		tilp_file_move_with_check(src_filename, dst_filename2);
326 	}
327 	g_free(src_filename);
328 	g_free((void *)dst_filename2);
329 
330 	tilp_dirlist_local();
331 	clist_refresh();
332 	labels_refresh();
333 }
334 
on_tilp_button3_clicked(GtkButton * button,gpointer user_data)335 TILP_EXPORT void on_tilp_button3_clicked(GtkButton* button, gpointer user_data)
336 {
337 	if(options.backup_as_tigroup && tifiles_is_flash(options.calc_model))
338 		on_tilp_button7_clicked(button, user_data);
339 	else
340 		on_tilp_button3b_clicked(button, user_data);
341 }
342 
343 // Restore
on_tilp_button4_clicked(GtkButton * button,gpointer user_data)344 TILP_EXPORT void on_tilp_button4_clicked(GtkButton* button, gpointer user_data)
345 {
346 	const char *filename;
347 	char *ext;
348 	int mode = TIG_ALL | TIG_BACKUP;
349 
350 	ext = g_strconcat("*.", tifiles_fext_of_backup(options.calc_model), ";*.tig", NULL);
351 	filename = create_fsel(local.cwdir, NULL, ext, FALSE);
352 	g_free(ext);
353 
354 	if(filename)
355 	{
356 		if(tifiles_file_is_tigroup(filename))
357 		{
358 			int ret = backup_box(_("Restore"), _("Data to restore:"), &mode);
359 			if(ret != BUTTON1)
360 				return;
361 			tilp_calc_send_tigroup(filename, mode | TIG_BACKUP);
362 		}
363 		else if(tifiles_file_is_backup(filename))
364 			tilp_calc_send_backup(filename);
365 	}
366 }
367 
save_group(void)368 static int save_group(void)
369 {
370 	char* src_filename;
371 	const char *dst_filename;
372 	const char *dst_filename2;
373 	char *ext;
374 
375 	src_filename = g_strconcat(g_get_tmp_dir(), G_DIR_SEPARATOR_S, TMPFILE_GROUP,
376 		".", tifiles_fext_of_group(options.calc_model), NULL);
377 
378 	ext = g_strconcat("*.", tifiles_fext_of_group(options.calc_model), NULL);
379 	dst_filename = create_fsel(local.cwdir, "group", ext, TRUE);
380 	g_free(ext);
381 
382 	if (!dst_filename)
383 	{
384 		g_free(src_filename);
385 		return -1;
386 	}
387 
388 	if (!strcmp(tifiles_fext_get(dst_filename), ""))
389 		dst_filename2 = g_strconcat(dst_filename, ".", tifiles_fext_of_group(options.calc_model), NULL);
390 	else
391 		dst_filename2 = g_strdup(dst_filename);
392 	//g_free((void *)dst_filename);
393 
394 	if (dst_filename2)
395 	{
396 		tilp_file_move_with_check(src_filename, dst_filename2);
397 	}
398 	g_free(src_filename);
399 	g_free((void *)dst_filename2);
400 
401 	tilp_dirlist_local();
402 	clist_refresh();
403 	labels_refresh();
404 
405 	return 0;
406 }
407 
on_tilp_recv(void)408 void on_tilp_recv(void)
409 {
410 	int ret;
411 
412 	if ((remote.selection1 != NULL) || (remote.selection2 != NULL))
413 	{
414 		if (remote.selection1 != NULL)
415 		{
416 			ret = tilp_calc_recv_var();
417 			if (ret < 0)
418 				return;
419 			else if (ret > 0)
420 				save_group();
421 		}
422 
423 		if (remote.selection2 != NULL)
424 		{
425 			ret = tilp_calc_recv_app();
426 			if (ret != 0)
427 				return;
428 		}
429 	}
430 	else if ((options.calc_model == CALC_TI82) || (options.calc_model == CALC_TI85))
431 	{
432 		ret = tilp_calc_recv_var();
433 		if (ret < 0)
434 			return;
435 		else if (ret > 0)
436 			save_group();
437 	}
438 
439 	clist_refresh();
440 	labels_refresh();
441 }
442 
443 // Used for sending vars
444 // Note: user_data is a string:
445 // - such as "<FLASH>" for sending var into FLASH (ti83+/84+/89/92+/v200)
446 // - such as "" for sending var in the default folder
447 // - such as "foo" for sending var in the 'foo' folder
448 // - unused for sending FLASH files
on_tilp_send(const gchar * user_data)449 void on_tilp_send(const gchar *user_data)
450 {
451 	gchar *target;
452 	FileEntry *f;
453 	int ret1 = -1;
454 	int ret2 = -1;
455 
456 	if (local.selection0 == NULL && local.selection2 == NULL && local.selection5 == NULL)
457 		return;
458 
459 	tilp_local_contents_load();
460 
461 	// send apps
462 	if(local.selection3 || (local.selection5 && local.selection3))
463 	{
464 		f = (FileEntry *) local.selection3->data;
465 
466 		// send os upgrades
467 		if(tifiles_file_is_flash(f->name))
468 		{
469 			if(tifiles_file_test(f->name, TIFILE_OS, options.calc_model))
470 			{
471 				if (tilp_calc_send_os(f->name) != 0)
472 					return;
473 			}
474 			else if(tifiles_file_is_app(f->name))
475 			{
476 do_app:
477 				ret1 = tilp_calc_send_app();
478 				if(!ret1)
479 				{
480 					// update dirlist (caching, avoid to request dirlist again)
481 					tilp_local_update_applist();
482 					ctree_refresh();
483 					labels_refresh();
484 				}
485 			}
486 		}
487 		else if (tifiles_file_is_tigroup(f->name))
488 		{
489 			goto do_app;
490 		}
491 	}
492 
493 	// send vars
494 	if(local.selection1 || (local.selection5 && local.selection1))
495 	{
496 		// note: dst_folder must be a copy b/c the user_data
497 		// pointer is no longer valid after dirlist_remote
498 		target = g_strdup(user_data);
499 
500 		// change target folder
501 		if(strcmp(target, "") && strcmp(target, "<FLASH>"))
502 			tilp_local_change_folder(target);
503 
504 		// and wait for action
505 		if (display_action_dbox(target) == BUTTON2)
506 		{
507 			g_free(target);
508 			tilp_local_contents_unload();
509 			return;
510 		}
511 
512 		// needed: avoid box locking/flickering !
513 		GTK_REFRESH();
514 
515 		ret2 = tilp_calc_send_var();
516 		if(!ret2)
517 		{
518 			// update dirlist (caching, avoid to request dirlist again)
519 			tilp_local_update_varlist();
520 			ctree_refresh();
521 			labels_refresh();
522 		}
523 
524 		g_free(target);
525 	}
526 
527 	tilp_local_contents_unload();
528 }
529 
530 // Receive
on_tilp_button5_clicked(GtkButton * button,gpointer user_data)531 TILP_EXPORT void on_tilp_button5_clicked(GtkButton* button, gpointer user_data)
532 {
533 	on_tilp_recv();
534 }
535 
536 // Send
on_tilp_button6_clicked(GtkButton * button,gpointer user_data)537 TILP_EXPORT void on_tilp_button6_clicked(GtkButton* button, gpointer user_data)
538 {
539 	gchar** filenames;
540 	gchar** ptr;
541 	char *ext;
542 
543 	ext = g_strconcat("*.", "*", NULL);
544 	filenames = create_fsels(local.cwdir, NULL, ext);
545 	g_free(ext);
546 
547 	if(filenames == NULL)
548 		return;
549 
550 	for(ptr = filenames; *ptr != NULL; ptr++)
551 		tilp_local_selection_add(*ptr);
552 
553 	g_strfreev(filenames);
554 
555 	on_tilp_send("");
556 	tilp_local_selection_destroy();
557 }
558 
559 // Recv TIGroup
on_tilp_button7_clicked(GtkButton * button,gpointer user_data)560 TILP_EXPORT void on_tilp_button7_clicked(GtkButton* button, gpointer user_data)
561 {
562 	char* src_filename;
563 	const char *dst_filename;
564 	const char *dst_filename2;
565 	int ret;
566 	int mode = TIG_ALL;
567 
568 	ret = backup_box(_("Backup"), _("Data to backup:"), &mode);
569 	if(ret != BUTTON1)
570 		return;
571 
572 	if (tilp_calc_recv_tigroup(mode) != 0)
573 		return;
574 
575 	src_filename = g_strconcat(g_get_tmp_dir(), G_DIR_SEPARATOR_S, TMPFILE_TIGROUP, NULL);
576 	dst_filename = create_fsel(local.cwdir, "backup", "*.tig", TRUE);
577 
578 	if(!dst_filename)
579 	{
580 		g_free(src_filename);
581 		return;
582 	}
583 
584 	if (!strcmp(tifiles_fext_get(dst_filename), ""))
585 		dst_filename2 = g_strconcat(dst_filename, ".tig", NULL);
586 	else
587 		dst_filename2 = g_strdup(dst_filename);
588 	//g_free((void *)dst_filename);
589 
590 	if (dst_filename2)
591 	{
592 		tilp_file_move_with_check(src_filename, dst_filename2);
593 	}
594 	g_free(src_filename);
595 	g_free((void *)dst_filename2);
596 
597 	tilp_dirlist_local();
598 	clist_refresh();
599 	labels_refresh();
600 }
601 
602 // Send TIGroup
on_tilp_button8_clicked(GtkButton * button,gpointer user_data)603 TILP_EXPORT void on_tilp_button8_clicked(GtkButton* button, gpointer user_data)
604 {
605 	const char *filename;
606 	int ret;
607 	int mode = TIG_ALL;
608 
609 	ret = backup_box(_("Restore"), _("Data to restore:"), &mode);
610 	if(ret != BUTTON1)
611 		return;
612 
613 	filename = create_fsel(local.cwdir, NULL, "*.tig", FALSE);
614 	if(filename)
615 		tilp_calc_send_tigroup(filename, mode);
616 
617 	return;
618 }
619 
620 // ---
621 
622 // make new dir
on_tilp_button10_clicked(GtkButton * button,gpointer user_data)623 TILP_EXPORT void on_tilp_button10_clicked(GtkButton* button, gpointer user_data)
624 {
625 	gchar *utf8 = NULL;
626 	gsize br, bw;
627 	gchar *dirname;
628 
629 	utf8 = gif->msg_entry(_("Make a new directory"), _("Name: "), _("new_directory"));
630 	if (utf8 == NULL)
631 		return;
632 
633 	dirname = g_filename_from_utf8(utf8, -1, &br, &bw, NULL);
634 	g_free(utf8);
635 
636 	tilp_file_mkdir(dirname);
637 	g_free(dirname);
638 
639 	clist_refresh();
640 	labels_refresh();
641 }
642 
643 
644 // trash
on_tilp_button11_clicked(GtkButton * button,gpointer user_data)645 TILP_EXPORT void on_tilp_button11_clicked(GtkButton* button, gpointer user_data)
646 {
647 	tilp_file_selection_delete();
648 
649 	clist_refresh();
650 	labels_refresh();
651 }
652 
653 // refresh
on_tilp_button12_clicked(GtkButton * button,gpointer user_data)654 TILP_EXPORT void on_tilp_button12_clicked(GtkButton* button, gpointer user_data)
655 {
656 	if (!local.copy_cut)
657 		tilp_file_selection_destroy();
658 
659 	clist_refresh();
660 	labels_refresh();
661 }
662 
663 // take screenshot
on_tilp_menuitem7_clicked(GtkButton * button,gpointer user_data)664 TILP_EXPORT void on_tilp_menuitem7_clicked(GtkButton* button, gpointer user_data)
665 {
666 	display_screenshot_dbox();
667 }
668 
669 // change folder
on_button14_clicked(GtkButton * button,gpointer user_data)670 TILP_EXPORT void on_button14_clicked(GtkButton* button, gpointer user_data)
671 {
672 	gchar *folder;
673 
674 	folder = msg_entry(_("Path"), _("Enter new path"), local.cwdir);
675 	if(folder != NULL)
676 	{
677 		if(g_file_test(folder, G_FILE_TEST_IS_DIR))
678 		{
679 			tilp_file_chdir(folder);
680 			g_free(local.cwdir);
681 			local.cwdir = g_get_current_dir();
682 
683 			clist_refresh();
684 			labels_refresh();
685 		}
686 		g_free(folder);
687 	}
688 }
689 
690 // set clock
on_tilp_menuitem9_clicked(GtkButton * button,gpointer user_data)691 TILP_EXPORT void on_tilp_menuitem9_clicked(GtkButton* button, gpointer user_data)
692 {
693 	display_clock_dbox();
694 }
695 
696 //get id-list
on_tilp_menuitem10_clicked(GtkButton * button,gpointer user_data)697 TILP_EXPORT void on_tilp_menuitem10_clicked(GtkButton* button, gpointer user_data)
698 {
699 	tilp_calc_idlist(0);
700 }
701 
702 //get calc info
on_tilp_menuitem12_clicked(GtkButton * button,gpointer user_data)703 TILP_EXPORT void on_tilp_menuitem12_clicked(GtkButton* button, gpointer user_data)
704 {
705 	CalcInfos infos;
706 	tilp_calc_get_infos(&infos);
707 }
708 
709 //update View menu
on_tilp_viewmenu_active(GtkButton * button,gpointer user_data)710 TILP_EXPORT void on_tilp_viewmenu_active(GtkButton* button, gpointer user_data)
711 {
712 
713 }
714