1 /* InterfaceGeom.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 <stdio.h>
23 #include <stdlib.h>
24 #include <string.h>
25 #include <gtk/gtk.h>
26 
27 
28 #include "../Common/Global.h"
29 #include "../Geometry/InterfaceGeom.h"
30 #include "../Gaussian/GaussGlobal.h"
31 #include "../Geometry/GeomGlobal.h"
32 #include "../Geometry/GeomXYZ.h"
33 #include "../Geometry/GeomZmatrix.h"
34 #include "../Geometry/ResultsAnalise.h"
35 #include "../Utils/UtilsInterface.h"
36 #include "../Utils/Utils.h"
37 #include "../Utils/AtomsProp.h"
38 #include "../Geometry/Fragments.h"
39 #include "../Geometry/DrawGeom.h"
40 #include "../Common/Windows.h"
41 #include "../Files/FileChooser.h"
42 
43 static GtkWidget *FrameGeom;
44 /*************************************************************************/
MessageGeom(gchar * message,gchar * type,gboolean center)45 void MessageGeom(gchar* message,gchar* type,gboolean center)
46 {
47 	GtkWidget* Dialogue = Message(message,type,center);
48   	gtk_window_set_transient_for(GTK_WINDOW(Dialogue),GTK_WINDOW(Fenetre));
49 	if(WindowGeom)
50   		gtk_window_set_transient_for(GTK_WINDOW(Dialogue),GTK_WINDOW(WindowGeom));
51 }
52 /*************************************************************************/
read_mopac_input_file(GabeditFileChooser * gabeditFileChooser,gint response_id)53 void read_mopac_input_file(GabeditFileChooser *gabeditFileChooser, gint response_id)
54 {
55 	gchar *fileName=NULL;
56 
57 	if(response_id != GTK_RESPONSE_OK) return;
58  	fileName = gabedit_file_chooser_get_current_file(gabeditFileChooser);
59 	if ((!fileName) || (strcmp(fileName,"") == 0))
60 	{
61 		Message(_("Sorry\n No file selected"),_("Warning"),TRUE);
62 		return ;
63 	}
64 	read_geom_in_mopac_input(fileName);
65 }
66 /*************************************************************************/
read_mpqc_input_file(GabeditFileChooser * gabeditFileChooser,gint response_id)67 void read_mpqc_input_file(GabeditFileChooser *gabeditFileChooser, gint response_id)
68 {
69 	gchar *fileName=NULL;
70 
71 	if(response_id != GTK_RESPONSE_OK) return;
72  	fileName = gabedit_file_chooser_get_current_file(gabeditFileChooser);
73 	if ((!fileName) || (strcmp(fileName,"") == 0))
74 	{
75 		Message(_("Sorry\n No file selected"),_("Warning"),TRUE);
76 		return ;
77 	}
78 	read_geom_in_mpqc_input(fileName);
79 }
80 /*************************************************************************/
read_gauss_input_file(GabeditFileChooser * gabeditFileChooser,gint response_id)81 void read_gauss_input_file(GabeditFileChooser *gabeditFileChooser, gint response_id)
82 {
83 	gchar *NomFichier=NULL;
84 
85 	if(response_id != GTK_RESPONSE_OK) return;
86 	NomFichier = gabedit_file_chooser_get_current_file(gabeditFileChooser);
87 	if ((!NomFichier) || (strcmp(NomFichier,"") == 0))
88 	{
89 		Message(_("Sorry\n No file selected"),_("Warning"),TRUE);
90 		return ;
91 	}
92 
93 	read_geom_in_gauss_input(NomFichier);
94 }
95 /*************************************************************************/
read_molcas_input_file(GabeditFileChooser * gabeditFileChooser,gint response_id)96 void read_molcas_input_file(GabeditFileChooser *gabeditFileChooser, gint response_id)
97 {
98 	gchar *NomFichier=NULL;
99 
100 	if(response_id != GTK_RESPONSE_OK) return;
101 	NomFichier = gabedit_file_chooser_get_current_file(gabeditFileChooser);
102 	if ((!NomFichier) || (strcmp(NomFichier,"") == 0))
103 	{
104 		Message(_("Sorry\n No file selected"),_("Warning"),TRUE);
105 		return ;
106 	}
107 	read_geom_in_molcas_input(NomFichier);
108 }
109 /*************************************************************************/
read_molpro_input_file(GabeditFileChooser * gabeditFileChooser,gint response_id)110 void read_molpro_input_file(GabeditFileChooser *gabeditFileChooser, gint response_id)
111 {
112 	gchar *NomFichier=NULL;
113 
114 	if(response_id != GTK_RESPONSE_OK) return;
115 	NomFichier = gabedit_file_chooser_get_current_file(gabeditFileChooser);
116 	if ((!NomFichier) || (strcmp(NomFichier,"") == 0))
117 	{
118 		Message(_("Sorry\n No file selected"),_("Warning"),TRUE);
119 		return ;
120 	}
121 	read_geom_in_molpro_input(NomFichier);
122 }
123 /*************************************************************************/
selc_all_input_file(gchar * data)124 void selc_all_input_file(gchar *data)
125 {
126 	GtkWidget *gabeditFileChooser;
127 	gchar* patternsfiles[] = {"*.com","*.inp","*.mop","*",NULL};
128 	gchar* temp = NULL;
129 
130 
131 	gabeditFileChooser = gabedit_file_chooser_new(data, GTK_FILE_CHOOSER_ACTION_OPEN);
132 	gabedit_file_chooser_hide_hidden(GABEDIT_FILE_CHOOSER(gabeditFileChooser));
133 
134 	if(WindowGeom) gtk_window_set_transient_for(GTK_WINDOW(gabeditFileChooser),GTK_WINDOW(WindowGeom));
135 	else gtk_window_set_transient_for(GTK_WINDOW(gabeditFileChooser),GTK_WINDOW(Fenetre));
136 	gtk_window_set_modal (GTK_WINDOW (gabeditFileChooser), TRUE);
137 	gabedit_file_chooser_set_filters(GABEDIT_FILE_CHOOSER(gabeditFileChooser),patternsfiles);
138 	if( !strcmp(data,_("Read Geometry from a Mopac input file")) )
139 	{
140 		temp = g_strdup_printf("%s.mop",fileopen.projectname);
141 		gabedit_file_chooser_set_filter(GABEDIT_FILE_CHOOSER(gabeditFileChooser),"*.mop");
142 	}
143 	else
144 		temp = g_strdup_printf("%s.com",fileopen.projectname);
145 	if(!temp) temp = g_strdup_printf("dump.com");
146 	if(lastdirectory)
147 	{
148 		gchar* t = g_strdup_printf("%s%s%s",lastdirectory,G_DIR_SEPARATOR_S,temp);
149 		gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser),t);
150 		g_free(t);
151 		g_free(temp);
152 	}
153 	else
154 	{
155 		if(fileopen.localdir)
156 		{
157 			gchar* t = g_strdup_printf("%s%s%s",fileopen.localdir,G_DIR_SEPARATOR_S,temp);
158 			gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser),t);
159 			g_free(t);
160 			g_free(temp);
161 		}
162 		else
163 		{
164 			gabedit_file_chooser_set_current_file(GABEDIT_FILE_CHOOSER(gabeditFileChooser),temp);
165 			g_free(temp);
166 		}
167 	}
168 
169 	if( !strcmp(data,_("Read Geometry from a Gaussian input file")) )
170   		g_signal_connect (gabeditFileChooser, "response",  G_CALLBACK (read_gauss_input_file), GTK_OBJECT(gabeditFileChooser));
171 	else
172 	if( !strcmp(data,_("Read Geometry from a Molcas input file")) )
173 		g_signal_connect (gabeditFileChooser, "response",  G_CALLBACK (read_molcas_input_file), GTK_OBJECT(gabeditFileChooser));
174   	else
175 	if( !strcmp(data,_("Read Geometry from a Mopac input file")) )
176 		g_signal_connect (gabeditFileChooser, "response",  G_CALLBACK (read_mopac_input_file), GTK_OBJECT(gabeditFileChooser));
177   	else
178 	if( !strcmp(data,_("Read Geometry from a MPQC input file")) )
179 		g_signal_connect (gabeditFileChooser, "response",  G_CALLBACK (read_mpqc_input_file), GTK_OBJECT(gabeditFileChooser));
180 	else
181 		g_signal_connect (gabeditFileChooser, "response",  G_CALLBACK (read_molpro_input_file), GTK_OBJECT(gabeditFileChooser));
182 
183 	g_signal_connect (gabeditFileChooser, "response",  G_CALLBACK (gtk_widget_destroy), GTK_OBJECT(gabeditFileChooser));
184 	gtk_widget_show(gabeditFileChooser);
185 }
186 /*************************************************************************/
create_geomXYZ_interface(GabEditTypeFileGeom readfile)187 void create_geomXYZ_interface (GabEditTypeFileGeom readfile)
188 {
189   GtkWidget *vbox;
190   GtkWidget *hbox;
191   GtkWidget *label;
192   /*GtkWidget *vseparator;*/
193 
194   MethodeGeom = GEOM_IS_XYZ;
195 
196   if( HboxGeom != NULL)
197       gtk_widget_destroy(GTK_WIDGET(HboxGeom) ) ;
198   hbox =create_hbox_true(geominter->vbox);
199   HboxGeom= hbox;
200   FrameGeom = create_frame(geominter->window,hbox,geominter->frametitle);
201 
202   vbox = gtk_vbox_new (FALSE, 0);
203   gtk_widget_show (vbox);
204   gtk_container_add (GTK_CONTAINER (FrameGeom), vbox);
205 
206   hbox =create_hbox_true(vbox);
207   vbox = gtk_vbox_new (FALSE, 0);
208   gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 5);
209   gtk_widget_show (vbox);
210 
211 
212   label = gtk_label_new (_(" XYZ Editor  "));
213   gtk_widget_show (label);
214   gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 2);
215 
216   create_geomXYZ_list(vbox,readfile);
217 
218   /* vseparator = create_vseparator (hbox);*/
219   create_vseparator (hbox);
220   vbox = gtk_vbox_new (FALSE, 0);
221   gtk_widget_show (vbox);
222   gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 5);
223 
224   label = gtk_label_new (_(" VARIABLES Editor "));
225   gtk_widget_show (label);
226   gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 2);
227   create_variablesXYZ_list(vbox,readfile);
228 
229   gtk_widget_show_all (FrameGeom);
230 
231 }
232 /*************************************************************************/
create_geom_interface(GabEditTypeFileGeom readfile)233 void create_geom_interface (GabEditTypeFileGeom readfile)
234 {
235   GtkWidget *vbox;
236   GtkWidget *hbox;
237   GtkWidget *label;
238   /* GtkWidget *vseparator;*/
239 
240   MethodeGeom = GEOM_IS_ZMAT;
241   if( HboxGeom != NULL)
242       gtk_widget_destroy(GTK_WIDGET(HboxGeom) ) ;
243   hbox =create_hbox_true(geominter->vbox);
244 
245   HboxGeom = hbox;
246   FrameGeom = create_frame(geominter->window,hbox,geominter->frametitle);
247 
248   vbox = gtk_vbox_new (FALSE, 0);
249   gtk_widget_show (vbox);
250   gtk_container_add (GTK_CONTAINER (FrameGeom), vbox);
251 
252   hbox =create_hbox_true(vbox);
253 
254   vbox = gtk_vbox_new (FALSE, 0);
255   gtk_widget_show (vbox);
256   gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 5);
257 
258   label = gtk_label_new (_(" Z-MATRIX Editor "));
259   gtk_widget_show (label);
260   gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 2);
261 
262   create_geom_list(vbox,readfile);
263 
264   /* vseparator = create_vseparator (hbox);*/
265   create_vseparator (hbox);
266 
267   vbox = gtk_vbox_new (FALSE, 0);
268   gtk_widget_show (vbox);
269   gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 5);
270 
271   label = gtk_label_new (_(" VARIABLES Editor "));
272   gtk_widget_show (label);
273   gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 2);
274 
275   create_variables_list(vbox,readfile);
276 
277   gtk_widget_show_all (FrameGeom);
278 }
279 /********************************************************************************************************/
traite_geom(GtkComboBox * combobox,gpointer d)280 static void traite_geom(GtkComboBox *combobox, gpointer d)
281 {
282 	GtkTreeIter iter;
283 	gchar* data = NULL;
284 	if (gtk_combo_box_get_active_iter (combobox, &iter))
285 	{
286 		GtkTreeModel* model = gtk_combo_box_get_model(combobox);
287 		gtk_tree_model_get (model, &iter, 0, &data, -1);
288 	}
289 	if(!data) return;
290 	if (!strcmp((char*)data, _("New Z-Matrix geometry")))
291 	create_geom_interface (GABEDIT_TYPEFILEGEOM_NEW);
292 	else
293 	if (!strcmp((char*)data, _("Read Geometry from a Gaussian Z-Matrix file")))
294 	create_geom_interface (GABEDIT_TYPEFILEGEOM_GAUSSIAN_ZMATRIX);
295 	else
296 	if (!strcmp((char*)data, _("Read Geometry from a Mopac Z-Matrix file")))
297 	create_geom_interface (GABEDIT_TYPEFILEGEOM_MOPAC_ZMATRIX);
298 	else
299 	if (!strcmp((char*)data, _("New XYZ geometry")))
300 	create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_NEW);
301 	else
302 	if (!strcmp((char*)data, _("Read Geometry from a XYZ file")))
303 	create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_XYZ);
304 	else
305 	if (!strcmp((char*)data, _("Read Geometry from a MOL2 file")))
306 	create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_MOL2);
307 	else
308 	if (!strcmp((char*)data, _("Read Geometry from a Tinker file")))
309 	create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_TINKER);
310 	else
311 	if (!strcmp((char*)data, _("Read Geometry from a PDB file")))
312 	create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_PDB);
313 	else
314 	if (!strcmp((char*)data, _("Read Geometry from a Hyperchem file")))
315 	create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_HIN);
316 	else
317 	if (!strcmp((char*)data, _("Read the first geometry from a Dalton output file")))
318 	create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_DALTONFIRST);
319 	else
320 	if (!strcmp((char*)data, _("Read the last geometry from a Dalton output file")))
321 	create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_DALTONLAST);
322 	else
323 	if (!strcmp((char*)data, _("Read the first geometry from a Molcas output file")))
324 	create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_MOLCASOUTFIRST);
325 	else
326 	if (!strcmp((char*)data, _("Read the last geometry from a Molcas output file")))
327 	create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_MOLCASOUTLAST);
328 	else
329 	if (!strcmp((char*)data, _("Read the first geometry from a Molpro output file")))
330 	create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_MOLPROOUTFIRST);
331 	else
332 	if (!strcmp((char*)data, _("Read the last geometry from a Molpro output file")))
333 	create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_MOLPROOUTLAST);
334 	else
335 	if (!strcmp((char*)data, _("Read the first geometry from a MPQC output file")))
336 	create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_MPQCOUTFIRST);
337 	else
338 	if (!strcmp((char*)data, _("Read the last geometry from a MPQC output file")))
339 	create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_MPQCOUTLAST);
340 	else
341 	if (!strcmp((char*)data, _("Read the first geometry from a Gaussian output file")))
342 	create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_GAUSSOUTFIRST);
343 	else
344 	if (!strcmp((char*)data, _("Read the last geometry from a Gaussian output file")))
345 	create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_GAUSSOUTLAST);
346 	else
347 	if (!strcmp((char*)data, _("Read Geometry from a Gaussian input file")))
348 	{
349 		selc_all_input_file(data);
350 	}
351 	else
352 	if (!strcmp((char*)data, _("Read Geometry from a Molpro input file")))
353 	{
354 		selc_all_input_file(data);
355 	}
356 	else
357 	if (!strcmp((char*)data, _("Read Geometry from a MPQC input file")))
358 	{
359 		selc_all_input_file(data);
360 	}
361 	else
362 	if (!strcmp((char*)data, _("Read Geometry from a Molcas input file")))
363 	{
364 		selc_all_input_file(data);
365 	}
366 }
367 /********************************************************************************************************/
368 /* only with 2.6.x
369 static gboolean is_separator (GtkTreeModel *model, GtkTreeIter  *iter, gpointer  data)
370 {
371 	gchar* d = NULL;
372 	gtk_tree_model_get (model, iter, 0, &d, -1);
373 
374 	return (d == NULL);
375 }
376 */
377 /********************************************************************************************************/
create_geom(GtkWidget * win,GtkWidget * frame)378 GtkWidget *create_geom(GtkWidget*win,GtkWidget *frame)
379 {
380         GtkTreeIter iter;
381         GtkTreeStore *store;
382 	GtkTreeModel *model;
383 	GtkWidget *combobox;
384 	GtkCellRenderer *renderer;
385   	GtkWidget *hbox;
386   	GtkWidget *vbox;
387   	GtkWidget *hseparator;
388 
389 	vbox =create_vbox(frame);
390 	VboxM[NM]=vbox;
391 	hbox =create_hbox_false(vbox);
392 
393 	store = gtk_tree_store_new (1,G_TYPE_STRING);
394         gtk_tree_store_append (store, &iter, NULL);
395         gtk_tree_store_set (store, &iter, 0, _("Select a option"), -1);
396         gtk_tree_store_append (store, &iter, NULL);
397         gtk_tree_store_set (store, &iter, 0, _("New Z-Matrix geometry"), -1);
398         gtk_tree_store_append (store, &iter, NULL);
399         gtk_tree_store_set (store, &iter, 0, _("New XYZ geometry"), -1);
400 
401 	/* separator */
402 	/* only with 2.6.x
403         gtk_tree_store_append (store, &iter, NULL);
404 	gtk_tree_store_set (store, &iter, 0, NULL, -1);
405 	*/
406 
407         gtk_tree_store_append (store, &iter, NULL);
408         gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a XYZ file"), -1);
409         gtk_tree_store_append (store, &iter, NULL);
410         gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a MOL2 file"), -1);
411         gtk_tree_store_append (store, &iter, NULL);
412         gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a Tinker file"), -1);
413         gtk_tree_store_append (store, &iter, NULL);
414         gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a PDB file"), -1);
415         gtk_tree_store_append (store, &iter, NULL);
416         gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a Hyperchem file"), -1);
417         gtk_tree_store_append (store, &iter, NULL);
418 
419         gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a Gaussian Z-Matrix file"), -1);
420         gtk_tree_store_append (store, &iter, NULL);
421 
422 	/* separator */
423 	/* only with 2.6.x
424         gtk_tree_store_append (store, &iter, NULL);
425 	gtk_tree_store_set (store, &iter, 0, NULL, -1);
426 	*/
427 
428         gtk_tree_store_set (store, &iter, 0, _("Read the first geometry from a Dalton output file"), -1);
429         gtk_tree_store_append (store, &iter, NULL);
430         gtk_tree_store_set (store, &iter, 0, _("Read the last geometry from a Dalton output file"), -1);
431         gtk_tree_store_append (store, &iter, NULL);
432 
433 	/* separator */
434 	/* only with 2.6.x
435         gtk_tree_store_append (store, &iter, NULL);
436 	gtk_tree_store_set (store, &iter, 0, NULL, -1);
437 	*/
438 
439         gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a Gaussian input file"), -1);
440         gtk_tree_store_append (store, &iter, NULL);
441         gtk_tree_store_set (store, &iter, 0, _("Read the first geometry from a Gaussian output file"), -1);
442         gtk_tree_store_append (store, &iter, NULL);
443         gtk_tree_store_set (store, &iter, 0, _("Read the last geometry from a Gaussian output file"), -1);
444         gtk_tree_store_append (store, &iter, NULL);
445 
446 	/* separator */
447 	/* only with 2.6.x
448         gtk_tree_store_append (store, &iter, NULL);
449 	gtk_tree_store_set (store, &iter, 0, NULL, -1);
450 	*/
451 
452         gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a Molcas input file"), -1);
453         gtk_tree_store_append (store, &iter, NULL);
454         gtk_tree_store_set (store, &iter, 0, _("Read the first geometry from a Molcas output file"), -1);
455         gtk_tree_store_append (store, &iter, NULL);
456         gtk_tree_store_set (store, &iter, 0, _("Read the last geometry from a Molcas output file"), -1);
457         gtk_tree_store_append (store, &iter, NULL);
458 
459 	/* separator */
460 	/* only with 2.6.x
461         gtk_tree_store_append (store, &iter, NULL);
462 	gtk_tree_store_set (store, &iter, 0, NULL, -1);
463 	*/
464 
465         gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a Molpro input file"), -1);
466         gtk_tree_store_append (store, &iter, NULL);
467         gtk_tree_store_set (store, &iter, 0, _("Read the first geometry from a Molpro output file"), -1);
468         gtk_tree_store_append (store, &iter, NULL);
469         gtk_tree_store_set (store, &iter, 0, _("Read the last geometry from a Molpro output file"), -1);
470         gtk_tree_store_append (store, &iter, NULL);
471 
472 	/* separator */
473 	/* only with 2.6.x
474         gtk_tree_store_append (store, &iter, NULL);
475 	gtk_tree_store_set (store, &iter, 0, NULL, -1);
476 	*/
477 
478         gtk_tree_store_set (store, &iter, 0, _("Read Geometry from a MPQC input file"), -1);
479         gtk_tree_store_append (store, &iter, NULL);
480         gtk_tree_store_set (store, &iter, 0, _("Read the first geometry from a MPQC output file"), -1);
481         gtk_tree_store_append (store, &iter, NULL);
482         gtk_tree_store_set (store, &iter, 0, _("Read the last geometry from a MPQC output file"), -1);
483 
484         model = GTK_TREE_MODEL (store);
485 	combobox = gtk_combo_box_new_with_model (model);
486 	g_object_unref (model);
487 	g_signal_connect (G_OBJECT(combobox), "changed", G_CALLBACK(traite_geom), NULL);
488 	renderer = gtk_cell_renderer_text_new ();
489 	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE);
490 	gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", 0, NULL);
491 	/* only with 2.6.x
492 	gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combobox), is_separator, NULL, NULL);
493 	*/
494 
495   	gtk_box_pack_start (GTK_BOX (hbox), combobox, TRUE, TRUE, 10);
496 
497 	create_units_option(hbox,_("  Units : "));
498 
499 	hseparator = gtk_hseparator_new ();
500 	gtk_widget_show (hseparator);
501 	gtk_box_pack_start (GTK_BOX (vbox), hseparator, FALSE, FALSE, 1);
502 
503 	return combobox;
504 }
505 /*************************************************************************/
geom_is_open()506 void geom_is_open()
507 {
508      GeomIsOpen = TRUE;
509      TypeGeomOpen = 1;
510 }
511 /*************************************************************************/
geom_is_not_open()512 void geom_is_not_open()
513 {
514      GeomIsOpen = FALSE;
515 }
516 /*************************************************************************/
destroy_geometry(GtkWidget * win)517 void destroy_geometry(GtkWidget *win)
518 {
519      geom_is_not_open();
520      TypeGeomOpen = 0;
521      gtk_widget_destroy(win);
522      WindowGeom = NULL;
523 }
524 /*************************************************************************/
edit_geometry()525 void edit_geometry()
526 {
527   GtkWidget *hbox;
528   GtkWidget *BoiteV;
529   GtkWidget *Frame;
530   GtkWidget *FrameType;
531   GtkWidget *button;
532   GtkWidget *Window;
533   GtkWidget *combobox;
534 
535   if( GeomIsOpen)
536   {
537      if(WindowGeom != NULL)
538      {
539         gtk_widget_hide(WindowGeom);
540         gtk_widget_show(WindowGeom);
541      }
542      return;
543   }
544   geominter=g_malloc(sizeof(GeomInter));
545   geominter->window= gtk_frame_new(NULL);
546   HboxGeom = NULL;
547   WindowGeom = NULL;
548 
549   geom_is_open();
550 
551   Window= gtk_dialog_new ();
552   gtk_window_set_title(&GTK_DIALOG(Window)->window,_("Geometry Editor"));
553   gtk_window_set_transient_for(GTK_WINDOW(Window),GTK_WINDOW(Fenetre));
554   gtk_widget_realize (Window);
555   init_child(Window,destroy_geometry,_(" Geometry Editor "));
556   g_signal_connect(G_OBJECT(Window),"delete_event",(GCallback)destroy_children,NULL);
557 
558   Frame = geominter->window;
559   gtk_container_set_border_width (GTK_CONTAINER (Frame), 10);
560   gtk_container_add(GTK_CONTAINER(GTK_DIALOG(Window)->vbox), Frame);
561 
562   BoiteV = gtk_vbox_new(FALSE, 0);
563   gtk_container_add(GTK_CONTAINER(Frame), BoiteV);
564 
565   hbox =create_hbox_false(BoiteV);
566   FrameType = create_frame(Frame,hbox,_("TYPE"));
567 
568   combobox = create_geom(FrameGeom,FrameType);
569   geominter->vbox=BoiteV;
570   geominter->frametitle=g_strdup(_("GEOMETRY"));
571 
572   gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(Window)->action_area), FALSE);
573   gtk_widget_realize(Window);
574   button = create_button(Window,_("Close"));
575   gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Window)->action_area), button, FALSE, TRUE , 5);
576   g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)destroy_children,GTK_OBJECT(Window));
577 
578  if(GeomXYZ != NULL && MethodeGeom == GEOM_IS_XYZ)
579      create_geomXYZ_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN);
580  if(Geom != NULL && MethodeGeom == GEOM_IS_ZMAT)
581      create_geom_interface (GABEDIT_TYPEFILEGEOM_UNKNOWN);
582   gtk_widget_show_all (Window);
583   WindowGeom = Window;
584   gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
585 }
586 /********************************************************************************************************/
traite_units_option(GtkComboBox * combobox,gpointer d)587 static void traite_units_option(GtkComboBox *combobox, gpointer d)
588 {
589 	GtkTreeIter iter;
590 	guint OldUnits = Units;
591 	gchar* data = NULL;
592 	if (gtk_combo_box_get_active_iter (combobox, &iter))
593 	{
594 		GtkTreeModel* model = gtk_combo_box_get_model(combobox);
595 		gtk_tree_model_get (model, &iter, 0, &data, -1);
596 	}
597 	if(!data) return;
598 	if (!strcmp((char*)data, _("Angstrom"))) Units = 1;
599 	else if (!strcmp((char*)data, _("Bohr"))) Units = 0;
600 
601 	if(GeomDrawingArea != NULL && OldUnits != Units) rafresh_drawing();
602 }
603 /********************************************************************************************************/
create_units_option(GtkWidget * hbox,gchar * tlabel)604 void create_units_option(GtkWidget *hbox,gchar *tlabel)
605 {
606         GtkTreeIter iter;
607         GtkTreeStore *store;
608 	GtkTreeModel *model;
609 	GtkWidget *combobox;
610 	GtkCellRenderer *renderer;
611 	GtkWidget *label;
612 
613 	label = gtk_label_new (tlabel);
614 	gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
615 	gtk_widget_show (label);
616 
617 	store = gtk_tree_store_new (1,G_TYPE_STRING);
618 
619 	if(Units == 1 )
620 	{
621         	gtk_tree_store_append (store, &iter, NULL);
622         	gtk_tree_store_set (store, &iter, 0, _("Angstrom"), -1);
623         	gtk_tree_store_append (store, &iter, NULL);
624         	gtk_tree_store_set (store, &iter, 0, _("Bohr"), -1);
625 	}
626 	else
627 	{
628         	gtk_tree_store_append (store, &iter, NULL);
629         	gtk_tree_store_set (store, &iter, 0, _("Bohr"), -1);
630         	gtk_tree_store_append (store, &iter, NULL);
631         	gtk_tree_store_set (store, &iter, 0, _("Angstrom"), -1);
632 	}
633 
634 
635         model = GTK_TREE_MODEL (store);
636 	combobox = gtk_combo_box_new_with_model (model);
637 	g_object_unref (model);
638 	g_signal_connect (G_OBJECT(combobox), "changed", G_CALLBACK(traite_units_option), NULL);
639 	renderer = gtk_cell_renderer_text_new ();
640 	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE);
641 	gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", 0, NULL);
642 	gtk_widget_set_size_request(GTK_WIDGET(combobox), -1, 25 );
643   	gtk_box_pack_start (GTK_BOX (hbox), combobox, TRUE, TRUE, 10);
644         gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
645 }
646 /*************************************************************************/
read_file(GabeditFileChooser * selecFile,gint response_id)647 static void read_file(GabeditFileChooser *selecFile, gint response_id)
648 {
649 	gchar *fileName;
650 	GabEditTypeFile fileType = GABEDIT_TYPEFILE_UNKNOWN;
651 
652 	if(response_id != GTK_RESPONSE_OK) return;
653  	fileName = gabedit_file_chooser_get_current_file(selecFile);
654 	gtk_widget_hide(GTK_WIDGET(selecFile));
655 	while( gtk_events_pending() ) gtk_main_iteration();
656 
657 	fileType = get_type_file(fileName);
658 	if(fileType == GABEDIT_TYPEFILE_HIN) read_hin_file(selecFile, response_id);
659 	else if(fileType == GABEDIT_TYPEFILE_XYZ) read_XYZ_file(selecFile, response_id);
660 	else if(fileType == GABEDIT_TYPEFILE_GABEDIT) read_gabedit_file(selecFile, response_id);
661 	else if(fileType == GABEDIT_TYPEFILE_MPQC) read_last_mpqc_file(selecFile, response_id);
662 	else if(fileType == GABEDIT_TYPEFILE_DALTON) read_last_dalton_file(selecFile, response_id);
663 	else if(fileType == GABEDIT_TYPEFILE_GAUSSIAN) read_last_gaussian_file(selecFile, response_id);
664 	else if(fileType == GABEDIT_TYPEFILE_MOLPRO) read_last_molpro_file(selecFile, response_id);
665 	else if(fileType == GABEDIT_TYPEFILE_GAMESS) read_last_gamess_file(selecFile, response_id);
666 	else if(fileType == GABEDIT_TYPEFILE_FIREFLY) read_last_gamess_file(selecFile, response_id);
667 	else if(fileType == GABEDIT_TYPEFILE_MOLCAS) read_last_molcas_file(selecFile, response_id);
668 	else if(fileType == GABEDIT_TYPEFILE_MOLPRO) read_last_molpro_file(selecFile, response_id);
669 	else if(fileType == GABEDIT_TYPEFILE_ORCA) read_last_orca_file(selecFile, response_id);
670 	else if(fileType == GABEDIT_TYPEFILE_QCHEM) read_last_qchem_file(selecFile, response_id);
671 	else if(fileType == GABEDIT_TYPEFILE_NWCHEM) read_last_nwchem_file(selecFile, response_id);
672 	else if(fileType == GABEDIT_TYPEFILE_MOPAC) read_last_mopac_output_file(selecFile, response_id);
673 	else if(fileType == GABEDIT_TYPEFILE_MOPAC_AUX) read_last_mopac_aux_file(selecFile, response_id);
674 	else if(fileType == GABEDIT_TYPEFILE_MOPAC_SCAN) read_geometries_conv_mopac_scan(selecFile, response_id);
675 	else if(fileType == GABEDIT_TYPEFILE_MOPAC_IRC) read_geometries_conv_mopac_irc(selecFile, response_id);
676 	else if(fileType == GABEDIT_TYPEFILE_MOL2) read_mol2_file(selecFile, response_id);
677 	else if(fileType == GABEDIT_TYPEFILE_TINKER) read_tinker_file(selecFile, response_id);
678 	else if(fileType == GABEDIT_TYPEFILE_PDB) read_pdb_file(selecFile, response_id);
679 	else if(fileType == GABEDIT_TYPEFILE_GZMAT) read_ZMatrix_file(selecFile, response_id);
680 	else if(fileType == GABEDIT_TYPEFILE_MZMAT) read_ZMatrix_mopac_file(selecFile, response_id);
681 	else if(fileType == GABEDIT_TYPEFILE_GAUSSIANINPUT) read_gauss_input_file(selecFile, response_id);
682 	else if(fileType == GABEDIT_TYPEFILE_MOLCASINPUT) read_molcas_input_file(selecFile, response_id);
683 	else if(fileType == GABEDIT_TYPEFILE_MOLPROINPUT) read_molpro_input_file(selecFile, response_id);
684 	else if(fileType == GABEDIT_TYPEFILE_MOPACINPUT) read_mopac_input_file(selecFile, response_id);
685 	else if(fileType == GABEDIT_TYPEFILE_MPQCINPUT) read_mpqc_input_file(selecFile, response_id);
686 	else if(fileType == GABEDIT_TYPEFILE_GAMESSIRC) read_geometries_irc_gamess(selecFile, response_id);
687 	else if(fileType == GABEDIT_TYPEFILE_GAUSSIAN_FCHK) read_fchk_gaussian_file(selecFile, response_id);
688 	else
689 	{
690 		Message(
691 			_("Sorry, I cannot read this file\n")
692 			,_("Error"),TRUE);
693 	}
694 }
695 /********************************************************************************/
read_geom_any_file_dlg()696 void read_geom_any_file_dlg()
697 {
698 	GtkWidget* filesel =
699  	file_chooser_open(read_file, _("Read geometries"), GABEDIT_TYPEFILE_UNKNOWN,GABEDIT_TYPEWIN_ORB);
700 	gtk_window_set_modal (GTK_WINDOW (filesel), TRUE);
701 }
702