added more public functions to folder/task widgets

This commit is contained in:
Jakub Trllo 2024-02-28 14:29:31 +01:00
parent 7c81a52623
commit 65865c2e8f
2 changed files with 99 additions and 4 deletions

View file

@ -91,6 +91,21 @@ class FoldersQtModel(QtGui.QStandardItemModel):
return QtCore.QModelIndex()
return self.indexFromItem(item)
def get_item_id_by_path(self, folder_path):
"""Get folder id by path.
Args:
folder_path (str): Folder path.
Returns:
Union[str, None]: Folder id or None if folder is not available.
"""
for folder_id, item in self._items_by_id.values():
if item.data(FOLDER_PATH_ROLE) == folder_path:
return folder_id
return None
def get_project_name(self):
"""Project name which model currently use.
@ -431,8 +446,10 @@ class FoldersWidget(QtWidgets.QWidget):
Args:
folder_id (Union[str, None]): Folder id or None to deselect.
"""
Returns:
bool: Requested folder was selected.
"""
if folder_id is None:
self._folders_view.clearSelection()
return True
@ -453,6 +470,25 @@ class FoldersWidget(QtWidgets.QWidget):
)
return True
def set_selected_folder_path(self, folder_path):
"""Set selected folder by path.
Args:
folder_path (str): Folder path.
Returns:
bool: Requested folder was selected.
"""
if folder_path is None:
self._folders_view.clearSelection()
return True
folder_id = self._folders_model.get_item_id_by_path(folder_path)
if folder_id is None:
return False
return self.set_selected_folder(folder_id)
def set_deselectable(self, enabled):
"""Set deselectable mode.

View file

@ -359,6 +359,64 @@ class TasksWidget(QtWidgets.QWidget):
self._tasks_model.refresh()
def get_selected_task_info(self):
_, task_id, task_name, task_type = self._get_selected_item_ids()
return {
"task_id": task_id,
"task_name": task_name,
"task_type": task_type,
}
def get_selected_task_name(self):
"""Get selected task name.
Returns:
Union[str, None]: Task name.
"""
_, _, task_name, _ = self._get_selected_item_ids()
return task_name
def get_selected_task_type(self):
"""Get selected task type.
Returns:
Union[str, None]: Task type.
"""
_, _, _, task_type = self._get_selected_item_ids()
return task_type
def set_selected_task(self, task_name):
"""Set selected task by name.
Args:
task_name (str): Task name.
Returns:
bool: Task was selected.
"""
if task_name is None:
self._tasks_view.clearSelection()
return True
if task_name == self.get_selected_task_name():
return True
index = self._tasks_model.get_index_by_name(task_name)
if not index.isValid():
return False
proxy_index = self._tasks_proxy_model.mapFromSource(index)
if not proxy_index.isValid():
return False
selection_model = self._folders_view.selectionModel()
selection_model.setCurrentIndex(
proxy_index, QtCore.QItemSelectionModel.SelectCurrent
)
return True
def _on_tasks_refresh_finished(self, event):
"""Tasks were refreshed in controller.
@ -396,10 +454,11 @@ class TasksWidget(QtWidgets.QWidget):
for index in selection_model.selectedIndexes():
task_id = index.data(ITEM_ID_ROLE)
task_name = index.data(ITEM_NAME_ROLE)
task_type = index.data(TASK_TYPE_ROLE)
parent_id = index.data(PARENT_ID_ROLE)
if task_name is not None:
return parent_id, task_id, task_name
return self._selected_folder_id, None, None
return parent_id, task_id, task_name, task_type
return self._selected_folder_id, None, None, None
def _on_selection_change(self):
# Don't trigger task change during refresh
@ -408,7 +467,7 @@ class TasksWidget(QtWidgets.QWidget):
if self._tasks_model.is_refreshing:
return
parent_id, task_id, task_name = self._get_selected_item_ids()
parent_id, task_id, task_name, _ = self._get_selected_item_ids()
self._controller.set_selected_task(task_id, task_name)
self.selection_changed.emit()