class DirectoryItem(GalleryItem): def __init__(self, item, size): GalleryItem.__init__(self, item, size) self.thumbnail = DirectoryThumbnail(item) def initial_data(self): unknown_icon = GTKIconImage(gtk.STOCK_MISSING_IMAGE, self.size) return (self.thumbnail.get_mixed_thumbnail(unknown_icon, self.size), os.path.basename(self.item), self.item) def final_data(self): return (self.thumbnail.get_pixbuf_at_size(self.size, self.size), "%s\n<span size='small'>%s</span>" % \ (os.path.basename(self.item), "%d dirs, %d files" % self.thumbnail.get_items_count()), self.item) def on_selected(self, gallery): gallery.on_dir_selected(self.item)
def __init__(self, item, size): GalleryItem.__init__(self, item, size) self.thumbnail = DirectoryThumbnail(item)
def __init__(self, title, parent, dirname, last_targets, on_file_selected, on_dir_selected, dir_selector = False, columns = 3, thumb_size = 256, quick_thumb_size = 32, width = 600, height = 600, quick_width = 300): self.on_file_selected_cb = on_file_selected self.on_dir_selected_cb = on_dir_selected self.dir_selector = dir_selector self.thumb_size = thumb_size self.window = gtk.Window() self.window.set_position(gtk.WIN_POS_CENTER) self.window.set_resizable(False) self.window.set_modal(True) self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) self.window.set_transient_for(parent) self.window.connect("key_press_event", self.on_key_press_event) # Main HBox of the window hbox = gtk.HBox(False, 5) self.window.add(hbox) # Left pane (quick access) vbox = gtk.VBox(False, 5) hbox.pack_start(vbox, True, True, 0) store = gtk.ListStore(gtk.gdk.Pixbuf, str, str) store.append((GTKIconImage(gtk.STOCK_HARDDISK, quick_thumb_size).get_pixbuf(), "File System", "/")) home = os.path.realpath(os.path.expanduser("~")) store.append((GTKIconImage(gtk.STOCK_HOME, quick_thumb_size).get_pixbuf(), "Home", home)) for home_dir in ["Downloads", "Documents", "Pictures", "Videos", "Dropbox", "Torrents"]: path = os.path.join(home, home_dir) if not os.path.isdir(path): continue thumb = DirectoryThumbnail(path) store.append((thumb.get_pixbuf_at_size(quick_thumb_size, quick_thumb_size), home_dir, path)) for directory in last_targets: thumb = DirectoryThumbnail(directory) store.append((thumb.get_pixbuf_at_size(quick_thumb_size, quick_thumb_size), os.path.basename(directory), directory)) treeview = gtk.TreeView(store) treeview.set_headers_visible(False) treeview.connect_after("cursor-changed", self.on_cursor_changed) renderer = gtk.CellRendererPixbuf() column = gtk.TreeViewColumn("Icon", renderer, pixbuf=0) treeview.append_column(column) renderer = gtk.CellRendererText() column = gtk.TreeViewColumn("Path", renderer, text=1) treeview.append_column(column) scrolled = gtk.ScrolledWindow() scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrolled.add_with_viewport(treeview) scrolled.set_size_request(quick_width, height) vbox.pack_start(scrolled, True, True, 0) # Right pane (location, iconview) vbox = gtk.VBox(False, 5) hbox.pack_start(vbox, True, True, 0) # Toolbar toolbar = gtk.Toolbar() toolbar.set_style(gtk.TOOLBAR_BOTH_HORIZ) vbox.pack_start(toolbar, False, False, 0) button = gtk.ToolButton(gtk.STOCK_GO_UP) button.set_label("Go up") button.connect("clicked", self.on_go_up) button.set_is_important(True) toolbar.insert(button, -1) self.go_up = button button = gtk.ToolButton(gtk.STOCK_ADD) button.set_label("New folder") button.connect("clicked", self.on_new_folder) button.set_is_important(True) toolbar.insert(button, -1) button = gtk.ToolButton(gtk.STOCK_OPEN) button.set_label("Open Nautilus") button.connect("clicked", self.on_open_nautilus) button.set_is_important(True) toolbar.insert(button, -1) button = gtk.ToolButton(gtk.STOCK_REFRESH) button.connect("clicked", self.on_refresh) button.set_is_important(True) toolbar.insert(button, -1) # "Location"/"Filter" bar location_bar = gtk.HBox(False, 5) vbox.pack_start(location_bar, False, False, 0) label = gtk.Label() label.set_text("Location:") location_bar.pack_start(label, False, False, 0) self.location_entry = gtk.Entry() self.location_entry.connect("activate", self.on_location_entry_activate) location_bar.pack_start(self.location_entry, True, True, 0) self.filter_entry = gtk.Entry() self.filter_entry.connect("activate", self.on_filter_entry_activate) location_bar.pack_end(self.filter_entry, False, False, 0) label = gtk.Label() label.set_text("Filter:") location_bar.pack_end(label, False, False, 0) # Iconview self.iconview = gtk.IconView() self.iconview.set_pixbuf_column(0) self.iconview.set_markup_column(1) self.iconview.set_tooltip_column(2) self.iconview.set_selection_mode(gtk.SELECTION_SINGLE) self.iconview.set_item_width(self.thumb_size) self.iconview.set_columns(columns) self.iconview.connect("selection-changed", self.on_selection_changed) scrolled = gtk.ScrolledWindow() scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrolled.add_with_viewport(self.iconview) scrolled.set_size_request(int((thumb_size * 1.06) * columns), height) vbox.pack_start(scrolled, True, True, 0) # Buttonbar buttonbar = gtk.HBox(False, 0) self.info_label = gtk.Label() buttonbar.pack_start(self.info_label, False, False, 5) button = gtk.Button(stock=gtk.STOCK_OK) button.set_relief(gtk.RELIEF_NONE) button.connect("clicked", self.on_ok_clicked) buttonbar.pack_end(button, False, False, 5) button = gtk.Button(stock=gtk.STOCK_CANCEL) button.set_relief(gtk.RELIEF_NONE) button.connect("clicked", self.on_cancel_clicked) buttonbar.pack_end(button, False, False, 0) self.recursive_check = gtk.CheckButton(label="Recursive") self.recursive_check.set_active(False) self.recursive_check.set_sensitive(not dir_selector) buttonbar.pack_end(self.recursive_check, False, False, 0) vbox.pack_start(buttonbar, False, False, 5) # Enable icons in buttons: settings = gtk.settings_get_default() settings.props.gtk_button_images = True # Data initialization: self.loader = Worker() self.loader.start() self.curdir = os.path.realpath(os.path.expanduser(dirname)) self.last_filter = "" self.items = []