Added support for 8x4 grid by reducing spacing to 36 from 42.
authorStefanos Harhalakis <v13@v13.gr>
Tue, 3 Aug 2010 20:59:37 +0000 (20:59 +0000)
committerStefanos Harhalakis <v13@v13.gr>
Tue, 3 Aug 2010 20:59:37 +0000 (20:59 +0000)
Changed configuration layout to use pannablearea in order to support grids larger than 8x4.
Added "icon animation" option.

src/config.py
src/icongrid.py
src/widget.py
src/win_config.py

index d1c9b67..0ed4157 100755 (executable)
@@ -60,12 +60,14 @@ class Config:
 
        self.size = (2,2)
        self.iconsize = 64
-       self.iconspace = 42
+#      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=(4,4)
+       self.maxsz=(8,4)
 
     def setSize(self, sz):
        self.size=sz
@@ -91,6 +93,12 @@ class Config:
     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
@@ -123,6 +131,7 @@ class Config:
            'apps':         self.getApps(),
            'indiv':        self.getIndiv(),
            'longpress':    self.getLongpress(),
+           'animate':      self.getAnimate(),
            }
 
        fn=get_config_fn()
index 3571736..b13f7df 100755 (executable)
@@ -69,7 +69,7 @@ class IconGrid(object):       #(gobject.GObject):
 
        self.icons=Icons(self.isconfig, self.config)
        self.setMode('l')
-       self.setSize((4,4))
+       self.setSize((8,4))
        self.reloadIcons()
 
     def connect(self, what, *args):
@@ -106,7 +106,7 @@ class IconGrid(object):     #(gobject.GObject):
        except TypeError:
            do_draw=True
 
-       if do_draw:
+       if do_draw and self.config.getAnimate():
            #self.queue_draw()
            self.angle_timer_start=time.time()
            gobject.timeout_add(20, self.timerAngle)
@@ -115,6 +115,9 @@ class IconGrid(object):     #(gobject.GObject):
                 self.setAngle(0)
             else:
                 self.setAngle(90)
+
+           if do_draw:
+               self.queue_draw()
                 
     def timerAngle(self):
        if self.angle_timer_start==0:
@@ -300,13 +303,13 @@ class IconGridWidget(IconGrid, gtk.Widget):
 
        IconGrid.do_realize(self, self.config)
 
-       if isconfig:
-           maxsz=self.config.getMaxSize()
-           w=maxsz[0] * (self.config.iconsize + self.config.iconspace)
-           h=maxsz[1] * (self.config.iconsize + self.config.iconspace)
-       else:
-           w=self.size[0] * (self.config.iconsize + self.config.iconspace)
-           h=self.size[1] * (self.config.iconsize + self.config.iconspace)
+       self.setSize(self.size)
+
+    def setSize(self, size):
+       IconGrid.setSize(self, size)
+
+       w=self.size[0] * (self.config.iconsize + self.config.iconspace)
+       h=self.size[1] * (self.config.iconsize + self.config.iconspace)
 
        self.set_size_request(w, h)
 
index c49b2e0..15f99d5 100755 (executable)
@@ -159,6 +159,7 @@ class DrlaunchPlugin(IconGrid, HomePluginItem, FremantleRotation):
        config.setApps(dt['apps'])
        config.setIndiv(dt['indiv'])
        config.setLongpress(dt['longpress'])
+       config.setAnimate(dt['animate'])
        config.save()
        
        # Resize widget
index fbcd05c..43db90d 100755 (executable)
@@ -49,11 +49,12 @@ class WinConfig(StackableWindow):
 #      self.igw.do_realize()
 #      self.igw.setSize(config.getSize())
 
-       hbox=gtk.HBox()
-       self.add(hbox)
+       self.pa=hildon.PannableArea()
+       self.add(self.pa)
+       self.pa.set_property('mov-mode', hildon.MOVEMENT_MODE_HORIZ)
 
-       # Add the icongrid
-       hbox.add(self.igw)
+       hbox=gtk.HBox()
+       self.pa.add_with_viewport(hbox)
 
        # Now go for the right side
        al=gtk.Alignment(yscale=0)
@@ -112,6 +113,18 @@ class WinConfig(StackableWindow):
        self.buttonRequireLongpress=but
        vbox.add(but)
 
+       but=hildon.CheckButton(
+               gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT)
+       but.set_label("Animate rotation")
+       self.buttonAnimateRotation=but
+       vbox.add(but)
+
+       # Add the icongrid
+       al=gtk.Alignment(xalign=0, xscale=0)
+       al.add(self.igw)
+       al.set_padding(0, 0, 20, 0)
+       hbox.add(al)
+
        self.igw.connect('long-press', self.slotLongpress)
        self.igw.connect('click', self.slotLongpress)
 
@@ -120,6 +133,7 @@ class WinConfig(StackableWindow):
        self.setSize(self.config.getSize())
        self.setIndiv(self.config.getIndiv())
        self.setLongpress(self.config.getLongpress())
+       self.setAnimate(self.config.getAnimate())
 
     def slotLongpress(self, sender, icon):
        self.doConfig(icon)
@@ -184,9 +198,19 @@ class WinConfig(StackableWindow):
        if indiv:
            for i in self.butsSizeY:
                i.set_sensitive(True)
+           for i in self.butsSizeX:
+               i.set_sensitive(True)
+
        else:
            for i in self.butsSizeY:
                i.set_sensitive(False)
+
+           cnt=0
+           for i in self.butsSizeX:
+               cnt+=1
+               if cnt>4:
+                   i.set_sensitive(False)
+
            sz=self.getSize()
            szx=sz[0]
            if szx>4:
@@ -198,6 +222,9 @@ class WinConfig(StackableWindow):
     def setLongpress(self, lp):
        self.buttonRequireLongpress.set_active(lp)
 
+    def setAnimate(self, ar):
+       self.buttonAnimateRotation.set_active(ar)
+
     def doConfig(self, icon):
        aps=apps.scan()
 
@@ -285,12 +312,14 @@ class WinConfig(StackableWindow):
 
        indiv=self.buttonRotateIndividually.get_active()
        lp=self.buttonRequireLongpress.get_active()
+       ar=self.buttonAnimateRotation.get_active()
 
        ret={
            'size':         sz,
            'apps':         wapps,
            'indiv':        indiv,
            'longpress':    lp,
+           'animate':      ar,
            }
 
        return(ret)