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