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(>K_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