def __init__(self, downloads, parent=None): QVBoxLayout.__init__(self) self.setContentsMargins(0, 0, 0, 0) self.setSpacing(5) self.downloads = downloads self.parent = parent self.tree_view = QTreeView(parent) # self.tree_view.setContextMenuPolicy(Qt.CustomContextMenu) self.tree_view.customContextMenuRequested.connect(self.context_menu) # #listview look self.tree_view.setWordWrap(True) #search textElideMode self.tree_view.setRootIsDecorated(False) self.tree_view.setIndentation(0) self.tree_view.setAlternatingRowColors(True) # self.items = [] self.rows_buffer = {} #{id_item: row_obj, } #self.items = [[True, "1", "11", "t5est", "t3est"], [True, "1", "11", "t5est", "t3est"], [True, "1", "11", "t5est", "t3est"]] bool_cols = [ 1, ] headers = [ "hidden_id_item", "", _("Status"), _("File Name"), _("Host"), _("Size"), _("Status Message") ] # self.__model = SimpleListModel(headers, self.items, bool_cols) self.tree_view.setModel(self.__model) self.addWidget(self.tree_view) # self.tree_view.setColumnHidden(0, True) self.tree_view.setColumnWidth(1, 27) self.tree_view.header().setResizeMode(1, QHeaderView.Fixed) hbox = QHBoxLayout() hbox.setContentsMargins(0, 0, 0, 0) hbox.setSpacing(10) self.cb = QComboBox() #self.cb.setFixedWidth(100) self.cb.setEditable(True) self.cb.setFixedHeight(35) self.cb.setMinimumWidth(1) cb_view = self.cb.view() cb_view.setAlternatingRowColors(True) # self.paths_list = conf.get_save_dl_paths() if not self.paths_list: self.cb.addItem(cons.DLFOLDER_PATH) else: [self.cb.addItem(path) for path in reversed(self.paths_list)] # hbox.addWidget(self.cb) btn_examine = QPushButton('...') btn_examine.clicked.connect(self.on_examine) btn_examine.setFixedHeight(35) btn_examine.setMaximumWidth(80) hbox.addWidget(btn_examine) hbox.addSpacing(40) #index, size btn_download = QPushButton() btn_download.setIcon(media.get_icon(media.DOWN, media.MEDIUM)) btn_download.setIconSize(QSize(24, 24)) btn_download.clicked.connect(self.on_download_selected) btn_download.setFixedHeight(35) btn_download.setMaximumWidth(40) hbox.addWidget(btn_download) btn_add = QPushButton() btn_add.setIcon(media.get_icon(media.ADD, media.MEDIUM)) btn_add.setIconSize(QSize(24, 24)) btn_add.clicked.connect(self.on_add_links) btn_add.setFixedHeight(35) btn_add.setMaximumWidth(40) hbox.addWidget(btn_add) self.menu = QMenu(parent) import_action = self.menu.addAction(_("Import Container"), self.on_import_container) self.menu.addSeparator() recheck_action = self.menu.addAction(_("Re-check"), self.on_recheck) clear_action = self.menu.addAction(_("Clear list"), self.on_clear_list) # btn_menu = QPushButton() btn_menu.setMenu(self.menu) btn_menu.setFixedHeight(35) btn_menu.setMaximumWidth(22) btn_menu.setFlat(True) hbox.addWidget(btn_menu) self.addLayout(hbox) #update list parent.idle_timeout(1000, self.update)
def __init__(self, list_gui, parent=None): gtk.VBox.__init__(self) self.__parent = parent self.list_gui = list_gui self.update_flag = False self.active_tab_flag = True #Estructura: #-------------------vbox1_start--------------- #-------------------hbox4[halign1-left + halign4-right]----------------------- #-------------------vbox1_end---------------- #detallado: #-------------------vbox1_start--------------- #-------------------hbox4_start--------------- #-------------------halign1_start------------- #-------------------hbox1-----------------------(save to field + examine button, left aligned) #-------------------halign1_end-------------- #-------------------halign4_start------------(add links button, etc, right aligned) #-------------------halign2_start------------- #-------------------hbox2----------------------- #-------------------halign2_end-------------- #-------------------halign4_end-------------- #-------------------hbox4_end---------------- #-------------------vbox1_end---------------- #containers-separators. #self.vbox no puede ser cambiado en gtk.Dialog. Crear variable vbox y luego meterla en self.vbox. vbox1 = gtk.VBox( False, 5 ) #gtk.VBox(homogeneous=False, spacing=0) homogeneous: mismo espacio cada hijo, spacing: espacio horizontal entre hijos. #vbox1_start #Check links field. #------------------------------------------- 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, bool, 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. scroll.add(self.treeView) #Columns item names. col_list = [ "hidden_id_item", _("Add"), _("Status"), _("File Name"), _("Host"), _("Size"), _("Status Message") ] #podria usar un frozenset, no se si lo soporta cython. self.create_columns(col_list) vbox1.pack_start(scroll) #Context Menu (pop-up) dl_selected_item = (gtk.MenuItem(), _("Download Selected"), self.on_accept) recheck_item = (gtk.MenuItem(), _("Re-check"), self.on_recheck) clear_item = (gtk.MenuItem(), _("Clear list"), self.on_clear_list) menu_items = (dl_selected_item, None, recheck_item, clear_item) self.ctx_menu = Menu(menu_items) #items selected self.treeView.connect("button-press-event", self.on_context_menu) #Select file field. #------------------------------------------- #containers-separators. hbox1 = gtk.HBox(False, 10) #file field and button examine. #gtk.HBox(homogeneous=False, spacing=0) homogeneous: mismo espacio cada hijo, spacing: espacio horizontal entre hijos. hbox2 = gtk.HBox(False, 10) #buttons cancel and accept. #hbox1 #label_save_to = gtk.Label("Save to:") #hbox1.add(label_save_to) self.paths_liststore = gtk.ListStore(str) cb_entry = gtk.ComboBoxEntry(self.paths_liststore) self.entry = cb_entry.child self.entry.add_events(gtk.gdk.KEY_RELEASE_MASK) self.entry.set_width_chars(35) #entry width self.paths_list = conf.get_save_dl_paths() self.load_save_paths() if not self.paths_list: default_path = cons.DLFOLDER_PATH else: default_path = self.paths_list[-1] #.decode(sys.getfilesystemencoding()) self.entry.set_text( default_path.decode("utf-8") ) #default entry path. Cuando cree el ejecutable, se puede crear una ruta al directorio asi: sys.path.append(path) hbox1.add(cb_entry) button = gtk.Button(_("...")) button.set_size_request(80, 35) button.connect("clicked", self.save_folder) hbox1.add(button) halign1 = gtk.Alignment( 0, 0, 0, 0 ) #horizontal container. left liagment. #vertical container (estara vacio). gtk.Alignment(xalign=0.0, yalign=0.0, xscale=0.0, yscale=0.0) #xalign: espacio libre a la izquierda del hijo. 0.0 = sin espacio arriba. 1.0 = todo el espacio arriba. #yalign: espacio libre vertical arriba del hijo. 0.0 = sin espacio arriba. 1.0 = todo el espacio arriba. halign1.add(hbox1) down_arrow_image = media.get_image(media.DOWN, media.MEDIUM) download_selected_button = gtk.Button() download_selected_button.add(down_arrow_image) #self.button2.set_size_request(180, 35) download_selected_button.connect("clicked", self.on_accept) add_image = media.get_image(media.ADD, media.MEDIUM) add_button = gtk.Button() add_button.add(add_image) #button.set_size_request(80, 35) add_button.connect("clicked", self.on_add_links) icon_down = media.get_image(media.ARROW_DOWN, media.SMALL) #icon_down = gtk.image_new_from_file(os.path.join(cons.APP_PATH, "media", "arrow_down9.png")) #drop_down_image = gtk.image_new_from_stock(gtk.STOCK_GO_DOWN, gtk.ICON_SIZE_BUTTON) drop_down_button = PopupMenuButton(image=icon_down) #gtk.Button() drop_down_button.set_size_request(20, 35) import_item = (gtk.MenuItem(), _("Import Container"), self.on_import_container) recheck_item = (gtk.MenuItem(), _("Re-check"), self.on_recheck) clear_item = (gtk.MenuItem(), _("Clear list"), self.on_clear_list) menu_items = (import_item, None, recheck_item, clear_item) menu = Menu(menu_items) #items selected drop_down_button.set_menu(menu) #button5 = gtk.Button(_("Re-check")) #button5.set_size_request(80, 35) #button5.connect("clicked", self.on_recheck) halign4 = gtk.Alignment(1, 0, 0, 0) #horizontal container. right liagment. hbox2.add(download_selected_button) hbox2.add(add_button) hbox2.add(drop_down_button) halign4.add(hbox2) hbox4 = gtk.HBox(False, 0) #two aligment widgets hbox4.add(halign1) hbox4.add(halign4) vbox1.pack_start( hbox4, False, False) #pack_start(child, expand=True, fill=True, padding=0) #------------------------------------------- #vbox1_end #entry.get_text() #checking thread stuff. self.cancelled = False #si se cancelo el checkeo, terminar thread. #self.th = threading.Thread(group=None, target=self.checking_links, name=None).start() #ckeck links. self.pack_start(vbox1)
def __init__(self, list_gui, parent=None): gtk.VBox.__init__(self) self.__parent = parent self.list_gui = list_gui self.update_flag = False self.active_tab_flag = True #Estructura: #-------------------vbox1_start--------------- #-------------------hbox4[halign1-left + halign4-right]----------------------- #-------------------vbox1_end---------------- #detallado: #-------------------vbox1_start--------------- #-------------------hbox4_start--------------- #-------------------halign1_start------------- #-------------------hbox1-----------------------(save to field + examine button, left aligned) #-------------------halign1_end-------------- #-------------------halign4_start------------(add links button, etc, right aligned) #-------------------halign2_start------------- #-------------------hbox2----------------------- #-------------------halign2_end-------------- #-------------------halign4_end-------------- #-------------------hbox4_end---------------- #-------------------vbox1_end---------------- #containers-separators. #self.vbox no puede ser cambiado en gtk.Dialog. Crear variable vbox y luego meterla en self.vbox. vbox1 = gtk.VBox(False, 5) #gtk.VBox(homogeneous=False, spacing=0) homogeneous: mismo espacio cada hijo, spacing: espacio horizontal entre hijos. #vbox1_start #Check links field. #------------------------------------------- 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, bool, 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. scroll.add(self.treeView) #Columns item names. col_list = ["hidden_id_item", _("Add"), _("Status"), _("File Name"), _("Host"), _("Size"), _("Status Message")] #podria usar un frozenset, no se si lo soporta cython. self.create_columns(col_list) vbox1.pack_start(scroll) #Context Menu (pop-up) dl_selected_item = (gtk.MenuItem(), _("Download Selected"), self.on_accept) recheck_item = (gtk.MenuItem(), _("Re-check"), self.on_recheck) clear_item = (gtk.MenuItem(), _("Clear list"), self.on_clear_list) menu_items = (dl_selected_item, None, recheck_item, clear_item) self.ctx_menu = Menu(menu_items) #items selected self.treeView.connect("button-press-event", self.on_context_menu) #Select file field. #------------------------------------------- #containers-separators. hbox1 = gtk.HBox(False, 10) #file field and button examine. #gtk.HBox(homogeneous=False, spacing=0) homogeneous: mismo espacio cada hijo, spacing: espacio horizontal entre hijos. hbox2 = gtk.HBox(False, 10) #buttons cancel and accept. #hbox1 #label_save_to = gtk.Label("Save to:") #hbox1.add(label_save_to) self.paths_liststore = gtk.ListStore(str) cb_entry = gtk.ComboBoxEntry(self.paths_liststore) self.entry = cb_entry.child self.entry.add_events(gtk.gdk.KEY_RELEASE_MASK) self.entry.set_width_chars(35) #entry width self.paths_list = conf.get_save_dl_paths() self.load_save_paths() if not self.paths_list: default_path = cons.DLFOLDER_PATH else: default_path = self.paths_list[-1] #.decode(sys.getfilesystemencoding()) self.entry.set_text(default_path.decode("utf-8")) #default entry path. Cuando cree el ejecutable, se puede crear una ruta al directorio asi: sys.path.append(path) hbox1.add(cb_entry) button = gtk.Button(_("...")) button.set_size_request(80, 35) button.connect("clicked", self.save_folder) hbox1.add(button) halign1 = gtk.Alignment(0, 0, 0, 0) #horizontal container. left liagment. #vertical container (estara vacio). gtk.Alignment(xalign=0.0, yalign=0.0, xscale=0.0, yscale=0.0) #xalign: espacio libre a la izquierda del hijo. 0.0 = sin espacio arriba. 1.0 = todo el espacio arriba. #yalign: espacio libre vertical arriba del hijo. 0.0 = sin espacio arriba. 1.0 = todo el espacio arriba. halign1.add(hbox1) down_arrow_image = media.get_image(media.DOWN, media.MEDIUM) download_selected_button = gtk.Button() download_selected_button.add(down_arrow_image) #self.button2.set_size_request(180, 35) download_selected_button.connect("clicked", self.on_accept) add_image = media.get_image(media.ADD, media.MEDIUM) add_button = gtk.Button() add_button.add(add_image) #button.set_size_request(80, 35) add_button.connect("clicked", self.on_add_links) icon_down = media.get_image(media.ARROW_DOWN, media.SMALL) #icon_down = gtk.image_new_from_file(os.path.join(cons.APP_PATH, "media", "arrow_down9.png")) #drop_down_image = gtk.image_new_from_stock(gtk.STOCK_GO_DOWN, gtk.ICON_SIZE_BUTTON) drop_down_button = PopupMenuButton(image=icon_down) #gtk.Button() drop_down_button.set_size_request(20, 35) import_item = (gtk.MenuItem(), _("Import Container"), self.on_import_container) recheck_item = (gtk.MenuItem(), _("Re-check"), self.on_recheck) clear_item = (gtk.MenuItem(), _("Clear list"), self.on_clear_list) menu_items = (import_item, None, recheck_item, clear_item) menu = Menu(menu_items) #items selected drop_down_button.set_menu(menu) #button5 = gtk.Button(_("Re-check")) #button5.set_size_request(80, 35) #button5.connect("clicked", self.on_recheck) halign4 = gtk.Alignment(1, 0, 0, 0) #horizontal container. right liagment. hbox2.add(download_selected_button) hbox2.add(add_button) hbox2.add(drop_down_button) halign4.add(hbox2) hbox4 = gtk.HBox(False, 0) #two aligment widgets hbox4.add(halign1) hbox4.add(halign4) vbox1.pack_start(hbox4, False, False) #pack_start(child, expand=True, fill=True, padding=0) #------------------------------------------- #vbox1_end #entry.get_text() #checking thread stuff. self.cancelled = False #si se cancelo el checkeo, terminar thread. #self.th = threading.Thread(group=None, target=self.checking_links, name=None).start() #ckeck links. self.pack_start(vbox1)
def __init__(self, parent): QVBoxLayout.__init__(self) self.setContentsMargins(0, 0, 0, 0) self.setSpacing(5) self.weak_parent = weakref.ref(parent) self.tree_view = QTreeView(parent) # self.tree_view.setContextMenuPolicy(Qt.CustomContextMenu) self.tree_view.customContextMenuRequested.connect(self.context_menu) # #listview look self.tree_view.setWordWrap(True) #search textElideMode self.tree_view.setRootIsDecorated(False) self.tree_view.setIndentation(0) self.tree_view.setAlternatingRowColors(True) # self.icons_dict = self.get_icons() self.items = [] self.rows_buffer = {} #{id_item: row_obj, } #self.items = [[True, "1", "11", "t5est", "t3est"], [True, "1", "11", "t5est", "t3est"], [True, "1", "11", "t5est", "t3est"]] bool_cols = [1, ] image_cols = [2, ] headers = ["hidden_id_item", "", "", _("File Name"), _("Host"), _("Size"), _("Status Message")] # self.__model = SimpleListModel(headers, self.items, bool_cols, image_cols) self.tree_view.setModel(self.__model) self.addWidget(self.tree_view) # self.tree_view.setColumnHidden(0, True) self.tree_view.setColumnWidth(1, 27) self.tree_view.setColumnWidth(2, 27) self.tree_view.header().setResizeMode(1, QHeaderView.Fixed) hbox = QHBoxLayout() hbox.setContentsMargins(0, 0, 0, 0) hbox.setSpacing(10) self.cb = QComboBox() #self.cb.setFixedWidth(100) self.cb.setEditable(True) self.cb.setFixedHeight(35) self.cb.setMinimumWidth(1) cb_view = self.cb.view() cb_view.setAlternatingRowColors(True) # self.paths_list = conf.get_save_dl_paths() if not self.paths_list: self.cb.addItem(cons.DLFOLDER_PATH) else: [self.cb.addItem(path) for path in reversed(self.paths_list)] # hbox.addWidget(self.cb) btn_examine = QPushButton('...') btn_examine.clicked.connect(self.on_examine) btn_examine.setFixedHeight(35) btn_examine.setMaximumWidth(80) hbox.addWidget(btn_examine) hbox.addSpacing(40) #index, size btn_download = QPushButton() btn_download.setIcon(media.get_icon(media.DOWN, media.MEDIUM)) btn_download.setIconSize(QSize(24, 24)) btn_download.clicked.connect(self.on_download_selected) btn_download.setFixedHeight(35) btn_download.setMaximumWidth(40) hbox.addWidget(btn_download) btn_add = QPushButton() btn_add.setIcon(media.get_icon(media.ADD, media.MEDIUM)) btn_add.setIconSize(QSize(24, 24)) btn_add.clicked.connect(self.on_add_links) btn_add.setFixedHeight(35) btn_add.setMaximumWidth(40) hbox.addWidget(btn_add) self.menu = QMenu(parent) import_action = self.menu.addAction(_("Import Container"), self.on_import_container) self.menu.addSeparator() recheck_action = self.menu.addAction(_("Re-check"), self.on_recheck) clear_action = self.menu.addAction(_("Clear list"), self.on_clear_list) # btn_menu = QPushButton() btn_menu.setMenu(self.menu) btn_menu.setFixedHeight(35) btn_menu.setMaximumWidth(22) btn_menu.setFlat(True) hbox.addWidget(btn_menu) self.addLayout(hbox) #custom signals signals.add_downloads_to_check.connect(self.add_downloads_to_check) #update list parent.idle_timeout(1000, self.update_)