Implement icon resizing.
[drlaunch] / src / config.py
index e949154..ac61424 100755 (executable)
@@ -25,7 +25,7 @@ __version__ = "$Id: 0.py 2265 2010-02-21 19:16:26Z v13 $"
 import os
 import pickle
 
-version = "0.9.2"
+version = "1.0"
 
 try:
     from glib import get_user_config_dir
@@ -60,9 +60,14 @@ class Config:
 
        self.size = (2,2)
        self.themebgsize = 96
-       self.iconsize = 64
-#      self.iconspace = 42     # For 4 icons (height)
-       self.iconspace = 36     # For 8 icons (width)
+       self.iconsize0 = 64
+###    self.iconspace = 42     # For 4 icons (height)
+##     self.iconspace = 36     # For 8 icons (width)
+
+#      self.iconsize = 64
+#      self.iconpadding = 12
+#      self.iconmargin = 6
+
        self.apps=None
        self.indiv=True
        self.longpress=False
@@ -70,20 +75,55 @@ class Config:
        self.nobg=False
        self.themebg=False
 
-       self.maxsz=(8,4)
+       self.setDefaultSizes()
+
+       #self.maxsz=(8,4)
 
     def setSize(self, sz):
-       self.size=sz
+       maxsz=self.getMaxSize()
+       sz2=(min(sz[0], maxsz[0]), min(sz[1], maxsz[1]))
+       self.size=sz2
 
     def getSize(self):
        return(self.size)
 
+    def setDefaultSizes(self):
+       self.iconsize=64
+       self.iconpadding=12
+       self.iconmargin=6
+
     def getMaxSize(self):
-       return(self.maxsz)
+       isf=self.getIconSizeFull()
+       retx=int(800/isf)
+       rety=int((480-60)/isf)
+       maxsz=(retx, rety)
+       return(maxsz)
 
     def getIconSize(self):
        return(self.iconsize)
 
+    def setIconSize(self, sz):
+       self.iconsize=sz
+
+    def getIconSpace(self):
+       return((2*self.iconpadding) + (2*self.iconmargin))
+
+    def getIconSizeFull(self):
+       ret=self.iconsize + (2*self.iconpadding) + (2*self.iconmargin)
+       return(ret)
+
+    def getIconMargin(self):
+       return(self.iconmargin)
+
+    def setIconMargin(self, sz):
+       self.iconmargin=sz
+
+    def getIconPadding(self):
+       return(self.iconpadding)
+
+    def setIconPadding(self, sz):
+       self.iconpadding=sz
+
     def setIndiv(self, indiv):
        self.indiv=indiv
 
@@ -130,6 +170,18 @@ class Config:
 
        return(self.apps)
 
+    def filterDefault(self, value, default):
+       if value==default:
+           return(-1)
+       else:
+           return(value)
+
+    def provideDefault(self, value, default):
+       if value==-1:
+           return(default)
+       else:
+           return(value)
+
     def save(self):
        self.check_init()
 
@@ -137,7 +189,7 @@ class Config:
 
        if dt==None:
            dt={
-               'version':  6,
+               'version':  7,
                'data': {},
                }
 
@@ -149,6 +201,9 @@ class Config:
            'animate':      self.getAnimate(),
            'nobg':         self.getNoBg(),
            'themebg':      self.getThemeBg(),
+           'iconsize':     self.filterDefault(self.getIconSize(), 64),
+           'iconpadding':  self.filterDefault(self.getIconPadding(), 12),
+           'iconmargin':   self.filterDefault(self.getIconMargin(), 6),
            }
 
        fn=get_config_fn()
@@ -208,6 +263,16 @@ class Config:
 
        return(dt)
 
+    def parse_v6(self, dt):
+       dt['version']=7
+
+       for i in dt['data']:
+           dt['data'][i]['iconsize']=-1
+           dt['data'][i]['iconpadding']=-1
+           dt['data'][i]['iconmargin']=-1
+
+       return(dt)
+
     def load_all(self):
        fn=get_config_fn()
 
@@ -235,6 +300,9 @@ class Config:
 
                if ret['version']==5:
                    ret=self.parse_v5(ret)
+
+               if ret['version']==6:
+                   ret=self.parse_v6(ret)
        except Exception, e:
            print "config error:", e
            ret=None
@@ -260,6 +328,9 @@ class Config:
        self.setAnimate(dt['animate'])
        self.setNoBg(dt['nobg'])
        self.setThemeBg(dt['themebg'])
+       self.setIconSize(self.provideDefault(dt['iconsize'], 64))
+       self.setIconPadding(self.provideDefault(dt['iconpadding'], 12))
+       self.setIconMargin(self.provideDefault(dt['iconmargin'], 6))
 
     def check_init(self):
        if self.id==None: