--- /dev/null
+#!/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 <http://www.gnu.org/licenses/>.
+#
+# $Id: 0.py 2265 2010-02-21 19:16:26Z v13 $
+
+__version__ = "$Id: 0.py 2265 2010-02-21 19:16:26Z v13 $"
+
+#import config
+import apps
+import icon
+from icon import getIcon, Icon
+from sig import Disconnector
+
+import gobject
+import gtk
+
+class IconIter:
+ def __init__(self, items):
+ self.iter=items.__iter__()
+
+ def __iter__(self):
+ ret=self.iter.__iter__()
+ return(ret)
+
+ def next(self):
+ ret=self.iter.next()
+ return(ret)
+
+class Icons(gobject.GObject, Disconnector):
+#class Icons(gtk.Widget, Disconnector):
+
+ #__gsignals__=Icon.gsignals
+ def __init__(self, isconfig, config):
+ self.__gobject_init__()
+ #gobject.GObject.__init__(self)
+ #gtk.Widget.__init__(self)
+ Disconnector.__init__(self)
+
+ self.icons={}
+ self.allicons={}
+ self.size=0
+ self.isconfig=isconfig
+ self.config=config
+
+ # signal handlers
+ self.handlers={}
+
+ self.maxsz=(0,0)
+
+ # setup allicons
+ self.resizeMax()
+
+# print "icons-init"
+
+ def finish(self):
+ self.dis_finish()
+ return
+# self.icons=None
+# self.allicons=None
+# print "icons-finish"
+
+# def __del__(self):
+# print "icons-del"
+
+ def resizeMax(self):
+ sz=self.maxsz
+ maxsz=self.config.getMaxSize()
+
+ # 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)
+ t=self.allicons.pop(k)
+ self.disconnect_one(t)
+ 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])
+ t=self.allicons.pop(k)
+ self.disconnect_one(t)
+ sz=(sz[0], maxsz[1])
+
+ self.maxsz=sz
+
+ @classmethod
+ def register_signals(cls):
+ signals=Icon.gsignals
+ for s in signals:
+ ss=signals[s]
+ gobject.signal_new(s, cls, ss[0], ss[1], (Icon,))
+# gobject.SIGNAL_RUN_FIRST,
+# gobject.TYPE_NONE, (Icon,))
+
+ def __iter__(self):
+ return(IconIter(self.icons))
+
+ def connect_one(self, which):
+ self.handlers[which]={
+ 'longpress': self.c(which, 'long-press', self.signalLongpress),
+ 'click': self.c(which, 'click', self.signalClick),
+ 'tripple': self.c(which, 'tripple-click',
+ self.signalTrippleClick)
+ }
+
+ def disconnect_one(self, which):
+ for i in self.handlers[which]:
+ which.disconnect(self.handlers[which][i])
+ self.handlers.pop(which)
+# which.disconnect(self.h[which]_longpress)
+# which.disconnect(self.h_click)
+# which.disconnect(self.h_tripple)
+
+ def setSize(self, sz):
+# print "sz:", sz, self.size
+
+ if sz==self.size:
+ return
+
+ old=self.icons
+ self.icons={}
+
+ for x in xrange(sz[0]):
+ for y in xrange(sz[1]):
+ k=(x,y)
+ ico=self.allicons[k]
+ self.icons[k]=ico
+# if old.has_key(k):
+# old.pop(k) # Re-used
+# else:
+# self.connect_one(ico)
+
+ # Disconnect signals
+# for i in old:
+# self.disconnect_one(old[i])
+
+ self.size=sz
+
+ def getSize(self):
+ return(self.size)
+
+ def setWindow(self, win):
+ """ Set the window for all icons """
+
+ for i in self.icons:
+ ic=self.icons[i]
+ ic.setWindow(win)
+
+ def signalLongpress(self, icon):
+ #print "signalLongpress()", icon
+ self.emit('long-press', icon)
+
+ def signalClick(self, icon):
+ #print "signalClick()", icon
+ self.emit('click', icon)
+
+ def signalTrippleClick(self, icon):
+ #print "signalTrippleClick()", icon
+ self.emit('tripple-click', icon)
+
+ def get(self, x, y):
+ k=(x,y)
+ if self.icons.has_key(k):
+ ret=self.icons[k]
+ else:
+ ret=None
+
+ return(ret)
+
+ def load(self):
+# x=0
+# y=0
+# fn=["maegirls", "wifieye", 'battery-eye', 'image-viewer',
+# 'tecnoballz', 'ncalc', 'rtcom-call-ui', 'rtcom-messaging-ui',
+# 'extcalllog', 'browser', 'modest', 'osso-addressbook']
+
+ wapps=self.config.getApps()
+ #sz=self.config.getSize()
+ sz=self.getSize()
+
+ for k in wapps:
+ x,y=k
+ if x>=sz or y>=sz:
+ continue
+
+ appname=wapps[k]
+ if appname!=None:
+ app=apps.readOne(appname)
+ if app!=None:
+ app['icon2']=getIcon(app['icon'], self.config.getIconSize())
+ self.get(x,y).setApp(app)
+ else:
+ 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)
+# dt['icon2']=getIcon(dt['icon'])
+# print x, y, dt
+# self.get(x,y).setApp(dt)
+# x+=1
+# if x>=config.getSize(getSize()):
+# x=0
+# y+=1
+## self.icons.append(p)
+
+gobject.type_register(Icons)
+Icons.register_signals()
+
+# vim: set ts=8 sts=4 sw=4 noet formatoptions=r ai nocindent:
+