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