########################################################## # This is the Python interface to the pyxforms C module # import sys import xforms import forms import objects import bitmaps import pixmaps import box import browser import button import choice import clock import counter import dial import frame import input import menu import positioner import slider import timer ############################################################################### # These are function needed to run the XForms library # Needs a LOT of work def xfinit (appname,appclass,argv0): xforms.init (appname,appclass,argv0) ############################################################################### # This is the synthetic event-loop to use under python: _objects={} def runforms(): while 1: ob=_objects[str(xforms.do_forms())] ob.cb (ob.args) ############################################################################### # This is the default callback function: def _nocb(args): print "This object has no Callback!" ############################################################################## #This is the Form class class Form: def __init__(self,t=6,w=200,h=200): self.id=forms.create (0,w,h) self.__box=Box(t,0,0,w,h,"") self.Add (self.__box) self.__box.c1=11 self.__box.c2=15 self.__minx=1 # Reasonable defaults for things that self.__miny=1 # I can't get from XForms self.__maxx=10000 # Notice that if the C code changes them self.__maxy=10000 # They get out of sync! self.__title=sys.argv[0] #the "preferred" form title self.__placement=16388 self.__decoration=1 self.objs=() # A place to store the obj list. Useful? def Show (self): self.winid=forms.show (self.id,self.__placement,self.__decoration,self.title) def Hide (self): forms.hide (self.id) def Freeze (self): forms.freeze (self.id) def Unfreeze (self): forms.unfreeze (self.id) def Activate (self): forms.activate (self.id) def Deactivate (self): forms.deactivate (self.id) def Scale (self,x,y): forms.scale (self.id,x,y) def Redraw (self): forms.redraw (self.id) def Add (self,object): forms.add_object (self.id,object.id) object.parent=self def Setminsize (self,x,y): forms.set_minsize (self.id,x,y) self.__minx=x # The __ is needed to avoid endless looping self.__miny=y # on min[xy], which are non-gettable from XForms def Setmaxsize (self,x,y): forms.set_maxsize (self.id,x,y) self.__maxx=x self.__maxy=y def Settitle (self,title): forms.set_title (self.id,title) self.__title=title def Gettitle (self): if self.visible: return forms.get_title(self.id) else: return self.__title def Setcolor (c1,c2): self.__box.Setcolor (c1,c2) def __setattr__(self,name,value): if name=="x": (tx,ty,tw,th)=forms.get_geometry (self.id) forms.set_geometry (self.id,value,ty,tw,th) elif name=="y": (tx,ty,tw,th)=forms.get_geometry (self.id) forms.set_geometry (self.id,tx,value,tw,th) elif name=="w": (tx,ty,tw,th)=forms.get_geometry (self.id) forms.set_geometry (self.id,tx,ty,value,th) elif name=="h": (tx,ty,tw,th)=forms.get_geometry (self.id) forms.set_geometry (self.id,tx,ty,tw,value) elif name=="dblbuffer": forms.set_dblbuffer(self.id,value) elif name=="frozen": if value: self.Freeze() else: self.Unfreeze() elif name=="active": if value: self.Activate() else: self.Deactivate() elif name=="visible": if value: self.Show() else: self.Hide() elif name=="minx": self.Setminsize (value,self.__miny) elif name=="miny": self.Setminsize (self.__minx,value) elif name=="maxx": self.Setminsize (value,self.__maxy) elif name=="maxy": self.Setminsize (self.__maxx,value) elif name=="title": self.Settitle (value) elif name=="c1": self.__box.c1=value elif name=="c2": self.__box.c2=value else: self.__dict__ [name]=value def __getattr__(self,name): if name=="x": (tx,ty,tw,th)=forms.get_geometry (self.id) return tx elif name=="y": (tx,ty,tw,th)=forms.get_geometry (self.id) return ty elif name=="w": (tx,ty,tw,th)=forms.get_geometry (self.id) return tw elif name=="h": (tx,ty,tw,th)=forms.get_geometry (self.id) return th elif name=="minx": return self.__minx elif name=="miny": return self.__miny elif name=="maxx": return self.__maxx elif name=="maxy": return self.__maxy elif name=="vmode": (vmode,active,dblbuffer,frozen,visible,border,other)=forms.get_attr(self.id) return vmode elif name=="active": (vmode,active,dblbuffer,frozen,visible,border,other)=forms.get_attr(self.id) return active elif name=="dblbuffer": (vmode,active,dblbuffer,frozen,visible,border,other)=forms.get_attr(self.id) return dblbuffer elif name=="frozen": (vmode,active,dblbuffer,frozen,visible,border,other)=forms.get_attr(self.id) return frozen elif name=="visible": (vmode,active,dblbuffer,frozen,visible,border,other)=forms.get_attr(self.id) return visible elif name=="border": (vmode,active,dblbuffer,frozen,visible,border,other)=forms.get_attr(self.id) return border elif name=="other": (vmode,active,dblbuffer,frozen,visible,border,other)=forms.get_attr(self.id) return other elif name=="title": return self.Gettitle () elif name=="c1": return self.__box.c1 elif name=="c2": return self.__box.c2 def __del__(self): pass #I'm not sure if this is a nice thing to do # forms.free (self.id) ############################################################################### #This is the XFObject class, for generic XForms objects class XFObject: def __init__ (self): self.id=0 self.__c1=11 self.__c2=15 def Setgravity (self,a,b): objects.set_gravity (self.id,a,b) def Redraw (self): objects.redraw (self.id) def Scale (self,x,y): objects.scale (self.id,x,y) def Show (self): objects.show (self.id) self.Setcolor (self.__c1,self.__c2) def Hide (self): objects.hide (self.id) def Delete(self): objects.delete (self.id) def Setcolor (self,c1,c2): self.__c1=c1 self.__c2=c2 objects.set_color (self.id,c1,c2) def Activate (self): objects.activate (self.id) def Deactivate (self): objects.deactivate (self.id) def __setattr__ (self,name,value): if name=="boxtype": objects.set_boxtype (self.id,value) elif name=="bw": objects.set_bw (self.id,value) elif name=="labelsize": objects.set_ls (self.id,value) elif name=="labelstyle": objects.set_lstyle (self.id,value) elif name=="labelcolor": objects.set_lcol (self.id,value) elif name=="labelalign": objects.set_lalign (self.id,value) elif name=="label": objects.set_label (self.id,value) elif name=="shortcut": objects.set_shortcut (self.id,value,1) elif name=="dblbuffer": objects.set_dblbuffer(self.id,value) elif name=="x": (tx,ty,tw,th)=objects.get_geometry (self.id) objects.set_geometry (self.id,value,ty,tw,th) elif name=="y": (tx,ty,tw,th)=objects.get_geometry (self.id) objects.set_geometry (self.id,tx,value,tw,th) elif name=="w": (tx,ty,tw,th)=objects.get_geometry (self.id) objects.set_geometry (self.id,tx,ty,value,th) elif name=="h": (tx,ty,tw,th)=objects.get_geometry (self.id) objects.set_geometry (self.id,tx,ty,tw,value) elif name=="resize": objects.set_resize (self.id,value) elif name=="c1": self.Setcolor (value,self.__c2) elif name=="c2": self.Setcolor (self.__c1,value) else: self.__dict__ [name]=value def __getattr__(self,name): if name=="c1": return self.__c1 elif name=="c2": return self.__c2 def __del__ (self): #probably a BAD idea objects.free(self.id) ############################################################################### # The Bitmap Class class Bitmap(XFObject): def __init__(self,t=0,x=10,y=10,w=100,h=100,l="Bitmap"): XFObject.__init__ (self) self.id=bitmaps.create(t,x,y,w,h,l) def Load (self,file): bitmaps.set_file (self.id,file) def __setattr__ (self,name,value): if name=="background": objects.set_color(self.id,value,0) elif name=="foreground": objects.set_lcol(self.id,value) else: XFObject.__setattr__(self,name,value) ############################################################################### # The Pixmap Class class Pixmap(XFObject): def __init__(self,t=0,x=10,y=10,w=100,h=100,l="Pixmap"): XFObject.__init__ (self) self.id=pixmaps.create(t,x,y,w,h,l) def Load (self,file): pixmaps.set_file (self.id,file) def __setattr__ (self,name,value): if name=="background": objects.set_color(self.id,value,0) elif name=="foreground": objects.set_lcol(self.id,value) else: XFObject.__setattr__(self,name,value) ############################################################################### # The Box Class class Box(XFObject): def __init__(self,t=6,x=10,y=10,w=90,h=90,l="Box"): XFObject.__init__ (self) self.id=box.create(t,x,y,w,h,l) ############################################################################### # The Browser class # # I want the Browser class to act just like what it is: a list # only with a "few" more methods and stuff class Browser (XFObject): def __init__(self,t=1,x=10,y=10,w=90,h=120,l="Browser"): XFObject.__init__ (self) self.id=browser.create(t,x,y,w,h,l) _objects[str(self.id)]=self self.cb=_nocb self.args=self def Add(self,line): browser.add_line (self.id,line) def Addto(self,line): browser.addto (self.id,line) def Insert(self,n,line): browser.insert_line(self.id,n,line) def Delete(self,n): browser.delete_line(self.id,n) def Replace(self,n,line): browser.replace_line(self.id,n,line) def Getline(self,n): return browser.get_line (self.id,n) def Load(self,path): return browser.load (self.id,path) def Select(self,n): browser.select_line (self.id,n) def Deselect(self,n): browser.deselect_line (self.id,n) def Deselectall(self): browser.deselect(self.id) def Isselected(self,n): return browser.isselected_line(self.id,n) def Gettopline(self): return browser.get_topline(self.id) def Get(self): return browser.get(self.id) def Getmaxline(self): return browser.get_maxline(self.id) def Screenlines(self): return browser.get_screenlines(self.id) def Settopline(self,n): browser.set_topline(self.id,n) def Setfontsize(self,n): browser.set_fontsize(self.id,n) def Setfontstyle(self,n): browser.set_fontstyle(self.id,n) def Setspecialkey(self,c): browser.set_specialkey(self.id,c) def Setleftslider(self,l): browser.set_leftslider(self.id,l) def __setattr__ (self,name,value): if name=="leftslider": self.Setleftslider(value) elif name=="specialkey": self.Setspecialkey(value) elif name=="fontstyle": self.Setfontstyle(value) elif name=="fontsize": self.Setfontsize(value) elif name=="topline": self.Settopline(value) else: XFObject.__setattr__(self,name,value) ############################################################################### #This is the Button class. class Button(XFObject): def __init__(self,t=0,x=10,y=10,w=90,h=30,l="Button"): XFObject.__init__ (self) self.id=button.create(t,x,y,w,h,l) _objects[str(self.id)]=self self.cb=_nocb self.args=self def __call__(self,v=-1): # I think this is nice: if you have a button called b, # b() returns the button's value # b(1) or b(0) SETS the button value. # You can also set/get it with b.value, though if v==-1: return button.get(self.id) else: button.set (self.id,v) def __setattr__ (self,name,value): if name=="value": self(value) else: XFObject.__setattr__(self,name,value) def __getattr__ (self,name): if name=="value": return self() elif name=="numb": return button.get_numb (self.id) pass else: return XFObject.__getattr__(self,name) ############################################################################### # This is the Roundbutton class class Roundbutton (Button): def __init__(self,t=0,x=10,y=10,w=90,h=30,l="Roundbutton"): XFObject.__init__ (self) self.id=button.create_round(t,x,y,w,h,l) _objects[str(self.id)]=self self.cb=_nocb self.args=self ############################################################################### # This is the Lightbutton class class Lightbutton (Button): def __init__(self,t=0,x=10,y=10,w=90,h=30,l="Lightbutton"): XFObject.__init__ (self) self.id=button.create_light(t,x,y,w,h,l) _objects[str(self.id)]=self self.cb=_nocb self.args=self ############################################################################### # This is the Checkbutton class class Checkbutton (Button): def __init__(self,t=0,x=10,y=10,w=90,h=30,l="Checkbutton"): XFObject.__init__ (self) self.id=button.create_check(t,x,y,w,h,l) _objects[str(self.id)]=self self.cb=_nocb self.args=self ############################################################################### # This is the Bitmapbutton class class Bitmapbutton (Button): def __init__(self,t=0,x=10,y=10,w=90,h=30,l="Bitmapbutton"): XFObject.__init__ (self) self.id=button.create_bitmap(t,x,y,w,h,l) _objects[str(self.id)]=self self.cb=_nocb self.args=self ############################################################################### # This is the Pixmapbutton class class Pixmapbutton (Button): def __init__(self,t=0,x=10,y=10,w=90,h=30,l="Pixmapbutton"): XFObject.__init__ (self) self.id=button.create_pixmap(t,x,y,w,h,l) _objects[str(self.id)]=self self.cb=_nocb self.args=self ############################################################################### # This is the Choice Class #This one needs a getattr, setattr pair class Choice (XFObject): def __init__(self,t=0,x=10,y=10,w=90,h=30,l="Choice"): XFObject.__init__ (self) self.id=choice.create(t,x,y,w,h,l) _objects[str(self.id)]=self self.cb=_nocb self.args=self def Clear (self): choice.clear(self.id) def Addto (self,s): choice.addto(self.id,s) def Replace (self,n,s): choice.replace(self.id,n,s) def Delete (self,n): choice.delete(self.id,n) def Set (self,n): choice.set(self.id,n) def Settext (self,s): choice.set_text (self.id,s) def Get (self): return choice.get (self.id) def Getmaxitems (self): return choice.get_maxitems (self.id) def Gettext (self): return choice.get_text (self.id) def Setfontsize (self,n): choice.set_fontsize(self.id,n) def Setalign (self,n): choice.set_align (self.id,n) def Setmode (self,n,m): choice.set_item_mode (self.id,n,m) ############################################################################## # This is the clock class class Clock (XFObject): def __init__(self,t=0,x=10,y=10,w=90,h=90,l="Clock"): XFObject.__init__ (self) self.id=clock.create(t,x,y,w,h,l) def Get (self): return clock.get (self.id) ############################################################################## # This is the counter class class Counter (XFObject): def __init__(self,t=0,x=10,y=10,w=90,h=30,l="Counter"): XFObject.__init__ (self) self.id=counter.create(t,x,y,w,h,l) _objects[str(self.id)]=self self.cb=_nocb self.args=self def Set (self,v): counter.set_value (self.id,v) def Setbounds (self,min,max): counter.set_bounds (self.id,min,max) def Setstep (self,s1,s2): counter.set_step (self.id,s1,s2) def Setprecision (self,p): counter.set_precision (self.id,p) def Get (self): return counter.get_value (self.id) def Setreturn (self,v): counter.set_return (self.id,v) ############################################################################## # This is the Dial class class Dial (XFObject): def __init__(self,t=0,x=10,y=10,w=60,h=60,l="Dial"): XFObject.__init__ (self) self.id=dial.create(t,x,y,w,h,l) _objects[str(self.id)]=self self.cb=_nocb self.args=self def Set (self,v): dial.set_value(self.id,v) def Get (self): return dial.get_value (self.id) def Setbounds (self,min,max): dial.set_bounds (self.id,min,max) def Getbounds (self): return dial.get_bounds (self.id) def Setstep (self,v): dial.set_step (self.id,v) def Setreturn (self,v): dial.set_return (self.id,v) ############################################################################### # This is the Frame class class Frame (XFObject): def __init__(self,t=0,x=10,y=10,w=60,h=60,l="Frame"): XFObject.__init__ (self) self.id=frame.create(t,x,y,w,h,l) ############################################################################### # This is the Input class class Input (XFObject): def __init__(self,t=0,x=10,y=10,w=60,h=30,l="Input"): XFObject.__init__ (self) self.id=input.create(t,x,y,w,h,l) _objects[str(self.id)]=self self.cb=_nocb self.args=self def Set (self,s): input.set (self.id,s) def Setcolor (self,c1,c2): input.set_color (self.id,c1,c2) def Get (self): return input.get(self.id) def Setreturn (self,v): input.set_return (self.id,v) def Setscroll (self,v): input.set_scroll (self.id,v) def Setcursorpos (self,x,y=1): input.set_cursorpos (self.id,x,y) def Setselected (self,v): input.set_selected (self.id,v) def Setselectedrange (self,x1,x2): input.set_selected_range (self.id,x1,x2) def __setattr__ (self,name,value): if name=="value": self.Set(value) else: XFObject.__setattr__(self,name,value) def __getattr__ (self,name): if name=="value": return self.Get() else: return XFObject.__getattr__(self,name) ############################################################################### # This is the Menu class class Menu (XFObject): def __init__(self,t=0,x=10,y=10,w=60,h=30,l="Menu"): XFObject.__init__ (self) self.id=menu.create(t,x,y,w,h,l) _objects[str(self.id)]=self self.cb=_nocb self.args=self def Clear (self): menu.clear (self.id) def Set (self,s): menu.set (self.id,s) def Addto (self,s): menu.addto(self.id,s) def Replace (self,n,s): menu.replace_item (self.id,n,s) def Delete (self,n): menu.delete_item (self.id,n) def Setshortcut (self,n,s): menu.set_item_shortcut (self.id,n,s) def Setmode (self,n,m): menu.set_item_mode (self.id,n,m) def Showsymbol (self,n): menu.show_symbol (self.id,n) def Get (self): return menu.get (self.id) def Getmaxitems (self): return menu.get_maxitems (self.id) def Gettext (self): return menu.get_text (self.id) ############################################################################### # This is the Positioner class class Positioner (XFObject): def __init__(self,t=0,x=10,y=10,w=60,h=60,l="Positioner"): XFObject.__init__ (self) self.id=positioner.create(t,x,y,w,h,l) _objects[str(self.id)]=self self.cb=_nocb self.args=self def Setx (self,v): positioner.set_xvalue (self.id,v) def Sety (self,v): positioner.set_yvalue (self.id,v) def Setxbounds (self,x1,x2): positioner.set_xbounds (self.id,x1,x2) def Setybounds (self,y1,y2): positioner.set_ybounds (self.id,y1,y2) def Setxstep (self,v): positioner.set_xstep (self.id,v) def Setystep (self,v): positioner.set_ystep (self.id,v) def Getx (self): return positioner.get_xvalue (self.id) def Gety (self): return positioner.get_yvalue (self.id) def Getxbounds (self): positioner.get_xbounds (self.id) def Getybounds (self): positioner.get_ybounds (self.id) def Setreturn (self,v): positioner.set_return (self.id,v) ############################################################################### # This is the Slider class class Slider (XFObject): def __init__(self,t=0,x=10,y=10,w=60,h=30,l="Slider"): XFObject.__init__ (self) self.id=slider.create(t,x,y,w,h,l) _objects[str(self.id)]=self self.cb=_nocb self.args=self def Get (self): return slider.get_value (self.id) def Set (self,v): slider.set_value(self.id,v) def Getbounds (self): return slider.get_bounds (self.id) def Setbounds (self,v1,v2): slider.set_bounds(self.id,v1,v2) def Setreturn (self,v): slider.set_return (self.id,v) def Setstep (self,v): slider.set_step (self.id,v) def Setsize (self,v): slider.set_size (self.id,v) ############################################################################### # This is the Valslider class class Valslider (Slider): def __init__(self,t=0,x=10,y=10,w=60,h=30,l="Valslider"): XFObject.__init__ (self) self.id=slider.create_val(t,x,y,w,h,l) _objects[str(self.id)]=self self.cb=_nocb self.args=self def Setprecision (self,v): slider.set_precision (self.id,v) ############################################################################## # This is the Timer class class Timer (XFObject): def __init__(self,t=1,x=10,y=10,w=60,h=30,l="Timer"): XFObject.__init__ (self) self.id=timer.create(t,x,y,w,h,l) _objects[str(self.id)]=self self.cb=_nocb self.args=self def Set (self,v): timer.set(self.id,v) def Get (self): return timer.get (self.id)