atomes 1.3.1
atomes: an atomic scale modeling tool box
Loading...
Searching...
No Matches
m_tools.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-2026 by CNRS and University of Strasbourg */
15
21
22/*
23* This file: 'm_tools.c'
24*
25* Contains:
26*
27
28 - The functions to create the 'Tools' submenu
29
30*
31* List of functions:
32
33 void set_motion_sensitive (glwin * view, int status);
34 void invert_visible (project * this_proj);
35
36 G_MODULE_EXPORT void set_selection_mode (GtkWidget * widg, gpointer data);
37 G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data);
38 G_MODULE_EXPORT void invert_this (GtkWidget * widg, gpointer data);
39 G_MODULE_EXPORT void to_window_measures (GSimpleAction * action, GVariant * parameter, gpointer data);
40 G_MODULE_EXPORT void to_window_volumes (GSimpleAction * action, GVariant * parameter, gpointer data);
41 G_MODULE_EXPORT void change_mouse_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data);
42 G_MODULE_EXPORT void change_sel_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data);
43 G_MODULE_EXPORT void to_create_field (GSimpleAction * action, GVariant * parameter, gpointer data);
44 G_MODULE_EXPORT void to_invert_this (GSimpleAction * action, GVariant * parameter, gpointer data);
45
46 GtkWidget * menu_tools (glwin * view, int id);
47
48 GMenu * measure_section (glwin * view, int popm);
49 GMenu * volume_section (glwin * view, int popm);
50 GMenu * edit_section (glwin * view, int popm);
51 GMenu * mouse_mode_menu (glwin * view, int popm);
52 GMenu * selection_mode_menu (glwin * view, int popm);
53 GMenu * modes_section (glwin * view, int popm);
54 GMenu * md_menu (glwin * view, int popm);
55 GMenu * inv_menu (glwin * view, int popm);
56 GMenu * add_section_item_with_menu (glwin * view, gchar * item_name, GMenu * men);
57 GMenu * menu_tools (glwin * view, int popm);
58
59*/
60
61#include "cell_edit.h"
62#include "atom_edit.h"
63#include "submenus.h"
64
65extern G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data);
66extern G_MODULE_EXPORT void window_volumes (GtkWidget * widg, gpointer data);
67extern G_MODULE_EXPORT void create_field (GtkWidget * widg, gpointer data);
68extern gboolean spin (gpointer data);
69extern void check_hidden_visible (project * this_proj);
70
71char * input_types[NINPUTS] = {i18n("Classical: DL-POLY"),
72 i18n("Classical: LAMMPS"),
73 i18n("First-Principles: CPMD"),
74 i18n("First-Principles: CP2K"),
75 i18n("QM-MM: CPMD - [Soon]"),
76 i18n("QM-MM: CP2K - [Soon]")};
77
78gchar * modes[3]={i18n("Analysis "), i18n("Edition "), i18n("Input(s)")};
79
80gchar * smodes[NSELECTION]={i18n("Atom/Bond"),
81 i18n("Coordination Sphere"),
82 i18n("Fragment"),
83 i18n("Molecule"),
84 i18n("Single Fragment"),
85 i18n("Single Molecule"),
86 i18n("Measures (Edition Mode Only)")};
87
88gchar * invl[2]={i18n("Selection"), i18n("Visible/Hidden")};
89
99{
100 int i;
101#ifdef GTK3
102 // GTK3 Menu Action To Check
103 for (i=0; i<2; i++) widget_set_sensitive (view -> ogl_anim[i], status);
104#endif
105 if (view -> player != NULL) widget_set_sensitive (view -> player -> win, status);
106 if (view -> spiner != NULL) widget_set_sensitive (view -> spiner -> win, status);
107 if (view -> rec != NULL) widget_set_sensitive (view -> rec -> win, status);
108 if (! status)
109 {
110 if (view -> spin[0] || view -> spin[1])
111 {
112 for (i=0; i<2; i++)
113 {
114 view -> spin[i+2] = view -> spin[i];
115 view -> spin_speed[i+2] = view -> spin_speed[i];
116 view -> spin[i] = FALSE;
117 }
118 }
119 }
120 else if (view -> spin[2] || view -> spin[3])
121 {
122 for (i=0; i<2; i++)
123 {
124 view -> spin[i] = view -> spin[i+2];
125 view -> spin_speed[i] = view -> spin_speed[i+2];
126 g_timeout_add (REFRESH, (GSourceFunc) spin, & view -> colorp[0][i]);
127 view -> spin[i+2] = FALSE;
128 view -> spin_speed[i+2] = 0;
129 }
130 }
131}
132
141G_MODULE_EXPORT void set_selection_mode (GtkWidget * widg, gpointer data)
142{
143 tint * the_data = (tint *)data;
144 project * this_proj = get_project_by_id(the_data -> a);
145 int i = this_proj -> modelgl -> selection_mode;
146 int j = the_data -> b;
147#ifdef GTK4
148 if (i != j)
149 {
150#else
151 // GTK3 Menu Action To Check
152 if (i != j && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg))
153 {
154 this_proj -> modelgl -> selection_mode = NONE;
155 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_smode[i], FALSE);
156 if (widg != this_proj -> modelgl -> ogl_smode[j])
157 {
158 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_smode[j], TRUE);
159 }
160#endif
161 this_proj -> modelgl -> selection_mode = j;
162 }
163#ifdef GTK3
164 // GTK3 Menu Action To Check
165 else if (i == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg))
166 {
167 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_smode[j], TRUE);
168 }
169#endif
170}
171
180G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data)
181{
182 tint * the_data = (tint *)data;
183 project * this_proj = get_project_by_id(the_data -> a);
184 int i = this_proj -> modelgl -> mode;
185 int j = the_data -> b;
186
187 if (! (j == EDITION && is_atom_win_active(this_proj -> modelgl)))
188 {
189#ifdef GTK4
190 if (i != j)
191#else
192 if (i != j && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg))
193#endif
194 {
195 this_proj -> modelgl -> mode = NONE;
196#ifdef GTK3
197 // GTK3 Menu Action To Check
198 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_mode[i], FALSE);
199 if (widg != this_proj -> modelgl -> ogl_mode[j])
200 {
201 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_mode[j], TRUE);
202 }
203#endif
204 this_proj -> modelgl -> mode = j;
205 if (this_proj -> modelgl -> mode == EDITION)
206 {
207 for (i=1; i<3; i++) init_coordinates (this_proj, i, FALSE, TRUE);
208 set_motion_sensitive (this_proj -> modelgl, 0);
209 }
210 else
211 {
212 for (i=1; i<3; i++)
213 {
214 if (this_proj -> modelgl -> saved_coord[i] != NULL)
215 {
216 g_free (this_proj -> modelgl -> saved_coord[i]);
217 this_proj -> modelgl -> saved_coord[i] = NULL;
218 }
219 }
220 set_motion_sensitive (this_proj -> modelgl, 1);
221 if (this_proj -> modelgl -> selection_mode == NSELECTION-1)
222 {
223#ifdef GTK4
224 set_selection_mode (NULL, & this_proj -> modelgl -> colorp[0][0]);
225#else
226 // GTK3 Menu Action To Check
227 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_smode[0], TRUE);
228 set_selection_mode (this_proj -> modelgl -> ogl_smode[0], & this_proj -> modelgl -> colorp[0][0]);
229#endif
230 }
231 }
232 i = activep;
233 active_project_changed (this_proj -> id);
235#ifdef GTK3
236 // GTK3 Menu Action To Check
237 widget_set_sensitive (this_proj -> modelgl -> ogl_smode[NSELECTION-1], (this_proj -> modelgl -> mode == EDITION) ? 1 : 0);
238#endif
239 i = (this_proj -> modelgl -> mode == EDITION) ? EDITION : ANALYZE;
240 gchar * str = g_strdup_printf (_("%s - 3D view - [%s mode]"), prepare_for_title(this_proj -> name), _(mode_name[i]));
241 gtk_window_set_title (GTK_WINDOW (this_proj -> modelgl -> win), str);
242 g_free (str);
243 this_proj -> modelgl -> create_shaders[MEASU] = TRUE;
244 update (this_proj -> modelgl);
245
246 }
247#ifdef GTK3
248 // GTK3 Menu Action To Check
249 else if (i == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg))
250 {
251 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_mode[j], TRUE);
252 }
253#endif
254 }
255}
256
264void invert_visible (project * this_proj)
265{
266 int i, j, k;
267 for (i=0; i<this_proj -> steps; i++)
268 {
269 for (j=0; j<this_proj -> natomes; j++)
270 {
271 for (k=0; k<2; k++) this_proj -> atoms[i][j].show[k] = ! this_proj -> atoms[i][j].show[k];
272 }
273 }
274 check_hidden_visible (this_proj);
275 init_default_shaders (this_proj -> modelgl);
276}
277
286G_MODULE_EXPORT void invert_this (GtkWidget * widg, gpointer data)
287{
288 tint * the_data = (tint *)data;
289 project * this_proj = get_project_by_id(the_data -> a);
290 switch (the_data -> b)
291 {
292 case 0:
293 invert_selection (this_proj);
294 init_default_shaders (this_proj -> modelgl);
295 break;
296 case 1:
297 invert_visible (this_proj);
298 break;
299 }
300}
301
302#ifdef GTK3
303extern G_MODULE_EXPORT void window_volumes (GtkWidget * widg, gpointer data);
312GtkWidget * menu_tools (glwin * view, int id)
313{
314 int i;
315 GtkWidget * menut = gtk_menu_new ();
316 gtk3_menu_item (menut, _("Measures"), IMG_NONE, NULL, G_CALLBACK(window_measures), (gpointer)view, TRUE, GDK_KEY_m, GDK_CONTROL_MASK, FALSE, FALSE, FALSE);
317 GtkWidget * widg = gtk3_menu_item (menut, _("Volumes"), IMG_NONE, NULL, G_CALLBACK(window_volumes), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE);
318 widget_set_sensitive (widg, (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1);
319 add_menu_separator (menut);
320 gtk_menu_shell_append ((GtkMenuShell *)menut, menu_item_new_with_submenu(_("Edit"), TRUE, menu_edit(view, id)));
321 add_menu_separator (menut);
322 widg = create_menu_item (FALSE, _("Mouse Mode"));
323 gtk_menu_shell_append ((GtkMenuShell *)menut, widg);
324 GtkWidget * menum = gtk_menu_new ();
325 gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menum);
326 guint accel[3]={GDK_KEY_a, GDK_KEY_e, GDK_KEY_i};
327 guint acces[4]={GDK_KEY_A, GDK_KEY_C, GDK_KEY_F, GDK_KEY_M};
328 if (id == 0)
329 {
330 for (i=0; i<2; i++)
331 {
332 view -> ogl_mode[i] = gtk3_menu_item (menum, _(modes[i]), IMG_NONE, NULL, G_CALLBACK(set_mode), & view -> colorp[i][0],
333 TRUE, accel[i], GDK_MOD1_MASK, TRUE, TRUE, (i == view -> mode) ? TRUE : FALSE);
334 widget_set_sensitive (view -> ogl_mode[i], (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1);
335 }
336 }
337 else
338 {
339 for (i=0; i<2; i++)
340 {
341 widg = gtk3_menu_item (menum, _(modes[i]), IMG_NONE, NULL, G_CALLBACK(set_mode), & view -> colorp[i][0],
342 TRUE, accel[i], GDK_MOD1_MASK, TRUE, TRUE, (i == view -> mode) ? TRUE : FALSE);
343 widget_set_sensitive (widg, (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1);
344 }
345 }
346 /*widg = create_menu_item (TRUE, _(modes[2]));
347 gtk_menu_shell_append ((GtkMenuShell *)menum, widg);
348 GtkWidget * menui = gtk_menu_new ();
349 gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menui);
350 widget_set_sensitive (widg, (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1);
351 if (id == 0)
352 {
353 for (i=0; i<NINPUTS; i++)
354 {
355 view -> ogl_mode[i+2] = gtk3_menu_item (menum, _(modes[i]), IMG_NONE, NULL, G_CALLBACK(set_mode), & view -> colorp[2+i][0],
356 FALSE, 0, 0, TRUE, TRUE, (i+2 == view -> mode) ? TRUE : FALSE);
357 widget_set_sensitive (view -> ogl_mode[i+2], 0);
358 }
359 }
360 else
361 {
362 for (i=0; i<NINPUTS; i++)
363 {
364 widg = gtk3_menu_item (menum, _(modes[i]), IMG_NONE, NULL, G_CALLBACK(set_mode), & view -> colorp[2+i][0],
365 FALSE, 0, 0, TRUE, TRUE, (i+2 == view -> mode) ? TRUE : FALSE);
366 widget_set_sensitive (widg, 0);
367 }
368 }*/
369 widg = create_menu_item (FALSE, _("Selection Mode"));
370 gtk_menu_shell_append ((GtkMenuShell *)menut, widg);
371 GtkWidget * menusm = gtk_menu_new ();
372 gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menusm);
373
374 if (id == 0)
375 {
376 for (i=0; i<NSELECTION; i++)
377 {
378 if (i < 4)
379 {
380 view -> ogl_smode[i] = gtk3_menu_item (menusm, _(smodes[i]), IMG_NONE, NULL, G_CALLBACK(set_selection_mode), & view -> colorp[i][0],
381 TRUE, acces[i], GDK_SHIFT_MASK, TRUE, TRUE, (i == view -> selection_mode) ? TRUE : FALSE);
382 }
383 else
384 {
385 view -> ogl_smode[i] = gtk3_menu_item (menusm, _(smodes[i]), IMG_NONE, NULL, G_CALLBACK(set_selection_mode), & view -> colorp[i][0],
386 FALSE, 0, 0, TRUE, TRUE, (i == view -> selection_mode) ? TRUE : FALSE);
387 }
388 if (i == NSELECTION-1) widget_set_sensitive (view -> ogl_smode[i], (view -> mode == EDITION) ? 1 : 0);
389 }
390 }
391 else
392 {
393 for (i=0; i<NSELECTION; i++)
394 {
395 if (i < 4)
396 {
397 widg = gtk3_menu_item (menusm, _(smodes[i]), IMG_NONE, NULL, G_CALLBACK(set_selection_mode), & view -> colorp[i][0],
398 TRUE, acces[i], GDK_SHIFT_MASK, TRUE, TRUE, (i == view -> selection_mode) ? TRUE : FALSE);
399 }
400 else
401 {
402 widg = gtk3_menu_item (menusm, _(smodes[i]), IMG_NONE, NULL, G_CALLBACK(set_selection_mode), & view -> colorp[i][0],
403 FALSE, 0, 0, TRUE, TRUE, (i == view -> selection_mode) ? TRUE : FALSE);
404 }
405 if (i == NSELECTION-1) widget_set_sensitive (widg, (view -> mode == EDITION) ? 1 : 0);
406 }
407 }
408
409 add_menu_separator (menut);
410
411 GtkWidget * menuf = NULL;
412 widg = create_menu_item (FALSE, _("Molecular Dynamics"));
413 widget_set_sensitive (widg, get_project_by_id(view -> proj) -> nspec);
414 gtk_menu_shell_append ((GtkMenuShell *)menut, widg);
415 menuf = gtk_menu_new ();
416 gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menuf);
417 if (id == 0)
418 {
419 for (i=0; i<NINPUTS; i++)
420 {
421 view -> ogl_mode[i+2+NINPUTS] = create_menu_item (TRUE, _(input_types[i]));
422 gtk_menu_shell_append ((GtkMenuShell *)menuf, view -> ogl_mode[i+2+NINPUTS]);
423 g_signal_connect (G_OBJECT (view -> ogl_mode[i+2+NINPUTS]), "activate", G_CALLBACK(create_field), & view -> colorp[i][0]);
424 if (i > 3) widget_set_sensitive (view -> ogl_mode[i+2+NINPUTS], 0);
425 }
427 }
428 else
429 {
430 for (i=0; i<NINPUTS; i++)
431 {
432 widg = create_menu_item (TRUE, _(input_types[i]));
433 gtk_menu_shell_append ((GtkMenuShell *)menuf, widg);
434 g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(create_field), & view -> colorp[i][0]);
435 // if (i < 2 || i > 3) widget_set_sensitive (widg, view -> adv_bonding[1]);
436 if (i < 2) widget_set_sensitive (widg, view -> adv_bonding[1]);
437 if (i > 3) widget_set_sensitive (widg, 0);
438 }
439 }
440
441 add_menu_separator (menut);
442 GtkWidget * menuin = NULL;
443 widg = create_menu_item (FALSE, _("Invert"));
444 gtk_menu_shell_append ((GtkMenuShell *)menut, widg);
445 menuin = gtk_menu_new ();
446 gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menuin);
447 for (i=0; i<2; i++)
448 {
449 widg = create_menu_item (FALSE, _(invl[i]));
450 gtk_menu_shell_append ((GtkMenuShell *)menuin, widg);
451 g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(invert_this), & view -> colorp[i][0]);
452 }
453 return menut;
454}
455#else
465G_MODULE_EXPORT void to_window_measures (GSimpleAction * action, GVariant * parameter, gpointer data)
466{
467 window_measures (NULL, data);
468}
469
478GMenu * measure_section (glwin * view, int popm)
479{
480 GMenu * menu = g_menu_new ();
481 append_opengl_item (view, menu, _("Measures"), "measures", popm, popm, "<CTRL>M", IMG_NONE, NULL, FALSE, G_CALLBACK(to_window_measures), (gpointer)view, FALSE, FALSE, FALSE, TRUE);
482 return menu;
483}
484
494G_MODULE_EXPORT void to_window_volumes (GSimpleAction * action, GVariant * parameter, gpointer data)
495{
496 window_volumes (NULL, data);
497}
498
507GMenu * volume_section (glwin * view, int popm)
508{
509 GMenu * menu = g_menu_new ();
510 append_opengl_item (view, menu, _("Volumes"), "volumes", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_window_volumes), (gpointer)view, FALSE, FALSE, FALSE, TRUE);
511 return menu;
512}
513
522GMenu * edit_section (glwin * view, int popm)
523{
524 GMenu * menu = g_menu_new ();
525 append_submenu (menu, _("Edit"), menu_edit(view, popm));
526 return menu;
527}
528
538G_MODULE_EXPORT void change_mouse_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data)
539{
540 glwin * view = (glwin *)data;
541 const gchar * mode = g_variant_get_string (parameter, NULL);
542 int lgt = strlen (mode);
543 gchar * name = g_strdup_printf ("%c%c", mode[lgt-2], mode[lgt-1]);
544 if (g_strcmp0(name, ".1") == 0)
545 {
546 g_free (name);
547 name = g_strdup_printf ("%.*s.0", lgt-2, mode);
548 g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-mouse-mode", g_variant_new_string((const gchar *)name));
549 g_free (name);
550 }
551 else
552 {
553 gchar * mode_name = NULL;
554 int i;
555 for (i=0; i<2; i++)
556 {
557 mode_name = g_strdup_printf ("set-mouse-mode.%d.0", i);
558 if (g_strcmp0(mode, (const gchar *)mode_name) == 0)
559 {
560 set_mode (NULL, & view -> colorp[i][0]);
561 g_free (mode_name);
562 mode_name = NULL;
563 break;
564 }
565 g_free (mode_name);
566 mode_name = NULL;
567 }
568 // Update the menu bar is required to activate / deactivate the selection mode option
569 update_menu_bar (view);
570 }
571}
572
581GMenu * mouse_mode_menu (glwin * view, int popm)
582{
583 GMenu * menu = g_menu_new ();
584 gchar * accel[3] = {"<ALT>A", "<ALT>E", "<ALT>I"};
585 int i, j;
586 j = (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1;
587 for (i=0; i<2; i++)
588 {
589 append_opengl_item (view, menu, _(modes[i]), "mouse-mode", popm, i, accel[i], IMG_NONE, NULL, FALSE,
590 G_CALLBACK(change_mouse_mode_radio), (gpointer)view, FALSE, (i == view -> mode) ? TRUE : FALSE, TRUE, j);
591 }
592 return menu;
593}
594
604G_MODULE_EXPORT void change_sel_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data)
605{
606 glwin * view = (glwin *)data;
607 const gchar * mode = g_variant_get_string (parameter, NULL);
608 int lgt = strlen (mode);
609 gchar * name = g_strdup_printf ("%c%c", mode[lgt-2], mode[lgt-1]);
610 if (g_strcmp0(name, ".1") == 0)
611 {
612 g_free (name);
613 name = g_strdup_printf ("%.*s.0", lgt-2, mode);
614 g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-sel-mode", g_variant_new_string((const gchar *)name));
615 g_free (name);
616 }
617 else
618 {
619 gchar * mode_name = NULL;
620 int i;
621 for (i=0; i<NSELECTION; i++)
622 {
623 mode_name = g_strdup_printf ("set-sel-mode.%d.0", i);
624 if (g_strcmp0(mode, (const gchar *)mode_name) == 0)
625 {
626 set_selection_mode (NULL, & view -> colorp[i][0]);
627 g_free (mode_name);
628 mode_name = NULL;
629 break;
630 }
631 g_free (mode_name);
632 mode_name = NULL;
633 }
634 g_action_change_state (G_ACTION (action), parameter);
635 }
636}
637
646GMenu * selection_mode_menu (glwin * view, int popm)
647{
648 GMenu * menu = g_menu_new ();
649 gchar * acces[4]={"A", "C", "F", "M"};
650 gchar * str;
651 int i, j;
652 for (i=0; i<NSELECTION; i++)
653 {
654 j = (i == NSELECTION-1) ? (view -> mode == EDITION) ? 1 : 0 : TRUE;
655 if (i < 4)
656 {
657 str = g_strdup_printf ("<SHIFT>%s", acces[i]);
658 append_opengl_item (view, menu, _(smodes[i]), "sel-mode", popm, i, str, IMG_NONE, NULL, FALSE, G_CALLBACK(change_sel_mode_radio), (gpointer)view,
659 FALSE, (i == view -> selection_mode) ? TRUE : FALSE, TRUE, j);
660 g_free (str);
661 }
662 else
663 {
664 append_opengl_item (view, menu, _(smodes[i]), "sel-mode", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_sel_mode_radio), (gpointer)view,
665 FALSE, (i == view -> selection_mode) ? TRUE : FALSE, TRUE, j);
666 }
667 }
668 return menu;
669}
670
679GMenu * modes_section (glwin * view, int popm)
680{
681 GMenu * menu = g_menu_new ();
682 append_submenu (menu, _("Mouse Mode"), mouse_mode_menu(view, popm));
683 append_submenu (menu, _("Selection Mode"), selection_mode_menu(view, popm));
684 return menu;
685}
686
696G_MODULE_EXPORT void to_create_field (GSimpleAction * action, GVariant * parameter, gpointer data)
697{
698 create_field (NULL, data);
699}
700
709GMenu * md_menu (glwin * view, int popm)
710{
711 GMenu * menu = g_menu_new ();
712 int i;
713 for (i=0; i<NINPUTS; i++)
714 {
715 append_opengl_item (view, menu, _(input_types[i]), "md", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_create_field), & view -> colorp[i][0],
716 FALSE, FALSE, FALSE, (i < 2) ? view -> adv_bonding[1] : (i > 3) ? FALSE : TRUE);
717 }
718 return menu;
719}
720
730G_MODULE_EXPORT void to_invert_this (GSimpleAction * action, GVariant * parameter, gpointer data)
731{
732 invert_this (NULL, data);
733}
734
743GMenu * inv_menu (glwin * view, int popm)
744{
745 GMenu * menu = g_menu_new ();
746 int i;
747 for (i=0; i<2; i++)
748 {
749 append_opengl_item (view, menu, _(invl[i]), "inv", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_invert_this), & view -> colorp[i][0], FALSE, FALSE, FALSE, TRUE);
750 }
751 return menu;
752}
753
763GMenu * add_section_item_with_menu (glwin * view, gchar * item_name, GMenu * men)
764{
765 GMenu * menu = g_menu_new ();
766 append_submenu (menu, item_name, men);
767 return menu;
768}
769
778GMenu * menu_tools (glwin * view, int popm)
779{
780 GMenu * menu = g_menu_new ();
781 g_menu_append_section (menu, NULL, (GMenuModel*)measure_section(view, popm));
782 g_menu_append_section (menu, NULL, (GMenuModel*)volume_section(view, popm));
783 g_menu_append_section (menu, NULL, (GMenuModel*)edit_section(view, popm));
784 g_menu_append_section (menu, NULL, (GMenuModel*)modes_section(view, popm));
785 g_menu_append_section (menu, NULL, (GMenuModel*)add_section_item_with_menu(view, _("Molecular Dynamics"), md_menu(view, popm)));
786 g_menu_append_section (menu, NULL, (GMenuModel*)add_section_item_with_menu(view, _("Invert"), inv_menu(view, popm)));
787 return menu;
788}
789#endif
Function declarations for the mode edition window.
void init_coordinates(project *this_proj, int status, gboolean win, gboolean init)
preserve atomic coordinates
Definition atom_move.c:197
G_MODULE_EXPORT void create_field(GtkWidget *widg, gpointer data)
start an input creation assistant
Definition calc.c:308
char * input_types[NINPUTS]
Definition m_tools.c:71
void invert_selection(project *this_proj)
invert atom(s) selection
Definition cell_cut.c:399
Function declarations for the cell edition window.
color colorp[64]
int atoms[NUM_STYLES][2]
void init_default_shaders(glwin *view)
re-initialize the default OpenGL shaders
int activep
Definition global.c:162
gchar * mode_name[2]
Definition global.c:141
#define i18n(String)
Definition global.c:80
@ IMG_NONE
Definition global.h:276
GtkWidget * gtk3_menu_item(GtkWidget *menu, gchar *name, int icon_format, gpointer item_icon, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod, gboolean check, gboolean radio, gboolean status)
gboolean is_atom_win_active(glwin *view)
is the model edition window visible ?
Definition atom_edit.c:71
project * proj
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:714
void widget_set_sensitive(GtkWidget *widg, gboolean sensitive)
Set sensitivity for a GtkWidget, ensuring it is a GtkWidget.
Definition gtk-misc.c:247
GtkWidget * create_menu_item(gboolean add_mnemo, gchar *action)
gchar * prepare_for_title(gchar *init)
prepare a string for a window title, getting rid of all markup
Definition tools.c:71
void add_menu_separator(GtkWidget *menu)
GtkWidget * menu_item_new_with_submenu(gchar *name, gboolean active, GtkWidget *sub_menu)
project * get_project_by_id(int p)
get project pointer using id number
Definition project.c:120
void update(glwin *view)
update the rendering of the OpenGL window
Definition glview.c:461
action
Definition glview.h:198
#define REFRESH
Refresh time for spinning the OpenGL window in milliseconds.
Definition glview.h:139
modes
Definition glview.h:165
@ ANALYZE
Definition glview.h:166
@ EDITION
Definition glview.h:167
@ NONE
Definition glview.h:181
@ MEASU
Definition glwin.h:99
#define NINPUTS
Definition glwin.h:66
#define NSELECTION
Definition glwin.h:67
G_MODULE_EXPORT void set_selection_mode(GtkWidget *widg, gpointer data)
set selection mode callback
Definition m_tools.c:141
gboolean spin(gpointer data)
spin
Definition w_spiner.c:56
void append_opengl_item(glwin *view, GMenu *menu, const gchar *name, gchar *key, int mpop, int item_id, gchar *accel, int image_format, gpointer icon, gboolean custom, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, gboolean sensitive)
void set_advanced_bonding_menus(glwin *view)
GMenu * menu_edit(glwin *view, int popm)
create the 'Edit' submenu GTK4
Definition m_edit.c:354
G_MODULE_EXPORT void to_create_field(GSimpleAction *action, GVariant *parameter, gpointer data)
run MD input assistant callback GTK4
Definition m_tools.c:696
G_MODULE_EXPORT void change_sel_mode_radio(GSimpleAction *action, GVariant *parameter, gpointer data)
change selection mode callback GTK4
Definition m_tools.c:604
GMenu * inv_menu(glwin *view, int popm)
create the 'Tools -> Invert' submenu GTK4
Definition m_tools.c:743
G_MODULE_EXPORT void to_window_measures(GSimpleAction *action, GVariant *parameter, gpointer data)
open the measurement window callback GTK4
Definition m_tools.c:465
GMenu * modes_section(glwin *view, int popm)
create the 'Tools -> * Modes' submenus GTK4
Definition m_tools.c:679
gchar * invl[2]
Definition m_tools.c:88
G_MODULE_EXPORT void set_selection_mode(GtkWidget *widg, gpointer data)
set selection mode callback
Definition m_tools.c:141
GMenu * volume_section(glwin *view, int popm)
create the 'Tools -> Volumes' menu item GTK4
Definition m_tools.c:507
G_MODULE_EXPORT void invert_this(GtkWidget *widg, gpointer data)
invert selection or visible callback
Definition m_tools.c:286
G_MODULE_EXPORT void create_field(GtkWidget *widg, gpointer data)
start an input creation assistant
Definition calc.c:308
void check_hidden_visible(project *this_proj)
check how many atom(s) are visible
Definition popup.c:888
GMenu * selection_mode_menu(glwin *view, int popm)
create the 'Tools -> Selection Mode' submenu GTK4
Definition m_tools.c:646
G_MODULE_EXPORT void window_volumes(GtkWidget *widg, gpointer data)
create the 'Volumes' window callback
Definition w_volumes.c:1123
GMenu * mouse_mode_menu(glwin *view, int popm)
create the 'Tools -> Mouse Mode' submenu GTK4
Definition m_tools.c:581
gchar * smodes[NSELECTION]
Definition m_tools.c:80
gboolean spin(gpointer data)
spin
Definition w_spiner.c:56
GMenu * menu_tools(glwin *view, int popm)
create the 'Tools' submenu - GTK4
Definition m_tools.c:778
GMenu * md_menu(glwin *view, int popm)
create the 'Molecular Dynamics' submenu GTK4
Definition m_tools.c:709
G_MODULE_EXPORT void window_measures(GtkWidget *widg, gpointer data)
create the measurements window
Definition w_measures.c:734
G_MODULE_EXPORT void set_mode(GtkWidget *widg, gpointer data)
set mouse mode callback
Definition m_tools.c:180
GMenu * edit_section(glwin *view, int popm)
create the 'Tools -> Edit' submenu GTK4
Definition m_tools.c:522
G_MODULE_EXPORT void to_invert_this(GSimpleAction *action, GVariant *parameter, gpointer data)
invert this callback GTK4
Definition m_tools.c:730
void invert_visible(project *this_proj)
invert visible atom(s)
Definition m_tools.c:264
void set_motion_sensitive(glwin *view, int status)
change motion parameters following a change in the mouse mode
Definition m_tools.c:98
GMenu * add_section_item_with_menu(glwin *view, gchar *item_name, GMenu *men)
append a new menu item with a new submenu
Definition m_tools.c:763
G_MODULE_EXPORT void change_mouse_mode_radio(GSimpleAction *action, GVariant *parameter, gpointer data)
change mouse radio menu item callback GTK4
Definition m_tools.c:538
G_MODULE_EXPORT void to_window_volumes(GSimpleAction *action, GVariant *parameter, gpointer data)
open the volumes window callback GTK4
Definition m_tools.c:494
GMenu * measure_section(glwin *view, int popm)
create the 'Tools -> Measures' menu item GTK4
Definition m_tools.c:478
void active_project_changed(int id)
change the active project
Definition update_p.c:220
G_MODULE_EXPORT void window_measures(GtkWidget *widg, gpointer data)
create the measurements window
Definition w_measures.c:734
Definition glwin.h:967
Definition global.h:118
Function declarations for the creation of the OpenGL window menus.
int status
Definition w_advance.c:173
G_MODULE_EXPORT void set_mode(GtkWidget *widg, gpointer data)
set mouse mode callback
Definition m_tools.c:180