Source code for leo.plugins.geotag

#@+leo-ver=5-thin
#@+node:tbrown.20091214233510.5347: * @file geotag.py
''' Tags nodes with latitude and longitude. '''

#@@language python
#@@tabwidth -4

#@+<< imports >>
#@+node:tbrown.20091214233510.5349: ** << imports >>
import leo.core.leoGlobals as g

from leo.plugins.pygeotag import pygeotag

import socket
#@-<< imports >>
__version__ = "0.1"

#@+others
#@+node:tbrown.20091214233510.5351: ** init
[docs]def init(): '''Return True if the plugin has loaded successfully.''' if not hasattr(g, 'pygeotag'): try: g.pygeotag = pygeotag.PyGeoTag(synchronous=True) g.pygeotag.start_server() g.registerHandler('after-create-leo-frame',onCreate) g.registerHandler('end1',onQuit) g.plugin_signon(__name__) except socket.error: g.es('Geotag plugin init failed, perhaps port in use') return True
#@+node:tbrown.20091214233510.5352: ** onCreate
[docs]def onCreate (tag,key): c = key.get('c') geotag_Controller(c)
#@+node:tbrown.20101103145611.5658: ** onQuit
[docs]def onQuit(tag,key): g.pygeotag.stop_server()
#@+node:tbrown.20091214233510.5353: ** class geotag_Controller
[docs]class geotag_Controller(object): '''A per-commander class that manages geotagging.''' #@+others #@+node:tbrown.20091214233510.5354: *3* __init__ def __init__ (self, c): self.c = c c.geotag = self #@+node:tbrown.20091215204347.11403: *3* getAttr
[docs] @staticmethod def getAttr(p): for nd in p.children(): if nd.h.startswith('@LatLng '): break else: nd = p.insertAsLastChild() return nd
#@+node:tbrown.20091214233510.5356: *3* callback
[docs] def callback(self, data): c = self.c p = c.p nd = self.getAttr(p) nd.h = '@LatLng %(lat)f %(lng)f %(zoom)d %(maptype)s %(description)s ' % data c.setChanged(True) if hasattr(c, 'attribEditor'): c.attribEditor.updateEditorInt() c.redraw()
#@-others #@+node:tbrown.20091214233510.5357: ** cmd_open_server_page (gettag_Controller)
[docs]@g.command('geotag-open-server-page') def cmd_OpenServerPage(event): # c = event.get('c') g.pygeotag.open_server_page()
# g.pygeotag.callback = c.geotag.callback #@+node:tbrown.20091214233510.5358: ** cmd_tag_node (gettag_Controller)
[docs]@g.command('geotag-tag-node') def cmd_TagNode(event): c = event.get('c') data = g.pygeotag.get_position({'description':c.p.h}) c.geotag.callback(data)
#@+node:tbrown.20091215204347.11402: ** cmd_show_node (gettag_Controller)
[docs]@g.command('geotag-show-node') def cmd_ShowNode(event): c = event.get('c') nd = geotag_Controller.getAttr(c.p) try: txt = nd.h.split(None, 5) what = 'dummy', 'lat', 'lng', 'zoom', 'maptype', 'description' data = dict(zip(what, txt)) data['lat'] = float(data['lat']) data['lng'] = float(data['lng']) if 'zoom' in data: data['zoom'] = int(data['zoom']) if 'description' not in data or not data['description'].strip(): data['description'] = c.p.h except (ValueError,TypeError): data = {'description':c.p.h} g.pygeotag.show_position(data)
#@-others #@-leo