~thomas-deruyter-3/qreator/qreator

« back to all changes in this revision

Viewing changes to qreator/QreatorWindow.py

  • Committer: David Planella
  • Date: 2012-01-23 07:59:13 UTC
  • Revision ID: david.planella@ubuntu.com-20120123075913-nb6fscmlc8j3d2t1
Added support to display maps with libchamplain. python-osmgpsmap, as an alternative without Clutter, does not seem to work because it's not introspectable -gtk3 branch is still WIP. Commented out GSettings code, at it seems to crash Winpdb (settings schema not found)

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
from gettext import gettext as _
8
8
gettext.textdomain('qreator')
9
9
 
10
 
import gi
11
 
gi.require_version('Gdk', '3.0')
12
 
gi.require_version('Gtk', '3.0')
13
10
from gi.repository import Gtk, Gdk # pylint: disable=E0611
 
11
from gi.repository import GtkChamplain, Clutter, Champlain
14
12
import logging
15
13
logger = logging.getLogger('qreator')
16
14
 
19
17
from qreator.PreferencesQreatorDialog import PreferencesQreatorDialog
20
18
 
21
19
#import osmgpsmap
 
20
import Geoclue
 
21
 
22
22
from QRCode import QRCode as QRCode
23
23
 
24
24
COL_TEXT = 0
32
32
PAGE_URL = 4
33
33
PAGE_GEO = 5
34
34
 
 
35
POS_PROVIDER = 'Ubuntu GeoIP'
 
36
 
35
37
 
36
38
class BarcodeSize(object):
37
39
    SMALL = 120
59
61
        self.ui.iconview1.set_pixbuf_column(COL_PIXBUF)
60
62
 
61
63
        self.ui.notebook1.set_show_tabs(False)
62
 
        self.ui.entry1.connect('changed', self.on_entry1_changed)
63
 
        
 
64
 
64
65
        # Map loading
65
 
        box = self.ui.box2
66
66
        #self.osm = osmgpsmap.GpsMap()
67
 
        #self.osm.layer_add(osmgpsmap.GpsMapOsd(show_dpad=True, show_zoom=True))
 
67
        #self.osm.layer_add(osmgpsmap.GpsMapOsd(show_dpad=True,
 
68
        #                                       show_zoom=True))
68
69
        #box.pack_start(self.osm)
69
70
 
 
71
        #GObject.threads_init()
 
72
        ##GtkClutter.init([])
 
73
        map_widget = GtkChamplain.Embed()
 
74
        #map_widget.set_size_request(100, 100)
 
75
        #map_widget.connect('scroll-event', self.on_map_widget_scroll_event)
 
76
        #map_widget.connect('button-press-event',
 
77
        #                   self.on_map_widget_button_press_event)
 
78
        self.ui.box2.pack_start(map_widget, True, True, 0)
 
79
 
 
80
        self.map_view = map_widget.get_view()
 
81
        self.map_view.set_reactive(True)
 
82
        map_widget.connect('button-release-event',
 
83
                            self.on_map_widget_button_press_event,
 
84
                            self.map_view)
 
85
        latitude, longitude = get_current_location()
 
86
        self.map_view.center_on(latitude, longitude)
 
87
        self.map_view.set_zoom_level(5)
 
88
        self.map_view.set_kinetic_mode(True)
 
89
 
 
90
        scale = Champlain.Scale()
 
91
        scale.connect_view(self.map_view)
 
92
        self.map_view.bin_layout_add(scale, Clutter.BinAlignment.START,
 
93
            Clutter.BinAlignment.END)
 
94
 
 
95
        self.qr_code_placeholder = None
 
96
 
 
97
        self.ui.box2.show_all()
 
98
 
 
99
    #def on_map_widget_scroll_event(self, widget, event, data=None):
 
100
    #    view = widget.get_view()
 
101
    #    if event.direction == Gdk.ScrollDirection.UP:
 
102
    #        view.zoom_in()
 
103
    #    else:
 
104
    #        view.zoom_out()
 
105
 
 
106
    #def on_map_widget_button_press_event(self, widget, event, data=None):
 
107
    #    view = widget.get_view()
 
108
    #    longitude = view.x_to_longitude(event.x)
 
109
    #    latitude = view.y_to_latitude(event.y)
 
110
    #    view.center_on(latitude, longitude)
 
111
 
 
112
    def on_map_widget_button_press_event(self, actor, event, view):
 
113
        x, y = event.get_coords()
 
114
        lat, lon = view.x_to_longitude(x), view.y_to_latitude(y)
 
115
        print "Mouse click at: %f %f" % (lon, lat)
 
116
        return True
 
117
 
70
118
    def on_toolbuttonHome_clicked(self, widget, data=None):
71
119
        self.ui.notebook1.set_current_page(PAGE_HOME)
72
120
 
80
128
        self.ui.notebook1.set_current_page(PAGE_ABOUT)
81
129
 
82
130
    def on_iconview1_item_activated(self, widget, item):
83
 
        self.ui.notebook1.set_current_page(PAGE_GEO)
84
 
        #model = widget.get_model()
85
 
        #id = model[item][COL_ID]
 
131
 
 
132
        model = widget.get_model()
 
133
        qr_type = model[item][COL_ID]
 
134
 
 
135
        box = self.ui.box1
 
136
 
 
137
        if qr_type + PAGE_URL == PAGE_URL:
 
138
            entry1 = Gtk.Entry()
 
139
            #entry1.set_name('entry1')
 
140
            entry1.connect('changed', self.on_entry1_changed)
 
141
            box.pack_start(entry1, True, True, 0)
 
142
            box.show_all()
 
143
        elif qr_type + PAGE_URL == PAGE_GEO:
 
144
            pass
 
145
 
 
146
        self.ui.notebook1.set_current_page(qr_type + PAGE_URL)
86
147
 
87
148
    def get_pixbuf_from_drawing_area(self):
88
149
        window = self.ui.drawingarea1.get_window()
133
194
        self.clipboard.set_image(pixbuf)
134
195
 
135
196
    def on_entry1_changed(self, widget, data=None):
 
197
        self.qr_code_placeholder = widget.get_text()
136
198
        self.ui.drawingarea1.queue_draw()
137
199
 
138
200
    def get_centered_coordinates(self, drawing_area, surface):
146
208
                drawing_area_height / 2 - image_height / 2)
147
209
 
148
210
    def on_drawingarea1_draw(self, widget, ctx, data=None):
149
 
        text = self.ui.entry1.get_text()
 
211
        #text = self.ui.entry1.get_text()
 
212
        text = self.qr_code_placeholder
150
213
        if text == '':
151
214
            return
152
215
 
164
227
 
165
228
        # Render the image
166
229
        ctx.paint()
 
230
 
 
231
 
 
232
def get_current_location():
 
233
    location = Geoclue.DiscoverLocation()
 
234
    location.init()
 
235
    location.set_position_provider(POS_PROVIDER)
 
236
    position = location.get_location_info()
 
237
    return position['latitude'], position['longitude']