possibility to change size with size.cfg
[comic-widget] / src / usr / lib / hildon-desktop / comicwidget.py
index 905ce16..20b5eb4 100644 (file)
@@ -22,7 +22,7 @@ supports_alpha = False
 
 # constants. dbfile is the location of the csv
 # comiccache is the location of the images
-APP_VERSION = "0.3.2"
+APP_VERSION = "0.3.2-2"
 
 basedbdir = "/opt/comic-widget/db/"
 imagedir = "/opt/comic-widget/images/"
@@ -33,9 +33,11 @@ comics = {"xkcd":{"name":"xkcd","link":"http://xkcd.org/","start":666,"dbfile":d
                "sinfest":{"name":"Sinfest","link":"http://sinfest.com/","start":3400,"dbfile":dbdir + "comicdb.sinfest.csv"},
                "phd":{"name":"PHD Comics","link":"http://www.phdcomics.com/","start":1240,"dbfile":dbdir + "comicdb.phd.csv"},
                "dilbert":{"name":"Dilbert","link":"http://dilbert.com/","start":"2009-01-01","dbfile":dbdir + "comicdb.dilbert.csv"},
-               "cyanide":{"name":"Cyanide&Happiness","link":"http://explosm.com/","start":"1920","dbfile":dbdir + "comicdb.cyanide.csv"},
+               "cyanide":{"name":"C and H","link":"http://explosm.com/","start":"1920","dbfile":dbdir + "comicdb.cyanide.csv"},
                }
-defaults = {}
+defaults = {'width':480,'height':230}
+#defaults = {'width':480,'height':240}
+sizefile = "/home/user/.comic-widget/size.cfg"
 previous = False
 next = False
 
@@ -515,6 +517,9 @@ class ComicHomePlugin(hildondesktop.HomePluginItem):
                global supports_alpha
                self.set_settings(True)
                self.active_comics = self.get_active_comics()
+               self.sizes = self.get_size_settings()
+               self.new_width = self.sizes['width']
+               self.new_height = self.sizes['height']
                self.connect("show-settings", self.show_options)
                self.osso_c = osso.Context("comic-widget", "0.3.0", False)
                self.osso_rpc = osso.Rpc(self.osso_c)
@@ -534,7 +539,7 @@ class ComicHomePlugin(hildondesktop.HomePluginItem):
                self.set_colormap(colormap)
                self.set_app_paintable(True)
                #setup internal area
-               self.set_size_request(480, 230)
+               self.set_size_request(self.sizes['width'], self.sizes['height'])
                self.imgvpos = 0;
                self.vbox = gtk.VBox()
                self.hbox = gtk.HBox()
@@ -639,6 +644,8 @@ class ComicHomePlugin(hildondesktop.HomePluginItem):
                self.vbox.show_all()
                self.add(self.vbox)
 
+
+
        # **************** Cairo draw functions ***************
 
        def realize(self, widget):
@@ -799,23 +806,26 @@ class ComicHomePlugin(hildondesktop.HomePluginItem):
 
        def get_resized_pixmap(self, filename, vpos):
                print "vpos: " + str(vpos)
-
-               maxheight = 182
+               
+               width = int(self.sizes['width'])
+               height = int(self.sizes['height'])
+               picwidth = width - 2
+               maxheight = height - 48
 
                pixbuf = gtk.gdk.pixbuf_new_from_file(filename)
-               parent_buf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, pixbuf.get_has_alpha(), 8, 480, maxheight)
+               parent_buf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, pixbuf.get_has_alpha(), 8, width, maxheight)
                parent_buf.fill(0xffffffff)
                retimg = gtk.Image()
                # get correct width/height
                new_height = 1
-               new_width = 478
-               new_height = int((478.0 / pixbuf.get_width()) * pixbuf.get_height())
+               new_width = picwidth
+               new_height = int((float(picwidth) / pixbuf.get_width()) * pixbuf.get_height())
                scaled_buf = pixbuf.scale_simple(new_width,new_height,gtk.gdk.INTERP_BILINEAR)
                print "scaled height: " + str(scaled_buf.get_height())
                if scaled_buf.get_height() > maxheight:
                        if scaled_buf.get_height() - (vpos + maxheight) < 0:
                                vpos = scaled_buf.get_height() - maxheight
-                       scaled_buf.copy_area(0,vpos,478,maxheight,parent_buf,1,0)
+                       scaled_buf.copy_area(0,vpos,picwidth,maxheight,parent_buf,1,0)
                        # parent_buf.composite(scaled_buf, 0, 0, 478, maxheight, 0, 0, 478, maxheight, gtk.gdk.INTERP_BILINEAR, 0)
                        self.imgvpos = vpos
                else:
@@ -823,10 +833,10 @@ class ComicHomePlugin(hildondesktop.HomePluginItem):
                        if tmpy > 0:
                                tmpy = tmpy / 2
 
-                       scaled_buf.copy_area(0,0,478,scaled_buf.get_height(),parent_buf,1,tmpy)
+                       scaled_buf.copy_area(0,0,picwidth,scaled_buf.get_height(),parent_buf,1,tmpy)
                        self.imgvpos = 0
 #              test = parent_buf.render_pixmap_and_mask(0)
-               parent_buf.add_alpha(True,chr(255),chr(255),chr(255))
+#              parent_buf.add_alpha(True,chr(255),chr(255),chr(255))
                retimg.set_from_pixbuf(parent_buf)
                print retimg.get_pixel_size()
                print "vpos after fixing image: " + str(self.imgvpos)
@@ -912,10 +922,16 @@ class ComicHomePlugin(hildondesktop.HomePluginItem):
                comics_button.set_alignment(0,0,0,0)
                comics_button.connect("clicked", self.show_comics)
 
+               # size_button = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
+               # size_button.set_text("Change size", "Change the size of the widget")
+               # size_button.set_alignment(0,0,0,0)
+               # size_button.connect("clicked", self.show_size)
+
                print "adding buttons to dialog, starting with comics"
                dialog.vbox.pack_start(comics_button, True, True, 0)
                print "adding about button"
                dialog.vbox.pack_start(about_button, True, True, 0)
+               # dialog.vbox.pack_start(size_button, True, True, 0)
                print "show!"
                dialog.show_all()
                dialog.run()
@@ -943,6 +959,7 @@ class ComicHomePlugin(hildondesktop.HomePluginItem):
                comiclist = comics.keys()
                comiclist.sort()
                buttonlist = {}
+               self.connlist = {}
                for comicid in comiclist:
                        buttonlist[comicid] = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_VERTICAL)
                        print buttonlist[comicid].get_name()
@@ -955,17 +972,17 @@ class ComicHomePlugin(hildondesktop.HomePluginItem):
                                        break
                        if active:
                                buttonlist[comicid].set_text(comics[comicid]['name'] + " *", comicid + ": click to remove")
-                               buttonlist[comicid].connect("clicked", self.remove_comic)
+                               self.connlist[comicid] = buttonlist[comicid].connect("clicked", self.remove_comic)
                        else:
                                buttonlist[comicid].set_text(comics[comicid]['name'], comicid + ": click to add")
-                               buttonlist[comicid].connect("clicked", self.add_comic)
+                               self.connlist[comicid] = buttonlist[comicid].connect("clicked", self.add_comic)
                        dialog.vbox.pack_start(buttonlist[comicid], True, True, 0)
 
                
                dialog.show_all()
                dialog.run()
                dialog.destroy()
-                               
+
        def add_comic(self, widget):
                print "add " + widget.get_title()
                splt = string.split(widget.get_value(), ':', 1)
@@ -981,6 +998,8 @@ class ComicHomePlugin(hildondesktop.HomePluginItem):
                        dbw.writerow(self.active_comics)
                        dbf.close()
                widget.set_text(comics[comicid]['name'] + " *", comicid + ": click to remove")
+               widget.disconnect(self.connlist[comicid])
+               self.connlist[comicid] = widget.connect("clicked", self.remove_comic)
 
        def remove_comic(self, widget):
                print "remove " + widget.get_title()
@@ -999,6 +1018,43 @@ class ComicHomePlugin(hildondesktop.HomePluginItem):
                        dbw.writerow(self.active_comics)
                        dbf.close()
                widget.set_text(comics[comicid]['name'], comicid + ": click to add")
+               widget.disconnect(self.connlist[comicid])
+               self.connlist[comicid] = widget.connect("clicked", self.add_comic)
+
+       def get_size_settings(self):
+               # defaults = {'width':480,'height':230}
+               # options: w 798 700 600 500 480 400
+               # options: h 420 360 310 270 240 200
+               print "checking to see if config file is available"
+               if os.path.isfile(sizefile) == True:
+                       print "found " + sizefile
+                       dbf = open(sizefile, 'r')
+                       dbr = csv.reader(dbf)
+                       try:
+                               cfg = dbr.next()
+                       except:
+                               dbf.close()
+                               print "empty config file"
+                               return defaults
+                       dbf.close()
+                       
+                       sizes = {'width':int(cfg[0]),'height':int(cfg[1])}
+                       if sizes['width'] > 798:
+                               sizes['width'] = 798
+                       if sizes['width'] < 400:
+                               sizes['width'] = 400
+                       if sizes['height'] > 420:
+                               sizes['height'] = 420
+                       if sizes['height'] < 200:
+                               sizes['height'] = 200
+                       
+                       return sizes
+                       
+                       
+               # if not, copy it.
+               else:
+                       print "no config file"
+                       return defaults
                
 hd_plugin_type = ComicHomePlugin