/*========================================================================*/ static int WizardDrag(Block * block, int x, int y, int mod) { #ifdef _PYMOL_NOPY return 0; #else PyMOLGlobals *G = block->G; register CWizard *I = G->Wizard; int LineHeight = SettingGetGlobal_i(G, cSetting_internal_gui_control_size); int a; a = ((I->Block->rect.top - (y + cWizardClickOffset)) - cWizardTopMargin) / LineHeight; if((x < I->Block->rect.left) || (x > I->Block->rect.right)) a = -1; if(I->Pressed != a) { I->Pressed = -1; OrthoDirty(G); } if((a >= 0) && ((ov_size) a < I->NLine)) { switch (I->Line[a].type) { case cWizTypeButton: if(I->Pressed != a) { I->Pressed = a; OrthoDirty(G); } break; } } return (1); #endif }
int ControlSdofButton(PyMOLGlobals * G, int button) { CControl *I = G->Control; if(I) { if(button == 1) { /* LEFT */ if(I->sdofMode != SDOF_DRAG_MODE) { I->sdofMode = SDOF_DRAG_MODE; OrthoAddOutput(G, " SDOF: Drag mode.\n"); } else { I->sdofMode = SDOF_NORMAL_MODE; OrthoAddOutput(G, " SDOF: Normal mode.\n"); } } else if(button == 2) { /* RIGHT */ if(I->sdofMode != SDOF_CLIP_MODE) { I->sdofMode = SDOF_CLIP_MODE; OrthoAddOutput(G, " SDOF: Clip mode.\n"); } else { I->sdofMode = SDOF_NORMAL_MODE; OrthoAddOutput(G, " SDOF: Normal mode.\n"); } } OrthoDirty(G); } return 1; }
/*========================================================================*/ int ControlRock(PyMOLGlobals * G, int mode) { switch (mode) { case -2: break; case -1: SettingSetGlobal_b(G, cSetting_rock, !SettingGetGlobal_b(G, cSetting_rock)); if(SettingGetGlobal_b(G, cSetting_rock)) { SceneRestartSweepTimer(G); } break; case 0: SettingSetGlobal_b(G, cSetting_rock, false); break; case 1: SettingSetGlobal_b(G, cSetting_rock, true); SceneRestartSweepTimer(G); break; } if(mode != -2) { SceneRestartFrameTimer(G); OrthoDirty(G); } return SettingGetGlobal_b(G, cSetting_rock); }
static int ControlDrag(Block * block, int x, int y, int mod) { int width; int delta; int gui_width; PyMOLGlobals *G = block->G; register CControl *I = G->Control; if(!I->SkipRelease) { delta = x - I->LastPos; if(I->DragFlag) { if(delta) { gui_width = (int) SettingGet(G, cSetting_internal_gui_width) - delta; if(gui_width < cControlMinWidth) gui_width = cControlMinWidth; delta = (int) SettingGet(G, cSetting_internal_gui_width) - gui_width; width = OrthoGetWidth(G) + delta; I->LastPos = x; I->SaveWidth = 0; SettingSet(G, cSetting_internal_gui_width, (float) gui_width); OrthoReshape(G, -1, -1, false); } } else { I->Active = which_button(I, x, y); if(I->Active != I->Pressed) I->Active = -1; OrthoDirty(G); } } return (1); }
/*========================================================================*/ static int WizardRelease(Block * block, int button, int x, int y, int mod) { PyMOLGlobals *G = block->G; register CWizard *I = G->Wizard; int LineHeight = SettingGetGlobal_i(G, cSetting_internal_gui_control_size); int a; a = ((I->Block->rect.top - (y + cWizardClickOffset)) - cWizardTopMargin) / LineHeight; if(I->Pressed) I->Pressed = -1; OrthoDirty(G); OrthoUngrab(G); if((a >= 0) && ((ov_size) a < I->NLine)) { switch (I->Line[a].type) { case cWizTypeButton: if(I->Stack >= 0) if(I->Wiz[I->Stack]) { PLog(G, I->Line[a].code, cPLog_pym); PParse(G, I->Line[a].code); PFlush(G); } break; } } I->Pressed = -1; return (1); }
/*========================================================================*/ static int WizardClick(Block * block, int button, int x, int y, int mod) { #ifdef _PYMOL_NOPY return 0; #else PyMOLGlobals *G = block->G; register CWizard *I = G->Wizard; int a; PyObject *menuList = NULL; int LineHeight = SettingGetGlobal_i(G, cSetting_internal_gui_control_size); a = ((I->Block->rect.top - (y + cWizardClickOffset)) - cWizardTopMargin) / LineHeight; if((a >= 0) && ((ov_size) a < I->NLine)) { switch (I->Line[a].type) { case cWizTypeButton: OrthoGrab(G, I->Block); I->Pressed = (int) a; OrthoDirty(G); break; case cWizTypePopUp: PBlock(G); if(I->Stack >= 0) if(I->Wiz[I->Stack]) { if(PyObject_HasAttrString(I->Wiz[I->Stack], "get_menu")) { menuList = PyObject_CallMethod(I->Wiz[I->Stack], "get_menu", "s", I->Line[a].code); if(PyErr_Occurred()) PyErr_Print(); } } if(PyErr_Occurred()) PyErr_Print(); if(menuList && (menuList != Py_None)) { int my = I->Block->rect.top - (cWizardTopMargin + a * LineHeight) - 2; PopUpNew(G, x, my, x, y, false, menuList, NULL); } Py_XDECREF(menuList); PUnblock(G); break; } } return (1); #endif }
/*========================================================================*/ static int ControlClick(Block * block, int button, int x, int y, int mod) { PyMOLGlobals *G = block->G; register CControl *I = G->Control; I->SkipRelease = false; if(x < (I->Block->rect.left + cControlLeftMargin)) { y -= I->Block->rect.top - cControlTopMargin; if((y <= 0) && (y > (-cControlBoxSize))) { double now = UtilGetSeconds(block->G); if((now - I->LastClickTime) < 0.35) { if(I->SaveWidth) { SettingSet(G, cSetting_internal_gui_width, (float) I->SaveWidth); OrthoReshape(G, -1, -1, false); I->SaveWidth = 0; } else { I->SaveWidth = (int) SettingGet(G, cSetting_internal_gui_width); SettingSet(G, cSetting_internal_gui_width, (float) cControlMinWidth); OrthoReshape(G, -1, -1, false); } I->SkipRelease = true; } else { I->LastPos = x; OrthoGrab(G, block); I->DragFlag = true; I->LastClickTime = UtilGetSeconds(G); } } } else { I->Pressed = which_button(I, x, y); I->Active = I->Pressed; if(I->Pressed) OrthoGrab(G, block); OrthoDirty(G); } return (1); }
static int ControlRelease(Block * block, int button, int x, int y, int mod) { PyMOLGlobals *G = block->G; register CControl *I = G->Control; int sel = 0; I->LastPos = x; sel = which_button(I, x, y); if(!I->SkipRelease) { switch (sel) { case 0: SceneSetFrame(G, 4, 0); PLog(G, "cmd.rewind()", cPLog_pym); break; case 1: SceneSetFrame(G, 5, -1); PLog(G, "cmd.back()", cPLog_pym); break; case 2: MoviePlay(G, cMovieStop); if(SettingGet(G, cSetting_sculpting)) SettingSet(G, cSetting_sculpting, 0); if(SettingGetGlobal_b(G, cSetting_rock)) SettingSetGlobal_b(G, cSetting_rock, false); ExecutiveDrawNow(G); OrthoDirty(G); PLog(G, "cmd.mstop()", cPLog_pym); break; case 3: if(!MoviePlaying(G)) { if(mod & cOrthoCTRL) { PLog(G, "cmd.rewind()", cPLog_pym); PLog(G, "cmd.mplay()", cPLog_pym); SceneSetFrame(G, 4, 0); MoviePlay(G, cMoviePlay); } else { PLog(G, "cmd.mplay()", cPLog_pym); MoviePlay(G, cMoviePlay); } } else { MoviePlay(G, cMovieStop); ExecutiveDrawNow(G); OrthoDirty(G); PLog(G, "cmd.mstop()", cPLog_pym); } break; case 4: SceneSetFrame(G, 5, 1); PLog(G, "cmd.forward()", cPLog_pym); break; case 5: if(mod & cOrthoCTRL) { SceneSetFrame(G, 3, 0); PLog(G, "cmd.middle()", cPLog_pym); } else { SceneSetFrame(G, 6, 0); PLog(G, "cmd.ending()", cPLog_pym); } break; case 6: if(SettingGetGlobal_b(G, cSetting_seq_view)) { SettingSetGlobal_b(G, cSetting_seq_view, 0); SeqChanged(G); PLog(G, "cmd.set('seq_view',0)", cPLog_pym); } else { SettingSetGlobal_b(G, cSetting_seq_view, 1); SeqChanged(G); PLog(G, "cmd.set('seq_view',1)", cPLog_pym); } OrthoDirty(G); break; case 7: SettingSetGlobal_b(G, cSetting_rock, !SettingGetGlobal_b(G, cSetting_rock)); if(SettingGetGlobal_b(G, cSetting_rock)) { SceneRestartSweepTimer(G); PLog(G, "cmd.rock(1)", cPLog_pym); } else PLog(G, "cmd.rock(0)", cPLog_pym); SceneRestartFrameTimer(G); OrthoDirty(G); break; case 8: PLog(G, "cmd.fullscreen()", cPLog_pym); ExecutiveFullScreen(G, -1); break; } OrthoDirty(G); OrthoUngrab(G); I->LastClickTime = UtilGetSeconds(G); I->DragFlag = false; I->Active = -1; I->Pressed = -1; } return (1); }
void WizardDirty(PyMOLGlobals * G) { register CWizard *I = G->Wizard; I->Dirty = true; OrthoDirty(G); }