Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim-plugins.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Fomin <fominde@gmail.com>2013-02-05 18:26:17 +0400
committerDenis Fomin <fominde@gmail.com>2013-02-05 18:26:17 +0400
commit5f8cd57c2736102da63c0f2de9c15f237475af0e (patch)
treed4b7570a04e6823c045e62f624f609cd3bec5007
parentd2894a35853b8ffd87ad483c8b0afadfc2a7233e (diff)
update SetLocationPlugin to py3,use libchamplain instead of python-osmgpsmap
-rw-r--r--set_location/__init__.py2
-rw-r--r--set_location/config_dialog.ui92
-rw-r--r--set_location/manifest.ini4
-rw-r--r--set_location/set_location.py156
4 files changed, 171 insertions, 83 deletions
diff --git a/set_location/__init__.py b/set_location/__init__.py
index 2e080ea..b8147cc 100644
--- a/set_location/__init__.py
+++ b/set_location/__init__.py
@@ -1 +1 @@
-from set_location import SetLocationPlugin
+from .set_location import SetLocationPlugin
diff --git a/set_location/config_dialog.ui b/set_location/config_dialog.ui
index 6527ee9..386b5a0 100644
--- a/set_location/config_dialog.ui
+++ b/set_location/config_dialog.ui
@@ -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">&#x25CF;</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">&#x25CF;</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">&#x25CF;</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">&#x25CF;</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">&#x25CF;</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">&#x25CF;</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">&#x25CF;</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">&#x25CF;</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">&#x25CF;</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">&#x25CF;</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">&#x25CF;</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">&#x25CF;</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">&#x25CF;</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">&#x25CF;</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">&#x25CF;</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">&#x25CF;</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>
diff --git a/set_location/manifest.ini b/set_location/manifest.ini
index 4d43a6a..06806cc 100644
--- a/set_location/manifest.ini
+++ b/set_location/manifest.ini
@@ -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
diff --git a/set_location/set_location.py b/set_location/set_location.py
index 1111cb9..cce36ab 100644
--- a/set_location/set_location.py
+++ b/set_location/set_location.py
@@ -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