Example #1
0
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)
Example #2
0
 def __init__(self, item, size):
     GalleryItem.__init__(self, item, size)
     self.thumbnail = DirectoryThumbnail(item)
Example #3
0
    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 = []