96extern G_MODULE_EXPORT
void show_sg_info (GtkButton * but, gpointer data);
100extern int build_crystal (gboolean visible,
project * this_proj,
int c_step, gboolean to_wrap, gboolean show_clones,
cell_info * cell, GtkWidget * widg);
102gchar *
latt_info[7]={
"<i>a</i> ≠ <i>b</i> ≠ <i>c</i>\nα ≠ β ≠ ɣ",
103 i18n(
"<i>a</i> ≠ <i>b</i> ≠ <i>c</i>\nα = β = 90° ≠ ɣ\n\tor\nα = ɣ = 90° ≠ β"),
104 "<i>a</i> ≠ <i>b</i> ≠ <i>c</i>\nα = β = ɣ = 90°",
105 "<i>a</i> = <i>b</i> ≠ <i>c</i>\nα = β = ɣ = 90°",
106 "<i>a</i> = <i>b</i> = <i>c</i>\nα = β = γ ≠ 90°",
107 i18n(
"<i>a</i> = <i>b</i> ≠ <i>c</i>\nα = β = 90° and ɣ = 120°"),
108 "<i>a</i> = <i>b</i> = <i>c</i>\nα = β = ɣ = 90°"};
109int nsg_bv[7]={2, 13, 59, 68, 25, 27, 36};
110int min_bv[7]={0, 2, 15, 74, 142, 167, 194};
139 if (
groups[spg-1][0] ==
'R')
173 if (
groups[spg-1][0] ==
'P')
184 if (
groups[spg-1][0] ==
'P')
188 else if (
groups[spg-1][0] ==
'I')
192 else if (
groups[spg-1][0] ==
'A' ||
groups[spg-1][0] ==
'C')
203 if (
groups[spg-1][0] ==
'P')
214 if (
groups[spg-1][0] ==
'R')
229 if (
groups[spg-1][0] ==
'P')
233 else if (
groups[spg-1][0] ==
'I')
264 return g_strdup_printf (
"%s", end);
299 gchar * str =
replace_markup (spg -> settings[
id].name,
"s",
"/");
302 if (spg -> settings[
id].origin)
304 str = g_strdup_printf (
"%s (%d)", str, spg -> settings[
id].origin);
319 GtkTreeStore * store;
321 store = gtk_tree_store_new (1, G_TYPE_STRING);
322 if (! spg)
return GTK_TREE_MODEL (store);
325 for (i=0; i<spg -> nums; i++)
327 gtk_tree_store_append (store, &iter, NULL);
328 gtk_tree_store_set (store, & iter, 0,
get_so_string (spg, i), -1);
333 gtk_tree_store_append (store, &iter, NULL);
334 gtk_tree_store_set (store, & iter, 0,
groups[spg ->
id-1], -1);
336 return GTK_TREE_MODEL (store);
350 GtkTreeStore * store;
354 store = gtk_tree_store_new (1, G_TYPE_STRING);
358 if (! bvid || csid == 5)
364 if (csid == 1 || csid == 3)
366 if ((bvid == 1 &&
groups[i][0] ==
'P') || (bvid == 2 &&
groups[i][0] !=
'P')) doit = TRUE;
370 if ((bvid == 1 &&
groups[i][0] ==
'P') || (bvid == 2 &&
groups[i][0] ==
'A') || (bvid == 2 &&
groups[i][0] ==
'C') ||
371 (bvid == 3 &&
groups[i][0] ==
'I') || (bvid == 4 &&
groups[i][0] ==
'F'))
378 if ((bvid == 1 &&
groups[i][0] ==
'P') || (bvid == 2 &&
groups[i][0] ==
'R')) doit = TRUE;
382 if ((bvid == 1 &&
groups[i][0] ==
'P') || (bvid == 2 &&
groups[i][0] ==
'I') || (bvid == 3 &&
groups[i][0] ==
'F'))
390 gtk_tree_store_append (store, &iter, NULL);
391 str = g_strdup_printf (
"%3d: %s", i+1,
groups[i]);
392 gtk_tree_store_set (store, & iter, 0, str, -1);
396 return GTK_TREE_MODEL (store);
408 gchar * lat[2]={
"<b><i>a</i></b>, <b><i>b</i></b>, <b><i>c</i></b>, α β ɣ",
i18n(
"Vectors")};
410 store = gtk_tree_store_new (1, G_TYPE_STRING);
413 gtk_tree_store_append (store, &iter, NULL);
414 gtk_tree_store_set (store, & iter, 0, (i) ? _(lat[i]) : lat[i], -1);
416 return GTK_TREE_MODEL (store);
429 GtkTreeModel * cmodel = gtk_combo_box_get_model (
box);
434 if (gtk_combo_box_get_active_iter (
box, & iter))
436 gtk_tree_model_get_value (cmodel, & iter, 0, &
val);
437 str = g_strdup_printf (
"%s", (
char *)g_value_get_string (&
val));
440 num = g_strdup_printf (
"%c%c%c", str[0], str[1], str[2]);
459 j =
get_sg_num (GTK_COMBO_BOX(cbuilder -> sg_combo));
466 box -> vect[0][1] =
box -> vect[0][2] = 0.0;
467 box -> vect[2][0] =
box -> vect[2][1] = 0.0;
471 box -> vect[0][1] =
box -> vect[0][2] = 0.0;
472 box -> vect[1][0] =
box -> vect[1][2] = 0.0;
473 box -> vect[2][0] =
box -> vect[2][1] = 0.0;
481 if (cbuilder -> cell.sp_group -> name[0] ==
'R')
490 box -> vect[1][1] =
box -> vect[0][0];
491 box -> vect[0][1] =
box -> vect[0][2] = 0.0;
492 box -> vect[1][0] =
box -> vect[1][2] = 0.0;
498 box -> vect[0][1] =
box -> vect[0][2] = 0.0;
499 box -> vect[1][0] =
box -> vect[1][2] = 0.0;
504 box -> vect[1][1] =
box -> vect[2][2] =
box -> vect[0][0];
505 box -> vect[0][1] =
box -> vect[0][2] = 0.0;
506 box -> vect[1][0] =
box -> vect[1][2] = 0.0;
507 box -> vect[2][0] =
box -> vect[2][1] = 0.0;
512 if (cbuilder -> cell.ltype)
518 if (cbuilder -> ventry[i][j])
520 if (GTK_IS_WIDGET(cbuilder -> ventry[i][j]))
534 if (cbuilder -> bentry[i][j])
536 if (GTK_IS_WIDGET(cbuilder -> bentry[i][j]))
543 if (cbuilder -> bentry[0][1])
545 if (GTK_IS_WIDGET(cbuilder -> bentry[0][1]))
551 if (cbuilder -> bentry[0][2])
553 if (GTK_IS_WIDGET(cbuilder -> bentry[0][2]))
555 widget_set_sensitive (cbuilder -> bentry[0][2], (k > 5 || (k == 4 && cbuilder -> cell.sp_group -> name[0] ==
'R')) ? 0 : 1);
556 if (k > 5 || (k == 4 && cbuilder -> cell.sp_group -> name[0] ==
'R'))
update_entry_text (GTK_ENTRY(cbuilder -> bentry[0][2]),
"");
561 if (cbuilder -> bentry[1][i])
563 if (GTK_IS_WIDGET(cbuilder -> bentry[1][i]))
566 if (k == 4 && cbuilder -> cell.sp_group -> name[0] ==
'R')
631 GtkWidget * table = gtk_grid_new ();
636 for (j=0; j<3; j++, k++)
638 if (i < 2) cbuilder -> cell.box[0].param[i][j] = 0.0;
639 cbuilder -> cell.box[0].vect[i][j] = 0.0;
644 cbuilder -> cell.ltype = type;
645 if (cbuilder -> cell.ltype)
665 update_entry_double (GTK_ENTRY(cbuilder -> ventry[i-1][j-1]), cbuilder -> cell.box[0].vect[i-1][j-1]);
666 gtk_grid_attach (GTK_GRID (table), cbuilder -> ventry[i-1][j-1], j, i, 1, 1);
679 gtk_grid_attach (GTK_GRID (table),
markup_label(
" ", 20, -1, 0.5, 0.5), 0, i, 1, 1);
680 for (j=0; j<3; j++, k++)
682 gtk_grid_attach (GTK_GRID (table),
markup_label(
box_prop[i][j], -1, -1, 0.5, 0.5), j+1, i+2*i, 1, 1);
684 update_entry_double (GTK_ENTRY(cbuilder -> bentry[i][j]), cbuilder -> cell.box[0].param[i][j]);
685 gtk_grid_attach (GTK_GRID (table), cbuilder -> bentry[i][j], j+1, i+2*i+1, 1, 1);
708 add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> lattice_box, cbuilder -> lattice_grid, FALSE, FALSE, 5);
720G_MODULE_EXPORT
void set_so (GtkComboBox *
box, gpointer data)
725 gchar * str = g_strdup_printf (
"(%s,%s,%s)", cbuilder -> cell.sp_group -> settings[i].pos[0],
726 cbuilder -> cell.sp_group -> settings[i].pos[1],
727 cbuilder -> cell.sp_group -> settings[i].pos[2]);
731 add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> so_box, cbuilder -> so_info, FALSE, FALSE, 10);
733 cbuilder -> cell.sp_group -> sid = i;
747 gchar * str = g_strdup_printf (_(
"%s group info"),
groups[sg]);
770 sgfile = g_strdup_printf (
"%s\\space_groups\\%d-%s.sgl",
PACKAGE_LIB_DIR, spg+1, sgfile);
772 sgfile = g_strdup_printf (
"%s/space_groups/%d-%s.sgl",
PACKAGE_LIB_DIR, spg+1, sgfile);
778 res = (cbuilder -> cell.sp_group) ? 1 : 0;
799 for (i=0; i<230; i++)
801 if (g_strcmp0(
groups[i], sg_name) == 0)
return i+1;
816 gtk_combo_box_set_model (GTK_COMBO_BOX(cbuilder -> so_combo),
model);
817 g_object_unref (
model);
821 if (cbuilder -> cell.sp_group)
get_origin (cbuilder -> cell.sp_group);
836 gtk_widget_set_size_request (cbuilder -> bv_img, 200, 200);
837 gtk_widget_set_hexpand (cbuilder -> bv_img, TRUE);
838 gtk_widget_set_vexpand (cbuilder -> bv_img, TRUE);
840 add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> bv_box[1], cbuilder -> bv_img, FALSE, FALSE, 5);
852 if (cbuilder -> ltc_cons) cbuilder -> ltc_cons =
destroy_this_widget(cbuilder -> ltc_cons);
854 gchar * str = g_strdup_printf (
"<b>%s</b>", (i == 1 || i == 5) ? _(
latt_info[i]) :
latt_info[i]);
855 cbuilder -> ltc_cons =
markup_label(str, 150, -1, 0.0, 0.5);
857 add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> ltc_box, cbuilder -> ltc_cons, FALSE, FALSE, 5);
868G_MODULE_EXPORT
void set_sg (GtkComboBox *
box, gpointer data)
878 cbuilder -> sg_but =
sg_info (i-1, data);
879 add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> sg_box, cbuilder -> sg_but, FALSE, FALSE, 10);
889 show_error (_(
"Cannot read space group *.sgl file ?!\nPlease check the program library !"), 0, cbuilder -> win);
906 gtk_combo_box_set_model (GTK_COMBO_BOX(cbuilder -> sg_combo),
model);
907 g_object_unref (
model);
921G_MODULE_EXPORT
void set_bl (GtkComboBox *
box, gpointer data)
940 gchar * bravais_keys[7][4] = {{
i18n(
"Primitive "), NULL, NULL, NULL},
941 {
i18n(
"Primitive "),
i18n(
"Base-centered"), NULL, NULL},
942 {
i18n(
"Primitive "),
i18n(
"Base-centered"),
i18n(
"Body-centered"),
i18n(
"Face-centered")},
943 {
i18n(
"Primitive "),
i18n(
"Body-centered"), NULL, NULL},
944 {
i18n(
"Hexagonal Axes"),
i18n(
"Rhombohedral Axes"), NULL, NULL},
945 {
i18n(
"Hexagonal"), NULL, NULL, NULL},
946 {
i18n(
"Primitive"),
i18n(
"Body-centered"),
i18n(
"Face-centered"), NULL}};
954 i = (cs == 0 || cs == 5) ? 0 : 1;
957 g_signal_connect (G_OBJECT(
cbox),
"changed", G_CALLBACK(
set_bl), data);
958 gtk_widget_set_size_request (
cbox, 150, 25);
970G_MODULE_EXPORT
void set_cs (GtkComboBox *
box, gpointer data)
976 add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> bl_box, cbuilder -> bl_combo, FALSE, FALSE, 0);
990G_MODULE_EXPORT
void set_wr (GtkCheckButton * but, gpointer data)
1000G_MODULE_EXPORT
void set_wr (GtkToggleButton * but, gpointer data)
1016G_MODULE_EXPORT
void set_shc (GtkCheckButton * but, gpointer data)
1026G_MODULE_EXPORT
void set_shc (GtkToggleButton * but, gpointer data)
1045 cbuilder -> cell.cextra[bid -> b] = gtk_spin_button_get_value_as_int(
res);
1058 int id = GPOINTER_TO_INT(data);
1080 int id = GPOINTER_TO_INT(data);
1082 this_proj -> modelgl -> search_widg[7] =
free_this_search_data (this_proj -> modelgl -> search_widg[7]);
1097G_MODULE_EXPORT gboolean
delete_build (GtkWindow * widg, gpointer data)
1108G_MODULE_EXPORT gboolean
delete_build (GtkWidget * widg, GdkEvent * event, gpointer data)
1126G_MODULE_EXPORT
void toggle_occ (GtkCheckButton * but, gpointer data)
1136G_MODULE_EXPORT
void toggle_occ (GtkToggleButton * but, gpointer data)
1152G_MODULE_EXPORT
void toggle_overlap (GtkCheckButton * Button, gpointer data)
1195 GtkWidget * info =
dialogmodal (
"Occupancy set-up", GTK_WINDOW(cbuilder -> win));
1198 gchar * boccup[5] = {
i18n(
"<b>Random for the initial cell only</b>"),
1199 i18n(
"<b>Random cell by cell</b>"),
1200 i18n(
"<b>Completely random</b>"),
1201 i18n(
"<b>Successively</b>"),
1202 i18n(
"<b>Alternatively</b>")};
1203 gchar * occup[5] = {
i18n(
"<i>Sites are filled randomly in the initial cell only,\n"
1204 "then the initial cell is simply replicated.</i>"),
1205 i18n(
"<i>Sites are filled randomly for each cell, cell by cell separately.</i>"),
1206 i18n(
"<i>Sites are filled randomly for the entire network,\n"
1207 "the final crystal is considered as a whole.</i>"),
1208 i18n(
"<i>Sites are filled successively: all object(s) A, then all object(s) B ... </i>"),
1209 i18n(
"<i>Sites are filled alternatively: object A, object B, object A ...</i>")};
1211 GtkWidget * occ_but[5];
1216 occp[i].a = this_proj -> id;
1223 gtk_check_button_set_group ((GtkCheckButton *)occ_but[i], (GtkCheckButton *)occ_but[0]);
1232 occ_but[i] = gtk_radio_button_new_from_widget (GTK_RADIO_BUTTON(occ_but[0]));
1236 if (i) g_signal_connect (G_OBJECT(occ_but[i]),
"toggled", G_CALLBACK(
toggle_occ), &
occp[i]);
1238 gtk_button_set_has_frame (GTK_BUTTON(occ_but[i]), FALSE);
1247 add_box_child_start (GTK_ORIENTATION_VERTICAL,
vbox,
check_button (_(
"<b>Allow overlapping</b>"), -1, 25, cbuilder -> overlapping, G_CALLBACK(
toggle_overlap), (gpointer)cbuilder), FALSE, FALSE, 0);
1250 gchar * overlap = _(
"<i>Instead of ensuring that sites are filled by a single object,\n"
1251 "this allows object(s) to share the same crystalline position. \n"
1252 "The option above describes how filled and empty positions alternate.</i>\n");
1260 gtk_widget_set_size_request (rounding, -1, 30);
1263 g_signal_connect(G_OBJECT(rounding),
"changed", G_CALLBACK(
on_rounding_changed), & cbuilder);
1265 gchar * str = g_strdup_printf (_(
"\t<b>Lowest integer: </b>\n"
1266 "\t\t Occupancy %s\n\t\t\t ex:\t ⌊8.75⌋ = 8\n"
1267 "\t<b>Highest integer: </b>\n"
1268 "\t\t Occupancy %s\n\t\t\t ex:\t ⌈5.39⌉ = 6\n"
1269 "\t<b>Nearest integer: </b>\n"
1270 "\t\t Occupancy %s\n\t\t\t ex:\t ⌊6.82⌉ = 7\t\t and\t ⌊4.31⌉ = 4\n"
1290 gchar * crystal_systems[7] = {
i18n(
"Triclinic"),
i18n(
"Monoclinic"),
i18n(
"Othorhombic"),
i18n(
"Tetragonal"),
i18n(
"Trigonal"),
i18n(
"Hexagonal"),
i18n(
"Cubic")};
1291 gchar * str = (! this_proj -> natomes) ? g_strdup_printf (_(
"Crystal builder - %s"), this_proj -> name) : g_strdup_printf (_(
"Crystal builder"));
1293 GtkWidget * win =
create_win (str, this_proj -> modelgl -> win, FALSE, FALSE);
1303 add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> bh_box, cbuilder -> bv_box[i], FALSE, FALSE, 0);
1312 for (i=0; i<7;i++)
combo_text_append (cbuilder -> cs_combo, _(crystal_systems[i]));
1314 gtk_widget_set_size_request (cbuilder -> cs_combo, 150, 25);
1316 g_signal_connect (G_OBJECT(cbuilder -> cs_combo),
"changed", G_CALLBACK(
set_cs), (gpointer)cbuilder);
1320 add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> bv_box[0], cbuilder -> bl_box, FALSE, FALSE, 0);
1323 add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> bl_box, cbuilder -> bl_combo, FALSE, FALSE, 0);
1328 str = g_strdup_printf (
"<b>%s</b>", (i == 1 || i == 5) ? _(
latt_info[i]) :
latt_info[i]);
1329 cbuilder -> ltc_cons =
markup_label(str, 150, -1, 0.0, 0.5);
1331 add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> ltc_box, cbuilder -> ltc_cons, FALSE, FALSE, 5);
1332 add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> bv_box[0], cbuilder -> ltc_box, FALSE, FALSE, 5);
1342 cbuilder -> sg_combo = gtk_combo_box_new_with_model (
model);
1343 g_object_unref (
model);
1344 GtkCellRenderer * renderer = gtk_cell_renderer_combo_new ();
1345 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cbuilder -> sg_combo), renderer, TRUE);
1346 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cbuilder -> sg_combo), renderer,
"text", 0, NULL);
1347 g_signal_connect (G_OBJECT(cbuilder -> sg_combo),
"changed", G_CALLBACK(
set_sg), data);
1348 gtk_widget_set_size_request (cbuilder -> sg_combo, 150, 25);
1349 add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> sg_box, cbuilder -> sg_combo, FALSE, FALSE, 0);
1357 cbuilder -> so_combo = gtk_combo_box_new_with_model (
model);
1358 g_object_unref (
model);
1359 renderer = gtk_cell_renderer_combo_new ();
1360 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cbuilder -> so_combo), renderer, TRUE);
1361 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cbuilder -> so_combo), renderer,
"text", 0, NULL);
1362 gtk_widget_set_size_request (cbuilder -> so_combo, 150, 25);
1363 add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> so_box, cbuilder -> so_combo, FALSE, FALSE, 0);
1366 g_signal_connect (G_OBJECT(cbuilder -> so_combo),
"changed", G_CALLBACK(
set_so), data);
1371 cbuilder -> cell.cextra[i] = 1;
1374 cbuilder -> pointers[i][j].a = this_proj -> id;
1375 cbuilder -> pointers[i][j].b = i;
1376 cbuilder -> pointers[i][j].c = j;
1379 if (cbuilder -> cell.sp_group)
get_origin (cbuilder -> cell.sp_group);
1386 cbuilder -> la_combo = gtk_combo_box_new_with_model (lmodel);
1387 g_object_unref (lmodel);
1388 renderer = gtk_cell_renderer_combo_new ();
1389 gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cbuilder -> la_combo), renderer, TRUE);
1390 gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cbuilder -> la_combo), renderer,
"text", 0, NULL);
1391 gtk_widget_set_size_request (cbuilder -> la_combo, 150, 25);
1392 g_signal_connect (G_OBJECT(cbuilder -> la_combo),
"changed", G_CALLBACK(
set_lattice), data);
1405 GtkWidget * ax_cell[3];
1408 ax_cell[i] =
spin_button (G_CALLBACK(
add_cryst_cell), cbuilder -> cell.cextra[i], 1, 1000, 1, 0, 100, & cbuilder -> pointers[i][0]);
1409 str = g_strdup_printf (
"%s x ",
box_prop[0][i]);
1415 add_box_child_start (GTK_ORIENTATION_VERTICAL,
vbox,
check_button (_(
" Wrap all atoms in the unit cell after building"), -1, -1, FALSE, G_CALLBACK(
set_wr), (gpointer)cbuilder), FALSE, FALSE, 10);
1416 add_box_child_start (GTK_ORIENTATION_VERTICAL,
vbox,
check_button (_(
" Show/Hide clones after building"), -1, -1, FALSE, G_CALLBACK(
set_shc), (gpointer)cbuilder), FALSE, FALSE, 0);
1423 gtk_widget_set_size_request (cbuilder -> add_combo, 110, -1);
1425 add_box_child_start (GTK_ORIENTATION_HORIZONTAL,
hbox,
create_button (_(
"Occupancy"),
IMG_STOCK,
DPROPERTIES, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(
adjust_occupancy), this_proj), FALSE, FALSE, 5);
1432 cbuilder -> pbut =
create_button ((this_proj -> natomes) ? _(
"Build (new project)") : _(
"Build"),
IMG_STOCK,
APPLY, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(
apply_build), GINT_TO_POINTER(this_proj ->
id));
1457 this_proj -> modelgl ->
builder_win -> cell.box = g_malloc0(
sizeof*this_proj -> modelgl ->
builder_win -> cell.box);
1459 this_proj -> modelgl ->
builder_win -> rounding = 2;
1474G_MODULE_EXPORT
void crystal_window (GSimpleAction *
action, GVariant * parameter, gpointer data)
void prepare_atom_edition(gpointer data, gboolean visible)
prepare atom edition
atom_search * allocate_atom_search(int proj, int action, int searchid, int tsize)
allocate atom search data structure
G_MODULE_EXPORT void close_build(GtkWidget *widg, gpointer data)
GtkWidget * create_action_combo(int id, project *this_proj)
create action combo box
Binding to the Fortran90 subroutines.
gchar * substitute_string(gchar *init, gchar *o_motif, gchar *n_motif)
substitute all patterns in string
gboolean crystal_low_warning
int occupancy(double occ, int cif_occ)
handle occupancy integer rouding
gboolean crystal_dist_chk
void adjust_sg_combo(builder_edition *cbuilder, int cs, int bl)
adjust the space group combo box to use pango markup
void adjust_bv_img(builder_edition *cbuilder)
adjust the bravais lattice image
G_MODULE_EXPORT void toggle_overlap(GtkToggleButton *Button, gpointer data)
adjust overlapping toggle callback GTK3
G_MODULE_EXPORT void adjust_occupancy(GtkButton *but, gpointer data)
adjust occupancy create dialog callback
G_MODULE_EXPORT void toggle_occ(GtkToggleButton *but, gpointer data)
occupancy toggle callback GTK3
G_MODULE_EXPORT void set_wr(GtkToggleButton *but, gpointer data)
wrap or not atomic coordinates after crystal building toggle callback GTK3
G_MODULE_EXPORT void apply_build(GtkButton *but, gpointer data)
build crystall callback
G_MODULE_EXPORT void set_sg(GtkComboBox *box, gpointer data)
change space group
G_MODULE_EXPORT void show_sg_info(GtkButton *but, gpointer data)
G_MODULE_EXPORT void set_cs(GtkComboBox *box, gpointer data)
change the crystal system
G_MODULE_EXPORT void add_cryst_cell(GtkSpinButton *res, gpointer data)
add cell callback spin
GtkWidget * create_bl_combo(int cs, gpointer data)
create the bravais lattice combo box
G_MODULE_EXPORT void set_so(GtkComboBox *box, gpointer data)
set space group setting
GtkWidget * sg_info(int sg, gpointer data)
create the space group information button
void adjust_lattice_constraints(builder_edition *cbuilder)
adjust lattice constraints
GtkTreeModel * la_combo_tree()
create the lattice system combo box tree model
gchar * get_num_string(gchar *str)
get description string for entry string
gchar * frac_string(gchar *init)
get pango string for fraction string
int get_crystal_id(int spg)
get the bravais lattice id from space group id
G_MODULE_EXPORT void set_bl(GtkComboBox *box, gpointer data)
change bravais lattice
int build_crystal(gboolean visible, project *this_proj, int c_step, gboolean to_wrap, gboolean show_clones, cell_info *cell, GtkWidget *widg)
build crystal
int read_space_group(builder_edition *cbuilder, int spg)
read space group N°spg data from file
G_MODULE_EXPORT void set_shc(GtkToggleButton *but, gpointer data)
show / hide clones after crystal building toggle callback GTK3
G_MODULE_EXPORT void close_build(GtkButton *but, gpointer data)
close crystal builder and free associated data pointers
int get_bravais_img_id(int spg)
get bravais image from space group id
void get_origin(space_group *spg)
get space group origin matrices
void adjust_lattice_parameters(builder_edition *cbuilder)
adjust lattice parameters depending on space group
G_MODULE_EXPORT void update_cb_box(GtkEntry *entry, gpointer data)
update lattice box parameter callback
G_MODULE_EXPORT void set_lattice(GtkComboBox *box, gpointer data)
change the lattice system
G_MODULE_EXPORT void crystal_window(GtkWidget *widg, gpointer data)
create the crystal build window callback GTK3
G_MODULE_EXPORT gboolean delete_build(GtkWidget *widg, GdkEvent *event, gpointer data)
crystal builder delete event callback GTK3
int get_group_id_from_name(gchar *sg_name)
get space group id from name
G_MODULE_EXPORT void update_cb_vect(GtkEntry *entry, gpointer data)
update lattice vector callback
int get_sg_num(GtkComboBox *box)
get space group number from active iter in tree model of combo box
void prepare_crystal_builder(gpointer data)
create the crystal builder
int test_lattice(builder_edition *cbuilder, cell_info *cif_cell)
test lattice parameters
GtkTreeModel * sg_combo_tree(int csid, int bvid)
create the space group combo box tree model
GtkWidget * builder_win(project *this_proj, gpointer data)
create crystal builder window
GtkWidget * prepare_lattice_grid(int type, builder_edition *cbuilder, glwin *glview)
prepare the lattice parameters grid widget
GtkTreeModel * so_combo_tree(space_group *spg)
create the space group setting combo box tree model
gchar * get_so_string(space_group *spg, int id)
get space group setting descrption string
G_MODULE_EXPORT void on_rounding_changed(GtkComboBox *box, gpointer data)
changed rounding method for occupancy
void adjust_so_combo(builder_edition *cbuilder)
adjust the space group setting combo box to use pango markup
Function declarations for the crystal builder.
GtkWidget * create_atoms_tree(atom_search *asearch, project *this_proj, int na)
create atom search tree view
gchar * replace_markup(char *init, char *key, char *rep)
replace pattern in string
space_group * read_sg_xml_file(const char *filetoread)
read space group data from XML file
double string_to_double(gpointer string)
convert string to double
Global variable declarations Global convenience function declarations Global data structure defin...
void run_this_gtk_dialog(GtkWidget *dial, GCallback handler, gpointer data)
run a GTK (3 and 4) basic GtkDialog
int combo_get_active(GtkWidget *combo)
retrieve the active item's position
GtkWidget * create_entry(GCallback handler, int dim, int cdim, gboolean key_release, gpointer data)
Create a GtkEntry.
void update_entry_double(GtkEntry *entry, double doubleval)
update the content of a GtkEntry as double
GtkWidget * create_scroll(GtkWidget *box, int dimx, int dimy, int shadow)
create a scroll window
GtkWidget * dialogmodal(gchar *str, GtkWindow *parent)
Create a new dialog modal window.
GtkWidget * create_win(gchar *str, GtkWidget *parent, gboolean modal, gboolean resiz)
create a new GtkWindow
void combo_set_markup(GtkWidget *combo)
use pango markup in combo widget
void combo_set_active(GtkWidget *combo, int pos)
set the active item's position
const gchar * entry_get_text(GtkEntry *entry)
get the text in a GtkEntry
void add_gtk_close_event(GtkWidget *widg, GCallback handler, gpointer data)
add a close event signal and callback to a GtkWidget
void button_set_status(GtkWidget *button, int status)
set status of check / toggle button
GtkWidget * radio_button(gchar *text, int dimx, int dimy, gboolean state, GCallback handler, gpointer data)
create a radio button
GtkWidget * spin_button(GCallback handler, double value, double start, double end, double step, int digits, int dim, gpointer data)
create a spin button
GtkWidget * check_button(gchar *text, int dimx, int dimy, gboolean state, GCallback handler, gpointer data)
create a check button
GtkWidget * create_button(gchar *text, int image_format, gchar *image, int dimx, int dimy, int relief, GCallback handler, gpointer data)
create a simple button
GtkWidget * create_combo()
create a GtkCombox widget, note deprecated in GTK4
GtkWidget * dialog_get_content_area(GtkWidget *widg)
prepare GtkWidget to insert content in a GtkDialog window
GtkWidget * markup_label(gchar *text, int dimx, int dimy, float ax, float ay)
create a GtkLabel with pango markup
GtkWidget * cbox(GtkWidget *box, char *lab)
box creating routine, to help design faster elements for the GUI
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
void combo_text_append(GtkWidget *combo, gchar *text)
append text in GtkComboBox widget
G_MODULE_EXPORT void run_destroy_dialog(GtkDialog *dialog, gint response_id, gpointer data)
to destroy a GtkDialog when the dialog emit the closing signal
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 update_entry_text(GtkEntry *entry, gchar *text)
update the content of a GtkEntry as string
void add_container_child(int type, GtkWidget *widg, GtkWidget *child)
Add a GtkWidget into another GtkWidget.
GtkWidget * create_vbox(int spacing)
create a GtkBox with vertical orientation
int button_get_status(GtkWidget *button)
get status of check / toggle button
void show_the_widgets(GtkWidget *widg)
show GtkWidget
project * get_project_by_id(int p)
get project pointer using id number
Variable declarations related to the OpenGL window Function declarations related to the OpenGL wind...
atom_search * free_this_search_data(atom_search *this_search)
free atom search data structure
void show_error(char *error, int val, GtkWidget *win)
show error message
gchar * cif_occupancies[3]
Messaging function declarations.
integer(kind=c_int) function lattice(totl, lid, vectors, vmod, angles, lat, cfrac, apbc)
Function declarations for reading atomes project file Function declarations for saving atomes proje...
Functions declaration to read atomic coordinates.
Function declarations for workspace managment.