1 /* ListeFiles.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 #include "../../Config.h"
21 #include <stdlib.h>
22 #include "../Common/Global.h"
23 
24 #ifdef G_OS_WIN32
25 #include <winsock.h>
26 #else
27 #include <unistd.h>
28 #endif /* G_OS_WIN32 */
29 
30 
31 #include "../Utils/Utils.h"
32 #include "../Utils/UtilsInterface.h"
33 #include "../Utils/Constants.h"
34 #include "../Utils/GabeditTextEdit.h"
35 #include "../Geometry/GeomGlobal.h"
36 #include "../Geometry/GeomXYZ.h"
37 #include "../Geometry/ResultsAnalise.h"
38 #include "../Geometry/EnergiesCurves.h"
39 #include "../Common/Windows.h"
40 #include "../Geometry/GeomZmatrix.h"
41 #include "../Common/Run.h"
42 #include "../Common/Status.h"
43 #include "../Molcas/MolcasVariables.h"
44 #include "../Molcas/MolcasGateWay.h"
45 #include "../../pixmaps/DeMonMini.xpm"
46 #include "../../pixmaps/GamessMini.xpm"
47 #include "../../pixmaps/FireFlyMini.xpm"
48 #include "../../pixmaps/Gaussian.xpm"
49 #include "../../pixmaps/MolproMini.xpm"
50 #include "../../pixmaps/MolcasMini.xpm"
51 #include "../../pixmaps/MPQCMini.xpm"
52 #include "../../pixmaps/NWChemMini.xpm"
53 #include "../../pixmaps/PsicodeMini.xpm"
54 #include "../../pixmaps/OrcaMini.xpm"
55 #include "../../pixmaps/QChemMini.xpm"
56 #include "../../pixmaps/MopacMini.xpm"
57 #include "../../pixmaps/GabeditMini.xpm"
58 #include "../../pixmaps/Book_close.xpm"
59 #include "../../pixmaps/Page.xpm"
60 
61 #include "../Common/StockIcons.h"
62 #include "../Files/ListeFiles.h"
63 
64 static GdkPixbuf *demonPixbuf = NULL;
65 static GdkPixbuf *gamessPixbuf = NULL;
66 static GdkPixbuf *gaussianPixbuf = NULL;
67 static GdkPixbuf *molcasPixbuf = NULL;
68 static GdkPixbuf *molproPixbuf = NULL;
69 static GdkPixbuf *mpqcPixbuf = NULL;
70 static GdkPixbuf *fireflyPixbuf = NULL;
71 static GdkPixbuf *nwchemPixbuf = NULL;
72 static GdkPixbuf *psicodePixbuf = NULL;
73 static GdkPixbuf *orcaPixbuf = NULL;
74 static GdkPixbuf *qchemPixbuf = NULL;
75 static GdkPixbuf *mopacPixbuf = NULL;
76 static GdkPixbuf *gabeditPixbuf = NULL;
77 static GdkPixbuf *bookPixbuf = NULL;
78 static GdkPixbuf *pagePixbuf = NULL;
79 
80 typedef enum
81 {
82   LIST_PIXBUF = 0,
83   LIST_NAME,
84   LIST_NODE_FOREGROUND_COLOR, /* this column is not visible */
85   LIST_DATA /* column for data, this column is not visible */
86 }ListColumnsTypes;
87 
88 
89 static DataTree** AllFiles=NULL;
90 static int Nfiles = 0;
91 static GtkWidget *checkbutton[NBNOD];
92 /*static  GtkTooltips *GroupeHelp = NULL;*/
93 static gboolean popupshow = FALSE;
94 
95 #define NL 3
96 static GtkWidget *LocalLabel[NL];
97 #define NR 3
98 static GtkWidget *RemoteLabel[NR];
99 static gchar selectedRow[100] = "-1";
100 
101 /********************************************************************************/
102 static GtkTreeIter* CreeNoeud(GtkTreeView* , gchar *);
103 void CreeFeuille(GtkWidget *treeView, GtkTreeIter *parent,gchar* projectname,gchar*datafile,gchar* localdir,
104 				  gchar* remotehost,gchar* remoteuser,gchar* remotepass,gchar* remotedir,gint itype, gchar* command, GabEditNetWork netWorkProtocol);
105 static void AddFeuille(GtkTreeView *treeView, GtkTreeIter *parent, DataTree *pfd);
106 static void tree_data_destroy (DataTree* pfd);
107 static void  create_window_list_to_clear();
108 static void clear_one_project();
109 static void create_set_dialogue_window();
110 static DataTree* tree_data_new (gchar *projectname,gchar* datafile,gchar* localdir,
111 		gchar* remotehost,gchar* remoteuser,gchar* remotepass,gchar* remotedir,gint itype, gchar* command, GabEditNetWork netWorkProtocol);
112 static void create_remote_frame_popup(GtkWidget *hbox,DataTree* data);
113 static void create_local_frame_popup(GtkWidget *hbox,DataTree* data);
114 static void create_info_win();
115 
116 /********************************************************************************/
set_pixbuf()117 static void set_pixbuf()
118 {
119 	if(!demonPixbuf) demonPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) demon_mini_xpm);
120 	if(!gamessPixbuf) gamessPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) gamess_mini_xpm);
121 	if(!gaussianPixbuf) gaussianPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) gaussian_xpm);
122 	if(!molcasPixbuf) molcasPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) molcas_mini_xpm);
123 	if(!molproPixbuf) molproPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) molpro_mini_xpm);
124 	if(!mpqcPixbuf) mpqcPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) mpqc_mini_xpm);
125 	if(!nwchemPixbuf) nwchemPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) nwchem_mini_xpm);
126 	if(!psicodePixbuf) psicodePixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) psicode_mini_xpm);
127 	if(!orcaPixbuf) orcaPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) orca_mini_xpm);
128 	if(!qchemPixbuf) qchemPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) qchem_mini_xpm);
129 	if(!mopacPixbuf) mopacPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) mopac_mini_xpm);
130 	if(!gabeditPixbuf) gabeditPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) gabedit_mini_xpm);
131 	if(!fireflyPixbuf) fireflyPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) firefly_mini_xpm);
132 	if(!bookPixbuf) bookPixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) book_close_xpm);
133 	if(!pagePixbuf) pagePixbuf = gdk_pixbuf_new_from_xpm_data ((const char **) page_xpm);
134 }
135 /********************************************************************************/
set_sensitive_option(GtkUIManager * manager,gchar * path,gboolean sensitive)136 static void set_sensitive_option(GtkUIManager *manager, gchar* path, gboolean sensitive)
137 {
138 	GtkWidget *wid = gtk_ui_manager_get_widget (manager, path);
139 	if(GTK_IS_WIDGET(wid)) gtk_widget_set_sensitive(wid, sensitive);
140 }
141 /**********************************************************************************/
show_menu_popup(GtkUIManager * manager,guint button,guint32 time)142 static gboolean show_menu_popup(GtkUIManager *manager, guint button, guint32 time)
143 {
144 	GtkWidget *menu = gtk_ui_manager_get_widget (manager, "/MenuRecentProjects");
145 	if (GTK_IS_MENU (menu))
146 	{
147 		gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, time);
148 		return TRUE;
149 	}
150 	return FALSE;
151 }
152 /*********************************************************************************************************************/
activate_action(GtkAction * action)153 static void activate_action (GtkAction *action)
154 {
155 	const gchar *name = gtk_action_get_name (action);
156 	if(!strcmp(name, "Info")) create_info_win();
157 	else if(!strcmp(name, "Cut")) clear_one_project();
158 	else if(!strcmp(name, "Set")) create_set_dialogue_window();
159 	else if(!strcmp(name, "ClearNodes")) create_window_list_to_clear();
160 	else if(!strcmp(name, "Save")) parse_liste_files();
161 }
162 /*--------------------------------------------------------------------*/
163 static GtkActionEntry gtkActionEntries[] =
164 {
165 	{"Info", GABEDIT_STOCK_INFO, N_("_Info"), NULL, "Info", G_CALLBACK (activate_action) },
166 	{"Cut", GABEDIT_STOCK_CUT, N_("_Cut"), NULL, "Cut", G_CALLBACK (activate_action) },
167 	{"Set", NULL, "_Set", NULL, N_("Set"), G_CALLBACK (activate_action) },
168 	{"ClearNodes", NULL, N_("Clear _nodes"), NULL, "Clear nodes", G_CALLBACK (activate_action) },
169 	{"Save", GABEDIT_STOCK_SAVE, N_("_Save list of projects"), NULL, "Save list of projects", G_CALLBACK (activate_action) },
170 };
171 static guint numberOfGtkActionEntries = G_N_ELEMENTS (gtkActionEntries);
172 /********************************************************************************/
173 /* XML description of the menus for the test app.  The parser understands
174  * a subset of the Bonobo UI XML format, and uses GMarkup for parsing */
175 static const gchar *uiMenuInfo =
176 "  <popup name=\"MenuRecentProjects\">\n"
177 "    <separator name=\"sepMenuPopNew\" />\n"
178 "    <menuitem name=\"Info\" action=\"Info\" />\n"
179 "    <menuitem name=\"Cut\" action=\"Cut\" />\n"
180 "    <menuitem name=\"Set\" action=\"Set\" />\n"
181 "    <separator name=\"sepMenuPopNodes\" />\n"
182 "    <menuitem name=\"ClearNodes\" action=\"ClearNodes\" />\n"
183 "    <separator name=\"sepMenuPopSave\" />\n"
184 "    <menuitem name=\"Save\" action=\"Save\" />\n"
185 "  </popup>\n"
186 ;
187 /*******************************************************************************************************************************/
create_menu(GtkWidget * win)188 static GtkUIManager *create_menu(GtkWidget* win)
189 {
190 	GtkActionGroup *actionGroup = NULL;
191 	GtkUIManager *manager = NULL;
192 	GError *error = NULL;
193 
194   	manager = gtk_ui_manager_new ();
195   	g_signal_connect_swapped (win, "destroy", G_CALLBACK (g_object_unref), manager);
196 
197 	actionGroup = gtk_action_group_new ("GabeditListOfProject");
198 	gtk_action_group_set_translation_domain(actionGroup,GETTEXT_PACKAGE);
199 	gtk_action_group_add_actions (actionGroup, gtkActionEntries, numberOfGtkActionEntries, NULL);
200 
201   	gtk_ui_manager_insert_action_group (manager, actionGroup, 0);
202 
203   	gtk_window_add_accel_group (GTK_WINDOW (win), gtk_ui_manager_get_accel_group (manager));
204 	if (!gtk_ui_manager_add_ui_from_string (manager, uiMenuInfo, -1, &error))
205 	{
206 		g_message ("building menus failed: %s", error->message);
207 		g_error_free (error);
208 	}
209 	return manager;
210 }
211 /********************************************************************************/
set_fileopen(DataTree * data)212 static void set_fileopen(DataTree* data)
213 {
214 	if(fileopen.projectname) g_free(fileopen.projectname);
215 	if(fileopen.localdir) g_free(fileopen.localdir);
216 	if(fileopen.datafile) g_free(fileopen.datafile);
217 	if(fileopen.outputfile) g_free(fileopen.outputfile);
218 	if(fileopen.logfile) g_free(fileopen.logfile);
219 	if(fileopen.moldenfile) g_free(fileopen.moldenfile);
220 
221 	fileopen.projectname=g_strdup(data->projectname);
222 	fileopen.datafile=g_strdup(data->datafile);
223 	fileopen.localdir=g_strdup(data->localdir);
224 
225 	if(data->itype == PROG_IS_MOLCAS)
226 	{
227  		fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname);
228  		fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname);
229   		/* fileopen.moldenfile=g_strdup_printf("%s.molden",fileopen.projectname);*/
230   		fileopen.moldenfile=g_strdup_printf("'%s.*.molden'", fileopen.projectname);
231 	}
232 	else if(data->itype == PROG_IS_MOLPRO)
233 	{
234  		fileopen.outputfile=g_strdup_printf("%s.out",fileopen.projectname);
235  		fileopen.logfile=g_strdup_printf("%s.log",fileopen.projectname);
236   		fileopen.moldenfile=g_strdup_printf("%s.molden",fileopen.projectname);
237 	}
238 	else if(data->itype == PROG_IS_GAUSS)
239 	{
240  		fileopen.outputfile = g_strdup_printf("%s.log",fileopen.projectname);
241  		fileopen.logfile = g_strdup_printf("%s.log",fileopen.projectname);
242   		fileopen.moldenfile=g_strdup_printf("%s.log",fileopen.projectname);
243 	}
244 	else if(data->itype == PROG_IS_MPQC)
245 	{
246  		fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname);
247  		fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname);
248   		fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname);
249 	}
250 	else if(data->itype == PROG_IS_ORCA)
251 	{
252  		fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname);
253  		fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname);
254   		fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname);
255 	}
256 	else if(data->itype == PROG_IS_QCHEM)
257 	{
258  		fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname);
259  		fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname);
260   		fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname);
261 	}
262 	else if(data->itype == PROG_IS_NWCHEM)
263 	{
264  		fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname);
265  		fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname);
266   		fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname);
267 	}
268 	else if(data->itype == PROG_IS_PSICODE)
269 	{
270  		fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname);
271  		fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname);
272   		fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname);
273 	}
274 	else if(data->itype == PROG_IS_MOPAC)
275 	{
276  		fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname);
277  		fileopen.logfile = g_strdup_printf("%s.aux",fileopen.projectname);
278   		fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname);
279 	}
280 	else if(data->itype == PROG_IS_FIREFLY)
281 	{
282  		fileopen.outputfile = g_strdup_printf("%s.log",fileopen.projectname);
283  		fileopen.logfile = g_strdup_printf("%s.log",fileopen.projectname);
284   		fileopen.moldenfile=g_strdup_printf("%s.log",fileopen.projectname);
285 	}
286 	else if(data->itype == PROG_IS_DEMON)
287 	{
288  		fileopen.outputfile = g_strdup_printf("%s.out",fileopen.projectname);
289  		fileopen.logfile = g_strdup_printf("%s.out",fileopen.projectname);
290   		fileopen.moldenfile=g_strdup_printf("%s.out",fileopen.projectname);
291 	}
292 	else if(data->itype == PROG_IS_GAMESS)
293 	{
294  		fileopen.outputfile = g_strdup_printf("%s.log",fileopen.projectname);
295  		fileopen.logfile = g_strdup_printf("%s.log",fileopen.projectname);
296   		fileopen.moldenfile=g_strdup_printf("%s.log",fileopen.projectname);
297 	}
298 	else
299 	{
300  		fileopen.outputfile = g_strdup_printf("unknown");
301  		fileopen.logfile = g_strdup_printf("unknown");
302  		fileopen.moldenfile = g_strdup_printf("unknown");
303 	}
304 
305 	fileopen.remotehost = g_strdup(data->remotehost);
306 	fileopen.remoteuser = g_strdup(data->remoteuser);
307 	fileopen.remotepass = g_strdup(data->remotepass);
308 	fileopen.remotedir = g_strdup(data->remotedir);
309   	fileopen.command=g_strdup(data->command);
310 	fileopen.netWorkProtocol = data->netWorkProtocol;
311 
312 
313 	if(lastdirectory) g_free(lastdirectory);
314 	lastdirectory = g_strdup(fileopen.localdir);
315 }
316 /********************************************************************************/
set_properties(GtkWidget * Win,gpointer data)317 static void set_properties(GtkWidget *Win,gpointer data)
318 {
319 	DataTree*  newdata = NULL;
320 	DataTree*  olddata = (DataTree*)(g_object_get_data(G_OBJECT(Win),"Data"));
321 	GtkWidget **entrys = (GtkWidget **)(g_object_get_data(G_OBJECT(Win),"Entrys"));
322 	GtkWidget **buttons =(GtkWidget **)(g_object_get_data(G_OBJECT(Win),"Buttons"));
323 
324 	GtkWidget * buttonSsh = g_object_get_data(G_OBJECT(Win),"ButtonSsh");
325 	/*
326 	GtkWidget * buttonFtpRsh = g_object_get_data(G_OBJECT(Win),"ButtonFtpRsh");
327 	*/
328 
329 	gchar* remotehost = NULL;
330 	gchar* remoteuser = NULL;
331 	gchar* remotepass = NULL;
332 	gchar* remotedir  = NULL;
333 	GabEditNetWork netWorkProtocol ;
334 
335 
336 	if (GTK_TOGGLE_BUTTON (buttons[0])->active)
337 	{
338 		remotehost = g_strdup("");
339 		remoteuser = g_strdup("");
340 		remotepass  = g_strdup("");
341 		remotedir  = g_strdup("");
342 	}
343 	else
344 	{
345 		remotehost = g_strdup(gtk_entry_get_text(GTK_ENTRY(entrys[0])));
346 		remoteuser = g_strdup(gtk_entry_get_text(GTK_ENTRY(entrys[1])));
347 		remotepass = g_strdup(gtk_entry_get_text(GTK_ENTRY(entrys[2])));
348 		remotedir  = g_strdup(gtk_entry_get_text(GTK_ENTRY(entrys[3])));
349 	}
350 	if (GTK_TOGGLE_BUTTON (buttonSsh)->active) netWorkProtocol = GABEDIT_NETWORK_SSH;
351 	else netWorkProtocol = GABEDIT_NETWORK_FTP_RSH;
352 
353 
354    	newdata = tree_data_new (
355 			olddata->projectname,olddata->datafile,olddata->localdir,
356 			remotehost,remoteuser,remotepass,remotedir,
357 			olddata->itype, olddata->command, netWorkProtocol);
358 	if(remotehost) g_free(remotehost);
359 	if(remoteuser) g_free(remoteuser);
360 	if(remotepass) g_free(remotepass);
361 	if(remotedir) g_free(remotedir);
362 
363 	clear_one_project();
364 	AddFeuille(GTK_TREE_VIEW(treeViewProjects),noeud[newdata->itype],newdata);
365    	if(Nfiles==0)
366       		AllFiles = g_malloc(sizeof(DataTree*));
367     	else
368       		AllFiles = (DataTree**)g_realloc(AllFiles,(Nfiles+1)*sizeof(DataTree*));
369     Nfiles++;
370     AllFiles[Nfiles-1] = newdata;
371 	if(  strcmp(fileopen.projectname,newdata->projectname)==0
372 	  && strcmp(fileopen.localdir,newdata->localdir)==0
373 	  )
374 	{
375 		set_fileopen(newdata);
376  		change_all_labels();
377 	}
378 }
379 /********************************************************************************/
set_password_visibility(GtkWidget * button,gpointer data)380 static void set_password_visibility(GtkWidget *button,gpointer data)
381 {
382 	GtkWidget * entryPassWord = g_object_get_data(G_OBJECT (button), "EntryPassWord");
383 	GtkWidget * label1PassWord = g_object_get_data(G_OBJECT (button), "Label1PassWord");
384 	GtkWidget * label2PassWord = g_object_get_data(G_OBJECT (button), "Label2PassWord");
385 
386 	if (GTK_TOGGLE_BUTTON (button)->active)
387 	{
388 		gboolean Ok = FALSE;
389 		if(data != NULL ) Ok = TRUE;
390 
391 		gtk_widget_set_sensitive(entryPassWord, Ok);
392 		gtk_widget_set_sensitive(label1PassWord, Ok);
393 		gtk_widget_set_sensitive(label2PassWord, Ok);
394 	}
395 }
396 /********************************************************************************/
set_frame_remote_sensitive(GtkWidget * button,gpointer data)397 static void set_frame_remote_sensitive(GtkWidget *button,gpointer data)
398 {
399 	GtkWidget *FrameRemote = GTK_WIDGET(g_object_get_data(G_OBJECT(button),"FrameRemote"));
400 	GtkWidget *FrameNetWork = GTK_WIDGET(g_object_get_data(G_OBJECT(button),"FrameNetWork"));
401 	if (GTK_TOGGLE_BUTTON (button)->active)
402 	{
403 		gboolean Ok = FALSE;
404 		if(data != NULL ) Ok = TRUE;
405 
406 		gtk_widget_set_sensitive(FrameRemote, Ok);
407 		gtk_widget_set_sensitive(FrameNetWork, Ok);
408 
409 	}
410 }
411 /********************************************************************************/
changed_user(GtkWidget * combo,gpointer data)412 static void changed_user(GtkWidget *combo,gpointer data)
413 {
414 	GtkWidget **entry = (GtkWidget **)data;
415 	gint nlistdir = 1;
416 	G_CONST_RETURN gchar *hostname;
417 	G_CONST_RETURN gchar *username;
418 	gint numhost = -1;
419 	gint numuser = -1;
420 	GtkWidget* combodir = NULL;
421 	gint i;
422 	gint j;
423         GList *glist = NULL;
424 
425         if(!this_is_an_object((GtkObject*)entry[0]))
426 		return;
427         if(!this_is_an_object((GtkObject*)entry[1]))
428 		return;
429         if(!this_is_an_object((GtkObject*)entry[3]))
430 		return;
431 
432 	hostname = gtk_entry_get_text(GTK_ENTRY(entry[0]));
433 
434 	username = gtk_entry_get_text(GTK_ENTRY(entry[1]));
435 
436 	combodir = g_object_get_data(G_OBJECT (entry[3]), "Combo");
437 
438         if(!combodir)
439 		return;
440 
441 	if(recenthosts.nhosts>0)
442   	{
443 		for(i=0;i<recenthosts.nhosts;i++)
444   			if(strcmp(hostname,recenthosts.hosts[i].hostname) == 0)
445 			{
446 				numhost = i;
447 				for(j=0;j<recenthosts.hosts[numhost].nusers;j++)
448   					if(strcmp(username,recenthosts.hosts[i].users[j].username) == 0)
449 					{
450 						numuser = j;
451 						break;
452 					}
453 
454 				break;
455 			}
456 		if(numhost<0)
457 			return;
458 		if(numuser<0)
459 			return;
460 
461         	nlistdir = recenthosts.hosts[numhost].users[numuser].ndirs;
462 		for(i=0;i<nlistdir;i++)
463   			glist = g_list_append(glist,recenthosts.hosts[numhost].users[numuser].dirs[i]);
464   	}
465   	else
466 		return;
467 
468 
469         gtk_combo_box_entry_set_popdown_strings( combodir, glist) ;
470 
471 
472 	g_list_free(glist);
473 }
474 /********************************************************************************/
changed_host(GtkWidget * combo,gpointer data)475 static void changed_host(GtkWidget *combo,gpointer data)
476 {
477 	GtkWidget **entry = (GtkWidget **)data;
478 	gint nlistuser = 1;
479 	G_CONST_RETURN gchar *hostname;
480 	gint numhost = -1;
481 	GtkWidget* combouser = NULL;
482 	gint i;
483         GList *glist = NULL;
484 
485 	hostname = gtk_entry_get_text(GTK_ENTRY(entry[0]));
486         if(!this_is_an_object((GtkObject*)entry[1]))
487 		return;
488 	combouser = g_object_get_data(G_OBJECT (entry[1]), "Combo");
489         if(!combouser)
490 		return;
491 	if(recenthosts.nhosts>0)
492   	{
493 		for(i=0;i<recenthosts.nhosts;i++)
494   			if(strcmp(hostname,recenthosts.hosts[i].hostname) == 0)
495 			{
496 				numhost = i;
497 				break;
498 			}
499 		if(numhost<0)
500 			return;
501 
502         	nlistuser = recenthosts.hosts[numhost].nusers;
503 		for(i=0;i<recenthosts.hosts[numhost].nusers;i++)
504 		glist = g_list_append(glist,recenthosts.hosts[numhost].users[i].username);
505   	}
506   	else
507 		return;
508 
509 
510   	for (i=0;i<nlistuser;i++)
511         	gtk_combo_box_entry_set_popdown_strings( combouser, glist) ;
512 
513 
514 	g_list_free(glist);
515 }
516 /********************************************************************************/
create_info_win()517 static void create_info_win()
518 {
519 	gchar *title = g_strdup_printf(_("Properties of project"));
520 	GtkWidget *fp;
521 	GtkWidget *vboxwin;
522 	GtkWidget *hbox = NULL;
523 	GtkWidget *button = NULL;
524 	GtkTreeIter node;
525 	GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeViewProjects));
526    	DataTree* data = NULL;
527 
528 	if(atoi(selectedRow)<0) return;
529 	if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return;
530 	gtk_tree_model_get (model, &node, LIST_DATA, &data, -1);
531 
532 	if(!data) return;
533 
534 	fp = gtk_window_new (GTK_WINDOW_TOPLEVEL);
535   	gtk_window_set_title(GTK_WINDOW(fp),title);
536   	gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER);
537   	gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Fenetre));
538 
539 	vboxwin = create_vbox(fp);
540         gtk_widget_realize(fp);
541   	init_child(fp,gtk_widget_destroy,_(" Prop. of project "));
542 	g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)destroy_children,NULL);
543 
544 	hbox = gtk_hbox_new(0,FALSE);
545 	gtk_box_pack_start (GTK_BOX(vboxwin),hbox , TRUE, TRUE, 2);
546         gtk_widget_show(hbox);
547 	create_local_frame_popup(hbox,data);
548 	create_remote_frame_popup(hbox,data);
549    	create_hseparator(vboxwin);
550 	/* OK bouton box */
551 	hbox = create_hbox(vboxwin);
552   	gtk_box_set_homogeneous (GTK_BOX(hbox), FALSE);
553 	button = create_button(fp,"OK");
554 	gtk_box_pack_end (GTK_BOX( hbox), button, FALSE, FALSE, 3);
555 	GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
556 	gtk_widget_grab_default(button);
557 
558 	g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)destroy_children,GTK_OBJECT(fp));
559         gtk_widget_show_all(fp);
560 }
561 /********************************************************************************/
create_set_dialogue_window()562 static void create_set_dialogue_window()
563 {
564 	GtkWidget *fp;
565 	GtkWidget *frame;
566 	GtkWidget *vboxall;
567 	GtkWidget *vboxwin;
568 	GtkWidget *hbox;
569 	GtkWidget *button;
570 	GtkWidget **entrys;
571 	GtkWidget **buttons;
572 	GtkWidget *FrameRemote = NULL;
573 	GtkWidget *FrameNetWork = NULL;
574 	gchar *title = g_strdup_printf(_("Set properties of project"));
575 	GtkWidget *ButtonFtpRsh;
576 	GtkWidget *ButtonSsh;
577 	GtkWidget *label1PassWord;
578 	GtkWidget *label2PassWord;
579 
580 	GtkTreeIter node;
581 	GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeViewProjects));
582    	DataTree* data = NULL;
583 
584 	if(atoi(selectedRow)<0) return;
585 	if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return;
586 	gtk_tree_model_get (model, &node, LIST_DATA, &data, -1);
587 
588 	if(!data) return;
589 
590 	entrys = g_malloc(4*sizeof(GtkWidget *));
591 	buttons = g_malloc(2*sizeof(GtkWidget *));
592 
593   	/* Principal Window */
594   	fp = gtk_window_new(GTK_WINDOW_TOPLEVEL);
595   	gtk_window_set_title(GTK_WINDOW(fp),title);
596   	gtk_window_set_position(GTK_WINDOW(fp),GTK_WIN_POS_CENTER);
597   	gtk_window_set_transient_for(GTK_WINDOW(fp),GTK_WINDOW(Fenetre));
598 
599   	gtk_widget_realize(fp);
600   	init_child(fp,gtk_widget_destroy,_(" Prop. of project "));
601 	g_signal_connect(G_OBJECT(fp),"delete_event",(GCallback)destroy_children,NULL);
602 
603 	gtk_container_set_border_width (GTK_CONTAINER (fp), 5);
604 	vboxall = create_vbox(fp);
605 	vboxwin = vboxall;
606 
607 	frame = gtk_frame_new (NULL);
608 	gtk_container_set_border_width (GTK_CONTAINER (frame), 5);
609 	gtk_frame_set_shadow_type( GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT);
610 	gtk_container_add(GTK_CONTAINER(vboxall),frame);
611 	gtk_widget_show (frame);
612 
613 	vboxall = create_vbox(frame);
614 
615 	hbox = create_hbox(vboxall);
616 
617 	/* server frame */
618 	{
619 		GtkWidget *Table;
620 		GtkWidget *vboxframe;
621 
622 		frame = gtk_frame_new (_("Server"));
623 		gtk_container_set_border_width (GTK_CONTAINER (frame), 2);
624 		gtk_box_pack_start (GTK_BOX( hbox), frame, TRUE, TRUE, 2);
625 		gtk_widget_show (frame);
626 
627 		vboxframe = gtk_vbox_new (TRUE, 0);
628 		gtk_widget_show (vboxframe);
629 		gtk_container_add (GTK_CONTAINER (frame), vboxframe);
630 
631 		Table = gtk_table_new(1,2,TRUE);
632 		gtk_container_add(GTK_CONTAINER(vboxframe),Table);
633 
634 		buttons[0]  = gtk_radio_button_new_with_label( NULL,_("Local"));
635 
636 		gtk_table_attach(GTK_TABLE(Table), buttons[0] ,0,1,0,1,
637                   (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,
638                   (GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
639                   1,1);
640 
641 		buttons[1]  = gtk_radio_button_new_with_label(gtk_radio_button_get_group (GTK_RADIO_BUTTON (buttons[0])),"Remote host ");
642 		gtk_table_attach(GTK_TABLE(Table), buttons[1] ,1,2,0,1,
643                   (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,
644                   (GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
645                   1,1);
646 	}
647 
648 	/* local frame */
649 	{
650 		GtkWidget* vboxframe;
651 		GtkWidget* Table;
652 		gchar* t = NULL;
653 
654 
655   		frame = gtk_frame_new (_("Local"));
656   		gtk_container_set_border_width (GTK_CONTAINER (frame), 2);
657   		gtk_container_add (GTK_CONTAINER (vboxall), frame);
658   		gtk_widget_show (frame);
659 
660   		vboxframe = create_vbox(frame);
661   		Table = gtk_table_new(2,3,FALSE);
662   		gtk_container_add(GTK_CONTAINER(vboxframe),Table);
663 
664 		add_label_table(Table,_("Local Directory "),0,0);
665 		add_label_table(Table,":",0,1);
666 		add_label_table(Table,data->localdir,0,2);
667 
668   		if(
669 		data->itype == PROG_IS_GAUSS || data->itype == PROG_IS_MOLCAS ||
670 		data->itype == PROG_IS_MOLPRO || data->itype == PROG_IS_MPQC
671 		|| data->itype == PROG_IS_ORCA
672 		|| data->itype == PROG_IS_QCHEM
673 		|| data->itype == PROG_IS_NWCHEM
674 		|| data->itype == PROG_IS_PSICODE
675 		|| data->itype == PROG_IS_MOPAC
676 		|| data->itype == PROG_IS_GAMESS
677 		|| data->itype == PROG_IS_DEMON
678 		|| data->itype == PROG_IS_FIREFLY
679 		)
680 			add_label_table(Table,_("Files "),1,0);
681   		else
682 			add_label_table(Table,_("File "),1,0);
683 
684   		switch(data->itype)
685   		{
686 			case PROG_IS_DEMON :
687 			t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname);
688 			break;
689 
690 			case PROG_IS_GAMESS :
691 			t = g_strdup_printf("%s, %s.log",data->datafile,data->projectname);
692 			break;
693 
694 			case PROG_IS_GAUSS :
695 			t = g_strdup_printf("%s, %s.log",data->datafile,data->projectname);
696 			break;
697 
698 			case PROG_IS_MOLCAS :
699 			t = g_strdup_printf("%s, %s.out, %s.log, %s.molden",data->datafile,data->projectname,data->projectname,data->projectname);
700 			break;
701 
702 			case PROG_IS_MOLPRO :
703 			t = g_strdup_printf("%s, %s.out, %s.log, %s.molden",data->datafile,data->projectname,data->projectname,data->projectname);
704 			break;
705 
706 			case PROG_IS_MPQC :
707 			t = g_strdup_printf("%s, %s.out, %s.log, %s.molden",data->datafile,data->projectname,data->projectname,data->projectname);
708 			break;
709 
710 			case PROG_IS_FIREFLY :
711 			t = g_strdup_printf("%s, %s.log",data->datafile,data->projectname);
712 			break;
713 
714 			case PROG_IS_ORCA :
715 			t = g_strdup_printf("%s, %s.out, %s.out, %s.out",data->datafile,data->projectname,data->projectname,data->projectname);
716 			break;
717 			case PROG_IS_QCHEM :
718 			t = g_strdup_printf("%s, %s.out, %s.out, %s.out",data->datafile,data->projectname,data->projectname,data->projectname);
719 			break;
720 			case PROG_IS_NWCHEM :
721 			t = g_strdup_printf("%s, %s.out, %s.out, %s.out",data->datafile,data->projectname,data->projectname,data->projectname);
722 			break;
723 
724 			case PROG_IS_PSICODE :
725 			t = g_strdup_printf("%s, %s.out, %s.out, %s.out",data->datafile,data->projectname,data->projectname,data->projectname);
726 			break;
727 
728 			case PROG_IS_MOPAC :
729 			t = g_strdup_printf("%s, %s.out, %s.aux, %s.out",data->datafile,data->projectname,data->projectname,data->projectname);
730 			break;
731 
732 			case GABEDIT_TYPENODE_GABEDIT :
733 			case GABEDIT_TYPENODE_XYZ :
734 			case GABEDIT_TYPENODE_MOL2 :
735 			case GABEDIT_TYPENODE_TINKER :
736 			case GABEDIT_TYPENODE_PDB :
737 			case GABEDIT_TYPENODE_GZMAT :
738 			case GABEDIT_TYPENODE_MZMAT :
739 			case GABEDIT_TYPENODE_HIN :
740 			t = g_strdup_printf("%s",data->datafile);
741 			break;
742 
743 			default :
744 			t = g_strdup_printf("%s",data->projectname);
745 
746   		}
747 		add_label_table(Table,":",1,1);
748 		add_label_table(Table,t,1,2);
749 		g_free(t);
750 	}
751 
752 	/* network protocol frame */
753 	{
754 		GtkWidget *frame;
755 		GtkWidget *vboxframe;
756 		GtkWidget *table = gtk_table_new(1,2,FALSE);
757 		gchar ftprsh[] = N_("FTP and rsh protocols");
758 		gchar ssh[]    = N_("ssh/scp protocols    ");
759 
760 		frame = gtk_frame_new (_("NetWork protocols"));
761 		gtk_widget_show (frame);
762 		gtk_box_pack_start (GTK_BOX (vboxall), frame, TRUE, TRUE, 0);
763 
764 		vboxframe = gtk_vbox_new (TRUE, 0);
765 		gtk_widget_show (vboxframe);
766 		gtk_container_add (GTK_CONTAINER (frame), vboxframe);
767 
768 		gtk_box_pack_start (GTK_BOX (vboxframe), table, TRUE, TRUE, 0);
769 
770 		ButtonFtpRsh = gtk_radio_button_new_with_label( NULL,ftprsh);
771 		gtk_table_attach(GTK_TABLE(table),ButtonFtpRsh,0,1,0,1,
772                   (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,
773                   (GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
774                   1,1);
775 		gtk_widget_show (ButtonFtpRsh);
776 
777 		ButtonSsh = gtk_radio_button_new_with_label( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonFtpRsh)), ssh);
778 		gtk_table_attach(GTK_TABLE(table),ButtonSsh,1,2,0,1,
779                   (GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,
780                   (GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
781                   1,1);
782 		gtk_widget_show (ButtonSsh);
783 		FrameNetWork = frame;
784 
785 
786 	}
787 	/* remote frame */
788 	{
789 		GtkWidget *combo;
790 		GtkWidget *vboxframe;
791 #define NLABEL 4
792 		gchar	*LabelLeft[NLABEL];
793 		gushort i;
794 		GtkWidget *Table;
795 		gchar *tlisthost[NHOSTMAX];
796 		gchar *tlistuser[NHOSTMAX];
797 		gchar *tlistdir[NHOSTMAX];
798 		gint nlisthost = 1;
799 		gint nlistuser = 1;
800 		gint nlistdir  = 1;
801 
802 		if(recenthosts.nhosts>0)
803 		{
804 			nlisthost = recenthosts.nhosts;
805 			for(i=0;i<nlisthost;i++)
806 				tlisthost[i] = g_strdup(recenthosts.hosts[i].hostname);
807 			nlistuser = recenthosts.hosts[0].nusers;
808 			for(i=0;i<recenthosts.hosts[0].nusers;i++)
809 				tlistuser[i] = g_strdup(recenthosts.hosts[0].users[i].username);
810 			nlistdir = recenthosts.hosts[0].users[0].ndirs;
811 			for(i=0;i<recenthosts.hosts[0].users[0].ndirs;i++)
812 				tlistdir[i] = g_strdup(recenthosts.hosts[0].users[0].dirs[i]);
813 		}
814 		else
815 		{
816 			tlisthost[0] = g_strdup("hostname");
817 			tlistuser[0] = g_strdup("login");
818 			tlistdir[0] = g_strdup("");
819 		}
820 
821 		LabelLeft[0] = g_strdup(_("Host name"));
822 		LabelLeft[1] = g_strdup(_("Login"));
823 		LabelLeft[2] = g_strdup(_("Password"));
824 		LabelLeft[3] = g_strdup(_("Working Directory"));
825 
826 		frame = gtk_frame_new (_("Remote host"));
827 		FrameRemote = frame;
828 		gtk_container_set_border_width (GTK_CONTAINER (frame), 2);
829 		gtk_container_add (GTK_CONTAINER (vboxall), frame);
830 		gtk_widget_show (frame);
831 
832 		vboxframe = create_vbox(frame);
833 		Table = gtk_table_new(3,3,FALSE);
834 		gtk_container_add(GTK_CONTAINER(vboxframe),Table);
835 
836 		i = 0;
837 		add_label_table(Table,LabelLeft[i],(gushort)(i),0);
838 		add_label_table(Table,":",(gushort)(i),1);
839 		combo = create_combo_box_entry(tlisthost,nlisthost,TRUE,-1,-1);
840 		gtk_table_attach(GTK_TABLE(Table),combo,2,3,i,i+1,
841 			(GtkAttachOptions)(GTK_FILL | GTK_EXPAND) ,
842 			(GtkAttachOptions)(GTK_FILL | GTK_EXPAND),
843 			1,1);
844 		gtk_widget_show (combo);
845 		entrys[i] = GTK_BIN(combo)->child;
846 		g_object_set_data(G_OBJECT (entrys[i]), "Combo",combo);
847 		g_signal_connect(G_OBJECT(GTK_COMBO_BOX(combo)), "changed",G_CALLBACK(changed_host),entrys);
848 
849 		i = 1;
850 		add_label_table(Table,LabelLeft[i],(gushort)(i),0);
851 		add_label_table(Table,":",(gushort)(i),1);
852 		combo = create_combo_box_entry(tlistuser,nlistuser,TRUE,-1,-1);
853 		add_widget_table(Table,combo,(gushort)(i),2);
854 		entrys[i] = GTK_BIN(combo)->child;
855 		g_object_set_data(G_OBJECT (entrys[i]), "Combo",combo);
856 		g_signal_connect(G_OBJECT(GTK_COMBO_BOX(combo)), "changed",G_CALLBACK(changed_user),entrys);
857 
858 		i = 2;
859 		label1PassWord = add_label_table(Table,LabelLeft[i],(gushort)(i),0);
860 		label2PassWord = add_label_table(Table,":",(gushort)(i),1);
861 		entrys[i] = gtk_entry_new ();
862 		gtk_entry_set_visibility(GTK_ENTRY (entrys[i]),FALSE);
863 		add_widget_table(Table,entrys[i],(gushort)(i),2);
864 
865 		i = 3;
866 		add_label_table(Table,LabelLeft[i],(gushort)(i),0);
867 		add_label_table(Table,":",(gushort)(i),1);
868 		combo = create_combo_box_entry(tlistdir,nlistdir,TRUE,-1,-1);
869 		add_widget_table(Table,combo,(gushort)(i),2);
870 		entrys[i] = GTK_BIN(combo)->child;
871 		g_object_set_data(G_OBJECT (entrys[i]), "Combo",combo);
872 
873 		gtk_widget_show_all(frame);
874 
875 		if(data->remotehost)
876 			gtk_entry_set_text(GTK_ENTRY(entrys[0]),data->remotehost);
877 		if(data->remoteuser)
878 			gtk_entry_set_text(GTK_ENTRY(entrys[1]),data->remoteuser);
879 		if(data->remotepass)
880 			gtk_entry_set_text(GTK_ENTRY(entrys[2]),data->remotepass);
881 		if(data->remotedir)
882 			gtk_entry_set_text(GTK_ENTRY(entrys[3]),data->remotedir);
883 
884 		for (i=0;i<NLABEL;i++)
885 			g_free(LabelLeft[i]);
886 		for (i=0;i<nlisthost;i++)
887 			g_free(tlisthost[i]);
888 		for (i=0;i<nlistuser;i++)
889 			g_free(tlistuser[i]);
890 		for (i=0;i<nlistdir;i++)
891 			g_free(tlistdir[i]);
892 
893 	}
894 
895 	g_object_set_data(G_OBJECT (ButtonFtpRsh), "EntryPassWord", entrys[2]);
896 	g_object_set_data(G_OBJECT (ButtonFtpRsh), "Label1PassWord", label1PassWord);
897 	g_object_set_data(G_OBJECT (ButtonFtpRsh), "Label2PassWord", label2PassWord);
898 	g_signal_connect(G_OBJECT(ButtonFtpRsh), "clicked",G_CALLBACK(set_password_visibility),ButtonFtpRsh);
899 
900 	g_object_set_data(G_OBJECT (ButtonSsh), "EntryPassWord", entrys[2]);
901 	g_object_set_data(G_OBJECT (ButtonSsh), "Label1PassWord", label1PassWord);
902 	g_object_set_data(G_OBJECT (ButtonSsh), "Label2PassWord", label2PassWord);
903 	g_signal_connect(G_OBJECT(ButtonSsh), "clicked",G_CALLBACK(set_password_visibility),NULL);
904 
905 
906 	/* OK and Cancel boutons box */
907 	hbox = create_hbox(vboxwin);
908 
909 	button = create_button(fp,_("Cancel"));
910 	GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
911 	gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3);
912 	g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)destroy_children,GTK_OBJECT(fp));
913 	gtk_widget_show (button);
914 
915 	button = create_button(fp,"OK");
916 	gtk_box_pack_start (GTK_BOX( hbox), button, TRUE, TRUE, 3);
917 	GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
918 	gtk_widget_grab_default(button);
919 	gtk_widget_show (button);
920 	g_object_set_data(G_OBJECT(fp),"Entrys",entrys);
921 	g_object_set_data(G_OBJECT(fp),"Buttons",buttons);
922 	g_object_set_data(G_OBJECT(fp),"Data",data);
923 	g_object_set_data(G_OBJECT(fp),"ButtonSsh",ButtonSsh);
924 	g_object_set_data(G_OBJECT(fp),"ButtonFtpRsh",ButtonFtpRsh);
925 
926 	g_signal_connect_swapped(G_OBJECT(button), "clicked",G_CALLBACK(set_properties),(gpointer)fp);
927 	g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)destroy_children,GTK_OBJECT(fp));
928 
929 
930 	g_object_set_data(G_OBJECT(buttons[0]),"FrameRemote",FrameRemote);
931 	g_object_set_data(G_OBJECT(buttons[1]),"FrameRemote",FrameRemote);
932 	g_object_set_data(G_OBJECT(buttons[0]),"FrameNetWork",FrameNetWork);
933 	g_object_set_data(G_OBJECT(buttons[1]),"FrameNetWork",FrameNetWork);
934 	g_signal_connect(G_OBJECT(buttons[0]), "clicked",G_CALLBACK(set_frame_remote_sensitive),NULL);
935 	g_signal_connect(G_OBJECT(buttons[1]), "clicked",G_CALLBACK(set_frame_remote_sensitive),frame);
936 #ifdef G_OS_WIN32
937 	gtk_widget_set_sensitive(buttons[0], FALSE);
938 #endif
939 	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (buttons[1]), TRUE);
940 
941   	if(data->netWorkProtocol== GABEDIT_NETWORK_FTP_RSH) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ButtonFtpRsh), TRUE);
942 	else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ButtonSsh), TRUE);
943 
944   	/* Show all */
945   	gtk_widget_show_all(fp);
946 }
947 /********************************************************************************/
set_label_infos_file()948 void set_label_infos_file()
949 {
950  	gtk_label_set_text(GTK_LABEL(LocalLabel[2]),fileopen.localdir);
951 	if(fileopen.remotehost)
952  		gtk_label_set_text(GTK_LABEL(RemoteLabel[0]),fileopen.remotehost);
953 	else
954  		gtk_label_set_text(GTK_LABEL(RemoteLabel[0])," ");
955 	if(fileopen.remoteuser)
956  		gtk_label_set_text(GTK_LABEL(RemoteLabel[1]),fileopen.remoteuser);
957 	else
958  		gtk_label_set_text(GTK_LABEL(RemoteLabel[1])," ");
959 	if(fileopen.remotedir)
960  		gtk_label_set_text(GTK_LABEL(RemoteLabel[2]),fileopen.remotedir);
961 	else
962  		gtk_label_set_text(GTK_LABEL(RemoteLabel[2])," ");
963 
964         if(fileopen.remotepass && !this_is_a_backspace(fileopen.remotepass))
965  		gtk_entry_set_text(GTK_ENTRY(ResultEntryPass),fileopen.remotepass);
966 	else
967  		gtk_entry_set_text(GTK_ENTRY(ResultEntryPass),"");
968 
969 	if(
970 		fileopen.remotehost && !this_is_a_backspace(fileopen.remotehost) &&
971 		fileopen.remoteuser && !this_is_a_backspace(fileopen.remoteuser)
972 	)
973 	{
974 
975 		set_sensitive_remote_frame(TRUE);
976 	}
977 	else
978 		set_sensitive_remote_frame(FALSE);
979 
980 
981 }
982 /********************************************************************************/
create_remote_frame_popup(GtkWidget * hbox,DataTree * data)983 static void create_remote_frame_popup(GtkWidget *hbox,DataTree* data)
984 {
985   GtkWidget *frame;
986   GtkWidget *Label;
987   GtkWidget *vboxframe;
988   gchar      *LabelLeft[4];
989   gushort i;
990   GtkWidget *Table;
991   gchar* t = NULL;
992 
993   LabelLeft[0] = g_strdup(_("Host"));
994   LabelLeft[1] = g_strdup(_("Login"));
995   LabelLeft[2] = g_strdup(_("Directory"));
996 
997 
998   if(data->itype == PROG_IS_GAUSS
999     || data->itype == PROG_IS_MOLCAS
1000     || data->itype == PROG_IS_MOLPRO
1001     || data->itype == PROG_IS_MPQC
1002     || data->itype == PROG_IS_GAMESS
1003     || data->itype == PROG_IS_FIREFLY
1004     || data->itype == PROG_IS_DEMON
1005     || data->itype == PROG_IS_QCHEM
1006     ||  data->itype == PROG_IS_NWCHEM
1007     ||  data->itype == PROG_IS_PSICODE
1008     || data->itype == PROG_IS_MOPAC
1009     || data->itype == PROG_IS_ORCA )
1010   	LabelLeft[3] = g_strdup(_("Files"));
1011   else
1012   	LabelLeft[3] = g_strdup(_("File"));
1013 
1014   frame = gtk_frame_new (_("Remote"));
1015   gtk_container_set_border_width (GTK_CONTAINER (frame), 2);
1016   gtk_box_pack_start (GTK_BOX(hbox),frame, TRUE, TRUE, 1);
1017   gtk_widget_show (frame);
1018 
1019   vboxframe = create_vbox(frame);
1020   Table = gtk_table_new(4,3,FALSE);
1021   gtk_container_add(GTK_CONTAINER(vboxframe),Table);
1022 
1023   Label = add_label_table(Table,LabelLeft[0],0,0);
1024   add_label_table(Table,":",0,1);
1025   add_label_table(Table,data->remotehost,0,2);
1026 
1027   Label = add_label_table(Table,LabelLeft[1],1,0);
1028   add_label_table(Table,":",1,1);
1029   if(data->remoteuser && strlen(data->remoteuser)<1 && this_is_a_backspace(data->remoteuser))
1030   {
1031   	add_label_table(Table,data->remoteuser,1,2);
1032   }
1033   else
1034   {
1035   	gchar* tmp = NULL;
1036   	if(data->netWorkProtocol== GABEDIT_NETWORK_FTP_RSH) tmp = g_strdup_printf(_("%s  [Using rsh/ftp Protocol]"), data->remoteuser);
1037   	else tmp = g_strdup_printf(_("%s  [Using ssh Protocol]"),data->remoteuser);
1038   	add_label_table(Table,tmp,1,2);
1039 	g_free(tmp);
1040 
1041   }
1042 
1043   Label = add_label_table(Table,LabelLeft[2],2,0);
1044   add_label_table(Table,":",2,1);
1045   add_label_table(Table,data->remotedir,2,2);
1046 
1047   if(!data->remotehost ||  this_is_a_backspace(data->remotehost))
1048   t = g_strdup("");
1049   else
1050   switch(data->itype)
1051   {
1052 	case PROG_IS_DEMON :
1053 		t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname);
1054 		break;
1055 
1056 	case PROG_IS_GAMESS :
1057 		t = g_strdup_printf("%s, %s.log",data->datafile,data->projectname);
1058 		break;
1059 
1060 	case PROG_IS_GAUSS :
1061 		t = g_strdup_printf("%s, %s.log",data->datafile,data->projectname);
1062 		break;
1063 
1064 	case PROG_IS_MOLCAS :
1065 		t = g_strdup_printf("%s, %s.out, %s.log, %s.molden",data->datafile,data->projectname,data->projectname,data->projectname);
1066 		break;
1067 
1068 	case PROG_IS_MOLPRO :
1069 		t = g_strdup_printf("%s, %s.out, %s.log, %s.molden",data->datafile,data->projectname,data->projectname,data->projectname);
1070 		break;
1071 	case PROG_IS_MPQC :
1072 		t = g_strdup_printf("%s, %s.out, %s.log, %s.molden",data->datafile,data->projectname,data->projectname,data->projectname);
1073 		break;
1074 
1075 	case PROG_IS_FIREFLY :
1076 		t = g_strdup_printf("%s, %s.log",data->datafile,data->projectname);
1077 		break;
1078 	case PROG_IS_ORCA :
1079 		t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname);
1080 		break;
1081 
1082 	case PROG_IS_QCHEM :
1083 		t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname);
1084 		break;
1085 
1086 	case PROG_IS_NWCHEM :
1087 		t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname);
1088 		break;
1089 
1090 	case PROG_IS_PSICODE :
1091 		t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname);
1092 		break;
1093 
1094 
1095 	case PROG_IS_MOPAC :
1096 		t = g_strdup_printf("%s, %s.out, %s.aux",data->datafile,data->projectname,data->projectname);
1097 		break;
1098 
1099 	case GABEDIT_TYPENODE_GABEDIT :
1100 	case GABEDIT_TYPENODE_XYZ :
1101 	case GABEDIT_TYPENODE_MOL2 :
1102 	case GABEDIT_TYPENODE_TINKER :
1103 	case GABEDIT_TYPENODE_PDB :
1104 	case GABEDIT_TYPENODE_GZMAT :
1105 	case GABEDIT_TYPENODE_MZMAT :
1106 	case GABEDIT_TYPENODE_HIN :
1107 		t = g_strdup_printf("%s",data->datafile);
1108 		break;
1109 	default :
1110 		t = g_strdup_printf("%s",data->projectname);
1111 
1112   }
1113 
1114   Label = add_label_table(Table,LabelLeft[3],3,0);
1115   add_label_table(Table,":",3,1);
1116   add_label_table(Table,t,3,2);
1117   g_free(t);
1118 
1119   for (i=0;i<4;i++)
1120         g_free(LabelLeft[i]);
1121 }
1122 /********************************************************************************/
create_local_frame_popup(GtkWidget * hbox,DataTree * data)1123 static void create_local_frame_popup(GtkWidget *hbox,DataTree* data)
1124 {
1125   GtkWidget *frame;
1126   GtkWidget *Label;
1127   GtkWidget *vboxframe;
1128   gchar      *LabelLeft[4];
1129   gushort i;
1130   GtkWidget *Table;
1131   gchar localhost[100];
1132   G_CONST_RETURN gchar *localuser = get_local_user();
1133   gchar *t;
1134 
1135 #ifdef G_OS_WIN32
1136 	winsockCheck(stderr);
1137 #endif
1138   gethostname(localhost,100);
1139   LabelLeft[0] = g_strdup(_("Host"));
1140   LabelLeft[1] = g_strdup(_("Login"));
1141   LabelLeft[2] = g_strdup(_("Directory"));
1142   if(data->itype == PROG_IS_GAUSS
1143     || data->itype == PROG_IS_MOLCAS
1144     || data->itype == PROG_IS_MOLPRO
1145     || data->itype == PROG_IS_MPQC
1146     || data->itype == PROG_IS_GAMESS
1147     || data->itype == PROG_IS_DEMON
1148     || data->itype == PROG_IS_FIREFLY
1149     || data->itype == PROG_IS_QCHEM
1150     || data->itype == PROG_IS_NWCHEM
1151     || data->itype == PROG_IS_PSICODE
1152     || data->itype == PROG_IS_MOPAC
1153     || data->itype == PROG_IS_ORCA )
1154   	LabelLeft[3] = g_strdup(_("Files"));
1155   else
1156   	LabelLeft[3] = g_strdup(_("File"));
1157 
1158   frame = gtk_frame_new (_("Local"));
1159   gtk_container_set_border_width (GTK_CONTAINER (frame), 2);
1160   gtk_box_pack_start (GTK_BOX(hbox),frame, TRUE, TRUE, 1);
1161   gtk_widget_show (frame);
1162 
1163   vboxframe = create_vbox(frame);
1164   Table = gtk_table_new(4,3,FALSE);
1165   gtk_container_add(GTK_CONTAINER(vboxframe),Table);
1166 
1167   Label = add_label_table(Table,LabelLeft[0],0,0);
1168   add_label_table(Table,":",0,1);
1169   add_label_table(Table,localhost,0,2);
1170 
1171   Label = add_label_table(Table,LabelLeft[1],1,0);
1172   add_label_table(Table,":",1,1);
1173   add_label_table(Table,localuser,1,2);
1174 
1175   Label = add_label_table(Table,LabelLeft[2],2,0);
1176   add_label_table(Table,":",2,1);
1177   add_label_table(Table,data->localdir,2,2);
1178 
1179 
1180   switch(data->itype)
1181   {
1182 	case PROG_IS_DEMON :
1183 		t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname);
1184 		break;
1185 
1186 	case PROG_IS_GAMESS :
1187 		t = g_strdup_printf("%s, %s.log",data->datafile,data->projectname);
1188 		break;
1189 
1190 	case PROG_IS_GAUSS :
1191 		t = g_strdup_printf("%s, %s.log",data->datafile,data->projectname);
1192 		break;
1193 
1194 	case PROG_IS_MOLCAS :
1195 		t = g_strdup_printf("%s, %s.out, %s.log, %s.molden",data->datafile,data->projectname,data->projectname,data->projectname);
1196 		break;
1197 
1198 	case PROG_IS_MOLPRO :
1199 		t = g_strdup_printf("%s, %s.out, %s.log, %s.molden",data->datafile,data->projectname,data->projectname,data->projectname);
1200 		break;
1201 	case PROG_IS_MPQC :
1202 		t = g_strdup_printf("%s, %s.out, %s.log, %s.molden",data->datafile,data->projectname,data->projectname,data->projectname);
1203 		break;
1204 
1205 	case PROG_IS_FIREFLY :
1206 		t = g_strdup_printf("%s, %s.log",data->datafile,data->projectname);
1207 		break;
1208 
1209 	case PROG_IS_ORCA :
1210 		t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname);
1211 		break;
1212 
1213 	case PROG_IS_QCHEM :
1214 		t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname);
1215 		break;
1216 
1217 	case PROG_IS_NWCHEM :
1218 		t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname);
1219 		break;
1220 
1221 	case PROG_IS_PSICODE :
1222 		t = g_strdup_printf("%s, %s.out",data->datafile,data->projectname);
1223 		break;
1224 
1225 
1226 	case PROG_IS_MOPAC :
1227 		t = g_strdup_printf("%s, %s.out, %s.aux",data->datafile,data->projectname, data->projectname);
1228 		break;
1229 	case GABEDIT_TYPENODE_GABEDIT :
1230 	case GABEDIT_TYPENODE_XYZ :
1231 	case GABEDIT_TYPENODE_MOL2 :
1232 	case GABEDIT_TYPENODE_TINKER :
1233 	case GABEDIT_TYPENODE_PDB :
1234 	case GABEDIT_TYPENODE_GZMAT :
1235 	case GABEDIT_TYPENODE_MZMAT :
1236 	case GABEDIT_TYPENODE_HIN :
1237 		t = g_strdup_printf("%s",data->datafile);
1238 		break;
1239 	default :
1240 		t = g_strdup_printf("%s",data->datafile);
1241 
1242   }
1243 
1244   Label = add_label_table(Table,LabelLeft[3],3,0);
1245   add_label_table(Table,":",3,1);
1246   add_label_table(Table,t,3,2);
1247   g_free(t);
1248 
1249   for (i=0;i<4;i++)
1250         g_free(LabelLeft[i]);
1251 }
1252 /********************************************************************************/
destroy_popup(gpointer data)1253 static gint destroy_popup(gpointer data)
1254 {
1255         gtk_widget_hide(GTK_WIDGET(data));
1256         gtk_object_destroy(GTK_OBJECT(data));
1257  	popupshow = FALSE;
1258         return FALSE;
1259 }
1260 /********************************************************************************/
create_popupwin(DataTree * data)1261 static void create_popupwin(DataTree* data)
1262 {
1263 	GtkWidget *MainFrame;
1264 	GtkWidget *hbox = gtk_hbox_new(0,FALSE);
1265 
1266  	popupshow = TRUE;
1267 
1268 	MainFrame = gtk_window_new (GTK_WINDOW_POPUP);
1269 
1270 	/* center it on the screen*/
1271         gtk_window_set_position(GTK_WINDOW (MainFrame), GTK_WIN_POS_MOUSE);
1272 
1273 	/* set up key and mound button press to hide splash screen*/
1274 
1275         gtk_widget_add_events(MainFrame,
1276                               GDK_BUTTON_PRESS_MASK|
1277                               GDK_BUTTON_RELEASE_MASK|
1278                               GDK_KEY_PRESS_MASK);
1279 
1280         g_signal_connect(G_OBJECT(MainFrame),"button_release_event",
1281                 G_CALLBACK(destroy_popup),NULL);
1282         g_signal_connect(G_OBJECT(MainFrame),"key_press_event",
1283                 G_CALLBACK(gtk_widget_destroy),NULL);
1284         gtk_widget_realize(MainFrame);
1285 
1286         gtk_widget_show(hbox);
1287         gtk_container_add (GTK_CONTAINER (MainFrame), hbox);
1288 	create_local_frame_popup(hbox,data);
1289 	create_remote_frame_popup(hbox,data);
1290         gtk_widget_show_all(MainFrame);
1291 
1292 	/* force it to draw now.*/
1293 	/* gdk_flush();*/
1294 
1295 	/* go into main loop, processing events.*/
1296         while(gtk_events_pending())
1297                 gtk_main_iteration();
1298 	/* after 3 seconds, destroy the splash screen.*/
1299     /*    gtk_timeout_add( 5000, destroy_popup, MainFrame );*/
1300 }
1301 /********************************************************************************/
create_remote_frame(GtkWidget * hbox)1302 static void create_remote_frame(GtkWidget *hbox)
1303 {
1304   GtkWidget *frame;
1305   GtkWidget *Label;
1306   GtkWidget *vboxframe;
1307   gchar      *LabelLeft[NR];
1308   gushort i;
1309   GtkWidget *Table;
1310 
1311   LabelLeft[0] = g_strdup(_("Host"));
1312   LabelLeft[1] = g_strdup(_("Login"));
1313   LabelLeft[2] = g_strdup(_("Directory"));
1314 
1315   frame = gtk_frame_new (_("Remote"));
1316   gtk_container_set_border_width (GTK_CONTAINER (frame), 2);
1317   gtk_box_pack_start (GTK_BOX(hbox),frame, TRUE, TRUE, 1);
1318   gtk_widget_show (frame);
1319 
1320   vboxframe = create_vbox(frame);
1321   Table = gtk_table_new(3,3,FALSE);
1322   gtk_container_add(GTK_CONTAINER(vboxframe),Table);
1323 
1324   Label = add_label_table(Table,LabelLeft[0],0,0);
1325   add_label_table(Table,":",0,1);
1326   RemoteLabel[0] = add_label_table(Table,"",0,2);
1327 
1328   Label = add_label_table(Table,LabelLeft[1],1,0);
1329   add_label_table(Table,":",1,1);
1330   RemoteLabel[1] = add_label_table(Table,"",1,2);
1331 
1332   Label = add_label_table(Table,LabelLeft[2],2,0);
1333   add_label_table(Table,":",2,1);
1334   RemoteLabel[2] = add_label_table(Table,"",2,2);
1335 
1336 
1337 
1338   for (i=0;i<NR;i++)
1339         g_free(LabelLeft[i]);
1340 }
1341 /********************************************************************************/
resetFontLabelErrOut()1342 void resetFontLabelErrOut()
1343 {
1344   	GtkWidget* labelOngletOut = g_object_get_data(G_OBJECT (Fenetre), "LabelOngletOutput");
1345   	GtkWidget* labelOngletErr = g_object_get_data(G_OBJECT (Fenetre), "LabelOngletError");
1346 	PangoFontDescription *font_desc = pango_font_description_from_string (FontsStyleLabel.fontname);
1347 
1348 	/********/
1349 	return;
1350 
1351 	  GtkStyle* style;
1352 	  if(!font_desc)return;
1353 	  if(labelOngletOut)
1354 	  {
1355 	  	style = gtk_style_copy(gtk_widget_get_style(labelOngletOut));
1356 		if(!style) return;
1357 	  	if(font_desc) style->font_desc = font_desc;
1358 	  	gtk_widget_set_style(labelOngletOut, style );
1359 	  }
1360 	  if(labelOngletErr)
1361 	  {
1362 	  	style = gtk_style_copy(gtk_widget_get_style(labelOngletErr));
1363 		if(!style) return;
1364 	  	if(font_desc) style->font_desc = font_desc;
1365 	  	gtk_widget_set_style(labelOngletErr, style );
1366 	  }
1367 }
1368 /********************************************************************************/
AddNotebookPage(GtkWidget * NoteBook,char * label,GtkWidget ** TextP)1369 static void AddNotebookPage(GtkWidget* NoteBook,char *label,GtkWidget **TextP)
1370 {
1371   GtkWidget *scrolledwindow;
1372   GtkWidget *Frame;
1373   GtkWidget *LabelOnglet;
1374   GtkWidget *LabelMenu;
1375   GtkWidget *vboxframe = NULL;
1376 
1377 
1378   Frame = gtk_frame_new(NULL);
1379   gtk_container_set_border_width(GTK_CONTAINER(Frame), 2);
1380 
1381   LabelOnglet = gtk_label_new(label);
1382   gtk_widget_show(LabelOnglet);
1383   if(strstr(label,_("Output")))
1384   {
1385 	  GtkStyle* style = gtk_style_copy( gtk_widget_get_default_style ());
1386 	  /*
1387 	  PangoFontDescription *font_desc = pango_font_description_from_string (FontsStyleLabel.fontname);
1388 	  */
1389 
1390           style->fg[0].red=0;
1391           style->fg[0].green=0;
1392           style->fg[0].blue=65535;
1393 	  /*
1394 	  if(font_desc) style->font_desc = font_desc;
1395 	  */
1396 	  gtk_widget_set_style(LabelOnglet, style );
1397   	  vboxframe = create_vbox(Frame);
1398   	  g_object_set_data(G_OBJECT (Fenetre), "LabelOngletOutput", LabelOnglet);
1399   }
1400   else
1401   if(strstr(label,_("Error")))
1402   {
1403 	  /*
1404 	  PangoFontDescription *font_desc = pango_font_description_from_string (FontsStyleLabel.fontname);
1405 	  */
1406 	  GtkStyle* style = gtk_style_copy(LabelOnglet->style);
1407           style->fg[0].red=65535;
1408           style->fg[0].green=0;
1409           style->fg[0].blue=0;
1410 	  /*
1411 	  if(font_desc) style->font_desc = font_desc;
1412 	  */
1413 	  gtk_widget_set_style(LabelOnglet, style );
1414   	  g_object_set_data(G_OBJECT (Fenetre), "LabelOngletError", LabelOnglet);
1415   }
1416   LabelMenu = gtk_label_new(label);
1417   gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook),Frame,LabelOnglet, LabelMenu);
1418 
1419   g_object_set_data(G_OBJECT (Frame), "Frame", Frame);
1420 
1421   scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
1422   gtk_widget_show (scrolledwindow);
1423   if(strstr(label,_("Output")))
1424   {
1425   	  gtk_box_pack_start (GTK_BOX(vboxframe),scrolledwindow, TRUE, TRUE, 1);
1426   	  create_status_progress_connection_bar(vboxframe);
1427   }
1428   else
1429   gtk_container_add (GTK_CONTAINER (Frame), scrolledwindow);
1430   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
1431 
1432   *TextP = gabedit_text_new ();
1433   set_tab_size (*TextP, 8);
1434   /* gabedit_text_set_word_wrap (GABEDIT_TEXT(*TextP), FALSE);*/
1435   gtk_widget_show (*TextP);
1436   gtk_container_add (GTK_CONTAINER (scrolledwindow), *TextP);
1437 }
1438 /*****************************************************************************************/
create_local_frame(GtkWidget * hbox)1439 static void create_local_frame(GtkWidget *hbox)
1440 {
1441   GtkWidget *frame;
1442   GtkWidget *Label;
1443   GtkWidget *vboxframe;
1444   gchar      *LabelLeft[NL];
1445   gushort i;
1446   GtkWidget *Table;
1447   gchar localhost[100];
1448   G_CONST_RETURN gchar *localuser = get_local_user();
1449 
1450 #ifdef G_OS_WIN32
1451 	winsockCheck(stderr);
1452 #endif
1453   gethostname(localhost,100);
1454   LabelLeft[0] = g_strdup(_("Host"));
1455   LabelLeft[1] = g_strdup(_("Login"));
1456   LabelLeft[2] = g_strdup(_("Directory"));
1457 
1458   frame = gtk_frame_new (_("Local"));
1459   gtk_container_set_border_width (GTK_CONTAINER (frame), 2);
1460   gtk_box_pack_start (GTK_BOX(hbox),frame, TRUE, TRUE, 1);
1461   gtk_widget_show (frame);
1462 
1463   vboxframe = create_vbox(frame);
1464   Table = gtk_table_new(3,3,FALSE);
1465   gtk_container_add(GTK_CONTAINER(vboxframe),Table);
1466 
1467   Label = add_label_table(Table,LabelLeft[0],0,0);
1468   add_label_table(Table,":",0,1);
1469   LocalLabel[0] = add_label_table(Table,localhost,0,2);
1470 
1471   Label = add_label_table(Table,LabelLeft[1],1,0);
1472   add_label_table(Table,":",1,1);
1473   LocalLabel[1] = add_label_table(Table,localuser,1,2);
1474 
1475   Label = add_label_table(Table,LabelLeft[2],2,0);
1476   add_label_table(Table,":",2,1);
1477   LocalLabel[2] = add_label_table(Table," ",2,2);
1478 
1479   for (i=0;i<NL;i++)
1480         g_free(LabelLeft[i]);
1481 }
1482 /********************************************************************************/
AddNotebookPageFiles(GtkWidget * NoteBook,char * label)1483 static void AddNotebookPageFiles(GtkWidget* NoteBook,char *label)
1484 {
1485   GtkWidget *vboxframe;
1486   GtkWidget *hbox;
1487   GtkWidget *LabelOnglet;
1488   GtkWidget *LabelMenu;
1489 
1490 
1491   vboxframe = gtk_vbox_new(0,FALSE);
1492 
1493   LabelOnglet = gtk_label_new(label);
1494   LabelMenu = gtk_label_new(label);
1495   gtk_notebook_append_page_menu(GTK_NOTEBOOK(NoteBook),
1496                                 vboxframe,
1497                                 LabelOnglet, LabelMenu);
1498 /*
1499   vboxframe = gtk_vbox_new(0,FALSE);
1500   gtk_container_add (GTK_CONTAINER (Frame),vboxframe);
1501 */
1502 
1503   hbox = gtk_hbox_new(TRUE,1);
1504   gtk_container_add(GTK_CONTAINER(vboxframe),hbox);
1505   create_local_frame(hbox);
1506   create_remote_frame(hbox);
1507 
1508 }
1509 /********************************************************************************/
cree_files_out_err_notebook(GtkWidget * box)1510 void cree_files_out_err_notebook(GtkWidget* box)
1511 {
1512   GtkWidget *NoteBook;
1513 
1514   NoteBook = gtk_notebook_new();
1515   gtk_notebook_set_show_border(GTK_NOTEBOOK(NoteBook),TRUE);
1516   gtk_notebook_popup_enable(GTK_NOTEBOOK(NoteBook));
1517   gtk_notebook_set_tab_pos(GTK_NOTEBOOK(NoteBook),GTK_POS_LEFT);
1518   gtk_notebook_set_scrollable(GTK_NOTEBOOK(NoteBook), TRUE);
1519   gtk_widget_show(NoteBook);
1520   gtk_box_pack_start(GTK_BOX (box), NoteBook,FALSE, TRUE, 0);
1521 
1522   AddNotebookPageFiles(NoteBook,_(" Location "));
1523 
1524   AddNotebookPage(NoteBook,_(" Output "),&TextOutput);
1525   gabedit_text_set_editable (GABEDIT_TEXT (TextOutput), FALSE);
1526   set_font (TextOutput,FontsStyleResult.fontname);
1527   set_base_style(TextOutput,FontsStyleResult.BaseColor.red ,FontsStyleResult.BaseColor.green ,FontsStyleResult.BaseColor.blue);
1528   set_text_style(TextOutput,FontsStyleResult.TextColor.red ,FontsStyleResult.TextColor.green ,FontsStyleResult.TextColor.blue);
1529 
1530   AddNotebookPage(NoteBook,_(" Error "),&TextError);
1531   gabedit_text_set_editable (GABEDIT_TEXT (TextError), FALSE);
1532   set_font (TextError,FontsStyleResult.fontname);
1533   set_base_style(TextError,FontsStyleResult.BaseColor.red ,FontsStyleResult.BaseColor.green ,FontsStyleResult.BaseColor.blue);
1534   set_text_style(TextError,FontsStyleResult.TextColor.red ,FontsStyleResult.TextColor.green ,FontsStyleResult.TextColor.blue);
1535   gtk_widget_show(NoteBook);
1536   hide_progress_connection();
1537   NoteBookInfo = NoteBook;
1538 
1539 }
1540 /********************************************************************************/
save_one_line(FILE * fd,gchar * st)1541 static void save_one_line(FILE* fd,gchar* st)
1542 {
1543 	if(!st || strlen(st)<1)
1544 	{
1545 		fprintf(fd," \n");
1546 		return;
1547 	}
1548 	str_delete_n(st);
1549 	if(strlen(st)<1)
1550 	{
1551 		fprintf(fd," \n");
1552 		return;
1553 	}
1554 	fprintf(fd,"%s\n",st);
1555 }
1556 /********************************************************************************/
parse_liste_files()1557 void parse_liste_files()
1558 {
1559  	gint i;
1560  	FILE *fd;
1561  	gchar *outfile= g_strdup_printf("%s%slistfiles",gabedit_directory(), G_DIR_SEPARATOR_S);
1562 	gboolean *toprint = g_malloc(Nfiles*sizeof(gboolean));
1563 	gint Nf[NBNOD];
1564 	gint NfAll=0;
1565 	gboolean expanded[NBNOD];
1566 	gchar* pathString;
1567 	GtkTreeIter iter;
1568 	GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeViewProjects));
1569 
1570 	if(AllFiles == NULL) return;
1571 
1572 
1573 	for(i=0;i<NBNOD;i++)
1574 	{
1575  		expanded[i] =  FALSE;
1576 		if (noeud[i] == NULL) continue;
1577 		pathString = g_strdup_printf("%d", i);
1578 		if(gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE)
1579 		{
1580 			GtkTreePath *path = gtk_tree_path_new_from_string  (pathString);
1581  			expanded[i] =  gtk_tree_view_row_expanded(GTK_TREE_VIEW(treeViewProjects), path);
1582 			gtk_tree_path_free(path);
1583 		}
1584 		g_free(pathString);
1585        }
1586 
1587         if(!AllFiles)
1588         {
1589  		fd = FOpen(outfile, "w");
1590         	if(fd)
1591 		{
1592 			fprintf(fd,"0\n");
1593 		}
1594     		fclose(fd);
1595 		return;
1596 	}
1597 	for(i=0;i<NBNOD;i++)
1598 	{
1599 		Nf[i] = 0;
1600 	}
1601 
1602 	for(i=Nfiles-1;i>=0;i--)
1603 	{
1604 		if(Nf[AllFiles[i]->itype]<=20)
1605 		{
1606 			Nf[AllFiles[i]->itype]++;
1607 			NfAll++;
1608 			toprint[i] = TRUE;
1609 		}
1610 		else
1611 			toprint[i] = FALSE;
1612 	}
1613 
1614  	fd = FOpen(outfile, "w");
1615         if(fd)
1616 	{
1617 		fprintf(fd,"%d\n",NfAll);
1618 		for(i=0;i<Nfiles;i++)
1619 			if(toprint[i])
1620 			{
1621 				fprintf(fd,"%d\n",AllFiles[i]->itype);
1622 				save_one_line(fd,AllFiles[i]->projectname);
1623 				save_one_line(fd,AllFiles[i]->datafile);
1624 				save_one_line(fd,AllFiles[i]->localdir);
1625 				save_one_line(fd,AllFiles[i]->remotehost);
1626 				save_one_line(fd,AllFiles[i]->remoteuser);
1627 				save_one_line(fd,AllFiles[i]->remotedir);
1628 				save_one_line(fd,AllFiles[i]->command);
1629 
1630 				if(AllFiles[i]->netWorkProtocol == GABEDIT_NETWORK_FTP_RSH) fprintf(fd,"0\n");
1631 				else fprintf(fd,"1\n");
1632 			}
1633 
1634 		for(i=0;i<NBNOD;i++)
1635 			fprintf(fd,"%d\n",(gint)expanded[i]);
1636     		fclose(fd);
1637 	}
1638 	g_free(outfile);
1639 	g_free(toprint);
1640 }
1641 /********************************************************************************/
get_one_line(FILE * fd,gchar st[])1642 static void get_one_line(FILE* fd,gchar st[])
1643 {
1644 	static gint taille = BSIZE;
1645 	gchar t[BSIZE];
1646 
1647     	{ char* e = fgets(t,taille,fd);}
1648 	strcpy(st,t);
1649 	str_delete_n(st);
1650 }
1651 /********************************************************************************/
add_liste_files()1652 static void add_liste_files()
1653 {
1654 	gint i;
1655  	FILE *fd;
1656 	gint taille = BSIZE;
1657 	gchar *t=g_malloc(BSIZE*sizeof(gchar));
1658 	gint itype;
1659 	gchar* projectname = g_malloc(BSIZE*sizeof(gchar));
1660 	gchar* datafile = g_malloc(BSIZE*sizeof(gchar));
1661 	gchar* localdir = g_malloc(BSIZE*sizeof(gchar));
1662 	gchar* remotehost = g_malloc(BSIZE*sizeof(gchar));
1663 	gchar* remoteuser = g_malloc(BSIZE*sizeof(gchar));
1664 	gchar* remotedir = g_malloc(BSIZE*sizeof(gchar));
1665 	gchar* command = g_malloc(BSIZE*sizeof(gchar));
1666  	gchar *outfile= g_strdup_printf("%s%slistfiles",gabedit_directory(), G_DIR_SEPARATOR_S);
1667 	gint Nf =0;
1668 	gboolean expanded;
1669 	GabEditNetWork netWorkProtocol;
1670 	gint iNet = 0;
1671 	GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeViewProjects));
1672 	GtkTreeIter iter;
1673 
1674 #ifdef G_OS_WIN32
1675  	fd = FOpen(outfile, "r");
1676 #else
1677  	fd = FOpen(outfile, "rb");
1678 #endif
1679         if(fd)
1680 	{
1681     		{ char* e = fgets(t,BSIZE,fd);}
1682 		Nf = atoi(t);
1683 		Nfiles = 0;
1684 		if(Nf>0)
1685 		{
1686 			for(i=0;i<Nf;i++)
1687 			{
1688 				projectname[0] = '\0';
1689 				datafile[0] = '\0';
1690 				localdir[0] = '\0';
1691 				remotehost[0] = '\0';
1692 				remoteuser[0] = '\0';
1693 				remotedir[0] = '\0';
1694 
1695     				{ char* e = fgets(t,BSIZE,fd);}
1696 				sscanf(t,"%d",&itype);
1697 				get_one_line(fd,projectname);
1698 				get_one_line(fd,datafile);
1699 				get_one_line(fd,localdir);
1700 				get_one_line(fd,remotehost);
1701 				get_one_line(fd,remoteuser);
1702 				get_one_line(fd,remotedir);
1703 				get_one_line(fd,command);
1704     				{ char* e = fgets(t,BSIZE,fd);}
1705 				sscanf(t,"%d",&iNet);
1706 				if(iNet==0) netWorkProtocol = GABEDIT_NETWORK_FTP_RSH;
1707 				else netWorkProtocol = GABEDIT_NETWORK_SSH;
1708 
1709  				CreeFeuille(treeViewProjects, noeud[itype],projectname,datafile,localdir,remotehost,remoteuser,"",remotedir,itype, command, netWorkProtocol);
1710 			}
1711 		}
1712 		for(i=0;i<NBNOD;i++)
1713 		{
1714 			if(fgets(t,taille,fd))
1715 				expanded =(gboolean)atoi(t);
1716 			else
1717 				expanded =FALSE;
1718 			if(expanded)
1719 			{
1720 				gchar* pathString = g_strdup_printf("%d", i);
1721 				if(gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE)
1722 				{
1723 					GtkTreePath *path = gtk_tree_path_new_from_string  (pathString);
1724 					gtk_tree_view_expand_to_path(GTK_TREE_VIEW(treeViewProjects), path);
1725 					gtk_tree_path_free(path);
1726 				}
1727 				g_free(pathString);
1728 			}
1729 		}
1730 
1731     	fclose(fd);
1732 	}
1733 	g_free(projectname);
1734 	g_free(datafile);
1735 	g_free(localdir);
1736 	g_free(remotehost);
1737 	g_free(remoteuser);
1738 	g_free(remotedir);
1739 	g_free(command);
1740 	g_free(outfile);
1741 	g_free(t);
1742 }
1743 /********************************************************************************/
get_doc_no_add_list(GtkWidget * wid,gpointer d)1744 static void get_doc_no_add_list(GtkWidget *wid, gpointer d)
1745 {
1746 	DataTree* data = (DataTree*)d;
1747 	gchar *t;
1748 	FILE *fd = NULL;
1749 	guint nchar;
1750 	guint taille=BSIZE;
1751 
1752 	gchar *NomFichier = NULL;
1753 	NomFichier =  g_strdup_printf("%s%s%s",data->localdir,G_DIR_SEPARATOR_S,data->datafile);
1754 
1755 	if ((!NomFichier) || (strcmp(NomFichier,"") == 0)) return ;
1756 
1757 	t=g_malloc(taille*sizeof(gchar));
1758 	fd = FOpen(NomFichier, "rb");
1759 	if(fd == NULL)
1760 	{
1761 		//fprintf(stderr,"\nSorry, I can not open file :\n %s\n",NomFichier);
1762  		g_free(t);
1763 		t = g_strdup_printf(_("\nSorry, I can not open file :\n %s\n"),NomFichier);
1764 		Message(t,"ERROR",TRUE);
1765 		g_free(t);
1766 		return;
1767 	}
1768 
1769 	iprogram = get_type_of_program(fd);
1770 	//fprintf(stderr,"\niprog=%d\n",iprogram);
1771 
1772 	nchar=gabedit_text_get_length(GABEDIT_TEXT(text));
1773 	gtk_notebook_set_current_page((GtkNotebook*)NoteBookText,0);
1774 	gabedit_text_set_point(GABEDIT_TEXT(text),0);
1775 	gabedit_text_forward_delete(GABEDIT_TEXT(text),nchar);
1776 	while(1)
1777 	{
1778 		nchar = fread(t, 1, taille, fd);
1779 		gabedit_text_insert (GABEDIT_TEXT(text), NULL, NULL, NULL, t,nchar);
1780 		if(nchar<taille) break;
1781 	}
1782 	fclose(fd);
1783 	g_free(t);
1784 	gabedit_text_set_point(GABEDIT_TEXT(text),0);
1785 
1786 	set_fileopen(data);
1787 
1788 
1789 	if(iprogram == PROG_IS_MOLPRO ) read_geom_in_molpro_input(NomFichier);
1790 	else if(iprogram == PROG_IS_GAUSS) read_geom_in_gauss_input(NomFichier);
1791 	else if(iprogram == PROG_IS_DEMON) read_geom_in_demon_input(NomFichier);// TO CHANGE
1792 	else if(iprogram == PROG_IS_GAMESS) read_geom_in_gamess_input(NomFichier);
1793 	else if(iprogram == PROG_IS_FIREFLY) read_geom_in_gamess_input(NomFichier);
1794 	else if(iprogram == PROG_IS_MOLCAS)
1795 	{
1796 		setMolcasVariablesFromInputFile(NomFichier);
1797 		read_geom_in_molcas_input(NomFichier);
1798 	}
1799 	else if(iprogram == PROG_IS_MPQC) read_geom_in_mpqc_input(NomFichier);
1800 	else if(iprogram == PROG_IS_QCHEM) read_geom_in_qchem_input(NomFichier);
1801 	else if(iprogram == PROG_IS_NWCHEM) read_geom_in_nwchem_input(NomFichier);
1802 	else if(iprogram == PROG_IS_PSICODE) read_geom_in_psicode_input(NomFichier);
1803 	else if(iprogram == PROG_IS_ORCA) read_geom_in_orca_input(NomFichier);
1804 	else if(iprogram == PROG_IS_MOPAC) read_geom_in_mopac_input(NomFichier);
1805 
1806 /*	printf("iprogram=%d nwchem=%d orca=%d\n",iprogram,PROG_IS_NWCHEM,PROG_IS_ORCA);*/
1807 
1808 	data_modify(FALSE);
1809 
1810 	if(GeomConvIsOpen) find_energy_all(NULL,NULL);
1811 }
1812 /********************************************************************************/
select_row(DataTree * data)1813 static void select_row(DataTree* data)
1814 {
1815         gchar *t;
1816         gchar *allname = NULL;
1817 
1818         if (!data) return;
1819 
1820         switch(data->itype)
1821         {
1822         case GABEDIT_TYPENODE_DEMON:
1823         case GABEDIT_TYPENODE_GAMESS:
1824         case GABEDIT_TYPENODE_GAUSSIAN:
1825         case GABEDIT_TYPENODE_MOLCAS:
1826         case GABEDIT_TYPENODE_MOLPRO:
1827         case GABEDIT_TYPENODE_MPQC:
1828         case GABEDIT_TYPENODE_FIREFLY:
1829         case GABEDIT_TYPENODE_ORCA:
1830         case GABEDIT_TYPENODE_QCHEM:
1831         case GABEDIT_TYPENODE_NWCHEM:
1832         case GABEDIT_TYPENODE_PSICODE:
1833         case GABEDIT_TYPENODE_MOPAC:
1834         case NBNOD-1:
1835  	        if(imodif == DATA_MOD_YES)
1836             	{
1837 				t = g_strdup_printf(_("\nThe \"%s\" file has been modified.\n\n"),get_name_file(fileopen.datafile));
1838 				t = g_strdup_printf(_(" %sIf you continue, you lose what you have changed.\n\n"),t);
1839 				t = g_strdup_printf(_(" %sYou want to continue?\n"),t);
1840 				Continue_YesNo(get_doc_no_add_list, data,t);
1841 				g_free(t);
1842             	}
1843             	else
1844         		get_doc_no_add_list(NULL,data);
1845 		break;
1846         case GABEDIT_TYPENODE_GABEDIT:
1847 				MethodeGeom = GEOM_IS_XYZ;
1848 				allname = g_strdup_printf("%s%s%s",data->localdir,G_DIR_SEPARATOR_S,data->datafile);
1849   				read_gabedit_file_no_add_list(allname);
1850 				set_last_directory(allname);
1851 				g_free(allname);
1852 		break;
1853         case GABEDIT_TYPENODE_XYZ:
1854 				MethodeGeom = GEOM_IS_XYZ;
1855 				allname = g_strdup_printf("%s%s%s",data->localdir,G_DIR_SEPARATOR_S,data->datafile);
1856   				read_XYZ_file_no_add_list(allname);
1857 				set_last_directory(allname);
1858 				g_free(allname);
1859 		break;
1860         case GABEDIT_TYPENODE_MOL2:
1861 				MethodeGeom = GEOM_IS_XYZ;
1862 				allname = g_strdup_printf("%s%s%s",data->localdir,G_DIR_SEPARATOR_S,data->datafile);
1863   				read_mol2_tinker_file_no_add_list(allname,"MOL2");
1864 				set_last_directory(allname);
1865 				g_free(allname);
1866 		break;
1867         case GABEDIT_TYPENODE_TINKER:
1868 				MethodeGeom = GEOM_IS_XYZ;
1869 				allname = g_strdup_printf("%s%s%s",data->localdir,G_DIR_SEPARATOR_S,data->datafile);
1870   				read_mol2_tinker_file_no_add_list(allname,"TINKER");
1871 				set_last_directory(allname);
1872 				g_free(allname);
1873 		break;
1874         case GABEDIT_TYPENODE_PDB:
1875 				MethodeGeom = GEOM_IS_XYZ;
1876 				allname = g_strdup_printf("%s%s%s",data->localdir,G_DIR_SEPARATOR_S,data->datafile);
1877   				read_pdb_file_no_add_list(allname);
1878 				set_last_directory(allname);
1879 				g_free(allname);
1880 		break;
1881     	case GABEDIT_TYPENODE_GZMAT:
1882                 	MethodeGeom = GEOM_IS_ZMAT;
1883 			allname = g_strdup_printf("%s%s%s",data->localdir,G_DIR_SEPARATOR_S,data->datafile);
1884   			read_ZMatrix_file_no_add_list(allname);
1885 			set_last_directory(allname);
1886 			g_free(allname);
1887 			break;
1888     	case GABEDIT_TYPENODE_MZMAT:
1889                 	MethodeGeom = GEOM_IS_ZMAT;
1890 			allname = g_strdup_printf("%s%s%s",data->localdir,G_DIR_SEPARATOR_S,data->datafile);
1891   			read_ZMatrix_mopac_file_no_add_list(allname);
1892 			set_last_directory(allname);
1893 			g_free(allname);
1894 			break;
1895     	case GABEDIT_TYPENODE_HIN:
1896                 	MethodeGeom = GEOM_IS_XYZ;
1897 			allname = g_strdup_printf("%s%s%s",data->localdir,G_DIR_SEPARATOR_S,data->datafile);
1898   			read_hin_file_no_add_list(allname);
1899 			set_last_directory(allname);
1900 			g_free(allname);
1901         }
1902 }
1903 /********************************************************************************/
event_dispatcher(GtkWidget * widget,GdkEventButton * event,gpointer user_data)1904 static void event_dispatcher(GtkWidget *widget, GdkEventButton *event, gpointer user_data)
1905 {
1906 	GtkTreePath *path;
1907 	GtkTreeIter iter;
1908 	GtkTreeModel *model;
1909 
1910 	if (!event) return;
1911  	if(popupshow) return;
1912 	if (event->window == gtk_tree_view_get_bin_window (GTK_TREE_VIEW (widget))
1913 	    && !gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, NULL, NULL, NULL, NULL)) {
1914 		gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)));
1915 	}
1916 	if(gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, NULL, NULL, NULL))
1917 	{
1918 		if(path)
1919 		{
1920 			model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget));
1921 			gtk_tree_selection_select_path  (gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)), path);
1922 			sprintf(selectedRow ,"%s", gtk_tree_path_to_string(path));
1923 			gtk_tree_model_get_iter (model, &iter, path);
1924 			gtk_tree_path_free(path);
1925         		if (event->type == GDK_2BUTTON_PRESS &&  ((GdkEventButton *) event)->button == 1)
1926         		{
1927    				DataTree* data = NULL;
1928 				gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1);
1929 				if(data) select_row(data);
1930 			}
1931 			else
1932   			if (event->type == GDK_BUTTON_PRESS && ((GdkEventButton *) event)->button == 2)
1933 			{
1934    				DataTree* data = NULL;
1935 				gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1);
1936 				if(data) create_popupwin(data);
1937 			}
1938 			else
1939   			if (event->type == GDK_BUTTON_PRESS && ((GdkEventButton *) event)->button == 3)
1940 			{
1941 				GdkEventButton *bevent = (GdkEventButton *) event;
1942   				GtkUIManager *manager = GTK_UI_MANAGER(user_data);
1943 				if(atoi(selectedRow) < 0)
1944 				{
1945 					set_sensitive_option(manager, "/MenuRecentProjects/Cut", FALSE);
1946 					set_sensitive_option(manager, "/MenuRecentProjects/Set", FALSE);
1947 					set_sensitive_option(manager, "/MenuRecentProjects/Info", FALSE);
1948 				}
1949 				else
1950 				{
1951    					DataTree* data = NULL;
1952 					gtk_tree_model_get (model, &iter, LIST_DATA, &data, -1);
1953 					if(data)
1954 					{
1955 						set_sensitive_option(manager, "/MenuRecentProjects/Cut", TRUE);
1956 						set_sensitive_option(manager, "/MenuRecentProjects/Set", TRUE);
1957 						set_sensitive_option(manager, "/MenuRecentProjects/Info", TRUE);
1958 					}
1959 					else
1960 					{
1961 						set_sensitive_option(manager, "/MenuRecentProjects/Cut", FALSE);
1962 						set_sensitive_option(manager, "/MenuRecentProjects/Set", FALSE);
1963 						set_sensitive_option(manager, "/MenuRecentProjects/Info", FALSE);
1964 					}
1965 				}
1966 				show_menu_popup(manager, bevent->button, bevent->time);
1967 			}
1968 		}
1969 	}
1970 	GTK_WIDGET_GET_CLASS(widget)->button_press_event(widget, event);
1971 }
1972 /********************************************************************************/
tree_clear_all()1973 static void tree_clear_all()
1974 {
1975 	gint i;
1976 	GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeViewProjects));
1977 	GtkTreeStore *store = GTK_TREE_STORE (model);
1978 
1979 	if(AllFiles == NULL) return;
1980 
1981 	gtk_tree_store_clear(store);
1982 
1983 	for(i=0;i<Nfiles;i++) tree_data_destroy (AllFiles[i]);
1984 
1985 	g_free(AllFiles);
1986 	AllFiles = NULL;
1987 	Nfiles = 0;
1988 
1989 	noeud[GABEDIT_TYPENODE_DEMON]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"DeMon");
1990 	noeud[GABEDIT_TYPENODE_FIREFLY]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"FireFly");
1991 	noeud[GABEDIT_TYPENODE_GAMESS]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gamess");
1992 	noeud[GABEDIT_TYPENODE_GAUSSIAN]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gaussian");
1993 	noeud[GABEDIT_TYPENODE_MOLCAS]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Molcas");
1994 	noeud[GABEDIT_TYPENODE_MOLPRO]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Molpro");
1995 	noeud[GABEDIT_TYPENODE_MOPAC]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Mopac");
1996 	noeud[GABEDIT_TYPENODE_MPQC]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"MPQC");
1997 	noeud[GABEDIT_TYPENODE_NWCHEM]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"NWChem");
1998 	noeud[GABEDIT_TYPENODE_PSICODE]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Psicode");
1999 	noeud[GABEDIT_TYPENODE_ORCA]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"ORCA");
2000 	noeud[GABEDIT_TYPENODE_QCHEM]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Q-Chem");
2001 	noeud[GABEDIT_TYPENODE_GABEDIT]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gabedit");
2002 	noeud[GABEDIT_TYPENODE_XYZ]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"XYZ");
2003 	noeud[GABEDIT_TYPENODE_MOL2]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Mol2");
2004 	noeud[GABEDIT_TYPENODE_PDB]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"PDB");
2005 	noeud[GABEDIT_TYPENODE_TINKER]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Tinker");
2006 	noeud[GABEDIT_TYPENODE_GZMAT]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gauss zmat");
2007 	noeud[GABEDIT_TYPENODE_MZMAT]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Mopac zmat");
2008 	noeud[GABEDIT_TYPENODE_HIN]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Hyperchem");
2009 	noeud[GABEDIT_TYPENODE_OTHER]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Others");
2010 }
2011 /********************************************************************************/
tree_data_destroy_one_node(gint inode)2012 static void tree_data_destroy_one_node (gint inode)
2013 {
2014     gint ifdel = 0;
2015     gint ifn = 0;
2016     gint i;
2017     DataTree** tmp=NULL;
2018 
2019 
2020     if(AllFiles == NULL)
2021 	return;
2022 
2023      for(i=0;i<Nfiles;i++)
2024      {
2025      	if(AllFiles[i]->itype == inode)
2026      	{
2027 		ifdel++;
2028      		if(AllFiles[i]->projectname)
2029 	 		g_free(AllFiles[i]->projectname);
2030      		if(AllFiles[i]->localdir)
2031 	 		g_free(AllFiles[i]->localdir);
2032      		if(AllFiles[i]->remotehost)
2033 	 		g_free(AllFiles[i]->remotehost);
2034      		if(AllFiles[i]->remoteuser)
2035 	 		g_free(AllFiles[i]->remoteuser);
2036      		if(AllFiles[i]->remotepass)
2037 	 		g_free(AllFiles[i]->remotepass);
2038      		if(AllFiles[i]->remotedir)
2039 	 		g_free(AllFiles[i]->remotedir);
2040      		if(AllFiles[i]->command)
2041 	 		g_free(AllFiles[i]->command);
2042       		AllFiles[i]->noeud=NULL;
2043       		AllFiles[i]->projectname=g_strdup("DELETED");
2044 	}
2045       }
2046 
2047       if(Nfiles>ifdel)
2048       	tmp = g_malloc((Nfiles-ifdel)*sizeof(DataTree*));
2049       else
2050       {
2051       	Nfiles = 0;
2052       	if(AllFiles)
2053 		g_free(AllFiles);
2054       	AllFiles = NULL;
2055       	return;
2056       }
2057       ifn =0;
2058       for(i=0;i<Nfiles;i++)
2059       {
2060      	if(AllFiles[i]->itype != inode)
2061      	{
2062          tmp[ifn]=AllFiles[i];
2063          ifn++;
2064         }
2065        }
2066 
2067 
2068       Nfiles = ifn;
2069       if(AllFiles)
2070       	g_free(AllFiles);
2071       AllFiles = tmp;
2072 
2073 }
2074 /********************************************************************************/
tree_clear_one(gint in)2075 static void tree_clear_one(gint in)
2076 {
2077     	gint i;
2078 	gboolean expanded[NBNOD];
2079 	gchar* pathString;
2080 	GtkTreeIter iter;
2081 
2082 	GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeViewProjects));
2083 	GtkTreeStore *store = GTK_TREE_STORE (model);
2084 
2085 	if(AllFiles == NULL) return;
2086 
2087 
2088 	for(i=0;i<NBNOD;i++)
2089 	{
2090  		expanded[i] =  FALSE;
2091 		if (noeud[i] == NULL) continue;
2092 		pathString = g_strdup_printf("%d", i);
2093 		if(gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE)
2094 		{
2095 			GtkTreePath *path = gtk_tree_path_new_from_string  (pathString);
2096  			expanded[i] =  gtk_tree_view_row_expanded(GTK_TREE_VIEW(treeViewProjects), path);
2097 			gtk_tree_path_free(path);
2098 		}
2099 		g_free(pathString);
2100        }
2101 
2102 	gtk_tree_store_clear(store);
2103 
2104 	tree_data_destroy_one_node (in);
2105 
2106 	noeud[GABEDIT_TYPENODE_DEMON]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"DeMon");
2107 	noeud[GABEDIT_TYPENODE_FIREFLY]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"FireFly");
2108 	noeud[GABEDIT_TYPENODE_GAMESS]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gamess");
2109 	noeud[GABEDIT_TYPENODE_GAUSSIAN]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gaussian");
2110 	noeud[GABEDIT_TYPENODE_MOLCAS]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Molcas");
2111 	noeud[GABEDIT_TYPENODE_MOLPRO]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Molpro");
2112 	noeud[GABEDIT_TYPENODE_MOPAC]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Mopac");
2113 	noeud[GABEDIT_TYPENODE_MPQC]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"MPQC");
2114 	noeud[GABEDIT_TYPENODE_NWCHEM]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"NWChem");
2115 	noeud[GABEDIT_TYPENODE_PSICODE]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Psicode");
2116 	noeud[GABEDIT_TYPENODE_ORCA]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"ORCA");
2117 	noeud[GABEDIT_TYPENODE_QCHEM]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Q-Chem");
2118 	noeud[GABEDIT_TYPENODE_GABEDIT]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gabedit");
2119 	noeud[GABEDIT_TYPENODE_XYZ]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"XYZ");
2120 	noeud[GABEDIT_TYPENODE_MOL2]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Mol2");
2121 	noeud[GABEDIT_TYPENODE_PDB]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"PDB");
2122 	noeud[GABEDIT_TYPENODE_TINKER]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Tinker");
2123 	noeud[GABEDIT_TYPENODE_GZMAT]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gauss zmat");
2124 	noeud[GABEDIT_TYPENODE_MZMAT]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Mopac zmat");
2125 	noeud[GABEDIT_TYPENODE_HIN]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Hyperchem");
2126 	noeud[GABEDIT_TYPENODE_OTHER]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Others");
2127 
2128 	for(i=0;i<Nfiles;i++) AddFeuille(GTK_TREE_VIEW(treeViewProjects),noeud[AllFiles[i]->itype],AllFiles[i]);
2129 
2130 	for(i=0;i<NBNOD;i++)
2131 	if(expanded[i])
2132 	{
2133 		gchar* pathString = g_strdup_printf("%d", i);
2134 		if(gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE)
2135 		{
2136 			GtkTreePath *path = gtk_tree_path_new_from_string  (pathString);
2137 			gtk_tree_view_expand_to_path(GTK_TREE_VIEW(treeViewProjects), path);
2138 			gtk_tree_path_free(path);
2139 		}
2140 		g_free(pathString);
2141 	}
2142 }
2143 /********************************************************************************/
tree_clear(GtkTreeIter * parent,gint ifile)2144 static GtkTreeIter *tree_clear(GtkTreeIter *parent,gint ifile)
2145 {
2146     	int i;
2147     	int in = 0;
2148 	gboolean expanded[NBNOD];
2149 	GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeViewProjects));
2150 	gchar* pathString;
2151 	GtkTreeStore *store = GTK_TREE_STORE (model);
2152 	GtkTreeIter iter;
2153 
2154 	for(i=0;i<NBNOD;i++)
2155 	{
2156  		expanded[i] =  FALSE;
2157 		if (noeud[i] == NULL) continue;
2158 		pathString = g_strdup_printf("%d", i);
2159 		if(gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE)
2160 		{
2161 			GtkTreePath *path = gtk_tree_path_new_from_string  (pathString);
2162  			expanded[i] =  gtk_tree_view_row_expanded(GTK_TREE_VIEW(treeViewProjects), path);
2163 			gtk_tree_path_free(path);
2164 		}
2165 		g_free(pathString);
2166        }
2167 
2168 	for(i=0;i<NBNOD;i++)
2169     		if(noeud[i]==parent)
2170         	{
2171 			in=i;
2172 			break;
2173         	}
2174 	if(AllFiles == NULL) return parent;
2175 
2176 	gtk_tree_store_clear(store);
2177 
2178     	tree_data_destroy (AllFiles[ifile]);
2179 
2180 	noeud[GABEDIT_TYPENODE_DEMON]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"DeMon");
2181 	noeud[GABEDIT_TYPENODE_FIREFLY]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"FireFly");
2182 	noeud[GABEDIT_TYPENODE_GAMESS]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gamess");
2183 	noeud[GABEDIT_TYPENODE_GAUSSIAN]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gaussian");
2184 	noeud[GABEDIT_TYPENODE_MOLCAS]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Molcas");
2185 	noeud[GABEDIT_TYPENODE_MOLPRO]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Molpro");
2186 	noeud[GABEDIT_TYPENODE_MOPAC]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Mopac");
2187 	noeud[GABEDIT_TYPENODE_MPQC]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"MPQC");
2188 	noeud[GABEDIT_TYPENODE_NWCHEM]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"NWChem");
2189 	noeud[GABEDIT_TYPENODE_PSICODE]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Psicode");
2190 	noeud[GABEDIT_TYPENODE_ORCA]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"ORCA");
2191 	noeud[GABEDIT_TYPENODE_QCHEM]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Q-Chem");
2192 	noeud[GABEDIT_TYPENODE_GABEDIT]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gabedit");
2193 	noeud[GABEDIT_TYPENODE_XYZ]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"XYZ");
2194 	noeud[GABEDIT_TYPENODE_MOL2]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Mol2");
2195 	noeud[GABEDIT_TYPENODE_PDB]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"PDB");
2196 	noeud[GABEDIT_TYPENODE_TINKER]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Tinker");
2197 	noeud[GABEDIT_TYPENODE_GZMAT]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gauss zmat");
2198 	noeud[GABEDIT_TYPENODE_MZMAT]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Mopac zmat");
2199 	noeud[GABEDIT_TYPENODE_HIN]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Hyperchem");
2200 	noeud[GABEDIT_TYPENODE_OTHER]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Others");
2201 
2202     	for(i=0;i<Nfiles;i++) AddFeuille(GTK_TREE_VIEW(treeViewProjects),noeud[AllFiles[i]->itype],AllFiles[i]);
2203 
2204 	for(i=0;i<NBNOD;i++)
2205 	if(expanded[i])
2206 	{
2207 		gchar* pathString = g_strdup_printf("%d", i);
2208 		if(gtk_tree_model_get_iter_from_string (model, &iter, pathString) == TRUE)
2209 		{
2210 			GtkTreePath *path = gtk_tree_path_new_from_string  (pathString);
2211 			gtk_tree_view_expand_to_path(GTK_TREE_VIEW(treeViewProjects), path);
2212 			gtk_tree_path_free(path);
2213 		}
2214 		g_free(pathString);
2215 	}
2216 
2217 	return noeud[in];
2218 
2219 }
2220 /********************************************************************************/
tree_data_destroy(DataTree * pfd)2221 static void tree_data_destroy (DataTree* pfd)
2222 {
2223     int ifn=0;
2224     int i;
2225     DataTree** tmp=NULL;
2226 
2227 
2228     if(AllFiles == NULL)
2229 	return;
2230     if(pfd == NULL)
2231 	return;
2232 
2233      if(pfd->projectname) g_free(pfd->projectname);
2234      if(pfd->localdir) g_free(pfd->localdir);
2235      if(pfd->remotehost) g_free(pfd->remotehost);
2236      if(pfd->remoteuser) g_free(pfd->remoteuser);
2237      if(pfd->remotepass) g_free(pfd->remotepass);
2238      if(pfd->remotedir) g_free(pfd->remotedir);
2239      if(pfd->command) g_free(pfd->command);
2240 
2241       pfd->noeud=NULL;
2242       pfd->projectname=g_strdup("DELETED");
2243 
2244       if(Nfiles>1) tmp = g_malloc((Nfiles-1)*sizeof(DataTree*));
2245       else
2246       {
2247       	Nfiles--;
2248       	if(AllFiles) g_free(AllFiles);
2249       	AllFiles = NULL;
2250       	return;
2251       }
2252       ifn =0;
2253       for(i=0;i<Nfiles;i++)
2254         if(AllFiles[i] != pfd)
2255         {
2256          	tmp[ifn]=AllFiles[i];
2257          	ifn++;
2258         }
2259 
2260       Nfiles--;
2261 
2262       if(AllFiles) g_free(AllFiles);
2263       AllFiles = tmp;
2264 
2265 }
2266 /********************************************************************************/
tree_data_new(gchar * projectname,gchar * datafile,gchar * localdir,gchar * remotehost,gchar * remoteuser,gchar * remotepass,gchar * remotedir,gint itype,gchar * command,GabEditNetWork netWorkProtocol)2267 static DataTree* tree_data_new (gchar *projectname,gchar* datafile,gchar* localdir,
2268 		gchar* remotehost,gchar* remoteuser,gchar* remotepass,gchar* remotedir,gint itype, gchar* command, GabEditNetWork netWorkProtocol)
2269 {
2270     DataTree *pfd;
2271 
2272     pfd = g_malloc (sizeof (DataTree));
2273 
2274      pfd->projectname = g_strdup(projectname);
2275      pfd->datafile = g_strdup(datafile);
2276      pfd->localdir = g_strdup(localdir);
2277      if(remotehost) pfd->remotehost = g_strdup(remotehost);
2278      else pfd->remotehost = g_strdup("");
2279 
2280      if(remoteuser) pfd->remoteuser = g_strdup(remoteuser);
2281      else pfd->remoteuser = g_strdup("");
2282 
2283      if(remotepass) pfd->remotepass = g_strdup(remotepass);
2284      else pfd->remotepass = g_strdup("");
2285 
2286      if(remotedir) pfd->remotedir = g_strdup(remotedir);
2287      else pfd->remotedir = g_strdup("");
2288 
2289      if(command) pfd->command = g_strdup(command);
2290      else pfd->command = g_strdup("");
2291 
2292      pfd->itype =itype;
2293      pfd->netWorkProtocol = netWorkProtocol;
2294 
2295      return pfd;
2296 }
2297 /********************************************************************************/
CreeNoeud(GtkTreeView * treeView,gchar * text)2298 static GtkTreeIter* CreeNoeud(GtkTreeView *treeView,gchar *text)
2299 {
2300 	gchar* t = g_strdup(text);
2301 	GtkTreeIter* node = g_malloc(sizeof(GtkTreeIter));
2302 	GtkTreeModel *model;
2303         GtkTreeStore *store;
2304 	GdkColor nodeColor;
2305 
2306 	nodeColor.red = 0;
2307 	nodeColor.green = 0;
2308 	nodeColor.blue = 65535;
2309 
2310 	model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView));
2311         store = GTK_TREE_STORE (model);
2312 
2313 	gtk_tree_store_append(store, node, NULL);
2314     	uppercase(t);
2315        	gtk_tree_store_set (store, node, LIST_NAME, t, -1);
2316 	if(strstr(t,"FIREFLY")) gtk_tree_store_set (store, node, LIST_PIXBUF, fireflyPixbuf, -1);
2317 	else
2318 	if(strstr(t,"GAMESS")) gtk_tree_store_set (store, node, LIST_PIXBUF, gamessPixbuf, -1);
2319 	else
2320 	if(strstr(t,"DEMON")) gtk_tree_store_set (store, node, LIST_PIXBUF, demonPixbuf, -1);
2321 	else
2322 	if(strstr(t,"GAUSSIAN")) gtk_tree_store_set (store, node, LIST_PIXBUF, gaussianPixbuf, -1);
2323 	else
2324 	if(strstr(t,"MOLCAS")) gtk_tree_store_set (store, node, LIST_PIXBUF, molcasPixbuf, -1);
2325 	else
2326 	if(strstr(t,"MOLPRO")) gtk_tree_store_set (store, node, LIST_PIXBUF, molproPixbuf, -1);
2327 	else
2328 	if(strstr(t,"MPQC")) gtk_tree_store_set (store, node, LIST_PIXBUF, mpqcPixbuf, -1);
2329 	else
2330 	if(strstr(t,"NWCHEM")) gtk_tree_store_set (store, node, LIST_PIXBUF, nwchemPixbuf, -1);
2331 	else
2332 	if(strstr(t,"PSICODE")) gtk_tree_store_set (store, node, LIST_PIXBUF, psicodePixbuf, -1);
2333 	else
2334 	if(strstr(t,"ORCA")) gtk_tree_store_set (store, node, LIST_PIXBUF, orcaPixbuf, -1);
2335 	else
2336 	if(strstr(t,"Q-CHEM")) gtk_tree_store_set (store, node, LIST_PIXBUF, qchemPixbuf, -1);
2337 	else
2338 	if(strstr(t,"MOPAC Z")) gtk_tree_store_set (store, node, LIST_PIXBUF, bookPixbuf, -1);
2339 	else
2340 	if(strstr(t,"MOPAC")) gtk_tree_store_set (store, node, LIST_PIXBUF, mopacPixbuf, -1);
2341 	else
2342 	if(strstr(t,"GABEDIT")) gtk_tree_store_set (store, node, LIST_PIXBUF, gabeditPixbuf, -1);
2343 	else
2344 		gtk_tree_store_set (store, node, LIST_PIXBUF, bookPixbuf, -1);
2345 
2346 	gtk_tree_store_set (store, node, LIST_NODE_FOREGROUND_COLOR, &nodeColor, -1);
2347        	gtk_tree_store_set (store, node, LIST_DATA, NULL, -1);
2348 	g_free(t);
2349 	return node;
2350 }
2351 /********************************************************************************/
file_in_list(gchar * projectname,gchar * datafile,gchar * localdir,gint itype)2352 static int file_in_list(gchar *projectname,gchar*datafile,gchar* localdir,gint itype)
2353 {
2354   int i;
2355   for(i=0;i<Nfiles;i++)
2356   if( 	!strcmp(localdir,AllFiles[i]->localdir) &&
2357 	!strcmp(projectname,AllFiles[i]->projectname) &&
2358 	!strcmp(datafile,AllFiles[i]->datafile) &&
2359 	itype == AllFiles[i]->itype)
2360 	{
2361 		if(AllFiles[i]->remotehost)
2362 			g_free(AllFiles[i]->remotehost);
2363 		if(fileopen.remotehost)
2364 			AllFiles[i]->remotehost = g_strdup(fileopen.remotehost);
2365 		else
2366 			AllFiles[i]->remotehost =NULL;
2367 		if(fileopen.remoteuser)
2368 			AllFiles[i]->remoteuser = g_strdup(fileopen.remoteuser);
2369 		else
2370 			AllFiles[i]->remoteuser =g_strdup("");
2371 		if(fileopen.remotepass)
2372 			AllFiles[i]->remotepass = g_strdup(fileopen.remotepass);
2373 		else
2374 			AllFiles[i]->remotepass =g_strdup("");
2375 		if(fileopen.remotedir)
2376 			AllFiles[i]->remotedir = g_strdup(fileopen.remotedir);
2377 		else
2378 			AllFiles[i]->remotedir =g_strdup("");
2379 		if(fileopen.command)
2380 			AllFiles[i]->command = g_strdup(fileopen.command);
2381 		else
2382 			AllFiles[i]->command =g_strdup("");
2383     		return i;
2384 	}
2385   return -1;
2386 }
2387 /********************************************************************************/
AddFeuille(GtkTreeView * treeView,GtkTreeIter * parent,DataTree * pfd)2388 static void AddFeuille(GtkTreeView *treeView, GtkTreeIter *parent,DataTree *pfd)
2389 {
2390 	GtkTreeIter feuille;
2391 	gchar *text;
2392 	GtkTreeModel *model;
2393         GtkTreeStore *store;
2394 
2395 	model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeView));
2396         store = GTK_TREE_STORE (model);
2397 
2398 	text = g_strdup(pfd->projectname);
2399 
2400 	gtk_tree_store_append(store, &feuille, parent);
2401 	gtk_tree_store_set (store, &feuille, LIST_PIXBUF, pagePixbuf, -1);
2402        	gtk_tree_store_set (store, &feuille, LIST_NAME, text, -1);
2403 	pfd->noeud = &feuille;
2404        	gtk_tree_store_set (store, &feuille, LIST_DATA, pfd, -1);
2405 
2406 	g_free(text);
2407 }
2408 /********************************************************************************/
CreeFeuille(GtkWidget * treeView,GtkTreeIter * parent,gchar * projectname,gchar * datafile,gchar * localdir,gchar * remotehost,gchar * remoteuser,gchar * remotepass,gchar * remotedir,gint itype,gchar * command,GabEditNetWork netWorkProtocol)2409 void CreeFeuille(GtkWidget *treeView, GtkTreeIter *parent,gchar* projectname,gchar*datafile,gchar* localdir,
2410 				  gchar* remotehost,gchar* remoteuser,gchar* remotepass,gchar* remotedir,gint itype, gchar* command, GabEditNetWork netWorkProtocol)
2411 {
2412 	DataTree* pfd;
2413 	int ifile =  file_in_list(projectname,datafile,localdir,itype);
2414 
2415 	if( itype<0 || itype>=NBNOD) return;
2416 	if( ifile != -1 )
2417 	{
2418 		if(AllFiles[ifile]->itype==iprogram) return;
2419 		else parent=tree_clear(parent,ifile);
2420 	}
2421 	pfd = tree_data_new (projectname,datafile,localdir,remotehost,remoteuser,remotepass,remotedir,itype, command, netWorkProtocol);
2422 
2423 	AddFeuille(GTK_TREE_VIEW(treeView),parent,pfd);
2424 
2425 	if(Nfiles==0) AllFiles = g_malloc(sizeof(DataTree*));
2426 	else AllFiles = (DataTree**)g_realloc(AllFiles,(Nfiles+1)*sizeof(DataTree*));
2427 	Nfiles++;
2428 	AllFiles[Nfiles-1] = pfd;
2429 }
2430 /********************************************************************************/
clear_one_project()2431 static void clear_one_project()
2432 {
2433 	int ifile =  -1;
2434 	GtkTreeIter node;
2435 	GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeViewProjects));
2436    	DataTree* data = NULL;
2437 
2438 	if(atoi(selectedRow)<0) return;
2439 	if(!gtk_tree_model_get_iter_from_string (model, &node, selectedRow)) return;
2440 	gtk_tree_model_get (model, &node, LIST_DATA, &data, -1);
2441 
2442         if(!data) return;
2443   	if( data->itype<0 || data->itype>=NBNOD) return;
2444 	ifile =  file_in_list(data->projectname, data->datafile, data->localdir, data->itype);
2445 
2446   	if( ifile != -1 )
2447   	{
2448 		GtkTreeIter* parent;
2449 		parent = noeud[data->itype];
2450        		parent = tree_clear(parent,ifile);
2451   	}
2452 }
2453 /********************************************************************************/
to_clear_lists(GtkWidget * wid,gpointer data)2454 static void to_clear_lists(GtkWidget *wid,gpointer data)
2455 {
2456   gint i;
2457   gint k = 0;
2458   for(i=0;i<NBNOD;i++)
2459     		if (GTK_TOGGLE_BUTTON (checkbutton[i])->active)
2460 			k++;
2461   if(k == NBNOD)
2462  	tree_clear_all();
2463   else
2464   if(k != 0)
2465   	for(i=0;i<NBNOD;i++)
2466     		if (GTK_TOGGLE_BUTTON (checkbutton[i])->active)
2467 			tree_clear_one(i);
2468 
2469 }
2470 /********************************************************************************/
select_all_buttons(GtkWidget * wid,gpointer data)2471 static void select_all_buttons(GtkWidget *wid,gpointer data)
2472 {
2473   gint i;
2474   for(i=0;i<NBNOD;i++)
2475     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton[i]), TRUE);
2476 }
2477 /********************************************************************************/
unselect_all_buttons(GtkWidget * wid,gpointer data)2478 static void unselect_all_buttons(GtkWidget *wid,gpointer data)
2479 {
2480   gint i;
2481   for(i=0;i<NBNOD;i++)
2482     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton[i]), FALSE);
2483 }
2484 /********************************************************************************/
create_window_list_to_clear()2485 static void  create_window_list_to_clear()
2486 {
2487   guint i;
2488   GtkWidget *frame;
2489   GtkWidget *vbox;
2490   GtkWidget *hbox;
2491   GtkWidget *Dialogue;
2492   GtkWidget *button;
2493   gchar * title = N_("Clear list of projects");
2494   gchar *buttonlabel[NBNOD]={
2495   		"deMon2k list",
2496   		"FireFly list",
2497   		"Gamess list",
2498   		"Gaussian list",
2499   		"Molcas list",
2500   		"Molpro list",
2501   		"Mopac list",
2502   		"MPQC list",
2503   		"NWChem list",
2504   		"Psicode list",
2505   		"Orca list",
2506   		"Q-Chem list",
2507   		"Gabedit list",
2508   		"xyz list",
2509   		"Mol2 list",
2510   		"PDB list",
2511   		"Tinker list",
2512   		"Gaussian z-matrix list",
2513   		"Mopac z-matrix list",
2514   		"HyperChem (hin) list",
2515   		"Other files list",
2516   		};
2517   GtkWidget *ButtonSelAll;
2518   GtkWidget *ButtonUnSelAll;
2519 
2520   for(i=0;i<NBNOD;i++)
2521 	checkbutton[i]=NULL;
2522 
2523   Dialogue = gtk_dialog_new();
2524   gtk_widget_realize(GTK_WIDGET(Dialogue));
2525   gtk_window_set_title(GTK_WINDOW(Dialogue),title);
2526   gtk_window_set_transient_for(GTK_WINDOW(Dialogue),GTK_WINDOW(Fenetre));
2527   gtk_window_set_position(GTK_WINDOW(Dialogue),GTK_WIN_POS_CENTER);
2528 
2529   g_signal_connect(G_OBJECT(Dialogue),"delete_event",(GCallback)destroy_button_windows,NULL);
2530   g_signal_connect(G_OBJECT(Dialogue),"delete_event",(GCallback)gtk_widget_destroy,NULL);
2531 
2532   frame = gtk_frame_new (title);
2533   gtk_widget_show (frame);
2534   gtk_box_pack_start (GTK_BOX (GTK_DIALOG(Dialogue)->vbox), frame, TRUE, TRUE, 8);
2535   gtk_frame_set_label_align (GTK_FRAME (frame), 0.5, 0.5);
2536 
2537   vbox = gtk_vbox_new (TRUE, 0);
2538   gtk_widget_show (vbox);
2539   gtk_container_add (GTK_CONTAINER (frame), vbox);
2540 
2541   /* Select all and unselect all */
2542    hbox =  gtk_hbox_new (TRUE, 0);
2543    gtk_widget_show (hbox);
2544    gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
2545 
2546    ButtonUnSelAll = gtk_radio_button_new_with_label( NULL,_(" Unselect all") );
2547    gtk_box_pack_end (GTK_BOX (hbox), ButtonUnSelAll, TRUE, TRUE, 0);
2548    gtk_widget_show (ButtonUnSelAll);
2549 
2550    ButtonSelAll = gtk_radio_button_new_with_label(
2551                        gtk_radio_button_get_group (GTK_RADIO_BUTTON (ButtonUnSelAll)),
2552                        _("Select all "));
2553    gtk_box_pack_start (GTK_BOX (hbox), ButtonSelAll, TRUE, TRUE, 0);
2554    gtk_widget_show (ButtonSelAll);
2555    create_hseparator(vbox);
2556 
2557   for(i=0;i<NBNOD;i++)
2558   {
2559   	checkbutton[i] = gtk_check_button_new_with_label (buttonlabel[i]);
2560   	gtk_widget_show (checkbutton[i]);
2561   	gtk_box_pack_start (GTK_BOX (vbox), checkbutton[i], FALSE, FALSE, 0);
2562   }
2563   g_signal_connect(G_OBJECT(ButtonSelAll), "clicked",(GCallback)select_all_buttons,NULL);
2564   g_signal_connect(G_OBJECT(ButtonUnSelAll), "clicked",(GCallback)unselect_all_buttons,NULL);
2565   gtk_box_set_homogeneous (GTK_BOX( GTK_DIALOG(Dialogue)->action_area), FALSE);
2566 
2567   /* The CANCEL button */
2568   button = create_button(Dialogue,_("Cancel"));
2569   gtk_box_pack_end (GTK_BOX( GTK_DIALOG(Dialogue)->action_area), button, FALSE, TRUE, 5);
2570   GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
2571   g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)destroy_button_windows,GTK_OBJECT(Dialogue));
2572   g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Dialogue));
2573 
2574     /* The OK button */
2575   button = create_button(Dialogue,"OK");
2576   gtk_box_pack_start (GTK_BOX( GTK_DIALOG(Dialogue)->action_area), button, FALSE, TRUE, 5);
2577   GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
2578   gtk_widget_grab_default(button);
2579   g_signal_connect(G_OBJECT(button), "clicked",(GCallback)to_clear_lists,NULL);
2580   g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)destroy_button_windows,GTK_OBJECT(Dialogue));
2581   g_signal_connect_swapped(G_OBJECT(button), "clicked",(GCallback)gtk_widget_destroy,GTK_OBJECT(Dialogue));
2582 
2583 
2584   if(atoi(selectedRow)>-1)
2585   {
2586   	gint i;
2587 	GtkTreeIter node;
2588 	GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeViewProjects));
2589 	gtk_tree_model_get_iter_from_string (model, &node, selectedRow);
2590 	GtkTreePath* path1 = gtk_tree_model_get_path(model, &node);
2591 	GtkTreePath* path2;
2592 
2593 	gboolean Ok = FALSE;
2594   	for(i=0;i<NBNOD;i++)
2595   	{
2596 		path2 = gtk_tree_model_get_path(model, noeud[i]);
2597 		if(gtk_tree_path_compare(path1, path2)==0)
2598 		{
2599     			gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton[i]), TRUE);
2600 			Ok = TRUE;
2601 			break;
2602 		}
2603 		gtk_tree_path_free(path2);
2604   	}
2605 	gtk_tree_path_free(path1);
2606 	if(!Ok)
2607 	{
2608 		DataTree* p;
2609 		gtk_tree_model_get (model, &node, LIST_DATA, &p, -1);
2610 		if(p)
2611 		{
2612   			if( p->itype>= 0 && p->itype<NBNOD)
2613     				gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbutton[p->itype]), TRUE);
2614 		}
2615 	}
2616   }
2617 
2618    add_button_windows(title,Dialogue);
2619    gtk_widget_show_all(Dialogue);
2620 
2621 }
2622 /********************************************************************************/
ListeFiles(GtkWidget * vbox)2623 void ListeFiles(GtkWidget* vbox)
2624 {
2625 	GtkWidget *Scr;
2626 	GtkUIManager *manager = NULL;
2627         GtkTreeStore *store;
2628 	GtkTreeModel *model;
2629 	GtkCellRenderer *renderer;
2630 	GtkTreeViewColumn *column;
2631 
2632 	set_pixbuf();
2633 
2634 	Scr = gtk_scrolled_window_new(NULL, NULL);
2635 	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (Scr), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
2636 	gtk_container_add(GTK_CONTAINER(vbox), Scr);
2637 	gtk_widget_set_size_request(Scr, (gint)(ScreenHeight*0.15), (gint)(ScreenHeight*0.1));
2638 	FrameList = vbox;
2639 
2640 	store = gtk_tree_store_new (4, GDK_TYPE_PIXBUF, G_TYPE_STRING,  GDK_TYPE_COLOR, G_TYPE_POINTER);
2641         model = GTK_TREE_MODEL (store);
2642 
2643 	treeViewProjects = gtk_tree_view_new_with_model (model);
2644 	gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeViewProjects), TRUE);
2645 	gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeViewProjects), TRUE);
2646 
2647 	column = gtk_tree_view_column_new ();
2648 	gtk_tree_view_column_set_title (column, _("Recent Projects"));
2649 	gtk_tree_view_column_set_reorderable(column, TRUE);
2650 
2651 	renderer = gtk_cell_renderer_pixbuf_new ();
2652 	gtk_tree_view_column_pack_start (column, renderer, FALSE);
2653 	gtk_tree_view_column_add_attribute (column, renderer, "pixbuf", LIST_PIXBUF);
2654 
2655 	renderer = gtk_cell_renderer_text_new ();
2656 	gtk_tree_view_column_pack_start (column, renderer, TRUE);
2657 	gtk_tree_view_column_add_attribute (column, renderer, "text", LIST_NAME);
2658 	gtk_tree_view_column_add_attribute (column, renderer, "foreground_gdk", LIST_NODE_FOREGROUND_COLOR);
2659 
2660 	gtk_tree_view_append_column (GTK_TREE_VIEW (treeViewProjects), column);
2661 
2662 	gtk_container_add(GTK_CONTAINER(Scr), treeViewProjects);
2663 
2664 	noeud[GABEDIT_TYPENODE_DEMON]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"DeMon");
2665 	noeud[GABEDIT_TYPENODE_FIREFLY]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"FireFly");
2666 	noeud[GABEDIT_TYPENODE_GAMESS]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gamess");
2667 	noeud[GABEDIT_TYPENODE_GAUSSIAN]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gaussian");
2668 	noeud[GABEDIT_TYPENODE_MOLCAS]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Molcas");
2669 	noeud[GABEDIT_TYPENODE_MOLPRO]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Molpro");
2670 	noeud[GABEDIT_TYPENODE_MOPAC]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Mopac");
2671 	noeud[GABEDIT_TYPENODE_MPQC]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"MPQC");
2672 	noeud[GABEDIT_TYPENODE_NWCHEM]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"NWChem");
2673 	noeud[GABEDIT_TYPENODE_PSICODE]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Psicode");
2674 	noeud[GABEDIT_TYPENODE_ORCA]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"ORCA");
2675 	noeud[GABEDIT_TYPENODE_QCHEM]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Q-Chem");
2676 	noeud[GABEDIT_TYPENODE_GABEDIT]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gabedit");
2677 	noeud[GABEDIT_TYPENODE_XYZ]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"XYZ");
2678 	noeud[GABEDIT_TYPENODE_MOL2]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Mol2");
2679 	noeud[GABEDIT_TYPENODE_PDB]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"PDB");
2680 	noeud[GABEDIT_TYPENODE_TINKER]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Tinker");
2681 	noeud[GABEDIT_TYPENODE_GZMAT]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Gauss zmat");
2682 	noeud[GABEDIT_TYPENODE_MZMAT]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Mopac zmat");
2683 	noeud[GABEDIT_TYPENODE_HIN]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Hyperchem");
2684 	noeud[GABEDIT_TYPENODE_OTHER]=CreeNoeud(GTK_TREE_VIEW(treeViewProjects),"Others");
2685 
2686 	add_liste_files();
2687 
2688 	manager = create_menu(Fenetre);
2689 	g_signal_connect(treeViewProjects, "button_press_event", G_CALLBACK(event_dispatcher), manager);
2690 }
2691 /********************************************************************************/
2692