atomes 1.1.14
atomes: an atomic scale modeling tool box
Loading...
Searching...
No Matches
gui.c
Go to the documentation of this file.
1/* This file is part of the 'atomes' software
2
3'atomes' is free software: you can redistribute it and/or modify it under the terms
4of the GNU Affero General Public License as published by the Free Software Foundation,
5either version 3 of the License, or (at your option) any later version.
6
7'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
8without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9See the GNU General Public License for more details.
10
11You should have received a copy of the GNU Affero General Public License along with 'atomes'.
12If not, see <https://www.gnu.org/licenses/>
13
14Copyright (C) 2022-2024 by CNRS and University of Strasbourg */
15
24/*
25* This file: 'gui.c'
26*
27* Contains:
28*
29
30 - The GUI of the main window
31 - The menu elements of the workspace menu
32 - Creation of menu items, actions, of menu items, actions, used in the entire atomes software
33
34*
35* List of functions:
36
37 G_MODULE_EXPORT gboolean pop_menu (GtkWidget * widget, GdkEventButton * event, gpointer data);
38 G_MODULE_EXPORT gboolean on_atomes_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data);
39
40 void clean_view ();
41 void view_buffer (GtkTextBuffer * buffer);
42 void atomes_key_pressed (guint keyval, GdkModifierType state);
43 void add_action (GSimpleAction * action);
44 void remove_action (gchar * action_name);
45 void remove_edition_actions ();
46 void remove_edition_and_analyze_actions ();
47 void widget_add_action (GSimpleActionGroup * action_group, const gchar * act, GCallback handler, gpointer data,
48 gboolean check, gboolean status, gboolean radio, const gchar * stat);
49 void append_submenu (GMenu * menu, const gchar * label, GMenu * submenu);
50 void append_menu_item (GMenu * menu, const gchar * label, const gchar * action, const gchar * accel,
51 const gchar * custom, int format, const gchar * icon,
52 gboolean check, gboolean status, gboolean radio, const gchar * rstatus);
53
54 G_MODULE_EXPORT void show_periodic_table (GtkWidget * widg, gpointer data);
55 G_MODULE_EXPORT void atomes_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data);
56 G_MODULE_EXPORT void atomes_popup_menu (GtkGesture * gesture, int n_press, double x, double y, gpointer data);
57
58 GtkWidget * create_main_window (GApplication * atomes);
59
60 GMenuItem * create_gmenu_item (const gchar * label, const gchar * action, const gchar * accel,
61 const gchar * custom, int format, const gchar * icon,
62 gboolean check, gboolean status, gboolean radio, const gchar * rstatus);
63
64 GMenu * workspace_section (gchar * act, int pop);
65 GMenu * port_section (gchar * act, int pop, int port);
66 GMenu * project_section (gchar * act, int pop_up, int proj, int calc);
67 GMenu * import_section (gchar * act);
68 GMenu * quit_section (gchar * act);
69 GMenu * workspace_title ();
70 GMenu * project_title (int pop_up, int proj);
71 GMenu * create_workspace_menu (gchar * act, int pop_up, int proj, int calc);
72 GMenu * create_edit_menu ();
73 GMenu * tool_box_section ();
74 GMenu * create_analyze_menu ();
75 GMenu * create_help_menu ();
76 GMenu * atomes_menu_bar ();
77
78*/
79
80#include "global.h"
81#include "callbacks.h"
82#include "interface.h"
83#include "project.h"
84#include "workspace.h"
85
86extern int objects[3];
87extern int * object_was_selected[3];
88extern int ** tmp_object_id[3];
89extern GtkWidget * curvetbox ();
90extern GtkWidget * work_menu (int p, int c);
91
92extern G_MODULE_EXPORT void compute_this_prop (GtkWidget * widg, gpointer data);
93extern G_MODULE_EXPORT void on_create_new_project (GtkWidget * widg, gpointer data);
94extern int get_atom_id_from_periodic_table (atom_search * asearch);
95extern G_MODULE_EXPORT void leaving_from_menu (GtkWidget * widg, gpointer data);
96extern G_MODULE_EXPORT void on_edit_activate (GtkWidget * widg, gpointer data);
97extern G_MODULE_EXPORT void on_calc_activate (GtkWidget * widg, gpointer data);
98
99#ifdef GTK3
100GtkWidget * MainEvent;
101#endif
102
103gchar * dots[NDOTS];
104gchar * calc_img[NCALCS-2];
106
107char * calc_name[NCALCS-2] = {"g(r)/G(r)",
108 "S(q) from FFT[g(r)]",
109 "S(q) from Debye equation",
110 "g(r)/G(r) from FFT[S(q)]",
111 "Bonds and angles",
112 "Ring statistics",
113 "Chain statistics",
114 "Spherical harmonics",
115 "Mean Squared Displacement",
116 "Bond valence"};
117
118char * graph_name[NGRAPHS] = {"g(r)/G(r)",
119 "S(q) from FFT[g(r)]",
120 "S(q) from Debye equation",
121 "g(r)/G(r) from FFT[S(q)]",
122 "Bonds properties",
123 "Angle distributions",
124 "Ring statistics",
125 "Chain statistics",
126 "Spherical harmonics",
127 "Mean Squared Displacement"};
128
133
134#ifdef GTK3
144G_MODULE_EXPORT gboolean pop_menu (GtkWidget * widget, GdkEventButton * event, gpointer data)
145{
146 if (event -> button == 3)
147 {
148 pop_menu_at_pointer (work_menu (-1, -1), (GdkEvent *)event);
149 }
150 return FALSE;
151}
152#endif
153
160{
163#ifdef GTK4
164 atomes_logo = gtk_picture_new_for_filename (PACKAGE_LOGO);
165 gtk_widget_set_size_request (atomes_logo, 550, -1);
167#else
168 atomes_logo = gtk_image_new_from_file (PACKAGE_LOGO);
170 gtk_container_add (GTK_CONTAINER(MainEvent), atomes_logo);
171 show_the_widgets (MainEvent);
172#endif
173}
174
182void view_buffer (GtkTextBuffer * buffer)
183{
184 if (atomes_logo)
185 {
186#ifdef GTK4
188#endif
190 }
191 gboolean add = FALSE;
192 if (! MainView)
193 {
194 MainView = gtk_text_view_new ();
195 gtk_text_view_set_editable (GTK_TEXT_VIEW(MainView), 0);
197 add = TRUE;
198 }
199 gtk_text_view_set_buffer (GTK_TEXT_VIEW(MainView), buffer);
200#ifdef GTK3
201 if (! MainScrol[1])
202 {
203 MainScrol[1] = create_scroll (NULL, -1, -1, GTK_SHADOW_ETCHED_IN);
204 gtk_container_add (GTK_CONTAINER(MainEvent), MainScrol[1]);
205 add = TRUE;
206 }
207 if (add) gtk_container_add (GTK_CONTAINER(MainScrol[1]), MainView);
208#else
209 if (add)
210 {
212 }
213#endif
215}
216
225void atomes_key_pressed (guint keyval, GdkModifierType state)
226{
227 if (state & GDK_CONTROL_MASK)
228 {
229 switch (keyval)
230 {
231 case GDK_KEY_a:
232 create_about_dialog (NULL, NULL);
233 break;
234 case GDK_KEY_c:
235 on_close_workspace (NULL, GINT_TO_POINTER(1));
236 break;
237 case GDK_KEY_n:
238 on_create_new_project (NULL, NULL);
239 break;
240 case GDK_KEY_o:
241 on_open_save_activate (NULL, GINT_TO_POINTER(0));
242 break;
243 case GDK_KEY_p:
245 break;
246 case GDK_KEY_q:
247#ifdef GTK4
248 leaving_question (NULL, NULL);
249#else
250 leaving_question (NULL, NULL, NULL);
251#endif
252 break;
253 case GDK_KEY_s:
254 on_save_as_activate (NULL, GINT_TO_POINTER(3));
255 break;
256 case GDK_KEY_t:
257 on_show_curve_toolbox (NULL, NULL);
258 break;
259 case GDK_KEY_w:
260 on_open_save_activate (NULL, GINT_TO_POINTER(2));
261 break;
262 }
263 }
264}
265
266#ifdef GTK3
267/* gboolean on_atomes_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data)
268{
269 if (event -> type == GDK_KEY_PRESS)
270 {
271 atomes_key_pressed (event-> keyval, event -> state);
272 }
273 return FALSE;
274} */
275#endif
276
284void add_action (GSimpleAction * action)
285{
286 g_action_map_add_action (G_ACTION_MAP(AtomesApp), G_ACTION(action));
287}
288
297{
298 g_action_map_remove_action (G_ACTION_MAP(AtomesApp), (const gchar *)action_name);
299}
300
307{
308 int i;
309 for (i=0; i<3; i++) remove_action (edition_action_names[i]);
310}
311
318{
320 int i;
321 for (i=0; i<9; i++) remove_action (analyze_action_names[i]);
322}
323
332G_MODULE_EXPORT void show_periodic_table (GtkWidget * widg, gpointer data)
333{
335}
336
346G_MODULE_EXPORT void atomes_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data)
347{
348 gchar * name = g_strdup_printf ("%s", g_action_get_name(G_ACTION(action)));
349 if (g_strcmp0 (name, "workspace.open") == 0)
350 {
351 on_open_save_activate (NULL, data);
352 }
353 else if (g_strcmp0 (name, "workspace.save") == 0)
354 {
355 on_open_save_activate (NULL, data);
356 }
357 else if (g_strcmp0 (name, "workspace.save-as") == 0)
358 {
359 on_save_as_activate (NULL, data);
360 }
361 else if (g_strcmp0 (name, "workspace.close") == 0)
362 {
363 on_close_workspace (NULL, data);
364 }
365 else if (g_strcmp0 (name, "project.new") == 0)
366 {
367 on_create_new_project (NULL, data);
368 }
369 else if (g_strcmp0 (name, "project.edit") == 0)
370 {
371 change_project_name (NULL, data);
372 }
373 else if (g_strcmp0 (name, "project.active") == 0)
374 {
375 activate_project (NULL, data);
376 }
377 else if (g_strcmp0 (name, "project.compute") == 0)
378 {
379 compute_this_prop (NULL, data);
380 }
381 else if (g_strcmp0 (name, "project.open") == 0)
382 {
383 on_open_save_activate (NULL, data);
384 }
385 else if (g_strcmp0 (name, "project.save") == 0)
386 {
387 on_open_save_activate (NULL, data);
388 }
389 else if (g_strcmp0 (name, "project.save-as") == 0)
390 {
391 on_save_as_activate (NULL, data);
392 }
393 else if (g_strcmp0 (name, "project.close") == 0)
394 {
395 on_close_activate (NULL, data);
396 }
397 else if (g_strcmp0 (name, "export.isaacs") == 0)
398 {
399 on_isaacs_port (NULL, data);
400 }
401 else if (g_strcmp0 (name, "export.coordinates") == 0)
402 {
403 on_coord_port (NULL, data);
404 }
405 else if (g_strcmp0 (name, "import.isaacs") == 0)
406 {
407 on_isaacs_port (NULL, data);
408 }
409 else if (g_strcmp0 (name, "import.coordinates") == 0)
410 {
411 on_coord_port (NULL, data);
412 }
413 else if (g_strcmp0 (name, "program.quit") == 0)
414 {
415 leaving_from_menu (NULL, data);
416 }
417 else if (g_strcmp0 (name, "edit.chemistry") == 0)
418 {
419 on_edit_activate (NULL, data);
420 }
421 else if (g_strcmp0 (name, "edit.periodicity") == 0)
422 {
423 on_edit_activate (NULL, data);
424 }
425 else if (g_strcmp0 (name, "edit.cutoffs") == 0)
426 {
427 on_edit_activate (NULL, data);
428 }
429 else if (g_strcmp0 (name, "analyze.gr") == 0)
430 {
431 on_calc_activate (NULL, data);
432 }
433 else if (g_strcmp0 (name, "analyze.sq") == 0)
434 {
435 on_calc_activate (NULL, data);
436 }
437 else if (g_strcmp0 (name, "analyze.sk") == 0)
438 {
439 on_calc_activate (NULL, data);
440 }
441 else if (g_strcmp0 (name, "analyze.gk") == 0)
442 {
443 on_calc_activate (NULL, data);
444 }
445 else if (g_strcmp0 (name, "analyze.bonds") == 0)
446 {
447 on_calc_activate (NULL, data);
448 }
449 else if (g_strcmp0 (name, "analyze.rings") == 0)
450 {
451 on_calc_activate (NULL, data);
452 }
453 else if (g_strcmp0 (name, "analyze.chains") == 0)
454 {
455 on_calc_activate (NULL, data);
456 }
457 else if (g_strcmp0 (name, "analyze.sp") == 0)
458 {
459 on_calc_activate (NULL, data);
460 }
461 else if (g_strcmp0 (name, "analyze.msd") == 0)
462 {
463 on_calc_activate (NULL, data);
464 }
465 else if (g_strcmp0 (name, "analyze.tool-box") == 0)
466 {
467 on_show_curve_toolbox (NULL, data);
468 }
469 else if (g_strcmp0 (name, "help.periodic") == 0)
470 {
471 show_periodic_table (NULL, data);
472 }
473 else if (g_strcmp0 (name, "help.about") == 0)
474 {
475 create_about_dialog (NULL, data);
476 }
477 /*else if (g_strcmp0 (name, "help.register") == 0)
478 {
479 register_atomes (NULL, data);
480 }*/
481 g_free (name);
482}
483
484GIcon * get_gicon_from_data (int format, const gchar * icon)
485{
486 switch (format)
487 {
488 case IMG_FILE:
489 return g_file_icon_new (g_file_new_for_path (icon));
490 break;
491 case IMG_STOCK:
492 return g_themed_icon_new (icon);
493 break;
494 default:
495 return NULL;
496 break;
497 }
498}
499
515void widget_add_action (GSimpleActionGroup * action_group, const gchar * act, GCallback handler, gpointer data,
516 gboolean check, gboolean status, gboolean radio, const gchar * stat)
517{
518 GSimpleAction * action;
519 GVariant * action_state;
520 if (radio)
521 {
522 action_state = g_variant_new_string (stat);
523 action = g_simple_action_new_stateful (act, G_VARIANT_TYPE_STRING, action_state);
524 }
525 else if (check)
526 {
527 action_state = g_variant_new_boolean (status);
528 action = g_simple_action_new_stateful (act, NULL, action_state);
529 }
530 else
531 {
532 action = g_simple_action_new (act, NULL);
533 }
534 g_signal_connect (action, "activate", handler, data);
535 g_action_map_add_action (G_ACTION_MAP(action_group), G_ACTION(action));
536}
537
556GMenuItem * create_gmenu_item (const gchar * label, const gchar * action, const gchar * accel,
557 const gchar * custom, int format, const gchar * icon,
558 gboolean check, gboolean status, gboolean radio, const gchar * rstatus)
559{
560 GMenuItem * item;
561 item = g_menu_item_new (label, action);
562 /* GKT4 bug, normally mark-up should be provided using boolean:
563 g_menu_item_set_attribute (item, "use-markup", "b", TRUE, NULL);
564 But it does not work, however it does using a string: */
565 g_menu_item_set_attribute (item, "use-markup", "s", "TRUE", NULL);
566 if (custom)
567 {
568 g_menu_item_set_attribute (item, "custom", "s", custom, NULL);
569 // g_menu_item_set_attribute_value (item, "custom", g_variant_new_string (custom));
570 GVariant * cust = g_menu_item_get_attribute_value (item, "custom", g_variant_type_new("s"));
571 if (cust) g_print ("item :: %s, custom :: %s\n", label, g_variant_get_string (cust, NULL));
572 }
573 else
574 {
575 if (accel) g_menu_item_set_attribute (item, "accel", "s", accel, NULL);
576 // if (check) g_menu_item_set_attribute (item, "target", "b", status, NULL);
577 if (radio) g_menu_item_set_attribute (item, "target", "s", rstatus, NULL);
578#ifdef MENU_ICONS
579 if (icon)
580 {
581 GIcon * gicon = get_gicon_from_data (format, icon);
582 if (gicon)
583 {
584 g_menu_item_set_icon (item, gicon);
585 g_object_unref (gicon);
586 }
587 }
588#endif
589 }
590 return item;
591}
592
602void append_submenu (GMenu * menu, const gchar * label, GMenu * submenu)
603{
604 GMenuItem * item = g_menu_item_new (label, NULL);
605 /* GKT4 bug, normally mark-up should be provided using boolean:
606 g_menu_item_set_attribute (item, "use-markup", "b", TRUE, NULL);
607 But it does not work, however it does using a string: */
608 g_menu_item_set_attribute (item, "use-markup", "s", "TRUE", NULL);
609 g_menu_item_set_submenu (item, (GMenuModel *)submenu);
610 g_menu_append_item (menu, item);
611}
612
632void append_menu_item (GMenu * menu, const gchar * label, const gchar * action, const gchar * accel,
633 const gchar * custom, int format, const gchar * icon,
634 gboolean check, gboolean status, gboolean radio, const gchar * rstatus)
635{
636 GMenuItem * item = create_gmenu_item (label, action, accel, custom, format, icon, check, status, radio, rstatus);
637 g_menu_append_item (menu, item);
638 g_object_unref (item);
639}
640
649GMenu * workspace_section (gchar * act, int pop)
650{
651 GMenu * menu = g_menu_new ();
652 gchar * str;
653 str = g_strdup_printf ("%s.workspace.open", act);
654 append_menu_item (menu, "Open", (const gchar *)str, "<CTRL>W", NULL, IMG_STOCK, FOPEN, FALSE, FALSE, FALSE, NULL);
655 g_free (str);
656 if (! pop || nprojects)
657 {
658 str = g_strdup_printf ("%s.workspace.save", act);
659 append_menu_item (menu, "Save", (const gchar *)str, NULL, NULL, IMG_STOCK, FSAVE, FALSE, FALSE, FALSE, NULL);
660 g_free (str);
661 str = g_strdup_printf ("%s.workspace.save-as", act);
662 append_menu_item (menu, "Save As", (const gchar *)str, "<CTRL>S", NULL, IMG_STOCK, FSAVEAS, FALSE, FALSE, FALSE, NULL);
663 g_free (str);
664 str = g_strdup_printf ("%s.workspace.close", act);
665 append_menu_item (menu, "Close", (const gchar *)str, "<CTRL>C", NULL, IMG_STOCK, FCLOSE, FALSE, FALSE, FALSE, NULL);
666 g_free (str);
667 }
668 return menu;
669}
670
680GMenu * port_section (gchar * act, int pop, int port)
681{
682 gchar * port_action[2]={"export", "import"};
683 GMenu * menu = g_menu_new ();
684 gchar * str;
685 str = g_strdup_printf ("%s.%s.isaacs", act, port_action[port]);
686 append_menu_item (menu, "ISAACS Project File (*.ipf)", (const gchar *)str, NULL, NULL, IMG_FILE, PACKAGE_MOL, FALSE, FALSE, FALSE, NULL);
687 g_free (str);
688 str = g_strdup_printf ("%s.%s.coordinates", act, port_action[port]);
689 append_menu_item (menu, "Atomic Coordinates", (const gchar *)str, NULL, NULL, IMG_FILE, (port) ? PACKAGE_IMP : PACKAGE_CON, FALSE, FALSE, FALSE, NULL);
690 g_free (str);
691 return menu;
692}
693
704GMenu * project_section (gchar * act, int pop_up, int proj, int calc)
705{
706 GMenu * menu = g_menu_new ();
707 gchar * str, * str_n;
708 if (pop_up && nprojects && proj > -1)
709 {
710 if (activep != proj)
711 {
712 str = g_strdup_printf ("%s.project.active", act);
713 append_menu_item (menu, "Make Active", (const gchar *)str, NULL, NULL, IMG_STOCK, YES, FALSE, FALSE, FALSE, NULL);
714 g_free (str);
715 }
716 if (calc > -1)
717 {
718 str = g_strdup_printf ("%s.project.compute", act);
719 str_n = g_strdup_printf ("Analyze: %s", work_menu_items[calc+4]);
720 append_menu_item (menu, str_n, (get_project_by_id(proj) -> runok[calc]) ? (const gchar *)str : "None", NULL, NULL, IMG_FILE, graph_img[calc], FALSE, FALSE, FALSE, NULL);
721 g_free (str);
722 g_free (str_n);
723 }
724 str = g_strdup_printf ("%s.project.edit", act);
725 append_menu_item (menu, "Edit Name", (const gchar *)str, NULL, NULL, IMG_STOCK, EDITA, FALSE, FALSE, FALSE, NULL);
726 g_free (str);
727 }
728 str = g_strdup_printf ("%s.project.new", act);
729 append_menu_item (menu, "New", (const gchar *)str, "<CTRL>N", NULL, IMG_STOCK, FNEW, FALSE, FALSE, FALSE, NULL);
730 g_free (str);
731 str = g_strdup_printf ("%s.project.open", act);
732 append_menu_item (menu, "Open", (const gchar *)str, "<CTRL>O", NULL, IMG_STOCK, FOPEN, FALSE, FALSE, FALSE, NULL);
733 g_free (str);
734 if (! pop_up || proj > -1)
735 {
736 str = g_strdup_printf ("%s.project.save", act);
737 append_menu_item (menu, "Save", (const gchar *)str, NULL, NULL, IMG_STOCK, FSAVE, FALSE, FALSE, FALSE, NULL);
738 g_free (str);
739 str = g_strdup_printf ("%s.project.save-as", act);
740 append_menu_item (menu, "Save As", (const gchar *)str, NULL, NULL, IMG_STOCK, FSAVEAS, FALSE, FALSE, FALSE, NULL);
741 g_free (str);
742 str = g_strdup_printf ("%s.project.close", act);
743 append_menu_item (menu, "Close", (const gchar *)str, NULL, NULL, IMG_STOCK, FCLOSE, FALSE, FALSE, FALSE, NULL);
744 g_free (str);
745 append_submenu (menu, "Export", port_section(act, pop_up, 0));
746 }
747 return menu;
748}
749
757GMenu * import_section (gchar * act)
758{
759 GMenu * menu = g_menu_new ();
760 append_submenu (menu, "Import", port_section(act, 0, 1));
761 return menu;
762}
763
771GMenu * quit_section (gchar * act)
772{
773 GMenu * menu = g_menu_new ();
774 gchar * str = g_strdup_printf ("%s.program.quit", act);
775 append_menu_item (menu, "Quit", (const gchar *)str, "<CTRL>Q", NULL, IMG_STOCK, FEXIT, FALSE, FALSE, FALSE, NULL);
776 g_free (str);
777 return menu;
778}
779
786{
787 GMenu * menu = g_menu_new ();
788 append_menu_item (menu, "Workspace", "None", NULL, NULL, IMG_FILE, PACKAGE_TD, FALSE, FALSE, FALSE, NULL);
789 return menu;
790}
791
800GMenu * project_title (int pop_up, int proj)
801{
802 GMenu * menu = g_menu_new ();
803 if (pop_up && nprojects && proj > -1)
804 {
805 gchar * str = g_strdup_printf ("<b>%s</b>", get_project_by_id(proj) -> name);
806 append_menu_item (menu, str, "None", NULL, NULL, IMG_FILE, PACKAGE_TD, FALSE, FALSE, FALSE, NULL);
807 g_free (str);
808 }
809 else
810 {
811 append_menu_item (menu, "Project(s)", "None", NULL, NULL, IMG_FILE, PACKAGE_TD, FALSE, FALSE, FALSE, NULL);
812 }
813 return menu;
814}
815
826GMenu * create_workspace_menu (gchar * act, int pop_up, int proj, int calc)
827{
828 GMenu * menu = g_menu_new ();
829 g_menu_append_section (menu, NULL, (GMenuModel*)workspace_title());
830 g_menu_append_section (menu, NULL, (GMenuModel*)workspace_section(act, pop_up));
831 g_menu_append_section (menu, NULL, (GMenuModel*)project_title(pop_up, proj));
832 g_menu_append_section (menu, NULL, (GMenuModel*)project_section(act, pop_up, proj, calc));
833 g_menu_append_section (menu, NULL, (GMenuModel*)import_section(act));
834 g_menu_append_section (menu, NULL, (GMenuModel*)quit_section(act));
835 return menu;
836}
837
844{
845 GMenu * menu = g_menu_new ();
846 append_menu_item (menu, "Chemistry and Physics", "app.edit.chemistry", NULL, NULL, IMG_STOCK, DPROPERTIES, FALSE, FALSE, FALSE, NULL);
847 append_menu_item (menu, "Box and Periodicity", "app.edit.periodicity", NULL, NULL, IMG_STOCK, DPROPERTIES, FALSE, FALSE, FALSE, NULL);
848 append_menu_item (menu, "Bond Cutoffs", "app.edit.cutoffs", NULL, NULL, IMG_STOCK, DPROPERTIES, FALSE, FALSE, FALSE, NULL);
849 return menu;
850}
851
858{
859 GMenu * menu = g_menu_new ();
860 append_menu_item (menu, "Toolboxes", "app.analyze.tool-box", "<CTRL>T", NULL, IMG_STOCK, PAGE_SETUP, FALSE, FALSE, FALSE, NULL);
861 return menu;
862}
863
870{
871 GMenu * menu = g_menu_new ();
872 append_menu_item (menu, "g(r) / G(r)", "app.analyze.gr", NULL, NULL, IMG_FILE, PACKAGE_GR, FALSE, FALSE, FALSE, NULL);
873 append_menu_item (menu, "S(q) from FFT[g(r)]", "app.analyze.sq", NULL, NULL, IMG_FILE, PACKAGE_SQ, FALSE, FALSE, FALSE, NULL);
874 append_menu_item (menu, "S(q) from Debye Eq.", "app.analyze.sk", NULL, NULL, IMG_FILE, PACKAGE_SQ, FALSE, FALSE, FALSE, NULL);
875 append_menu_item (menu, "g(r) / G(r) from FFT[S(q)]", "app.analyze.gk", NULL, NULL, IMG_FILE, PACKAGE_GR, FALSE, FALSE, FALSE, NULL);
876 append_menu_item (menu, "Bonds and Angles", "app.analyze.bonds", NULL, NULL, IMG_FILE, PACKAGE_BD, FALSE, FALSE, FALSE, NULL);
877 append_menu_item (menu, "Ring statistics", "app.analyze.rings", NULL, NULL, IMG_FILE, PACKAGE_RI, FALSE, FALSE, FALSE, NULL);
878 append_menu_item (menu, "Chain statistics", "app.analyze.chains", NULL, NULL, IMG_FILE, PACKAGE_CH, FALSE, FALSE, FALSE, NULL);
879 append_menu_item (menu, "Spherical Harmonics", "app.analyze.sp", NULL, NULL, IMG_FILE, PACKAGE_SP, FALSE, FALSE, FALSE, NULL);
880 append_menu_item (menu, "Mean Squared Displacement", "app.analyze.msd", NULL, NULL, IMG_FILE, PACKAGE_MS, FALSE, FALSE, FALSE, NULL);
881 g_menu_append_section (menu, NULL, (GMenuModel*)tool_box_section());
882 return menu;
883}
884
891{
892 GMenu * menu = g_menu_new ();
893 append_menu_item (menu, "Periodic Table", "app.help.periodic", "<CTRL>P", NULL, IMG_STOCK, ABOUT, FALSE, FALSE, FALSE, NULL);
894 append_menu_item (menu, "About", "app.help.about", "<CTRL>A", NULL, IMG_STOCK, ABOUT, FALSE, FALSE, FALSE, NULL);
895 // append_menu_item (menu, "Register", "app.help.register", NULL, NULL, IMG_STOCK, ABOUT, FALSE, FALSE, FALSE, NULL);
896 return menu;
897}
898
905{
906 GMenu * menu = g_menu_new ();
907 append_submenu (menu, "Workspace", create_workspace_menu("app", 0, -1, -1));
908 append_submenu (menu, "Edit", create_edit_menu());
909 append_submenu (menu, "Analyze", create_analyze_menu());
910 append_submenu (menu, "Help", create_help_menu());
911 return menu;
912}
913
914#ifdef GTK4
926G_MODULE_EXPORT void atomes_popup_menu (GtkGesture * gesture, int n_press, double x, double y, gpointer data)
927{
928 if (gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture) == GDK_BUTTON_SECONDARY)
929 {
930 GdkRectangle rect;
931 rect.x = x;
932 rect.y = y;
933 rect.width = 1;
934 rect.height = 1;
935 GtkWidget * popover = work_menu (-1, -1);
936 gtk_widget_set_parent (popover, MainWindow);
937 gtk_popover_set_has_arrow (GTK_POPOVER(popover), FALSE);
938 gtk_popover_set_pointing_to (GTK_POPOVER(popover), & rect);
939 gtk_popover_popup (GTK_POPOVER(popover));
940 }
941}
942
954G_MODULE_EXPORT gboolean on_atomes_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data)
955{
956 atomes_key_pressed (keyval, state);
957 return TRUE;
958}
959#endif
960
968GtkWidget * create_main_window (GApplication * atomes)
969{
970 int i;
971 THETD = gdk_pixbuf_new_from_file (PACKAGE_TD, NULL);
972#ifdef GTK3
973 gtk_window_set_default_icon (THETD);
974#endif
975 THEMO = gdk_pixbuf_new_from_file (PACKAGE_MOL, NULL);
976 THEBD = gdk_pixbuf_new_from_file (PACKAGE_BD, NULL);
977 SETTING = gdk_pixbuf_new_from_file (PACKAGE_PRO, NULL);
978 SETTINGS = gdk_pixbuf_new_from_file (PACKAGE_SET, NULL);
979 OGL = gdk_pixbuf_new_from_file (PACKAGE_OGL, NULL);
980 OGLM = gdk_pixbuf_new_from_file (PACKAGE_OGLM, NULL);
981 OGLC = gdk_pixbuf_new_from_file (PACKAGE_OGLC, NULL);
982
983 GtkWidget * window = gtk_application_window_new (GTK_APPLICATION(atomes));
984 gtk_window_set_title (GTK_WINDOW(window), PACKAGE);
985 gtk_window_set_resizable (GTK_WINDOW(window), TRUE);
986 gtk_widget_set_size_request (window, 900, 450);
987
988 GSimpleAction * main_act[17];
989 main_act[0] = g_simple_action_new ("workspace.open", NULL);
990 main_act[1] = g_simple_action_new ("workspace.save", NULL);
991 main_act[2] = g_simple_action_new ("workspace.save-as", NULL);
992 main_act[3] = g_simple_action_new ("workspace.close", NULL);
993 main_act[4] = g_simple_action_new ("project.new", NULL);
994 main_act[5] = g_simple_action_new ("project.open", NULL);
995 main_act[6] = g_simple_action_new ("project.save", NULL);
996 main_act[7] = g_simple_action_new ("project.save-as", NULL);
997 main_act[8] = g_simple_action_new ("project.close", NULL);
998 main_act[9] = g_simple_action_new ("export.isaacs", NULL);
999 main_act[10] = g_simple_action_new ("export.coordinates", NULL);
1000 main_act[11] = g_simple_action_new ("import.isaacs", NULL);
1001 main_act[12] = g_simple_action_new ("import.coordinates", NULL);
1002 main_act[13] = g_simple_action_new ("program.quit", NULL);
1003 main_act[14] = g_simple_action_new ("analyze.tool-box", NULL);
1004 main_act[15] = g_simple_action_new ("help.periodic", NULL);
1005 main_act[16] = g_simple_action_new ("help.about", NULL);
1006
1007 for (i=0; i<3; i++) edition_actions[i] = g_simple_action_new (edition_action_names[i], NULL);
1008 for (i=0; i<9; i++) analyze_actions[i] = g_simple_action_new (analyze_action_names[i], NULL);
1009
1010 for (i=0; i<17; i++) add_action (main_act[i]);
1011
1012 g_signal_connect (main_act[0], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(2));
1013 g_signal_connect (main_act[1], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(3));
1014 g_signal_connect (main_act[2], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(3));
1015 g_signal_connect (main_act[3], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1));
1016 g_signal_connect (main_act[4], "activate", G_CALLBACK(atomes_menu_bar_action), NULL);
1017 g_signal_connect (main_act[5], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(0));
1018 g_signal_connect (main_act[6], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1));
1019 g_signal_connect (main_act[7], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1));
1020 g_signal_connect (main_act[8], "activate", G_CALLBACK(atomes_menu_bar_action), NULL);
1021 g_signal_connect (main_act[9], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1));
1022 g_signal_connect (main_act[10], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1));
1023 g_signal_connect (main_act[11], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(0));
1024 g_signal_connect (main_act[12], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(0));
1025 g_signal_connect (main_act[13], "activate", G_CALLBACK(atomes_menu_bar_action), NULL);
1026 for (i=0; i<3; i++)
1027 {
1028 g_signal_connect (edition_actions[i], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(i));
1029 }
1030 for (i=0; i<NCALCS-3; i++)
1031 {
1032 g_signal_connect (analyze_actions[i], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(i));
1033 }
1034 for (i=0; i<3; i++)
1035 {
1036 g_signal_connect (main_act[14+i], "activate", G_CALLBACK(atomes_menu_bar_action), NULL);
1037 }
1038
1039// #endif
1040
1041 /*GtkBuilder * builder = gtk_builder_new_from_file ("menus/main.ui");
1042 GMenuModel * model = G_MENU_MODEL (gtk_builder_get_object (builder, "atomes_menu_bar"));
1043 gtk_application_set_menubar (GTK_APPLICATION(atomes), G_MENU_MODEL(model));
1044 g_object_unref (model);*/
1045 gtk_application_set_menubar (GTK_APPLICATION(atomes), G_MENU_MODEL(atomes_menu_bar()));
1046 gtk_application_window_set_show_menubar (GTK_APPLICATION_WINDOW(window), TRUE);
1047
1048#ifdef GTK3
1049 // g_signal_connect (G_OBJECT(window), "key-press-event", G_CALLBACK(on_atomes_pressed), NULL);
1050 MainEvent = gtk_event_box_new ();
1051 gtk_widget_add_events (MainEvent,
1052 GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK |
1053 GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
1054 g_signal_connect(G_OBJECT(MainEvent), "button_press_event", G_CALLBACK(pop_menu), NULL);
1055 g_signal_connect(G_OBJECT(MainEvent), "button_release_event", G_CALLBACK(pop_menu), NULL);
1056#else
1057 add_widget_gesture_and_key_action (window, "atomes-context-click", G_CALLBACK(atomes_popup_menu), NULL,
1058 NULL, NULL, NULL,
1059 "atomes-key-pressed", G_CALLBACK(on_atomes_pressed), NULL,
1060 NULL, NULL, NULL, NULL, NULL, NULL);
1061#endif
1062 add_gtk_close_event (window, G_CALLBACK(leaving_question), NULL);
1063 GtkWidget * hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
1064 int frame_size[2]={200, 550};
1065 for (i=0; i<2; i++)
1066 {
1067 MainFrame[i] = gtk_frame_new (NULL);
1068 gtk_widget_set_size_request (MainFrame[i], frame_size[i], -1);
1069 MainScrol[i] = create_scroll (NULL, -1, -1, GTK_SHADOW_ETCHED_IN);
1070#ifdef GTK3
1071 if (! i)
1072 {
1074 }
1075 else
1076 {
1078 gtk_container_add (GTK_CONTAINER(MainEvent), MainScrol[i]);
1079 }
1080#else
1081 gtk_scrolled_window_set_propagate_natural_height ((GtkScrolledWindow *)MainScrol[i], TRUE);
1082 gtk_scrolled_window_set_propagate_natural_width ((GtkScrolledWindow *)MainScrol[i], TRUE);
1084#endif
1085 }
1086#ifdef GTK4
1087 gtk_paned_set_start_child (GTK_PANED (hpaned), MainFrame[0]);
1088 gtk_paned_set_resize_start_child (GTK_PANED (hpaned), FALSE);
1089 gtk_paned_set_shrink_start_child (GTK_PANED (hpaned), FALSE);
1090 gtk_paned_set_end_child (GTK_PANED (hpaned), MainFrame[1]);
1091 gtk_paned_set_resize_end_child (GTK_PANED (hpaned), TRUE);
1092 gtk_paned_set_shrink_end_child (GTK_PANED (hpaned), FALSE);
1093#else
1094 gtk_paned_pack1 (GTK_PANED (hpaned), MainFrame[0], FALSE, FALSE);
1095 gtk_paned_pack2 (GTK_PANED (hpaned), MainFrame[1], FALSE, FALSE);
1096#endif
1099 add_container_child (CONTAINER_WIN, window, hpaned);
1100
1101 clean_view ();
1102
1103 show_the_widgets (window);
1104
1105 for (i=0; i<9; i++)
1106 {
1107 davect[i].a = i/3;
1108 davect[i].b = i-3*davect[i].a;
1109 }
1110
1111 calc_img[0] = g_strdup_printf ("%s", PACKAGE_GR);
1112 calc_img[1] = g_strdup_printf ("%s", PACKAGE_SQ);
1113 calc_img[2] = g_strdup_printf ("%s", PACKAGE_SQ);
1114 calc_img[3] = g_strdup_printf ("%s", PACKAGE_GR);
1115 calc_img[4] = g_strdup_printf ("%s", PACKAGE_AN);
1116 calc_img[5] = g_strdup_printf ("%s", PACKAGE_RI);
1117 calc_img[6] = g_strdup_printf ("%s", PACKAGE_CH);
1118 calc_img[7] = g_strdup_printf ("%s", PACKAGE_SP);
1119 calc_img[8] = g_strdup_printf ("%s", PACKAGE_MS);
1120 calc_img[9] = g_strdup_printf ("%s", PACKAGE_BD);
1121
1122 dots[0] = g_strdup_printf ("%s", PACKAGE_DOTA);
1123 dots[1] = g_strdup_printf ("%s", PACKAGE_DOTB);
1124 dots[2] = g_strdup_printf ("%s", PACKAGE_DOTC);
1125 dots[3] = g_strdup_printf ("%s", PACKAGE_DOTD);
1126 dots[4] = g_strdup_printf ("%s", PACKAGE_DOTE);
1127 dots[5] = g_strdup_printf ("%s", PACKAGE_DOTF);
1128 dots[6] = g_strdup_printf ("%s", PACKAGE_DOTG);
1129 dots[7] = g_strdup_printf ("%s", PACKAGE_DOTH);
1130
1131 ifield[0] = g_strdup_printf ("%s", PACKAGE_DFBD);
1132 ifield[1] = g_strdup_printf ("%s", PACKAGE_DFBD);
1133 ifield[2] = g_strdup_printf ("%s", PACKAGE_DFAN);
1134 ifield[3] = g_strdup_printf ("%s", PACKAGE_DFAN);
1135 ifield[4] = g_strdup_printf ("%s", PACKAGE_DFDI);
1136 ifield[5] = g_strdup_printf ("%s", PACKAGE_DFDI);
1137 ifield[6] = g_strdup_printf ("%s", PACKAGE_DFTD);
1138 ifield[7] = g_strdup_printf ("%s", PACKAGE_DFIN);
1139
1140 bravais_img[0] = g_strdup_printf ("%s", PACKAGE_SGTC);
1141 bravais_img[1] = g_strdup_printf ("%s", PACKAGE_SGMP);
1142 bravais_img[2] = g_strdup_printf ("%s", PACKAGE_SGMI);
1143 bravais_img[3] = g_strdup_printf ("%s", PACKAGE_SGOP);
1144 bravais_img[4] = g_strdup_printf ("%s", PACKAGE_SGOI);
1145 bravais_img[5] = g_strdup_printf ("%s", PACKAGE_SGOC);
1146 bravais_img[6] = g_strdup_printf ("%s", PACKAGE_SGOF);
1147 bravais_img[7] = g_strdup_printf ("%s", PACKAGE_SGTP);
1148 bravais_img[8] = g_strdup_printf ("%s", PACKAGE_SGTI);
1149 bravais_img[9] = g_strdup_printf ("%s", PACKAGE_SGTR);
1150 bravais_img[10] = g_strdup_printf ("%s", PACKAGE_SGHP);
1151 bravais_img[11] = g_strdup_printf ("%s", PACKAGE_SGCP);
1152 bravais_img[12] = g_strdup_printf ("%s", PACKAGE_SGCI);
1153 bravais_img[13] = g_strdup_printf ("%s", PACKAGE_SGCF);
1154
1155 // Rouge
1156 std[0].red = 1.0;
1157 std[0].green = 0.0;
1158 std[0].blue = 0.0;
1159 // Jaune
1160 std[1].red = 1.0;
1161 std[1].green = 1.0;
1162 std[1].blue = 0.0;
1163 // Vert
1164 std[2].red = 0.0;
1165 std[2].green = 1.0;
1166 std[2].blue = 0.0;
1167 // Cyan
1168 std[3].red = 0.0;
1169 std[3].green = 1.0;
1170 std[3].blue = 1.0;
1171 // Bleu
1172 std[4].red = 0.0;
1173 std[4].green = 0.0;
1174 std[4].blue = 1.0;
1175 // Rose
1176 std[5].red = 1.0;
1177 std[5].green = 0.0;
1178 std[5].blue = 1.0;
1179
1180 for (i=0; i<3; i++)
1181 {
1182 objects[i] = 0;
1183 object_was_selected[i] = NULL;
1184 tmp_object_id[i] = NULL;
1185 }
1186 cut_sel.a = cut_sel.b = 0;
1187 cut_sel.c = 1;
1188 cut_lab.a = cut_lab.b = cut_lab.c = 0;
1189
1190 return window;
1191}
gchar * action_name[5]
Definition atom_edit.c:60
G_MODULE_EXPORT void on_show_curve_toolbox(GtkWidget *widg, gpointer data)
show the curve toolboxes
Definition calc_menu.c:1019
G_MODULE_EXPORT void on_close_workspace(GtkWidget *widg, gpointer data)
close the active workspace
Definition callbacks.c:133
G_MODULE_EXPORT void on_open_save_activate(GtkWidget *widg, gpointer data)
open or save an atomes file - prepare the dialog
Definition callbacks.c:423
G_MODULE_EXPORT void on_isaacs_port(GtkWidget *widg, gpointer data)
open or write ISAACS XML file - prepare the dialog
Definition callbacks.c:776
G_MODULE_EXPORT void on_coord_port(GtkWidget *widg, gpointer data)
export or import atomic coordinates: prepare dialog
Definition callbacks.c:1602
G_MODULE_EXPORT void on_save_as_activate(GtkWidget *widg, gpointer data)
open or save, choosing a file name
Definition callbacks.c:621
Callback declarations for main window.
G_MODULE_EXPORT void on_close_activate(GtkWidget *widg, gpointer cdata)
signal to close a project
Definition close_p.c:332
#define PACKAGE
Definition config.h:46
void label(cairo_t *cr, double val, int axe, int p, project *this_proj)
draw axis label
Definition labels.c:56
gchar * edition_action_names[3]
Definition global.c:197
gchar * analyze_action_names[9]
Definition global.c:201
GtkWidget * MainScrol[2]
Definition global.c:220
int activep
Definition global.c:159
GSimpleAction * edition_actions[3]
Definition global.c:210
GdkPixbuf * OGLC
Definition global.c:235
GtkApplication * AtomesApp
Definition global.c:213
int nprojects
Definition global.c:158
GtkWidget * MainFrame[2]
Definition global.c:216
GtkWidget * MainWindow
Definition global.c:214
GdkPixbuf * OGLM
Definition global.c:234
GdkPixbuf * SETTINGS
Definition global.c:232
GdkPixbuf * THEBD
Definition global.c:230
GdkPixbuf * OGL
Definition global.c:233
GdkPixbuf * THETD
Definition global.c:228
GtkWidget * atomes_logo
Definition global.c:221
GdkPixbuf * SETTING
Definition global.c:231
gchar * bravais_img[14]
Definition global.c:138
GSimpleAction * analyze_actions[9]
Definition global.c:211
GtkWidget * curvetoolbox
Definition global.c:218
GdkPixbuf * THEMO
Definition global.c:229
GtkWidget * pop
Definition global.c:217
gchar * ifield[8]
Definition global.c:139
GtkWidget * MainView
Definition global.c:215
Global variable declarations Global convenience function declarations Global data structure defin...
@ IMG_STOCK
Definition global.h:236
@ IMG_FILE
Definition global.h:235
GtkWidget * create_scroll(GtkWidget *box, int dimx, int dimy, int shadow)
create a scroll window
Definition gtk-misc.c:1940
project * proj
void pop_menu_at_pointer(GtkWidget *widg, GdkEvent *event)
popup a menu at pointer location
Definition gtk-misc.c:2277
#define EDITA
Definition global.h:174
void add_gtk_close_event(GtkWidget *widg, GCallback handler, gpointer data)
add a close event signal and callback to a GtkWidget
Definition gtk-misc.c:2363
#define NGRAPHS
#define FEXIT
Definition global.h:184
#define FOPEN
Definition global.h:180
#define YES
Definition global.h:173
@ CONTAINER_WIN
Definition global.h:222
@ CONTAINER_FRA
Definition global.h:226
@ CONTAINER_SCR
Definition global.h:223
#define DPROPERTIES
Definition global.h:178
#define FNEW
Definition global.h:179
void text_view_set_monospace(GtkWidget *view)
set the font of a GtkTextView as monospace
Definition gtk-misc.c:667
GtkWidget * destroy_this_widget(GtkWidget *widg)
destroy a GtkWidget
Definition gtk-misc.c:2010
#define FSAVE
Definition global.h:181
void add_container_child(int type, GtkWidget *widg, GtkWidget *child)
Add a GtkWidget into another GtkWidget.
Definition gtk-misc.c:206
#define FCLOSE
Definition global.h:183
#define PAGE_SETUP
Definition global.h:169
#define NCALCS
#define FSAVEAS
Definition global.h:182
#define NDOTS
void show_the_widgets(GtkWidget *widg)
show GtkWidget
Definition gtk-misc.c:169
#define ABOUT
Definition global.h:197
project * get_project_by_id(int p)
get project pointer using id number
Definition project.c:120
action
Definition glview.h:189
GMenu * workspace_section(gchar *act, int pop)
create the workspace section
Definition gui.c:649
GMenu * quit_section(gchar *act)
create the 'Quit' menu item
Definition gui.c:771
dint davect[9]
Definition gui.c:131
G_MODULE_EXPORT void compute_this_prop(GtkWidget *widg, gpointer data)
to compute the 'calc_to_compute'
Definition work_menu.c:105
G_MODULE_EXPORT void on_edit_activate(GtkWidget *widg, gpointer data)
create an edition dialog - prepare the dialog
Definition edit_menu.c:835
GMenu * create_analyze_menu()
create atomes 'analyze' menu
Definition gui.c:869
GMenu * port_section(gchar *act, int pop, int port)
create the import/export menu items
Definition gui.c:680
int objects[3]
Definition selection.c:212
tint cut_lab
Definition gui.c:130
void remove_edition_actions()
remove all edition actions
Definition gui.c:306
GIcon * get_gicon_from_data(int format, const gchar *icon)
Definition gui.c:484
GMenu * create_workspace_menu(gchar *act, int pop_up, int proj, int calc)
create atomes 'workspace' menu
Definition gui.c:826
gchar * graph_img[NGRAPHS]
Definition gui.c:105
void widget_add_action(GSimpleActionGroup *action_group, const gchar *act, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, const gchar *stat)
add an action to an action group
Definition gui.c:515
GtkWidget * curvetbox()
create the curve tool box window
Definition tools.c:321
void append_submenu(GMenu *menu, const gchar *label, GMenu *submenu)
append a GMenuItem with a subenu to a GMenu, and use markup for the GMenuItem
Definition gui.c:602
ColRGBA std[6]
Definition gui.c:132
GMenu * create_help_menu()
create atomes 'help' menu
Definition gui.c:890
gchar * calc_img[NCALCS-2]
Definition gui.c:104
int ** tmp_object_id[3]
Definition selection.c:214
void atomes_key_pressed(guint keyval, GdkModifierType state)
main window key actions callbacks
Definition gui.c:225
GMenu * workspace_title()
create the 'Workspace' menu item
Definition gui.c:785
G_MODULE_EXPORT void leaving_from_menu(GtkWidget *widg, gpointer data)
leaving atomes ?
Definition work_menu.c:86
GMenu * project_title(int pop_up, int proj)
create project title menu item
Definition gui.c:800
GMenu * atomes_menu_bar()
create atomes menu bar
Definition gui.c:904
GtkWidget * create_main_window(GApplication *atomes)
create the main application window
Definition gui.c:968
void remove_edition_and_analyze_actions()
remove all edition and analysis action
Definition gui.c:317
void clean_view()
clean the main window
Definition gui.c:159
G_MODULE_EXPORT void on_calc_activate(GtkWidget *widg, gpointer data)
create a calculation dialog - prepare the dialog
Definition calc_menu.c:1378
GtkWidget * work_menu(int p, int c)
create the workspace popup menu
Definition work_menu.c:202
void add_action(GSimpleAction *action)
add action to the main window action map
Definition gui.c:284
GMenu * create_edit_menu()
create atomes 'edit' menu
Definition gui.c:843
void view_buffer(GtkTextBuffer *buffer)
set a text buffer in the main window or an image
Definition gui.c:182
G_MODULE_EXPORT void show_periodic_table(GtkWidget *widg, gpointer data)
show the periodic table of the elements
Definition gui.c:332
int get_atom_id_from_periodic_table(atom_search *asearch)
get atom Z from selection in the periodic table
Definition w_periodic.c:672
tint cut_sel
Definition gui.c:129
char * graph_name[NGRAPHS]
Definition gui.c:118
G_MODULE_EXPORT void atomes_menu_bar_action(GSimpleAction *action, GVariant *parameter, gpointer data)
atomes menu bar actions
Definition gui.c:346
GMenuItem * create_gmenu_item(const gchar *label, const gchar *action, const gchar *accel, const gchar *custom, int format, const gchar *icon, gboolean check, gboolean status, gboolean radio, const gchar *rstatus)
create menu item
Definition gui.c:556
G_MODULE_EXPORT void on_create_new_project(GtkWidget *widg, gpointer data)
create a new project
Definition work_menu.c:62
void append_menu_item(GMenu *menu, const gchar *label, const gchar *action, const gchar *accel, const gchar *custom, int format, const gchar *icon, gboolean check, gboolean status, gboolean radio, const gchar *rstatus)
create a menu item, then append it to a menu
Definition gui.c:632
int * object_was_selected[3]
Definition selection.c:213
gchar * dots[NDOTS]
Definition gui.c:103
GMenu * import_section(gchar *act)
create the 'Import' submenu
Definition gui.c:757
void remove_action(gchar *action_name)
add action from the main window action map
Definition gui.c:296
char * calc_name[NCALCS-2]
Definition gui.c:107
GMenu * tool_box_section()
create toolboxes menu item
Definition gui.c:857
GMenu * project_section(gchar *act, int pop_up, int proj, int calc)
create the project section
Definition gui.c:704
G_MODULE_EXPORT void create_about_dialog(GtkWidget *widg, gpointer data)
create the about dialog
Definition interface.c:175
G_MODULE_EXPORT gboolean leaving_question(GtkWidget *widget, GdkEvent *event, gpointer data)
Leaving atomes ?
Definition interface.c:418
Messaging function declarations.
double y
Definition ogl_draw.c:57
double x
Definition ogl_draw.c:57
Function declarations for reading atomes project file Function declarations for saving atomes proje...
float blue
Definition global.h:118
float red
Definition global.h:116
float green
Definition global.h:117
Definition global.h:91
int b
Definition global.h:93
int a
Definition global.h:92
Definition global.h:98
int b
Definition global.h:100
int c
Definition global.h:101
int a
Definition global.h:99
int c
Definition tab-1.c:95
int status
Definition w_advance.c:160
void add_project_to_workspace()
add project(s) to the workspace tree
Definition workspace.c:594
G_MODULE_EXPORT void activate_project(GtkWidget *widg, gpointer data)
activate a project
Definition workspace.c:191
char * work_menu_items[NITEMS-2]
Definition workspace.c:89
G_MODULE_EXPORT void change_project_name(GtkWidget *wid, gpointer edata)
change project name
Definition workspace.c:357
Function declarations for workspace managment.