예제 #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.
        """
        files = [
            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 = photos.get(filename)
                if photo is not None:
                    photo.manual = True
                    photo.set_location(map_view.y_to_latitude(y),
                                       map_view.x_to_longitude(x))
                    modified.add(photo)

        self.selection.emit('changed')
        map_view.emit('animation-completed')
예제 #2
0
 def set_location(self, lat, lon, ele=None):
     """Alter the coordinates of this photo."""
     modified.add(self)
     if ele is not None:
         self.altitude = ele
     self.latitude  = lat
     self.longitude = lon
예제 #3
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.
     """
     files = [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 = photos.get(filename)
             if photo is not None:
                 photo.manual = True
                 photo.set_location(
                     map_view.y_to_latitude(y),
                     map_view.x_to_longitude(x))
                 modified.add(photo)
     
     self.selection.emit('changed')
     map_view.emit('animation-completed')
예제 #4
0
 def __init__(self, photo):
     Champlain.Label.__init__(self)
     self.photo = photo
     self.set_name(photo.filename)
     self.set_text(basename(photo.filename))
     self.set_selectable(True)
     self.set_draggable(True)
     self.set_property('reactive', True)
     self.connect('enter-event', hover, 1.05)
     self.connect('leave-event', hover, 1/1.05)
     self.connect('button-press', clicked)
     self.connect('drag-finish',
         lambda *ignore: modified.add(photo)
             and photo.disable_auto_position())
     
     if photo.positioned:
         self.set_location(photo.latitude, photo.longitude)
         self.show()
     else:
         self.hide()
     
     for prop in ('latitude', 'longitude'):
         Binding(photo, prop, self,
                         flags=GObject.BindingFlags.BIDIRECTIONAL)
     Binding(photo, 'positioned', self, 'visible')
     
     MarkerLayer.add_marker(self)
예제 #5
0
 def modify_summary(self):
     """Update the text displayed in the GtkListStore."""
     modified.add(self)
     self.liststore.set_value(self.iter, 1,
         ('<b>%s</b>' % self.long_summary()))
예제 #6
0
 def modify_summary(self, photo):
     """Insert the current photo summary into the liststore."""
     modified.add(photo)
     self.liststore.set_value(photo.iter, SUMMARY,
                              ('<b>%s</b>' % photo.long_summary()))
예제 #7
0
 def modify_summary(self, photo):
     """Insert the current photo summary into the liststore."""
     modified.add(photo)
     self.liststore.set_value(photo.iter, SUMMARY,
         ('<b>%s</b>' % photo.long_summary()))