def __init__(self): gtk.TreeView.__init__(self) column = gtk.TreeViewColumn('Preview', gtk.CellRendererPixbuf(), pixbuf=ImageStore.COL_THUMBNAIL) self.append_column(column) renderer = gtk.CellRendererText() renderer.set_property('ellipsize', pango.ELLIPSIZE_END) column = gtk.TreeViewColumn('Info', renderer) column.set_cell_data_func(renderer, self.data_func) self.append_column(column) self.set_headers_visible(False) self.set_enable_search(False) selection = self.get_selection() selection.set_mode(gtk.SELECTION_MULTIPLE) # Setup the drag and drop self.targets = self.drag_dest_get_target_list() self.targets = gtk.target_list_add_image_targets (self.targets, DRAG_IMAGE, False) self.targets = gtk.target_list_add_uri_targets (self.targets, DRAG_URI) self.drag_dest_set (gtk.DEST_DEFAULT_ALL, self.targets, gtk.gdk.ACTION_COPY)
def __init__(self): gtk.TreeView.__init__(self) column = gtk.TreeViewColumn('Preview', gtk.CellRendererPixbuf(), pixbuf=ImageStore.COL_THUMBNAIL) self.append_column(column) renderer = gtk.CellRendererText() renderer.set_property('ellipsize', pango.ELLIPSIZE_END) column = gtk.TreeViewColumn('Info', renderer) column.set_cell_data_func(renderer, self.data_func) self.append_column(column) self.set_headers_visible(False) self.set_enable_search(False) selection = self.get_selection() selection.set_mode(gtk.SELECTION_MULTIPLE) # Setup the drag and drop self.targets = self.drag_dest_get_target_list() self.targets = gtk.target_list_add_image_targets( self.targets, DRAG_IMAGE, False) self.targets = gtk.target_list_add_uri_targets(self.targets, DRAG_URI) self.drag_dest_set(gtk.DEST_DEFAULT_ALL, self.targets, gtk.gdk.ACTION_COPY)
def __init__( self, snapshots, glade ): self.snapshots = snapshots self.config = snapshots.config self.glade = glade self.path = None self.icon_name = None self.dialog = self.glade.get_widget( 'SnapshotsDialog' ) signals = { 'on_list_snapshots_cursor_changed' : self.on_list_snapshots_cursor_changed, 'on_list_snapshots_row_activated' : self.on_list_snapshots_row_activated, 'on_list_snapshots_popup_menu' : self.on_list_snapshots_popup_menu, 'on_list_snapshots_button_press_event': self.on_list_snapshots_button_press_event, 'on_list_snapshots_drag_data_get': self.on_list_snapshots_drag_data_get, 'on_btn_diff_with_clicked' : self.on_btn_diff_with_clicked, 'on_btn_copy_snapshot_clicked' : self.on_btn_copy_snapshot_clicked, 'on_btn_restore_snapshot_clicked' : self.on_btn_restore_snapshot_clicked } #path self.edit_path = self.glade.get_widget( 'edit_path' ) #diff self.edit_diff_cmd = self.glade.get_widget( 'edit_diff_cmd' ) self.edit_diff_cmd_params = self.glade.get_widget( 'edit_diff_cmd_params' ) diff_cmd = self.config.get_str_value( 'gnome.diff.cmd', 'meld' ) diff_cmd_params = self.config.get_str_value( 'gnome.diff.params', '%1 %2' ) self.edit_diff_cmd.set_text( diff_cmd ) self.edit_diff_cmd_params.set_text( diff_cmd_params ) #setup backup folders self.list_snapshots = self.glade.get_widget( 'list_snapshots' ) self.list_snapshots.drag_source_set( gtk.gdk.BUTTON1_MASK | gtk.gdk.BUTTON3_MASK, gtk.target_list_add_uri_targets(), gtk.gdk.ACTION_COPY ) self.glade.signal_autoconnect( signals ) text_renderer = gtk.CellRendererText() column = gtk.TreeViewColumn( _('Snapshots') ) column.pack_end( text_renderer, True ) column.add_attribute( text_renderer, 'markup', 0 ) column.set_sort_column_id( 0 ) self.list_snapshots.append_column( column ) #display name, snapshot_id self.store_snapshots = gtk.ListStore( str, str ) self.list_snapshots.set_model( self.store_snapshots ) self.store_snapshots.set_sort_column_id( 0, gtk.SORT_DESCENDING ) #setup diff with combo self.combo_diff_with = self.glade.get_widget( 'combo_diff_with' ) text_renderer = gtk.CellRendererText() self.combo_diff_with.pack_start( text_renderer, True ) self.combo_diff_with.add_attribute( text_renderer, 'markup', 0 ) self.combo_diff_with.set_model( self.store_snapshots ) #use the same store
def clipboard_copy_path(path): targets = gtk.target_list_add_uri_targets() targets = gtk.target_list_add_text_targets(targets) targets.append(("x-special/gnome-copied-files", 0, 0)) clipboard = gtk.clipboard_get() clipboard.set_with_data(targets, __clipboard_copy_path_get, __clipboard_copy_path_clear, path) clipboard.store()
def clipboard_copy_path(path): targets = gtk.target_list_add_uri_targets() targets = gtk.target_list_add_text_targets(targets) targets.append(('x-special/gnome-copied-files', 0, 0)) clipboard = gtk.clipboard_get() clipboard.set_with_data(targets, __clipboard_copy_path_get, __clipboard_copy_path_clear, path) clipboard.store()
def __copy_activate_cb(self, menu_item): clipboard = gtk.Clipboard() targets = gtk.target_list_add_uri_targets() targets = gtk.target_list_add_text_targets(targets) targets.append(('text/x-moz-url', 0, 0)) clipboard.set_with_data(targets, self.__clipboard_get_func_cb, self.__clipboard_clear_func_cb)
def update_dnd_targets (self): targets = None if self.current_entry: targets = gtk.target_list_add_image_targets (targets) targets = gtk.target_list_add_uri_targets (targets) targets = gtk.target_list_add_text_targets (targets) if targets: self.drag_dest_set (gtk.DEST_DEFAULT_ALL, targets, gtk.gdk.ACTION_COPY) else: self.drag_dest_unset () targets = None if self.current_pixbuf: targets = gtk.target_list_add_image_targets (targets, writable=True) if self.current_uri: targets = gtk.target_list_add_uri_targets (targets) if targets: self.drag_source_set (gtk.gdk.BUTTON1_MASK, targets, gtk.gdk.ACTION_COPY) else: self.drag_source_unset ()
def __clipboard_get_func_cb(self, clipboard, selection_data, info, data): uri_targets = \ [target[0] for target in gtk.target_list_add_uri_targets()] text_targets = \ [target[0] for target in gtk.target_list_add_text_targets()] if selection_data.target in uri_targets: selection_data.set_uris([self._url]) elif selection_data.target in text_targets: selection_data.set_text(self._url) elif selection_data.target == 'text/x-moz-url': selection_data.set('text/x-moz-url', 8, self._url)
def build(self): self.builder = gtk.Builder() self.builder.add_from_file(os.path.join(self.datadir, 'ui', 'snippets.ui')) handlers_dic = { 'on_dialog_snippets_response': self.on_dialog_snippets_response, 'on_dialog_snippets_destroy': self.on_dialog_snippets_destroy, 'on_button_new_snippet_clicked': self.on_button_new_snippet_clicked, 'on_button_import_snippets_clicked': self.on_button_import_snippets_clicked, 'on_button_export_snippets_clicked': self.on_button_export_snippets_clicked, 'on_button_remove_snippet_clicked': self.on_button_remove_snippet_clicked, 'on_entry_tab_trigger_focus_out': self.on_entry_tab_trigger_focus_out, 'on_entry_tab_trigger_changed': self.on_entry_tab_trigger_changed, 'on_entry_accelerator_focus_out': self.on_entry_accelerator_focus_out, 'on_entry_accelerator_focus_in': self.on_entry_accelerator_focus_in, 'on_entry_accelerator_key_press': self.on_entry_accelerator_key_press, 'on_source_view_snippet_focus_out': self.on_source_view_snippet_focus_out, 'on_tree_view_snippets_row_expanded': self.on_tree_view_snippets_row_expanded, 'on_tree_view_snippets_key_press': self.on_tree_view_snippets_key_press} self.builder.connect_signals(handlers_dic) self.build_tree_view() self.build_model() image = self['image_remove'] image.set_from_stock(gtk.STOCK_REMOVE, gtk.ICON_SIZE_SMALL_TOOLBAR) source_view = self['source_view_snippet'] manager = get_language_manager() lang = manager.get_language('snippets') if lang: source_view.get_buffer().set_highlight_syntax(True) source_view.get_buffer().set_language(lang) self.snippets_doc = Document(None, source_view) combo = self['combo_drop_targets'] combo.set_text_column(0) entry = combo.child entry.connect('focus-out-event', self.on_entry_drop_targets_focus_out) entry.connect('drag-data-received', self.on_entry_drop_targets_drag_data_received) lst = entry.drag_dest_get_target_list() lst = gtk.target_list_add_uri_targets(entry.drag_dest_get_target_list(), self.TARGET_URI) entry.drag_dest_set_target_list(lst) self.dlg = self['dialog_snippets'] if self.default_size: self.dlg.set_default_size(*self.default_size)
def copy_to_clipboard(obj, clipboard): """ Copy @obj to @clipboard, a gtk.Clipboard Return True if successful """ ## support copying text to clipboard ## as well as files in both the general uri-list representation ## and in nautilus' file copy clipboard type target_ids = (uri_id, text_id, nautilus_id) = (80, 81, 82) nautilus_target = 'x-special/gnome-copied-files' # udata is the data dict def store(clipboard, sdata, info, udata): if info == uri_id: sdata.set_uris(udata[uri_id]) if info == text_id: sdata.set_text(udata[text_id]) if info == nautilus_id: str_data_format = 8 sdata.set(nautilus_target, str_data_format, udata[nautilus_id]) def clear(clipboard, udata): pass targets = [] data = {} try: urilist = obj.get_urilist_representation() except AttributeError: pass else: if urilist: targets = gtk.target_list_add_uri_targets(targets, uri_id) targets.append((nautilus_target, 0, nautilus_id)) data[uri_id] = urilist data[nautilus_id] = 'copy\n' + '\n'.join(urilist) try: text = obj.get_text_representation() except AttributeError: pass else: targets = gtk.target_list_add_text_targets(targets, text_id) data[text_id] = text if data: clipboard.set_with_data(targets, store, clear, data) # store all targets clipboard.set_can_store(None) clipboard.store() return True return False
def update_dnd_targets(self): targets = None if self.current_entry: targets = gtk.target_list_add_image_targets(targets) targets = gtk.target_list_add_uri_targets(targets) targets = gtk.target_list_add_text_targets(targets) if targets: self.drag_dest_set(gtk.DEST_DEFAULT_ALL, targets, gtk.gdk.ACTION_COPY) else: self.drag_dest_unset() targets = None if self.current_pixbuf: targets = gtk.target_list_add_image_targets(targets, writable=True) if self.current_uri: targets = gtk.target_list_add_uri_targets(targets) if targets: self.drag_source_set(gtk.gdk.BUTTON1_MASK, targets, gtk.gdk.ACTION_COPY) else: self.drag_source_unset()
def copy_to_clipboard(obj, clipboard): """ Copy @obj to @clipboard, a gtk.Clipboard Return True if successful """ ## support copying text to clipboard ## as well as files in both the general uri-list representation ## and in nautilus' file copy clipboard type target_ids = (uri_id, text_id, nautilus_id) = (80, 81, 82) nautilus_target = 'x-special/gnome-copied-files' # udata is the data dict def store(clipboard, sdata, info, udata): if info == uri_id: sdata.set_uris(udata[uri_id]) if info == text_id: sdata.set_text(udata[text_id]) if info == nautilus_id: str_data_format = 8 sdata.set(nautilus_target, str_data_format, udata[nautilus_id]) def clear(clipboard, udata): pass targets = [] data = {} try: urilist = obj.get_urilist_representation() except AttributeError: pass else: if urilist: targets = gtk.target_list_add_uri_targets(targets, uri_id) targets.append((nautilus_target, 0, nautilus_id)) data[uri_id] = urilist data[nautilus_id] = 'copy\n' + '\n'.join(urilist) try: text = obj.get_text_representation() except AttributeError: pass else: targets = gtk.target_list_add_text_targets(targets, text_id) data[text_id] = text if data: clipboard.set_with_data(targets, store, clear, data) # store all targets clipboard.set_can_store(targets) return True return False
def on_motion_notify_event(self, widget, hippo_event, url): if self.__drag_start_pos != None and self.__drag_window == None: start_x, start_y = self.__drag_start_pos canvas_window = hippo.get_canvas_for_item(self._box) if canvas_window.drag_check_threshold(int(start_x), int(start_y), int(hippo_event.x), int(hippo_event.y)): self.__drag_window = gtk.Invisible() self.__drag_window.connect("drag-data-get", self.on_drag_data_get, url) self.__drag_window.connect("drag-end", self.on_drag_end) event = gtk.gdk.Event(gtk.gdk.MOTION_NOTIFY) x, y, s = gtk.gdk.get_default_root_window().get_pointer() event.x_root = float(x) event.y_root = float(y) event.state = s event.window = gtk.gdk.get_default_root_window() self.__drag_window.drag_begin(gtk.target_list_add_uri_targets(), gtk.gdk.ACTION_COPY, 1, event) return True return False
def __init__(self, worker, service_col_types, default_service_cols_cb): gtk.HBox.__init__(self) self.worker = worker self.default_service_cols_cb = default_service_cols_cb self.active_row = None self.active_item = None self.model = gtk.ListStore(gtk.gdk.Pixbuf, str, gobject.TYPE_DOUBLE, gobject.TYPE_INT, gobject.TYPE_PYOBJECT, str, gobject.TYPE_BOOLEAN, str, *service_col_types) self.upload_collection = baseobjects.SimpleCollection() self.tv = gtk.TreeView(self.model) self.tv.set_reorderable(True) self.tv.set_headers_visible(False) self.tv.get_selection().set_mode(gtk.SELECTION_MULTIPLE) ##self.tv.connect("row-activated",self.tag_activate) tvc_bitmap = gtk.TreeViewColumn(None, gtk.CellRendererPixbuf(), pixbuf=MODEL_COL_PIXBUF) tvc_text = gtk.TreeViewColumn(None, gtk.CellRendererText(), markup=MODEL_COL_NAME) prog = gtk.CellRendererProgress() tvc_progress = gtk.TreeViewColumn(None, prog, value=MODEL_COL_PROGRESS) ##gtk.CellRendererText self.tv.append_column(tvc_bitmap) self.tv.append_column(tvc_text) self.tv.append_column(tvc_progress) target_list = self.tv.drag_dest_get_target_list() target_list = gtk.target_list_add_uri_targets(target_list, 0) self.tv.enable_model_drag_dest( target_list, gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY) # self.tv.drag_dest_set(gtk.DEST_DEFAULT_ALL, # target_list, # gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE) self.tv.connect("drag-data-received", self.drag_receive_signal) self.tv.add_events(gtk.gdk.BUTTON_MOTION_MASK) self.tv.connect("button-release-event", self.context_menu) scrolled_window = gtk.ScrolledWindow() scrolled_window.add(self.tv) scrolled_window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) self.pack_start(scrolled_window)
def set_as_current(self, event=None): def path_get(clipboard, selectiondata, info, path): selectiondata.set_text(path) files = path.split("\n") file_paths = [] for copied_file in files: gfile = gio.File(copied_file) file_paths.append(gfile.get_uri()) selectiondata.set_uris(file_paths) selectiondata.set('x-special/gnome-copied-files', 8, 'copy\n' + '\n'.join(file_paths)) def path_clear(self, path): return HistoryMenuItem.set_as_current(self, event) targets = gtk.target_list_add_uri_targets() targets = gtk.target_list_add_text_targets(targets) targets.append(('x-special/gnome-copied-files', 0, 0)) gtk.clipboard_get().set_with_data(targets, path_get, path_clear, self.payload) gtk.clipboard_get().store()
def set_as_current(self, event=None): def path_get(clipboard, selectiondata, info, path): selectiondata.set_text(path) files = path.split("\n") file_paths = [] for copied_file in files: file_path = gnomevfs.escape_path_string(copied_file) file_paths.append("file://" + file_path) selectiondata.set_uris(file_paths) selectiondata.set("x-special/gnome-copied-files", 8, "copy\n" + "\n".join(file_paths)) def path_clear(self, path): return HistoryMenuItem.set_as_current(self, event) targets = gtk.target_list_add_uri_targets() targets = gtk.target_list_add_text_targets(targets) targets.append(("x-special/gnome-copied-files", 0, 0)) gtk.clipboard_get().set_with_data(targets, path_get, path_clear, self.payload) gtk.clipboard_get().store()
def __init__(self,worker,service_col_types,default_service_cols_cb): gtk.HBox.__init__(self) self.worker=worker self.default_service_cols_cb=default_service_cols_cb self.active_row=None self.active_item=None self.model=gtk.ListStore(gtk.gdk.Pixbuf,str,gobject.TYPE_DOUBLE,gobject.TYPE_INT,gobject.TYPE_PYOBJECT,str,gobject.TYPE_BOOLEAN,str,*service_col_types) self.upload_collection=baseobjects.SimpleCollection() self.tv=gtk.TreeView(self.model) self.tv.set_reorderable(True) self.tv.set_headers_visible(False) self.tv.get_selection().set_mode(gtk.SELECTION_MULTIPLE) ##self.tv.connect("row-activated",self.tag_activate) tvc_bitmap=gtk.TreeViewColumn(None,gtk.CellRendererPixbuf(),pixbuf=MODEL_COL_PIXBUF) tvc_text=gtk.TreeViewColumn(None,gtk.CellRendererText(),markup=MODEL_COL_NAME) prog=gtk.CellRendererProgress() tvc_progress=gtk.TreeViewColumn(None,prog,value=MODEL_COL_PROGRESS) ##gtk.CellRendererText self.tv.append_column(tvc_bitmap) self.tv.append_column(tvc_text) self.tv.append_column(tvc_progress) target_list=self.tv.drag_dest_get_target_list() target_list=gtk.target_list_add_uri_targets(target_list,0) self.tv.enable_model_drag_dest(target_list, gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY) # self.tv.drag_dest_set(gtk.DEST_DEFAULT_ALL, # target_list, # gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE) self.tv.connect("drag-data-received",self.drag_receive_signal) self.tv.add_events(gtk.gdk.BUTTON_MOTION_MASK) self.tv.connect("button-release-event",self.context_menu) scrolled_window = gtk.ScrolledWindow() scrolled_window.add(self.tv) scrolled_window.set_policy(gtk.POLICY_NEVER,gtk.POLICY_AUTOMATIC) self.pack_start(scrolled_window)
def __init__(self, hover_cmds=()): ''' init takes an optional list or tuple describing onmouseover shortcuts buttons ''' gtk.HBox.__init__(self) self.hover_cmds = hover_cmds self.configure_geometry() self.lock = threading.Lock() # self.active_view=active_view # self.active_collection=active_collection self.neededitem = None self.mode = self.MODE_NORMAL self.pressed_ind = -1 self.pressed_item = None self.last_selected_ind = -1 self.last_selected = None self.button_press_block = False self.focal_item = None self.shift_state = False self.pixbuf_thumb_fail = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, True, 8, 128, 128) self.pixbuf_thumb_load = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, True, 8, 128, 128) self.pixbuf_thumb_fail.fill(0xC0000080) self.pixbuf_thumb_load.fill(0xFFFFFF20) self.geo_view_offset = 0 self.offsetx = 0 self.geo_ind_view_first = 0 self.geo_ind_view_last = 1 self.hover_ind = -1 self.command_highlight_ind = -1 self.command_highlight_bd = False self.imarea = gtk.DrawingArea() self.imarea.set_property("can-focus", True) self.imarea.set_size_request(160, 160) self.imarea.set_property("has-tooltip", True) self.imarea.connect("query-tooltip", self.drawable_tooltip_query) self.scrolladj = gtk.Adjustment() self.vscroll = gtk.VScrollbar(self.scrolladj) # self.vscroll.set_property("has-tooltip",True) # self.vscroll.connect("query-tooltip",self.scroll_tooltip_query) self.vbox = gtk.VBox() self.vbox.pack_start(self.imarea) self.vbox.show() self.bbox = gtk.HBox() self.bbox.pack_start(self.vbox) self.bbox.pack_start(self.vscroll, False) self.bbox.show() self.hpane = gtk.HPaned() self.hpane.add1(self.bbox) self.hpane.show() self.pack_start(self.hpane) self.imarea.connect("realize", self.realize_signal) self.imarea.connect("configure_event", self.configure_signal) self.imarea.connect("expose_event", self.expose_signal) self.mouse_hover = False self.imarea.add_events(gtk.gdk.POINTER_MOTION_MASK) self.imarea.connect("motion-notify-event", self.mouse_motion_signal) self.imarea.add_events(gtk.gdk.LEAVE_NOTIFY_MASK) self.imarea.connect("leave-notify-event", self.mouse_leave_signal) self.imarea.add_events(gtk.gdk.ENTER_NOTIFY_MASK) self.imarea.connect("enter-notify-event", self.mouse_enter_signal) self.scrolladj.connect("value-changed", self.scroll_signal) self.imarea.add_events(gtk.gdk.SCROLL_MASK) self.imarea.connect("scroll-event", self.scroll_signal_pane) self.imarea.add_events(gtk.gdk.BUTTON_PRESS_MASK) self.imarea.add_events(gtk.gdk.BUTTON_RELEASE_MASK) self.imarea.connect("button-press-event", self.button_press) self.imarea.connect("button-release-event", self.button_press) self.imarea.add_events(gtk.gdk.KEY_PRESS_MASK) self.imarea.add_events(gtk.gdk.KEY_RELEASE_MASK) self.imarea.connect("key-press-event", self.key_press_signal) self.imarea.connect("key-release-event", self.key_press_signal) target_list = [ ('image-filename', gtk.TARGET_SAME_APP, self.TARGET_TYPE_IMAGE) ] #("XdndDirectSave0", 0, self.TARGET_TYPE_XDS), target_list = gtk.target_list_add_uri_targets( target_list, self.TARGET_TYPE_URI_LIST) # target_list=gtk.target_list_add_text_targets(target_list,self.TARGET_TYPE_URI_LIST) self.imarea.drag_source_set(gtk.gdk.BUTTON1_MASK, target_list, gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE) target_list = [('tag-tree-row', gtk.TARGET_SAME_APP, 0)] target_list = gtk.target_list_add_uri_targets(target_list, 1) self.imarea.drag_dest_set(gtk.DEST_DEFAULT_ALL, target_list, gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY) self.imarea.connect("drag-data-get", self.drag_get_signal) self.imarea.connect("drag-begin", self.drag_begin_signal) self.imarea.connect("drag-end", self.drag_end_signal) self.imarea.connect("drag-data-received", self.drag_receive_signal) self.imarea.connect("drag-motion", self.drag_motion_signal) self.imarea.connect("drag-leave", self.drag_leave_signal) #self.imarea.drag_source_set_icon_stock('browser-drag-icon') self.imarea.show() self.vscroll.show() self.imarea.grab_focus()
def __init__(self,worker,toolbar,viewer_window,click_callback=None,key_press_callback=None): gtk.VBox.__init__(self) self.toolbar=toolbar self.viewer_window = viewer_window self.il=ImageLoader(self) self.imarea=overlay_widgets.DrawableOverlayHover() self.imarea.add_with_bg(toolbar,0,1,0,None) self.imarea.connect("draw",self.draw) self.imarea.set_property("can-focus",True) self.worker=worker self.plugin_controller=None self.mouse_hover=False self.mouse_hover_pos=None self.command_highlight_ind=-1 self.command_highlight_bd=False self.zoom_level='fit' self.zoom_position=(0,0) #either center or a tuple of left/top coordinates self.zoom_position_request=None self.freeze_image_refresh=False self.change_block=False self.vscrolladj=gtk.Adjustment() self.hscrolladj=gtk.Adjustment() self.vscroll=gtk.VScrollbar(self.vscrolladj) self.hscroll=gtk.HScrollbar(self.hscrolladj) self.vscrolladj.connect("value-changed",self.scroll_signal,True) self.hscrolladj.connect("value-changed",self.scroll_signal,False) self.imarea.add_events(gtk.gdk.SCROLL_MASK) self.imarea.connect("scroll-event",self.scroll_signal_pane) self.scroll_inc = 15 self.imarea.show_all() self.image_box = gtk.VBox() self.image_box.pack_start(self.imarea) self.image_box.show() #Add scrollbars self.image_table=gtk.Table(rows=2,columns=2,homogeneous=False) ##plugins can add widgets to the box self.image_table.attach(self.image_box, 0, 1, 0, 1, xoptions=gtk.EXPAND|gtk.FILL, yoptions=gtk.EXPAND|gtk.FILL, xpadding=0, ypadding=0) self.image_table.attach(self.vscroll, 1, 2, 0, 1, xoptions=0, yoptions=gtk.EXPAND|gtk.FILL, xpadding=0, ypadding=0) self.image_table.attach(self.hscroll, 0, 1, 1, 2, xoptions=gtk.EXPAND|gtk.FILL, yoptions=0, xpadding=0, ypadding=0) self.image_table.show() self.vpane=gtk.VPaned() self.vpane.add1(self.image_table) ##plugins can add widgets with add2 self.pack_start(self.vpane) self.vpane.show() #self.imarea.add_events(gtk.gdk.EXPOSURE_MASK) self.conf_id=self.imarea.connect("size-allocate",self.size_signal) #self.imarea.connect("realize",self.realize_signal) self.connect("destroy", self._destroy) #self.imarea.add_events(gtk.gdk.SCROLL_MASK) #self.imarea.add_events(gtk.gdk.BUTTON_MOTION_MASK) self.imarea.add_events(gtk.gdk.BUTTON_PRESS_MASK) self.imarea.add_events(gtk.gdk.BUTTON_RELEASE_MASK) self.imarea.connect("button-press-event",self.button_press) self.imarea.connect("button-release-event",self.button_press) self.imarea.add_events(gtk.gdk.KEY_PRESS_MASK) self.imarea.add_events(gtk.gdk.KEY_RELEASE_MASK) self.imarea.add_events(gtk.gdk.POINTER_MOTION_MASK) self.imarea.connect("motion-notify-event",self.mouse_motion_signal) #self.imarea.add_events(gtk.gdk.ENTER_NOTIFY_MASK) #self.imarea.connect("enter-notify-event",self.mouse_enter_signal) self.imarea.add_events(gtk.gdk.LEAVE_NOTIFY_MASK) self.imarea.connect("leave-notify-event",self.mouse_leave_signal) self.target_list=[('image-filename', gtk.TARGET_SAME_APP, self.TARGET_TYPE_IMAGE)] #("XdndDirectSave0", 0, self.TARGET_TYPE_XDS), self.target_list=gtk.target_list_add_uri_targets(self.target_list,self.TARGET_TYPE_URI_LIST) #target_list=gtk.target_list_add_text_targets(target_list,self.TARGET_TYPE_URI_LIST) self.imarea.drag_source_set(gtk.gdk.BUTTON1_MASK, self.target_list,gtk.gdk.ACTION_COPY)#| gtk.gdk.ACTION_MOVE) ## target_list=[('tag-tree-row', gtk.TARGET_SAME_APP, 0)] ## target_list=gtk.target_list_add_uri_targets(target_list,1) ## self.imarea.drag_dest_set(gtk.DEST_DEFAULT_ALL, ## target_list, ## gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY) self.imarea.connect("drag-data-get",self.drag_get_signal) ## self.imarea.connect("drag-begin", self.drag_begin_signal) ##not needed when using drag_source_set ## self.imarea.connect("drag-end",self.drag_end_signal) ## self.imarea.connect("drag-data-received",self.drag_receive_signal) self.imarea.connect("drag-motion",self.drag_motion_signal) self.imarea.connect("drag-leave",self.drag_leave_signal) #self.imarea.drag_source_set_icon_stock('browser-drag-icon') if click_callback: self.imarea.connect_after("button-press-event",click_callback) if key_press_callback: self.imarea.connect("key-press-event",key_press_callback) self.imarea.connect("key-release-event",key_press_callback) pluginmanager.mgr.register_callback('t_collection_item_metadata_changed',self.meta_changed) # self.imarea.set_size_request(128,96) self.item=None self.browser=None self.last_sizing = None self.freeze_image_refresh = False self.freeze_image_resize = False self.fullscreen = False
# According to docs we should provide list as arg to this function, # but seems docs are not correct IMAGE_TARGET_NAMES = tuple([target[0] for target in IMAGE_TARGETS]) # Add image format names as well, seen these being used by MS Office for format in gtk.gdk.pixbuf_get_formats(): if format['mime_types'][0] in IMAGE_TARGET_NAMES: for n in (format['name'], format['name'].upper()): IMAGE_TARGET_NAMES += (n,) IMAGE_TARGETS += ((n, 0, IMAGE_TARGET_ID),) #~ print IMAGE_TARGETS #~ print IMAGE_TARGET_NAMES URI_TARGET_ID = 7 URI_TARGETS = tuple(gtk.target_list_add_uri_targets(info=URI_TARGET_ID)) # According to docs we should provide list as arg to this function, # but seems docs are not correct URI_TARGET_NAMES = tuple([target[0] for target in URI_TARGETS]) HTML_TARGET_ID = 8 HTML_TARGET_NAMES = ('text/html', 'HTML Format') # "HTML Format" is from MS Word HTML_TARGETS = tuple([(name, 0, HTML_TARGET_ID) for name in HTML_TARGET_NAMES]) TEXT_TARGET_ID = 9 TEXT_TARGETS = tuple(gtk.target_list_add_text_targets(info=TEXT_TARGET_ID)) # According to docs we should provide list as arg to this function, # but seems docs are not correct TEXT_TARGET_NAMES = tuple([target[0] for target in TEXT_TARGETS])
def find_uri_target(self, context): lst = gtk.target_list_add_uri_targets((), 0) return self.view.drag_dest_find_target(context, lst)
i.connect('activate', lambda m, v, *a, **k: v.zoom_in(), view) menu.append(i) i = gtk.ImageMenuItem(gtk.STOCK_ZOOM_OUT) i.connect('activate', lambda m, v, **k: v.zoom_out(), view) menu.append(i) i = gtk.ImageMenuItem(gtk.STOCK_ZOOM_100) i.connect( 'activate', lambda m, v, *a, **k: v.get_zoom_level() == 1.0 or v. set_zoom_level(1.0), view) menu.append(i) menu.show_all() return False targets_l = gtk.target_list_add_uri_targets() class ThImportWindow(gtk.Window): def __init__(self, main): gtk.Window.__init__(self) self.progress_dict = {} self.progress_phase = 0 self.progress_books_in_file = 0 self.progress_element = 0 self.add_dlg = None self.drag_dest_set(gtk.DEST_DEFAULT_ALL, targets_l, (1 << 5) - 1) self.connect('drag-data-received', self.drop_data_cb) self.set_title(_('Import Shamela .bok files')) self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) self.set_modal(True)
def populate_popup(self, view, menu): menu.append(gtk.SeparatorMenuItem()) i = gtk.ImageMenuItem(gtk.STOCK_ZOOM_IN) i.connect('activate', lambda m,v,*a,**k: v.zoom_in(), view) menu.append(i) i = gtk.ImageMenuItem(gtk.STOCK_ZOOM_OUT) i.connect('activate', lambda m,v,**k: v.zoom_out(), view) menu.append(i) i = gtk.ImageMenuItem(gtk.STOCK_ZOOM_100) i.connect('activate', lambda m,v,*a,**k: v.get_zoom_level() == 1.0 or v.set_zoom_level(1.0), view) menu.append(i) menu.show_all() return False targets_l=gtk.target_list_add_uri_targets() class ThImportWindow(gtk.Window): def __init__(self, main): gtk.Window.__init__(self) self.progress_dict = { } self.progress_phase = 0 self.progress_books_in_file = 0 self.progress_element = 0 self.add_dlg = None self.drag_dest_set(gtk.DEST_DEFAULT_ALL,targets_l,(1<<5)-1) self.connect('drag-data-received', self.drop_data_cb) self.set_title(_('Import Shamela .bok files')) self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) self.set_modal(True) self.set_transient_for(main)
def __init__(self, worker, toolbar, viewer_window, click_callback=None, key_press_callback=None): gtk.VBox.__init__(self) self.toolbar = toolbar self.viewer_window = viewer_window self.il = ImageLoader(self) self.imarea = overlay_widgets.DrawableOverlayHover() self.imarea.add_with_bg(toolbar, 0, 1, 0, None) self.imarea.connect("draw", self.draw) self.imarea.set_property("can-focus", True) self.worker = worker self.plugin_controller = None self.mouse_hover = False self.mouse_hover_pos = None self.command_highlight_ind = -1 self.command_highlight_bd = False self.zoom_level = 'fit' self.zoom_position = ( 0, 0) #either center or a tuple of left/top coordinates self.zoom_position_request = None self.freeze_image_refresh = False self.change_block = False self.vscrolladj = gtk.Adjustment() self.hscrolladj = gtk.Adjustment() self.vscroll = gtk.VScrollbar(self.vscrolladj) self.hscroll = gtk.HScrollbar(self.hscrolladj) self.vscrolladj.connect("value-changed", self.scroll_signal, True) self.hscrolladj.connect("value-changed", self.scroll_signal, False) self.imarea.add_events(gtk.gdk.SCROLL_MASK) self.imarea.connect("scroll-event", self.scroll_signal_pane) self.scroll_inc = 15 self.imarea.show_all() self.image_box = gtk.VBox() self.image_box.pack_start(self.imarea) self.image_box.show() #Add scrollbars self.image_table = gtk.Table( rows=2, columns=2, homogeneous=False) ##plugins can add widgets to the box self.image_table.attach(self.image_box, 0, 1, 0, 1, xoptions=gtk.EXPAND | gtk.FILL, yoptions=gtk.EXPAND | gtk.FILL, xpadding=0, ypadding=0) self.image_table.attach(self.vscroll, 1, 2, 0, 1, xoptions=0, yoptions=gtk.EXPAND | gtk.FILL, xpadding=0, ypadding=0) self.image_table.attach(self.hscroll, 0, 1, 1, 2, xoptions=gtk.EXPAND | gtk.FILL, yoptions=0, xpadding=0, ypadding=0) self.image_table.show() self.vpane = gtk.VPaned() self.vpane.add1(self.image_table) ##plugins can add widgets with add2 self.pack_start(self.vpane) self.vpane.show() #self.imarea.add_events(gtk.gdk.EXPOSURE_MASK) self.conf_id = self.imarea.connect("size-allocate", self.size_signal) #self.imarea.connect("realize",self.realize_signal) self.connect("destroy", self._destroy) #self.imarea.add_events(gtk.gdk.SCROLL_MASK) #self.imarea.add_events(gtk.gdk.BUTTON_MOTION_MASK) self.imarea.add_events(gtk.gdk.BUTTON_PRESS_MASK) self.imarea.add_events(gtk.gdk.BUTTON_RELEASE_MASK) self.imarea.connect("button-press-event", self.button_press) self.imarea.connect("button-release-event", self.button_press) self.imarea.add_events(gtk.gdk.KEY_PRESS_MASK) self.imarea.add_events(gtk.gdk.KEY_RELEASE_MASK) self.imarea.add_events(gtk.gdk.POINTER_MOTION_MASK) self.imarea.connect("motion-notify-event", self.mouse_motion_signal) #self.imarea.add_events(gtk.gdk.ENTER_NOTIFY_MASK) #self.imarea.connect("enter-notify-event",self.mouse_enter_signal) self.imarea.add_events(gtk.gdk.LEAVE_NOTIFY_MASK) self.imarea.connect("leave-notify-event", self.mouse_leave_signal) self.target_list = [ ('image-filename', gtk.TARGET_SAME_APP, self.TARGET_TYPE_IMAGE) ] #("XdndDirectSave0", 0, self.TARGET_TYPE_XDS), self.target_list = gtk.target_list_add_uri_targets( self.target_list, self.TARGET_TYPE_URI_LIST) #target_list=gtk.target_list_add_text_targets(target_list,self.TARGET_TYPE_URI_LIST) self.imarea.drag_source_set( gtk.gdk.BUTTON1_MASK, self.target_list, gtk.gdk.ACTION_COPY) #| gtk.gdk.ACTION_MOVE) ## target_list=[('tag-tree-row', gtk.TARGET_SAME_APP, 0)] ## target_list=gtk.target_list_add_uri_targets(target_list,1) ## self.imarea.drag_dest_set(gtk.DEST_DEFAULT_ALL, ## target_list, ## gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY) self.imarea.connect("drag-data-get", self.drag_get_signal) ## self.imarea.connect("drag-begin", self.drag_begin_signal) ##not needed when using drag_source_set ## self.imarea.connect("drag-end",self.drag_end_signal) ## self.imarea.connect("drag-data-received",self.drag_receive_signal) self.imarea.connect("drag-motion", self.drag_motion_signal) self.imarea.connect("drag-leave", self.drag_leave_signal) #self.imarea.drag_source_set_icon_stock('browser-drag-icon') if click_callback: self.imarea.connect_after("button-press-event", click_callback) if key_press_callback: self.imarea.connect("key-press-event", key_press_callback) self.imarea.connect("key-release-event", key_press_callback) pluginmanager.mgr.register_callback( 't_collection_item_metadata_changed', self.meta_changed) # self.imarea.set_size_request(128,96) self.item = None self.browser = None self.last_sizing = None self.freeze_image_refresh = False self.freeze_image_resize = False self.fullscreen = False
def __init__(self, snapshots, glade): self.snapshots = snapshots self.config = snapshots.config self.glade = glade self.path = None self.icon_name = None self.dialog = self.glade.get_widget('SnapshotsDialog') signals = { 'on_list_snapshots_cursor_changed': self.on_list_snapshots_cursor_changed, 'on_list_snapshots_row_activated': self.on_list_snapshots_row_activated, 'on_list_snapshots_popup_menu': self.on_list_snapshots_popup_menu, 'on_list_snapshots_button_press_event': self.on_list_snapshots_button_press_event, 'on_list_snapshots_drag_data_get': self.on_list_snapshots_drag_data_get, 'on_btn_diff_with_clicked': self.on_btn_diff_with_clicked, 'on_btn_copy_snapshot_clicked': self.on_btn_copy_snapshot_clicked, 'on_btn_restore_snapshot_clicked': self.on_btn_restore_snapshot_clicked } #path self.edit_path = self.glade.get_widget('edit_path') #diff self.edit_diff_cmd = self.glade.get_widget('edit_diff_cmd') self.edit_diff_cmd_params = self.glade.get_widget( 'edit_diff_cmd_params') diff_cmd = self.config.get_str_value('gnome.diff.cmd', 'meld') diff_cmd_params = self.config.get_str_value('gnome.diff.params', '%1 %2') self.edit_diff_cmd.set_text(diff_cmd) self.edit_diff_cmd_params.set_text(diff_cmd_params) #setup backup folders self.list_snapshots = self.glade.get_widget('list_snapshots') self.list_snapshots.drag_source_set( gtk.gdk.BUTTON1_MASK | gtk.gdk.BUTTON3_MASK, gtk.target_list_add_uri_targets(), gtk.gdk.ACTION_COPY) self.glade.signal_autoconnect(signals) text_renderer = gtk.CellRendererText() column = gtk.TreeViewColumn(_('Snapshots')) column.pack_end(text_renderer, True) column.add_attribute(text_renderer, 'markup', 0) column.set_sort_column_id(0) self.list_snapshots.append_column(column) #display name, snapshot_id self.store_snapshots = gtk.ListStore(str, str) self.list_snapshots.set_model(self.store_snapshots) self.store_snapshots.set_sort_column_id(0, gtk.SORT_DESCENDING) #setup diff with combo self.combo_diff_with = self.glade.get_widget('combo_diff_with') text_renderer = gtk.CellRendererText() self.combo_diff_with.pack_start(text_renderer, True) self.combo_diff_with.add_attribute(text_renderer, 'markup', 0) self.combo_diff_with.set_model( self.store_snapshots) #use the same store
def __init__(self,hover_cmds=()): ''' init takes an optional list or tuple describing onmouseover shortcuts buttons ''' gtk.HBox.__init__(self) self.hover_cmds=hover_cmds self.configure_geometry() self.lock=threading.Lock() # self.active_view=active_view # self.active_collection=active_collection self.neededitem=None self.mode=self.MODE_NORMAL self.pressed_ind=-1 self.pressed_item=None self.last_selected_ind=-1 self.last_selected=None self.button_press_block=False self.focal_item=None self.shift_state=False self.pixbuf_thumb_fail=gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,True,8,128,128) self.pixbuf_thumb_load=gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,True,8,128,128) self.pixbuf_thumb_fail.fill(0xC0000080) self.pixbuf_thumb_load.fill(0xFFFFFF20) self.geo_view_offset=0 self.offsetx=0 self.geo_ind_view_first=0 self.geo_ind_view_last=1 self.hover_ind=-1 self.command_highlight_ind=-1 self.command_highlight_bd=False self.imarea=gtk.DrawingArea() self.imarea.set_property("can-focus",True) self.imarea.set_size_request(160,160) self.imarea.set_property("has-tooltip",True) self.imarea.connect("query-tooltip",self.drawable_tooltip_query) self.scrolladj=gtk.Adjustment() self.vscroll=gtk.VScrollbar(self.scrolladj) # self.vscroll.set_property("has-tooltip",True) # self.vscroll.connect("query-tooltip",self.scroll_tooltip_query) self.vbox=gtk.VBox() self.vbox.pack_start(self.imarea) self.vbox.show() self.bbox=gtk.HBox() self.bbox.pack_start(self.vbox) self.bbox.pack_start(self.vscroll,False) self.bbox.show() self.hpane=gtk.HPaned() self.hpane.add1(self.bbox) self.hpane.show() self.pack_start(self.hpane) self.imarea.connect("realize",self.realize_signal) self.imarea.connect("configure_event",self.configure_signal) self.imarea.connect("expose_event",self.expose_signal) self.mouse_hover=False self.imarea.add_events(gtk.gdk.POINTER_MOTION_MASK) self.imarea.connect("motion-notify-event",self.mouse_motion_signal) self.imarea.add_events(gtk.gdk.LEAVE_NOTIFY_MASK) self.imarea.connect("leave-notify-event",self.mouse_leave_signal) self.imarea.add_events(gtk.gdk.ENTER_NOTIFY_MASK) self.imarea.connect("enter-notify-event",self.mouse_enter_signal) self.scrolladj.connect("value-changed",self.scroll_signal) self.imarea.add_events(gtk.gdk.SCROLL_MASK) self.imarea.connect("scroll-event",self.scroll_signal_pane) self.imarea.add_events(gtk.gdk.BUTTON_PRESS_MASK) self.imarea.add_events(gtk.gdk.BUTTON_RELEASE_MASK) self.imarea.connect("button-press-event",self.button_press) self.imarea.connect("button-release-event",self.button_press) self.imarea.add_events(gtk.gdk.KEY_PRESS_MASK) self.imarea.add_events(gtk.gdk.KEY_RELEASE_MASK) self.imarea.connect("key-press-event",self.key_press_signal) self.imarea.connect("key-release-event",self.key_press_signal) target_list=[('image-filename', gtk.TARGET_SAME_APP, self.TARGET_TYPE_IMAGE)] #("XdndDirectSave0", 0, self.TARGET_TYPE_XDS), target_list=gtk.target_list_add_uri_targets(target_list,self.TARGET_TYPE_URI_LIST) # target_list=gtk.target_list_add_text_targets(target_list,self.TARGET_TYPE_URI_LIST) self.imarea.drag_source_set(gtk.gdk.BUTTON1_MASK, target_list,gtk.gdk.ACTION_COPY| gtk.gdk.ACTION_MOVE) target_list=[('tag-tree-row', gtk.TARGET_SAME_APP, 0)] target_list=gtk.target_list_add_uri_targets(target_list,1) self.imarea.drag_dest_set(gtk.DEST_DEFAULT_ALL, target_list, gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY) self.imarea.connect("drag-data-get",self.drag_get_signal) self.imarea.connect("drag-begin", self.drag_begin_signal) self.imarea.connect("drag-end",self.drag_end_signal) self.imarea.connect("drag-data-received",self.drag_receive_signal) self.imarea.connect("drag-motion",self.drag_motion_signal) self.imarea.connect("drag-leave",self.drag_leave_signal) #self.imarea.drag_source_set_icon_stock('browser-drag-icon') self.imarea.show() self.vscroll.show() self.imarea.grab_focus()
def update_folder_view( self, changed_from, selected_file=None, show_snapshots=False): #0 - places, 1 - folder view, 2 - time_line #update backup time if 2 == changed_from: iter = self.list_time_line.get_selection().get_selected()[1] self.snapshot_id = self.store_time_line.get_value(iter, 1) #self.lblTime.set_markup( "<b>%s</b>" % backupTime ) tooltip = '' text = '' if len(self.snapshot_id) > 1: name = self.snapshots.get_snapshot_display_id(self.snapshot_id) text = _('Snapshot: %s') % name tooltip = _('View the snapshot made at %s') % name else: tooltip = _('View the current disk content') text = _('Now') self.lbl_snapshot.set_markup(' <b>' + text + '</b> ') self.lbl_snapshot.set_tooltip_text(tooltip) #update selected places item if 1 == changed_from: iter = self.store_places.get_iter_first() while not iter is None: place_path = self.store_places.get_value(iter, 1) if place_path == self.folder_path: break iter = self.store_places.iter_next(iter) if iter is None: self.list_places.get_selection().unselect_all() else: self.list_places.get_selection().select_iter(iter) #update folder view full_path = self.snapshots.get_snapshot_path_to( self.snapshot_id, self.folder_path) all_files = [] files = [] folder_exists = os.path.isdir(full_path) if folder_exists: try: all_files = os.listdir(full_path) all_files.sort() except: pass files = [] for file in all_files: if len(file) == 0: continue if not self.show_hidden_files: if file[0] == '.': continue if file[-1] == '~': continue path = os.path.join(full_path, file) file_size = -1 file_date = -1 try: file_stat = os.stat(path) file_size = file_stat[stat.ST_SIZE] file_date = file_stat[stat.ST_MTIME] except: pass #format size file_size_int = file_size if file_size_int < 0: file_size_int = 0 if file_size < 0: file_size = 'unknown' elif file_size < 1024: file_size = str(file_size) + ' bytes' elif file_size < 1024 * 1024: file_size = file_size / 1024 file_size = str(file_size) + ' KB' elif file_size < 1024 * 1024 * 1024: file_size = file_size / (1024 * 1024) file_size = str(file_size) + ' MB' else: file_size = file_size / (1024 * 1024 * 1024) file_size = str(file_size) + ' GB' #format date if file_date < 0: file_date = 'unknown' else: file_date = datetime.datetime.fromtimestamp( file_date).isoformat(' ') if os.path.isdir(path): files.append([ file, file_size, file_date, self.icon_names.get_icon(path), file_size_int, 0 ]) else: files.append([ file, file_size, file_date, self.icon_names.get_icon(path), file_size_int, 1 ]) #try to keep old selected file if selected_file is None: selected_file = '' iter = self.list_folder_view.get_selection().get_selected()[1] if not iter is None: selected_file = self.store_folder_view.get_value(iter, 1) self.list_folder_view_widget.show() self.list_folder_view_shadow.hide() else: self.list_folder_view_widget.hide() self.list_folder_view_shadow.show() #populate the list self.store_folder_view.clear() selected_iter = None for item in files: rel_path = os.path.join(self.folder_path, item[0]) new_iter = self.store_folder_view.append([ item[0], rel_path, item[3], item[5], item[1], item[2], item[4] ]) if selected_file == rel_path: selected_iter = new_iter #select old item or the first item if len(files) > 0: if selected_iter is None: selected_iter = self.store_folder_view.get_iter_first() self.list_folder_view.get_selection().select_iter(selected_iter) self.list_folder_view.drag_source_set( gtk.gdk.BUTTON1_MASK | gtk.gdk.BUTTON3_MASK, gtk.target_list_add_uri_targets(), gtk.gdk.ACTION_COPY) else: self.list_folder_view.drag_source_unset() #update folderup button state self.glade.get_widget('btn_folder_up').set_sensitive( len(self.folder_path) > 1) #update restore button state self.glade.get_widget('btn_restore').set_sensitive( len(self.snapshot_id) > 1 and len(self.store_folder_view) > 0) #update remove/name snapshot buttons self.glade.get_widget('btn_snapshot_name').set_sensitive( len(self.snapshot_id) > 1) self.glade.get_widget('btn_remove_snapshot').set_sensitive( len(self.snapshot_id) > 1) #update copy button state self.glade.get_widget('btn_copy').set_sensitive( len(self.store_folder_view) > 0) #update snapshots button state self.glade.get_widget('btn_snapshots').set_sensitive( len(self.store_folder_view) > 0) #display current folder self.glade.get_widget('edit_current_path').set_text(self.folder_path) #show snapshots if show_snapshots: self.on_btn_snapshots_clicked(None)
""" Defines the data item FileItem, TextItem; each representing one piece of shelf data. """ FILE_TYPE = "file" TEXT_TYPE = "text" DATA_TYPE = "data" TARGET_TYPE_TEXT = 80 TARGET_TYPE_URI_LIST = 81 from gtk import target_list_add_text_targets, target_list_add_uri_targets text_targets = target_list_add_text_targets([], TARGET_TYPE_TEXT) file_targets = target_list_add_uri_targets([], TARGET_TYPE_URI_LIST) def make_item(obj, type): if type == FILE_TYPE: item = FileItem(obj) else: item = TextItem(obj) return item class Item (object): maxtiplen = 512 def __init__(self, obj, type): self.object = obj self.type = type def get_type(self):
def update_folder_view( self, changed_from, selected_file = None, show_snapshots = False ): #0 - places, 1 - folder view, 2 - time_line #update backup time if 2 == changed_from: iter = self.list_time_line.get_selection().get_selected()[1] self.snapshot_id = self.store_time_line.get_value( iter, 1 ) #self.lblTime.set_markup( "<b>%s</b>" % backupTime ) tooltip = '' text = '' if len( self.snapshot_id ) > 1: name = self.snapshots.get_snapshot_display_id( self.snapshot_id ) text = _('Snapshot: %s') % name tooltip = _('View the snapshot made at %s') % name else: tooltip = _('View the current disk content') text = _('Now') self.lbl_snapshot.set_markup( ' <b>' + text + '</b> ' ) self.lbl_snapshot.set_tooltip_text( tooltip ) #update selected places item if 1 == changed_from: iter = self.store_places.get_iter_first() while not iter is None: place_path = self.store_places.get_value( iter, 1 ) if place_path == self.folder_path: break iter = self.store_places.iter_next( iter ) if iter is None: self.list_places.get_selection().unselect_all() else: self.list_places.get_selection().select_iter( iter ) #update folder view full_path = self.snapshots.get_snapshot_path_to( self.snapshot_id, self.folder_path ) all_files = [] files = [] folder_exists = os.path.isdir( full_path ) if folder_exists: try: all_files = os.listdir( full_path ) all_files.sort() except: pass files = [] for file in all_files: if len( file ) == 0: continue if not self.show_hidden_files: if file[ 0 ] == '.': continue if file[ -1 ] == '~': continue path = os.path.join( full_path, file ) file_size = -1 file_date = -1 try: file_stat = os.stat( path ) file_size = file_stat[stat.ST_SIZE] file_date = file_stat[stat.ST_MTIME] except: pass #format size file_size_int = file_size if file_size_int < 0: file_size_int = 0 if file_size < 0: file_size = 'unknown' elif file_size < 1024: file_size = str( file_size ) + ' bytes' elif file_size < 1024 * 1024: file_size = file_size / 1024 file_size = str( file_size ) + ' KB' elif file_size < 1024 * 1024 * 1024: file_size = file_size / ( 1024 * 1024 ) file_size = str( file_size ) + ' MB' else: file_size = file_size / ( 1024 * 1024 * 1024 ) file_size = str( file_size ) + ' GB' #format date if file_date < 0: file_date = 'unknown' else: file_date = datetime.datetime.fromtimestamp(file_date).isoformat(' ') if os.path.isdir( path ): files.append( [ file, file_size, file_date, self.icon_names.get_icon(path), file_size_int, 0 ] ) else: files.append( [ file, file_size, file_date, self.icon_names.get_icon(path), file_size_int, 1 ] ) #try to keep old selected file if selected_file is None: selected_file = '' iter = self.list_folder_view.get_selection().get_selected()[1] if not iter is None: selected_file = self.store_folder_view.get_value( iter, 1 ) self.list_folder_view_widget.show() self.list_folder_view_shadow.hide() else: self.list_folder_view_widget.hide() self.list_folder_view_shadow.show() #populate the list self.store_folder_view.clear() selected_iter = None for item in files: rel_path = os.path.join( self.folder_path, item[0] ) new_iter = self.store_folder_view.append( [ item[0], rel_path, item[3], item[5], item[1], item[2], item[4] ] ) if selected_file == rel_path: selected_iter = new_iter #select old item or the first item if len( files ) > 0: if selected_iter is None: selected_iter = self.store_folder_view.get_iter_first() self.list_folder_view.get_selection().select_iter( selected_iter ) self.list_folder_view.drag_source_set( gtk.gdk.BUTTON1_MASK | gtk.gdk.BUTTON3_MASK, gtk.target_list_add_uri_targets(), gtk.gdk.ACTION_COPY ) else: self.list_folder_view.drag_source_unset() #update folderup button state self.glade.get_widget( 'btn_folder_up' ).set_sensitive( len( self.folder_path ) > 1 ) #update restore button state self.glade.get_widget( 'btn_restore' ).set_sensitive( len( self.snapshot_id ) > 1 and len( self.store_folder_view ) > 0 ) #update remove/name snapshot buttons self.glade.get_widget( 'btn_snapshot_name' ).set_sensitive( len( self.snapshot_id ) > 1 ) self.glade.get_widget( 'btn_remove_snapshot' ).set_sensitive( len( self.snapshot_id ) > 1 ) #update copy button state self.glade.get_widget( 'btn_copy' ).set_sensitive( len( self.store_folder_view ) > 0 ) #update snapshots button state self.glade.get_widget( 'btn_snapshots' ).set_sensitive( len( self.store_folder_view ) > 0 ) #display current folder self.glade.get_widget( 'edit_current_path' ).set_text( self.folder_path ) #show snapshots if show_snapshots: self.on_btn_snapshots_clicked( None )