Implement icon resizing.
[drlaunch] / src / icons.py
index 3f663d7..8f2c189 100755 (executable)
@@ -53,14 +53,48 @@ class Icons(gobject.GObject):
        # signal handlers
        self.h={}
 
+       self.maxsz=(0,0)
+
        # setup allicons
+       self.resizeMax()
+
+    def resizeMax(self):
+       sz=self.maxsz
        maxsz=self.config.getMaxSize()
-       for x in xrange(maxsz[0]):
-           for y in xrange(maxsz[1]):
-               k=(x,y)
-               ico=Icon(self.isconfig, self.config)
-               self.allicons[k]=ico
-               self.connect_one(ico)
+
+       # Create new entries in x
+       if maxsz[0]>sz[0]:
+           for x in xrange(maxsz[0]-sz[0]):
+               for y in xrange(sz[1]):
+                   k=(x+sz[0],y)
+                   ico=Icon(self.isconfig, self.config)
+                   self.allicons[k]=ico
+                   self.connect_one(ico)
+           sz=(maxsz[0], sz[1])
+       elif maxsz[0]<sz[0]:
+           for x in xrange(sz[0]-maxsz[0]):
+               for y in xrange(sz[1]):
+                   k=(maxsz[0]+x,y)
+                   self.allicons.pop(k)
+           sz=(maxsz[0], sz[1])
+
+       # Create new entries in y
+       if maxsz[1]>sz[1]:
+           for y in xrange(maxsz[1]-sz[1]):
+               for x in xrange(sz[0]):
+                   k=(x,y+sz[1])
+                   ico=Icon(self.isconfig, self.config)
+                   self.allicons[k]=ico
+                   self.connect_one(ico)
+           sz=(sz[0], maxsz[1])
+       elif maxsz[1]<sz[1]:
+           for y in xrange(sz[1]-maxsz[1]):
+               for x in xrange(sz[0]):
+                   k=(x,y+maxsz[1])
+                   self.allicons.pop(k)
+           sz=(sz[0], maxsz[1])
+
+       self.maxsz=sz
 
     @classmethod
     def register_signals(cls):
@@ -152,7 +186,8 @@ class Icons(gobject.GObject):
 #          'extcalllog', 'browser', 'modest', 'osso-addressbook']
 
        wapps=self.config.getApps()
-       sz=self.config.getSize()
+       #sz=self.config.getSize()
+       sz=self.getSize()
 
        for k in wapps:
            x,y=k
@@ -166,7 +201,15 @@ class Icons(gobject.GObject):
                    app['icon2']=getIcon(app['icon'], self.config.getIconSize())
                    self.get(x,y).setApp(app)
            else:
-               self.get(x,y).setApp(None)
+               ic=self.get(x,y)
+               ic.setApp(None)
+
+       # Reload icons to make sure backgrounds, etc are valid
+       for x in xrange(sz[0]):
+           for y in xrange(sz[1]):
+               ic=self.get(x,y)
+               ic.reload()
+
 
 #      for f in fn:
 #          dt=apps.readOne(f)