コード例 #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
ファイル: drag.py プロジェクト: akadig/gottengeography
    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')
コード例 #3
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
    
    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
ファイル: actor.py プロジェクト: TheNeuralBit/gottengeography
 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
ファイル: search.py プロジェクト: telkel/gottengeography
 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
ファイル: xmlfiles.py プロジェクト: akadig/gottengeography
 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
ファイル: xmlfiles.py プロジェクト: akadig/gottengeography
    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
コード例 #19
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()
コード例 #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
コード例 #22
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
コード例 #23
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
コード例 #24
0
ファイル: actor.py プロジェクト: TheNeuralBit/gottengeography
 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
ファイル: actor.py プロジェクト: TheNeuralBit/gottengeography
 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
ファイル: actor.py プロジェクト: TheNeuralBit/gottengeography
 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
ファイル: xmlfiles.py プロジェクト: akadig/gottengeography
 def __init__(self):
     Champlain.PathLayer.__init__(self)
     self.set_stroke_width(4)
     MapView.add_layer(self)