Example #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')
Example #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
Example #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))
Example #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))
Example #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')
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')
Example #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)
Example #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()
Example #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()
Example #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()
Example #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)
Example #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)
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)
Example #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)
Example #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)]
Example #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)]
Example #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()
Example #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()
Example #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
Example #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])
Example #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)
Example #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)
Example #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)
Example #28
0
 def __init__(self):
     Champlain.PathLayer.__init__(self)
     self.set_stroke_width(4)
     MapView.add_layer(self)
Example #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])
Example #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
Example #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)
Example #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)
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)
Example #34
0
 def __init__(self):
     Champlain.PathLayer.__init__(self)
     self.set_stroke_width(4)
     MapView.add_layer(self)