1 /* AtomsProp.c */
2 /**********************************************************************************************************
3 Copyright (c) 2002-2013 Abdul-Rahman Allouche. All rights reserved
4
5 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
6 documentation files (the Gabedit), to deal in the Software without restriction, including without limitation
7 the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
8 and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
9
10 The above copyright notice and this permission notice shall be included in all copies or substantial portions
11 of the Software.
12
13 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
14 TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
15 THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
16 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
17 DEALINGS IN THE SOFTWARE.
18 ************************************************************************************************************/
19
20
21 #include "../../Config.h"
22 #include <gtk/gtk.h>
23 #include <gdk/gdk.h>
24 #include <string.h>
25 #include <stdlib.h>
26 #include <stdio.h>
27 #include <ctype.h>
28 #include <math.h>
29 #include "../Common/Global.h"
30 #include "../Utils/Constants.h"
31 #include "../Utils/AtomsProp.h"
32 #include "../Utils/UtilsInterface.h"
33 #include "../Geometry/Fragments.h"
34 #include "../Geometry/DrawGeom.h"
35 #include "../Utils/Utils.h"
36 #include "../Geometry/GeomGlobal.h"
37 #include "../Display/GLArea.h"
38 #include "../Common/Windows.h"
39
40 #define NATOMS 112
41
42 enum
43 {
44 DISPLAY_RADII = 0,
45 COVALENT_RADII,
46 VANDERWALS_RADII,
47 MAXIMUM_BOND_VALENCE,
48 MASSE,
49 ELECTRONEGATIVITY,
50 NUMBER_OF_ENTRYS,
51 };
52 /******************************************************************/
53 typedef struct _SData
54 {
55 gchar *Symb;
56 GtkWidget *Window;
57 GtkWidget *Button;
58 GtkStyle *Style;
59 }SData;
60 /******************************************************************/
61 static SAtomsProp AtomsProp[NATOMS];
62 static GtkWidget *EntryProp[NUMBER_OF_ENTRYS];
63 static GtkWidget *listIsotopes = NULL;
64 GdkColor ColorTemp;
65 /********************************************************************************/
save_atoms_prop()66 void save_atoms_prop()
67 {
68 guint i;
69 guint j;
70 gchar *atomspropfile;
71 FILE *fd;
72
73 atomspropfile = g_strdup_printf("%s/atomsprop",gabedit_directory());
74 fd = FOpen(atomspropfile, "w");
75
76 if(fd==NULL)
77 return;
78
79 for(i=0;i<NATOMS;i++)
80 {
81 fprintf(fd,"%s %s %d %f %f %f %f %d %f %f %d %d %d %d\n",
82 AtomsProp[i].name,
83 AtomsProp[i].symbol,
84 AtomsProp[i].atomicNumber,
85 AtomsProp[i].covalentRadii,
86 AtomsProp[i].bondOrderRadii,
87 AtomsProp[i].vanDerWaalsRadii,
88 AtomsProp[i].radii,
89 AtomsProp[i].maximumBondValence,
90 AtomsProp[i].masse,
91 AtomsProp[i].electronegativity,
92 AtomsProp[i].color.red,
93 AtomsProp[i].color.green,
94 AtomsProp[i].color.blue,
95 AtomsProp[i].nIsotopes
96 );
97 for(j=0;j<AtomsProp[i].nIsotopes;j++)
98 fprintf(fd,"%d %f %f\n", AtomsProp[i].iMass[j], AtomsProp[i].rMass[j], AtomsProp[i].abundances[j]);
99 }
100 fclose(fd);
101 }
102 /********************************************************************************/
read_atoms_prop()103 gboolean read_atoms_prop()
104 {
105
106 gint i;
107 gint j;
108 gchar *t;
109 guint taille=BSIZE;
110 gboolean OK=TRUE;
111 gchar *atomspropfile;
112 FILE *fd;
113
114 atomspropfile = g_strdup_printf("%s/atomsprop",gabedit_directory());
115 fd = FOpen(atomspropfile, "rb");
116
117 t=g_malloc(taille);
118
119 i=-1;
120 if(fd!=NULL)
121 {
122 while(!feof(fd) && (i<NATOMS-1))
123 {
124 i++;
125 if(!feof(fd)) { char* e = fgets(t,taille,fd);}
126 AtomsProp[i].name= g_malloc(30);
127 AtomsProp[i].symbol= g_malloc(3);
128 sscanf(t,"%s %s %d %lf %lf %lf %lf %d %lf %lf %hu %hu %hu %d",
129 AtomsProp[i].name,
130 AtomsProp[i].symbol,
131 &AtomsProp[i].atomicNumber,
132 &AtomsProp[i].covalentRadii,
133 &AtomsProp[i].bondOrderRadii,
134 &AtomsProp[i].vanDerWaalsRadii,
135 &AtomsProp[i].radii,
136 &AtomsProp[i].maximumBondValence,
137 &AtomsProp[i].masse,
138 &AtomsProp[i].electronegativity,
139 &AtomsProp[i].color.red,
140 &AtomsProp[i].color.green,
141 &AtomsProp[i].color.blue,
142 &AtomsProp[i].nIsotopes
143 );
144 for(j=0;j<AtomsProp[i].nIsotopes;j++)
145 {
146 if(!feof(fd)) { char* e = fgets(t,taille,fd);}
147 sscanf(t,"%d %lf %lf", &AtomsProp[i].iMass[j], &AtomsProp[i].rMass[j], &AtomsProp[i].abundances[j]);
148 }
149 }
150 }
151 else
152 OK = FALSE;
153 g_free(t);
154 return OK;
155 }
156 /********************************************************************************/
get_masse_from_symbol(gchar * symbol)157 gdouble get_masse_from_symbol(gchar* symbol)
158 {
159 guint i;
160 for(i=0;i<NATOMS;i++)
161 {
162 if (!strcmp(symbol,AtomsProp[i].symbol))
163 return AtomsProp[i].masse;
164 }
165 return 1.0;
166 }
167 /******************************************************************/
get_atomic_number_from_symbol(gchar * symbol)168 gdouble get_atomic_number_from_symbol(gchar* symbol)
169 {
170 guint i;
171 static gchar symb[5];
172 gint l;
173
174 if(!symbol) return 0.0;
175 l = strlen(symbol);
176 symb[0] = toupper(symbol[0]);
177 if(l>1) symb[1]=tolower(symbol[1]);
178 if(l>2) symb[2]=tolower(symbol[1]);
179 symb[l] = '\0';
180
181 for(i=0;i<NATOMS;i++)
182 {
183 if (!strcmp(symb,AtomsProp[i].symbol))
184 {
185 return AtomsProp[i].atomicNumber;
186 }
187 }
188 return -1.0;
189 }
190 /********************************************************************************/
get_symbol_using_z(gint z)191 gchar* get_symbol_using_z(gint z)
192 {
193 guint i;
194
195 if(z<0) return g_strdup("Tv"); /* for gaussian output file */
196 for(i=0;i<NATOMS;i++)
197 {
198 if(z == (gint)AtomsProp[i].atomicNumber)
199 {
200 return g_strdup(AtomsProp[i].symbol);
201 }
202 }
203 return g_strdup("X");
204 }
205 /********************************************************************************/
test_atom_define(gchar * Symb)206 gboolean test_atom_define(gchar *Symb)
207 {
208 guint i;
209
210 for(i=0;i<NATOMS;i++)
211 {
212 if (!strcmp(Symb,AtomsProp[i].symbol))
213 {
214 return TRUE;
215 }
216
217 }
218 return FALSE;
219 }
220 /********************************************************************************/
prop_atom_free(SAtomsProp * prop)221 void prop_atom_free(SAtomsProp* prop)
222 {
223 if(prop->name) g_free(prop->name);
224 if(prop->symbol) g_free(prop->symbol);
225 }
226 /********************************************************************************/
prop_atom_get(const gchar * Symb)227 SAtomsProp prop_atom_get(const gchar *Symb)
228 {
229 guint i;
230 guint j;
231 SAtomsProp temp;
232
233 for(i=0;i<NATOMS;i++)
234 {
235 if (!strcmp(Symb,AtomsProp[i].symbol))
236 {
237 temp.name = g_strdup(AtomsProp[i].name);
238 temp.symbol = g_strdup(AtomsProp[i].symbol);
239 temp.atomicNumber = AtomsProp[i].atomicNumber;
240 temp.covalentRadii = AtomsProp[i].covalentRadii;
241 temp.bondOrderRadii = AtomsProp[i].bondOrderRadii;
242 temp.vanDerWaalsRadii = AtomsProp[i].vanDerWaalsRadii;
243 temp.radii = AtomsProp[i].radii;
244 temp.maximumBondValence = AtomsProp[i].maximumBondValence;
245 temp.masse = AtomsProp[i].masse;
246 temp.electronegativity = AtomsProp[i].electronegativity;
247 temp.color = AtomsProp[i].color;
248 temp.nIsotopes = AtomsProp[i].nIsotopes;
249 for(j=0;j<temp.nIsotopes;j++) temp.iMass[j] = AtomsProp[i].iMass[j];
250 for(j=0;j<temp.nIsotopes;j++) temp.rMass[j] = AtomsProp[i].rMass[j];
251 for(j=0;j<temp.nIsotopes;j++) temp.abundances[j] = AtomsProp[i].abundances[j];
252
253 return temp;
254 }
255
256 }
257 printf(_("Warning : Sorry , Your atom %s is not defined\n"),Symb);
258 i=0;
259 temp.name = g_strdup(AtomsProp[i].name);
260 temp.symbol = g_strdup(AtomsProp[i].symbol);
261 temp.atomicNumber = AtomsProp[i].atomicNumber;
262 temp.covalentRadii = AtomsProp[i].covalentRadii;
263 temp.bondOrderRadii = AtomsProp[i].bondOrderRadii;
264 temp.vanDerWaalsRadii = AtomsProp[i].vanDerWaalsRadii;
265 temp.maximumBondValence = AtomsProp[i].maximumBondValence;
266 temp.radii = AtomsProp[i].radii;
267 temp.masse = AtomsProp[i].masse;
268 temp.electronegativity = AtomsProp[i].electronegativity;
269 temp.color = AtomsProp[i].color;
270 temp.nIsotopes = AtomsProp[i].nIsotopes;
271 for(j=0;j<temp.nIsotopes;j++) temp.iMass[j] = AtomsProp[i].iMass[j];
272 for(j=0;j<temp.nIsotopes;j++) temp.rMass[j] = AtomsProp[i].rMass[j];
273 for(j=0;j<temp.nIsotopes;j++) temp.abundances[j] = AtomsProp[i].abundances[j];
274 return temp;
275 }
276 /******************************************************************/
symb_atom_get(gint Z)277 gchar *symb_atom_get(gint Z)
278 {
279 guint i;
280 gchar *symb;
281
282 if(Z<0) return g_strdup("Tv"); /* for gaussian output file */
283 symb = g_strdup("X");
284
285 for(i=0;i<NATOMS;i++)
286 {
287 if (Z==AtomsProp[i].atomicNumber)
288 {
289 symb =g_strdup(AtomsProp[i].symbol);
290 break;
291 }
292
293 }
294 return symb;
295 }
296 /******************************************************************/
set_color_atom(GdkColor color,gchar * Symb)297 void set_color_atom(GdkColor color,gchar *Symb)
298 {
299 guint i;
300 for (i=0;i<NATOMS;i++)
301 {
302 if (!strcmp(Symb,AtomsProp[i].symbol))
303 {
304 AtomsProp[i].color=color;
305 return;
306 }
307 }
308 }
309 /******************************************************************/
addIsotopeToAtom(gchar * symbol,gint atomicNumber,gint iMass,gdouble rMass,gdouble abundance)310 void addIsotopeToAtom(gchar* symbol, gint atomicNumber, gint iMass, gdouble rMass, gdouble abundance)
311 {
312 gint i = (gint)atomicNumber-1;
313 gint j = 0;
314 if(i>=NATOMS) return;
315 if(i<0) return;
316 if(strcmp(symbol,"Xx")==0) return;
317 if(strcmp(symbol,"X")==0) return;
318 if(i>=109) return;
319 if(AtomsProp[i].nIsotopes>= MAXISOTOP) return;
320
321 j = AtomsProp[i].nIsotopes;
322 AtomsProp[i].nIsotopes++;
323 AtomsProp[i].iMass[j] = iMass;
324 AtomsProp[i].rMass[j] = rMass;
325 AtomsProp[i].abundances[j] = abundance;
326 if(j==0) AtomsProp[i].masse = rMass;
327 }
328 /******************************************************************/
setPropForOneAtom(gchar * name,gchar * symbol,gint atomicNumber,gdouble covalentRadii,gdouble bondOrderRadii,gdouble vanDerWaalsRadii,gint maximumBondValence,gdouble masse,gdouble electronegativity,gdouble red,gdouble green,gdouble blue)329 void setPropForOneAtom(gchar* name, gchar* symbol, gint atomicNumber,
330 gdouble covalentRadii, gdouble bondOrderRadii, gdouble vanDerWaalsRadii,
331 gint maximumBondValence, gdouble masse, gdouble electronegativity, gdouble red, gdouble green, gdouble blue)
332 {
333 gint i = (gint)atomicNumber-1;
334 if(strcmp(symbol,"Xx")==0) i = 109;
335 if(strcmp(symbol,"X")==0) i = 110;
336
337 AtomsProp[i].name = g_strdup(name);
338 AtomsProp[i].symbol = g_strdup(symbol);
339 AtomsProp[i].atomicNumber = atomicNumber;
340 AtomsProp[i].covalentRadii = (covalentRadii+0.2)*ANG_TO_BOHR;
341 AtomsProp[i].bondOrderRadii = bondOrderRadii*ANG_TO_BOHR;
342 AtomsProp[i].vanDerWaalsRadii = vanDerWaalsRadii*ANG_TO_BOHR;
343 /*AtomsProp[i].radii = covalentRadii/1.5*ANG_TO_BOHR;*/
344 AtomsProp[i].radii = vanDerWaalsRadii*0.2*ANG_TO_BOHR;
345 AtomsProp[i].maximumBondValence = maximumBondValence;
346 AtomsProp[i].masse = masse;
347 AtomsProp[i].electronegativity = electronegativity/27.21;
348 AtomsProp[i].color.red = (gushort)(red*65535);
349 AtomsProp[i].color.green = (gushort)(green*65535);
350 AtomsProp[i].color.blue = (gushort)(blue*65535);
351 AtomsProp[i].nIsotopes = 0;
352 }
353 /******************************************************************/
define_default_atoms_prop()354 void define_default_atoms_prop()
355 {
356 setPropForOneAtom("Hydrogen", "H", 1, 0.230000, 0.330000, 1.200000, 1, 1.007940, 2.100000, 1.000000, 1.000000, 1.000000);
357 setPropForOneAtom("Helium", "He", 2, 0.930000, 0.700000, 1.400000, 0, 4.002602, 0.000000, 0.850000, 1.000000, 1.000000);
358 setPropForOneAtom("Lithium", "Li", 3, 0.680000, 1.230000, 1.820000, 1, 6.941000, 0.980000, 0.800000, 0.500000, 1.000000);
359 setPropForOneAtom("Beryllium", "Be", 4, 0.350000, 0.900000, 1.700000, 2, 9.012182, 1.570000, 0.760000, 1.000000, 0.000000);
360 setPropForOneAtom("Boron", "B", 5, 0.830000, 0.820000, 2.080000, 3, 10.811000, 2.040000, 1.000000, 0.710000, 0.710000);
361 setPropForOneAtom("Carbon", "C", 6, 0.680000, 0.770000, 1.950000, 4, 12.010700, 2.550000, 0.500000, 0.500000, 0.500000);
362 setPropForOneAtom("Nitrogen", "N", 7, 0.680000, 0.700000, 1.850000, 3, 14.006700, 3.040000, 0.050000, 0.050000, 1.000000);
363 setPropForOneAtom("Oxygen", "O", 8, 0.680000, 0.660000, 1.700000, 2, 15.999400, 3.440000, 1.000000, 0.050000, 0.050000);
364 setPropForOneAtom("Fluorine", "F", 9, 0.640000, 0.611000, 1.730000, 1, 18.998404, 3.980000, 0.700000, 1.000000, 1.000000);
365 setPropForOneAtom("Neon", "Ne", 10, 1.120000, 0.700000, 1.540000, 0, 20.179701, 0.000000, 0.700000, 0.890000, 0.960000);
366 /*
367 setPropForOneAtom("Sodium", "Na", 11, 0.970000, 1.540000, 2.270000, 1, 22.989771, 0.930000, 0.670000, 0.360000, 0.950000);
368 */
369 setPropForOneAtom("Sodium", "Na", 11, 1.9, 3.06, 2.270000, 1, 22.989771, 0.930000, 0.670000, 0.360000, 0.950000);
370 AtomsProp[10].radii /= 2;
371
372 setPropForOneAtom("Magnesium", "Mg", 12, 1.100000, 1.360000, 1.730000, 2, 24.305000, 1.310000, 0.540000, 1.000000, 0.000000);
373 setPropForOneAtom("Aluminium", "Al", 13, 1.350000, 1.180000, 2.050000, 6, 26.981539, 1.610000, 0.750000, 0.650000, 0.650000);
374 setPropForOneAtom("Silicon", "Si", 14, 1.200000, 0.937000, 2.100000, 6, 28.085501, 1.900000, 0.500000, 0.600000, 0.600000);
375 setPropForOneAtom("Phosphorus", "P", 15, 1.100000, 0.890000, 2.080000, 5, 30.973761, 2.190000, 1.000000, 0.500000, 0.000000);
376 setPropForOneAtom("Sulphur", "S", 16, 1.020000, 1.040000, 2.000000, 4, 32.064999, 2.580000, 1.000000, 1.000000, 0.190000);
377 setPropForOneAtom("Chlorine", "Cl", 17, 0.990000, 0.997000, 1.970000, 1, 35.452999, 3.160000, 0.120000, 0.940000, 0.120000);
378 setPropForOneAtom("Argon", "Ar", 18, 1.570000, 1.740000, 1.880000, 0, 39.948002, 0.000000, 0.500000, 0.820000, 0.890000);
379 setPropForOneAtom("Potassium", "K", 19, 1.330000, 2.030000, 2.750000, 1, 39.098301, 0.820000, 0.560000, 0.250000, 0.830000);
380 setPropForOneAtom("Calcium", "Ca", 20, 0.990000, 1.740000, 1.973000, 2, 40.077999, 1.000000, 0.240000, 1.000000, 0.000000);
381 setPropForOneAtom("Scandium", "Sc", 21, 1.440000, 1.440000, 1.700000, 6, 44.955910, 1.360000, 0.900000, 0.900000, 0.900000);
382 setPropForOneAtom("Titanium", "Ti", 22, 1.470000, 1.320000, 1.700000, 6, 47.867001, 1.540000, 0.750000, 0.760000, 0.780000);
383 setPropForOneAtom("Vanadium", "V", 23, 1.330000, 1.220000, 1.700000, 6, 50.941502, 1.630000, 0.650000, 0.650000, 0.670000);
384 setPropForOneAtom("Chromium", "Cr", 24, 1.350000, 1.180000, 1.700000, 6, 51.996101, 1.660000, 0.540000, 0.600000, 0.780000);
385 setPropForOneAtom("Manganese", "Mn", 25, 1.350000, 1.170000, 1.700000, 8, 54.938049, 1.550000, 0.610000, 0.480000, 0.780000);
386 setPropForOneAtom("Iron", "Fe", 26, 1.340000, 1.170000, 1.700000, 6, 55.845001, 1.830000, 0.500000, 0.480000, 0.780000);
387 setPropForOneAtom("Cobalt", "Co", 27, 1.330000, 1.160000, 1.700000, 6, 58.933201, 1.880000, 0.440000, 0.480000, 0.780000);
388 setPropForOneAtom("Nickel", "Ni", 28, 1.500000, 1.150000, 1.630000, 6, 58.693401, 1.910000, 0.360000, 0.480000, 0.760000);
389 setPropForOneAtom("Copper", "Cu", 29, 1.520000, 1.170000, 1.400000, 6, 63.546001, 1.900000, 1.000000, 0.480000, 0.380000);
390 setPropForOneAtom("Zinc", "Zn", 30, 1.450000, 1.250000, 1.390000, 6, 65.408997, 1.650000, 0.490000, 0.500000, 0.690000);
391 setPropForOneAtom("Gallium", "Ga", 31, 1.220000, 1.260000, 1.870000, 3, 69.723000, 1.810000, 0.760000, 0.560000, 0.560000);
392 setPropForOneAtom("Germanium", "Ge", 32, 1.170000, 1.188000, 1.700000, 4, 72.639999, 2.010000, 0.400000, 0.560000, 0.560000);
393 setPropForOneAtom("Arsenic", "As", 33, 1.210000, 1.200000, 1.850000, 3, 74.921600, 2.180000, 0.740000, 0.500000, 0.890000);
394 setPropForOneAtom("Selenium", "Se", 34, 1.220000, 1.170000, 1.900000, 2, 78.959999, 2.550000, 1.000000, 0.630000, 0.000000);
395 setPropForOneAtom("Bromine", "Br", 35, 1.210000, 1.167000, 2.100000, 1, 79.903999, 2.960000, 0.650000, 0.160000, 0.160000);
396 setPropForOneAtom("Krypton", "Kr", 36, 1.910000, 1.910000, 2.020000, 0, 83.797997, 0.000000, 0.360000, 0.720000, 0.820000);
397 setPropForOneAtom("Rubidium", "Rb", 37, 1.470000, 2.160000, 1.700000, 1, 85.467796, 0.820000, 0.440000, 0.180000, 0.690000);
398 setPropForOneAtom("Strontium", "Sr", 38, 1.120000, 1.910000, 1.700000, 2, 87.620003, 0.950000, 0.000000, 1.000000, 0.000000);
399 setPropForOneAtom("Yttrium", "Y", 39, 1.780000, 1.620000, 1.700000, 6, 88.905853, 1.220000, 0.580000, 1.000000, 1.000000);
400 setPropForOneAtom("Zirconium", "Zr", 40, 1.560000, 1.450000, 1.700000, 6, 91.223999, 1.330000, 0.580000, 0.880000, 0.880000);
401 setPropForOneAtom("Niobium", "Nb", 41, 1.480000, 1.340000, 1.700000, 6, 92.906380, 1.600000, 0.450000, 0.760000, 0.790000);
402 setPropForOneAtom("Molybdenum", "Mo", 42, 1.470000, 1.300000, 1.700000, 6, 95.940002, 2.160000, 0.330000, 0.710000, 0.710000);
403 setPropForOneAtom("Technetium", "Tc", 43, 1.350000, 1.270000, 1.700000, 6, 98.000000, 1.900000, 0.230000, 0.620000, 0.620000);
404 setPropForOneAtom("Ruthenium", "Ru", 44, 1.400000, 1.250000, 1.700000, 6, 101.070000, 2.200000, 0.140000, 0.560000, 0.560000);
405 setPropForOneAtom("Rhodium", "Rh", 45, 1.450000, 1.250000, 1.700000, 6, 102.905502, 2.280000, 0.040000, 0.490000, 0.550000);
406 setPropForOneAtom("Palladium", "Pd", 46, 1.500000, 1.280000, 1.630000, 6, 106.419998, 2.200000, 0.000000, 0.410000, 0.520000);
407 setPropForOneAtom("Silver", "Ag", 47, 1.590000, 1.340000, 1.720000, 6, 107.868202, 1.930000, 0.880000, 0.880000, 1.000000);
408 setPropForOneAtom("Cadmium", "Cd", 48, 1.690000, 1.480000, 1.580000, 6, 112.411003, 1.690000, 1.000000, 0.850000, 0.560000);
409 setPropForOneAtom("Indium", "In", 49, 1.630000, 1.440000, 1.930000, 3, 114.818001, 1.780000, 0.650000, 0.460000, 0.450000);
410 setPropForOneAtom("Tin", "Sn", 50, 1.460000, 1.385000, 2.170000, 4, 118.709999, 1.960000, 0.400000, 0.500000, 0.500000);
411 setPropForOneAtom("Antimony", "Sb", 51, 1.460000, 1.400000, 2.200000, 3, 121.760002, 2.050000, 0.620000, 0.390000, 0.710000);
412 setPropForOneAtom("Tellurium", "Te", 52, 1.470000, 1.378000, 2.060000, 2, 127.599998, 2.100000, 0.830000, 0.480000, 0.000000);
413 setPropForOneAtom("Iodine", "I", 53, 1.400000, 1.387000, 2.150000, 1, 126.904472, 2.660000, 0.580000, 0.000000, 0.580000);
414 setPropForOneAtom("Xenon", "Xe", 54, 1.980000, 1.980000, 2.160000, 0, 131.292999, 2.600000, 0.260000, 0.620000, 0.690000);
415 setPropForOneAtom("Cesium", "Cs", 55, 1.670000, 2.350000, 1.700000, 1, 132.905457, 0.790000, 0.340000, 0.090000, 0.560000);
416 setPropForOneAtom("Barium", "Ba", 56, 1.340000, 1.980000, 1.700000, 2, 137.326996, 0.890000, 0.000000, 0.790000, 0.000000);
417 setPropForOneAtom("Lanthanum", "La", 57, 1.870000, 1.690000, 1.700000, 12, 138.905502, 1.100000, 0.440000, 0.830000, 1.000000);
418 setPropForOneAtom("Cerium", "Ce", 58, 1.830000, 1.830000, 1.700000, 6, 140.115997, 1.120000, 1.000000, 1.000000, 0.780000);
419 setPropForOneAtom("Praseodymium", "Pr", 59, 1.820000, 1.820000, 1.700000, 6, 140.907654, 1.130000, 0.850000, 1.000000, 0.780000);
420 setPropForOneAtom("Neodymium", "Nd", 60, 1.810000, 1.810000, 1.700000, 6, 144.240005, 1.140000, 0.780000, 1.000000, 0.780000);
421 setPropForOneAtom("Promethium", "Pm", 61, 1.800000, 1.800000, 1.700000, 6, 145.000000, 1.130000, 0.640000, 1.000000, 0.780000);
422 setPropForOneAtom("Samarium", "Sm", 62, 1.800000, 1.800000, 1.700000, 6, 150.360001, 1.170000, 0.560000, 1.000000, 0.780000);
423 setPropForOneAtom("Europium", "Eu", 63, 1.990000, 1.990000, 1.700000, 6, 151.964005, 1.200000, 0.380000, 1.000000, 0.780000);
424 setPropForOneAtom("Gadolinium", "Gd", 64, 1.790000, 1.790000, 1.700000, 6, 157.250000, 1.200000, 0.270000, 1.000000, 0.780000);
425 setPropForOneAtom("Terbium", "Tb", 65, 1.760000, 1.760000, 1.700000, 6, 158.925339, 1.100000, 0.190000, 1.000000, 0.780000);
426 setPropForOneAtom("Dysprosium", "Dy", 66, 1.750000, 1.750000, 1.700000, 6, 162.500000, 1.220000, 0.120000, 1.000000, 0.780000);
427 setPropForOneAtom("Holmium", "Ho", 67, 1.740000, 1.740000, 1.700000, 6, 164.930313, 1.230000, 0.000000, 1.000000, 0.610000);
428 setPropForOneAtom("Erbium", "Er", 68, 1.730000, 1.730000, 1.700000, 6, 167.259003, 1.240000, 0.000000, 0.900000, 0.460000);
429 setPropForOneAtom("Thulium", "Tm", 69, 1.720000, 1.720000, 1.700000, 6, 168.934204, 1.250000, 0.000000, 0.830000, 0.320000);
430 setPropForOneAtom("Ytterbium", "Yb", 70, 1.940000, 1.940000, 1.700000, 6, 173.039993, 1.100000, 0.000000, 0.750000, 0.220000);
431 setPropForOneAtom("Lutetium", "Lu", 71, 1.720000, 1.720000, 1.700000, 6, 174.966995, 1.270000, 0.000000, 0.670000, 0.140000);
432 setPropForOneAtom("Hafnium", "Hf", 72, 1.570000, 1.440000, 1.700000, 6, 178.490005, 1.300000, 0.300000, 0.760000, 1.000000);
433 setPropForOneAtom("Tantalum", "Ta", 73, 1.430000, 1.340000, 1.700000, 6, 180.947906, 1.500000, 0.300000, 0.650000, 1.000000);
434 setPropForOneAtom("Tungsten", "W", 74, 1.370000, 1.300000, 1.700000, 6, 183.839996, 2.360000, 0.130000, 0.580000, 0.840000);
435 setPropForOneAtom("Rhenium", "Re", 75, 1.350000, 1.280000, 1.700000, 6, 186.207001, 1.900000, 0.150000, 0.490000, 0.670000);
436 setPropForOneAtom("Osmium", "Os", 76, 1.370000, 1.260000, 1.700000, 6, 190.229996, 2.200000, 0.150000, 0.400000, 0.590000);
437 setPropForOneAtom("Iridium", "Ir", 77, 1.320000, 1.270000, 1.700000, 6, 192.216995, 2.200000, 0.090000, 0.330000, 0.530000);
438 setPropForOneAtom("Platinum", "Pt", 78, 1.500000, 1.300000, 1.720000, 6, 195.078003, 2.280000, 0.960000, 0.930000, 0.820000);
439 setPropForOneAtom("Gold", "Au", 79, 1.500000, 1.340000, 1.660000, 6, 196.966553, 2.540000, 0.800000, 0.820000, 0.120000);
440 setPropForOneAtom("Mercury", "Hg", 80, 1.700000, 1.490000, 1.550000, 6, 200.589996, 2.000000, 0.710000, 0.710000, 0.760000);
441 setPropForOneAtom("Thallium", "Tl", 81, 1.550000, 1.480000, 1.960000, 3, 204.383301, 2.040000, 0.650000, 0.330000, 0.300000);
442 setPropForOneAtom("Lead", "Pb", 82, 1.540000, 1.480000, 2.020000, 4, 207.199997, 2.330000, 0.340000, 0.350000, 0.380000);
443 setPropForOneAtom("Bismuth", "Bi", 83, 1.540000, 1.450000, 1.700000, 3, 208.980377, 2.020000, 0.620000, 0.310000, 0.710000);
444 setPropForOneAtom("Polonium", "Po", 84, 1.680000, 1.460000, 1.700000, 2, 209.000000, 2.000000, 0.670000, 0.360000, 0.000000);
445 setPropForOneAtom("Astatine", "At", 85, 1.700000, 1.450000, 1.700000, 1, 210.000000, 2.200000, 0.460000, 0.310000, 0.270000);
446 setPropForOneAtom("Radon", "Rn", 86, 2.400000, 2.400000, 1.700000, 0, 222.000000, 0.000000, 0.260000, 0.510000, 0.590000);
447 setPropForOneAtom("Francium", "Fr", 87, 2.000000, 2.000000, 1.700000, 1, 223.000000, 0.700000, 0.260000, 0.000000, 0.400000);
448 setPropForOneAtom(" radium", "Ra", 88, 1.900000, 1.900000, 1.700000, 2, 226.000000, 0.890000, 0.000000, 0.490000, 0.000000);
449 setPropForOneAtom("Actinium", "Ac", 89, 1.880000, 1.880000, 1.700000, 6, 227.000000, 1.100000, 0.440000, 0.670000, 0.980000);
450 setPropForOneAtom("Thorium", "Th", 90, 1.790000, 1.790000, 1.700000, 6, 232.038101, 1.300000, 0.000000, 0.730000, 1.000000);
451 setPropForOneAtom("Protactinium", "Pa", 91, 1.610000, 1.610000, 1.700000, 6, 231.035873, 1.500000, 0.000000, 0.630000, 1.000000);
452 setPropForOneAtom("Uranium", "U", 92, 1.580000, 1.580000, 1.860000, 6, 238.028915, 1.380000, 0.000000, 0.560000, 1.000000);
453 setPropForOneAtom("Neptunium", "Np", 93, 1.550000, 1.550000, 1.700000, 6, 237.000000, 1.360000, 0.000000, 0.500000, 1.000000);
454 setPropForOneAtom("Plutionium", "Pu", 94, 1.530000, 1.530000, 1.700000, 6, 244.000000, 1.280000, 0.000000, 0.420000, 1.000000);
455 setPropForOneAtom("Americium", "Am", 95, 1.510000, 1.070000, 1.700000, 6, 243.000000, 1.300000, 0.330000, 0.360000, 0.950000);
456 setPropForOneAtom("Curium", "Cm", 96, 1.500000, 0.000000, 1.700000, 6, 247.000000, 1.300000, 0.470000, 0.360000, 0.890000);
457 setPropForOneAtom("Berkelium", "Bk", 97, 1.500000, 0.000000, 1.700000, 6, 247.000000, 1.300000, 0.540000, 0.310000, 0.890000);
458 setPropForOneAtom("Californium", "Cf", 98, 1.500000, 0.000000, 1.700000, 6, 251.000000, 1.300000, 0.630000, 0.210000, 0.830000);
459 setPropForOneAtom("Einsteinium", "Es", 99, 1.500000, 0.000000, 1.700000, 6, 252.000000, 1.300000, 0.700000, 0.120000, 0.830000);
460 setPropForOneAtom("Fermium", "Fm", 100, 1.500000, 0.000000, 1.700000, 6, 257.000000, 1.300000, 0.700000, 0.120000, 0.730000);
461 setPropForOneAtom("Mendelevium", "Md", 101, 1.500000, 0.000000, 1.700000, 6, 258.000000, 1.300000, 0.700000, 0.050000, 0.650000);
462 setPropForOneAtom("Nobelium", "No", 102, 1.500000, 0.000000, 1.700000, 6, 259.000000, 1.300000, 0.740000, 0.050000, 0.530000);
463 setPropForOneAtom("Lawrencium", "Lr", 103, 1.500000, 0.000000, 1.700000, 6, 262.000000, 1.300000, 0.780000, 0.000000, 0.400000);
464 setPropForOneAtom("Rutherfordium", "Rf", 104, 1.600000, 0.000000, 1.700000, 6, 261.000000, 0.000000, 0.800000, 0.000000, 0.350000);
465 setPropForOneAtom("Dubnium", "Db", 105, 1.600000, 0.000000, 1.700000, 6, 262.000000, 0.000000, 0.820000, 0.000000, 0.310000);
466 setPropForOneAtom("Seaborgium", "Sg", 106, 1.600000, 0.000000, 1.700000, 6, 263.000000, 0.000000, 0.850000, 0.000000, 0.270000);
467 setPropForOneAtom("Bohrium", "Bh", 107, 1.600000, 0.000000, 1.700000, 6, 264.000000, 0.000000, 0.880000, 0.000000, 0.220000);
468 setPropForOneAtom("Hassium", "Hs", 108, 1.600000, 0.000000, 1.700000, 6, 265.000000, 0.000000, 0.900000, 0.000000, 0.180000);
469 setPropForOneAtom("Meitnerium", "Mt", 109, 1.600000, 0.000000, 1.700000, 6, 268.000000, 0.000000, 0.920000, 0.000000, 0.150000);
470 setPropForOneAtom("Dummy", "Xx", 0, 0.000000, 0.000000, 0.000000, 0, 0.000000, 0.000000, 0.070000, 0.500000, 0.700000);
471 setPropForOneAtom("Dummy", "X", 0, 0.000000, 0.000000, 0.000000, 0, 0.000000, 0.000000, 0.070000, 0.500000, 0.700000);
472 setPropForOneAtom("Tv", "Tv", 112, 0.000000, 0.000000, 0.000000, 0, 1.000000, 0.000000, 0.070000, 0.500000, 0.700000);
473 addIsotopeToAtom("H", 1, 1, 1.007825032100, 99.98850000);
474 addIsotopeToAtom("H", 1, 2, 2.014101778000, 0.01150000);
475 addIsotopeToAtom("H", 1, 3, 3.016049267500, 0.00000000);
476 addIsotopeToAtom("He", 2, 4, 4.002603249700, 99.99986300);
477 addIsotopeToAtom("He", 2, 3, 3.016029309700, 0.00013700);
478 addIsotopeToAtom("Li", 3, 7, 7.016004000000, 92.41000000);
479 addIsotopeToAtom("Li", 3, 6, 6.015122300000, 7.59000000);
480 addIsotopeToAtom("Be", 4, 9, 9.012182100000, 100.00000000);
481 addIsotopeToAtom("B", 5, 11, 11.009305500000, 80.10000000);
482 addIsotopeToAtom("B", 5, 10, 10.012937000000, 19.90000000);
483 addIsotopeToAtom("C", 6, 12, 12.000000000000, 98.93000000);
484 addIsotopeToAtom("C", 6, 13, 13.003354837800, 1.07000000);
485 addIsotopeToAtom("C", 6, 14, 14.003241988000, 0.00000000);
486 addIsotopeToAtom("N", 7, 14, 14.003074005200, 99.63200000);
487 addIsotopeToAtom("N", 7, 15, 15.000108898400, 0.36800000);
488 addIsotopeToAtom("O", 8, 16, 15.994914622100, 99.75700000);
489 addIsotopeToAtom("O", 8, 18, 17.999160400000, 0.20500000);
490 addIsotopeToAtom("O", 8, 17, 16.999131500000, 0.03800000);
491 addIsotopeToAtom("F", 9, 19, 18.998403200000, 100.00000000);
492 addIsotopeToAtom("Ne", 10, 20, 19.992440175900, 90.48000000);
493 addIsotopeToAtom("Ne", 10, 22, 21.991385510000, 9.25000000);
494 addIsotopeToAtom("Ne", 10, 21, 20.993846740000, 0.27000000);
495 addIsotopeToAtom("Na", 11, 23, 22.989769670000, 100.00000000);
496 addIsotopeToAtom("Mg", 12, 24, 23.985041900000, 78.99000000);
497 addIsotopeToAtom("Mg", 12, 26, 25.982593040000, 11.01000000);
498 addIsotopeToAtom("Mg", 12, 25, 24.985837020000, 10.00000000);
499 addIsotopeToAtom("Al", 13, 27, 26.981538440000, 100.00000000);
500 addIsotopeToAtom("Si", 14, 28, 27.976926532700, 92.22970000);
501 addIsotopeToAtom("Si", 14, 29, 28.976494720000, 4.68320000);
502 addIsotopeToAtom("Si", 14, 30, 29.973770220000, 3.08720000);
503 addIsotopeToAtom("P", 15, 31, 30.973761510000, 100.00000000);
504 addIsotopeToAtom("S", 16, 32, 31.972070690000, 94.93000000);
505 addIsotopeToAtom("S", 16, 34, 33.967866830000, 4.29000000);
506 addIsotopeToAtom("S", 16, 33, 32.971458500000, 0.76000000);
507 addIsotopeToAtom("S", 16, 36, 35.967080880000, 0.02000000);
508 addIsotopeToAtom("Cl", 17, 35, 34.968852710000, 75.78000000);
509 addIsotopeToAtom("Cl", 17, 37, 36.965902600000, 24.22000000);
510 addIsotopeToAtom("Ar", 18, 40, 39.962383123000, 99.60030000);
511 addIsotopeToAtom("Ar", 18, 36, 35.967546280000, 0.33650000);
512 addIsotopeToAtom("Ar", 18, 38, 37.962732200000, 0.06320000);
513 addIsotopeToAtom("K", 19, 39, 38.963706900000, 93.25810000);
514 addIsotopeToAtom("K", 19, 41, 40.961825970000, 6.73020000);
515 addIsotopeToAtom("K", 19, 40, 39.963998670000, 0.01170000);
516 addIsotopeToAtom("Ca", 20, 40, 39.962591200000, 96.94100000);
517 addIsotopeToAtom("Ca", 20, 44, 43.955481100000, 2.08600000);
518 addIsotopeToAtom("Ca", 20, 42, 41.958618300000, 0.64700000);
519 addIsotopeToAtom("Ca", 20, 48, 47.952534000000, 0.18700000);
520 addIsotopeToAtom("Ca", 20, 43, 42.958766800000, 0.13500000);
521 addIsotopeToAtom("Ca", 20, 46, 45.953692800000, 0.00400000);
522 addIsotopeToAtom("Sc", 21, 45, 44.955910200000, 100.00000000);
523 addIsotopeToAtom("Ti", 22, 48, 47.947947100000, 73.72000000);
524 addIsotopeToAtom("Ti", 22, 46, 45.952629500000, 8.25000000);
525 addIsotopeToAtom("Ti", 22, 47, 46.951763800000, 7.44000000);
526 addIsotopeToAtom("Ti", 22, 49, 48.947870800000, 5.41000000);
527 addIsotopeToAtom("Ti", 22, 50, 49.944792100000, 5.18000000);
528 addIsotopeToAtom("V", 23, 51, 50.943963700000, 99.75000000);
529 addIsotopeToAtom("V", 23, 50, 49.947162800000, 0.25000000);
530 addIsotopeToAtom("Cr", 24, 52, 51.940511900000, 83.78900000);
531 addIsotopeToAtom("Cr", 24, 53, 52.940653800000, 9.50100000);
532 addIsotopeToAtom("Cr", 24, 50, 49.946049600000, 4.34500000);
533 addIsotopeToAtom("Cr", 24, 54, 53.938884900000, 2.36500000);
534 addIsotopeToAtom("Mn", 25, 55, 54.938049600000, 100.00000000);
535 addIsotopeToAtom("Fe", 26, 56, 55.934942100000, 91.75400000);
536 addIsotopeToAtom("Fe", 26, 54, 53.939614800000, 5.84500000);
537 addIsotopeToAtom("Fe", 26, 57, 56.935398700000, 2.11900000);
538 addIsotopeToAtom("Fe", 26, 58, 57.933280500000, 0.28200000);
539 addIsotopeToAtom("Co", 27, 59, 58.933200200000, 100.00000000);
540 addIsotopeToAtom("Ni", 28, 58, 57.935347900000, 68.07690000);
541 addIsotopeToAtom("Ni", 28, 60, 59.930790600000, 26.22310000);
542 addIsotopeToAtom("Ni", 28, 62, 61.928348800000, 3.63450000);
543 addIsotopeToAtom("Ni", 28, 61, 60.931060400000, 1.13990000);
544 addIsotopeToAtom("Ni", 28, 64, 63.927969600000, 0.92560000);
545 addIsotopeToAtom("Cu", 29, 63, 62.929601100000, 69.17000000);
546 addIsotopeToAtom("Cu", 29, 65, 64.927793700000, 30.83000000);
547 addIsotopeToAtom("Zn", 30, 64, 63.929146600000, 48.63000000);
548 addIsotopeToAtom("Zn", 30, 66, 65.926036800000, 27.90000000);
549 addIsotopeToAtom("Zn", 30, 68, 67.924847600000, 18.75000000);
550 addIsotopeToAtom("Zn", 30, 67, 66.927130900000, 4.10000000);
551 addIsotopeToAtom("Zn", 30, 70, 69.925325000000, 0.62000000);
552 addIsotopeToAtom("Ga", 31, 69, 68.925581000000, 60.10800000);
553 addIsotopeToAtom("Ga", 31, 71, 70.924705000000, 39.89200000);
554 addIsotopeToAtom("Ge", 32, 74, 73.921178200000, 36.28000000);
555 addIsotopeToAtom("Ge", 32, 72, 71.922076200000, 27.54000000);
556 addIsotopeToAtom("Ge", 32, 70, 69.924250400000, 20.84000000);
557 addIsotopeToAtom("Ge", 32, 73, 72.923459400000, 7.73000000);
558 addIsotopeToAtom("Ge", 32, 76, 75.921402700000, 7.61000000);
559 addIsotopeToAtom("As", 33, 75, 74.921596400000, 100.00000000);
560 addIsotopeToAtom("Se", 34, 80, 79.916521800000, 49.61000000);
561 addIsotopeToAtom("Se", 34, 78, 77.917309500000, 23.77000000);
562 addIsotopeToAtom("Se", 34, 76, 75.919214100000, 9.37000000);
563 addIsotopeToAtom("Se", 34, 82, 81.916700000000, 8.73000000);
564 addIsotopeToAtom("Se", 34, 77, 76.919914600000, 7.63000000);
565 addIsotopeToAtom("Se", 34, 74, 73.922476600000, 0.89000000);
566 addIsotopeToAtom("Br", 35, 79, 78.918337600000, 50.69000000);
567 addIsotopeToAtom("Br", 35, 81, 80.916291000000, 49.31000000);
568 addIsotopeToAtom("Kr", 36, 84, 83.911507000000, 57.00000000);
569 addIsotopeToAtom("Kr", 36, 86, 85.910610300000, 17.30000000);
570 addIsotopeToAtom("Kr", 36, 82, 81.913484600000, 11.58000000);
571 addIsotopeToAtom("Kr", 36, 83, 82.914136000000, 11.49000000);
572 addIsotopeToAtom("Kr", 36, 80, 79.916378000000, 2.28000000);
573 addIsotopeToAtom("Kr", 36, 78, 77.920386000000, 0.35000000);
574 addIsotopeToAtom("Rb", 37, 85, 84.911789300000, 72.17000000);
575 addIsotopeToAtom("Rb", 37, 87, 86.909183500000, 27.83000000);
576 addIsotopeToAtom("Sr", 38, 88, 87.905614300000, 82.58000000);
577 addIsotopeToAtom("Sr", 38, 86, 85.909262400000, 9.86000000);
578 addIsotopeToAtom("Sr", 38, 87, 86.908879300000, 7.00000000);
579 addIsotopeToAtom("Sr", 38, 84, 83.913425000000, 0.56000000);
580 addIsotopeToAtom("Y", 39, 89, 88.905847900000, 100.00000000);
581 addIsotopeToAtom("Zr", 40, 90, 89.904703700000, 51.45000000);
582 addIsotopeToAtom("Zr", 40, 94, 93.906315800000, 17.38000000);
583 addIsotopeToAtom("Zr", 40, 92, 91.905040100000, 17.15000000);
584 addIsotopeToAtom("Zr", 40, 91, 90.905645000000, 11.22000000);
585 addIsotopeToAtom("Zr", 40, 96, 95.908276000000, 2.80000000);
586 addIsotopeToAtom("Nb", 41, 93, 92.906377500000, 100.00000000);
587 addIsotopeToAtom("Mo", 42, 98, 97.905407800000, 24.13000000);
588 addIsotopeToAtom("Mo", 42, 96, 95.904678900000, 16.68000000);
589 addIsotopeToAtom("Mo", 42, 95, 94.905841500000, 15.92000000);
590 addIsotopeToAtom("Mo", 42, 92, 91.906810000000, 14.84000000);
591 addIsotopeToAtom("Mo", 42, 100, 99.907477000000, 9.63000000);
592 addIsotopeToAtom("Mo", 42, 97, 96.906021000000, 9.55000000);
593 addIsotopeToAtom("Mo", 42, 94, 93.905087600000, 9.25000000);
594 addIsotopeToAtom("Tc", 43, 97, 96.906365000000, 33.33333333);
595 addIsotopeToAtom("Tc", 43, 98, 97.907216000000, 33.33333333);
596 addIsotopeToAtom("Tc", 43, 99, 98.906254600000, 33.33333333);
597 addIsotopeToAtom("Ru", 44, 102, 101.904349500000, 31.55000000);
598 addIsotopeToAtom("Ru", 44, 104, 103.905430000000, 18.62000000);
599 addIsotopeToAtom("Ru", 44, 101, 100.905582200000, 17.06000000);
600 addIsotopeToAtom("Ru", 44, 99, 98.905939300000, 12.76000000);
601 addIsotopeToAtom("Ru", 44, 100, 99.904219700000, 12.60000000);
602 addIsotopeToAtom("Ru", 44, 96, 95.907598000000, 5.54000000);
603 addIsotopeToAtom("Ru", 44, 98, 97.905287000000, 1.87000000);
604 addIsotopeToAtom("Rh", 45, 103, 102.905504000000, 100.00000000);
605 addIsotopeToAtom("Pd", 46, 106, 105.903483000000, 27.33000000);
606 addIsotopeToAtom("Pd", 46, 108, 107.903894000000, 26.46000000);
607 addIsotopeToAtom("Pd", 46, 105, 104.905084000000, 22.33000000);
608 addIsotopeToAtom("Pd", 46, 110, 109.905152000000, 11.72000000);
609 addIsotopeToAtom("Pd", 46, 104, 103.904035000000, 11.14000000);
610 addIsotopeToAtom("Pd", 46, 102, 101.905608000000, 1.02000000);
611 addIsotopeToAtom("Ag", 47, 107, 106.905093000000, 51.83900000);
612 addIsotopeToAtom("Ag", 47, 109, 108.904756000000, 48.16100000);
613 addIsotopeToAtom("Cd", 48, 114, 113.903358100000, 28.73000000);
614 addIsotopeToAtom("Cd", 48, 112, 111.902757200000, 24.13000000);
615 addIsotopeToAtom("Cd", 48, 111, 110.904182000000, 12.80000000);
616 addIsotopeToAtom("Cd", 48, 110, 109.903006000000, 12.49000000);
617 addIsotopeToAtom("Cd", 48, 113, 112.904400900000, 12.22000000);
618 addIsotopeToAtom("Cd", 48, 116, 115.904755000000, 7.49000000);
619 addIsotopeToAtom("Cd", 48, 106, 105.906458000000, 1.25000000);
620 addIsotopeToAtom("Cd", 48, 108, 107.904183000000, 0.89000000);
621 addIsotopeToAtom("In", 49, 115, 114.903878000000, 95.71000000);
622 addIsotopeToAtom("In", 49, 113, 112.904061000000, 4.29000000);
623 addIsotopeToAtom("Sn", 50, 120, 119.902196600000, 32.58000000);
624 addIsotopeToAtom("Sn", 50, 118, 117.901606000000, 24.22000000);
625 addIsotopeToAtom("Sn", 50, 116, 115.901744000000, 14.54000000);
626 addIsotopeToAtom("Sn", 50, 119, 118.903309000000, 8.59000000);
627 addIsotopeToAtom("Sn", 50, 117, 116.902954000000, 7.68000000);
628 addIsotopeToAtom("Sn", 50, 124, 123.905274600000, 5.79000000);
629 addIsotopeToAtom("Sn", 50, 122, 121.903440100000, 4.63000000);
630 addIsotopeToAtom("Sn", 50, 112, 111.904821000000, 0.97000000);
631 addIsotopeToAtom("Sn", 50, 114, 113.902782000000, 0.66000000);
632 addIsotopeToAtom("Sn", 50, 115, 114.903346000000, 0.34000000);
633 addIsotopeToAtom("Sb", 51, 121, 120.903818000000, 57.21000000);
634 addIsotopeToAtom("Sb", 51, 123, 122.904215700000, 42.79000000);
635 addIsotopeToAtom("Te", 52, 130, 129.906222800000, 34.08000000);
636 addIsotopeToAtom("Te", 52, 128, 127.904461400000, 31.74000000);
637 addIsotopeToAtom("Te", 52, 126, 125.903305500000, 18.84000000);
638 addIsotopeToAtom("Te", 52, 125, 124.904424700000, 7.07000000);
639 addIsotopeToAtom("Te", 52, 124, 123.902819500000, 4.74000000);
640 addIsotopeToAtom("Te", 52, 122, 121.903047100000, 2.55000000);
641 addIsotopeToAtom("Te", 52, 123, 122.904273000000, 0.89000000);
642 addIsotopeToAtom("Te", 52, 120, 119.904020000000, 0.09000000);
643 addIsotopeToAtom("I", 53, 127, 126.904468000000, 100.00000000);
644 addIsotopeToAtom("Xe", 54, 132, 131.904154500000, 26.89000000);
645 addIsotopeToAtom("Xe", 54, 129, 128.904779500000, 26.44000000);
646 addIsotopeToAtom("Xe", 54, 131, 130.905081900000, 21.18000000);
647 addIsotopeToAtom("Xe", 54, 134, 133.905394500000, 10.44000000);
648 addIsotopeToAtom("Xe", 54, 136, 135.907220000000, 8.87000000);
649 addIsotopeToAtom("Xe", 54, 130, 129.903507900000, 4.08000000);
650 addIsotopeToAtom("Xe", 54, 128, 127.903530400000, 1.92000000);
651 addIsotopeToAtom("Xe", 54, 126, 125.904269000000, 0.09000000);
652 addIsotopeToAtom("Xe", 54, 124, 123.905895800000, 0.09000000);
653 addIsotopeToAtom("Cs", 55, 133, 132.905447000000, 100.00000000);
654 addIsotopeToAtom("Ba", 56, 138, 137.905241000000, 71.69800000);
655 addIsotopeToAtom("Ba", 56, 137, 136.905821000000, 11.23200000);
656 addIsotopeToAtom("Ba", 56, 136, 135.904570000000, 7.85400000);
657 addIsotopeToAtom("Ba", 56, 135, 134.905683000000, 6.59200000);
658 addIsotopeToAtom("Ba", 56, 134, 133.904503000000, 2.41700000);
659 addIsotopeToAtom("Ba", 56, 130, 129.906310000000, 0.10600000);
660 addIsotopeToAtom("Ba", 56, 132, 131.905056000000, 0.10100000);
661 addIsotopeToAtom("La", 57, 139, 138.906348000000, 99.91000000);
662 addIsotopeToAtom("La", 57, 138, 137.907107000000, 0.09000000);
663 addIsotopeToAtom("Ce", 58, 140, 139.905434000000, 88.45000000);
664 addIsotopeToAtom("Ce", 58, 142, 141.909240000000, 11.11400000);
665 addIsotopeToAtom("Ce", 58, 138, 137.905986000000, 0.25100000);
666 addIsotopeToAtom("Ce", 58, 136, 135.907140000000, 0.18500000);
667 addIsotopeToAtom("Pr", 59, 141, 140.907648000000, 100.00000000);
668 addIsotopeToAtom("Nd", 60, 142, 141.907719000000, 27.20000000);
669 addIsotopeToAtom("Nd", 60, 144, 143.910083000000, 23.80000000);
670 addIsotopeToAtom("Nd", 60, 146, 145.913112000000, 17.20000000);
671 addIsotopeToAtom("Nd", 60, 143, 142.909810000000, 12.20000000);
672 addIsotopeToAtom("Nd", 60, 145, 144.912569000000, 8.30000000);
673 addIsotopeToAtom("Nd", 60, 148, 147.916889000000, 5.70000000);
674 addIsotopeToAtom("Nd", 60, 150, 149.920887000000, 5.60000000);
675 addIsotopeToAtom("Pm", 61, 145, 144.912744000000, 50.00000000);
676 addIsotopeToAtom("Pm", 61, 147, 146.915134000000, 50.00000000);
677 addIsotopeToAtom("Sm", 62, 152, 151.919728000000, 26.75000000);
678 addIsotopeToAtom("Sm", 62, 154, 153.922205000000, 22.75000000);
679 addIsotopeToAtom("Sm", 62, 147, 146.914893000000, 14.99000000);
680 addIsotopeToAtom("Sm", 62, 149, 148.917180000000, 13.82000000);
681 addIsotopeToAtom("Sm", 62, 148, 147.914818000000, 11.24000000);
682 addIsotopeToAtom("Sm", 62, 150, 149.917271000000, 7.38000000);
683 addIsotopeToAtom("Sm", 62, 144, 143.911995000000, 3.07000000);
684 addIsotopeToAtom("Eu", 63, 153, 152.921226000000, 52.19000000);
685 addIsotopeToAtom("Eu", 63, 151, 150.919846000000, 47.81000000);
686 addIsotopeToAtom("Gd", 64, 158, 157.924101000000, 24.84000000);
687 addIsotopeToAtom("Gd", 64, 160, 159.927051000000, 21.86000000);
688 addIsotopeToAtom("Gd", 64, 156, 155.922120000000, 20.47000000);
689 addIsotopeToAtom("Gd", 64, 157, 156.923957000000, 15.65000000);
690 addIsotopeToAtom("Gd", 64, 155, 154.922619000000, 14.80000000);
691 addIsotopeToAtom("Gd", 64, 154, 153.920862000000, 2.18000000);
692 addIsotopeToAtom("Gd", 64, 152, 151.919788000000, 0.20000000);
693 addIsotopeToAtom("Tb", 65, 159, 158.925343000000, 100.00000000);
694 addIsotopeToAtom("Dy", 66, 164, 163.929171000000, 28.18000000);
695 addIsotopeToAtom("Dy", 66, 162, 161.926795000000, 25.51000000);
696 addIsotopeToAtom("Dy", 66, 163, 162.928728000000, 24.90000000);
697 addIsotopeToAtom("Dy", 66, 161, 160.926930000000, 18.91000000);
698 addIsotopeToAtom("Dy", 66, 160, 159.925194000000, 2.34000000);
699 addIsotopeToAtom("Dy", 66, 158, 157.924405000000, 0.10000000);
700 addIsotopeToAtom("Dy", 66, 156, 155.924278000000, 0.06000000);
701 addIsotopeToAtom("Ho", 67, 165, 164.930319000000, 100.00000000);
702 addIsotopeToAtom("Er", 68, 166, 165.930290000000, 33.61000000);
703 addIsotopeToAtom("Er", 68, 168, 167.932368000000, 26.78000000);
704 addIsotopeToAtom("Er", 68, 167, 166.932045000000, 22.93000000);
705 addIsotopeToAtom("Er", 68, 170, 169.935460000000, 14.93000000);
706 addIsotopeToAtom("Er", 68, 164, 163.929197000000, 1.61000000);
707 addIsotopeToAtom("Er", 68, 162, 161.928775000000, 0.14000000);
708 addIsotopeToAtom("Tm", 69, 169, 168.934211000000, 100.00000000);
709 addIsotopeToAtom("Yb", 70, 174, 173.938858100000, 31.83000000);
710 addIsotopeToAtom("Yb", 70, 172, 171.936377700000, 21.83000000);
711 addIsotopeToAtom("Yb", 70, 173, 172.938206800000, 16.13000000);
712 addIsotopeToAtom("Yb", 70, 171, 170.936322000000, 14.28000000);
713 addIsotopeToAtom("Yb", 70, 176, 175.942568000000, 12.76000000);
714 addIsotopeToAtom("Yb", 70, 170, 169.934759000000, 3.04000000);
715 addIsotopeToAtom("Yb", 70, 168, 167.933894000000, 0.13000000);
716 addIsotopeToAtom("Lu", 71, 175, 174.940767900000, 97.41000000);
717 addIsotopeToAtom("Lu", 71, 176, 175.942682400000, 2.59000000);
718 addIsotopeToAtom("Hf", 72, 180, 179.946548800000, 35.08000000);
719 addIsotopeToAtom("Hf", 72, 178, 177.943697700000, 27.28000000);
720 addIsotopeToAtom("Hf", 72, 177, 176.943220000000, 18.60000000);
721 addIsotopeToAtom("Hf", 72, 179, 178.945815100000, 13.62000000);
722 addIsotopeToAtom("Hf", 72, 176, 175.941401800000, 5.26000000);
723 addIsotopeToAtom("Hf", 72, 174, 173.940040000000, 0.16000000);
724 addIsotopeToAtom("Ta", 73, 181, 180.947996000000, 99.98800000);
725 addIsotopeToAtom("Ta", 73, 180, 179.947466000000, 0.01200000);
726 addIsotopeToAtom("W", 74, 184, 183.950932600000, 30.64000000);
727 addIsotopeToAtom("W", 74, 186, 185.954362000000, 28.43000000);
728 addIsotopeToAtom("W", 74, 182, 181.948206000000, 26.50000000);
729 addIsotopeToAtom("W", 74, 183, 182.950224500000, 14.31000000);
730 addIsotopeToAtom("W", 74, 180, 179.946706000000, 0.12000000);
731 addIsotopeToAtom("Re", 75, 187, 186.955750800000, 62.60000000);
732 addIsotopeToAtom("Re", 75, 185, 184.952955700000, 37.40000000);
733 addIsotopeToAtom("Os", 76, 192, 191.961479000000, 40.78000000);
734 addIsotopeToAtom("Os", 76, 190, 189.958445000000, 26.26000000);
735 addIsotopeToAtom("Os", 76, 189, 188.958144900000, 16.15000000);
736 addIsotopeToAtom("Os", 76, 188, 187.955836000000, 13.24000000);
737 addIsotopeToAtom("Os", 76, 187, 186.955747900000, 1.96000000);
738 addIsotopeToAtom("Os", 76, 186, 185.953838000000, 1.59000000);
739 addIsotopeToAtom("Os", 76, 184, 183.952491000000, 0.02000000);
740 addIsotopeToAtom("Ir", 77, 193, 192.962924000000, 62.70000000);
741 addIsotopeToAtom("Ir", 77, 191, 190.960591000000, 37.30000000);
742 addIsotopeToAtom("Pt", 78, 195, 194.964774000000, 33.83200000);
743 addIsotopeToAtom("Pt", 78, 194, 193.962664000000, 32.96700000);
744 addIsotopeToAtom("Pt", 78, 196, 195.964935000000, 25.24200000);
745 addIsotopeToAtom("Pt", 78, 198, 197.967876000000, 7.16300000);
746 addIsotopeToAtom("Pt", 78, 192, 191.961035000000, 0.78200000);
747 addIsotopeToAtom("Pt", 78, 190, 189.959930000000, 0.01400000);
748 addIsotopeToAtom("Au", 79, 197, 196.966552000000, 100.00000000);
749 addIsotopeToAtom("Hg", 80, 202, 201.970626000000, 29.86000000);
750 addIsotopeToAtom("Hg", 80, 200, 199.968309000000, 23.10000000);
751 addIsotopeToAtom("Hg", 80, 199, 198.968262000000, 16.87000000);
752 addIsotopeToAtom("Hg", 80, 201, 200.970285000000, 13.18000000);
753 addIsotopeToAtom("Hg", 80, 198, 197.966752000000, 9.97000000);
754 addIsotopeToAtom("Hg", 80, 204, 203.973476000000, 6.87000000);
755 addIsotopeToAtom("Hg", 80, 196, 195.965815000000, 0.15000000);
756 addIsotopeToAtom("Tl", 81, 205, 204.974412000000, 70.47600000);
757 addIsotopeToAtom("Tl", 81, 203, 202.972329000000, 29.52400000);
758 addIsotopeToAtom("Pb", 82, 208, 207.976636000000, 52.40000000);
759 addIsotopeToAtom("Pb", 82, 206, 205.974449000000, 24.10000000);
760 addIsotopeToAtom("Pb", 82, 207, 206.975881000000, 22.10000000);
761 addIsotopeToAtom("Pb", 82, 204, 203.973029000000, 1.40000000);
762 addIsotopeToAtom("Bi", 83, 209, 208.980383000000, 100.00000000);
763 addIsotopeToAtom("Po", 84, 209, 208.982416000000, 50.00000000);
764 addIsotopeToAtom("Po", 84, 210, 209.982857000000, 50.00000000);
765 addIsotopeToAtom("At", 85, 210, 209.987131000000, 50.00000000);
766 addIsotopeToAtom("At", 85, 211, 210.987481000000, 50.00000000);
767 addIsotopeToAtom("Rn", 86, 211, 210.990585000000, 33.33333333);
768 addIsotopeToAtom("Rn", 86, 220, 220.011384100000, 33.33333333);
769 addIsotopeToAtom("Rn", 86, 222, 222.017570500000, 33.33333333);
770 addIsotopeToAtom("Fr", 87, 223, 223.019730700000, 100.00000000);
771 addIsotopeToAtom("Ra", 88, 223, 223.018497000000, 25.00000000);
772 addIsotopeToAtom("Ra", 88, 224, 224.020202000000, 25.00000000);
773 addIsotopeToAtom("Ra", 88, 226, 226.025402600000, 25.00000000);
774 addIsotopeToAtom("Ra", 88, 228, 228.031064100000, 25.00000000);
775 addIsotopeToAtom("Ac", 89, 227, 227.027747000000, 100.00000000);
776 addIsotopeToAtom("Th", 90, 232, 232.038050400000, 100.00000000);
777 addIsotopeToAtom("Th", 90, 230, 230.033126600000, 0.00000000);
778 addIsotopeToAtom("Pa", 91, 231, 231.035878900000, 100.00000000);
779 addIsotopeToAtom("U", 92, 238, 238.050782600000, 99.27450000);
780 addIsotopeToAtom("U", 92, 235, 235.043923100000, 0.72000000);
781 addIsotopeToAtom("U", 92, 234, 234.040945600000, 0.00550000);
782 addIsotopeToAtom("U", 92, 236, 236.045561900000, 0.00000000);
783 addIsotopeToAtom("U", 92, 233, 233.039628000000, 0.00000000);
784 addIsotopeToAtom("Np", 93, 237, 237.048167300000, 50.00000000);
785 addIsotopeToAtom("Np", 93, 239, 239.052931400000, 50.00000000);
786 addIsotopeToAtom("Pu", 94, 238, 238.049553400000, 16.66666667);
787 addIsotopeToAtom("Pu", 94, 239, 239.052156500000, 16.66666667);
788 addIsotopeToAtom("Pu", 94, 240, 240.053807500000, 16.66666667);
789 addIsotopeToAtom("Pu", 94, 241, 241.056845300000, 16.66666667);
790 addIsotopeToAtom("Pu", 94, 242, 242.058736800000, 16.66666667);
791 addIsotopeToAtom("Pu", 94, 244, 244.064198000000, 16.66666667);
792 addIsotopeToAtom("Am", 95, 241, 241.056822900000, 50.00000000);
793 addIsotopeToAtom("Am", 95, 243, 243.061372700000, 50.00000000);
794 addIsotopeToAtom("Cm", 96, 243, 243.061382200000, 16.66666667);
795 addIsotopeToAtom("Cm", 96, 244, 244.062746300000, 16.66666667);
796 addIsotopeToAtom("Cm", 96, 245, 245.065485600000, 16.66666667);
797 addIsotopeToAtom("Cm", 96, 246, 246.067217600000, 16.66666667);
798 addIsotopeToAtom("Cm", 96, 247, 247.070347000000, 16.66666667);
799 addIsotopeToAtom("Cm", 96, 248, 248.072342000000, 16.66666667);
800 addIsotopeToAtom("Bk", 97, 247, 247.070299000000, 50.00000000);
801 addIsotopeToAtom("Bk", 97, 249, 249.074980000000, 50.00000000);
802 addIsotopeToAtom("Cf", 98, 249, 249.074847000000, 25.00000000);
803 addIsotopeToAtom("Cf", 98, 250, 250.076400000000, 25.00000000);
804 addIsotopeToAtom("Cf", 98, 251, 251.079580000000, 25.00000000);
805 addIsotopeToAtom("Cf", 98, 252, 252.081620000000, 25.00000000);
806 addIsotopeToAtom("Es", 99, 252, 252.082970000000, 100.00000000);
807 addIsotopeToAtom("Fm", 100, 257, 257.095099000000, 100.00000000);
808 addIsotopeToAtom("Md", 101, 256, 256.094050000000, 50.00000000);
809 addIsotopeToAtom("Md", 101, 258, 258.098425000000, 50.00000000);
810 addIsotopeToAtom("No", 102, 259, 259.101020000000, 100.00000000);
811 addIsotopeToAtom("Lr", 103, 262, 262.109690000000, 100.00000000);
812 addIsotopeToAtom("Rf", 104, 261, 261.108750000000, 100.00000000);
813 addIsotopeToAtom("Db", 105, 262, 262.114150000000, 100.00000000);
814 addIsotopeToAtom("Sg", 106, 266, 266.121930000000, 100.00000000);
815 addIsotopeToAtom("Bh", 107, 264, 264.124730000000, 100.00000000);
816 addIsotopeToAtom("Hs", 108, 277, 277.000000000000, 100.00000000);
817 addIsotopeToAtom("Mt", 109, 268, 268.138820000000, 100.00000000);
818 addIsotopeToAtom("Uun", 110, 281, 281.000000000000, 100.00000000);
819 addIsotopeToAtom("Uuu", 111, 272, 272.153480000000, 100.00000000);
820 addIsotopeToAtom("Uub", 112, 285, 285.000000000000, 100.00000000);
821 addIsotopeToAtom("Uuq", 114, 289, 289.000000000000, 100.00000000);
822 addIsotopeToAtom("Uuh", 116, 292, 292.000000000000, 100.00000000);
823 }
824 /******************************************************************/
set_atom_color(GtkColorSelection * Sel,gpointer * d)825 void set_atom_color(GtkColorSelection *Sel,gpointer *d)
826 {
827 gtk_color_selection_get_current_color(Sel, &ColorTemp);
828 }
829 /******************************************************************/
set_button_color(GtkObject * button,gpointer * data)830 void set_button_color(GtkObject *button,gpointer *data)
831 {
832 GtkStyle *style;
833 SData *tdata=(SData*)data;
834 style = gtk_style_copy(tdata->Style);
835 style->bg[0].red= ColorTemp.red;
836 style->bg[0].green=ColorTemp.green;
837 style->bg[0].blue=ColorTemp.blue;
838 tdata->Style=style;
839 gtk_widget_set_style(tdata->Button, tdata->Style);
840 }
841 /******************************************************************/
open_color_dlg_atoms(GtkWidget * win,gpointer tdata)842 static void open_color_dlg_atoms(GtkWidget *win,gpointer tdata)
843 {
844
845 GtkColorSelectionDialog *ColorDlg;
846 SData *data=(SData*)tdata;
847 GtkStyle *style;
848 gdouble v[3];
849
850 style = data->Style;
851 v[0] =style->bg[0].red/65535.0;
852 v[1] =style->bg[0].green/65535.0;
853 v[2] =style->bg[0].blue/65535.0;
854 ColorDlg = (GtkColorSelectionDialog *)gtk_color_selection_dialog_new("Set Atom Color");
855 gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (ColorDlg->colorsel), &style->bg[0]);
856
857 gtk_window_set_transient_for(GTK_WINDOW(ColorDlg),GTK_WINDOW(data->Window));
858 gtk_window_set_position(GTK_WINDOW(ColorDlg),GTK_WIN_POS_CENTER);
859 gtk_window_set_modal (GTK_WINDOW (ColorDlg), TRUE);
860 g_signal_connect(G_OBJECT(ColorDlg), "delete_event",(GCallback)destroy_button_windows,NULL);
861 g_signal_connect(G_OBJECT(ColorDlg), "delete_event",G_CALLBACK(gtk_widget_destroy),NULL);
862
863 gtk_widget_hide(ColorDlg->help_button);
864 g_signal_connect_swapped(G_OBJECT(ColorDlg->ok_button),"clicked",
865 (GCallback)set_atom_color,GTK_OBJECT(ColorDlg->colorsel));
866
867 g_signal_connect(G_OBJECT(ColorDlg->ok_button),"clicked",
868 (GCallback)set_button_color,tdata);
869
870 g_signal_connect_swapped(G_OBJECT(ColorDlg->ok_button), "clicked",
871 (GCallback)destroy_button_windows,GTK_OBJECT(ColorDlg));
872 g_signal_connect_swapped(G_OBJECT(ColorDlg->ok_button),"clicked",
873 (GCallback)gtk_widget_destroy,GTK_OBJECT(ColorDlg));
874
875 g_signal_connect_swapped(G_OBJECT(ColorDlg->cancel_button), "clicked",
876 (GCallback)destroy_button_windows,GTK_OBJECT(ColorDlg));
877 g_signal_connect_swapped(G_OBJECT(ColorDlg->cancel_button),"clicked",
878 (GCallback)gtk_widget_destroy,GTK_OBJECT(ColorDlg));
879
880 add_button_windows(" Set Color ",GTK_WIDGET(ColorDlg));
881 gtk_widget_show(GTK_WIDGET(ColorDlg));
882
883 }
884 /******************************************************************/
set_atom_prop(GtkWidget * w,gpointer data)885 static void set_atom_prop(GtkWidget *w,gpointer data)
886 {
887 guint i;
888 gchar *Symb;
889 G_CONST_RETURN gchar *temp;
890 gdouble radii;
891 gdouble covalentRadii;
892 gdouble vanDerWaalsRadii;
893 gint maximumBondValence;
894 gdouble masse;
895 gdouble electronegativity;
896 SData *sdata=(SData*)data;
897
898
899 Symb = (gchar *)sdata->Symb;
900 temp = gtk_entry_get_text(GTK_ENTRY(EntryProp[DISPLAY_RADII]));
901 if(!test(temp))
902 {
903 GtkWidget* mess = Message(_("ERROR : the entry text is not a number"),_("Warning"),TRUE);
904 gtk_window_set_transient_for(GTK_WINDOW(mess),GTK_WINDOW(sdata->Window));
905 return;
906 }
907 else radii = atof(temp)/BOHR_TO_ANG;
908
909 temp = gtk_entry_get_text(GTK_ENTRY(EntryProp[COVALENT_RADII]));
910 if(!test(temp))
911 {
912 GtkWidget* mess = Message(_("ERROR : the entry text is not a number"),_("Warning"),TRUE);
913 gtk_window_set_transient_for(GTK_WINDOW(mess),GTK_WINDOW(sdata->Window));
914 return;
915 }
916 else covalentRadii = atof(temp)/BOHR_TO_ANG;
917
918 temp = gtk_entry_get_text(GTK_ENTRY(EntryProp[VANDERWALS_RADII]));
919 if(!test(temp))
920 {
921 GtkWidget* mess = Message(_("ERROR : the entry text is not a number"),_("Warning"),TRUE);
922 gtk_window_set_transient_for(GTK_WINDOW(mess),GTK_WINDOW(sdata->Window));
923 return;
924 }
925 else vanDerWaalsRadii = atof(temp)/BOHR_TO_ANG;
926
927 temp = gtk_entry_get_text(GTK_ENTRY(EntryProp[MAXIMUM_BOND_VALENCE]));
928 if(!test(temp))
929 {
930 GtkWidget* mess = Message(_("ERROR : the entry text is not a number"),_("Warning"),TRUE);
931 gtk_window_set_transient_for(GTK_WINDOW(mess),GTK_WINDOW(sdata->Window));
932 return;
933 }
934 else maximumBondValence = atoi(temp);
935
936 temp = gtk_entry_get_text(GTK_ENTRY(EntryProp[MASSE]));
937 if(!test(temp))
938 {
939 GtkWidget* mess = Message(_("ERROR : the entry text is not a number"),_("Warning"),TRUE);
940 gtk_window_set_transient_for(GTK_WINDOW(mess),GTK_WINDOW(sdata->Window));
941 return;
942 }
943 else masse = atof(temp);
944
945 temp = gtk_entry_get_text(GTK_ENTRY(EntryProp[ELECTRONEGATIVITY]));
946 if(!test(temp))
947 {
948 GtkWidget* mess = Message(_("ERROR : the entry text is not a number"),_("Warning"),TRUE);
949 gtk_window_set_transient_for(GTK_WINDOW(mess),GTK_WINDOW(sdata->Window));
950 return;
951 }
952 else electronegativity = atof(temp)/27.21;
953
954 /* g_free(temp);*/
955
956 for(i=0;i<NATOMS;i++)
957 {
958 if (!strcmp(Symb,AtomsProp[i].symbol))
959 {
960 GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(listIsotopes));
961 GtkTreePath *path = NULL;
962 GtkTreeIter iter;
963 gint j;
964 gint niso = 0;
965 gdouble sabond = 0;
966 for(j=0;j<MAXISOTOP;j++)
967 {
968 gchar* mass;
969 gchar* abond;
970 gchar str[10];
971 sprintf(str,"%d",j);
972 path = gtk_tree_path_new_from_string (str);
973 gtk_tree_model_get_iter (model, &iter, path);
974 gtk_tree_path_free (path);
975 gtk_tree_model_get(GTK_TREE_MODEL (model), &iter, 0, &mass, -1);
976 gtk_tree_model_get(GTK_TREE_MODEL (model), &iter, 2, &abond, -1);
977 if(mass && abond && atof(mass)>0 && atof(abond)>=0 && atof(abond)<=100)
978 {
979 AtomsProp[i].rMass[niso] = atof(mass);
980 AtomsProp[i].iMass[niso] = (gint)(atoi(mass)+0.5);
981 AtomsProp[i].abundances[niso] = atof(abond);
982 sabond += AtomsProp[i].abundances[niso];
983 niso++;
984 }
985 }
986 AtomsProp[i].nIsotopes = niso;
987 if(fabs(sabond-100)>1e-3)
988 {
989 GtkWidget* mess = Message(_("Warning : sum of abundances is not equal to 100!\n Reset the mass to 0 for remove an isotope "),_("Warning"),TRUE);
990 gtk_window_set_transient_for(GTK_WINDOW(mess),GTK_WINDOW(sdata->Window));
991 }
992
993 AtomsProp[i].radii = radii;
994 AtomsProp[i].covalentRadii = covalentRadii;
995 AtomsProp[i].vanDerWaalsRadii = vanDerWaalsRadii;
996 AtomsProp[i].maximumBondValence = maximumBondValence;
997 AtomsProp[i].masse = masse;
998 AtomsProp[i].electronegativity = electronegativity;
999
1000 set_color_atom(ColorTemp,Symb);
1001 sdata->Style=set_button_style(sdata->Style,sdata->Button,Symb);
1002
1003
1004
1005 if(GeomDrawingArea != NULL) rafresh_drawing();
1006 rafresh_window_orb();
1007 return;
1008 }
1009 }
1010 }
1011 /********************************************************************************/
Add_Label_Table(GtkWidget * Table,gchar * label,gushort line,gushort colonne)1012 static GtkWidget *Add_Label_Table(GtkWidget *Table,gchar *label,gushort line,gushort colonne)
1013 {
1014 GtkWidget *Label;
1015 GtkWidget *Hbox;
1016
1017 Label = gtk_label_new (label);
1018 gtk_label_set_justify(GTK_LABEL(Label),GTK_JUSTIFY_LEFT);
1019 Hbox = gtk_hbox_new (FALSE, 2);
1020 gtk_box_pack_start (GTK_BOX (Hbox), Label, FALSE, FALSE, 4);
1021
1022 gtk_table_attach(GTK_TABLE(Table),Hbox,colonne,colonne+1,line,line+1,
1023 (GtkAttachOptions)(GTK_FILL|GTK_SHRINK) ,
1024 (GtkAttachOptions)(GTK_FILL|GTK_SHRINK),
1025 1,1);
1026 return Label;
1027 }
1028 /********************************************************************************/
1029 /*
1030 static void clearList(GtkWidget* myList)
1031 {
1032 GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(myList));
1033 GtkListStore *store = GTK_LIST_STORE (model);
1034 gtk_list_store_clear(store);
1035 }
1036 */
1037 /*****************************************************************************/
appendList(GtkWidget * list,gint i)1038 static void appendList(GtkWidget* list, gint i)
1039 {
1040 #define NC 2
1041 gchar *texts[NC];
1042 guint Nc;
1043 gint k;
1044 GtkTreeIter iter;
1045 GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(list));
1046 GtkListStore *store = GTK_LIST_STORE (model);
1047
1048 model = GTK_TREE_MODEL (store);
1049
1050 for(Nc=0;Nc<MAXISOTOP;Nc++)
1051 {
1052 if(Nc<AtomsProp[i].nIsotopes)
1053 {
1054 texts[0] = g_strdup_printf("%f",AtomsProp[i].rMass[Nc]);
1055 texts[1] = g_strdup_printf("%f",AtomsProp[i].abundances[Nc]);
1056 }
1057 else
1058 {
1059 texts[0] = g_strdup(" ");
1060 texts[1] = g_strdup(" ");
1061 }
1062
1063 gtk_list_store_append (store, &iter);
1064 for(k=0;k<NC;k++)
1065 {
1066 gboolean ed = TRUE;
1067 gtk_list_store_set (store, &iter, k+k, texts[k],k+k+1,ed, -1);
1068 g_free(texts[k]);
1069 }
1070 }
1071 #undef NC
1072 }
1073 /********************************************************************************/
editedIsotope(GtkCellRendererText * cell,gchar * path_string,gchar * new_text,gpointer data)1074 static void editedIsotope (GtkCellRendererText *cell, gchar *path_string, gchar *new_text, gpointer data)
1075 {
1076 GtkTreeModel *model = GTK_TREE_MODEL (data);
1077 GtkTreeIter iter;
1078 GtkTreePath *path = NULL;
1079 gint numCol = 0;
1080 gint numAtom = 0;
1081 gint Nc = -1;
1082 if(!new_text) return;
1083 numCol = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cell),"NumColumn"));
1084 numAtom = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cell),"NumAtom"));
1085 if(numAtom<0) return;
1086 /* mass */
1087 if(numCol==0)
1088 {
1089 gint nc = strlen(new_text);
1090 if(nc<1)return;
1091 if(!test(new_text)) return;
1092 if(atof(new_text)<0) return;
1093 Nc = atoi(path_string);
1094 path = gtk_tree_path_new_from_string (path_string);
1095 gtk_tree_model_get_iter (model, &iter, path);
1096 gtk_list_store_set (GTK_LIST_STORE (model), &iter, 2*numCol, new_text, -1);
1097 gtk_tree_path_free (path);
1098 return;
1099 }
1100 /* abundance */
1101 if(numCol==1)
1102 {
1103 gint nc = strlen(new_text);
1104 if(nc<1)return;
1105 if(!test(new_text)) return;
1106 if(atof(new_text)<0) return;
1107 if(atof(new_text)>100) return;
1108 Nc = atoi(path_string);
1109 path = gtk_tree_path_new_from_string (path_string);
1110 gtk_tree_model_get_iter (model, &iter, path);
1111 gtk_list_store_set (GTK_LIST_STORE (model), &iter, 2*numCol, new_text, -1);
1112 gtk_tree_path_free (path);
1113 return;
1114 }
1115 }
1116 /************************************************************/
create_isotope_list(GtkWidget * vbox,gint numAtom)1117 static GtkWidget* create_isotope_list(GtkWidget *vbox, gint numAtom)
1118 {
1119 GtkListStore *store;
1120 GtkTreeModel *model;
1121 GtkCellRenderer *renderer;
1122 GtkTreeViewColumn *column;
1123 GtkWidget *list = NULL;
1124
1125 GtkWidget *scr;
1126 guint i;
1127 guint Factor=7;
1128 guint widall=0;
1129 #define NC 2
1130 gchar *titres[NC]={ "Mass", "Abundance(%)", };
1131 gint width[NC]={6,8};
1132
1133 for(i=0;(gint)i<NC;i++) widall+=width[i];
1134 widall=widall*Factor+60;
1135
1136 scr=gtk_scrolled_window_new(NULL,NULL);
1137 gtk_widget_set_size_request(scr,widall,(gint)(ScreenHeight*0.4));
1138 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scr),GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1139 gtk_box_pack_start(GTK_BOX (vbox), scr,TRUE, TRUE, 2);
1140
1141 store = gtk_list_store_new (NC*2,
1142 G_TYPE_STRING, G_TYPE_BOOLEAN,
1143 G_TYPE_STRING, G_TYPE_BOOLEAN
1144 );
1145 model = GTK_TREE_MODEL (store);
1146
1147 list = gtk_tree_view_new_with_model (model);
1148 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (list), TRUE);
1149 gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (list), TRUE);
1150 gtk_tree_view_set_reorderable(GTK_TREE_VIEW (list), TRUE);
1151 for (i=0;(gint)i<NC;i++)
1152 {
1153 column = gtk_tree_view_column_new ();
1154 gtk_tree_view_column_set_title (column, titres[i]);
1155 gtk_tree_view_column_set_min_width(column, width[i]*Factor);
1156 gtk_tree_view_column_set_reorderable(column, TRUE);
1157 renderer = gtk_cell_renderer_text_new ();
1158 gtk_tree_view_column_pack_start (column, renderer, TRUE);
1159 gtk_tree_view_column_set_attributes (column, renderer, "text", i+i, "editable",i+i+1,NULL);
1160 gtk_tree_view_append_column (GTK_TREE_VIEW (list), column);
1161 g_object_set_data(G_OBJECT(renderer),"NumColumn", GINT_TO_POINTER(i));
1162 g_object_set_data(G_OBJECT(renderer),"NumAtom", GINT_TO_POINTER(numAtom));
1163 g_signal_connect (renderer, "edited", G_CALLBACK (editedIsotope), model);
1164 }
1165 gtk_container_add(GTK_CONTAINER(scr),list);
1166
1167 set_base_style(list,55000,55000,55000);
1168 gtk_widget_show (list);
1169 #undef NC
1170 appendList(list,numAtom);
1171 return list;
1172 }
1173 /******************************************************************/
dialog_set_atom_prop(GtkWidget * w,gpointer data)1174 static void dialog_set_atom_prop(GtkWidget *w,gpointer data)
1175 {
1176 GtkWidget *Dialogue;
1177 GtkWidget *Bouton;
1178 GtkWidget *frame;
1179 GtkWidget *vboxframe;
1180 GtkWidget *Table;
1181 SAtomsProp Prop;
1182 gchar *temp;
1183 gchar *tlabel[]={"Display radius", "Covalent radii", "Van der Waals radius", "Maximum bond valence", "Mass" , "Electronegativity"};
1184 SData *sdata ;
1185 SData *tdata ;
1186 GtkStyle *style;
1187 gint i;
1188 GtkWidget* comboMaxValence;
1189
1190
1191 sdata = (SData *)data;
1192
1193 Prop = prop_atom_get(sdata->Symb);
1194 ColorTemp = Prop.color;
1195
1196 Dialogue = gtk_dialog_new();
1197 temp = g_strdup_printf("Set properties of %s atom",sdata->Symb);
1198 gtk_window_set_title(GTK_WINDOW(Dialogue),temp);
1199 gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER);
1200 gtk_window_set_transient_for(GTK_WINDOW(Dialogue),GTK_WINDOW(sdata->Window));
1201 gtk_window_set_modal (GTK_WINDOW (Dialogue), TRUE);
1202 g_signal_connect(G_OBJECT(Dialogue), "delete_event",(GCallback)destroy_button_windows,NULL);
1203 g_signal_connect(G_OBJECT(Dialogue), "delete_event",G_CALLBACK(gtk_widget_destroy),NULL);
1204
1205 frame = gtk_frame_new (sdata->Symb);
1206 gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT);
1207 gtk_container_set_border_width (GTK_CONTAINER (frame), 10);
1208 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(Dialogue)->vbox), frame,TRUE,TRUE,0);
1209
1210 gtk_widget_show (frame);
1211
1212 vboxframe = create_vbox(frame);
1213
1214 Table = gtk_table_new(7,4,FALSE);
1215
1216 gtk_box_pack_start(GTK_BOX(vboxframe), Table,TRUE,TRUE,0);
1217
1218 i = 0;
1219 Add_Label_Table(Table,_("Name"),i,0);
1220 Add_Label_Table(Table,":",i,1);
1221 Add_Label_Table(Table,Prop.name,i,2);
1222
1223 i++;
1224 Add_Label_Table(Table,_("Symbol"),i,0);
1225 Add_Label_Table(Table,":",i,1);
1226 Add_Label_Table(Table,sdata->Symb,i,2);
1227
1228 i++;
1229 Add_Label_Table(Table,_("Atomic Number"),i,0);
1230 Add_Label_Table(Table,":",i,1);
1231 temp = g_strdup_printf("%d",Prop.atomicNumber);
1232 Add_Label_Table(Table,temp,i,2);
1233
1234 /* Display radius */
1235 i++;
1236 Add_Label_Table(Table,tlabel[DISPLAY_RADII],i,0);
1237 Add_Label_Table(Table,":",i,1);
1238 EntryProp[DISPLAY_RADII] = gtk_entry_new();
1239 gtk_widget_set_size_request(GTK_WIDGET(EntryProp[DISPLAY_RADII]),80,-1);
1240 gtk_table_attach(GTK_TABLE(Table),EntryProp[DISPLAY_RADII],2,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1);
1241 temp = g_strdup_printf("%f",Prop.radii*BOHR_TO_ANG);
1242 gtk_entry_set_text(GTK_ENTRY(EntryProp[DISPLAY_RADII]),temp);
1243 Add_Label_Table(Table,_("Angstroms"),i,3);
1244
1245 /* Covalent radii */
1246 i++;
1247 Add_Label_Table(Table,tlabel[COVALENT_RADII],i,0);
1248 Add_Label_Table(Table,":",i,1);
1249 EntryProp[COVALENT_RADII] = gtk_entry_new();
1250 gtk_widget_set_size_request(GTK_WIDGET(EntryProp[COVALENT_RADII]),80,-1);
1251 gtk_table_attach(GTK_TABLE(Table),EntryProp[COVALENT_RADII],2,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1);
1252 temp = g_strdup_printf("%f",Prop.covalentRadii*BOHR_TO_ANG);
1253 gtk_entry_set_text(GTK_ENTRY(EntryProp[COVALENT_RADII]),temp);
1254 Add_Label_Table(Table,_("Angstroms"),i,3);
1255
1256 /* Van der Waals radius */
1257 i++;
1258 Add_Label_Table(Table,tlabel[VANDERWALS_RADII],i,0);
1259 Add_Label_Table(Table,":",i,1);
1260 EntryProp[VANDERWALS_RADII] = gtk_entry_new();
1261 gtk_widget_set_size_request(GTK_WIDGET(EntryProp[VANDERWALS_RADII]),80,-1);
1262 gtk_table_attach(GTK_TABLE(Table),EntryProp[VANDERWALS_RADII],2,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1);
1263 temp = g_strdup_printf("%f",Prop.vanDerWaalsRadii*BOHR_TO_ANG);
1264 gtk_entry_set_text(GTK_ENTRY(EntryProp[VANDERWALS_RADII]),temp);
1265 Add_Label_Table(Table,_("Angstroms"),i,3);
1266
1267 /* Maximum bond valence */
1268 i++;
1269 Add_Label_Table(Table,tlabel[MAXIMUM_BOND_VALENCE],i,0);
1270 Add_Label_Table(Table,":",i,1);
1271 {
1272 gint m = 30;
1273 gchar **maxValence = g_malloc(30*sizeof(gchar*));
1274 gint k;
1275
1276 for(k=0; k<m; k++) maxValence[k] = g_strdup_printf("%d",k);
1277 comboMaxValence = create_combo_box_entry(maxValence, m, FALSE,-1,-1);
1278 EntryProp[MAXIMUM_BOND_VALENCE] = (GTK_BIN (comboMaxValence)->child);
1279 for(k=0; k<m; k++) g_free(maxValence[k]);
1280 g_free(maxValence);
1281 }
1282 gtk_widget_set_size_request(GTK_WIDGET(EntryProp[MAXIMUM_BOND_VALENCE]),80,-1);
1283 /*
1284 gtk_table_attach(GTK_TABLE(Table),EntryProp[MAXIMUM_BOND_VALENCE],2,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1);
1285 */
1286 gtk_table_attach(GTK_TABLE(Table),comboMaxValence,2,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1);
1287 temp = g_strdup_printf("%d",Prop.maximumBondValence);
1288 gtk_entry_set_text(GTK_ENTRY(EntryProp[MAXIMUM_BOND_VALENCE]),temp);
1289 Add_Label_Table(Table," ",i,3);
1290
1291
1292 /* "Electronegativity"*/
1293 i++;
1294 Add_Label_Table(Table,tlabel[ELECTRONEGATIVITY],i,0);
1295 Add_Label_Table(Table,":",i,1);
1296 EntryProp[ELECTRONEGATIVITY] = gtk_entry_new();
1297 gtk_widget_set_size_request(GTK_WIDGET(EntryProp[ELECTRONEGATIVITY]),80,-1);
1298 gtk_table_attach(GTK_TABLE(Table),EntryProp[ELECTRONEGATIVITY],2,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1);
1299 temp = g_strdup_printf("%f",Prop.electronegativity/27.21);
1300 gtk_entry_set_text(GTK_ENTRY(EntryProp[ELECTRONEGATIVITY]),temp);
1301 Add_Label_Table(Table,"eV",i,3);
1302
1303 i++;
1304 Add_Label_Table(Table,_("Atom Color"),i,0);
1305 Add_Label_Table(Table,":",i,1);
1306
1307 Bouton = gtk_button_new_with_label(_("Set Color"));
1308 style=set_button_style(sdata->Style,Bouton,sdata->Symb);
1309 tdata=g_malloc(sizeof(SData));
1310 tdata->Window = Dialogue;
1311 tdata->Symb = g_strdup(sdata->Symb);
1312 tdata->Button =Bouton;
1313 tdata->Style =style;
1314 gtk_table_attach(GTK_TABLE(Table),Bouton,2,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1);
1315 g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)open_color_dlg_atoms, (gpointer)tdata);
1316
1317 /* Mass */
1318 i++;
1319 Add_Label_Table(Table,tlabel[MASSE],i,0);
1320 Add_Label_Table(Table,":",i,1);
1321 EntryProp[MASSE] = gtk_entry_new();
1322 gtk_widget_set_size_request(GTK_WIDGET(EntryProp[MASSE]),80,-1);
1323 gtk_table_attach(GTK_TABLE(Table),EntryProp[MASSE],2,3,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_SHRINK), 1,1);
1324 temp = g_strdup_printf("%f",Prop.masse);
1325 gtk_entry_set_text(GTK_ENTRY(EntryProp[MASSE]),temp);
1326 Add_Label_Table(Table,"uam(12C)",i,3);
1327 listIsotopes = create_isotope_list(vboxframe, Prop.atomicNumber-1);
1328
1329 gtk_widget_realize(Dialogue);
1330
1331 Bouton = create_button(Dialogue,_("Cancel"));
1332 gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0);
1333 g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)destroy_button_windows,GTK_OBJECT(Dialogue));
1334 g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Dialogue));
1335 GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT);
1336
1337 Bouton = create_button(Dialogue,_("OK"));
1338 gtk_box_pack_start( GTK_BOX(GTK_DIALOG(Dialogue)->action_area), Bouton,TRUE,TRUE,0);
1339 g_signal_connect(G_OBJECT(Bouton), "clicked", (GCallback)set_atom_prop, sdata);
1340 g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)destroy_button_windows,GTK_OBJECT(Dialogue));
1341 g_signal_connect_swapped(G_OBJECT(Bouton), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Dialogue));
1342 GTK_WIDGET_SET_FLAGS(Bouton, GTK_CAN_DEFAULT);
1343 gtk_widget_grab_default(Bouton);
1344
1345 add_button_windows(_(" Set properties "),Dialogue);
1346 gtk_widget_show_all(Dialogue);
1347 g_free(temp);
1348 }
1349 /******************************************************************/
set_button_style(GtkStyle * button_style,GtkWidget * button,gchar * Symb)1350 GtkStyle *set_button_style( GtkStyle *button_style,GtkWidget *button,gchar *Symb)
1351 {
1352 SAtomsProp Pro=prop_atom_get(Symb);
1353 GtkStyle *style;
1354 style = gtk_style_copy(button_style);
1355 style->bg[0].red=Pro.color.red;
1356 style->bg[0].green=Pro.color.green;
1357 style->bg[0].blue=Pro.color.blue;
1358 gtk_widget_set_style(button, style );
1359 return style;
1360 }
1361 /******************************************************************/
get_periodic_table()1362 gchar*** get_periodic_table()
1363 {
1364 static const gchar *table0[PERIODIC_TABLE_N_COLUMNS][PERIODIC_TABLE_N_ROWS]={
1365 {"H" ,"Li","Na","K" ,"Rb","Cs","Fr","00","00","00"},
1366 {"00","Be","Mg","Ca","Sr","Ba","Ra","00","X","00"},
1367 {"00","00","00","Sc","Y" ,"La","Ac","00","00","00"},
1368 {"00","00","00","Ti","Zr","Hf","Rf","00","00","00"},
1369 {"00","00","00","V" ,"Nb","Ta","Db","Ce","Th","00"},
1370 {"00","00","00","Cr","Mo","W" ,"Sg","Pr","Pa","00"},
1371 {"00","00","00","Mn","Tc","Re","Bh","Nd","U" ,"00"},
1372 {"00","00","00","Fe","Ru","Os","Hs","Pm","Np","00"},
1373 {"00","00","00","Co","Rh","Ir","Mt","Sm","Pu","00"},
1374 {"00","00","00","Ni","Pd","Pt","00","Eu","Am","00"},
1375 {"00","00","00","Cu","Ag","Au","00","Gd","Cm","00"},
1376 {"00","00","00","Zn","Cd","Hg","00","Tb","Bk","00"},
1377 {"00","B" ,"Al","Ga","In","Tl","00","Dy","Cf","00"},
1378 {"00","C" ,"Si","Ge","Sn","Pb","00","Ho","Es","00"},
1379 {"00","N" ,"P" ,"As","Sb","Bi","00","Er","Fm","00"},
1380 {"00","O" ,"S" ,"Se","Te","Po","00","Tm","Md","00"},
1381 {"00","F" ,"Cl","Br","I" ,"At","00","Yb","No","00"},
1382 {"He","Ne","Ar","Kr","Xe","Rn","00","Lu","Lr","00"},
1383 };
1384 static gchar*** table = NULL;
1385 if(table == NULL)
1386 {
1387 gint i;
1388 gint j;
1389 table = g_malloc(PERIODIC_TABLE_N_COLUMNS*sizeof(gchar**));
1390 for(i=0;i<PERIODIC_TABLE_N_COLUMNS;i++)
1391 {
1392 table[i] = g_malloc(PERIODIC_TABLE_N_ROWS*sizeof(gchar*));
1393 for(j=0;j<PERIODIC_TABLE_N_ROWS;j++)
1394 table[i][j] = g_strdup(table0[i][j]);
1395 }
1396 }
1397 return table;
1398 }
1399 /******************************************************************/
create_table_prop_in_window(GtkWidget * WinTable,GtkWidget * frame)1400 void create_table_prop_in_window(GtkWidget *WinTable, GtkWidget *frame)
1401 {
1402 GtkWidget* Table;
1403 GtkWidget* button;
1404 guint i;
1405 guint j;
1406
1407 GtkStyle *button_style = gtk_widget_get_style(WinTable);
1408 GtkStyle *style;
1409
1410 gchar*** Symb = get_periodic_table();
1411 SData *sdata[18][10];
1412
1413
1414 Table = gtk_table_new(PERIODIC_TABLE_N_ROWS-1,PERIODIC_TABLE_N_COLUMNS,TRUE);
1415 gtk_container_add(GTK_CONTAINER(frame),Table);
1416
1417 for ( i = 0;i<PERIODIC_TABLE_N_ROWS-1;i++)
1418 for ( j = 0;j<PERIODIC_TABLE_N_COLUMNS;j++)
1419 {
1420 if(strcmp(Symb[j][i],"00"))
1421 {
1422 button = gtk_button_new_with_label(Symb[j][i]);
1423 style=set_button_style(button_style,button,Symb[j][i]);
1424
1425 sdata[j][i]=g_malloc(sizeof(SData));
1426 sdata[j][i]->Window = WinTable;
1427 sdata[j][i]->Symb = g_strdup(Symb[j][i]);
1428 sdata[j][i]->Button =button;
1429 sdata[j][i]->Style =style;
1430 g_signal_connect(G_OBJECT(button), "clicked", (GCallback)dialog_set_atom_prop,(gpointer )sdata[j][i]);
1431 gtk_table_attach(GTK_TABLE(Table),button,j,j+1,i,i+1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) , (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 1,1);
1432 }
1433 }
1434 }
1435 /******************************************************************/
create_table_prop()1436 void create_table_prop()
1437 {
1438 GtkWidget *WinTable;
1439 GtkWidget *frame;
1440 GtkWidget *vbox;
1441 GtkWidget *hbox;
1442 GtkWidget* button;
1443
1444 WinTable = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1445 gtk_window_set_title(GTK_WINDOW(WinTable),_("Select your atom"));
1446 gtk_window_set_position(GTK_WINDOW(WinTable),GTK_WIN_POS_CENTER);
1447 gtk_window_set_default_size (GTK_WINDOW(WinTable),(gint)(ScreenWidth*0.5),(gint)(ScreenHeight*0.4));
1448
1449 g_signal_connect(G_OBJECT(WinTable), "delete_event", (GCallback)destroy_button_windows, NULL);
1450 g_signal_connect(G_OBJECT(WinTable), "delete_event", (GCallback)gtk_widget_destroy, NULL);
1451
1452 vbox = gtk_vbox_new (FALSE, 2);
1453 gtk_container_add(GTK_CONTAINER(WinTable),vbox);
1454
1455 hbox = gtk_hbox_new (FALSE, 0);
1456 gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
1457
1458 frame = gtk_frame_new (NULL);
1459 gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT);
1460 gtk_container_set_border_width (GTK_CONTAINER (frame), 0);
1461 gtk_container_add(GTK_CONTAINER(hbox),frame);
1462 gtk_widget_show (frame);
1463
1464 create_table_prop_in_window(WinTable,frame);
1465
1466 hbox = gtk_hbox_new (FALSE, 0);
1467 gtk_widget_show (hbox);
1468 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
1469 gtk_widget_realize(WinTable);
1470 button = create_button(WinTable,_("Close"));
1471 gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 2);
1472 g_signal_connect_swapped(G_OBJECT(button),"clicked", (GCallback)destroy_button_windows, GTK_OBJECT(WinTable));
1473 g_signal_connect_swapped(G_OBJECT(button), "clicked", (GCallback)gtk_widget_destroy, GTK_OBJECT(WinTable));
1474 GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
1475 gtk_widget_grab_default(button);
1476 gtk_widget_show(button);
1477
1478 add_button_windows(_(" Properties "),WinTable);
1479
1480 gtk_widget_show_all(WinTable);
1481 }
1482 /********************************************************************************/
create_table_prop_in_vbox(GtkWidget * WinTable,GtkWidget * Vbox)1483 void create_table_prop_in_vbox(GtkWidget *WinTable,GtkWidget *Vbox)
1484 {
1485 GtkWidget *frame;
1486
1487 frame = gtk_frame_new (NULL);
1488 gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT);
1489 gtk_container_set_border_width (GTK_CONTAINER (frame), 10);
1490 gtk_container_add(GTK_CONTAINER(Vbox),frame);
1491 gtk_widget_show (frame);
1492
1493 create_table_prop_in_window(WinTable,frame);
1494
1495 gtk_widget_show_all(WinTable);
1496 }
1497 /******************************************************************/
1498
1499