1 /*This file is a part of luscus project*/
2 /*Licensed under the Academic Free License version 3.0*/
3 /*handle atom lists*/
4 #include<gtk/gtk.h>
5 #include"luscus.h"
6 #include"gv.h"
7 #include"gv_gtk.h"
8
init_atom_list(void)9 void init_atom_list(void)
10 {
11 atom_list = gtk_list_store_new(N_COLUMNS, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_UINT, G_TYPE_STRING);
12 }
13
deallocate_atom_list(void)14 void deallocate_atom_list(void)
15 {
16 gboolean test;
17 GtkTreeIter iter;
18 GtkTreePath *path;
19
20 if (atom_list)
21 {
22 path = gtk_tree_path_new_first();
23 test = gtk_tree_model_get_iter(GTK_TREE_MODEL(atom_list), &iter, path);
24 gtk_tree_path_free(path);
25
26 if (test)
27 while(gtk_list_store_remove(atom_list, &iter));
28 }
29
30 #ifdef EBUG
31 printf("ALL atoms removed from list!\n"); fflush(stdout);
32 #endif
33 }
34
insert_atom_into_list(int iat)35 void insert_atom_into_list(int iat)
36 {
37 GtkTreeIter iter;
38 gtk_list_store_append(atom_list, &iter);
39 gtk_list_store_set(atom_list, &iter,
40 COLUMN_NUMBER, iat+1,
41 COLUMN_ATNAME, m->elem[iat].name,
42 COLUMN_X, m->xyz[iat][0],
43 COLUMN_Y, m->xyz[iat][1],
44 COLUMN_Z, m->xyz[iat][2],
45 COLUMN_NUMER, m->additional_numeration[iat],
46 COLUMN_NAME, m->name[iat],
47 -1);
48 }
49
insert_all_atoms_into_list(void)50 void insert_all_atoms_into_list(void)
51 {
52 int i;
53 GtkTreeIter iter;
54
55 for (i = 0; i < m->natom; i++)
56 {
57 gtk_list_store_append(atom_list, &iter);
58 gtk_list_store_set(atom_list, &iter,
59 COLUMN_NUMBER, i+1,
60 COLUMN_ATNAME, m->elem[i].name,
61 COLUMN_X, m->xyz[i][0],
62 COLUMN_Y, m->xyz[i][1],
63 COLUMN_Z, m->xyz[i][2],
64 COLUMN_NUMER, m->additional_numeration[i],
65 COLUMN_NAME, m->name[i],
66 -1);
67 }
68 }
69
remove_atom_from_list(int iat)70 void remove_atom_from_list(int iat)
71 {
72 int i;
73 /* int iiat =iat;*/
74 GtkTreeIter iter;
75 GtkTreePath *path;
76 gboolean test;
77 #ifdef EBUG
78 gchar *tmp;
79 #endif
80
81 /*find path from atom number*/
82 path = gtk_tree_path_new_from_indices(iat, -1);
83 test = gtk_tree_model_get_iter(GTK_TREE_MODEL(atom_list), &iter, path);
84
85 #ifdef SMECE
86 /*move iter to the begining of the list*/
87 gtk_tree_model_get_iter_first(GTK_TREE_MODEL(atom_list), &iter);
88 #ifdef EBUG
89 if (! gtk_list_store_iter_is_valid(atom_list, &iter))
90 {
91 printf("ERROR: starting iter is invalid!\n");
92 }
93 #endif
94 /*move iter down the list iat times*/
95 for(i = 0; i < iat; i++)
96 {
97 #ifdef EBUG
98 gtk_tree_model_get(GTK_TREE_MODEL(atom_list), &iter, COLUMN_ATNAME, &tmp, -1);
99 printf("listing atom: |%s|\n", tmp);
100 #endif
101 test = gtk_tree_model_iter_next(GTK_TREE_MODEL(atom_list), &iter);
102 if (!test) break;
103 }
104 #endif
105
106 /*remove list element pointed by iter*/
107 if (test)
108 test = gtk_list_store_remove(atom_list, &iter);
109
110 #ifdef EBUG
111 printf("Removing atom #%d from the list!\n", iat); fflush(stdout);
112 #endif
113
114 if (test)
115 {
116 gtk_list_store_set(atom_list, &iter, COLUMN_NUMBER, (iat++)+1, -1);
117 /*change indices of all atoms after iat*/
118 while(gtk_tree_model_iter_next(GTK_TREE_MODEL(atom_list), &iter))
119 gtk_list_store_set(atom_list, &iter, COLUMN_NUMBER, (iat++)+1, -1);
120
121 /*make something with NUMER and NAME*/
122 }
123
124 }
125
change_atom_parameters_in_list(int iat)126 void change_atom_parameters_in_list(int iat)
127 {
128 int i;
129 GtkTreeIter iter;
130 gboolean test = FALSE;
131
132 /*move iter to the begining of the list*/
133 gtk_tree_model_get_iter_first(GTK_TREE_MODEL(atom_list), &iter);
134
135 for(i = 0; i < iat; i++)
136 {
137 test = gtk_tree_model_iter_next(GTK_TREE_MODEL(atom_list), &iter);
138 if (!test) break;
139 }
140
141 if (test)
142 gtk_list_store_set(atom_list, &iter,
143 COLUMN_NUMBER, iat+1,
144 COLUMN_ATNAME, m->elem[i].name,
145 COLUMN_X, m->xyz[i][0],
146 COLUMN_Y, m->xyz[i][1],
147 COLUMN_Z, m->xyz[i][2],
148 COLUMN_NUMER, m->additional_numeration[i],
149 COLUMN_NAME, m->name[i],
150 -1);
151 }
152
153