Пример #1
0
    def photo_drag_end(self, widget, drag_context, x, y, data, info, time,
                       on_map):
        """Respond to drops and position photos accordingly.

        This method allows photos to be dropped in from the photo
        pane or any other drag source, such as the file browser.
        """
        if not data.get_text():
            return

        lat, lon = MapView.y_to_latitude(y), MapView.x_to_longitude(x)

        files = [
            unquote(urlparse(s).path.strip())
            for s in data.get_text().split('\n') if s
        ]

        if self.external_drag:
            self.open_files(files)
        self.external_drag = True

        if on_map:
            for filename in files:
                photo = Photograph.cache.get(filename)
                if photo is not None:
                    photo.manual = True
                    photo.set_location(lat, lon)

        self.selection.emit('changed')
Пример #2
0
    def photo_drag_end(self, widget, drag_context, x, y,
                       data, info, time, on_map):
        """Respond to drops and position photos accordingly.

        This method allows photos to be dropped in from the photo
        pane or any other drag source, such as the file browser.
        """
        if not data.get_text():
            return

        lat, lon = MapView.y_to_latitude(y), MapView.x_to_longitude(x)

        files = [unquote(urlparse(s).path.strip()) for s in
                 data.get_text().split('\n') if s]

        if self.external_drag:
            self.open_files(files)
        self.external_drag = True

        if on_map:
            for filename in files:
                photo = Photograph.cache.get(filename)
                if photo is not None:
                    photo.manual = True
                    photo.set_location(lat, lon)

        self.selection.emit('changed')
def test_search():
    """Make sure the search box functions"""
    entry = Widgets.search_box
    
    assert len(gui.search.results) == 0
    
    entry.set_text('jo')
    assert len(gui.search.results) == 0
    
    entry.set_text('edm')
    assert len(gui.search.results) == 24
    
    get_title = Widgets.main.get_title
    for result in gui.search.results:
        gui.search.search_completed(entry,
                                    gui.search.results,
                                    result.iter)
        loc, lat, lon = result
        assert lat == MapView.get_property('latitude')
        assert lon == MapView.get_property('longitude')
    
    entry.set_text('calg')
    assert len(gui.search.results) == 656
    
    entry.set_text('st.')
    assert len(gui.search.results) == 675
Пример #4
0
 def __init__(self):
     Clutter.Box.__init__(self)
     self.set_layout_manager(Clutter.BinLayout())
     self.set_color(Clutter.Color.new(0, 0, 0, 96))
     Gst.bind('show-map-coords', self, 'visible')
     MapView.bin_layout_add(self, START, START)
     self.get_layout_manager().add(CoordLabel, CENTER, CENTER)
     MapView.connect('notify::width',
                     lambda *ignore: self.set_size(MapView.get_width(), 30))
Пример #5
0
 def __init__(self):
     Clutter.Box.__init__(self)
     self.set_layout_manager(Clutter.BinLayout())
     self.set_color(Clutter.Color.new(0, 0, 0, 96))
     Gst.bind('show-map-coords', self, 'visible')
     MapView.bin_layout_add(self, START, START)
     self.get_layout_manager().add(CoordLabel, CENTER, CENTER)
     MapView.connect('notify::width',
         lambda *ignore: self.set_size(MapView.get_width(), 30))
Пример #6
0
def go_back(*ignore):
    """Return the map view to where the user last set it."""
    history = list(Gst.get('history'))
    lat, lon, zoom = history.pop()
    if valid_coords(lat, lon):
        MapView.set_zoom_level(zoom)
        MapView.center_on(lat, lon)
    if len(history) > 1:
        Gst.set_history(history)
    else:
        Gst.reset('history')
Пример #7
0
def go_back(*ignore):
    """Return the map view to where the user last set it."""
    history = list(Gst.get('history'))
    lat, lon, zoom = history.pop()
    if valid_coords(lat, lon):
        MapView.set_zoom_level(zoom)
        MapView.center_on(lat, lon)
    if len(history) > 1:
        Gst.set_history(history)
    else:
        Gst.reset('history')
Пример #8
0
 def search_completed(self, entry, model, itr):
     """Go to the selected location."""
     self.last_search = itr.copy()
     MapView.emit('realize')
     MapView.set_zoom_level(MapView.get_max_zoom_level())
     Widgets.redraw_interface()
     MapView.center_on(*model.get(itr, LATITUDE, LONGITUDE))
     MapView.set_zoom_level(11)
Пример #9
0
 def destroy(self, button=None):
     """Die a horrible death."""
     for polygon in self.polygons:
         MapView.remove_layer(polygon)
     self.polygons.clear()
     self.widgets.trackfile_settings.destroy()
     del self.cache[self.filename]
     TrackFile.instances.discard(self)
     points.clear()
     for trackfile in TrackFile.instances:
         points.update(trackfile.tracks)
     TrackFile.update_range()
Пример #10
0
 def destroy(self, button=None):
     """Die a horrible death."""
     for polygon in self.polygons:
         MapView.remove_layer(polygon)
     self.polygons.clear()
     self.widgets.trackfile_settings.destroy()
     del self.cache[self.filename]
     TrackFile.instances.discard(self)
     points.clear()
     for trackfile in TrackFile.instances:
         points.update(trackfile.tracks)
     TrackFile.update_range()
Пример #11
0
def test_map_sources():
    """The map should have multiple sources"""
    MapView.set_map_source(MAP_SOURCES['osm-cyclemap'])
    assert Gst.get_string('map-source-id') == 'osm-cyclemap'

    Gst.set_string('map-source-id', 'mff-relief')
    assert MapView.get_map_source().get_id() == 'mff-relief'

    menu = Widgets.map_source_menu.get_active().get_group()
    assert menu
    for menu_item in menu:
        menu_item.set_active(True)
        assert MapView.get_map_source().get_name() == menu_item.get_label()
Пример #12
0
    def load_from_file(uri):
        """Determine the correct subclass to instantiate.

        Also time everything and report how long it took. Raises OSError if
        the file extension is unknown, or no track points were found.
        """
        start_time = clock()

        try:
            gpx = globals()[uri[-3:].upper() + 'File'](uri)
        except KeyError:
            raise OSError

        Widgets.status_message(_('%d points loaded in %.2fs.') %
            (len(gpx.tracks), clock() - start_time), True)

        if len(gpx.tracks) < 2:
            return

        TrackFile.instances.add(gpx)
        MapView.emit('realize')
        MapView.set_zoom_level(MapView.get_max_zoom_level())
        MapView.ensure_visible(TrackFile.get_bounding_box(), False)

        TrackFile.update_range()
        Camera.set_all_found_timezone(gpx.start.geotimezone)
Пример #13
0
    def load_from_file(uri):
        """Determine the correct subclass to instantiate.

        Also time everything and report how long it took. Raises OSError if
        the file extension is unknown, or no track points were found.
        """
        start_time = clock()

        try:
            gpx = globals()[uri[-3:].upper() + 'File'](uri)
        except KeyError:
            raise OSError

        Widgets.status_message(
            _('%d points loaded in %.2fs.') %
            (len(gpx.tracks), clock() - start_time), True)

        if len(gpx.tracks) < 2:
            return

        TrackFile.instances.add(gpx)
        MapView.emit('realize')
        MapView.set_zoom_level(MapView.get_max_zoom_level())
        MapView.ensure_visible(TrackFile.get_bounding_box(), False)

        TrackFile.update_range()
        Camera.set_all_found_timezone(gpx.start.geotimezone)
Пример #14
0
def move_by_arrow_keys(accel_group, acceleratable, keyval, modifier):
    """Move the map view by 5% of its length in the given direction."""
    key = Gdk.keyval_name(keyval)
    factor = 0.45 if key in ('Up', 'Left') else 0.55
    if key in ('Up', 'Down'):
        lat = MapView.y_to_latitude(MapView.get_height() * factor)
        lon = MapView.get_center_longitude()
    else:
        lat = MapView.get_center_latitude()
        lon = MapView.x_to_longitude(MapView.get_width() * factor)
    if valid_coords(lat, lon):
        MapView.center_on(lat, lon)
Пример #15
0
def move_by_arrow_keys(accel_group, acceleratable, keyval, modifier):
    """Move the map view by 5% of its length in the given direction."""
    key = Gdk.keyval_name(keyval)
    factor = 0.45 if key in ('Up', 'Left') else 0.55
    if key in ('Up', 'Down'):
        lat = MapView.y_to_latitude(MapView.get_height() * factor)
        lon = MapView.get_center_longitude()
    else:
        lat = MapView.get_center_latitude()
        lon = MapView.x_to_longitude(MapView.get_width() * factor)
    if valid_coords(lat, lon):
        MapView.center_on(lat, lon)
Пример #16
0
def test_gsettings():
    """GSettings should be storing data correctly"""
    Gst.reset("history")
    assert Gst.get("history")[0] == (34.5, 15.8, 2)

    MapView.set_zoom_level(2)
    MapView.center_on(12.3, 45.6)
    assert Gst.get_double("latitude") == 12.3
    assert Gst.get_double("longitude") == 45.6

    MapView.zoom_in()
    MapView.emit("realize")
    assert list(Gst.get("history")) == [(34.5, 15.8, 2), (12.3, 45.6, 3)]
Пример #17
0
def test_gsettings():
    """GSettings should be storing data correctly"""
    Gst.reset('history')
    assert Gst.get('history')[0] == (34.5, 15.8, 2)

    MapView.set_zoom_level(2)
    MapView.center_on(12.3, 45.6)
    assert Gst.get_double('latitude') == 12.3
    assert Gst.get_double('longitude') == 45.6

    MapView.zoom_in()
    MapView.emit('realize')
    assert list(Gst.get('history')) == [(34.5, 15.8, 2), (12.3, 45.6, 3)]
Пример #18
0
def test_search():
    """Make sure the search box functions"""
    entry = Widgets.search_box

    assert len(gui.search.results) == 0

    entry.set_text('jo')
    assert len(gui.search.results) == 0

    entry.set_text('edm')
    assert len(gui.search.results) == 24

    for result in gui.search.results:
        gui.search.search_completed(entry, gui.search.results, result.iter)
        loc, lat, lon = result
        assert lat == MapView.get_property('latitude')
        assert lon == MapView.get_property('longitude')

    entry.set_text('calg')
    assert len(gui.search.results) == 668

    entry.set_text('st.')
    assert len(gui.search.results) == 687
def test_zoom_buttons():
    """Zoom buttons function correctly"""
    lat = random_coord(80)
    lon = random_coord(170)
    MapView.center_on(lat, lon)

    zoom_in  = Widgets.zoom_in_button
    zoom_out = Widgets.zoom_out_button
    MapView.set_zoom_level(0)
    assert not zoom_out.get_sensitive()
    assert zoom_in.get_sensitive()

    zoom_in.emit('clicked')
    assert zoom_out.get_sensitive()
    assert zoom_in.get_sensitive()

    MapView.set_zoom_level(MapView.get_max_zoom_level() - 1)
    assert zoom_out.get_sensitive()
    assert zoom_in.get_sensitive()

    zoom_in.emit('clicked')
    assert zoom_out.get_sensitive()
    assert not zoom_in.get_sensitive()
    assert MapView.get_max_zoom_level() == MapView.get_zoom_level()
Пример #20
0
def test_zoom_buttons():
    """Zoom buttons function correctly"""
    lat = random_coord(80)
    lon = random_coord(170)
    MapView.center_on(lat, lon)

    zoom_in = Widgets.zoom_in_button
    zoom_out = Widgets.zoom_out_button
    MapView.set_zoom_level(0)
    assert not zoom_out.get_sensitive()
    assert zoom_in.get_sensitive()

    zoom_in.emit('clicked')
    assert zoom_out.get_sensitive()
    assert zoom_in.get_sensitive()

    MapView.set_zoom_level(MapView.get_max_zoom_level() - 1)
    assert zoom_out.get_sensitive()
    assert zoom_in.get_sensitive()

    zoom_in.emit('clicked')
    assert zoom_out.get_sensitive()
    assert not zoom_in.get_sensitive()
    assert MapView.get_max_zoom_level() == MapView.get_zoom_level()
Пример #21
0
def test_history():
    """The history should keep track of where we go"""
    coords = [[MapView.get_center_latitude(), MapView.get_center_longitude()]]
    MapView.emit('realize')
    assert len(Widgets.main.get_title()) > 5
    assert Widgets.main.get_title().index(',') > 0

    lat = random_coord(90)
    lon = random_coord(180)
    MapView.center_on(lat, lon)
    coords.append([lat, lon])

    assert coords[0][0] - Gst.get('history')[-1][0] < 1e-6
    assert coords[0][1] - Gst.get('history')[-1][1] < 1e-6
def test_history():
    """The history should keep track of where we go"""
    coords = [[
        MapView.get_center_latitude(),
        MapView.get_center_longitude()
    ]]
    MapView.emit('realize')
    assert len(Widgets.main.get_title()) > 5
    assert Widgets.main.get_title().index(',') > 0

    lat = random_coord(90)
    lon = random_coord(180)
    MapView.center_on(lat, lon)
    coords.append([lat, lon])

    assert coords[0][0] - Gst.get('history')[-1][0] < 1e-6
    assert coords[0][1] - Gst.get('history')[-1][1] < 1e-6
def test_arrow_keys():
    """The user can navigate by arrow keys"""
    Widgets.back_button.emit('clicked')

    MapView.set_zoom_level(10)

    lat = MapView.get_center_latitude()
    lon = MapView.get_center_longitude()

    move_by_arrow_keys(None, None, Gdk.keyval_from_name('Left'), None)
    assert lat - MapView.get_center_latitude() < 1e-6
    assert lon > MapView.get_center_longitude()

    move_by_arrow_keys(None, None, Gdk.keyval_from_name('Right'), None)
    assert lat - MapView.get_center_latitude() < 1e-6
    assert lon - MapView.get_center_longitude() < 1e-2

    move_by_arrow_keys(None, None, Gdk.keyval_from_name('Right'), None)
    assert lon < MapView.get_center_longitude()
    assert lat - MapView.get_center_latitude() < 1e-6

    move_by_arrow_keys(None, None, Gdk.keyval_from_name('Left'), None)
    assert lon - MapView.get_center_longitude() < 1e-2
    assert lat - MapView.get_center_latitude() < 1e-6

    lon = MapView.get_center_longitude()

    move_by_arrow_keys(None, None, Gdk.keyval_from_name('Up'), None)
    assert lon - MapView.get_center_longitude() < 1e-6
    assert lat < MapView.get_center_latitude()

    move_by_arrow_keys(None, None, Gdk.keyval_from_name('Down'), None)
    assert lon - MapView.get_center_longitude() < 1e-6
    assert lat - MapView.get_center_latitude() < 1e-6

    move_by_arrow_keys(None, None, Gdk.keyval_from_name('Down'), None)
    assert lon - MapView.get_center_longitude() < 1e-6
    assert lat > MapView.get_center_latitude()

    move_by_arrow_keys(None, None, Gdk.keyval_from_name('Up'), None)
    assert lon - MapView.get_center_longitude() < 1e-6
    assert lat - MapView.get_center_latitude() < 1e-6
Пример #24
0
 def menu_item_clicked(self, item, map_id):
     """Switch to the clicked map source."""
     if self.get_active():
         MapView.set_map_source(MAP_SOURCES[map_id])
Пример #25
0
 def __init__(self):
     Champlain.Point.__init__(self)
     self.set_size(4)
     self.set_color(Clutter.Color.new(0, 0, 0, 64))
     Gst.bind('show-map-center', self, 'visible')
     MapView.bin_layout_add(self, CENTER, CENTER)
Пример #26
0
 def __init__(self):
     Champlain.Scale.__init__(self)
     self.connect_view(MapView)
     Gst.bind('show-map-scale', self, 'visible')
     MapView.bin_layout_add(self, START, END)
Пример #27
0
    Gst.set_history(history[-30:])


def go_back(*ignore):
    """Return the map view to where the user last set it."""
    history = list(Gst.get('history'))
    lat, lon, zoom = history.pop()
    if valid_coords(lat, lon):
        MapView.set_zoom_level(zoom)
        MapView.center_on(lat, lon)
    if len(history) > 1:
        Gst.set_history(history)
    else:
        Gst.reset('history')


def zoom_button_sensitivity(view, signal, inn_sensitive, out_sensitive):
    """Ensure zoom buttons are only sensitive when they need to be."""
    zoom = view.get_zoom_level()
    out_sensitive(view.get_min_zoom_level() != zoom)
    inn_sensitive(view.get_max_zoom_level() != zoom)


for prop in ('latitude', 'longitude', 'zoom-level'):
    Gst.bind(prop, MapView, prop)

MapView.connect('notify::zoom-level', zoom_button_sensitivity,
                Widgets.zoom_in_button.set_sensitive,
                Widgets.zoom_out_button.set_sensitive)
MapView.connect('realize', remember_location)
Пример #28
0
 def __init__(self):
     Champlain.PathLayer.__init__(self)
     self.set_stroke_width(4)
     MapView.add_layer(self)
Пример #29
0
 def menu_item_clicked(self, item, map_id):
     """Switch to the clicked map source."""
     if self.get_active():
         MapView.set_map_source(MAP_SOURCES[map_id])
Пример #30
0
def test_arrow_keys():
    """The user can navigate by arrow keys"""
    Widgets.back_button.emit('clicked')

    MapView.set_zoom_level(10)

    lat = MapView.get_center_latitude()
    lon = MapView.get_center_longitude()

    move_by_arrow_keys(None, None, Gdk.keyval_from_name('Left'), None)
    assert lat - MapView.get_center_latitude() < 1e-6
    assert lon > MapView.get_center_longitude()

    move_by_arrow_keys(None, None, Gdk.keyval_from_name('Right'), None)
    assert lat - MapView.get_center_latitude() < 1e-6
    assert lon - MapView.get_center_longitude() < 1e-2

    move_by_arrow_keys(None, None, Gdk.keyval_from_name('Right'), None)
    assert lon < MapView.get_center_longitude()
    assert lat - MapView.get_center_latitude() < 1e-6

    move_by_arrow_keys(None, None, Gdk.keyval_from_name('Left'), None)
    assert lon - MapView.get_center_longitude() < 1e-2
    assert lat - MapView.get_center_latitude() < 1e-6

    lon = MapView.get_center_longitude()

    move_by_arrow_keys(None, None, Gdk.keyval_from_name('Up'), None)
    assert lon - MapView.get_center_longitude() < 1e-6
    assert lat < MapView.get_center_latitude()

    move_by_arrow_keys(None, None, Gdk.keyval_from_name('Down'), None)
    assert lon - MapView.get_center_longitude() < 1e-6
    assert lat - MapView.get_center_latitude() < 1e-6

    move_by_arrow_keys(None, None, Gdk.keyval_from_name('Down'), None)
    assert lon - MapView.get_center_longitude() < 1e-6
    assert lat > MapView.get_center_latitude()

    move_by_arrow_keys(None, None, Gdk.keyval_from_name('Up'), None)
    assert lon - MapView.get_center_longitude() < 1e-6
    assert lat - MapView.get_center_latitude() < 1e-6
Пример #31
0
 def __init__(self):
     Champlain.Point.__init__(self)
     self.set_size(4)
     self.set_color(Clutter.Color.new(0, 0, 0, 64))
     Gst.bind('show-map-center', self, 'visible')
     MapView.bin_layout_add(self, CENTER, CENTER)
Пример #32
0
 def __init__(self):
     Champlain.Scale.__init__(self)
     self.connect_view(MapView)
     Gst.bind('show-map-scale', self, 'visible')
     MapView.bin_layout_add(self, START, END)
Пример #33
0
def go_back(*ignore):
    """Return the map view to where the user last set it."""
    history = list(Gst.get('history'))
    lat, lon, zoom = history.pop()
    if valid_coords(lat, lon):
        MapView.set_zoom_level(zoom)
        MapView.center_on(lat, lon)
    if len(history) > 1:
        Gst.set_history(history)
    else:
        Gst.reset('history')


def zoom_button_sensitivity(view, signal, inn_sensitive, out_sensitive):
    """Ensure zoom buttons are only sensitive when they need to be."""
    zoom = view.get_zoom_level()
    out_sensitive(view.get_min_zoom_level() != zoom)
    inn_sensitive(view.get_max_zoom_level() != zoom)


for prop in ('latitude', 'longitude', 'zoom-level'):
    Gst.bind(prop, MapView, prop)


MapView.connect(
    'notify::zoom-level',
    zoom_button_sensitivity,
    Widgets.zoom_in_button.set_sensitive,
    Widgets.zoom_out_button.set_sensitive)
MapView.connect('realize', remember_location)
Пример #34
0
 def __init__(self):
     Champlain.PathLayer.__init__(self)
     self.set_stroke_width(4)
     MapView.add_layer(self)