def __init__(self, fileInfo, _parent = None): """Initializes data for the model.""" self._noteFile = QFileInfo(fileInfo) q = QFileIconProvider() self._icon = q.icon(self._noteFile) self._parent = _parent
def listdir(abs_path, include_conceal=True): provider = QFileIconProvider() try: list_dir = os.listdir(abs_path) except Exception as e: return [] list_dir.sort() file_list = list() for file in list_dir: item_file = Dict() if file.startswith(".") and not include_conceal: continue abs_file_path = os.path.join(abs_path, file) item_file.name = file item_file.type = provider.type(QFileInfo(abs_file_path)) try: mtime = os.path.getmtime(abs_file_path) item_file.last_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(mtime))) except Exception: item_file.last_time = "" try: if item_file.type in ["File Folder", "Folder"]: item_file.size = "" item_file.raw_size = 0 else: size, unit, s = file_size(abs_file_path) item_file.size = str(size) + " " + unit except Exception: item_file.raw_size = 0 item_file.size = "" file_list.append(item_file) Sort_Dict = {1: "type", 2: "name", 3: "last_time", 4: "raw_size"} file_list = sorted(file_list, key=lambda x: x[Sort_Dict[1]], reverse=False) return file_list
def setFileIcon(self, path): "每当txtPath的值改变时,就设置快捷方式的图标" fi = QFileInfo(path) if not fi.exists(): self.shortcutIcon = QIcon(":/images/unknown.png") else: ip = QFileIconProvider() self.shortcutIcon = ip.icon(fi) self.btnFace.setIcon(self.shortcutIcon)
def dragFile(widget, filename, icon=None, dropactions=Qt.CopyAction): """Starts dragging the given local file from the widget.""" if icon is None or icon.isNull(): icon = QFileIconProvider().icon(QFileInfo(filename)) drag = QDrag(widget) data = QMimeData() data.setUrls([QUrl.fromLocalFile(filename)]) drag.setMimeData(data) drag.setPixmap(icon.pixmap(32)) drag.exec_(dropactions)
def update_folder_icon(self, folder_name, folder_path, overlay_file=None): items = self.findItems(folder_name) if items: folder_icon = QFileIconProvider().icon(QFileInfo(folder_path)) folder_pixmap = folder_icon.pixmap(256, 256) if overlay_file: pixmap = CompositePixmap(folder_pixmap, resource(overlay_file)) else: pixmap = CompositePixmap(folder_pixmap) items[0].setIcon(QIcon(pixmap))
def parseLocalFile(self, parent, name, path): if name[0] == '.': return tmp = QTreeWidgetItem(parent) fileInfo = QFileInfo(path) fileIcon = QFileIconProvider() icon = QIcon(fileIcon.icon(fileInfo)) tmp.setIcon(0, QIcon(icon)) tmp.setText(0, name) tmp.setText(1, os.path.split(path)[0])
def get_external_file_icon(): if gui_constants._REFRESH_EXTERNAL_VIEWER: if os.path.exists(gui_constants.GALLERY_EXT_ICO_PATH): os.remove(gui_constants.GALLERY_EXT_ICO_PATH) info = QFileInfo(gui_constants.EXTERNAL_VIEWER_PATH) icon = QFileIconProvider().icon(info) pixmap = icon.pixmap(QSize(32, 32)) pixmap.save(gui_constants.GALLERY_EXT_ICO_PATH, quality=100) gui_constants._REFRESH_EXTERNAL_VIEWER = False return QIcon(gui_constants.GALLERY_EXT_ICO_PATH)
def Update(self, file): # TODO: wtf is this? iconprovider = QFileIconProvider() fileinfo = QFileInfo(str(file)) icon = iconprovider.icon(fileinfo) iconsize = QSize(self.x, self.y) self.widget = QLabel() self.widget.setPixmap(icon.pixmap(iconsize))
def icon_types(_file, icon: bool = False): file_type = os.path.splitext(os.path.split(_file)[1])[1].strip(".") ## set image/video icon if file_type in json.load(open(base_dir + "api/icons.json")).get("image"): return QIcon(_file) ## Default System Icons else: fileInfo = QFileInfo(_file) iconProvider = QFileIconProvider() icon = iconProvider.icon(fileInfo) return icon
def add_item(row, column, item): self.tableWidget_6.setItem( row, column, QtWidgets.QTableWidgetItem(str(item))) self.tableWidget_6.item(row, column).setTextAlignment( Qt.AlignHCenter | Qt.AlignVCenter) if column == 1: file_info = QFileInfo(str(item)) iconProvider = QFileIconProvider() icon = iconProvider.icon(file_info) self.tableWidget_6.item(row, column).setIcon(icon) self.tableWidget_6.item(row, column).setTextAlignment( Qt.AlignLeft | Qt.AlignVCenter)
def _assign_icon(filename, is_dir): if filename.endswith("py"): # py and mpy icon = Icons().tree_python else: iconProvider = QFileIconProvider() if is_dir: fileInfo = iconProvider.Folder else: fileInfo = QFileInfo(filename) icon = iconProvider.icon(fileInfo) return icon
def __init__(self, data_group, res, extended_selection): """Init the class Args: data_group (HDF5 grup): HDF5 group res (qt resolution): size of the app extended_selection (bool): allow multiple selection """ super().__init__() self.root_item = None self.data_group = data_group self.iconProvider = QFileIconProvider() self.res = res self.extended_selection = extended_selection
def __init__(self, name, conn, path, is_dir, size): super(RemoteFileSystemNode, self).__init__(name) self._name = name self._conn = conn self.path = path self._is_dir = is_dir self._populated = not is_dir self._show_hidden_files = False self.size_item = QStandardItem(sizeof_fmt(size) if not is_dir else '') icon_provider = QFileIconProvider() if is_dir: self.setData(True, RemoteFileSystem.ExpandableRole) self.setIcon(icon_provider.icon(QFileIconProvider.Folder)) else: self.setIcon(icon_provider.icon(QFileIconProvider.File))
def data(self, index, role=None): if not index.isValid(): return QVariant() if role == Qt.DisplayRole: item = self.file_items[index.row()] if index.column() == 0: return item.file_name elif index.column() == 1: return item.file_path elif index.column() == 2: return item.file_size elif index.column() == 3: if type(item.start_time) is datetime: return item.start_time.strftime(STR_DATE_TIME_FORMAT) return "-" elif index.column() == 4: if type(item.end_time) is datetime: return item.end_time.strftime(STR_DATE_TIME_FORMAT) return "-" elif index.column() == 5: return item.codec else: return QVariant() elif role == Qt.DecorationRole: item = self.file_items[index.row()] if index.column() == 0: return QFileIconProvider().icon(item.file_info)
def data(self, role=Qt.DisplayRole, *args, **kwargs): if role == Qt.DisplayRole: value = self.collapsed_format(self.value) if isinstance(value, str) and value.isnumeric(): value = int(value) if self.field == 'file': value = os.path.basename(value) return value elif role == Qt.DecorationRole: if self.field == 'file': icon_type = QFileIconProvider.File return QFileIconProvider().icon(icon_type) elif role == Qt.ToolTipRole: if len(self.value) > 1: return json.dumps(self.value) elif role == Qt.EditRole: return json.dumps(self.value) elif role == Qt.FontRole: fontdb = QFontDatabase() if self.field == 'key': return fontdb.systemFont(QFontDatabase.FixedFont) else: return fontdb.systemFont(QFontDatabase.GeneralFont) elif role == Qt.UserRole: return self.value
def __init__(self, rows, columns, parent = None): super(Model, self).__init__(parent) self.services = QIcon(images_dir + '/services.png') self.rc = rows self.cc = columns self.tree = [Node() for node in range(rows)] self.iconProvider = QFileIconProvider()
def file_icon_get(filename: str): ext = os.path.splitext(filename)[-1] type_file = TYPE_FILE_PATH + ext if os.path.exists(type_file) is False: type_file = TYPE_FILE_PATH + "unknown" file_info = QFileInfo(type_file) return QFileIconProvider().icon(file_info)
def check_icon_path(self, item): if item["type"] in (2, 4): if not os.path.exists(item["ico"]): save_path = get_file_realpath( os.path.join("data/image/sysico", os.path.splitext(item["url"])[1][1:] + ".ico")) print("save_path:" + save_path) provider = QFileIconProvider() fi = QFileInfo(item["url"]) icon = provider.icon(fi) icon.pixmap(48).save(save_path) item["ico"] = save_path if item["type"] == 1: if not os.path.exists(item["ico"]): item["ico"] = get_file_realpath("data/image/firefox64.png")
def children_item_update(item, name_list): item_type = type(item) children_item = list() if item_type == QStandardItemModel: children_item = item.findItems("", Qt.MatchContains) else: print("start update item: ", item.text()) row_cnt = item.rowCount() for i in range(row_cnt): ic = item.child(i) if ic is None: print("child item is None???") continue children_item.append(ic) children = list() for child in children_item: child_name = child.text() children.append(child_name) print("children: ", children) for name in children: if name not in name_list: child_index = children.index(name) # print("child name: %s, index: %d" % (name, child_index)) if item_type == QStandardItemModel: item.takeChild(item.child(child_index)) else: item.takeChild(child_index) for name in name_list: if name not in children: item.appendRow(QStandardItem(QFileIconProvider().icon(QFileIconProvider.Folder), name)) print("children item update done")
def add_file(self, file_objects, clear=True): if clear: self.listview.clear() if not file_objects: item = QListWidgetItem("No files has the selected tag") item.setFlags(Qt.NoItemFlags) self.listview.addItem(item) for object in file_objects: item = QListWidgetItem(object.file_name) item.setData(Qt.UserRole, object) fileinfo = QFileInfo(object.file_path + "/" + object.file_name) iconprovider = QFileIconProvider() icon = iconprovider.icon(fileinfo) item.setIcon(icon) self.listview.addItem(item)
def set_tree(self): self.tree.clear() path = read_line(configure_file, 1)[:-1] print("+" * 10 + path) dirs = file_name(path) print(dirs) fileInfo = QFileInfo(path) fileIcon = QFileIconProvider() icon = QIcon(fileIcon.icon(fileInfo)) root = QTreeWidgetItem(self.tree) root.setText(0, path.split('/')[-1]) root.setIcon(0, QIcon(icon)) self.CreateTree(dirs, root, path) self.tree.expandAll() # self.setCentralWidget(self.tree) # self.tree.clicked.connect(self.onTreeClicked) QApplication.processEvents()
def parseLocalDir(self, parent, name, path): tmp = QTreeWidgetItem(parent) fileInfo = QFileInfo(path) fileIcon = QFileIconProvider() icon = QIcon(fileIcon.icon(fileInfo)) tmp.setIcon(0, QIcon(icon)) tmp.setText(0, name) tmp.setText(1, path) new = QTreeWidgetItem(tmp) new.setText(0, "<NEW DIR>") new.setText(1, path) for item in os.listdir(path): item_path = os.path.join(path, item) if os.path.isdir(item_path): self.parseLocalDir(parent=tmp, name=item, path=item_path) if os.path.isfile(item_path): self.parseLocalFile(parent=tmp, name=item, path=item_path)
def open_files_clicked(self): files = QFileDialog.getOpenFileNames( self, self.tr("Select files"), "", "PDF file (*.pdf) ;; All files (*.*)")[0] provider = QFileIconProvider() self.list_widget.clear() for file_path in files: file = QFileInfo(file_path) item = QListWidgetItem() item.setText(file.baseName()) item.setData(Qt.UserRole, file_path) item.setIcon(provider.icon(file)) self.list_widget.addItem(item) self.label_find.setText( self.tr("Schedules: ") + str(self.list_widget.count()))
def __init__(self, dirPath): """Initialize data for the model.""" self._notebookDir = QFileInfo(dirPath) #store path to the notebook as a 'QFileInfo' for added flexibility q = QFileIconProvider() #objec used to create model display icon self._icon = q.icon(self._notebookDir) #create model display icon self._notes = [] #initialize empty list of notes notebookPath = self._notebookDir.absoluteFilePath() #get the absolute path to the notebook #load all the notes inside this notebook for item in sorted(os.listdir(notebookPath)): #for every item in the notebook itemPath = os.path.join(notebookPath, item) #get absolute path to the item if os.path.isfile(itemPath): #if the item is a file/note self._notes.append( QuarkNoteModel(itemPath, self) ) #append a new note to the notes list
def __init__(self, gateway, folder_name, data, parent): super(HistoryItemWidget, self).__init__() self.gateway = gateway self.data = data self.parent = parent self.path = data['path'] self.size = data['size'] self.action = data['action'] self.mtime = data['mtime'] self._thumbnail_loaded = False self.setAutoFillBackground(True) directory = self.gateway.get_magic_folder_directory(folder_name) if directory: self.path = os.path.join(directory, self.path) self.basename = os.path.basename(os.path.normpath(self.path)) self.setToolTip("{}\n\nSize: {}\nModified: {}".format( self.path, naturalsize(self.size), time.ctime(self.mtime))) self.icon = QLabel() self.icon.setPixmap(QFileIconProvider().icon(QFileInfo( self.path)).pixmap(48, 48)) self.basename_label = QLabel(self.basename) font = QFont() if sys.platform == 'darwin': font.setPointSize(15) else: font.setPointSize(11) self.basename_label.setFont(font) self.details_label = QLabel() font = QFont() if sys.platform == 'darwin': font.setPointSize(13) else: font.setPointSize(10) self.details_label.setFont(font) self.details_label.setStyleSheet('color: grey') self.button = QPushButton() self.button.setIcon(QIcon(resource('dots-horizontal-triple.png'))) self.button.setStyleSheet('border: none;') self.button.clicked.connect(self.parent.on_right_click) self.button.hide() self.layout = QGridLayout(self) self.layout.addWidget(self.icon, 1, 1, 2, 2) self.layout.addWidget(self.basename_label, 1, 3) self.layout.addWidget(self.details_label, 2, 3) self.layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 4, 4) self.layout.addWidget(self.button, 1, 5, 2, 2) self.update_text() QTimer.singleShot(50, self.load_thumbnail)
def refresh_default_icon(): if os.path.exists(gui_constants.GALLERY_DEF_ICO_PATH): os.remove(gui_constants.GALLERY_DEF_ICO_PATH) def get_file(n): gallery = gallerydb.GalleryDB.get_gallery_by_id(n) if not gallery: return False file = "" if gallery.path.endswith(tuple(ARCHIVE_FILES)): zip = ArchiveFile(gallery.path) for name in zip.namelist(): if name.endswith(tuple(IMG_FILES)): folder = os.path.join( gui_constants.temp_dir, '{}{}'.format(name, n)) zip.extract(name, folder) file = os.path.join( folder, name) break; else: for name in os.listdir(gallery.chapters[0]): if name.endswith(tuple(IMG_FILES)): file = os.path.join( gallery.chapters[0], name) break; return file # TODO: fix this! (When there are no ids below 300? (because they go deleted)) for x in range(1, 300): try: file = get_file(x) break except FileNotFoundError: continue except CreateZipFail: continue if not file: return None icon = QFileIconProvider().icon(QFileInfo(file)) pixmap = icon.pixmap(QSize(32, 32)) pixmap.save(gui_constants.GALLERY_DEF_ICO_PATH, quality=100) return True
def __updateRow(self, itm=None): """ Private slot to update a download item. @param itm reference to the download item (DownloadItem) """ if itm is None: itm = self.sender() if itm not in self.__downloads: return row = self.__downloads.index(itm) if self.__iconProvider is None: self.__iconProvider = QFileIconProvider() icon = self.__iconProvider.icon(QFileInfo(itm.fileName())) if icon.isNull(): icon = self.style().standardIcon(QStyle.SP_FileIcon) itm.setIcon(icon) oldHeight = self.downloadsView.rowHeight(row) self.downloadsView.setRowHeight( row, max(oldHeight, itm.minimumSizeHint().height() * 1.5)) remove = False globalSettings = QWebSettings.globalSettings() if not itm.downloading() and \ globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled): remove = True if itm.downloadedSuccessfully() and \ self.removePolicy() == DownloadManager.RemoveSuccessFullDownload: remove = True if remove: self.__model.removeRow(row) self.cleanupButton.setEnabled( (len(self.__downloads) - self.activeDownloads()) > 0) # record the change self.changeOccurred()
def changeFileIcon(self): "用户点击了更换图标按钮。" filename, selectedFilter = QFileDialog.getOpenFileName(self, self.windowTitle()) if not filename: return image = QImage(filename) if not image.isNull(): self.shortcutIcon = QIcon(QPixmap.fromImage(image)) else: ip = QFileIconProvider() shortcutIcon = ip.icon(QFileInfo(filename)) if shortcutIcon.isNull(): QMessageBox.information(self, self.tr("更换图标"), self.tr("您选择的文件不包含任何可以使用的图标。")) return self.shortcutIcon = shortcutIcon self.iconPath = filename self.btnFace.setIcon(self.shortcutIcon)
def insertFiles(self, files): self.listfiles.clear() if len(files) == 0: return self.__storeFilePath(files[0]) fileInfo = QFileInfo(files[0]) fileIcon = QFileIconProvider() icon = QIcon(fileIcon.icon(fileInfo)) #获取文件图标 for index, item in enumerate(files): name = os.path.basename(item) value = QListWidgetItem(icon, name) self.listfiles.insertItem(index, value)
def __init__(self, gateway, folder_name, data, parent): super().__init__() self.gateway = gateway self.data = data self.parent = parent self.path = data["path"] self.size = data["size"] self.action = data["action"] self.mtime = data["mtime"] self._thumbnail_loaded = False self.setAutoFillBackground(True) directory = self.gateway.get_magic_folder_directory(folder_name) if directory: self.path = os.path.join(directory, self.path) self.basename = os.path.basename(os.path.normpath(self.path)) self.setToolTip( "{}\n\nSize: {}\nModified: {}".format( self.path, naturalsize(self.size), time.ctime(self.mtime) ) ) self.icon = QLabel() self.icon.setPixmap( QFileIconProvider().icon(QFileInfo(self.path)).pixmap(48, 48) ) self.basename_label = QLabel(self.basename) self.basename_label.setFont(Font(11)) self.details_label = QLabel() self.details_label.setFont(Font(10)) palette = self.palette() dimmer_grey = BlendedColor( palette.text().color(), palette.base().color(), 0.6 ).name() self.details_label.setStyleSheet("color: {}".format(dimmer_grey)) self.button = QPushButton() self.button.setIcon(QIcon(resource("dots-horizontal-triple.png"))) self.button.setStyleSheet("border: none;") self.button.clicked.connect(self.parent.on_right_click) self.button.hide() self.layout = QGridLayout(self) self.layout.addWidget(self.icon, 1, 1, 2, 2) self.layout.addWidget(self.basename_label, 1, 3) self.layout.addWidget(self.details_label, 2, 3) self.layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 4, 4) self.layout.addWidget(self.button, 1, 5, 2, 2) self.update_text() QTimer.singleShot(50, self.load_thumbnail)
def __init__(self, view): super().__init__(0, 5) self.view = view self.gui = self.view.gui self.gateway = self.view.gateway self.monitor = self.gateway.monitor self.status_dict = {} self.members_dict = {} self.grid_status = "" self.available_space = 0 self.setHeaderData(0, Qt.Horizontal, "Name") self.setHeaderData(1, Qt.Horizontal, "Status") self.setHeaderData(2, Qt.Horizontal, "Last modified") self.setHeaderData(3, Qt.Horizontal, "Size") self.setHeaderData(4, Qt.Horizontal, "") self.icon_blank = QIcon() self.icon_up_to_date = QIcon(resource("checkmark.png")) self.icon_user = QIcon(resource("user.png")) self.icon_folder = QFileIconProvider().icon(QFileInfo(config_dir)) composite_pixmap = CompositePixmap( self.icon_folder.pixmap(256, 256), overlay=None, grayout=True ) self.icon_folder_gray = QIcon(composite_pixmap) self.icon_cloud = QIcon(resource("cloud-icon.png")) self.icon_action = QIcon(resource("dots-horizontal-triple.png")) self.monitor.connected.connect(self.on_connected) self.monitor.disconnected.connect(self.on_disconnected) self.monitor.nodes_updated.connect(self.on_nodes_updated) self.monitor.space_updated.connect(self.on_space_updated) self.monitor.status_updated.connect(self.set_status) self.monitor.mtime_updated.connect(self.set_mtime) self.monitor.size_updated.connect(self.set_size) self.monitor.members_updated.connect(self.on_members_updated) self.monitor.sync_started.connect(self.on_sync_started) self.monitor.sync_finished.connect(self.on_sync_finished) self.monitor.files_updated.connect(self.on_updated_files) self.monitor.check_finished.connect(self.update_natural_times) self.monitor.remote_folder_added.connect(self.add_remote_folder) self.monitor.transfer_progress_updated.connect( self.set_transfer_progress )
def changeFileIcon(self): "用户点击了更换图标按钮。" filename, selectedFilter = QFileDialog.getOpenFileName( self, self.windowTitle()) if not filename: return image = QImage(filename) if not image.isNull(): self.shortcutIcon = QIcon(QPixmap.fromImage(image)) else: ip = QFileIconProvider() shortcutIcon = ip.icon(QFileInfo(filename)) if shortcutIcon.isNull(): QMessageBox.information(self, self.tr("更换图标"), self.tr("您选择的文件不包含任何可以使用的图标。")) return self.shortcutIcon = shortcutIcon self.iconPath = filename self.btnFace.setIcon(self.shortcutIcon)
def keyReleaseEvent(self,event): key = event.key() if event.modifiers()== Qt.ControlModifier and key == Qt.Key_V : clipboard = QApplication.clipboard() mimeData = clipboard.mimeData() if mimeData.hasText(): print("准备粘贴:" + clipboard.text()) path = clipboard.text() item = {} if not path.startswith("file") : item = self.dl_launch_item_detail.get_url_info(path) item["session_id"] = self.cur_session["id"] item["id"] = app_data.insert_launch_item(item) self.add_launch_item(item) return path = path.replace("file:///","") if os.name == "posix" : path = "/" + path provider = QFileIconProvider() fi = QFileInfo(path) icon = provider.icon(fi) # t = icon.pixmap().toImage().text() save_path = join(config_dir ,"data/image/sysico",splitext(path)[0]+".ico") print("save_path:" + save_path) icon.pixmap(48).save(save_path) t = icon.name() t1 = icon.themeName() t2 = icon.themeSearchPaths() print("icon path:" + t+"," + t1,t2) if not icon.isNull() : item["ico"] = save_path item["name"] = basename(path) item["url"] = path item["type"] = 2 if not self.cur_session["id"]: QMessageBox.information(self, "新桌面", "新桌面需重启后才能添加启动项") return item["session_id"] = self.cur_session["id"] print("add other launch item:" ,item) item["id"] = app_data.insert_launch_item(item) print(item) self.add_launch_item(item)
def update(self): # Update files. self._ui.project_tree.clear() items = [] icon_provider = QFileIconProvider() for cur_file in self.project.files: file_info = QFileInfo(cur_file) item = QTreeWidgetItem(None, [ os.path.relpath(cur_file, self.project.proj_dir), "N/A", ]) item.setData(0, Qt.UserRole, Project.file_to_idb(cur_file)) item.setIcon(0, icon_provider.icon(file_info)) items.append(item) self._ui.project_tree.insertTopLevelItems(0, items) # Update other stuff. self._ui.project_path.setText(self.project.proj_dir)
def open_folder_clicked(self): path = QFileDialog.getExistingDirectory(self, self.tr("Select folder")) provider = QFileIconProvider() self.list_widget.clear() for dir_path, dir_names, file_names in os.walk(path): for file_name in file_names: if file_name.endswith(".pdf"): item = QListWidgetItem() item.setText(file_name[0:-4]) item.setData(Qt.UserRole, dir_path + os.sep + file_name) item.setIcon( provider.icon(QFileInfo(dir_path + os.sep + file_name))) self.list_widget.addItem(item) self.label_find.setText( self.tr("Schedules: ") + str(self.list_widget.count()))
def add_item_on_file_table(cls, package): """ 像指定表格对象添加指定的特定格式数据数据 """ for index, file_obj in enumerate(package.data.listdir): file_obj = Dict(file_obj) # 插入空行 package.widget.insertRow(index) # =============文件图标 item0 = QTableWidgetItem() item0.setText(file_obj.name) provider = QFileIconProvider() item0.setIcon( provider.icon( QFileInfo( ICO.FILE_TYPE_ICO.get(file_obj.type, "ico/txt.txt")))) # f_t_widget.setRowHeight(index, 20) package.widget.setItem(index, 0, item0) # =============文件大小 item3 = QTableWidgetItem() # item3.setFont(self.fileInfoWidget.global_row_font) item3.setText(file_obj.size) package.widget.setItem(index, 1, item3) # =============文件类型 item2 = QTableWidgetItem() # item2.setFont(self.fileInfoWidget.global_row_font) # fileType = provider.type(QFileInfo(abs_file_path)) item2.setText(file_obj.type) package.widget.setItem(index, 2, item2) # ============最后修改时间 item1 = QTableWidgetItem() # item1.setFont(self.fileInfoWidget.global_row_font) # mtime = os.path.getmtime(abs_file_path) item1.setText(file_obj.last_time) package.widget.setItem(index, 3, item1) return True
def fromPath(cls, path): # type: (str) -> ImportItem """ Create a `ImportItem` from a local file system path. """ iconprovider = QFileIconProvider() basename = os.path.basename(path) item = cls() item.setText(basename) item.setToolTip(path) finfo = QFileInfo(path) if finfo.exists(): item.setIcon(iconprovider.icon(finfo)) else: item.setIcon(iconprovider.icon(QFileIconProvider.File)) item.setData(path, ImportItem.PathRole) if not os.path.isfile(path): item.setEnabled(False) item.setToolTip(item.toolTip() + " (missing from filesystem)") return item
def getShortcutIcon(shortcut): if shortcut["icon"]: icon = QIcon(shortcut["icon"]) if not icon.isNull(): return icon iconProvider = QFileIconProvider() if shortcut["path"] == COMPUTER_PATH: return QIcon(":/images/user-home.png") elif shortcut["path"] == DOCUMENTS_PATH: documentsIcon = iconProvider.icon(QFileInfo(QStandardPaths.writableLocation(QStandardPaths.DocumentsLocation))) if documentsIcon.isNull(): return QIcon(":/images/folder-documents.png") else: return documentsIcon elif shortcut["path"] == MUSIC_PATH: musicIcon = iconProvider.icon(QFileInfo(QStandardPaths.writableLocation(QStandardPaths.MusicLocation))) if musicIcon.isNull(): return QIcon(":/images/folder-sound.png") else: return musicIcon elif shortcut["path"] == PICTURES_PATH: picturesIcon = iconProvider.icon(QFileInfo(QStandardPaths.writableLocation(QStandardPaths.PicturesLocation))) if picturesIcon.isNull(): return QIcon(":/images/folder-image.png") else: return picturesIcon else: url = QUrl.fromUserInput(shortcut["path"]) if url.scheme() == "file": if os.path.exists(shortcut["path"]): icon = iconProvider.icon(QFileInfo(url.toLocalFile())) if not icon.isNull(): return icon return QIcon(":/images/unknown.png") else: return QIcon(":/images/httpurl.png") return QIcon(":/images/unknown.png")
class DownloadManager(QDialog, Ui_DownloadManager): """ Class implementing the download manager. """ RemoveNever = 0 RemoveExit = 1 RemoveSuccessFullDownload = 2 def __init__(self, parent=None): """ Constructor @param parent reference to the parent widget (QWidget) """ super(DownloadManager, self).__init__(parent) self.setupUi(self) self.__saveTimer = AutoSaver(self, self.save) self.__model = DownloadModel(self) self.__manager = Helpviewer.HelpWindow.HelpWindow\ .networkAccessManager() self.__iconProvider = None self.__downloads = [] self.__downloadDirectory = "" self.__loaded = False self.setDownloadDirectory(Preferences.getUI("DownloadPath")) self.downloadsView.setShowGrid(False) self.downloadsView.verticalHeader().hide() self.downloadsView.horizontalHeader().hide() self.downloadsView.setAlternatingRowColors(True) self.downloadsView.horizontalHeader().setStretchLastSection(True) self.downloadsView.setModel(self.__model) self.downloadsView.setContextMenuPolicy(Qt.CustomContextMenu) self.downloadsView.customContextMenuRequested.connect( self.__customContextMenuRequested) self.__load() def __customContextMenuRequested(self, pos): """ Private slot to handle the context menu request for the bookmarks tree. @param pos position the context menu was requested (QPoint) """ menu = QMenu() selectedRowsCount = len( self.downloadsView.selectionModel().selectedRows()) if selectedRowsCount == 1: row = self.downloadsView.selectionModel().selectedRows()[0].row() itm = self.__downloads[row] if itm.downloadCanceled(): menu.addAction( UI.PixmapCache.getIcon("restart.png"), self.tr("Retry"), self.__contextMenuRetry) else: if itm.downloadedSuccessfully(): menu.addAction( UI.PixmapCache.getIcon("open.png"), self.tr("Open"), self.__contextMenuOpen) elif itm.downloading(): menu.addAction( UI.PixmapCache.getIcon("stopLoading.png"), self.tr("Cancel"), self.__contextMenuCancel) menu.addSeparator() menu.addAction( self.tr("Open Containing Folder"), self.__contextMenuOpenFolder) menu.addSeparator() menu.addAction( self.tr("Go to Download Page"), self.__contextMenuGotoPage) menu.addAction( self.tr("Copy Download Link"), self.__contextMenuCopyLink) menu.addSeparator() menu.addAction(self.tr("Select All"), self.__contextMenuSelectAll) if selectedRowsCount > 1 or \ (selectedRowsCount == 1 and not self.__downloads[ self.downloadsView.selectionModel().selectedRows()[0].row()] .downloading()): menu.addSeparator() menu.addAction( self.tr("Remove From List"), self.__contextMenuRemoveSelected) menu.exec_(QCursor.pos()) def shutdown(self): """ Public method to stop the download manager. """ self.__saveTimer.changeOccurred() self.__saveTimer.saveIfNeccessary() self.close() def activeDownloads(self): """ Public method to get the number of active downloads. @return number of active downloads (integer) """ count = 0 for download in self.__downloads: if download.downloading(): count += 1 return count def allowQuit(self): """ Public method to check, if it is ok to quit. @return flag indicating allowance to quit (boolean) """ if self.activeDownloads() > 0: res = E5MessageBox.yesNo( self, self.tr(""), self.tr("""There are %n downloads in progress.\n""" """Do you want to quit anyway?""", "", self.activeDownloads()), icon=E5MessageBox.Warning) if not res: self.show() return False return True def download(self, requestOrUrl, requestFileName=False, mainWindow=None): """ Public method to download a file. @param requestOrUrl reference to a request object (QNetworkRequest) or a URL to be downloaded (QUrl) @keyparam requestFileName flag indicating to ask for the download file name (boolean) @keyparam mainWindow reference to the main window (HelpWindow) """ request = QNetworkRequest(requestOrUrl) if request.url().isEmpty(): return self.handleUnsupportedContent( self.__manager.get(request), requestFileName=requestFileName, download=True, mainWindow=mainWindow) def handleUnsupportedContent(self, reply, requestFileName=False, webPage=None, download=False, mainWindow=None): """ Public method to handle unsupported content by downloading the referenced resource. @param reply reference to the reply object (QNetworkReply) @keyparam requestFileName indicating to ask for a filename (boolean) @keyparam webPage reference to the web page (HelpWebPage) @keyparam download flag indicating a download request (boolean) @keyparam mainWindow reference to the main window (HelpWindow) """ if reply is None or reply.url().isEmpty(): return size = reply.header(QNetworkRequest.ContentLengthHeader) if size == 0: return from .DownloadItem import DownloadItem itm = DownloadItem( reply=reply, requestFilename=requestFileName, webPage=webPage, download=download, parent=self, mainWindow=mainWindow) self.__addItem(itm) if itm.canceledFileSelect(): return if not self.isVisible(): self.show() self.activateWindow() self.raise_() def __addItem(self, itm): """ Private method to add a download to the list of downloads. @param itm reference to the download item (DownloadItem) """ itm.statusChanged.connect(self.__updateRow) itm.downloadFinished.connect(self.__finished) row = len(self.__downloads) self.__model.beginInsertRows(QModelIndex(), row, row) self.__downloads.append(itm) self.__model.endInsertRows() self.downloadsView.setIndexWidget(self.__model.index(row, 0), itm) icon = self.style().standardIcon(QStyle.SP_FileIcon) itm.setIcon(icon) self.downloadsView.setRowHeight(row, itm.sizeHint().height() * 1.5) # just in case the download finished before the constructor returned self.__updateRow(itm) self.changeOccurred() self.__updateActiveItemCount() def __updateRow(self, itm=None): """ Private slot to update a download item. @param itm reference to the download item (DownloadItem) """ if itm is None: itm = self.sender() if itm not in self.__downloads: return row = self.__downloads.index(itm) if self.__iconProvider is None: self.__iconProvider = QFileIconProvider() icon = self.__iconProvider.icon(QFileInfo(itm.fileName())) if icon.isNull(): icon = self.style().standardIcon(QStyle.SP_FileIcon) itm.setIcon(icon) oldHeight = self.downloadsView.rowHeight(row) self.downloadsView.setRowHeight( row, max(oldHeight, itm.minimumSizeHint().height() * 1.5)) remove = False globalSettings = QWebSettings.globalSettings() if not itm.downloading() and \ globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled): remove = True if itm.downloadedSuccessfully() and \ self.removePolicy() == DownloadManager.RemoveSuccessFullDownload: remove = True if remove: self.__model.removeRow(row) self.cleanupButton.setEnabled( (len(self.__downloads) - self.activeDownloads()) > 0) # record the change self.changeOccurred() def removePolicy(self): """ Public method to get the remove policy. @return remove policy (integer) """ return Preferences.getHelp("DownloadManagerRemovePolicy") def setRemovePolicy(self, policy): """ Public method to set the remove policy. @param policy policy to be set (DownloadManager.RemoveExit, DownloadManager.RemoveNever, DownloadManager.RemoveSuccessFullDownload) """ assert policy in (DownloadManager.RemoveExit, DownloadManager.RemoveNever, DownloadManager.RemoveSuccessFullDownload) if policy == self.removePolicy(): return Preferences.setHelp("DownloadManagerRemovePolicy", self.policy) def save(self): """ Public method to save the download settings. """ if not self.__loaded: return Preferences.setHelp("DownloadManagerSize", self.size()) Preferences.setHelp("DownloadManagerPosition", self.pos()) if self.removePolicy() == DownloadManager.RemoveExit: return downloads = [] for download in self.__downloads: downloads.append(download.getData()) Preferences.setHelp("DownloadManagerDownloads", downloads) def __load(self): """ Private method to load the download settings. """ if self.__loaded: return size = Preferences.getHelp("DownloadManagerSize") if size.isValid(): self.resize(size) pos = Preferences.getHelp("DownloadManagerPosition") self.move(pos) downloads = Preferences.getHelp("DownloadManagerDownloads") for download in downloads: if not download[0].isEmpty() and \ download[1] != "": from .DownloadItem import DownloadItem itm = DownloadItem(parent=self) itm.setData(download) self.__addItem(itm) self.cleanupButton.setEnabled( (len(self.__downloads) - self.activeDownloads()) > 0) self.__loaded = True self.__updateActiveItemCount() def cleanup(self): """ Public slot to cleanup the downloads. """ self.on_cleanupButton_clicked() @pyqtSlot() def on_cleanupButton_clicked(self): """ Private slot cleanup the downloads. """ if len(self.__downloads) == 0: return self.__model.removeRows(0, len(self.__downloads)) if len(self.__downloads) == 0 and \ self.__iconProvider is not None: self.__iconProvider = None self.changeOccurred() self.__updateActiveItemCount() def __updateItemCount(self): """ Private method to update the count label. """ count = len(self.__downloads) self.countLabel.setText(self.tr("%n Download(s)", "", count)) def __updateActiveItemCount(self): """ Private method to update the window title. """ count = self.activeDownloads() if count > 0: self.setWindowTitle( self.tr("Downloading %n file(s)", "", count)) else: self.setWindowTitle(self.tr("Downloads")) def __finished(self): """ Private slot to handle a finished download. """ self.__updateActiveItemCount() if self.isVisible(): QApplication.alert(self) def setDownloadDirectory(self, directory): """ Public method to set the current download directory. @param directory current download directory (string) """ self.__downloadDirectory = directory if self.__downloadDirectory != "": self.__downloadDirectory += "/" def downloadDirectory(self): """ Public method to get the current download directory. @return current download directory (string) """ return self.__downloadDirectory def count(self): """ Public method to get the number of downloads. @return number of downloads (integer) """ return len(self.__downloads) def downloads(self): """ Public method to get a reference to the downloads. @return reference to the downloads (list of DownloadItem) """ return self.__downloads def changeOccurred(self): """ Public method to signal a change. """ self.__saveTimer.changeOccurred() self.__updateItemCount() ########################################################################### ## Context menu related methods below ########################################################################### def __currentItem(self): """ Private method to get a reference to the current item. @return reference to the current item (DownloadItem) """ index = self.downloadsView.currentIndex() if index and index.isValid(): row = index.row() return self.__downloads[row] return None def __contextMenuRetry(self): """ Private method to retry of the download. """ itm = self.__currentItem() if itm is not None: itm.retry() def __contextMenuOpen(self): """ Private method to open the downloaded file. """ itm = self.__currentItem() if itm is not None: itm.openFile() def __contextMenuOpenFolder(self): """ Private method to open the folder containing the downloaded file. """ itm = self.__currentItem() if itm is not None: itm.openFolder() def __contextMenuCancel(self): """ Private method to cancel the current download. """ itm = self.__currentItem() if itm is not None: itm.cancelDownload() def __contextMenuGotoPage(self): """ Private method to open the download page. """ itm = self.__currentItem() if itm is not None: url = itm.getPageUrl() Helpviewer.HelpWindow.HelpWindow.mainWindow().openUrl(url, "") def __contextMenuCopyLink(self): """ Private method to copy the download link to the clipboard. """ itm = self.__currentItem() if itm is not None: url = itm.getPageUrl().toString() QApplication.clipboard().setText(url) def __contextMenuSelectAll(self): """ Private method to select all downloads. """ self.downloadsView.selectAll() def __contextMenuRemoveSelected(self): """ Private method to remove the selected downloads from the list. """ self.downloadsView.removeSelected()
class Model(QAbstractItemModel): def __init__(self, rows, columns, parent = None): super(Model, self).__init__(parent) self.services = QIcon(images_dir + '/services.png') self.rc = rows self.cc = columns self.tree = [Node() for node in range(rows)] self.iconProvider = QFileIconProvider() def index(self, row, column, parent): if row < self.rc and row >= 0 and column < self.cc and column >= 0: parentNode = parent.internalPointer() childNode = self.node(row, parentNode) if childNode is not None: return self.createIndex(row, column, childNode) return QModelIndex() def parent(self, child): if isinstance(child, QModelIndex): # parent of QModelIndex child if child.isValid(): childNode = child.internalPointer() parentNode = self.parent(childNode) if parentNode: return self.createIndex(self.row(parentNode), 0, parentNode) return QModelIndex() else: # parent of Node if child: return child.parent def rowCount(self, parent): if parent.isValid() and parent.column() != 0: return 0 return self.rc def columnCount(self, parent): return self.cc def data(self, index, role): if not index.isValid(): return None elif role == Qt.DisplayRole: return "Item %d:%s" % (index.row(), index.column()) elif role == Qt.DecorationRole: if index.column() == 0: return self.iconProvider.icon(QFileIconProvider.Folder) return self.iconProvider.icon(QFileIconProvider.File) return None def headerData(self, section, orientation, role): if role == Qt.DisplayRole: return str(section) if role == Qt.DecorationRole: return self.services return super(Model, self).headerData(section, orientation, role) def hasChildren(self, parent): if parent.isValid() and parent.column() != 0: return False return self.rc > 0 and self.cc > 0 def flags(self, index): if not index.isValid(): return 0 return Qt.ItemIsDragEnabled | super(Model, self).flags(index) def node(self, row, parent): if parent and not parent.children: parent.children = [Node(parent) for node in range(self.rc)] if parent: return parent.children[row] else: return self.tree[row] def row(self, node): if node.parent: return node.parent.children.index(node) else: return self.tree.index(node)
def __init__(self, rows, columns, parent=None): super(Model, self).__init__(parent) self.services = QIcon(images_dir + "/services.png") self.rc = rows self.cc = columns self.tree = [Node() for node in range(rows)] self.iconProvider = QFileIconProvider()