Added support for saving/loading 'animate' option.
[drlaunch] / src / config.py
index e89ed89..3234967 100755 (executable)
@@ -25,7 +25,7 @@ __version__ = "$Id: 0.py 2265 2010-02-21 19:16:26Z v13 $"
 import os
 import pickle
 
-version = "0.1"
+version = "0.6"
 
 try:
     from glib import get_user_config_dir
@@ -38,41 +38,6 @@ except:
 
        return(cfg)
 
-size = 2
-iconsize = 64
-iconspace = 42
-apps=None
-
-def setSize(sz):
-    global size
-
-    size=sz
-
-def getSize():
-    global size
-
-    return(size)
-
-def setApps(aps):
-    """ apps is a dictionary of (x,y)=>appname """
-    global apps
-
-    apps=aps
-
-def getApps():
-    global apps
-
-    if apps==None:
-       tmp={
-           (0,0):  'rtcom-call-ui',
-           (0,1):  'rtcom-messaging-ui',
-           (1,0):  'browser',
-           (1,1):  'osso-addressbook',
-           }
-       setApps(tmp)
-
-    return(apps)
-
 def ensure_dir():
     dir0=get_user_config_dir()
     dir=dir0+'/drlaunch'
@@ -89,39 +54,176 @@ def get_config_fn():
 
     return(ret)
 
-def save():
-    fn=get_config_fn()
-    print "save", fn
+class Config:
+    def __init__(self, id):
+       self.id=id
+
+       self.size = (2,2)
+       self.iconsize = 64
+#      self.iconspace = 42     # For 4 icons (height)
+       self.iconspace = 36     # For 8 icons (width)
+       self.apps=None
+       self.indiv=False
+       self.longpress=True
+       self.animate=True
+
+       self.maxsz=(8,4)
+
+    def setSize(self, sz):
+       self.size=sz
+
+    def getSize(self):
+       return(self.size)
+
+    def getMaxSize(self):
+       return(self.maxsz)
+
+    def getIconSize(self):
+       return(self.iconsize)
+
+    def setIndiv(self, indiv):
+       self.indiv=indiv
+
+    def getIndiv(self):
+       return(self.indiv)
+
+    def setLongpress(self, lp):
+       self.longpress=lp
+
+    def getLongpress(self):
+       return(self.longpress)
+
+    def setAnimate(self, ar):
+       self.animate=ar
+
+    def getAnimate(self):
+       return(self.animate)
+
+    def setApps(self, aps):
+       """ apps is a dictionary of (x,y)=>appname """
+       self.apps=aps
+
+    def getApps(self):
+       if self.apps==None:
+           tmp={
+               (0,0):  'rtcom-call-ui',
+               (0,1):  'rtcom-messaging-ui',
+               (1,0):  'browser',
+               (1,1):  'osso-addressbook',
+               }
+           self.setApps(tmp)
+
+       return(self.apps)
 
-    dt={
-       'version':  1,
-       'size':     getSize(),
-       'apps':     getApps()
-       }
+    def save(self):
+       self.check_init()
 
-    print "save:", dt
+       dt=self.load_all()
 
-    st=pickle.dumps(dt)
-    f=file(fn, 'w')
-    f.write(st)
-    f.close()
+       if dt==None:
+           dt={
+               'version':  4,
+               'data': {},
+               }
 
-def load():
-    fn=get_config_fn()
-    print "load", fn
+       dt['data'][self.id]={
+           'size':         self.getSize(),
+           'apps':         self.getApps(),
+           'indiv':        self.getIndiv(),
+           'longpress':    self.getLongpress(),
+           'animate':      self.getAnimate(),
+           }
+
+       fn=get_config_fn()
 
-    try:
-       f=file(fn, 'r')
-       st=f.read()
+       st=pickle.dumps(dt)
+       f=file(fn, 'w')
+       f.write(st)
        f.close()
-       dt=pickle.loads(st)
-    except:
-       return
 
-    print "load:", dt
+    def parse_v1(self, dt0):
+       """ Convert a v1 config to v2 """
+       ret={
+           'version':      2,
+           'data':         {},
+           }
+
+       ret['data'][self.id]={
+           'size':         dt0['size'],
+           'apps':         dt0['apps'],
+           }
+
+       return(ret)
+
+    def parse_v2(self, dt):
+       # Perhaps copy dt?
+
+       dt['version']=3
+
+       for i in dt['data']:
+           dt['data'][i]['indiv']=False
+           dt['data'][i]['size']=(dt['data'][i]['size'], dt['data'][i]['size'])
+           dt['data'][i]['longpress']=True
+
+       return(dt)
+
+    def parse_v3(self, dt):
+       dt['version']=4
+
+       for i in dt['data']:
+           dt['data'][i]['animate']=True
+
+       return(dt)
+
+    def load_all(self):
+       fn=get_config_fn()
+
+       try:
+           f=file(fn, 'r')
+           st=f.read()
+           f.close()
+           ret=pickle.loads(st)
+
+           if ret==None:
+               ret=None
+           else:
+               if ret['version']==1:
+                   ret=parse_v1(ret)
+
+               if ret['version']==2:
+                   ret=parse_v2(ret)
+
+               if ret['version']==3:
+                   ret=parse_v3(ret)
+       except:
+           ret=None
+
+       return(ret)
+
+    def load(self):
+       self.check_init()
+
+       fn=get_config_fn()
+
+       dt0=self.load_all()
+
+       if dt0==None or not dt0['data'].has_key(self.id):
+           return
+
+       dt=dt0['data'][self.id]
+
+       self.setSize(dt['size'])
+       self.setApps(dt['apps'])
+       self.setIndiv(dt['indiv'])
+       self.setLongpress(dt['longpress'])
+       self.setAnimate(dt['animate'])
+
+    def check_init(self):
+       if self.id==None:
+           import sys
 
-    setSize(dt['size'])
-    setApps(dt['apps'])
+           print "config.init() not done"
+           sys.exit(1)
 
 # vim: set ts=8 sts=4 sw=4 noet formatoptions=r ai nocindent: