1
0
mirror of https://github.com/gryf/wmdocklib.git synced 2025-12-18 20:10:23 +01:00

1714519 - object oriented library

added new example application, on the way to the object oriented library.

the idea is to develop this program within one single source, but clearly
separating the general from the specific.  so in this source I will have a
general 'Application' class which will contain no specific 'radio' code.
the radio code will make use of the general application class.

the program is not yet functional.
This commit is contained in:
mfrasca
2007-05-07 19:14:54 +00:00
parent 153a8b629b
commit 844eecc535

178
examples/pywmradio.py Executable file
View File

@@ -0,0 +1,178 @@
#!/usr/bin/env python
"""pywmnop.py
WindowMaker dockapp doing nothing
Copyright (C) 2006 Mario Frasca
Licensed under the GNU General Public License.
"""
import sys, time
import wmdocklib
debug = 0
class Application:
def __init__(self, *args, **kwargs):
"""initializes the object
_events is a list of tuples (type, key, area, callback)
'type' <- ['buttonpress', 'buttonrelease', 'keypress'],
'callback': the function to which the event should be passed.
'key': the utf-8 character or the mouse button number,
'area': if the pointer is here, the event is considered,
"""
self._events = []
wmdocklib.initPixmap(*args, **kwargs)
wmdocklib.openXwindow(sys.argv, 64, 64)
pass
def addHandler(self, callback, type=None, key=None, area=None ):
if area is not None and len(area) is not 4:
area = None
self._events.append( (type, key, area, callback,) )
pass
def run(self):
while 1:
event = wmdocklib.getEvent()
while not event is None:
if event['type'] == 'destroynotify':
sys.exit(0)
for evtype, key, area, callback in self._events:
if evtype is not None and evtype != event['type']: continue
if key is not None and key != event['key']: continue
if area is not None:
if not area[0] <= event['x'] <= area[2]: continue
if not area[1] <= event['y'] <= area[3]: continue
callback(event)
event = wmdocklib.getEvent()
wmdocklib.redraw()
time.sleep(0.5)
pass
def printevent(event):
print event
def previousRadio(event):
print 'previousRadio', event
def nextRadio(event):
print 'nextRadio', event
def quitProgram(event):
print 'quitProgram', event
sys.exit(0)
def playStream(event):
print 'playStream', event
def stopStream(event):
print 'stopStream', event
palette = {
'-': "#000000",
".": "#868682",
"X": "#AEAEAA",
"o": "#F7F7F3",
}
patterns = [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
" X-------------------------------------------X ",
" X-------------------------------------------X ",
" X-------------------------------------------X ",
" X-------------------------------------------X ",
" X-------------------------------------------X ",
" X-------------------------------------------X ",
" X-------------------------------------------X ",
" XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ",
" ",
" ",
" ",
" ",
" XXXXXXXX. XXXXXXXX. XXXXXXXX. ",
" X-------- X-------- X-------- ",
" X-------- X-------- X-------- ",
" X--o--o-- X--o--o-- X-o.-.o-- ",
" X--o-oo-- X--oo-o-- X-.o.o.-- ",
" X--oooo-- X--oooo-- X--.o. -- ",
" X--o-oo-- X--oo-o-- X-.o.o.-- ",
" X--o--o-- X--o--o-- X-o.-.o-- ",
" X-------- X-------- X-------- ",
" X-------- X-------- X-------- ",
" .-------- .-------- .-------- ",
" ",
" ",
" ",
" XXXXXXXX. XXXXXXXX. XXXXXXXX. ",
" X-------- X-------- X-------- ",
" X-------- X-------- X-------- ",
" X--o----- X-oo-oo-- X-ooooo-- ",
" X--oo---- X-oo-oo-- X-ooooo-- ",
" X--ooo--- X-oo-oo-- X-ooooo-- ",
" X--oo---- X-oo-oo-- X-ooooo-- ",
" X--o----- X-oo-oo-- X-ooooo-- ",
" X-------- X-------- X-------- ",
" X-------- X-------- X-------- ",
" .-------- .-------- .-------- ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
]
def main():
global char_width, char_height, maxCharsPerLine, antialiased
app = Application(font_name='5x8',
margin = 3,
bg=0, fg=2, palette=palette,
background=patterns,
debug=debug)
# maxCharsPerLine = (width-2*xOffset) / char width
app.addHandler(previousRadio, 'buttonrelease', area=(14,29,23,38))
app.addHandler(nextRadio, 'buttonrelease', area=(26,29,35,38))
app.addHandler(quitProgram, 'buttonrelease', area=(38,29,47,38))
app.addHandler(playStream, 'buttonrelease', area=(14,43,23,52))
app.addHandler(stopStream, 'buttonrelease', area=(26,43,35,52))
app.addHandler(stopStream, 'buttonrelease', area=(38,43,47,52))
app.run()
if __name__ == '__main__':
main()