From 2c8899d71476f058000fba28d681e6beb5fa1779 Mon Sep 17 00:00:00 2001 From: Roberto Alsina Date: Fri, 31 May 2024 18:15:01 -0300 Subject: [PATCH] Missing python side of the interface --- Pyxform/Lib/Pyxform.py | 739 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 739 insertions(+) create mode 100644 Pyxform/Lib/Pyxform.py diff --git a/Pyxform/Lib/Pyxform.py b/Pyxform/Lib/Pyxform.py new file mode 100644 index 0000000..c3178bd --- /dev/null +++ b/Pyxform/Lib/Pyxform.py @@ -0,0 +1,739 @@ +########################################################## +# 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)