diff --git a/PyTracker/trunk/PyTrackerClient.py b/PyTracker/trunk/PyTrackerClient.py index 8cc777f..399710b 100644 --- a/PyTracker/trunk/PyTrackerClient.py +++ b/PyTracker/trunk/PyTrackerClient.py @@ -64,6 +64,7 @@ class TrackClient: self.course_iface = Interface(self.ogpsd_proxy, 'org.freedesktop.Gypsy.Course') self.pos_iface = Interface(self.ogpsd_proxy, 'org.freedesktop.Gypsy.Position') + self.terminator="" def UpdateData(self, fields, timestamp, lat, lon, alt): # get UTC time from gypsy timestamp @@ -94,14 +95,15 @@ class TrackClient: def StartTrack(self): self.SendData(self.__username, self.__pwhash, action="START") - # call self.UpdatePosition() when a dbus signal "PositionChanged" comes along the system bus - self.terminator = self.pos_iface.connect_to_signal("PositionChanged", self.UpdateData) - + if self.terminator: + self.terminator.delete() + self.terminator = self.pos_iface.connect_to_signal("PositionChanged", self.UpdateData) def StopTrack(self): self.SendData(self.__username, self.__pwhash, action="STOP") # remove connect_to_signal event self.terminator.remove() - self.usage_iface.ReleaseResource("GPS") + +# self.usage_iface.ReleaseResource("GPS") diff --git a/PyTracker/trunk/clientscriptGUI.py b/PyTracker/trunk/clientscriptGUI.py new file mode 100644 index 0000000..587da53 --- /dev/null +++ b/PyTracker/trunk/clientscriptGUI.py @@ -0,0 +1,106 @@ +from PyTrackerClient import * +import ecore +import ecore.evas +import edje +import sys +import os + +test=TrackClient('edistar','refeco3','80.61.221.9') + + +# Parse command line +from optparse import OptionParser + +def parse_geometry(option, opt, value, parser): + try: + w, h = value.split("x") + w = int(w) + h = int(h) + except Exception, e: + raise optparse.OptionValueError("Invalid format for %s" % option) + parser.values.geometry = (w, h) + +usage = "usage: %prog [options]" +op = OptionParser(usage=usage) +op.add_option("-e", "--engine", type="choice", + choices=("x11", "x11-16"), default="x11-16", + help=("which display engine to use (x11, x11-16), " + "default=%default")) +op.add_option("-n", "--no-fullscreen", action="store_true", + help="do not launch in fullscreen") +op.add_option("-g", "--geometry", type="string", metavar="WxH", + action="callback", callback=parse_geometry, + default=(480, 640), + help="use given window geometry") +op.add_option("-f", "--fps", type="int", default=50, + help="frames per second to use, default=%default") + + +# Handle options and create output window +options, args = op.parse_args() +if options.engine == "x11": + f = ecore.evas.SoftwareX11 +elif options.engine == "x11-16": + if ecore.evas.engine_type_supported_get("software_x11_16"): + f = ecore.evas.SoftwareX11_16 + else: + print "warning: x11-16 is not supported, fallback to x11" + f = ecore.evas.SoftwareX11 + +w, h = options.geometry +ee = f(w=w, h=h) +ee.fullscreen = 0 # not options.no_fullscreen +edje.frametime_set(1.0 / options.fps) + + +# Load and setup UI +ee.title = "test" +ee.name_class = ("test", "test") +canvas = ee.evas +#edje_file = os.path.join(os.path.dirname(sys.argv[0]), "PyTracker.edj") +edje_file = 'data/PyTracker.edj' +try: + edje_obj = edje.Edje(canvas, file=edje_file, group="test") +except Exception, e: # should be EdjeLoadError, but it's wrong on python2.5 + raise SystemExit("Failed to load Edje file: %s" % edje_file) + +# resize edje to fit our window, show and remember it for later use +edje_obj.size = canvas.size +edje_obj.show() +ee.data["edje"] = edje_obj + + +# Setup callbacks for resize, keydown and selected item +def resize_cb(ee): + r = ee.evas.rect + ee.data["edje"].size = r.size + +ee.callback_resize = resize_cb + + +def key_down_cb(bg, event, ee): + k = event.key + if k == "Escape": + ecore.main_loop_quit() + if k in ("F6", "f"): + ee.fullscreen = not ee.fullscreen + +edje_obj.on_key_down_add(key_down_cb, ee) + + +def icon_selected(edje_obj, signal, source): + if signal == "StartSelected": + test.StartTrack() + elif signal == "StopSelected": + test.StopTrack() + +edje_obj.signal_callback_add("StartSelected", "*", icon_selected) +edje_obj.signal_callback_add("StopSelected", "*", icon_selected) + +# Give focus to object, show window and enter event loop +edje_obj.focus = True +ee.show() + +#ecore.main_loop_begin() +ee.evas.image_cache_set( 6*1024*1024 ) +ecore.main_loop_begin() diff --git a/PyTracker/trunk/data/PyTracker.edc b/PyTracker/trunk/data/PyTracker.edc new file mode 100644 index 0000000..b8b73fc --- /dev/null +++ b/PyTracker/trunk/data/PyTracker.edc @@ -0,0 +1,228 @@ +// Sample EDC +images { + image, "background.jpg" LOSSY 95; + image, "start.png" COMP; + image, "stop.png" COMP; +} + +collections { + group { + name, "test"; + min, 480 640; + max, 1024 768; + + parts { + part { + name, "background"; + type, IMAGE; + mouse_events, 0; + + description { + state, "default" 0.0; + + rel1 { + relative, 0.0 0.0; + offset, 0 0; + } + rel2 { + relative, 1.0 1.0; + offset, -1 -1; + } + image { + normal, "background.jpg"; + } + } + } + + part { + name, "button_start"; + type, RECT; + mouse_events, 1; + + description { + state, "default" 0.0; + min, 480 100; + max, 1028 150; + align, 0.5 0.0; + + color, 211 168 234 200; + + rel1 { + relative, 0.0 0.0; + offset, 0 0; + } + rel2 { + relative, 1.0 0.0; + offset, -1 0; + } + } + description { + state, "clicked" 0.0; + min, 480 100; + max, 1028 100; + align, 0.5 0.0; + + color, 170 89 214 200; + + rel1 { + relative, 0.0 0.0; + offset, 2 3; + } + rel2 { + relative, 1.0 0.0; + offset, 1 6; + } + } + } + + part { + name, "button_stop"; + type, RECT; + mouse_events, 1; + + description { + state, "default" 0.0; + min, 480 100; + max, 1028 150; + align, 0.5 1.0; + + color, 211 168 234 200; + + rel1 { + relative, 0.0 1.0; + offset, 0 0; + } + rel2 { + relative, 1.0 1.0; + offset, -1 -1; + } + } + description { + state, "clicked" 0.0; + min, 480 100; + max, 1028 100; + align, 0.5 1.0; + + color, 170 89 214 200; + + rel1 { + relative, 0.0 1.0; + offset, 2 3; + } + rel2 { + relative, 1.0 1.0; + offset, 1 6; + } + } + } + + part { + name, "text_start"; + type, TEXT; + mouse_events, 0; + + description { + state, "default" 0.0; + + rel1 { + + relative, 0.0 0.0; + offset, 0 0; + to, "button_start"; + } + rel2 { + relative, 1.0 1.0; + offset, -1 -1; + to, "button_start"; + } + text { + text, "START"; + font, "sans serif"; + size, 20; + align, 0.5 0.5; + } + } + } + part { + name, "text_stop"; + type, TEXT; + mouse_events, 0; + + description { + state, "default" 0.0; + + rel1 { + + relative, 0.0 0.0; + offset, 0 0; + to, "button_stop"; + } + rel2 { + relative, 1.0 1.0; + offset, -1 -1; + to, "button_stop"; + } + text { + text, "STOP"; + font, "sans serif"; + size, 20; + align, 0.5 0.5; + } + } + } + } /* Close Parts */ + + programs { + + program { + name, "button_click"; + signal, "mouse,down,1"; + source, "button_start"; + action, STATE_SET "clicked" 0.0; + target, "button_start"; + } + + program { + name, "button_unclick"; + signal, "mouse,up,1"; + source, "button_start"; + action, STATE_SET "default" 0.0; + target, "button_start"; + } + + program { + name, "start_signal"; + signal, "mouse,down,1"; + source, "button_start"; + action, SIGNAL_EMIT "StartSelected" "button_start"; + in, 0.0 0.0; + } + program { + name, "stop_click"; + signal, "mouse,down,1"; + source, "button_stop"; + action, STATE_SET "clicked" 0.0; + target, "button_stop"; + } + + program { + name, "stop_unclick"; + signal, "mouse,up,1"; + source, "button_stop"; + action, STATE_SET "default" 0.0; + target, "button_stop"; + } + + program { + name, "stop_signal"; + signal, "mouse,down,1"; + source, "button_stop"; + action, SIGNAL_EMIT "StopSelected" "button_stop"; + in, 0.0 0.0; + } + + + + } /* Close Prog */ + } /* Close Group */ +} /* Close Coll */ diff --git a/PyTracker/trunk/data/PyTracker.edj b/PyTracker/trunk/data/PyTracker.edj new file mode 100644 index 0000000..2f9bfe0 Binary files /dev/null and b/PyTracker/trunk/data/PyTracker.edj differ diff --git a/PyTracker/trunk/data/background.jpg b/PyTracker/trunk/data/background.jpg new file mode 100644 index 0000000..a17533c Binary files /dev/null and b/PyTracker/trunk/data/background.jpg differ diff --git a/PyTracker/trunk/data/start.png b/PyTracker/trunk/data/start.png new file mode 100644 index 0000000..d31b5b1 Binary files /dev/null and b/PyTracker/trunk/data/start.png differ diff --git a/PyTracker/trunk/data/stop.png b/PyTracker/trunk/data/stop.png new file mode 100644 index 0000000..1dc8073 Binary files /dev/null and b/PyTracker/trunk/data/stop.png differ