static int ObjectCallbackAllStatesFromPyObject(ObjectCallback * I, PyObject * obj)
{
  int result = false;
  PyObject *list = NULL;

  if(PyList_Check(obj)) {
    list = obj;
    Py_INCREF(list);
  } else {
    // unpickle list from string
    ok_assert(1, list = PConvPickleLoads(obj));
    ok_assert(1, PyList_Check(list));
  }

  I->NState = PyList_Size(list);
  VLACheck(I->State, ObjectCallbackState, I->NState);

  for(int a = 0; a < I->NState; a++) {
    PyObject *val = PyList_GetItem(list, a);
    ObjectCallbackStateFromPyObject(I->Obj.G, I->State + a, val);
  }

  result = true;
ok_except1:
  if(PyErr_Occurred()) {
    PyErr_Print();

    PRINTFB(I->Obj.G, FB_ObjectCallback, FB_Warnings)
      " Warning: could not load callback object\n"
      ENDFB(I->Obj.G);
  }

  Py_XDECREF(list);
  return result;
}
Beispiel #2
0
void ShakerAddLineCon(CShaker * I, int atom0, int atom1, int atom2)
{
  ShakerLineCon *slc;

  VLACheck(I->LineCon, ShakerLineCon, I->NLineCon);
  slc = I->LineCon + I->NLineCon;
  slc->at0 = atom0;
  slc->at1 = atom1;
  slc->at2 = atom2;
  I->NLineCon++;
}
Beispiel #3
0
void ShakerAddDistCon(CShaker * I, int atom0, int atom1, float target, int type, float wt)
{
  ShakerDistCon *sdc;

  VLACheck(I->DistCon, ShakerDistCon, I->NDistCon);
  sdc = I->DistCon + I->NDistCon;
  sdc->at0 = atom0;
  sdc->at1 = atom1;
  sdc->targ = target;
  sdc->type = type;
  sdc->weight = wt;
  I->NDistCon++;
}
Beispiel #4
0
static int GetNewMember(CTracker * I)
{
  int result = 0;
  if(!(result = I->next_free_member)) {
    I->n_member++;
    result = I->n_member;
    VLACheck(I->member, TrackerMember, result); /* auto zeros -- NO ERROR CHECK */
  } else {
    I->next_free_member = I->member[result].hash_next;
    MemoryZero((char *) (I->member + result), (char *) (I->member + result + 1));       /* zero */
  }
  I->n_link++;
  return result;
}
Beispiel #5
0
static int GetNewInfo(CTracker * I)
{
  int result = 0;
  if(!I->next_free_info) {
    I->n_info++;
    result = I->n_info;
    VLACheck(I->info, TrackerInfo, result);     /* auto zeros -- NO ERROR CHECK */
  } else {
    result = I->next_free_info;
    I->next_free_info = I->info[result].next;
    MemoryZero((char *) (I->info + result), (char *) (I->info + result + 1));   /* zero */
  }
  return result;
}
Beispiel #6
0
void ShakerAddTorsCon(CShaker * I, int atom0, int atom1, int atom2, int atom3, int type)
{
  ShakerTorsCon *stc;

  VLACheck(I->TorsCon, ShakerTorsCon, I->NTorsCon);
  stc = I->TorsCon + I->NTorsCon;
  stc->at0 = atom0;
  stc->at1 = atom1;
  stc->at2 = atom2;
  stc->at3 = atom3;
  stc->type = type;
  I->NTorsCon++;

}
Beispiel #7
0
void ShakerAddPlanCon(CShaker * I, int atom0, int atom1, int atom2, int atom3,
                      float target, int fixed)
{
  ShakerPlanCon *spc;

  VLACheck(I->PlanCon, ShakerPlanCon, I->NPlanCon);
  spc = I->PlanCon + I->NPlanCon;
  spc->at0 = atom0;
  spc->at1 = atom1;
  spc->at2 = atom2;
  spc->at3 = atom3;
  spc->fixed = fixed;
  spc->target = target;
  I->NPlanCon++;
}
Beispiel #8
0
void ShakerAddPyraCon(CShaker * I, int atom0, int atom1, int atom2, int atom3,
                      float targ1, float targ2)
{
  ShakerPyraCon *spc;

  VLACheck(I->PyraCon, ShakerPyraCon, I->NPyraCon);
  spc = I->PyraCon + I->NPyraCon;
  spc->at0 = atom0;
  spc->at1 = atom1;
  spc->at2 = atom2;
  spc->at3 = atom3;
  spc->targ1 = targ1;
  spc->targ2 = targ2;
  I->NPyraCon++;
}
/*========================================================================*/
ObjectCallback *ObjectCallbackDefine(PyMOLGlobals * G, ObjectCallback * obj,
                                     PyObject * pobj, int state)
{
#ifdef _PYMOL_NOPY
  return NULL;
#else
  ObjectCallback *I = NULL;

  if(!obj) {
    I = ObjectCallbackNew(G);
  } else {
    I = obj;
  }

  if(state < 0)
    state = I->NState;
  if(I->NState <= state) {
    VLACheck(I->State, ObjectCallbackState, state);
    I->NState = state + 1;
  }

  if(I->State[state].PObj) {
    Py_DECREF(I->State[state].PObj);
  }
  I->State[state].is_callable = PyCallable_Check(pobj);
  I->State[state].PObj = pobj;
  Py_INCREF(pobj);
  if(I->NState <= state)
    I->NState = state + 1;

  if(I) {
    ObjectCallbackRecomputeExtent(I);
  }
  SceneChanged(G);
  SceneCountFrames(G);
  return (I);
#endif
}
Beispiel #10
0
static void RepLabelRender(RepLabel * I, RenderInfo * info)
{
  CRay *ray = info->ray;
  Picking **pick = info->pick;
  PyMOLGlobals *G = I->R.G;
  float *v = I->V;
  int c = I->N;
  int *l = I->L;
  int font_id = SettingGet_i(G, I->R.cs->Setting, I->R.obj->Setting,
                             cSetting_label_font_id);
  float font_size = SettingGet_f(G, I->R.cs->Setting, I->R.obj->Setting,
                                 cSetting_label_size);

  if(ray) {
    if(c) {
      char *st;
      TextSetOutlineColor(G, I->OutlineColor);
      while(c--) {
        if(*l) {
          st = OVLexicon_FetchCString(G->Lexicon, *l);
          TextSetPosNColor(G, v + 3, v);
          TextRenderRay(G, ray, font_id, st, font_size, v + 6);
        }
        v += 9;
        l++;
      }
    }
  } else if(G->HaveGUI && G->ValidContext) {
    if(pick) {
      Pickable *p = I->R.P;
      int i;
      if(c) {
        char *st;
        int float_text = (int) SettingGet(G, cSetting_float_labels);
        if(float_text)
          glDisable(GL_DEPTH_TEST);

        i = (*pick)->src.index;
        while(c--) {
          if(*l) {
            int first_pass = (!(*pick)[0].src.bond);
            i++;
            TextSetPosNColor(G, v + 3, v);
            TextSetPickColor(G, first_pass, i);
            if(first_pass) {
              VLACheck((*pick), Picking, i);
              p++;
              (*pick)[i].src = *p;      /* copy object and atom info */
              (*pick)[i].context = I->R.context;
            }
            st = OVLexicon_FetchCString(G->Lexicon, *l);
            TextRenderOpenGL(G, info, font_id, st, font_size, v + 6);
          }
          l++;
          v += 9;
        }
        if(float_text)
          glEnable(GL_DEPTH_TEST);
        (*pick)[0].src.index = i;       /* pass the count */
      }
    } else {
      if(c) {
        char *st;
        int float_text = (int) SettingGet(G, cSetting_float_labels);
        if(float_text)
          glDisable(GL_DEPTH_TEST);
#ifdef PURE_OPENGL_ES_2
    /* TODO */
#else
        if(!info->line_lighting)
          glDisable(GL_LIGHTING);
#endif
        TextSetOutlineColor(G, I->OutlineColor);
        while(c--) {
          if(*l) {
            TextSetPosNColor(G, v + 3, v);
            st = OVLexicon_FetchCString(G->Lexicon, *l);
            TextRenderOpenGL(G, info, font_id, st, font_size, v + 6);
          }
          l++;
          v += 9;
        }
#ifdef PURE_OPENGL_ES_2
    /* TODO */
#else
        glEnable(GL_LIGHTING);
#endif
        glEnable(GL_BLEND);
        if(float_text)
          glEnable(GL_DEPTH_TEST);
      }
    }
  }
}
Beispiel #11
0
static void RepLabelRender(RepLabel * I, RenderInfo * info)
{
  CRay *ray = info->ray;
  Picking **pick = info->pick;
  PyMOLGlobals *G = I->R.G;
  float *v = I->V;
  int c = I->N;
  int *l = I->L;
  int font_id = SettingGet_i(G, I->R.cs->Setting, I->R.obj->Setting,
                             cSetting_label_font_id);
  float font_size = SettingGet_f(G, I->R.cs->Setting, I->R.obj->Setting,
                                 cSetting_label_size);

  if(ray) {
    if(c) {
      char *st;
      TextSetOutlineColor(G, I->OutlineColor);
      while(c--) {
        if(*l) {
          st = OVLexicon_FetchCString(G->Lexicon, *l);
          TextSetPosNColor(G, v + 3, v);
          TextRenderRay(G, ray, font_id, st, font_size, v + 6);
        }
        v += 9;
        l++;
      }
    }
  } else if(G->HaveGUI && G->ValidContext) {
    if(pick) {
      Pickable *p = I->R.P;
      int i;
      if (I->shaderCGO){
	CGORenderGLPicking(I->shaderCGO, pick, &I->R.context, I->R.cs->Setting, I->R.obj->Setting);
	return;
      }
      SceneSetupGLPicking(G);
      if(c) {
        char *st;
        int float_text = SettingGetGlobal_i(G, cSetting_float_labels);
        if(float_text)
          glDisable(GL_DEPTH_TEST);

        i = (*pick)->src.index;
        while(c--) {
          if(*l) {
            int first_pass = (!(*pick)[0].src.bond);
            i++;
            TextSetPosNColor(G, v + 3, v);
            TextSetPickColor(G, first_pass, i);
            if(first_pass) {
              VLACheck((*pick), Picking, i);
              p++;
              (*pick)[i].src = *p;      /* copy object and atom info */
              (*pick)[i].context = I->R.context;
            }
            st = OVLexicon_FetchCString(G->Lexicon, *l);
            TextRenderOpenGL(G, info, font_id, st, font_size, v + 6, SHADERCGO);
          }
          l++;
          v += 9;
        }
        if(float_text)
          glEnable(GL_DEPTH_TEST);
        (*pick)[0].src.index = i;       /* pass the count */
      }
    } else {
      if(c) {
        char *st;
        int float_text = SettingGetGlobal_i(G, cSetting_float_labels);
	short use_shader;
	Pickable *p = I->R.P;
	use_shader = SettingGetGlobal_b(G, cSetting_use_shaders);
        if(float_text)
          glDisable(GL_DEPTH_TEST);
	if (use_shader){
	  if (!I->shaderCGO){
	    I->shaderCGO = CGONew(G);
	    if (use_shader){
	      I->shaderCGO->use_shader = true;
	      I->shaderCGO->enable_shaders = true;
	    }
	  } else {
	    CGORenderGL(I->shaderCGO, NULL, NULL, NULL, info, &I->R);
	    if(float_text)
	      glEnable(GL_DEPTH_TEST);
	    return;
	  }
	} else if (I->shaderCGO) {
	  CGOFree(I->shaderCGO);
	  I->shaderCGO = NULL;
	}
        TextSetOutlineColor(G, I->OutlineColor);

        while(c--) {
          if(*l) {
	    p++;
	    if (I->shaderCGO)
	      CGOPickColor(I->shaderCGO, p->index, p->bond);
            TextSetPosNColor(G, v + 3, v);
            st = OVLexicon_FetchCString(G->Lexicon, *l);
            TextRenderOpenGL(G, info, font_id, st, font_size, v + 6, SHADERCGO);
          }
          l++;
          v += 9;
        }
        if (I->shaderCGO){
          CGO *convertcgo;
	  CGOStop(I->shaderCGO);
	  convertcgo = CGOOptimizeLabels(I->shaderCGO, 0);
	  CGOFree(I->shaderCGO);
	  I->shaderCGO = convertcgo;
	  convertcgo = NULL;
	  if (I->shaderCGO){
	    I->shaderCGO->use_shader = true;
	    I->shaderCGO->enable_shaders = true;
	    CGORenderGL(I->shaderCGO, NULL, NULL, NULL, info, &I->R);
	  }
        }
        if(float_text)
          glEnable(GL_DEPTH_TEST);
      }
    }
  }
}
Beispiel #12
0
/*========================================================================*/
void WizardRefresh(PyMOLGlobals * G)
{

#ifndef _PYMOL_NOPY
  register CWizard *I = G->Wizard;
  char *vla = NULL;
  PyObject *P_list;
  ov_size ll;
  PyObject *i;
  ov_size a;
  int blocked;
  blocked = PAutoBlock(G);

  /* get the current prompt */
  if(I->Stack >= 0)
    if(I->Wiz[I->Stack]) {
      vla = NULL;
      if(PyObject_HasAttrString(I->Wiz[I->Stack], "get_prompt")) {
        P_list = PyObject_CallMethod(I->Wiz[I->Stack], "get_prompt", "");
        if(PyErr_Occurred())
          PyErr_Print();
        if(P_list)
          PConvPyListToStringVLA(P_list, &vla);
        Py_XDECREF(P_list);
      }
    }

  OrthoSetWizardPrompt(G, vla);

  /* get the current panel list */

  I->NLine = 0;
  if(I->Stack >= 0)
    if(I->Wiz[I->Stack]) {

      I->EventMask = cWizEventPick + cWizEventSelect;

      if(PyObject_HasAttrString(I->Wiz[I->Stack], "get_event_mask")) {
        i = PyObject_CallMethod(I->Wiz[I->Stack], "get_event_mask", "");
        if(PyErr_Occurred())
          PyErr_Print();
        if(!PConvPyIntToInt(i, &I->EventMask))
          I->EventMask = cWizEventPick + cWizEventSelect;
        Py_XDECREF(i);
      }

      if(PyObject_HasAttrString(I->Wiz[I->Stack], "get_panel")) {
        P_list = PyObject_CallMethod(I->Wiz[I->Stack], "get_panel", "");
        if(PyErr_Occurred())
          PyErr_Print();
        if(P_list) {
          if(PyList_Check(P_list)) {
            ll = PyList_Size(P_list);
            VLACheck(I->Line, WizardLine, ll);
            for(a = 0; a < ll; a++) {
              /* fallback defaults */

              I->Line[a].text[0] = 0;
              I->Line[a].code[0] = 0;
              I->Line[a].type = 0;

              i = PyList_GetItem(P_list, a);
              if(PyList_Check(i))
                if(PyList_Size(i) > 2) {
                  PConvPyObjectToInt(PyList_GetItem(i, 0), &I->Line[a].type);
                  PConvPyObjectToStrMaxLen(PyList_GetItem(i, 1),
                                           I->Line[a].text, sizeof(WordType) - 1);
                  PConvPyObjectToStrMaxLen(PyList_GetItem(i, 2),
                                           I->Line[a].code, sizeof(OrthoLineType) - 1);
                }
            }
            I->NLine = ll;
          }
        }
        Py_XDECREF(P_list);
      }
    }
  if(I->NLine) {
    int LineHeight = SettingGetGlobal_i(G, cSetting_internal_gui_control_size);
    OrthoReshapeWizard(G, LineHeight * I->NLine + 4);
  } else {
    OrthoReshapeWizard(G, 0);
  }
  PAutoUnblock(G, blocked);
#endif
}