73extern G_MODULE_EXPORT
void opengl_advanced (GtkWidget * widg, gpointer data);
74extern G_MODULE_EXPORT
void coord_properties (GtkWidget * widg, gpointer data);
75extern G_MODULE_EXPORT
void set_style (GtkWidget * widg, gpointer data);
77extern G_MODULE_EXPORT
void set_mode (GtkWidget * widg, gpointer data);
82extern gboolean
spin (gpointer data);
83extern G_MODULE_EXPORT
void spin_stop (GtkButton * but, gpointer data);
84extern G_MODULE_EXPORT
void spin_go (GtkWidget * widg, gpointer data);
88extern G_MODULE_EXPORT
void window_measures (GtkWidget * widg, gpointer data);
89extern G_MODULE_EXPORT
void window_recorder (GtkWidget * widg, gpointer data);
91extern GtkWidget *
menupoly (
glwin * view,
int jd,
int id, gchar * poln);
92extern G_MODULE_EXPORT
void set_color_map (GtkWidget * widg, gpointer data);
94extern void update_menu_bar (
glwin * view);
95extern G_MODULE_EXPORT
void set_full_screen (GSimpleAction *
action, GVariant * parameter, gpointer data);
96extern G_MODULE_EXPORT
void add_object (GSimpleAction *
action, GVariant * parameter, gpointer data);
100extern G_MODULE_EXPORT
void remove_the_atoms (GSimpleAction *
action, GVariant * parameter, gpointer data);
101extern G_MODULE_EXPORT
void copy_the_atoms (GSimpleAction *
action, GVariant * parameter, gpointer data);
103extern G_MODULE_EXPORT
void set_full_screen (GtkWidget * widg, gpointer data);
104extern G_MODULE_EXPORT
void to_reset_view (GtkWidget * widg, gpointer data);
105extern G_MODULE_EXPORT
void add_object (GtkWidget * widg, gpointer data);
108extern G_MODULE_EXPORT
void remove_the_atoms (GtkWidget * widg, gpointer data);
109extern G_MODULE_EXPORT
void copy_the_atoms (GtkWidget * widg, gpointer data);
122 gchar * section_names[sections], gchar * group_names[
groups],
shortcuts shortcs[]);
129 i18n(
"Camera rotation"),
i18n(
"Camera motion"),
i18n(
"Camera spin"),
i18n(
"Model interaction"),
130 i18n(
"Coordinates rotation"),
i18n(
"Coordinates translation"),
i18n(
"Model interaction")};
139 {
i18n(
"Atom(s) color map"),
i18n(
"change atom(s) color map"), GDK_KEY_a,
"a" },
140 {
i18n(
"Polyhedra color map"),
i18n(
"change polyhedra color map"), GDK_KEY_p,
"p" },
141 {
i18n(
"Balls and Sticks"),
i18n(
"change global style to balls and sticks"), GDK_KEY_b,
"b" },
142 {
i18n(
"Cylinders"),
i18n(
"change global style to cylinders"), GDK_KEY_c,
"c" },
143 {
i18n(
"Spheres"),
i18n(
"change global style to spheres"), GDK_KEY_s,
"s" },
144 {
i18n(
"Covalent Radii"),
i18n(
"change global style to covalent radii"), GDK_KEY_o,
"o" },
145 {
i18n(
"Ionic Radii"),
i18n(
"change global style to ionic radii"), GDK_KEY_i,
"i" },
146 {
i18n(
"van der Waals Radii"),
i18n(
"change global style to van der Waals radii"), GDK_KEY_v,
"v" },
147 {
i18n(
"In Crystal Radii"),
i18n(
"change global style to in crystal radii"), GDK_KEY_r,
"r" },
148 {
i18n(
"Wireframes"),
i18n(
"change global style to wireframes"), GDK_KEY_w,
"w" },
150 {
i18n(
"All measures for the selection, pressed:\n\n"
151 "\t- 1st time: show inter-atomic distances\n"
152 "\t- 2nd time: show inter-atomic angles\n"
153 "\t- 3rd time: hide measures"),
i18n(
"Show measures"), GDK_KEY_m,
"m" },
155 {
i18n(
"Atom"),
i18n(
"atom selection mode"), GDK_KEY_a,
"<Shift>a" },
156 {
i18n(
"Coordination"),
i18n(
"coordination sphere selection mode"), GDK_KEY_c,
"<Shift>c" },
157 {
i18n(
"Fragment"),
i18n(
"fragment selection mode"), GDK_KEY_f,
"<Shift>f" },
158 {
i18n(
"Molecule"),
i18n(
"molecule selection mode"), GDK_KEY_m,
"<Shift>m" },
160 {
i18n(
"Environments"),
i18n(
"Environments window"), GDK_KEY_e,
"<Ctrl>e" },
161 {
i18n(
"Measures"),
i18n(
"Measures window"), GDK_KEY_m,
"<Ctrl>m" },
162 {
i18n(
"Recorder"),
i18n(
"Recorder window"), GDK_KEY_r,
"<Ctrl>r" },
163 {
i18n(
"Create new project"),
i18n(
"Create new project"), GDK_KEY_n,
"<Ctrl>n" },
164 {
i18n(
"Enter fullscreen"),
i18n(
"Enter fullscreen"), GDK_KEY_f,
"<Ctrl>f" },
165 {
i18n(
"Exit fullscreen"),
i18n(
"Exit fullscreen"), GDK_KEY_Escape,
"Escape" },
168 {
i18n(
"Analysis mode"),
i18n(
"Analysis mode"), GDK_KEY_a,
"<Meta>a" },
169 {
i18n(
"Edition mode"),
i18n(
"Edition mode"), GDK_KEY_e,
"<Meta>e" },
171 {
i18n(
"Analysis mode"),
i18n(
"Analysis mode"), GDK_KEY_a,
"<Alt>a" },
172 {
i18n(
"Edition mode"),
i18n(
"Edition mode"), GDK_KEY_e,
"<Alt>e" },
177 {
i18n(
"Rotate right"),
i18n(
"rotate right"), GDK_KEY_Right,
"Right" },
178 {
i18n(
"Rotate left"),
i18n(
"rotate left"), GDK_KEY_Left,
"Left" },
179 {
i18n(
"Rotate up"),
i18n(
"rotate up"), GDK_KEY_Up,
"Up" },
180 {
i18n(
"Rotate down"),
i18n(
"rotate down"), GDK_KEY_Down,
"Down" },
182 {
i18n(
"Move right"),
i18n(
"move camera right"), GDK_KEY_Right,
"<Ctrl>Right" },
183 {
i18n(
"Move left"),
i18n(
"move camera left"), GDK_KEY_Left,
"<Ctrl>Left" },
184 {
i18n(
"Move up"),
i18n(
"move camera up"), GDK_KEY_Up,
"<Ctrl>Up" },
185 {
i18n(
"Move down"),
i18n(
"move camera down"), GDK_KEY_Down,
"<Ctrl>Down" },
186 {
i18n(
"Zoom in"),
i18n(
"zoom camera in"), GDK_KEY_Down,
"<Shift>Up" },
187 {
i18n(
"Zoom out"),
i18n(
"zoom camera out"), GDK_KEY_Down,
"<Shift>Down" },
189 {
i18n(
"Spin right"),
i18n(
"rotate right"), GDK_KEY_Right,
"<Ctrl><Shift>Right" },
190 {
i18n(
"Spin left"),
i18n(
"rotate left"), GDK_KEY_Left,
"<Ctrl><Shift>Left" },
191 {
i18n(
"Spin up"),
i18n(
"rotate up"), GDK_KEY_Up,
"<Ctrl><Shift>Up" },
192 {
i18n(
"Spin down"),
i18n(
"rotate down"), GDK_KEY_Down,
"<Ctrl><Shift>Down" },
193 {
i18n(
"Pause / restart"),
i18n(
"pause / restart spinning"), GDK_KEY_space,
"space" },
194 {
i18n(
"Stop"),
i18n(
"stop spinning"), GDK_KEY_s,
"<Ctrl>s" },
196 {
i18n(
"Label / unlabel all atom(s)"),
i18n(
"Label / unlabel all atom(s)"), GDK_KEY_l,
"<Ctrl>l" },
197 {
i18n(
"Select / unselect all atom(s)"),
i18n(
"Select / unselect all atom(s)"), GDK_KEY_a,
"<Ctrl>a" },
198 {
i18n(
"Copy selection"),
i18n(
"Copy selection"), GDK_KEY_c,
"<Ctrl>c" },
202 {
i18n(
"Rotate right"),
i18n(
"rotate right"), GDK_KEY_Right,
"Right" },
203 {
i18n(
"Rotate left"),
i18n(
"rotate left"), GDK_KEY_Left,
"Left" },
204 {
i18n(
"Rotate up"),
i18n(
"rotate up"), GDK_KEY_Up,
"Up" },
205 {
i18n(
"Rotate down"),
i18n(
"rotate down"), GDK_KEY_Down,
"Down" },
207 {
i18n(
"Translate right"),
i18n(
"move camera right"), GDK_KEY_Right,
"<Ctrl>Right" },
208 {
i18n(
"Translate left"),
i18n(
"move camera left"), GDK_KEY_Left,
"<Ctrl>Left" },
209 {
i18n(
"Translate up"),
i18n(
"move camera up"), GDK_KEY_Up,
"<Ctrl>Up" },
210 {
i18n(
"Translate down"),
i18n(
"move camera down"), GDK_KEY_Down,
"<Ctrl>Down" },
211 {
i18n(
"Zoom in"),
i18n(
"zoom camera in"), GDK_KEY_Up,
"<Shift>Up" },
212 {
i18n(
"Zoom out"),
i18n(
"zoom camera out"), GDK_KEY_Down,
"<Shift>Down" },
214 {
i18n(
"Label / unlabel all atom(s)"),
i18n(
"Label / unlabel all atom(s)"), GDK_KEY_l,
"<Ctrl>l" },
215 {
i18n(
"Select / unselect all atom(s)"),
i18n(
"Select / unselect all atom(s)"), GDK_KEY_a,
"<Ctrl>a" },
216 {
i18n(
"Copy selection"),
i18n(
"Copy selection"), GDK_KEY_c,
"<Ctrl>c" },
217 {
i18n(
"Cut selection"),
i18n(
"Cut selection"), GDK_KEY_x,
"<Ctrl>x" },
218 {
i18n(
"Paste selection"),
i18n(
"Paste selection"), GDK_KEY_v,
"<Ctrl>v" },
219 {
i18n(
"Delete selection"),
i18n(
"Delete selection"), GDK_KEY_Delete,
"Delete" }
258 if (view -> ogl_poly[0][j] != NULL)
262 if (view -> ogl_poly[0][j][k] != NULL)
264 if (GTK_IS_WIDGET(view -> ogl_poly[0][j][k]))
266 widg = gtk_widget_get_parent (view -> ogl_poly[0][j][k]);
267 if (GTK_IS_WIDGET(widg))
269 g_object_ref (view -> ogl_poly[0][j][k]);
270 gtk_container_remove (GTK_CONTAINER(widg), view -> ogl_poly[0][j][k]);
277 if (view -> ogl_geom[0][j] != NULL)
281 if (view -> ogl_geom[0][j][k] != NULL)
283 if (GTK_IS_WIDGET(view -> ogl_geom[0][j][k]))
285 widg = gtk_widget_get_parent (view -> ogl_geom[0][j][k]);
286 if (GTK_IS_WIDGET(widg))
288 g_object_ref (view -> ogl_geom[0][j][k]);
289 gtk_container_remove (GTK_CONTAINER(widg), view -> ogl_geom[0][j][k]);
296 if (view -> ogl_chains[0]) view -> ogl_chains[0] =
destroy_this_widget (view -> ogl_chains[0]);
301 detach_frag_mol_menu (view, i, j);
317 GtkWidget * menu = gtk_menu_new ();
318 gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_coord[1]);
319 gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_coord[2]);
320 gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_rings[0]);
321 gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_chains[0]);
322 gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_coord[3]);
323 gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_coord[4]);
324 gtk3_menu_item (menu, _(
"Advanced"),
IMG_NONE, NULL, G_CALLBACK(
coord_properties), (gpointer)& view ->
colorp[30][0], TRUE, GDK_KEY_e, GDK_CONTROL_MASK, FALSE, FALSE, FALSE);
342 i = view -> anim -> last ->
img -> style;
346 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_styles[j], FALSE);
349 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_styles[i], TRUE);
354 i = view -> anim -> last ->
img -> filled_type;
355 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> filled_styles[i], TRUE);
359 i = view -> anim -> last ->
img ->
render;
368 if (view -> anim -> last ->
img -> abc ->
box ==
NONE)
370 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[0][0], FALSE);
378 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[0][0], TRUE);
380 view -> anim -> last ->
img -> abc ->
box = l;
381 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[i][j], TRUE);
385 if (view -> anim -> last ->
img -> xyz ->
axis ==
NONE)
387 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][0], FALSE);
395 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][0], TRUE);
397 view -> anim -> last ->
img -> xyz ->
axis = l;
398 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][j], TRUE);
402 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_rep[view -> anim -> last ->
img ->
rep], TRUE);
403 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_rep[! view -> anim -> last ->
img ->
rep], FALSE);
404 for (i=0; i<5; i++) gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][8+i], FALSE);
405 if (view -> anim -> last ->
img -> xyz -> t_pos !=
CUSTOM)
407 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][8+view -> anim -> last ->
img -> xyz -> t_pos], TRUE);
413 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_clones[0], view -> anim -> last ->
img -> draw_clones);
414 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_clones[5], view -> anim -> last ->
img ->
cloned_poly);
417 if (view -> color_styles[0])
419 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[0], TRUE);
424 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[
ATOM_MAPS], TRUE);
430 update_menu_bar (view);
458G_MODULE_EXPORT
void view_shortcuts (GSimpleAction *
action, GVariant * parameter, gpointer data)
488void menu_items_opengl (GtkWidget * menu,
glwin * view,
int pop)
490 GtkWidget * style =
gtk3_menu_item (menu, _(
"Style"),
IMG_FILE, (gpointer)
PACKAGE_MOL, NULL, NULL, FALSE, 0, 0, FALSE, FALSE,
get_project_by_id(view ->
proj) -> nspec);
491 gtk_menu_item_set_submenu ((GtkMenuItem *)style,
menu_style(view,
pop));
493 gtk3_menu_item (menu, _(
"Material and Light(s)"),
IMG_NONE, NULL, G_CALLBACK(
opengl_advanced), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE);
494 gtk3_menu_item (menu, _(
"Render Image"),
IMG_FILE, (gpointer)
PACKAGE_IMG, G_CALLBACK(
render_gl_image), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE);
505GtkWidget * menu_opengl (
glwin * view,
int pop)
507 GtkWidget * menu = gtk_menu_new ();
508 menu_items_opengl (menu, view,
pop);
521void menu_items_model (GtkWidget * menu,
glwin * view,
int pop)
528 gtk_menu_shell_append ((GtkMenuShell *)menu,
menu_box_axis (view, 0, 0));
540GtkWidget * menu_model (
glwin * view,
int pop)
542 GtkWidget * menu = gtk_menu_new ();
543 menu_items_model (menu, view,
pop);
565 gtk3_menu_item (menu, _(
"Reset View"),
IMG_STOCK, (gpointer)
FITBEST, G_CALLBACK(
to_reset_view), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE);
566 gtk3_menu_item (menu, _(
"Center Molecule"),
IMG_STOCK, (gpointer)
FITBEST, G_CALLBACK(
to_center_this_molecule), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE);
568 gtk3_menu_item (menu, _(
"Fullscreen"),
IMG_STOCK, (gpointer)
FULLSCREEN, G_CALLBACK(
set_full_screen), (gpointer)view, TRUE, GDK_KEY_f, GDK_CONTROL_MASK, FALSE, FALSE, FALSE);
582 GtkWidget * menu = gtk_menu_new ();
595GtkWidget * menu_help (
glwin * view,
int popm)
598 menu = gtk_menu_new ();
599 gtk3_menu_item (menu, _(
"Shortcuts"),
IMG_NONE, NULL, G_CALLBACK(
view_shortcuts), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE);
619 view -> menu_bar = gtk_menu_bar_new ();
622 gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar,
menu_item_new_with_submenu (_(
"Model"), this_proj -> nspec, menu_model(view, 0)));
624 gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar, view -> ogl_coord[0]);
626 if (this_proj -> nspec)
628 gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_coord[0],
coord_menu (view));
632 gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar,
menu_anim (view, 0));
637 add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> menu_box, view -> menu_bar, TRUE, TRUE, 0);
644 update_menu_bar (view);
660 if (view -> custom_map) i++;
661 if (view -> anim -> last ->
img -> color_map[
col] < i-1)
663 if (view -> anim -> last ->
img -> color_map[
col] < 2)
667 else if (view -> anim -> last ->
img -> color_map[
col] == 2 && view -> adv_bonding[0])
671 else if (view -> anim -> last ->
img -> color_map[
col] == 3 && view -> adv_bonding[1])
691 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[j], TRUE);
694 gchar * variant = g_strdup_printf (
"set-%s.%d.0", (
col) ?
"pmap" :
"amap", j);
695 g_action_group_activate_action ((GActionGroup *)view -> action_group, (
col) ?
"set-pmap" :
"set-amap", g_variant_new_string((
const gchar *)variant));
715 if (state & GDK_CONTROL_MASK)
722 trans = vec3(view -> anim -> last ->
img -> p_depth*(
double) da / view -> pixels[
axis], 0.0, 0.0);
726 trans = vec3(0.0, view -> anim -> last ->
img -> p_depth*(
double) da / view -> pixels[
axis], 0.0);
732 else if (state & GDK_SHIFT_MASK)
738 view -> anim -> last ->
img -> c_shift[!
axis] += (double) da / view -> pixels[
axis];
741 if (view -> rep_win -> camera_widg[!
axis + 5] && GTK_IS_WIDGET(view -> rep_win -> camera_widg[!
axis + 5]))
743 gtk_spin_button_set_value ((GtkSpinButton *)view -> rep_win -> camera_widg[!
axis + 5], - view -> anim -> last ->
img -> c_shift[!
axis]);
749 else if ((state & GDK_SHIFT_MASK) && UpDown)
752 if (db == 3)
zoom (view, 1);
755 else if (state != GDK_SHIFT_MASK)
758 double cameraAngle[2] = {0.0, 0.0};
759 cameraAngle[
axis] = 0.5*da;
760 rotate_x_y (view, cameraAngle[0], cameraAngle[1]);
776 double gleft, gright, gbottom, gtop;
778 zoom *= (view -> anim -> last ->
img -> p_depth / view -> anim -> last ->
img -> gnear);
779 dw = view -> anim -> last ->
img -> c_shift[0]*2.0*
zoom;
780 dh = view -> anim -> last ->
img -> c_shift[1]*2.0*
zoom;
781 double aspect = (double)view -> pixels[0] / (
double)view -> pixels[1];
796 return m4_ortho (gleft, gright, gbottom, gtop, -view -> anim -> last ->
img -> gfar, view -> anim -> last ->
img -> gfar);
810 insert_pmv_matrix = m4_mul (
insert_projection (view), view -> model_view_matrix);
811 pos = vec3 (view -> mouseX, view -> mouseY, 0.75);
812 return v3_un_project (pos, view -> view_port, insert_pmv_matrix);
826 GVariant * action_state = g_variant_new_string (action_string);
827 g_action_group_activate_action ((GActionGroup *)view -> action_group,
action_name, action_state);
847 if (view -> fullscreen)
872 if (view ->
spin[0] || view ->
spin[1])
876 view ->
spin[i+2] = view ->
spin[i];
877 view -> spin_speed[i+2] = view -> spin_speed[i];
878 view ->
spin[i] = FALSE;
881 else if (view ->
spin[2] || view ->
spin[3])
885 view ->
spin[i] = view ->
spin[i+2];
886 view -> spin_speed[i] = view -> spin_speed[i+2];
888 view ->
spin[i+2] = FALSE;
889 view -> spin_speed[i+2] = 0;
900 if (view -> anim -> last ->
img -> selected[i] -> selected ==
opengl_project -> natomes)
919 else if (state & GDK_META_MASK)
921 else if (state & GDK_ALT_MASK)
924 else if (state & GDK_MOD1_MASK)
933 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_mode[0], TRUE);
952 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_smode[0], TRUE);
963 if (state & GDK_CONTROL_MASK)
965 if (view -> anim -> last ->
img -> selected[0] -> selected)
970 view -> nth_copy = 1;
1002 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_smode[1], TRUE);
1013 if (state & GDK_CONTROL_MASK)
1019 else if (state & GDK_META_MASK)
1021 else if (state & GDK_ALT_MASK)
1024 else if (state & GDK_MOD1_MASK)
1033 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_mode[1], TRUE);
1055 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_smode[2], TRUE);
1089 if (state & GDK_CONTROL_MASK)
1091 view -> anim -> last ->
img -> m_is_pressed = 0;
1094 else if (view -> anim -> last ->
img -> m_is_pressed < 2)
1096 view -> anim -> last ->
img -> m_is_pressed ++;
1100 view -> anim -> last ->
img -> m_is_pressed = 0;
1102 view -> create_shaders[
MEASU] = TRUE;
1114 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_smode[3], TRUE);
1131 if (state & GDK_CONTROL_MASK)
1146 if (state & GDK_CONTROL_MASK)
1157 if (state & GDK_CONTROL_MASK)
1168 view -> nth_copy ++;
1194 if (view -> anim -> last ->
img -> selected[0] -> selected)
1235G_MODULE_EXPORT gboolean on_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data)
1237 if (event -> type == GDK_KEY_PRESS)
1255G_MODULE_EXPORT gboolean
on_glwin_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data)
1276 if (
pix[0] > 0 &&
pix[1] > 0)
1296void gtk_window_change_gdk_visual (GtkWidget * win)
1302 GdkScreen * screen = gdk_screen_get_default ();
1303 GList * visuals = gdk_screen_list_visuals (screen);
1305 GdkX11Screen* x11_screen = GDK_X11_SCREEN (screen);
1306 g_assert (x11_screen != NULL);
1307 Visual * default_xvisual = DefaultVisual (GDK_SCREEN_XDISPLAY(x11_screen), GDK_SCREEN_XNUMBER(x11_screen));
1308 GdkVisual * default_visual = NULL;
1310 while (visuals != NULL)
1312 GdkVisual * visual = GDK_X11_VISUAL (visuals -> data);
1313 if (default_xvisual -> visualid == gdk_x11_visual_get_xvisual(GDK_X11_VISUAL (visuals -> data)) -> visualid)
1316 default_visual = visual;
1319 visuals = visuals -> next;
1321 gtk_widget_set_visual (win, default_visual);
1336G_MODULE_EXPORT gboolean
do_not_hide (GtkWindow * win, gpointer data)
1347G_MODULE_EXPORT gboolean
do_not_hide (GtkWidget * win, GdkEvent * event, gpointer data)
1357 if (! glXQueryExtension (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), NULL, NULL))
1359 g_warning (_(
"Sorry OpenGL is not supported !"));
1365 if (this_proj -> modelgl)
1367 g_free (this_proj -> modelgl);
1368 this_proj -> modelgl = NULL;
1370 this_proj -> modelgl = g_malloc0(
sizeof*this_proj -> modelgl);
1371 this_proj -> modelgl -> init = FALSE;
1372 this_proj -> modelgl ->
proj = this_proj -> id;
1373 GtkWidget * gl_vbox;
1376 gchar * str = g_strdup_printf (_(
"%s - 3D view - [%s mode]"), this_proj -> name, _(
mode_name[0]));
1381 if (!
atomes_visual) gtk_window_change_gdk_visual (this_proj -> modelgl -> win);
1390 this_proj -> modelgl -> menu_box =
create_hbox (0);
1391 add_box_child_start (GTK_ORIENTATION_VERTICAL, gl_vbox, this_proj -> modelgl -> menu_box, FALSE, FALSE, 0);
1393 this_proj -> modelgl -> menu_bar = gtk_menu_bar_new ();
1394 add_box_child_start (GTK_ORIENTATION_HORIZONTAL, this_proj -> modelgl -> menu_box, this_proj -> modelgl -> menu_bar, TRUE, TRUE, 0);
1398 this_proj -> modelgl ->
plot = gtk_gl_area_new ();
1399 gtk_widget_set_can_focus (this_proj -> modelgl ->
plot, TRUE);
1401 gtk_widget_set_focusable (this_proj -> modelgl ->
plot, TRUE);
1404 this_proj -> modelgl ->
plot = gtk_drawing_area_new ();
1406 gtk_widget_set_size_request (this_proj -> modelgl ->
plot, 100, 100);
1408 gtk_widget_set_double_buffered (this_proj -> modelgl ->
plot, FALSE);
1409 this_proj -> modelgl ->
glcontext = NULL;
1411 gtk_widget_set_hexpand (this_proj -> modelgl ->
plot, TRUE);
1412 gtk_widget_set_vexpand (this_proj -> modelgl ->
plot, TRUE);
1415 gtk_widget_add_events (GTK_WIDGET (this_proj -> modelgl ->
plot),
1417 GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK |
1418 GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
1421 gtk_widget_add_events (GTK_WIDGET (this_proj -> modelgl ->
plot),
1422 GDK_SMOOTH_SCROLL_MASK |
1423 GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK |
1424 GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
1429 add_widget_gesture_and_key_action (this_proj -> modelgl -> win, NULL, NULL, NULL,
1434 add_widget_gesture_and_key_action (this_proj -> modelgl ->
plot,
"glwin-button-pressed", G_CALLBACK(
on_glwin_button_pressed), this_proj -> modelgl,
1442 add_widget_gesture_and_key_action (this_proj -> modelgl ->
plot,
"glwin-button-pressed", G_CALLBACK(
on_lib_button_pressed), this_proj -> modelgl,
1449 g_signal_connect (G_OBJECT (this_proj -> modelgl ->
plot),
"motion-notify-event", G_CALLBACK(on_motion), this_proj -> modelgl);
1450 g_signal_connect (G_OBJECT (this_proj -> modelgl ->
plot),
"button-release-event", G_CALLBACK(on_glwin_button_event), this_proj -> modelgl);
1453 g_signal_connect (G_OBJECT (this_proj -> modelgl ->
plot),
"button-press-event", G_CALLBACK(on_glwin_button_event), this_proj -> modelgl);
1454 g_signal_connect (G_OBJECT (this_proj -> modelgl ->
plot),
"scroll-event", G_CALLBACK(on_scrolled), this_proj -> modelgl);
1458 g_signal_connect (G_OBJECT (this_proj -> modelgl ->
plot),
"button-press-event", G_CALLBACK(on_lib_pressed), this_proj -> modelgl);
1465 g_signal_connect (G_OBJECT (this_proj -> modelgl -> win),
"key-press-event", G_CALLBACK(on_key_pressed), this_proj -> modelgl);
1467 g_signal_connect (G_OBJECT (this_proj -> modelgl -> win),
"realize", G_CALLBACK(
on_win_realize), this_proj -> modelgl);
1471 g_signal_connect (G_OBJECT (this_proj -> modelgl -> win),
"close-request", G_CALLBACK(
do_not_hide), NULL);
1473 g_signal_connect (G_OBJECT (this_proj -> modelgl -> win),
"delete-event", G_CALLBACK(
do_not_hide), NULL);
1481 g_signal_connect (G_OBJECT (this_proj -> modelgl ->
plot),
"realize", G_CALLBACK(
on_realize), this_proj -> modelgl);
1483 g_signal_connect (G_OBJECT (this_proj -> modelgl ->
plot),
"render", G_CALLBACK(
on_expose), this_proj -> modelgl);
1485 g_signal_connect (G_OBJECT (this_proj -> modelgl ->
plot),
"draw", G_CALLBACK(
on_expose), this_proj -> modelgl);
1501 gboolean adv_bonding[2];
1502 if (this_proj -> modelgl == NULL)
1512 if (this_proj -> initgl)
1522 GtkWidget * menu = gtk_menu_bar_new ();
1538 adv_bonding[0] = adv_bonding[1] = TRUE;
1540 if (
active_project -> natomes && adv_bonding[0] && adv_bonding[1])
1550 if (gtk_widget_get_visible(this_proj -> modelgl -> win))
GtkWidget * coord_menu(glwin *view)
void restore_color_map(glwin *view, int *colm)
restore saved color maps
int * save_color_map(glwin *view)
save atoms and polyhedra color maps
Variable declarations for the MD input preparation assistants.
integer function chains()
void update_insert_combos()
update some GtkComboBox in the workspace if a project is removed
Structure definitions for color management Function declarations for color management.
void init_default_shaders(glwin *view)
re-initialize the default OpenGL shaders
gboolean tmp_adv_bonding[2]
gboolean atomes_from_libreoffice
Global variable declarations Global convenience function declarations Global data structure defin...
void update_chains_menus(glwin *view)
#define ATOM_LIMIT
atom number limit to compute fragment(s) and molecule(s) analysis automatically
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 ?
void resize_this_window(GtkWidget *window, int x, int y)
resize this GtkWindow
GtkWidget * create_win(gchar *str, GtkWidget *parent, gboolean modal, gboolean resiz)
create a new GtkWindow
int get_widget_height(GtkWidget *widg)
retrive GtkWidget height
void opengl_project_changed(int id)
change the OpenGL project
G_MODULE_EXPORT gboolean hide_this_window(GtkWidget *win, GdkEvent *event, gpointer data)
hide a GtkWindow
void add_gtk_close_event(GtkWidget *widg, GCallback handler, gpointer data)
add a close event signal and callback to a GtkWidget
G_MODULE_EXPORT void on_calc_bonds_released(GtkWidget *widg, gpointer data)
compute bonding properties
void add_box_child_start(int orientation, GtkWidget *widg, GtkWidget *child, gboolean expand, gboolean fill, int padding)
Add a GtkWidget in a GtkBox at the initial position.
void widget_set_sensitive(GtkWidget *widg, gboolean sensitive)
Set sensitivity for a GtkWidget, ensuring it is a GtkWidget.
GtkWidget * create_hbox(int spacing)
create a GtkBox with horizontal orientation
GtkWidget * create_menu_item(gboolean add_mnemo, gchar *action)
GtkWidget * destroy_this_widget(GtkWidget *widg)
destroy a GtkWidget
void add_box_child_end(GtkWidget *widg, GtkWidget *child, gboolean expand, gboolean fill, int padding)
Add a GtkWidget in a GtkBox at the end position.
void add_container_child(int type, GtkWidget *widg, GtkWidget *child)
Add a GtkWidget into another GtkWidget.
void hide_the_widgets(GtkWidget *widg)
hide GtkWidget
void add_menu_separator(GtkWidget *menu)
GtkWidget * menu_item_new_with_submenu(gchar *name, gboolean active, GtkWidget *sub_menu)
GtkWidget * create_vbox(int spacing)
create a GtkBox with vertical orientation
void update_rings_menus(glwin *view)
atomic_object * copied_object
void show_the_widgets(GtkWidget *widg)
show GtkWidget
project * get_project_by_id(int p)
get project pointer using id number
G_MODULE_EXPORT void on_realize(GtkWidget *widg, gpointer data)
realize event for the OpenGL widget
G_MODULE_EXPORT void on_glwin_pointer_motion(GtkEventControllerMotion *motc, gdouble x, gdouble y, gpointer data)
handle mouse motion event in the OpenGL window GTK4
void update(glwin *view)
update the rendering of the OpenGL window
G_MODULE_EXPORT void on_lib_button_released(GtkGesture *gesture, int n_press, double x, double y, gpointer data)
handle mouse button release event on the molecular library OpenGL window (limited interaction)
void zoom(glwin *view, int delta)
zoom in or zoom out in the OpenGL window
G_MODULE_EXPORT void on_lib_button_pressed(GtkGesture *gesture, int n_press, double x, double y, gpointer data)
handle mouse button press event on the molecular library OpenGL window (limited interaction)
G_MODULE_EXPORT void on_glwin_button_released(GtkGesture *gesture, int n_press, double x, double y, gpointer data)
mouse button released signal on the OpenGL window
G_MODULE_EXPORT void on_glwin_button_pressed(GtkGesture *gesture, int n_press, double x, double y, gpointer data)
mouse button pressed signal on the OpenGL window
G_MODULE_EXPORT gboolean on_glwin_pointer_scoll(GtkEventControllerScroll *event, gdouble dx, gdouble dy, gpointer data)
handle mouse scroll event on the OpenGL window
G_MODULE_EXPORT gboolean on_expose(GtkWidget *widg, cairo_t *cr, gpointer data)
OpenGL rendering widget expose event callback GTK3.
Variable declarations related to the OpenGL window Function declarations related to the OpenGL wind...
#define ZOOM_MAX
Maximum value for the OpenGL zoom factor.
G_MODULE_EXPORT void to_center_this_molecule(GtkWidget *widg, gpointer data)
center this molecule menu item callback GTK4
#define REFRESH
Refresh time for spinning the OpenGL window in milliseconds.
#define DEFAULT_STYLE
Default OpenGL style: ball and stick.
void activate_glwin_action(gchar *action_string, gchar *action_name, glwin *view)
the keyboard shortcut actions for the OpenGL window
void set_sensitive_coord_menu(glwin *view, gboolean status)
void glwin_key_pressed(guint keyval, GdkModifierType state, gpointer data)
the keyboard shortcut actions for the OpenGL window
void set_color_map_sensitive(glwin *view)
void window_encode(glwin *view, gboolean video)
encoding a movie - creating the dialog
G_MODULE_EXPORT void coord_properties(GtkWidget *widg, gpointer data)
create the environments configuration window
G_MODULE_EXPORT void set_style(GtkWidget *widg, gpointer data)
set style callback
gchar * opengl_group_names[]
int get_selection_type(glwin *view)
get selection type
void save_rotation_quaternion(glwin *view)
save the rotation quaternion of the last image
gchar * opengl_section_names[]
G_MODULE_EXPORT void set_selection_mode(GtkWidget *widg, gpointer data)
set selection mode callback
int opengl_shortcut_by_group[]
void update_all_menus(glwin *view, int nats)
update all menus of the OpenGL window
void prep_model(int p)
prepare, or display, the OpenGL model window
G_MODULE_EXPORT void opengl_advanced(GtkWidget *widg, gpointer data)
create OpenGL rendering advanced window
G_MODULE_EXPORT gboolean on_glwin_key_pressed(GtkEventControllerKey *self, guint keyval, guint keycode, GdkModifierType state, gpointer data)
keyboard key press event for the OpenGL window GTK4
G_MODULE_EXPORT void spin_go(GtkWidget *widg, gpointer data)
void update_menus(glwin *view)
G_MODULE_EXPORT void set_box_axis_style(GtkWidget *widg, gpointer data)
void set_render(gpointer data)
set OpenGL rendering mode callback
G_MODULE_EXPORT void on_win_realize(GtkWidget *widg, gpointer data)
realize event for the OpenGL window
G_MODULE_EXPORT void set_full_screen(GtkWidget *widg, gpointer data)
set full screen callback GTK3
GtkWidget * shortcuts_window(int sections, int group_by_section[sections], int groups, int shortcut_by_group[groups], gchar *section_names[sections], gchar *group_names[groups], shortcuts shortcs[])
Create the shortcuts information window.
G_MODULE_EXPORT void add_object(GtkWidget *widg, gpointer data)
add object call back GTK3
G_MODULE_EXPORT void copy_the_atoms(GtkWidget *widg, gpointer data)
copy selected atom(s) callback GTK3
void prepare_opengl_menu_bar(glwin *view)
update the OpenGL window menu bar
G_MODULE_EXPORT void view_shortcuts(GtkWidget *widg, gpointer data)
OpenGL window shortcuts callback GTK3.
G_MODULE_EXPORT void label_unlabel_atoms(GtkWidget *widg, gpointer data)
label / unlabel a type of atom(s) callback GTK3
G_MODULE_EXPORT void window_recorder(GtkWidget *widg, gpointer data)
create video recorder window
void translate(project *this_proj, int status, int axis, vec3_t trans)
translate
gboolean spin(gpointer data)
spin
GtkWidget * menupoly(glwin *view, int jd, int id, gchar *poln)
G_MODULE_EXPORT void select_unselect_atoms(GtkWidget *widg, gpointer data)
select / unselect a type of atom(s) callback GTK3
void change_color_map(glwin *view, int col)
change atom / polyhedra color map
gboolean create_3d_model(int p, gboolean load)
G_MODULE_EXPORT void to_reset_view(GtkWidget *widg, gpointer data)
reset view callback - GTK3
G_MODULE_EXPORT gboolean do_not_hide(GtkWidget *win, GdkEvent *event, gpointer data)
revent to hide the OpenGL window in LibreOffice mode
shortcuts opengl_shortcuts[]
G_MODULE_EXPORT void window_measures(GtkWidget *widg, gpointer data)
create the measurements window
G_MODULE_EXPORT void render_gl_image(GtkWidget *widg, gpointer data)
render image from the OpenGL window
G_MODULE_EXPORT void set_mode(GtkWidget *widg, gpointer data)
set mouse mode callback
vec3_t get_insertion_coordinates(glwin *view)
get the insertion coordinates to insert object in the 3D window
G_MODULE_EXPORT void set_color_map(GtkWidget *widg, gpointer data)
set color map callback
G_MODULE_EXPORT void on_create_new_project(GtkWidget *widg, gpointer data)
create a new project
void rotate_x_y(glwin *view, double angle_x, double angle_y)
rotate the OpenGL camera
G_MODULE_EXPORT void edit_in_new_project(GtkWidget *widg, gpointer data)
create new project using selection callback GTK3
G_MODULE_EXPORT void spin_stop(GtkButton *but, gpointer data)
stop spin
void set_this_style(glwin *view, int style)
set general style for atom(s) and bond(s)
void set_motion(glwin *view, int axis, int da, int db, gboolean UpDown, GdkModifierType state)
handle keyboard motion event on the OpenGL window
mat4_t insert_projection(glwin *view)
calculate the insertion projection matrix to insert object in the 3D window
int opengl_group_by_section[]
G_MODULE_EXPORT void remove_the_atoms(GtkWidget *widg, gpointer data)
remove selected atom(s) callback GTK3
gboolean trigger_fragment_analysis
gboolean trigger_molecule_analysis
Function declarations to handle the atomic coordination data.
void set_advanced_bonding_menus(glwin *view)
GMenu * menu_anim(glwin *view, int popm)
create the 'Animate' submenu elements
GMenu * menu_atoms(glwin *view, int popm, int at)
create the 'Atom(s)' submenu elements
GMenu * menu_back(glwin *view, int popm)
create the background color menu item GTK4
GMenu * menu_bonds(glwin *view, int popm, int at)
create the 'Bond(s)' submenu GTK4
GMenuItem * menu_box_axis(glwin *view, int popm, int ab)
create the 'Model -> Box' and 'View -> Axis' submenus GTK4
GMenu * menu_clones(glwin *view, int popm)
create the 'Clone(s)' submenu GTK4
GMenu * menu_coord(glwin *view, int popm)
create the 'Coordination' submenu GTK4
GMenu * menu_rings(glwin *view, int popm)
create the 'Ring(s)' submenu GTK4
GMenu * add_menu_coord(glwin *view, int popm, int id)
create a coordination type submenu
GMenu * menu_map(glwin *view, int popm)
create the 'OpenGL -> Color Scheme(s)' submenu - GTK4
G_MODULE_EXPORT void cloned_poly(GtkWidget *widg, gpointer data)
cloned polyehdra callback - GTK3
GMenu * menu_poly(glwin *view, int popm)
create the 'Chemistry -> Polyehdra' submenu - GTK4
GMenu * menu_proj(glwin *view, int popm)
create the 'View -> Projection' submenu - GTK4
GMenu * menu_rep(glwin *view, int popm)
create 'View -> Representation' submenu items - GTK4
GMenu * menu_view(glwin *view, int popm)
create the 'View' submenu - GTK4
GMenu * menu_style(glwin *view, int popm)
create the 'OpenGL -> Style' submenu - GTK4
Data structure declarations for movie encoding Function declarations for movie encoding.
Function declarations for reading atomes project file Function declarations for saving atomes proje...
void active_project_changed(int id)
change the active project
GtkWidget * prep_rings_menu(glwin *view, int id)