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