X-Git-Url: http://git.maemo.org/git/?p=drlaunch;a=blobdiff_plain;f=drlaunch%2Fsrc%2Fconfig.py;fp=drlaunch%2Fsrc%2Fconfig.py;h=50ae4715fd919ea25c8a5b1744569302d0c16a10;hp=0000000000000000000000000000000000000000;hb=94695a8c9a3ebf78e1f4c32d854e6b5a163d4667;hpb=75247cf58d8d7f5a420aa300a01b1f50e4bffb23 diff --git a/drlaunch/src/config.py b/drlaunch/src/config.py new file mode 100755 index 0000000..50ae471 --- /dev/null +++ b/drlaunch/src/config.py @@ -0,0 +1,363 @@ +#!/usr/bin/env python +# coding=UTF-8 +# +# Copyright (C) 2010 Stefanos Harhalakis +# +# This file is part of wifieye. +# +# wifieye is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# wifieye is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with wifieye. If not, see . +# +# $Id: 0.py 2265 2010-02-21 19:16:26Z v13 $ + +__version__ = "$Id: 0.py 2265 2010-02-21 19:16:26Z v13 $" + +import os +import pickle + +version = "1.0" + +try: + from glib import get_user_config_dir +except: + def get_user_config_dir(): + home=os.environ['HOME'] + if home=='': + home="/home/user" + cfg="%s/.config" % (home) + + return(cfg) + +def ensure_dir(): + dir0=get_user_config_dir() + dir=dir0+'/drlaunch' + if not os.path.exists(dir): + os.mkdir(dir) + if not os.path.isdir(dir): + raise Exception('Failed to ensure directory' + dir) + + return(dir) + +def get_config_fn(): + dir=ensure_dir() + ret=dir + '/config' + + return(ret) + +class Config(object): + def __init__(self, id): + self.id=id + + self.size = (2,2) + self.themebgsize = 96 + 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 + self.animate=True + self.nobg=False + self.themebg=False + + self.setDefaultSizes() + + #self.maxsz=(8,4) + + def setSize(self, 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 + + # Return the maximum grid size + def getMaxSize(self): + isf=self.getIconSizeFull() + retx=int(800/isf) + rety=int((480-60)/isf) + maxsz=(retx, rety) + return(maxsz) + + # Return the maxmimum icon size + def getIconSizeRange(self): + return((48,128)) + + def getIconPaddingRange(self): + return((0,32)) + + def getIconMarginRange(self): + return((0,16)) + + 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 + + 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 setNoBg(self, nobg): + self.nobg=nobg + + def getNoBg(self): + return(self.nobg) + + def setThemeBg(self, themebg): + self.themebg=themebg + + def getThemeBg(self): + return(self.themebg) + + 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) + + 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() + + dt=self.load_all() + + if dt==None: + dt={ + 'version': 7, + 'data': {}, + } + + dt['data'][self.id]={ + 'size': self.getSize(), + 'apps': self.getApps(), + 'indiv': self.getIndiv(), + 'longpress': self.getLongpress(), + '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() + + st=pickle.dumps(dt) + f=file(fn, 'w') + f.write(st) + f.close() + + 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 parse_v4(self, dt): + dt['version']=5 + + for i in dt['data']: + dt['data'][i]['nobg']=False + + return(dt) + + def parse_v5(self, dt): + dt['version']=6 + + for i in dt['data']: + dt['data'][i]['themebg']=False + + 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() + + try: + f=file(fn, 'r') + st=f.read() + f.close() + ret=pickle.loads(st) + + if ret==None: + print "failed to load config" + ret=None + else: + if ret['version']==1: + ret=self.parse_v1(ret) + + if ret['version']==2: + ret=self.parse_v2(ret) + + if ret['version']==3: + ret=self.parse_v3(ret) + + if ret['version']==4: + ret=self.parse_v4(ret) + + 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 + + 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']) + 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: + import sys + + print "config.init() not done" + sys.exit(1) + +def dump(obj): + attrs=[attr for attr in dir(obj) if not callable(getattr(obj,attr))] + + print "obj:", obj + for attr in attrs: + if attr=='__gdoc__' or attr=='__doc__': + continue + print " ", attr, ":", getattr(obj, attr) + +# vim: set ts=8 sts=4 sw=4 noet formatoptions=r ai nocindent: +