From 979db20bec107c169ac91e69473ec29b1b4e115c Mon Sep 17 00:00:00 2001 From: Paul Philippov Date: Wed, 4 Feb 2009 14:33:31 +0200 Subject: [PATCH] initial commit --- src/Makefile | 100 +++++++++++++++++++ src/beats-applet.desktop | 5 + src/beats-applet.py | 200 +++++++++++++++++++++++++++++++++++++ src/beats.svg | 139 ++++++++++++++++++++++++++ src/beats128.png | Bin 0 -> 7103 bytes src/beats26.png | Bin 0 -> 1432 bytes src/description.txt | 7 ++ src/prefs.glade | 249 ++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 700 insertions(+) create mode 100644 src/Makefile create mode 100644 src/beats-applet.desktop create mode 100644 src/beats-applet.py create mode 100644 src/beats.svg create mode 100644 src/beats128.png create mode 100644 src/beats26.png create mode 100644 src/description.txt create mode 100644 src/prefs.glade diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..71bf810 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,100 @@ +# Example custom makefile for creating .deb without using dpkg tools. +# +# Author: Tim Wegener +# +# This requires deb_hand.mak + +# Sources: +# SOURCE_DIR - directory containing files to be packaged +# ICON_SOURCE - 26x26 icon file for maemo +# description.txt - description with summary on first line +# preinst, postinst, prerm, postrm - optional control shell scripts + +PACKAGE = beats-applet +VERSION = 0.1 +SECTION = user/other +PRIORITY = optional +ARCH = armel +DEPENDS = python2.5, python2.5-gobject, python2.5-gtk2, python2.5-osso, python2.5-hildon, python2.5-mutagen +MAINTAINER = Paul Philippov + +SOURCE_DIR = . +PACKAGE_DIR ?= .. +ICON_SOURCE = ${SOURCE_DIR}/beats26.png +CTRL_EXTRAS ?= ${wildcard preinst postinst prerm postrm} + +${PACKAGE_DIR}/data: ${SOURCE_DIR} + rm -rf $@ + mkdir -p $@ + mkdir -p $@/usr/lib/hildon-desktop + cp ${SOURCE_DIR}/beats-applet.py $@/usr/lib/hildon-desktop/ + mkdir -p ${PACKAGE_DIR}/data/usr/share/applications/hildon-home + cp ${SOURCE_DIR}/beats-applet.desktop $@/usr/share/applications/hildon-home/ + mkdir -p ${PACKAGE_DIR}/data/usr/share/pixmaps + cp ${SOURCE_DIR}/beats26.png $@/usr/share/pixmaps/beats.png + mkdir -p ${PACKAGE_DIR}/data/usr/share/icons/hicolor/26x26/apps + cp ${SOURCE_DIR}/beats26.png $@/usr/share/icons/hicolor/26x26/apps/beats.png + mkdir -p ${PACKAGE_DIR}/data/usr/share/icons/hicolor/128x128/apps + cp ${SOURCE_DIR}/beats128.png $@/usr/share/icons/hicolor/128x128/apps/beats.png + mkdir -p ${PACKAGE_DIR}/data/usr/share/icons/hicolor/scalable/apps + cp ${SOURCE_DIR}/beats.svg $@/usr/share/icons/hicolor/scalable/apps + mkdir -p ${PACKAGE_DIR}/data/usr/share/beats + cp ${SOURCE_DIR}/prefs.glade $@/usr/share/beats/ + +${PACKAGE_DIR}/control: ${PACKAGE_DIR}/data ${CTRL_EXTRAS} description.txt ${ICON_SOURCE} + rm -rf $@ + mkdir -p $@ + +ifneq (${CTRL_EXTRAS},) + cp ${CTRL_EXTRAS} $@ +endif + + echo "Package: ${PACKAGE}" > $@/control + echo "Version: ${VERSION}" >> $@/control + echo "Section: ${SECTION}" >> $@/control + echo "Priority: ${PRIORITY}" >> $@/control + echo "Architecture: ${ARCH}" >> $@/control + echo "Depends: ${DEPENDS}" >> $@/control + echo "Installed-Size: ${shell du -s ${PACKAGE_DIR}/data | cut -f1}" >> $@/control + echo "Maintainer: ${MAINTAINER}" >> $@/control + echo -n "Description:" >> $@/control + cat description.txt | gawk '{print " "$$0;}' >> $@/control + +ifneq (${ICON_SOURCE},) + echo "Maemo-Icon-26:" >> $@/control + base64 ${ICON_SOURCE} | gawk '{print " "$$0;}' >> $@/control +endif + + cd ${PACKAGE_DIR}/data && find . -type f -exec md5sum {} \; | sed -e 's| \./||' > $@/md5sums + +${PACKAGE_DIR}/debian-binary: + echo "2.0" > $@ + +${PACKAGE_DIR}/build: ${PACKAGE_DIR}/debian-binary ${PACKAGE_DIR}/control + rm -rf $@ + mkdir -p $@ + + cp ${PACKAGE_DIR}/debian-binary $@/ + cd ${PACKAGE_DIR}/control && tar czvf $@/control.tar.gz ./* + cd ${PACKAGE_DIR}/data && tar czvf $@/data.tar.gz ./* + +${PACKAGE_DIR}/${PACKAGE}_${VERSION}_${ARCH}.deb: ${PACKAGE_DIR}/build + ar -rc $@tmp $ $@fail + rm -f $@tmp + mv $@fail $@ + +.PHONY: data +data: ${PACKAGE_DIR}/data + +.PHONY: control +control: ${PACKAGE_DIR}/control + +.PHONY: build +build: ${PACKAGE_DIR}/build + +.PHONY: deb +deb: ${PACKAGE_DIR}/${PACKAGE}_${VERSION}_${ARCH}.deb + +clobber: + rm -rf ${PACKAGE_DIR}/debian_binary ${PACKAGE_DIR}/control ${PACKAGE_DIR}/data ${PACKAGE_DIR}/build diff --git a/src/beats-applet.desktop b/src/beats-applet.desktop new file mode 100644 index 0000000..ee76976 --- /dev/null +++ b/src/beats-applet.desktop @@ -0,0 +1,5 @@ +[Desktop Entry] +Name=Beats (Swatch Internet Time) +Comment=Swatch Internet Time applet +Type=python +X-Path=beats-applet diff --git a/src/beats-applet.py b/src/beats-applet.py new file mode 100644 index 0000000..0dbbc7d --- /dev/null +++ b/src/beats-applet.py @@ -0,0 +1,200 @@ +''' +Beats +2009 (c) Paul Philippov +Swatch Internet Time applet for Hildon +''' +import gtk +from gtk import gdk +import hildondesktop +import cairo +import gobject +import pango +import time +from datetime import timedelta, datetime, tzinfo +from ConfigParser import * + +Pi = 3.14 +Beat = 86.4 + +class BeatsApplet(hildondesktop.HomeItem): + + def __init__(self): + hildondesktop.HomeItem.__init__(self) + + self.timer = None + + self.connect("settings", self._DoSettings) + self.connect("expose-event", self.expose) + self.connect("screen-changed", self.screen_changed) + self.connect("unrealize", self.unrealize) + self.connect("background", self.set_timer, False) + self.connect("foreground", self.set_timer, True) + + self.label = gtk.Label() + self.label.set_use_markup(True) + self.label.set_markup('@---.-') + self.add(self.label) + self.set_size_request(-1, -1) + + self.redraw() + + self.inbackground = False + self.set_timer(self, True) + self.show_all() + + def redraw(self): + self.set_resize_type(hildondesktop.HOME_ITEM_RESIZE_NONE) + self.label.modify_font(pango.FontDescription(self._prefRead('font'))) +# self.label.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self._prefRead('background'))) + self.label.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self._prefRead('foreground'))) + self.label.set_padding(15, 20) + self.label.set_size_request(-1, -1) + self.set_size_request(-1, -1) + + def expose(self, widget, event): + width, height = self.allocation[2], self.allocation[3] + radius = min(15, width/2, height/2) + x0 = 0; x1 = x0 + width + y0 = 0; y1 = y0 + height + + cr = widget.window.cairo_create() + cr.set_source_rgba(1.0, 1.0, 1.0, 0.0) + cr.set_operator(cairo.OPERATOR_SOURCE) + cr.paint() + + cr.move_to(x0, y0 + radius); cr.arc(x0 + radius, y0 + radius, radius, Pi, 1.5 * Pi) + cr.line_to(x1 - radius, y0); cr.arc(x1 - radius, y0 + radius, radius, 1.5 * Pi, 0.0) + cr.line_to(x1, y1 - radius); cr.arc(x1 - radius, y1 - radius, radius, 0.0, 0.5 * Pi) + cr.line_to(x0 + radius, y1); cr.arc(x0 + radius, y1 - radius, radius, 0.5 * Pi, Pi) + cr.close_path() + bg_color = gtk.gdk.color_parse(self._prefRead('background')) + cr.set_source_rgba( + bg_color.red / 65535.0, + bg_color.green / 65535.0, + bg_color.blue / 65535.0, + float(self._prefRead('background_alpha')) / 65535.0 + ) + cr.fill() + return False + + def screen_changed(self, widget, old_screen=None): + screen = self.get_screen() + self.set_colormap(screen.get_rgba_colormap()) + return False + + def unrealize(self, widget, date=None): + self._prefSave('pos_x', self.allocation[0]) + self._prefSave('pos_y', self.allocation[1]) + if self.timer: + v = gobject.source_remove(self.timer) + self.timer = None + + def set_timer(self, widget, on): + if self.timer != None: + gobject.source_remove(self.timer) + if on: + self.timer = gobject.timeout_add(Beat * 100, self.update) + self.update() + + def update(self): + btm_now = datetime.utcnow() + timedelta(hours=1) + delta = timedelta( + hours = btm_now.hour, + minutes = btm_now.minute, + seconds = btm_now.second, + microseconds = btm_now.microsecond + ) + beats = (delta.seconds + delta.microseconds / 1000000.0) / Beat + self.label.set_markup("@%05.1f" % beats) + self.label.set_size_request(-1, -1) + self.set_size_request(-1, -1) + return not self.inbackground + + def _DoSettings(self, widget, data=None): + menuitem = gtk.MenuItem("Beats (Swatch Internet Time)") + menuitem.connect_object("activate", self._ShowSettings, None) + return menuitem + + def _ShowSettings(self, widget, data=None): + import gtk.glade + self._widgetTree = gtk.glade.XML('/usr/lib/beats-applet/prefs.glade') + self._window = self._widgetTree.get_widget("prefs") + self._widgetTree.get_widget("color_background").set_current_color(gtk.gdk.color_parse(self._prefRead('background'))) + self._widgetTree.get_widget("color_background").set_has_opacity_control(True) + self._widgetTree.get_widget("color_background").set_current_alpha(int(self._prefRead('background_alpha'))) + self._widgetTree.get_widget("color_foreground").set_current_color(gtk.gdk.color_parse(self._prefRead('foreground'))) + self._widgetTree.get_widget("color_foreground").set_current_alpha(int(self._prefRead('foreground_alpha'))) + self._widgetTree.get_widget("color_foreground").set_has_opacity_control(True) + self._widgetTree.get_widget("fontselection").set_font_name(self._prefRead('font')) + callbackMapping = { + "on_bCancel_clicked": self._cancel, + "on_bValidate_clicked": self._validate, + } + self._widgetTree.signal_autoconnect(callbackMapping) + self._window.connect("delete-event", self._closebox) + self._window.show() + return True + + def _color_to_string(self, c): + t = "#" + if len(hex(c.red)[2:4])==1: + t = t+'0'+hex(c.red)[2:4] + else: + t = t+hex(c.red)[2:4] + if len(hex(c.green)[2:4])==1: + t = t+'0'+hex(c.green)[2:4] + else: + t = t+hex(c.green)[2:4] + if len(hex(c.blue)[2:4])==1: + t = t+'0'+hex(c.blue)[2:4] + else: + t = t+hex(c.blue)[2:4] + return t + + def _validate(self, widget, *data): + self._prefSave('background', self._color_to_string(self._widgetTree.get_widget("color_background").get_current_color())) + self._prefSave('foreground', self._color_to_string(self._widgetTree.get_widget("color_foreground").get_current_color())) + self._prefSave('background_alpha', str(self._widgetTree.get_widget("color_background").get_current_alpha())) + self._prefSave('foreground_alpha', str(self._widgetTree.get_widget("color_foreground").get_current_alpha())) + self._prefSave('font', self._widgetTree.get_widget("fontselection").get_font_name()) + self._window.destroy() + + def _cancel(self, widget, *data): + self._window.destroy() + + def _closebox(self, widget, *data): + self._window.destroy() + + def _prefRead(self, key): + default = { + 'background':'#000000', + 'background_alpha':'32767', + 'foreground':'#FFFFFF', + 'foreground_alpha':'65535', + 'font':'Sans 16', + 'pos_x':'0', + 'pos_y':'0' + } + c = ConfigParser(default) + c.read('/home/user/.beats') + return c.get("DEFAULT", key) + + def _prefSave(self, key, value): + default = { + 'background':'#000000', + 'background_alpha':'32767', + 'foreground':'#FFFFFF', + 'foreground_alpha':'65535', + 'font':'Sans 16', + } + c = ConfigParser(default) + c.read('/home/user/.beats') + c.set('DEFAULT', key, value) + fp = open('/home/user/.beats', 'w') + c.write(fp) + fp.close() + self.redraw() + +def hd_plugin_get_objects(): + plugin = BeatsApplet() + return [plugin] diff --git a/src/beats.svg b/src/beats.svg new file mode 100644 index 0000000..500315e --- /dev/null +++ b/src/beats.svg @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + @ + + + + + + diff --git a/src/beats128.png b/src/beats128.png new file mode 100644 index 0000000000000000000000000000000000000000..935da04d99fdadb010cd0132158b34b38773d491 GIT binary patch literal 7103 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 XMK?}8S}dllt^xYmMyN_n+n4_V+y7w2 literal 0 HcmV?d00001 diff --git a/src/beats26.png b/src/beats26.png new file mode 100644 index 0000000000000000000000000000000000000000..b0cf02cebdf9691bbe5b796d7e38264787b35ee9 GIT binary patch literal 1432 zcmV;J1!ww+P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iXDx z4Kg@fI%IVK00kIHL_t(Y$E}uoY!p=##(!sax0SAaDN;ZoK>}*zrS1hw4}zl6fZzj3Ko^!xQ?x#y+IDA- z|J-fXicpO=nar7)d*++(yWg36gfol{8#bKP-`{_Ss@^Oj)xZTn1<(g{1II+`>Lk zz%{<_S5;P47Weh_m0Ol|p@_^C5f}JPRj*Rj?a5^FDOHuzGICw_Q4x93TyF6^@9~C) zh686}vu@qGb3D&$0UkE&;3mwO4z10GQOUqAqC+g`7#&l*>RZEY>JENdH31ME}P*?oO|_fX9C{=j;hw1{GA0>-)6#V0fL71MBw{uHv6{1 zc;F#m$(_y3>G$gE$Nw~X^hY9ctK&Gm1&rQFrBXNgzJCC?XedyBfB(T?FbFUfz!H&J zM%%5iSj-nl1C##1Qk)yzl!J@RRkMeOa82r(M zm3h}y8>;UYcs|=6kAL0S)Wk1URhgobC+7nP6_$3u2%rsk6$k+XChbIddHJ3KptDTa zn+Lks0DV1Vv2Qp&ZX6xW%?p6Jz;O>=_+;9&?kQ8IJOKFSm~QevuC1;0^2wg(jWOZz zJkYrSfj}U83Rh87RJ2E+a}!Lv8ot=(`{7$u8Guo5E?ztXm|&zI`a_*z&U*lYKnXx; zX=(3}iIo89bh-x!)Itilyk!6WH+0&3S(fz;@CVQXY_=@x zs%SL&k}1+U<17zIi%2{a3SAb7M85pn#^<{33K3c2dESnOhK4L~f8m<&Ka8NE-K?s2 zwY9ZfZ|?uEAb;6mQ>j#SXJ_ZGuCA`4`uh6q!C){Ni9`+$=OyuYd_+k}$!rmcs_I6^ zaoSJY1-Y(!1+Ya#&IfWpr|BC$FD@=VcI3#BlVxRP#o=)HJYb@!{u&TT`HBT@_qjvRlQL}rUF$!*c9kbs``V7 m>{r!Ys=96A!iAaBeaW9XQW_>g^xUfe0000 + + + + + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + True + GTK_WIN_POS_CENTER_ALWAYS + True + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + + + True + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + True + True + #000000000000 + + + 1 + + + + + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Background + + + tab + False + + + + + True + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + True + True + #000000000000 + + + 1 + + + + + + + + 1 + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Foreground + + + tab + 1 + False + + + + + True + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 8 + @931.42 + + + 1 + + + + + + + + 2 + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Font + + + tab + 2 + False + + + + + True + + + True + 40 + beats.png + 0 + + + + + True + <b>Beats v0.1</b> +Swatch Internet Time + True + GTK_JUSTIFY_CENTER + + + 1 + + + + + True + True + True + True + beatswatch-maemo.googlecode.com + GTK_RELIEF_NONE + 0 + http://beatswatch-maemo.googlecode.com/ + + + 2 + + + + + True + 8 + 2009 Paul Philippov + + + 3 + + + + + 3 + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + About + + + tab + 3 + False + + + + + + + True + + + True + 0 + + + + 128 + 42 + True + gtk-go-back + + + + + False + + + + + True + 0 + + + + 128 + 42 + True + gtk-apply + + + + + False + 1 + + + + + False + False + 1 + + + + + + -- 1.7.9.5