update SetLocationPlugin to py3,use libchamplain instead of python-osmgpsmap
This commit is contained in:
@@ -1 +1 @@
|
||||
from set_location import SetLocationPlugin
|
||||
from .set_location import SetLocationPlugin
|
||||
|
||||
@@ -1,21 +1,24 @@
|
||||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="2.16"/>
|
||||
<!-- interface-naming-policy toplevel-contextual -->
|
||||
<!-- interface-requires gtk+ 3.0 -->
|
||||
<object class="GtkWindow" id="window1">
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox2">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="preset">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Preset:</property>
|
||||
</object>
|
||||
@@ -29,38 +32,50 @@
|
||||
<child>
|
||||
<object class="GtkComboBox" id="preset_combobox">
|
||||
<property name="visible">True</property>
|
||||
<signal name="changed" handler="on_preset_combobox_changed"/>
|
||||
<property name="can_focus">False</property>
|
||||
<signal name="changed" handler="on_preset_combobox_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="preset_button">
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<signal name="clicked" handler="on_preset_button_clicked"/>
|
||||
<signal name="clicked" handler="on_preset_button_clicked" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="image1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-save</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label17">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Save preset</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
@@ -76,29 +91,38 @@
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="del_preset">
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="receives_default">True</property>
|
||||
<signal name="clicked" handler="on_del_preset_clicked"/>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<signal name="clicked" handler="on_del_preset_clicked" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox4">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="image2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-delete</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label18">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Delete preset</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
@@ -121,6 +145,7 @@
|
||||
<child>
|
||||
<object class="GtkTable" id="config_table">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">6</property>
|
||||
<property name="n_rows">16</property>
|
||||
<property name="n_columns">2</property>
|
||||
@@ -129,6 +154,7 @@
|
||||
<child>
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">alt:</property>
|
||||
</object>
|
||||
@@ -140,6 +166,7 @@
|
||||
<child>
|
||||
<object class="GtkLabel" id="label2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">area:</property>
|
||||
</object>
|
||||
@@ -153,6 +180,7 @@
|
||||
<child>
|
||||
<object class="GtkLabel" id="label3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">building:</property>
|
||||
</object>
|
||||
@@ -166,6 +194,7 @@
|
||||
<child>
|
||||
<object class="GtkLabel" id="label4">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">country:</property>
|
||||
</object>
|
||||
@@ -177,6 +206,7 @@
|
||||
<child>
|
||||
<object class="GtkLabel" id="label5">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">countrycode:</property>
|
||||
</object>
|
||||
@@ -188,6 +218,7 @@
|
||||
<child>
|
||||
<object class="GtkLabel" id="label6">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">description:</property>
|
||||
</object>
|
||||
@@ -199,6 +230,7 @@
|
||||
<child>
|
||||
<object class="GtkLabel" id="label7">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">floor:</property>
|
||||
</object>
|
||||
@@ -210,6 +242,7 @@
|
||||
<child>
|
||||
<object class="GtkLabel" id="label8">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">locality:</property>
|
||||
</object>
|
||||
@@ -221,6 +254,7 @@
|
||||
<child>
|
||||
<object class="GtkLabel" id="label9">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">lat:</property>
|
||||
</object>
|
||||
@@ -232,6 +266,7 @@
|
||||
<child>
|
||||
<object class="GtkLabel" id="label10">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">lon:</property>
|
||||
</object>
|
||||
@@ -243,6 +278,7 @@
|
||||
<child>
|
||||
<object class="GtkLabel" id="label11">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">postalcode:</property>
|
||||
</object>
|
||||
@@ -254,6 +290,7 @@
|
||||
<child>
|
||||
<object class="GtkLabel" id="label12">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">region:</property>
|
||||
</object>
|
||||
@@ -265,6 +302,7 @@
|
||||
<child>
|
||||
<object class="GtkLabel" id="label13">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">room:</property>
|
||||
</object>
|
||||
@@ -276,6 +314,7 @@
|
||||
<child>
|
||||
<object class="GtkLabel" id="label14">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">street:</property>
|
||||
</object>
|
||||
@@ -287,6 +326,7 @@
|
||||
<child>
|
||||
<object class="GtkLabel" id="label15">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">text:</property>
|
||||
</object>
|
||||
@@ -298,6 +338,7 @@
|
||||
<child>
|
||||
<object class="GtkLabel" id="label16">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">uri:</property>
|
||||
</object>
|
||||
@@ -312,7 +353,7 @@
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Altitude in meters above or below sea level</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
@@ -325,7 +366,7 @@
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="tooltip_text" translatable="yes">A named area such as a campus or neighborhood</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
@@ -340,7 +381,7 @@
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="tooltip_text" translatable="yes">A specific building on a street or in an area</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
@@ -355,7 +396,7 @@
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="tooltip_text" translatable="yes">The nation where the user is located</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
@@ -370,7 +411,7 @@
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="tooltip_text" translatable="yes">The ISO 3166 two-letter country code</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
@@ -385,7 +426,7 @@
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="tooltip_text" translatable="yes">A natural-language name for or description of the location</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
@@ -400,7 +441,7 @@
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="tooltip_text" translatable="yes">A particular floor in a building</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
@@ -415,7 +456,7 @@
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="tooltip_text" translatable="yes">A locality within the administrative region, such as a town or city</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
@@ -430,7 +471,7 @@
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Latitude in decimal degrees North</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
@@ -445,7 +486,7 @@
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Longitude in decimal degrees East</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
@@ -460,7 +501,7 @@
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="tooltip_text" translatable="yes">A code used for postal delivery</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
@@ -475,7 +516,7 @@
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="tooltip_text" translatable="yes">An administrative region of the nation, such as a state or province</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
@@ -490,7 +531,7 @@
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="tooltip_text" translatable="yes">A particular room in a building</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
@@ -505,7 +546,7 @@
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="tooltip_text" translatable="yes">A thoroughfare within the locality, or a crossing of two thoroughfares</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
@@ -520,7 +561,7 @@
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="tooltip_text" translatable="yes">A catch-all element that captures any other information about the location</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
@@ -535,7 +576,7 @@
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_tooltip">True</property>
|
||||
<property name="tooltip_text" translatable="yes">A URI or URL pointing to information about the location</property>
|
||||
<property name="invisible_char">●</property>
|
||||
<property name="invisible_char">●</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
@@ -561,9 +602,8 @@
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="extension_events">all</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="resize_mode">immediate</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
@@ -572,6 +612,8 @@
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="padding">6</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
|
||||
@@ -3,7 +3,7 @@ name: Set Location
|
||||
short_name: set_location
|
||||
version: 0.7.2
|
||||
description: Set information about the current geographical or physical location.
|
||||
To be able to specify a location on the built-in card, you must install python-osmgpsmap > 0.5
|
||||
To be able to specify a location on the built-in card, you must install gir1.2-gtkchamplain
|
||||
authors: Denis Fomin <fominde@gmail.com>
|
||||
homepage: http://trac-plugins.gajim.org/wiki/SetLocalitionPlugin
|
||||
max_gajim_version: 0.15.9
|
||||
min_gajim_version: 0.15.10
|
||||
|
||||
@@ -2,13 +2,14 @@
|
||||
##
|
||||
|
||||
from datetime import datetime
|
||||
import time
|
||||
import gtk
|
||||
from gi.repository import Gtk
|
||||
from gi.repository import GdkPixbuf
|
||||
import os
|
||||
import time
|
||||
|
||||
from plugins.gui import GajimPluginConfigDialog
|
||||
from plugins import GajimPlugin
|
||||
from plugins.helpers import log, log_calls
|
||||
from plugins.helpers import log_calls
|
||||
from common import gajim
|
||||
from common import ged
|
||||
import gtkgui_helpers
|
||||
@@ -21,7 +22,7 @@ class SetLocationPlugin(GajimPlugin):
|
||||
self.description = _('Set information about the current geographical '
|
||||
'or physical location.\n'
|
||||
'To be able to specify a location on the built-in card, '
|
||||
'you must install python-osmgpsmap > 0.5')
|
||||
'you must install gir1.2-gtkchamplain')
|
||||
self.config_dialog = SetLocationPluginConfigDialog(self)
|
||||
self.config_default_values = {
|
||||
'alt': (1609, ''),
|
||||
@@ -81,20 +82,20 @@ class SetLocationPluginConfigDialog(GajimPluginConfigDialog):
|
||||
def init(self):
|
||||
self.GTK_BUILDER_FILE_PATH = self.plugin.local_file_path(
|
||||
'config_dialog.ui')
|
||||
self.xml = gtk.Builder()
|
||||
self.xml = Gtk.Builder()
|
||||
self.xml.set_translation_domain('gajim_plugins')
|
||||
self.xml.add_objects_from_file(self.GTK_BUILDER_FILE_PATH,
|
||||
['hbox1'])
|
||||
hbox = self.xml.get_object('hbox1')
|
||||
self.child.pack_start(hbox)
|
||||
self.get_child().pack_start(hbox, True, True, 0)
|
||||
self.xml.connect_signals(self)
|
||||
self.connect('hide', self.on_hide)
|
||||
self.is_active = None
|
||||
|
||||
self.preset_combo = self.xml.get_object('preset_combobox')
|
||||
self.preset_liststore = gtk.ListStore(str)
|
||||
self.preset_liststore = Gtk.ListStore(str)
|
||||
self.preset_combo.set_model(self.preset_liststore)
|
||||
cellrenderer = gtk.CellRendererText()
|
||||
cellrenderer = Gtk.CellRendererText()
|
||||
self.preset_combo.pack_start(cellrenderer, True)
|
||||
self.preset_combo.add_attribute(cellrenderer, 'text', 0)
|
||||
#self.plugin.config['presets'] = {'default': {}}
|
||||
@@ -114,47 +115,62 @@ class SetLocationPluginConfigDialog(GajimPluginConfigDialog):
|
||||
widget.set_text(str(self.plugin.config[name]))
|
||||
|
||||
try:
|
||||
import osmgpsmap
|
||||
if osmgpsmap.__version__ < '0.6':
|
||||
no_map = True
|
||||
log.debug('python-osmgpsmap < 0.6 detected')
|
||||
from gi.repository import GtkClutter, Clutter
|
||||
GtkClutter.init([]) # Must be initialized before importing those:
|
||||
from gi.repository import Champlain, GtkChamplain
|
||||
except:
|
||||
no_map = True
|
||||
log.debug('python-osmgpsmap not detected')
|
||||
|
||||
log.debug('python-osmgpsmap > 0.5 detected')
|
||||
if not no_map and not self.is_active:
|
||||
from layers import DummyLayer
|
||||
#from layers import DummyLayer
|
||||
|
||||
vbox = self.xml.get_object('vbox1')
|
||||
vbox.set_size_request(400, -1)
|
||||
|
||||
self.osm = osmgpsmap.GpsMap()
|
||||
self.osm.layer_add(osmgpsmap.GpsMapOsd(show_dpad=True,
|
||||
show_zoom=True))
|
||||
self.osm.layer_add(DummyLayer())
|
||||
embed = GtkChamplain.Embed()
|
||||
|
||||
self.view = embed.get_view()
|
||||
self.view.set_reactive(True)
|
||||
self.view.set_property('kinetic-mode', True)
|
||||
self.view.set_property('zoom-level', 12)
|
||||
self.view.connect('button-release-event', self.map_clicked,
|
||||
self.view)
|
||||
|
||||
scale = Champlain.Scale()
|
||||
scale.connect_view(self.view)
|
||||
self.view.bin_layout_add(scale, Clutter.BinAlignment.START,
|
||||
Clutter.BinAlignment.END)
|
||||
|
||||
#license = self.view.get_license_actor()
|
||||
#license.set_extra_text("Don't eat cereals with orange juice\nIt tastes bad")
|
||||
|
||||
lat = self.plugin.config['lat']
|
||||
lon = self.plugin.config['lon']
|
||||
if not self.is_valid_coord(lat, lon):
|
||||
self.lat = self.lon = 0.0
|
||||
self.xml.get_object('lat').set_text('0.0')
|
||||
self.xml.get_object('lon').set_text('0.0')
|
||||
self.osm.set_center_and_zoom(self.lat, self.lon, 12)
|
||||
self.view.center_on(self.lat, self.lon)
|
||||
|
||||
self.path_to_image = os.path.abspath(gtkgui_helpers.get_icon_path(
|
||||
'gajim', 16))
|
||||
self.icon = gtk.gdk.pixbuf_new_from_file_at_size(
|
||||
self.path_to_image, 16, 16)
|
||||
self.osm.connect('button_release_event', self.map_clicked)
|
||||
vbox.pack_start(self.osm, expand=True, fill=True, padding=6)
|
||||
label = gtk.Label(_(
|
||||
vbox.pack_start(embed, expand=True, fill=True, padding=6)
|
||||
label = Gtk.Label(_(
|
||||
'Click the right mouse button to specify the location, \n'\
|
||||
'middle mouse button to show / hide the contacts on the map'))
|
||||
vbox.pack_start(label, expand=False, fill=False, padding=6)
|
||||
self.is_active = True
|
||||
self.images = []
|
||||
self.osm_image = self.osm.image_add(self.lat, self.lon, self.icon)
|
||||
self.layer = Champlain.MarkerLayer()
|
||||
self.marker = Champlain.Label.new_from_file(self.path_to_image)
|
||||
self.marker.set_text("I am")
|
||||
self.marker.set_location(self.lat, self.lon)
|
||||
self.view.add_layer(self.layer)
|
||||
self.layer.add_marker(self.marker)
|
||||
self.markers_is_visible = False
|
||||
self.xml.get_object('lat').connect('changed', self.on_lon_changed)
|
||||
self.xml.get_object('lon').connect('changed', self.on_lon_changed)
|
||||
self.layer.animate_in_all_markers()
|
||||
self.show_contacts()
|
||||
|
||||
def on_hide(self, widget):
|
||||
for name in self.plugin.config_default_values:
|
||||
@@ -175,21 +191,25 @@ class SetLocationPluginConfigDialog(GajimPluginConfigDialog):
|
||||
error_text = 'lat or lon field contains wrong value.'
|
||||
WarningDialog(_('Wrong coordinates'), error_text, self)
|
||||
|
||||
def map_clicked(self, osm, event):
|
||||
lat, lon = self.osm.get_event_location(event).get_degrees()
|
||||
def map_clicked(self, actor, event, view):
|
||||
x, y = event.x, event.y
|
||||
lat, lon = view.x_to_longitude(x), view.y_to_latitude(y)
|
||||
if event.button == 3:
|
||||
self.osm.image_remove(self.osm_image)
|
||||
self.osm_image = self.osm.image_add(lat, lon, self.icon)
|
||||
self.xml.get_object('lat').set_text(str(lat))
|
||||
self.xml.get_object('lon').set_text(str(lon))
|
||||
self.marker.set_location(lat, lon)
|
||||
self.xml.get_object('lon').set_text(str(lat))
|
||||
self.xml.get_object('lat').set_text(str(lon))
|
||||
if event.button == 2:
|
||||
self.show_contacts()
|
||||
if self.markers_is_visible:
|
||||
self.contacts_layer.animate_out_all_markers()
|
||||
else:
|
||||
self.contacts_layer.animate_in_all_markers()
|
||||
self.markers_is_visible = not self.markers_is_visible
|
||||
|
||||
def is_valid_coord(self, lat, lon):
|
||||
try:
|
||||
self.lat = float(lat)
|
||||
self.lon = float(lon)
|
||||
except ValueError, e:
|
||||
except ValueError as e:
|
||||
return
|
||||
if not -85 < self.lat < 85 or not -180 < self.lon < 180:
|
||||
return
|
||||
@@ -199,12 +219,12 @@ class SetLocationPluginConfigDialog(GajimPluginConfigDialog):
|
||||
lat = self.xml.get_object('lat').get_text()
|
||||
lon = self.xml.get_object('lon').get_text()
|
||||
if self.is_valid_coord(lat, lon):
|
||||
self.osm.image_remove(self.osm_image)
|
||||
self.osm_image = self.osm.image_add(self.lat, self.lon, self.icon)
|
||||
self.osm.set_center(self.lat, self.lon)
|
||||
#self.view.center_on(self.lat, self.lon)
|
||||
self.marker.set_location(self.lat, self.lon)
|
||||
|
||||
def show_contacts(self):
|
||||
if not self.images:
|
||||
from gi.repository import Champlain
|
||||
if not self.markers_is_visible:
|
||||
data = {}
|
||||
accounts = gajim.contacts._accounts
|
||||
for account in accounts:
|
||||
@@ -218,18 +238,44 @@ class SetLocationPluginConfigDialog(GajimPluginConfigDialog):
|
||||
lon = pep['location']._pep_specific_data.get('lon', None)
|
||||
if not lat or not lon:
|
||||
continue
|
||||
data[contact] = (lat, lon)
|
||||
name = accounts[account].contacts.get_first_contact_from_jid(
|
||||
contact).name
|
||||
data[contact] = (lat, lon, name)
|
||||
for jid in data:
|
||||
path = gtkgui_helpers.get_path_to_generic_or_avatar(None,
|
||||
path = self.get_path_to_generic_or_avatar(None,
|
||||
jid=jid, suffix='')
|
||||
icon = gtk.gdk.pixbuf_new_from_file_at_size(path, 24, 24)
|
||||
image = self.osm.image_add(float(data[jid][0]),
|
||||
float(data[jid][1]), icon)
|
||||
self.images.append(image)
|
||||
else:
|
||||
for image in self.images:
|
||||
self.osm.image_remove(image)
|
||||
self.images = []
|
||||
marker = Champlain.Label.new_from_file(path)
|
||||
marker.set_text(data[jid][2])
|
||||
self.contacts_layer = Champlain.MarkerLayer()
|
||||
|
||||
marker.set_location(float(data[jid][0]), float(data[jid][1]))
|
||||
self.view.add_layer(self.contacts_layer)
|
||||
self.contacts_layer.add_marker(marker)
|
||||
self.contacts_layer.animate_in_all_markers()
|
||||
self.markers_is_visible = True
|
||||
|
||||
def get_path_to_generic_or_avatar(self, generic, jid=None, suffix=None):
|
||||
"""
|
||||
Choose between avatar image and default image
|
||||
|
||||
Returns full path to the avatar image if it exists, otherwise returns full
|
||||
path to the image. generic must be with extension and suffix without
|
||||
"""
|
||||
if jid:
|
||||
from common import helpers
|
||||
# we want an avatar
|
||||
puny_jid = helpers.sanitize_filename(jid)
|
||||
path_to_file = os.path.join(gajim.AVATAR_PATH, puny_jid) + suffix
|
||||
path_to_local_file = path_to_file + '_local'
|
||||
for extension in ('.png', '.jpeg'):
|
||||
path_to_local_file_full = path_to_local_file + extension
|
||||
if os.path.exists(path_to_local_file_full):
|
||||
return path_to_local_file_full
|
||||
for extension in ('.png', '.jpeg'):
|
||||
path_to_file_full = path_to_file + extension
|
||||
if os.path.exists(path_to_file_full):
|
||||
return path_to_file_full
|
||||
return os.path.abspath(generic)
|
||||
|
||||
def on_preset_button_clicked(self, widget):
|
||||
def on_ok(preset_name):
|
||||
@@ -242,9 +288,9 @@ class SetLocationPluginConfigDialog(GajimPluginConfigDialog):
|
||||
widget = self.xml.get_object(name)
|
||||
preset[name] = widget.get_text()
|
||||
preset = {preset_name: preset}
|
||||
presets = dict(self.plugin.config['presets'].items() + \
|
||||
preset.items())
|
||||
if preset_name not in self.plugin.config['presets'].keys():
|
||||
presets = dict(list(self.plugin.config['presets'].items()) + \
|
||||
list(preset.items()))
|
||||
if preset_name not in list(self.plugin.config['presets'].keys()):
|
||||
iter_ = self.preset_liststore.append((preset_name,))
|
||||
self.plugin.config['presets'] = presets
|
||||
self.set_modal(False)
|
||||
@@ -257,8 +303,8 @@ class SetLocationPluginConfigDialog(GajimPluginConfigDialog):
|
||||
if active < 0:
|
||||
self.xml.get_object('del_preset').set_sensitive(False)
|
||||
return
|
||||
pres_name = model[active][0].decode('utf-8')
|
||||
for name in self.plugin.config['presets'][pres_name].keys():
|
||||
pres_name = model[active][0]
|
||||
for name in list(self.plugin.config['presets'][pres_name].keys()):
|
||||
widget = self.xml.get_object(name)
|
||||
widget.set_text(str(self.plugin.config['presets'][pres_name][name]))
|
||||
|
||||
@@ -267,7 +313,7 @@ class SetLocationPluginConfigDialog(GajimPluginConfigDialog):
|
||||
def on_del_preset_clicked(self, widget):
|
||||
active = self.preset_combo.get_active()
|
||||
active_iter = self.preset_combo.get_active_iter()
|
||||
name = self.preset_liststore[active][0].decode('utf-8')
|
||||
name = self.preset_liststore[active][0]
|
||||
presets = self.plugin.config['presets']
|
||||
del presets[name]
|
||||
self.plugin.config['presets'] = presets
|
||||
|
||||
Reference in New Issue
Block a user