示例#1
0
 def __init__(self, history_cls):
     """"""
     gtk.VBox.__init__(self)
     #Dialog.__init__(self)
     #self.set_transient_for(parent)
     #self.set_title("History")
     #self.set_size_request(550, 260)
     
     #self.__parent = parent
     self.history_cls = history_cls
     
     self.limit = 50
     self.offset = 0
     
     hbox = gtk.HBox(False, 10)
     self.search_entry = gtk.Entry()
     self.search_entry.add_events(gtk.gdk.KEY_RELEASE_MASK)
     self.search_entry.set_width_chars(25) #entry width
     #self.search_entry.set_size_request(-1, 35)
     self.search_entry.set_inner_border(gtk.Border(3, 3, 6, 6))
     self.search_entry.set_activates_default(True)
     self.search_entry.connect("activate", self.on_search)
     hbox.pack_start(self.search_entry, False, False)
     button = gtk.Button(_("Search"))
     button.set_size_request(80, 35)
     button.connect("clicked", self.on_search)
     hbox.pack_start(button, False, False)
     
     #self.vbox.pack_start(hbox, False, False)
     self.pack_start(hbox, False, False)
     
     
     self.button_pre = gtk.Button(_("Previous"))
     self.button_pre.set_size_request(-1, 25)
     self.button_pre.connect("clicked", self.on_previous)
     #self.vbox.pack_start(self.button_pre, False)
     self.pack_start(self.button_pre, False)
     
     scroll = gtk.ScrolledWindow()
     scroll.set_shadow_type(gtk.SHADOW_ETCHED_IN)
     scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
     
     self.store = gtk.ListStore(str, str, str, str, str, str)#modelo de columnas. (4 columnas de strings y 1 booleana)
     
     #arma el cuadro con los items
     self.treeView = gtk.TreeView(self.store)
     self.treeView.set_rules_hint(True) #turna el color de los items, creo.
     self.treeView.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
     scroll.add(self.treeView)
     
     #Columns item names.
     col_list = [_("File Name"), _("Size"), _("Complete"), _("Date Time"), _("Link"), _("Directory")] #podria usar un frozenset, no se si lo soporta cython.
     self.create_columns(col_list)
     
     #self.vbox.pack_start(scroll)
     self.pack_start(scroll)
     
     self.button_next = gtk.Button(_("Next"))
     self.button_next.set_size_request(-1, 25)
     self.button_next.connect("clicked", self.on_load_items)
     #self.vbox.pack_start(self.button_next, False)
     self.pack_start(self.button_next, False)
     
     
     #Context Menu (pop-up)
     open_folder_item = (gtk.MenuItem(), _("Open destination folder"), self.on_open_folder)
     copy_link_item = (gtk.MenuItem(), _("Copy link"), self.on_copy_link)
     
     self.menu_items = (open_folder_item, copy_link_item)
     self.ctx_menu = Menu(self.menu_items) #items selected
     self.treeView.connect("button-press-event", self.on_context_menu)
     
     
     self.on_load_items()
     
     #self.connect("response", self.on_close)
     
     self.show_all()
示例#2
0
class HistoryTab(gtk.VBox):
    """"""
    def __init__(self, history_cls):
        """"""
        gtk.VBox.__init__(self)
        #Dialog.__init__(self)
        #self.set_transient_for(parent)
        #self.set_title("History")
        #self.set_size_request(550, 260)
        
        #self.__parent = parent
        self.history_cls = history_cls
        
        self.limit = 50
        self.offset = 0
        
        hbox = gtk.HBox(False, 10)
        self.search_entry = gtk.Entry()
        self.search_entry.add_events(gtk.gdk.KEY_RELEASE_MASK)
        self.search_entry.set_width_chars(25) #entry width
        #self.search_entry.set_size_request(-1, 35)
        self.search_entry.set_inner_border(gtk.Border(3, 3, 6, 6))
        self.search_entry.set_activates_default(True)
        self.search_entry.connect("activate", self.on_search)
        hbox.pack_start(self.search_entry, False, False)
        button = gtk.Button(_("Search"))
        button.set_size_request(80, 35)
        button.connect("clicked", self.on_search)
        hbox.pack_start(button, False, False)
        
        #self.vbox.pack_start(hbox, False, False)
        self.pack_start(hbox, False, False)
        
        
        self.button_pre = gtk.Button(_("Previous"))
        self.button_pre.set_size_request(-1, 25)
        self.button_pre.connect("clicked", self.on_previous)
        #self.vbox.pack_start(self.button_pre, False)
        self.pack_start(self.button_pre, False)
        
        scroll = gtk.ScrolledWindow()
        scroll.set_shadow_type(gtk.SHADOW_ETCHED_IN)
        scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        
        self.store = gtk.ListStore(str, str, str, str, str, str)#modelo de columnas. (4 columnas de strings y 1 booleana)
        
        #arma el cuadro con los items
        self.treeView = gtk.TreeView(self.store)
        self.treeView.set_rules_hint(True) #turna el color de los items, creo.
        self.treeView.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
        scroll.add(self.treeView)
        
        #Columns item names.
        col_list = [_("File Name"), _("Size"), _("Complete"), _("Date Time"), _("Link"), _("Directory")] #podria usar un frozenset, no se si lo soporta cython.
        self.create_columns(col_list)
        
        #self.vbox.pack_start(scroll)
        self.pack_start(scroll)
        
        self.button_next = gtk.Button(_("Next"))
        self.button_next.set_size_request(-1, 25)
        self.button_next.connect("clicked", self.on_load_items)
        #self.vbox.pack_start(self.button_next, False)
        self.pack_start(self.button_next, False)
        
        
        #Context Menu (pop-up)
        open_folder_item = (gtk.MenuItem(), _("Open destination folder"), self.on_open_folder)
        copy_link_item = (gtk.MenuItem(), _("Copy link"), self.on_copy_link)
        
        self.menu_items = (open_folder_item, copy_link_item)
        self.ctx_menu = Menu(self.menu_items) #items selected
        self.treeView.connect("button-press-event", self.on_context_menu)
        
        
        self.on_load_items()
        
        #self.connect("response", self.on_close)
        
        self.show_all()
        #self.run()
    
    def on_context_menu(self, widget, event):
        """
        taken from list_gui
        """
        if event.button == 3: #right click
            selection = self.treeView.get_selection()
            model, rows = selection.get_selected_rows()
            if not rows or len(rows) == 1:
                try:
                    path, col, cellx, celly = self.treeView.get_path_at_pos(int(event.x), int(event.y))
                except TypeError: #none selected.
                        is_sensitive = False
                        selection.unselect_all()
                else: #one selected.
                    is_sensitive = True
                    self.treeView.grab_focus()
                    selection.select_path(path)
            else:
                is_sensitive = True
            
            [item[WIDGET].set_sensitive(is_sensitive) for item in self.menu_items]
            self.ctx_menu.popup(None, None, None, event.button, event.time)
            
            if len(rows) > 1: #stop signal (so the rows remain selected)
                return True
    
    def on_open_folder(self, widget):
        """"""
        model, rows = self.treeView.get_selection().get_selected_rows()
        if rows:
            paths_list = []
            #items_list = self.download_manager.get_download_items([model[row][0] for row in rows])
            
            for row in rows:
                folder_path = model[row][-1]
                if folder_path not in paths_list:
                    threading.Thread(group=None, target=misc.open_folder_window, name=None, args=(folder_path, )).start()
                    paths_list.append(folder_path)
    
    def on_copy_link(self, widget):
        """"""
        model, rows = self.treeView.get_selection().get_selected_rows()
        if rows:
            links_list = [model[row][-2] for row in rows if model[row][-2] is not None]
            clipboard = gtk.Clipboard()
            clipboard.set_text('\n'.join(links_list))
    
    def create_columns(self, col_list):
        """"""
        for item in col_list:
            id_col = col_list.index(item)
            rendererText = gtk.CellRendererText() #pide el primer item que ira en la columna (text=0) o segundo, etc...
            rendererText.set_property("ellipsize", 3) #2= middle, 3 = right, 1 = left
            column = gtk.TreeViewColumn(item, rendererText, text=id_col)
            #column.set_sort_column_id(id_col) #ordenar columna
            column.set_resizable(True)
            column.set_expand(True)
            column.set_min_width(1)
            if item == _("File Name"):
                rendererText.set_property("ellipsize", 2)
            self.treeView.append_column(column)
    
    def on_search(self, widget):
        """"""
        self.offset = 0
        self.on_load_items()
    
    def on_previous(self, widget):
        """"""
        self.offset -= self.limit * 2
        self.on_load_items()
    
    def on_load_items(self, widget=None): #TEST when the items are 50, 51
        """"""
        self.validate_request()
        self.button_next.set_sensitive(True)
        self.button_pre.set_sensitive(True)
        match_term = self.search_entry.get_text()
        data_list = self.history_cls.get_data(self.offset, self.limit, match_term)
        self.store.clear()
        [self.store.append((name, misc.size_format(size), misc.size_format(complete), date_.strftime("%d-%m-%y %H:%M"), link, path))
            for id, name, link, size, complete, path, date_ in data_list]
        if len(data_list) < self.limit:
            self.button_next.set_sensitive(False)
        if self.offset == 0:
            self.button_pre.set_sensitive(False)
        if data_list:
            self.offset += self.limit
    
    def set_limit(self, limit):
        self.new_limit = limit

    def validate_request(self):
        if self.offset < 0:
            self.offset = 0
        if self.limit <= 0:
            self.limit = 1

    def on_close(self, widget=None, other=None):
        """"""
        self.destroy()