1 // GTK_PROJECT.CPP
2 
3 // Copyright (C) 1998 Tommi Hassinen.
4 
5 // This package is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; either version 2 of the License, or
8 // (at your option) any later version.
9 
10 // This package is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
14 
15 // You should have received a copy of the GNU General Public License
16 // along with this package; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 
19 /*################################################################################################*/
20 
21 #include "gtk_project.h"	// config.h is here -> we get ENABLE-macros here...
22 
23 #include "project.h"
24 
25 #include "appdefine.h"
26 
27 #include <ghemical/geomopt.h>
28 #include <ghemical/moldyn.h>
29 
30 #include <ghemical/eng1_qm.h>
31 #include <ghemical/eng1_mm.h>
32 #include <ghemical/eng1_sf.h>
33 
34 #include "color.h"
35 
36 #include "gtk_oglview_wnd.h"
37 
38 #include "gtk_p1dview_wnd.h"
39 #include "gtk_p2dview_wnd.h"
40 #include "gtk_eldview_wnd.h"
41 #include "gtk_rcpview_wnd.h"
42 #include "gtk_gpcview_wnd.h"
43 
44 #include "ogl_plane.h"
45 #include "ogl_surface.h"
46 #include "ogl_ribbon.h"
47 
48 #include "gtk_file_import_dialog.h"
49 #include "gtk_file_export_dialog.h"
50 
51 #include "gtk_geomopt_dialog.h"
52 #include "gtk_moldyn_dialog.h"
53 
54 #include "gtk_setup_dialog.h"
55 #include "gtk_progress_dialog.h"
56 
57 #include "local_i18n.h"
58 
59 #include <glade/glade.h>
60 
61 #include <sstream>
62 using namespace std;
63 
64 /*################################################################################################*/
65 
gtk_project(void)66 gtk_project::gtk_project(void) :
67 	project()
68 {
69 	pd = NULL;
70 }
71 
DoSafeStart(void)72 void gtk_project::DoSafeStart(void)
73 {
74 
75 // this is effectively the ctor of this class.
76 // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
77 // moved it here so that the objects can be safely constructed and the
78 // pointer obtained before it is actually used anywhere. 20070816 TH
79 
80 	AddGraphicsClient(NULL, false);
81 	PrintToLog(_("A new project created.\n"));
82 }
83 
~gtk_project(void)84 gtk_project::~gtk_project(void)
85 {
86 	if (pd != NULL) cout << "DEBUG : MEM-LEAK pd" << endl;
87 }
88 
GetClient(GtkWidget * widget)89 oglview_wcl * gtk_project::GetClient(GtkWidget * widget)
90 {
91 	gtk_wnd * wnd = gtk_wnd::iv_Find(widget);
92 	if (wnd == NULL) cout << "DEBUG : gtk_project::GetClient() failed!" << endl;
93 	else
94 	{
95 		base_wcl * wcl1 = wnd->GetClient();
96 		if (wcl1 == NULL) cout << "DEBUG : NULL wcl1" << endl;
97 
98 		oglview_wcl * wcl2 = dynamic_cast<oglview_wcl *>(wcl1);
99 		if (wcl2 == NULL) cout << "DEBUG : NULL wcl2" << endl;
100 
101 		return wcl2;
102 	}
103 
104 	return NULL;
105 }
106 
107 #ifdef ENABLE_THREADS
108 
ThreadLock(void)109 void gtk_project::ThreadLock(void)
110 {
111 	// this is a "technical" thread lock needed in GTK/GDK.
112 
113 	// BUT in addition to this we need to make sure that the
114 	// user interface is not accessed during any thread processing!
115 
116 	// this means that user may not access menus or mouse tools during
117 	// multithreaded computations ; see project::background_job_running
118 	// for more about this...
119 
120 	gdk_threads_enter();
121 }
122 
ThreadUnlock(void)123 void gtk_project::ThreadUnlock(void)
124 {
125 	gdk_threads_leave();
126 }
127 
128 #else	// ENABLE_THREADS
129 
NoThreadsIterate(void)130 void gtk_project::NoThreadsIterate(void)
131 {
132 	while (gtk_events_pending()) gtk_main_iteration();
133 }
134 
135 #endif	// ENABLE_THREADS
136 
SetProgress(double progress,double * graphdata)137 bool gtk_project::SetProgress(double progress, double * graphdata)
138 {
139 	gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pd->progressbar_job), progress);
140 
141 	if (graphdata != NULL)
142 	{
143 		int f = (pd->g_fill % pd->g_sz);
144 		for (int i = 0;i < pd->g_n;i++)
145 		{
146 			pd->g_data[i * pd->g_sz + f] = graphdata[i];
147 		}
148 
149 		pd->g_fill++;
150 
151 		gtk_widget_queue_draw_area(pd->drawingarea_job, 0, 0, pd->da_w, pd->da_h);
152 	}
153 
154 	return pd->cancel;
155 }
156 
CreateProgressDialog(const char * title,bool show_pbar,int graphs_n,int graphs_s)157 void gtk_project::CreateProgressDialog(const char * title, bool show_pbar, int graphs_n, int graphs_s)
158 {
159 	pd = new gtk_progress_dialog(title, show_pbar, graphs_n, graphs_s);
160 }
161 
DestroyProgressDialog(void)162 void gtk_project::DestroyProgressDialog(void)
163 {
164 	gtk_widget_destroy(pd->dialog);
165 	delete pd; pd = NULL;
166 }
167 
start_job_GeomOpt(jobinfo_GeomOpt * ji)168 void gtk_project::start_job_GeomOpt(jobinfo_GeomOpt * ji)
169 {
170 	if (ji->show_dialog)
171 	{
172 		new gtk_geomopt_dialog(& ji->go);	// the object will call delete itself...
173 		cout << "DEBUG : now returning from gtk_project::GeomOptGetParam()." << endl;
174 
175 		// the above dialog is (AND IT MUST BE) a modal one; we will return
176 		// from the function only after the dialog is closed.
177 	}
178 
179 	if (!ji->go.GetConfirm()) return;
180 
181 #ifdef ENABLE_THREADS
182 
183 	GThread * t = g_thread_create(process_job_GeomOpt, (gpointer) ji, FALSE, NULL);
184 	if (t == NULL) ErrorMessage(_("Thread creation failed : GeomOpt"));
185 
186 #else	// ENABLE_THREADS
187 
188 	process_job_GeomOpt((gpointer) ji);
189 
190 #endif	// ENABLE_THREADS
191 }
192 
process_job_GeomOpt(gpointer p)193 gpointer gtk_project::process_job_GeomOpt(gpointer p)
194 {
195 	project::background_job_running = true;
196 	jobinfo_GeomOpt * ji = (jobinfo_GeomOpt *) p;
197 
198 	ji->prj->ThreadLock();
199 	ji->prj->CreateProgressDialog(_("Geometry Optimization"), true, 1, 20);
200 	ji->prj->ThreadUnlock();
201 
202 #ifdef ENABLE_THREADS
203 	const bool updt = false;
204 #else	// ENABLE_THREADS
205 	const bool updt = true;
206 #endif	// ENABLE_THREADS
207 
208 	ji->prj->DoGeomOpt(ji->go, updt);
209 
210 	ji->prj->ThreadLock();
211 	ji->prj->DestroyProgressDialog();
212 	ji->prj->ThreadUnlock();
213 
214 	project::background_job_running = false;
215 	return NULL;
216 }
217 
start_job_MolDyn(jobinfo_MolDyn * ji)218 void gtk_project::start_job_MolDyn(jobinfo_MolDyn * ji)
219 {
220 	if (ji->show_dialog)
221 	{
222 		new gtk_moldyn_dialog(& ji->md);		// the object will call delete itself...
223 		cout << "DEBUG : now returning from gtk_project::MolDynGetParam()." << endl;
224 
225 		// the above dialog is (AND IT MUST BE) a modal one; we will return
226 		// from the function only after the dialog is closed.
227 	}
228 
229 	if (!ji->md.GetConfirm()) return;
230 
231 #ifdef ENABLE_THREADS
232 
233 	GThread * t = g_thread_create(process_job_MolDyn, (gpointer) ji, FALSE, NULL);
234 	if (t == NULL) ErrorMessage(_("Thread creation failed : MolDyn"));
235 
236 #else	// ENABLE_THREADS
237 
238 	process_job_MolDyn((gpointer) ji);
239 
240 #endif	// ENABLE_THREADS
241 }
242 
process_job_MolDyn(gpointer p)243 gpointer gtk_project::process_job_MolDyn(gpointer p)
244 {
245 	project::background_job_running = true;
246 	jobinfo_MolDyn * ji = (jobinfo_MolDyn *) p;
247 
248 	ji->prj->ThreadLock();
249 	ji->prj->CreateProgressDialog(_("Molecular Dynamics"), true, NOT_DEFINED, NOT_DEFINED);
250 	ji->prj->ThreadUnlock();
251 
252 #ifdef ENABLE_THREADS
253 	const bool updt = false;
254 #else	// ENABLE_THREADS
255 	const bool updt = true;
256 #endif	// ENABLE_THREADS
257 
258 	ji->prj->DoMolDyn(ji->md, updt);
259 
260 	ji->prj->ThreadLock();
261 	ji->prj->DestroyProgressDialog();
262 	ji->prj->ThreadUnlock();
263 
264 	project::background_job_running = false;
265 	return NULL;
266 }
267 
start_job_RandomSearch(jobinfo_RandomSearch * ji)268 void gtk_project::start_job_RandomSearch(jobinfo_RandomSearch * ji)
269 {
270 #ifdef ENABLE_THREADS
271 
272 	GThread * t = g_thread_create(process_job_RandomSearch, (gpointer) ji, FALSE, NULL);
273 	if (t == NULL) ErrorMessage(_("Thread creation failed : RandomSearch"));
274 
275 #else	// ENABLE_THREADS
276 
277 	process_job_RandomSearch((gpointer) ji);
278 
279 #endif	// ENABLE_THREADS
280 }
281 
process_job_RandomSearch(gpointer p)282 gpointer gtk_project::process_job_RandomSearch(gpointer p)
283 {
284 	project::background_job_running = true;
285 	jobinfo_RandomSearch * ji = (jobinfo_RandomSearch *) p;
286 
287 	ji->prj->ThreadLock();
288 	ji->prj->CreateProgressDialog(_("Random Search"), true, NOT_DEFINED, NOT_DEFINED);
289 	ji->prj->ThreadUnlock();
290 
291 #ifdef ENABLE_THREADS
292 	const bool updt = false;
293 #else	// ENABLE_THREADS
294 	const bool updt = true;
295 #endif	// ENABLE_THREADS
296 
297 	ji->prj->DoRandomSearch(ji->cycles, ji->optsteps, updt);
298 
299 	ji->prj->ThreadLock();
300 	ji->prj->DestroyProgressDialog();
301 	ji->prj->ThreadUnlock();
302 
303 	project::background_job_running = false;
304 	return NULL;
305 }
306 
307 // the other computation tasks are not yet multithreaded, but the above template can be used...
308 // the other computation tasks are not yet multithreaded, but the above template can be used...
309 // the other computation tasks are not yet multithreaded, but the above template can be used...
310 
CreateGraphicsWnd(bool detached)311 base_wnd * gtk_project::CreateGraphicsWnd(bool detached)
312 {
313 //cout << "gtk_project::CreateGraphicsWnd()" << endl;
314 	gtk_oglview_wnd * w = new gtk_oglview_wnd(detached);
315 
316 	// since a newly created window is always unlinked,
317 	// also w->label_widget is always NULL...
318 
319 	if (!detached)
320 	{
321 		gtk_app::GetAppX()->AddTabToNB(w->view_widget, w->label_widget);
322 	}
323 
324 	return w;
325 }
326 
DestroyGraphicsWnd(base_wnd * wB)327 void gtk_project::DestroyGraphicsWnd(base_wnd * wB)
328 {
329 //cout << "gtk_project::DestroyGraphicsWnd()" << endl;
330 	gtk_oglview_wnd * wX = dynamic_cast<gtk_oglview_wnd *>(wB);
331 
332 // this really seems to be redundant since the plotting views are destoyed the same way...
333 // this really seems to be redundant since the plotting views are destoyed the same way...
334 // this really seems to be redundant since the plotting views are destoyed the same way...
335 
336 	if (!wX)
337 	{
338 		assertion_failed(__FILE__, __LINE__, "bad wnd!");
339 	}
340 	else
341 	{
342 		if (!wX->IsDetached())
343 		{
344 			gtk_app::GetAppX()->RemoveTabFromNB(wX->view_widget);
345 		}
346 
347 		delete wB;
348 	}
349 }
350 
CreatePlot1DWnd(bool detached)351 base_wnd * gtk_project::CreatePlot1DWnd(bool detached)
352 {
353 //cout << "gtk_project::CreatePlot1DWnd()" << endl;
354 	gtk_p1dview_wnd * w = new gtk_p1dview_wnd(detached);
355 
356 	if (!detached)
357 	{
358 		gtk_app::GetAppX()->AddTabToNB(w->view_widget, w->label_widget);
359 	}
360 
361 	return w;
362 }
363 
CreatePlot2DWnd(bool detached)364 base_wnd * gtk_project::CreatePlot2DWnd(bool detached)
365 {
366 //cout << "gtk_project::CreatePlot2DWnd()" << endl;
367 	gtk_p2dview_wnd * w = new gtk_p2dview_wnd(detached);
368 
369 	if (!detached)
370 	{
371 		gtk_app::GetAppX()->AddTabToNB(w->view_widget, w->label_widget);
372 	}
373 
374 	return w;
375 }
376 
CreateEnergyLevelDiagramWnd(bool detached)377 base_wnd * gtk_project::CreateEnergyLevelDiagramWnd(bool detached)
378 {
379 //cout << "gtk_project::CreateEnergyLevelDiagramWnd()" << endl;
380 	gtk_eldview_wnd * w = new gtk_eldview_wnd(detached);
381 
382 	if (!detached)
383 	{
384 		gtk_app::GetAppX()->AddTabToNB(w->view_widget, w->label_widget);
385 	}
386 
387 	return w;
388 }
389 
CreateReactionCoordinatePlotWnd(bool detached)390 base_wnd * gtk_project::CreateReactionCoordinatePlotWnd(bool detached)
391 {
392 //cout << "gtk_project::CreateReactionCoordinatePlotWnd()" << endl;
393 	gtk_rcpview_wnd * w = new gtk_rcpview_wnd(detached);
394 
395 	if (!detached)
396 	{
397 		gtk_app::GetAppX()->AddTabToNB(w->view_widget, w->label_widget);
398 	}
399 
400 	return w;
401 }
402 
CreateGenericProteinChainWnd(bool detached)403 base_wnd * gtk_project::CreateGenericProteinChainWnd(bool detached)
404 {
405 //cout << "gtk_project::CreateGenericProteinChainWnd()" << endl;
406 	gtk_gpcview_wnd * w = new gtk_gpcview_wnd(detached);
407 
408 	if (!detached)
409 	{
410 		gtk_app::GetAppX()->AddTabToNB(w->view_widget, w->label_widget);
411 	}
412 
413 	return w;
414 }
415 
DestroyPlottingWnd(base_wnd * wB)416 void gtk_project::DestroyPlottingWnd(base_wnd * wB)
417 {
418 //cout << "gtk_project::DestroyPlottingWnd()" << endl;
419 	gtk_wnd * wX = dynamic_cast<gtk_wnd *>(wB);
420 
421 	if (!wX)
422 	{
423 		assertion_failed(__FILE__, __LINE__, "bad wnd!");
424 	}
425 	else
426 	{
427 		if (!wX->IsDetached())
428 		{
429 			gtk_app::GetAppX()->RemoveTabFromNB(wX->view_widget);
430 		}
431 
432 		delete wB;
433 	}
434 }
435 
Message(const char * msg)436 void gtk_project::Message(const char * msg)
437 {
438 	gtk_app::sMessage(msg);
439 }
440 
WarningMessage(const char * msg)441 void gtk_project::WarningMessage(const char * msg)
442 {
443 	gtk_app::sWarningMessage(msg);
444 }
445 
ErrorMessage(const char * msg)446 void gtk_project::ErrorMessage(const char * msg)
447 {
448 	gtk_app::sErrorMessage(msg);
449 }
450 
Question(const char * msg)451 bool gtk_project::Question(const char * msg)
452 {
453 	return gtk_app::sQuestion(msg);
454 }
455 
PrintToLog(const char * msg)456 void gtk_project::PrintToLog(const char * msg)
457 {
458 	gtk_app::sPrintToLog(msg);
459 }
460 
461 // the popup-menu callbacks start here ; the popup-menu callbacks start here
462 // the popup-menu callbacks start here ; the popup-menu callbacks start here
463 // the popup-menu callbacks start here ; the popup-menu callbacks start here
464 
popup_FileImport(GtkWidget *,gpointer data)465 void gtk_project::popup_FileImport(GtkWidget *, gpointer data)
466 {
467 	gtk_project * prj = gtk_app::GetPrjX();
468 
469 	// will call delete itself...
470 	if (prj) new gtk_file_import_dialog(prj);
471 }
472 
popup_FileExport(GtkWidget *,gpointer data)473 void gtk_project::popup_FileExport(GtkWidget *, gpointer data)
474 {
475 	gtk_project * prj = gtk_app::GetPrjX();
476 
477 	// will call delete itself...
478 	if (prj) new gtk_file_export_dialog(prj);
479 }
480 
popup_FileExportGraphics(GtkWidget *,gpointer data)481 void gtk_project::popup_FileExportGraphics(GtkWidget *, gpointer data)
482 {
483 	gtk_project * prj = gtk_app::GetPrjX();
484 
485 	// will call delete itself...
486 	if (prj) new gtk_file_save_graphics_dialog(prj);
487 }
488 
popup_FileExtra1(GtkWidget *,gpointer data)489 void gtk_project::popup_FileExtra1(GtkWidget *, gpointer data)
490 {
491 	gtk_project * prj = gtk_app::GetPrjX();
492 
493 	// will call delete itself...
494 	if (prj) new gtk_importpdb_dialog(prj);
495 }
496 
popup_FileExtra2(GtkWidget *,gpointer data)497 void gtk_project::popup_FileExtra2(GtkWidget *, gpointer data)
498 {
499 	gtk_project * prj = gtk_app::GetPrjX();
500 
501 // this is just a stub for a new "extra"-item...
502 // this is just a stub for a new "extra"-item...
503 // this is just a stub for a new "extra"-item...
504 
505 	if (prj)
506 	{
507 		prj->Message("this is not yet implemented...");
508 	}
509 }
510 
popup_SelectAll(GtkWidget *,gpointer data)511 void gtk_project::popup_SelectAll(GtkWidget *, gpointer data)
512 {
513 	gtk_project * prj = gtk_app::GetPrjX();
514 	prj->SelectAll();
515 }
516 
popup_SelectNone(GtkWidget *,gpointer data)517 void gtk_project::popup_SelectNone(GtkWidget *, gpointer data)
518 {
519 	gtk_project * prj = gtk_app::GetPrjX();
520 	prj->SelectAll();	// should call the base class function to prevent the flash!!!
521 	prj->InvertSelection();
522 }
523 
popup_InvertSelection(GtkWidget *,gpointer data)524 void gtk_project::popup_InvertSelection(GtkWidget *, gpointer data)
525 {
526 	gtk_project * prj = gtk_app::GetPrjX();
527 	prj->InvertSelection();
528 }
529 
popup_HideSelected(GtkWidget *,gpointer data)530 void gtk_project::popup_HideSelected(GtkWidget *, gpointer data)
531 {
532 	gtk_project * prj = gtk_app::GetPrjX();
533 	prj->HideSelected();
534 }
535 
popup_ShowSelected(GtkWidget *,gpointer data)536 void gtk_project::popup_ShowSelected(GtkWidget *, gpointer data)
537 {
538 	gtk_project * prj = gtk_app::GetPrjX();
539 	prj->ShowSelected();
540 }
541 
popup_LockSelected(GtkWidget *,gpointer data)542 void gtk_project::popup_LockSelected(GtkWidget *, gpointer data)
543 {
544 	gtk_project * prj = gtk_app::GetPrjX();
545 	prj->LockSelected();
546 }
547 
popup_UnlockSelected(GtkWidget *,gpointer data)548 void gtk_project::popup_UnlockSelected(GtkWidget *, gpointer data)
549 {
550 	gtk_project * prj = gtk_app::GetPrjX();
551 	prj->UnlockSelected();
552 }
553 
popup_DeleteSelected(GtkWidget *,gpointer data)554 void gtk_project::popup_DeleteSelected(GtkWidget *, gpointer data)
555 {
556 	gtk_project * prj = gtk_app::GetPrjX();
557 	prj->DeleteSelected();
558 }
559 
popup_SelectModeAtom(GtkWidget *,gpointer data)560 void gtk_project::popup_SelectModeAtom(GtkWidget *, gpointer data)
561 {
562 	custom_app::current_select_mode = custom_app::smAtom;
563 cout << "DEBUG : selection mode = atm" << endl;
564 }
565 
popup_SelectModeResidue(GtkWidget *,gpointer data)566 void gtk_project::popup_SelectModeResidue(GtkWidget *, gpointer data)
567 {
568 	custom_app::current_select_mode = custom_app::smResidue;
569 cout << "DEBUG : selection mode = res" << endl;
570 }
571 
popup_SelectModeChain(GtkWidget *,gpointer data)572 void gtk_project::popup_SelectModeChain(GtkWidget *, gpointer data)
573 {
574 	custom_app::current_select_mode = custom_app::smChain;
575 cout << "DEBUG : selection mode = chn" << endl;
576 }
577 
popup_SelectModeMolecule(GtkWidget *,gpointer data)578 void gtk_project::popup_SelectModeMolecule(GtkWidget *, gpointer data)
579 {
580 	custom_app::current_select_mode = custom_app::smMolecule;
581 cout << "DEBUG : selection mode = mol" << endl;
582 }
583 
popup_ViewsNewELD(GtkWidget *,gpointer data)584 void gtk_project::popup_ViewsNewELD(GtkWidget *, gpointer data)
585 {
586 	gtk_project * prj = gtk_app::GetPrjX();
587 	if (prj)
588 	{
589 		prj->AddEnergyLevelDiagramClient(true);
590 	}
591 }
592 
popup_ViewsNewSSC(GtkWidget *,gpointer data)593 void gtk_project::popup_ViewsNewSSC(GtkWidget *, gpointer data)
594 {
595 	gtk_project * prj = gtk_app::GetPrjX();
596 	if (prj)
597 	{
598 		prj->AddGenericProteinChainClient(true);
599 	}
600 }
601 
popup_RModeBallStick(GtkWidget *,gpointer data)602 void gtk_project::popup_RModeBallStick(GtkWidget *, gpointer data)
603 {
604 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
605 	oglwcl->render = RENDER_BALL_AND_STICK;
606 
607 	gtk_app::GetPrjX()->UpdateAllGraphicsViews();
608 }
609 
popup_RModeVanDerWaals(GtkWidget *,gpointer data)610 void gtk_project::popup_RModeVanDerWaals(GtkWidget *, gpointer data)
611 {
612 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
613 	oglwcl->render = RENDER_VAN_DER_WAALS;
614 
615 	gtk_app::GetPrjX()->UpdateAllGraphicsViews();
616 }
617 
popup_RModeCylinders(GtkWidget *,gpointer data)618 void gtk_project::popup_RModeCylinders(GtkWidget *, gpointer data)
619 {
620 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
621 	oglwcl->render = RENDER_CYLINDERS;
622 
623 	gtk_app::GetPrjX()->UpdateAllGraphicsViews();
624 }
625 
popup_RModeWireframe(GtkWidget *,gpointer data)626 void gtk_project::popup_RModeWireframe(GtkWidget *, gpointer data)
627 {
628 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
629 	oglwcl->render = RENDER_WIREFRAME;
630 
631 	gtk_app::GetPrjX()->UpdateAllGraphicsViews();
632 }
633 
popup_RModeNothing(GtkWidget *,gpointer data)634 void gtk_project::popup_RModeNothing(GtkWidget *, gpointer data)
635 {
636 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
637 	oglwcl->render = RENDER_NOTHING;
638 
639 	gtk_app::GetPrjX()->UpdateAllGraphicsViews();
640 }
641 
popup_CModeElement(GtkWidget *,gpointer data)642 void gtk_project::popup_CModeElement(GtkWidget *, gpointer data)
643 {
644 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
645 	oglwcl->colormode = & project::cm_element;
646 
647 	gtk_app::GetPrjX()->UpdateAllGraphicsViews();
648 }
649 
popup_CModeSecStruct(GtkWidget *,gpointer data)650 void gtk_project::popup_CModeSecStruct(GtkWidget *, gpointer data)
651 {
652 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
653 	oglwcl->colormode = & project::cm_secstruct;
654 
655 	gtk_app::GetPrjX()->UpdateAllGraphicsViews();
656 }
657 
popup_CModeHydPhob(GtkWidget *,gpointer data)658 void gtk_project::popup_CModeHydPhob(GtkWidget *, gpointer data)
659 {
660 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
661 	oglwcl->colormode = & project::cm_hydphob;
662 
663 	gtk_app::GetPrjX()->UpdateAllGraphicsViews();
664 }
665 
popup_LModeIndex(GtkWidget *,gpointer data)666 void gtk_project::popup_LModeIndex(GtkWidget *, gpointer data)
667 {
668 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
669 	oglwcl->label = LABEL_INDEX;
670 
671 	gtk_app::GetPrjX()->UpdateAllGraphicsViews();
672 }
673 
popup_LModeElement(GtkWidget *,gpointer data)674 void gtk_project::popup_LModeElement(GtkWidget *, gpointer data)
675 {
676 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
677 	oglwcl->label = LABEL_ELEMENT;
678 
679 	gtk_app::GetPrjX()->UpdateAllGraphicsViews();
680 }
681 
popup_LModeFCharge(GtkWidget *,gpointer data)682 void gtk_project::popup_LModeFCharge(GtkWidget *, gpointer data)
683 {
684 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
685 	oglwcl->label = LABEL_F_CHARGE;
686 
687 	gtk_app::GetPrjX()->UpdateAllGraphicsViews();
688 }
689 
popup_LModePCharge(GtkWidget *,gpointer data)690 void gtk_project::popup_LModePCharge(GtkWidget *, gpointer data)
691 {
692 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
693 	oglwcl->label = LABEL_P_CHARGE;
694 
695 	gtk_app::GetPrjX()->UpdateAllGraphicsViews();
696 }
697 
popup_LModeAtomType(GtkWidget *,gpointer data)698 void gtk_project::popup_LModeAtomType(GtkWidget *, gpointer data)
699 {
700 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
701 	oglwcl->label = LABEL_ATOMTYPE;
702 
703 	gtk_app::GetPrjX()->UpdateAllGraphicsViews();
704 }
705 
popup_LModeBuilderID(GtkWidget *,gpointer data)706 void gtk_project::popup_LModeBuilderID(GtkWidget *, gpointer data)
707 {
708 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
709 	oglwcl->label = LABEL_BUILDER_ID;
710 
711 	gtk_app::GetPrjX()->UpdateAllGraphicsViews();
712 }
713 
popup_LModeBondType(GtkWidget *,gpointer data)714 void gtk_project::popup_LModeBondType(GtkWidget *, gpointer data)
715 {
716 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
717 	oglwcl->label = LABEL_BONDTYPE;
718 
719 	gtk_app::GetPrjX()->UpdateAllGraphicsViews();
720 }
721 
popup_LModeResidue(GtkWidget *,gpointer data)722 void gtk_project::popup_LModeResidue(GtkWidget *, gpointer data)
723 {
724 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
725 	oglwcl->label = LABEL_RESIDUE;
726 
727 	gtk_app::GetPrjX()->UpdateAllGraphicsViews();
728 }
729 
popup_LModeSecStruct(GtkWidget *,gpointer data)730 void gtk_project::popup_LModeSecStruct(GtkWidget *, gpointer data)
731 {
732 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
733 	oglwcl->label = LABEL_SEC_STRUCT;
734 
735 	gtk_app::GetPrjX()->UpdateAllGraphicsViews();
736 }
737 
popup_LModeNothing(GtkWidget *,gpointer data)738 void gtk_project::popup_LModeNothing(GtkWidget *, gpointer data)
739 {
740 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
741 	oglwcl->label = LABEL_NOTHING;
742 
743 	gtk_app::GetPrjX()->UpdateAllGraphicsViews();
744 }
745 
popup_ObjRibbon(GtkWidget *,gpointer data)746 void gtk_project::popup_ObjRibbon(GtkWidget *, gpointer data)
747 {
748 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
749 	gtk_project * prj = gtk_app::GetPrjX();
750 	if (prj)
751 	{
752 		if (!prj->ref_civ) prj->UpdateChains();
753 		vector<chn_info> & ci_vector = (* prj->ref_civ);
754 		for (i32u n1 = 0;n1 < ci_vector.size();n1++)
755 		{
756 			if (ci_vector[n1].GetType() != chn_info::amino_acid) continue;
757 			if (ci_vector[n1].GetLength() < 3) continue;
758 
759 			if (ci_vector[n1].GetSecStrStates() == NULL) DefineSecondaryStructure(prj);
760 
761 			prj->AddObject(new ogl_ribbon(prj, oglwcl->colormode, n1, 4));		// min. order is 2!!!
762 		}
763 
764 		prj->UpdateAllGraphicsViews();
765 	}
766 }
767 
popup_ObjEPlane(GtkWidget *,gpointer data)768 void gtk_project::popup_ObjEPlane(GtkWidget *, gpointer data)
769 {
770 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
771 	gtk_project * prj = gtk_app::GetPrjX();
772 	if (prj)
773 	{
774 		if (!prj->GetCurrentSetup()->GetCurrentEngine())
775 		{
776 			prj->Message(_("Please calculate energy first!"));
777 		}
778 		else
779 		{
780 			static const char command[] = "add plane esp rb1 138.0 AUTO 1.0 50 1 0.75";
781 			new gtk_command_dialog(prj, oglwcl, command);
782 		}
783 	}
784 }
785 
popup_ObjEVolume(GtkWidget *,gpointer data)786 void gtk_project::popup_ObjEVolume(GtkWidget *, gpointer data)
787 {
788 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
789 	gtk_project * prj = gtk_app::GetPrjX();
790 	if (prj)
791 	{
792 		if (!prj->GetCurrentSetup()->GetCurrentEngine())
793 		{
794 			prj->Message(_("Please calculate energy first!"));
795 		}
796 		else
797 		{
798 			static const char command[] = "add volrend esp rb2 138.0 0.0 1.0 25 0.50";
799 			new gtk_command_dialog(prj, oglwcl, command);
800 		}
801 	}
802 }
803 
popup_ObjESurface(GtkWidget *,gpointer data)804 void gtk_project::popup_ObjESurface(GtkWidget *, gpointer data)
805 {
806 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
807 	gtk_project * prj = gtk_app::GetPrjX();
808 	if (prj)
809 	{
810 		if (!prj->GetCurrentSetup()->GetCurrentEngine())
811 		{
812 			prj->Message(_("Please calculate energy first!"));
813 		}
814 		else
815 		{
816 			static const char command[] = "add surf2 esp unity red blue +35.0 -35.0 1.0 0.0 2.0 50 0 0 0.50";
817 			new gtk_command_dialog(prj, oglwcl, command);
818 		}
819 	}
820 }
821 
popup_ObjEVDWSurface(GtkWidget *,gpointer data)822 void gtk_project::popup_ObjEVDWSurface(GtkWidget *, gpointer data)
823 {
824 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
825 	gtk_project * prj = gtk_app::GetPrjX();
826 	if (prj)
827 	{
828 		if (!prj->GetCurrentSetup()->GetCurrentEngine())
829 		{
830 			prj->Message(_("Please calculate energy first!"));
831 		}
832 		else
833 		{
834 			static const char command[] = "add surf1 vdws esp rb1 1.0 70.0 AUTO 2.0 50 1 1 0.65";
835 			new gtk_command_dialog(prj, oglwcl, command);
836 		}
837 	}
838 }
839 
popup_ObjEDPlane(GtkWidget *,gpointer data)840 void gtk_project::popup_ObjEDPlane(GtkWidget *, gpointer data)
841 {
842 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
843 	gtk_project * prj = gtk_app::GetPrjX();
844 	if (prj)
845 	{
846 		if (!prj->GetCurrentSetup()->GetCurrentEngine())
847 		{
848 			prj->Message(_("Please calculate energy first!"));
849 		}
850 		else
851 		{
852 			static const char command[] = "add plane eldens rb1 0.05 0.0 0.75 50 1 0.75";
853 			new gtk_command_dialog(prj, oglwcl, command);
854 		}
855 	}
856 }
857 
popup_ObjEDSurface(GtkWidget *,gpointer data)858 void gtk_project::popup_ObjEDSurface(GtkWidget *, gpointer data)
859 {
860 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
861 	gtk_project * prj = gtk_app::GetPrjX();
862 	if (prj)
863 	{
864 		if (!prj->GetCurrentSetup()->GetCurrentEngine())
865 		{
866 			prj->Message(_("Please calculate energy first!"));
867 		}
868 		else
869 		{
870 			static const char command[] = "add surf1 eldens unity red 0.01 1.0 0.0 1.5 50 0 0 0.65";
871 			new gtk_command_dialog(prj, oglwcl, command);
872 		}
873 	}
874 }
875 
popup_ObjMOPlane(GtkWidget *,gpointer data)876 void gtk_project::popup_ObjMOPlane(GtkWidget *, gpointer data)
877 {
878 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
879 	gtk_project * prj = gtk_app::GetPrjX();
880 	if (prj)
881 	{
882 		if (!prj->GetCurrentSetup()->GetCurrentEngine())
883 		{
884 			prj->Message(_("Please calculate energy first!"));
885 		}
886 		else
887 		{
888 			static const char command[] = "add plane mo rb1 0.05 0.0 0.75 50 1 0.75";
889 			new gtk_command_dialog(prj, oglwcl, command);
890 		}
891 	}
892 }
893 
popup_ObjMOVolume(GtkWidget *,gpointer data)894 void gtk_project::popup_ObjMOVolume(GtkWidget *, gpointer data)
895 {
896 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
897 	gtk_project * prj = gtk_app::GetPrjX();
898 	if (prj)
899 	{
900 		if (!prj->GetCurrentSetup()->GetCurrentEngine())
901 		{
902 			prj->Message(_("Please calculate energy first!"));
903 		}
904 		else
905 		{
906 			static const char command[] = "add volrend mo rb2 0.025 0.0 1.5 25 0.50";
907 			new gtk_command_dialog(prj, oglwcl, command);
908 		}
909 	}
910 }
911 
popup_ObjMOSurface(GtkWidget *,gpointer data)912 void gtk_project::popup_ObjMOSurface(GtkWidget *, gpointer data)
913 {
914 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
915 	gtk_project * prj = gtk_app::GetPrjX();
916 	if (prj)
917 	{
918 		if (!prj->GetCurrentSetup()->GetCurrentEngine())
919 		{
920 			prj->Message(_("Please calculate energy first!"));
921 		}
922 		else
923 		{
924 			static const char command[] = "add surf2 mo unity red blue +0.025 -0.025 1.0 0.0 1.5 50 0 0 0.50";
925 			new gtk_command_dialog(prj, oglwcl, command);
926 		}
927 	}
928 }
929 
popup_ObjMODPlane(GtkWidget *,gpointer data)930 void gtk_project::popup_ObjMODPlane(GtkWidget *, gpointer data)
931 {
932 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
933 	gtk_project * prj = gtk_app::GetPrjX();
934 	if (prj)
935 	{
936 		if (!prj->GetCurrentSetup()->GetCurrentEngine())
937 		{
938 			prj->Message(_("Please calculate energy first!"));
939 		}
940 		else
941 		{
942 			static const char command[] = "add plane mod rb1 0.005 0.0 0.75 50 1 0.75";
943 			new gtk_command_dialog(prj, oglwcl, command);
944 		}
945 	}
946 }
947 
popup_ObjMODVolume(GtkWidget *,gpointer data)948 void gtk_project::popup_ObjMODVolume(GtkWidget *, gpointer data)
949 {
950 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
951 	gtk_project * prj = gtk_app::GetPrjX();
952 	if (prj)
953 	{
954 		if (!prj->GetCurrentSetup()->GetCurrentEngine())
955 		{
956 			prj->Message(_("Please calculate energy first!"));
957 		}
958 		else
959 		{
960 			static const char command[] = "add volrend mod rb2 0.0025 0.0 1.5 25 0.35";
961 			new gtk_command_dialog(prj, oglwcl, command);
962 		}
963 	}
964 }
965 
popup_ObjMODSurface(GtkWidget *,gpointer data)966 void gtk_project::popup_ObjMODSurface(GtkWidget *, gpointer data)
967 {
968 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
969 	gtk_project * prj = gtk_app::GetPrjX();
970 	if (prj)
971 	{
972 		if (!prj->GetCurrentSetup()->GetCurrentEngine())
973 		{
974 			prj->Message(_("Please calculate energy first!"));
975 		}
976 		else
977 		{
978 			static const char command[] = "add surf1 mod unity red 0.0025 1.0 0.0 1.5 50 0 0 0.65";
979 			new gtk_command_dialog(prj, oglwcl, command);
980 		}
981 	}
982 }
983 
popup_ObjectsDeleteCurrent(GtkWidget *,gpointer data)984 void gtk_project::popup_ObjectsDeleteCurrent(GtkWidget *, gpointer data)
985 {
986 	gtk_project * prj = gtk_app::GetPrjX();
987 	prj->DoDeleteCurrentObject();
988 }
989 
popup_CompSetup(GtkWidget *,gpointer data)990 void gtk_project::popup_CompSetup(GtkWidget *, gpointer data)
991 {
992 	gtk_project * prj = gtk_app::GetPrjX();
993 
994 	// will call delete itself...
995 	new gtk_setup_dialog(prj);
996 }
997 
popup_CompEnergy(GtkWidget *,gpointer data)998 void gtk_project::popup_CompEnergy(GtkWidget *, gpointer data)
999 {
1000 	gtk_project * prj = gtk_app::GetPrjX();
1001 	if (prj) prj->DoEnergy();
1002 }
1003 
popup_CompGeomOpt(GtkWidget *,gpointer data)1004 void gtk_project::popup_CompGeomOpt(GtkWidget *, gpointer data)
1005 {
1006 	gtk_project * prj = gtk_app::GetPrjX();
1007 	if (prj)
1008 	{
1009 		setup * su = prj->GetCurrentSetup();
1010 		static jobinfo_GeomOpt ji;
1011 
1012 		ji.prj = prj;
1013 		ji.go = geomopt_param(su);
1014 		ji.show_dialog = true;
1015 
1016 		prj->start_job_GeomOpt(& ji);
1017 	}
1018 }
1019 
popup_CompMolDyn(GtkWidget *,gpointer data)1020 void gtk_project::popup_CompMolDyn(GtkWidget *, gpointer data)
1021 {
1022 	gtk_project * prj = gtk_app::GetPrjX();
1023 	if (prj)
1024 	{
1025 		setup * su = prj->GetCurrentSetup();
1026 		static jobinfo_MolDyn ji;
1027 
1028 		ji.prj = prj;
1029 		ji.md = moldyn_param(su);
1030 		ji.show_dialog = true;
1031 
1032 		prj->start_job_MolDyn(& ji);
1033 	}
1034 }
1035 
popup_CompRandomSearch(GtkWidget *,gpointer data)1036 void gtk_project::popup_CompRandomSearch(GtkWidget *, gpointer data)
1037 {
1038 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
1039 	gtk_project * prj = gtk_app::GetPrjX();
1040 	if (prj)
1041 	{
1042 		static const char command[] = "random_search 100 250";
1043 		new gtk_command_dialog(prj, oglwcl, command);
1044 	}
1045 }
1046 
popup_CompSystematicSearch(GtkWidget *,gpointer data)1047 void gtk_project::popup_CompSystematicSearch(GtkWidget *, gpointer data)
1048 {
1049 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
1050 	gtk_project * prj = gtk_app::GetPrjX();
1051 	if (prj)
1052 	{
1053 		static const char command[] = "systematic_search 6 250";
1054 		new gtk_command_dialog(prj, oglwcl, command);
1055 	}
1056 }
1057 
popup_CompMonteCarloSearch(GtkWidget *,gpointer data)1058 void gtk_project::popup_CompMonteCarloSearch(GtkWidget *, gpointer data)
1059 {
1060 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
1061 	gtk_project * prj = gtk_app::GetPrjX();
1062 	if (prj)
1063 	{
1064 		static const char command[] = "montecarlo_search 10 100 250";
1065 		new gtk_command_dialog(prj, oglwcl, command);
1066 	}
1067 }
1068 
popup_CompTorsionEnergyPlot1D(GtkWidget *,gpointer data)1069 void gtk_project::popup_CompTorsionEnergyPlot1D(GtkWidget *, gpointer data)
1070 {
1071 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
1072 	gtk_project * prj = gtk_app::GetPrjX();
1073 	if (prj)
1074 	{
1075 prj->Message(_("PLEASE NOTE!\nThe command string, which is displayed in the next dialog, is incomplete.\nYou should replace the letters A-D with atom indices that define the torsion.\n\nALSO NOTE: structure refinement is always done using molecular mechanics (optsteps)."));
1076 
1077 		static const char command[] = "make_plot1 A B C D 36 0.0 360.0 250";
1078 		new gtk_command_dialog(prj, oglwcl, command);
1079 	}
1080 }
1081 
popup_CompTorsionEnergyPlot2D(GtkWidget *,gpointer data)1082 void gtk_project::popup_CompTorsionEnergyPlot2D(GtkWidget *, gpointer data)
1083 {
1084 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
1085 	gtk_project * prj = gtk_app::GetPrjX();
1086 	if (prj)
1087 	{
1088 prj->Message(_("PLEASE NOTE!\nThe command string, which is displayed in the next dialog, is incomplete.\nYou should replace the letters A-D and I-L with atom indices that define the torsions.\n\nALSO NOTE: structure refinement is always done using molecular mechanics (optsteps)."));
1089 
1090 		static const char command[] = "make_plot2 A B C D 36 0.0 360.0 I J K L 36 0.0 360.0 250";
1091 		new gtk_command_dialog(prj, oglwcl, command);
1092 	}
1093 }
1094 
popup_CompPopAnaElectrostatic(GtkWidget *,gpointer data)1095 void gtk_project::popup_CompPopAnaElectrostatic(GtkWidget *, gpointer data)
1096 {
1097 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
1098 	gtk_project * prj = gtk_app::GetPrjX();
1099 	if (prj)
1100 	{
1101 		static const char command[] = "population_analysis_ESP";
1102 		new gtk_command_dialog(prj, oglwcl, command);
1103 	}
1104 }
1105 
popup_CompTransitionStateSearch(GtkWidget *,gpointer data)1106 void gtk_project::popup_CompTransitionStateSearch(GtkWidget *, gpointer data)
1107 {
1108 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
1109 	gtk_project * prj = gtk_app::GetPrjX();
1110 	if (prj)
1111 	{
1112 		static const char command[] = "transition_state_search 10.0 500.0";
1113 		new gtk_command_dialog(prj, oglwcl, command);
1114 	}
1115 }
1116 
popup_CompStationaryStateSearch(GtkWidget *,gpointer data)1117 void gtk_project::popup_CompStationaryStateSearch(GtkWidget *, gpointer data)
1118 {
1119 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
1120 	gtk_project * prj = gtk_app::GetPrjX();
1121 	if (prj)
1122 	{
1123 		static const char command[] = "stationary_state_search 100";
1124 		new gtk_command_dialog(prj, oglwcl, command);
1125 	}
1126 }
1127 
popup_CompFormula(GtkWidget *,gpointer data)1128 void gtk_project::popup_CompFormula(GtkWidget *, gpointer data)
1129 {
1130 	gtk_project * prj = gtk_app::GetPrjX();
1131 	if (prj) prj->DoFormula();
1132 }
1133 
popup_CompSetFormalCharge(GtkWidget *,gpointer data)1134 void gtk_project::popup_CompSetFormalCharge(GtkWidget *, gpointer data)
1135 {
1136 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
1137 	gtk_project * prj = gtk_app::GetPrjX();
1138 	if (prj)
1139 	{
1140 		static const char command[] = "set_formal_charge X +0";
1141 		new gtk_command_dialog(prj, oglwcl, command);
1142 	}
1143 }
1144 
popup_CompCreateRS(GtkWidget *,gpointer data)1145 void gtk_project::popup_CompCreateRS(GtkWidget *, gpointer data)	// todo : this is only for testing?!?!?!?
1146 {
1147 	gtk_project * prj = gtk_app::GetPrjX();
1148 	if (prj)
1149 	{
1150 		if (prj->GetRS() == NULL) prj->CreateRS();
1151 	}
1152 }
1153 
popup_CompCycleRS(GtkWidget *,gpointer data)1154 void gtk_project::popup_CompCycleRS(GtkWidget *, gpointer data)	// todo : this is only for testing?!?!?!?
1155 {
1156 	gtk_project * prj = gtk_app::GetPrjX();
1157 	if (prj && prj->GetRS() != NULL)
1158 	{
1159 	//	prj->GetRS()->CycleStructures();
1160 		prj->UpdateAllGraphicsViews();
1161 	}
1162 	else cout << _("ERROR") << endl;
1163 }
1164 
popup_TrajView(GtkWidget *,gpointer data)1165 void gtk_project::popup_TrajView(GtkWidget *, gpointer data)
1166 {
1167 	gtk_project * prj = gtk_app::GetPrjX();
1168 	if (!prj->GetTrajectoryFile())
1169 	{
1170 		// will call delete itself...
1171 		if (prj) new gtk_trajfile_dialog(prj);
1172 	}
1173 	else prj->ErrorMessage(_("Trajectory file already open?"));
1174 }
1175 
popup_SetOrbital(GtkWidget *,gpointer data)1176 void gtk_project::popup_SetOrbital(GtkWidget *, gpointer data)
1177 {
1178 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
1179 	gtk_project * prj = gtk_app::GetPrjX();
1180 	if (prj)
1181 	{
1182 		prj->Message(_("PLEASE NOTE!\nThe command string, which is displayed in the next dialog, is incomplete.\nYou should replace the letter X with the orbital index that will become the current orbital."));
1183 
1184 		static const char command[] = "set_current_orbital X";
1185 		new gtk_command_dialog(prj, oglwcl, command);
1186 	}
1187 }
1188 
popup_HAdd(GtkWidget *,gpointer data)1189 void gtk_project::popup_HAdd(GtkWidget *, gpointer data)
1190 {
1191 	gtk_project * prj = gtk_app::GetPrjX();
1192 	if (prj)
1193 	{
1194 		prj->AddH();
1195 		prj->UpdateAllGraphicsViews();
1196 	}
1197 }
1198 
popup_HRemove(GtkWidget *,gpointer data)1199 void gtk_project::popup_HRemove(GtkWidget *, gpointer data)
1200 {
1201 	gtk_project * prj = gtk_app::GetPrjX();
1202 	if (prj)
1203 	{
1204 		prj->RemoveH();
1205 		prj->UpdateAllGraphicsViews();
1206 	}
1207 }
1208 
popup_SolvateBox(GtkWidget *,gpointer data)1209 void gtk_project::popup_SolvateBox(GtkWidget *, gpointer data)
1210 {
1211 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
1212 	gtk_project * prj = gtk_app::GetPrjX();
1213 	if (prj)
1214 	{
1215 		static const char command[] = "solvate_box 3.0 3.0 3.0";
1216 		new gtk_command_dialog(prj, oglwcl, command);
1217 	}
1218 }
1219 
popup_SolvateSphere(GtkWidget *,gpointer data)1220 void gtk_project::popup_SolvateSphere(GtkWidget *, gpointer data)
1221 {
1222 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
1223 	gtk_project * prj = gtk_app::GetPrjX();
1224 	if (prj)
1225 	{
1226 		static const char command[] = "solvate_sphere 1.2 1.6";
1227 		new gtk_command_dialog(prj, oglwcl, command);
1228 	}
1229 }
1230 
popup_BuilderAmino(GtkWidget *,gpointer data)1231 void gtk_project::popup_BuilderAmino(GtkWidget *, gpointer data)
1232 {
1233 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
1234 	gtk_project * prj = gtk_app::GetPrjX();
1235 	if (prj)
1236 	{
1237 prj->Message(_("PLEASE NOTE!\nThe command string, which is displayed in the next dialog, is incomplete.\nYou should replace the default sequence AAA with the sequence to be built."));
1238 
1239 		static const char command[] = "build_amino AAA";
1240 		new gtk_command_dialog(prj, oglwcl, command);
1241 	}
1242 }
1243 
popup_BuilderNucleic(GtkWidget *,gpointer data)1244 void gtk_project::popup_BuilderNucleic(GtkWidget *, gpointer data)
1245 {
1246 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
1247 	gtk_project * prj = gtk_app::GetPrjX();
1248 	if (prj)
1249 	{
1250 prj->Message(_("PLEASE NOTE!\nThe command string, which is displayed in the next dialog, is incomplete.\nYou should replace the default sequence AGTCaguc with the sequence to be built."));
1251 
1252 		static const char command[] = "build_nucleic AGTCaguc";
1253 		new gtk_command_dialog(prj, oglwcl, command);
1254 	}
1255 }
1256 
popup_Center(GtkWidget *,gpointer data)1257 void gtk_project::popup_Center(GtkWidget *, gpointer data)
1258 {
1259 	gtk_project * prj = gtk_app::GetPrjX();
1260 	if (prj)
1261 	{
1262 		prj->CenterCRDSet(0, true);
1263 
1264 		// Which is the current Coord Set?
1265 		// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1266 		// usually it's 0, but it could be any/all.
1267 		// the crdset-system is not yet in GUI...
1268 
1269 		// 2001-06-18 TH: yes, this is not quite ready.
1270 		// but i guess in the end we will move ALL crd-sets...
1271 
1272 // sometimes this centering won't work, if the camera won't point to the origo.
1273 // so, here we try to turn it there. ANY EFFECTS TO LIGHTS, ETC??????
1274 
1275 		// how to get base_app::camera_vector in a reasonable way?
1276 		// it's easy to set the focus of camera but what about lights???
1277 
1278 		// -> implement this stuff in base_app????????????????????????
1279 
1280 		prj->UpdateAllGraphicsViews();
1281 	}
1282 }
1283 
popup_ClearAll(GtkWidget *,gpointer data)1284 void gtk_project::popup_ClearAll(GtkWidget *, gpointer data)
1285 {
1286 	gtk_project * prj = gtk_app::GetPrjX();
1287 	if (prj && base_app::GetAppB()->Question(_("Are you sure you want to clear everything?")))
1288 	{
1289 		prj->ClearModel();
1290 		prj->UpdateAllGraphicsViews();
1291 	}
1292 }
1293 
popup_EnterCommand(GtkWidget *,gpointer data)1294 void gtk_project::popup_EnterCommand(GtkWidget *, gpointer data)
1295 {
1296 	oglview_wcl * oglwcl = GetClient((GtkWidget *) data);
1297 	gtk_project * prj = gtk_app::GetPrjX();
1298 	if (prj)
1299 	{
1300 		new gtk_command_dialog(prj, oglwcl, NULL);
1301 	}
1302 }
1303 
1304 /*################################################################################################*/
1305 
1306 // eof
1307