class GLWidgetPlugin(GLPluginBase): """A GL plugin that sends user events to one or more Klamp't widgets""" def __init__(self): GLPluginBase.__init__(self) self.klamptwidgetbutton = 2 self.klamptwidgetmaster = WidgetSet() self.klamptwidgetdragging = False def addWidget(self, widget): self.klamptwidgetmaster.add(widget) def display(self): self.klamptwidgetmaster.drawGL(self.viewport()) return False def keyboardfunc(self, c, x, y): self.klamptwidgetmaster.keypress(c) return False def keyboardupfunc(self, c, x, y): return False def specialfunc(self, c, x, y): self.klamptwidgetmaster.keypress(c) return False def specialupfunc(self, c, x, y): return False def mousefunc(self, button, state, x, y): if button == self.klamptwidgetbutton: if state == 0: #down if self.klamptwidgetmaster.beginDrag(x, self.height - y, self.viewport()): self.klamptwidgetdragging = True else: if self.klamptwidgetdragging: self.klamptwidgetmaster.endDrag() self.klamptwidgetdragging = False if self.klamptwidgetmaster.wantsRedraw(): self.refresh() return True return False def motionfunc(self, x, y, dx, dy): if self.klamptwidgetdragging: self.klamptwidgetmaster.drag(dx, -dy, self.viewport()) if self.klamptwidgetmaster.wantsRedraw(): self.refresh() return True else: self.klamptwidgetmaster.hover(x, self.height - y, self.viewport()) if self.klamptwidgetmaster.wantsRedraw(): self.refresh() return False def idlefunc(self): self.klamptwidgetmaster.idle() return True
class GLWidgetPlugin(GLPluginBase): """A GL plugin that sends user events to one or more Klamp't widgets""" def __init__(self): GLPluginBase.__init__(self) self.klamptwidgetbutton = 2 self.klamptwidgetmaster = WidgetSet() self.klamptwidgetdragging = False def addWidget(self,widget): self.klamptwidgetmaster.add(widget) def display(self): self.klamptwidgetmaster.drawGL(self.viewport()) def keyboardfunc(self,c,x,y): self.klamptwidgetmaster.keypress(c) return False def keyboardupfunc(self,c,x,y): return False def specialfunc(self,c,x,y): self.klamptwidgetmaster.keypress(c) return False def specialupfunc(self,c,x,y): return False def mousefunc(self,button,state,x,y): if button == self.klamptwidgetbutton: if state == 0: #down if self.klamptwidgetmaster.beginDrag(x,self.height-y,self.viewport()): self.klamptwidgetdragging = True else: if self.klamptwidgetdragging: self.klamptwidgetmaster.endDrag() self.klamptwidgetdragging = False if self.klamptwidgetmaster.wantsRedraw(): self.refresh() return True return False def motionfunc(self,x,y,dx,dy): if self.klamptwidgetdragging: self.klamptwidgetmaster.drag(dx,-dy,self.viewport()) if self.klamptwidgetmaster.wantsRedraw(): self.refresh() return True else: self.klamptwidgetmaster.hover(x,self.height-y,self.viewport()) if self.klamptwidgetmaster.wantsRedraw(): self.refresh() return False def idlefunc(self): self.klamptwidgetmaster.idle() return True
class _VisualEditorBase: #A base class for editing resources. def __init__(self, name, value, description, world): self.name = name self.value = value self.description = description self.world = world self.qtwidget = None self.width = 100 self.height = 100 self.klamptwidgetbutton = 2 self.klamptwidgetmaster = WidgetSet() self.klamptwidgetdragging = False #refresh appearances for new OpenGL context #for i in range(world.numIDs()): # world.appearance(i).refresh() def addWidget(self, widget): self.klamptwidgetmaster.add(widget) def instructions(self): return None def display(self): if self.world: self.world.drawGL() self.klamptwidgetmaster.drawGL(self.viewport()) def display_screen(self): glDisable(GL_LIGHTING) glColor3f(0, 0, 0) h = 30 """ if self.instructions() != None: glRasterPos(20,h) gldraw.glutBitmapString(GLUT_BITMAP_HELVETICA_12,"Instructions: "+self.instructions()) h += 20 if self.description != None: glRasterPos(20,h) gldraw.glutBitmapString(GLUT_BITMAP_HELVETICA_12,"Description: "+self.description) h += 20 glRasterPos(20,h) gldraw.glutBitmapString(GLUT_BITMAP_HELVETICA_12,"Press 'x' to exit without saving, 'q' to save+exit") """ def viewport(self): return self.qtwidget.viewport() def idlesleep(self, seconds): self.qtwidget.idlesleep(seconds) def refresh(self): self.qtwidget.refresh() def click_ray(self, x, y): return self.qtwidget.click_ray(x, y) def initialize(self): return False def reshapefunc(self, w, h): self.width, self.height = w, h return False def keyboardfunc(self, c, x, y): self.klamptwidgetmaster.keypress(c) return False def keyboardupfunc(self, c, x, y): return False def specialfunc(self, c, x, y): self.klamptwidgetmaster.keypress(c) return False def specialupfunc(self, c, x, y): return False def mousefunc(self, button, state, x, y): if button == self.klamptwidgetbutton: if state == 0: #down if self.klamptwidgetmaster.beginDrag(x, self.height - y, self.viewport()): self.klamptwidgetdragging = True else: if self.klamptwidgetdragging: self.klamptwidgetmaster.endDrag() self.klamptwidgetdragging = False if self.klamptwidgetmaster.wantsRedraw(): self.refresh() return True return False def motionfunc(self, x, y, dx, dy): if self.klamptwidgetdragging: self.klamptwidgetmaster.drag(dx, -dy, self.viewport()) if self.klamptwidgetmaster.wantsRedraw(): self.refresh() return True else: self.klamptwidgetmaster.hover(x, self.height - y, self.viewport()) if self.klamptwidgetmaster.wantsRedraw(): self.refresh() return False def idlefunc(self): self.klamptwidgetmaster.idle() return True
class _VisualEditorBase: #A base class for editing resources. def __init__(self,name,value,description,world): self.name = name self.value = value self.description = description self.world = world self.qtwidget = None self.width = 100 self.height = 100 self.klamptwidgetbutton = 2 self.klamptwidgetmaster = WidgetSet() self.klamptwidgetdragging = False #refresh appearances for new OpenGL context #for i in xrange(world.numIDs()): # world.appearance(i).refresh() def addWidget(self,widget): self.klamptwidgetmaster.add(widget) def instructions(self): return None def display(self): if self.world: self.world.drawGL() self.klamptwidgetmaster.drawGL(self.viewport()) def display_screen(self): glDisable(GL_LIGHTING) glColor3f(0,0,0) h = 30 """ if self.instructions() != None: glRasterPos(20,h) gldraw.glutBitmapString(GLUT_BITMAP_HELVETICA_12,"Instructions: "+self.instructions()) h += 20 if self.description != None: glRasterPos(20,h) gldraw.glutBitmapString(GLUT_BITMAP_HELVETICA_12,"Description: "+self.description) h += 20 glRasterPos(20,h) gldraw.glutBitmapString(GLUT_BITMAP_HELVETICA_12,"Press 'x' to exit without saving, 'q' to save+exit") """ def viewport(self): return self.qtwidget.viewport() def idlesleep(self,seconds): self.qtwidget.idlesleep(seconds) def refresh(self): self.qtwidget.refresh() def click_ray(self,x,y): return self.qtwidget.click_ray(x,y) def initialize(self): return False def reshapefunc(self,w,h): self.width,self.height = w,h return False def keyboardfunc(self,c,x,y): self.klamptwidgetmaster.keypress(c) return False def keyboardupfunc(self,c,x,y): return False def specialfunc(self,c,x,y): self.klamptwidgetmaster.keypress(c) return False def specialupfunc(self,c,x,y): return False def mousefunc(self,button,state,x,y): if button == self.klamptwidgetbutton: if state == 0: #down if self.klamptwidgetmaster.beginDrag(x,self.height-y,self.viewport()): self.klamptwidgetdragging = True else: if self.klamptwidgetdragging: self.klamptwidgetmaster.endDrag() self.klamptwidgetdragging = False if self.klamptwidgetmaster.wantsRedraw(): self.refresh() return True return False def motionfunc(self,x,y,dx,dy): if self.klamptwidgetdragging: self.klamptwidgetmaster.drag(dx,-dy,self.viewport()) if self.klamptwidgetmaster.wantsRedraw(): self.refresh() return True else: self.klamptwidgetmaster.hover(x,self.height-y,self.viewport()) if self.klamptwidgetmaster.wantsRedraw(): self.refresh() return False def idlefunc(self): self.klamptwidgetmaster.idle() return True