def columnCount(self, parent: QModelIndex = ...) -> int: column_count_arg_in = {"parent": parent} logging.debug("columnCount") logging.debug(column_count_arg_in) if parent.isValid(): logging.debug({"return": parent.internalPointer().column_count()}) return parent.internalPointer().column_count() logging.debug({"return": self.__root.column_count()}) return self.__root.column_count()
def data(self, index: QModelIndex, role: int = ...) -> typing.Any: data_arg_in = { "index": index, "role": role } logging.debug(data_arg_in) if not index.isValid(): return None r = int(Qt.DisplayRole) c = index.column() if role != Qt.DisplayRole: val = index.internalPointer().data(index.column()) return None return index.internalPointer().data(index.column())
def rowCount(self, in_index: qtc.QModelIndex): if in_index.isValid(): node: Any = in_index.internalPointer() if type(node) is Folder: return len(node.children) return 0 return len(self.tree.children)
def data(self, index: QModelIndex, role: int = Qt.UserRole + 1) -> t.Any: if not index.isValid(): return None if role != Qt.DisplayRole: return None item = index.internalPointer() return item.data(index.column())
def parent(self, child: QModelIndex = ...) -> QModelIndex: parent_arg_in = {"child": child} logging.debug("parent") logging.debug(parent_arg_in) if not child.isValid(): return QModelIndex() child_item = child.internalPointer() parent_item = child_item.parent_item() if parent_item == self.__root: return QModelIndex() logging.debug({"return": self.createIndex(parent_item.row(), 0, parent_item)}) return self.createIndex(parent_item.row(), 0, parent_item)
def prompt_set_feed_refresh_rate(self, index: qtc.QModelIndex) -> None: """ Opens a dialog which allows the user to set a feed's refresh rate. """ feed: Feed = index.internalPointer() dialog = VerifyDialog(lambda x: x.isdigit() or x == "", "Refresh Rate (seconds):", "Set Refresh Rate", str(feed.refresh_rate)) if dialog.exec() == qtw.QDialog.Accepted: response = int( dialog.get_response()) if dialog.get_response() != "" else None self.feed_manager.set_refresh_rate(feed, response) self.feed_view_model.update_row(index)
def prompt_set_user_custom_title(self, index: qtc.QModelIndex) -> None: """ Opens a dialog which allows the user to enter a custom title for a feed. """ feed: Feed = index.internalPointer() dialog = VerifyDialog( lambda x: True, "Title:", "Set Title", feed.user_title if feed.user_title is not None else feed.title) if dialog.exec() == qtw.QDialog.Accepted: response = dialog.get_response( ) if dialog.get_response() != "" else None self.feed_manager.set_feed_user_title(feed, response) self.feed_view_model.update_row(index)
def prompt_delete_folder(self, index: qtc.QModelIndex) -> None: """Opens a message box prompt which confirms if the user wants to delete a folder.""" folder: Folder = index.internalPointer() response = qtw.QMessageBox.question( None, "Prompt", "Are you sure you want to delete '" + folder.title + "'?", qtw.QMessageBox.Yes | qtw.QMessageBox.No) if response == qtw.QMessageBox.Yes: self.feed_view_model.beginRemoveRows(index.parent(), index.row(), index.row()) self.feed_manager.delete_folder(folder) self.feed_view_model.endRemoveRows()
def rowCount(self, parent: QModelIndex = ...) -> int: row_count_arg_in = {"parent": parent} logging.debug("rowCount") logging.debug(row_count_arg_in) if parent.column() > 0: return 0 if not parent.isValid(): parent_item = self.__root else: parent_item = parent.internalPointer() logging.debug({"return": parent_item.child_count()}) return parent_item.child_count()
def prompt_rename_folder(self, index: qtc.QModelIndex) -> None: """ Opens a dialog allowing a user to rename a folder. """ dialog = VerifyDialog(lambda x: True, "Rename Folder:", "Rename Folder", "") if dialog.exec() == qtw.QDialog.Accepted: if index: folder: Folder = index.internalPointer() else: folder = self.feeds_cache index = qtc.QModelIndex() self.feed_manager.rename_folder(dialog.get_response(), folder) self.feed_view_model.update_row(index)
def index(self, row: int, column: int, parent: QModelIndex = QModelIndex()) -> QModelIndex: if not self.hasIndex(row, column, parent): return QModelIndex() if not parent.isValid(): parent_item = self.rootItem else: parent_item = parent.internalPointer() child_item = parent_item.child(row) if child_item: return self.createIndex(row, column, child_item) else: return QModelIndex()
def prompt_delete_feed(self, index: qtc.QModelIndex) -> None: """ Opens a message box prompt which confirms if the user wants to delete a feed. Deletes a feed from the view, then tells the feed manager to remove it from the database. """ feed: Feed = index.internalPointer() response = qtw.QMessageBox.question( None, "Prompt", "Are you sure you want to delete '" + (feed.user_title if feed.user_title is not None else feed.title) + "'?", qtw.QMessageBox.Yes | qtw.QMessageBox.No) if response == qtw.QMessageBox.Yes: self.feed_view_model.beginRemoveRows(index.parent(), index.row(), index.row()) self.feed_manager.delete_feed(feed) self.feed_view_model.endRemoveRows()
def prompt_add_folder(self, index: qtc.QModelIndex = None) -> None: """ Opens a dialog allowing a user to enter a name for a new folder. Adds a folder to the feed database, with the passed index as a parent. """ dialog = VerifyDialog(lambda x: True, "Add Folder:", "Add Folder", "") if dialog.exec() == qtw.QDialog.Accepted: if index: folder: Folder = index.internalPointer() else: folder = self.feeds_cache index = qtc.QModelIndex() self.feed_view_model.beginInsertRows(index, len(folder.children), len(folder.children)) self.feed_manager.add_folder(dialog.get_response(), folder) self.feed_view_model.endInsertRows()
def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex: index_arg_in = {"row": row, "column": column, "parent": parent} logging.debug("index") logging.debug(index_arg_in) if not self.hasIndex(row, column, parent): return QModelIndex() if not parent.isValid(): parent_item = self.__root else: parent_item = parent.internalPointer() res = parent_item.child(row) if res is None: return QModelIndex() logging.debug({"return": self.createIndex(row, column, res)}) return self.createIndex(row, column, res)
def prompt_add_feed(self, index: qtc.QModelIndex = None) -> None: """ Opens a dialog allowing a user to enter a url for a new feed. """ dialog = VerifyDialog(self.feed_manager.verify_feed_url, "Add Feed:", "Add Feed", "") if dialog.exec() == qtw.QDialog.Accepted: if index: folder: Folder = index.internalPointer() else: folder = self.feeds_cache index = qtc.QModelIndex() self.feed_view_model.beginInsertRows(index, len(folder.children), len(folder.children)) self.feed_manager.add_feed(dialog.get_response(), folder) self.feed_view_model.endInsertRows() self.setExpanded(index, True)