Beispiel #1
0
    def __init__(self, *args, **kwargs) -> None:
        super().__init__(*args, **kwargs)
        self.setupUi(self)
        self._tabs_file: Optional[str] = None

        self._tabs_model: QtCore.QAbstractListModel = models.TabsModel()

        self._all_workflows_model: models.WorkflowListModel2 = \
            models.WorkflowListModel2()

        self._active_tab_worksflows_model: models.WorkflowListModel2 = \
            models.WorkflowListModel2()

        self.tabWorkflowsListView.setModel(self._active_tab_worksflows_model)

        self.selectedTabComboBox.setModel(self._tabs_model)

        self.selectedTabComboBox.currentIndexChanged.connect(self._changed_tab)

        self.newTabButton.clicked.connect(self._create_new_tab)

        self.deleteCurrentTabButton.clicked.connect(self._delete_tab)
        self.addItemsButton.clicked.connect(self._add_items_to_tab)
        self.removeItemsButton.clicked.connect(self._remove_items)
        self._tabs_model.dataChanged.connect(self.on_modified)
        self.modified: bool = False
        self.splitter.setChildrenCollapsible(False)
Beispiel #2
0
    def __init__(
            self,
            parent: QtWidgets.QWidget = None,
            flags: Union[QtCore.Qt.WindowFlags,
                         QtCore.Qt.WindowType] = QtCore.Qt.WindowFlags()
    ) -> None:
        """Create a tab editor widget."""
        super().__init__(parent, flags)
        self.tabs_model = models.TabsModel()
        self.selected_tab_combo_box.setModel(self.tabs_model)

        self._tabs_file: Optional[str] = None

        self._all_workflows_model: models.WorkflowListModel2 = \
            models.WorkflowListModel2()

        self._active_tab_workflows_model: models.WorkflowListModel2 = \
            models.WorkflowListModel2()

        self.tab_workflows_list_view.setModel(
            self._active_tab_workflows_model
        )

        self.selected_tab_combo_box.currentIndexChanged.connect(
            self._changed_tab
        )

        self.new_tab_button.clicked.connect(self._create_new_tab)

        self.delete_current_tab_button.clicked.connect(self._delete_tab)
        self.add_items_button.clicked.connect(self._add_items_to_tab)
        self.remove_items_button.clicked.connect(self._remove_items)
        self.tabs_model.dataChanged.connect(self.on_modified)
        self.modified: bool = False
        self.splitter.setChildrenCollapsible(False)
def test_tabs_model_delete_tab():
    test_model = models.TabsModel()
    new_tab = tabs.TabData("My tab", models.WorkflowListModel2())
    # new_tab.tab_name =
    test_model += new_tab

    second_new_tab = tabs.TabData("second new tab", models.WorkflowListModel2())
    test_model += second_new_tab
    assert test_model.rowCount() == 2

    test_model -= second_new_tab
    assert test_model.rowCount() == 1
def test_tabs_model_delete_all_tabs():
    test_model = models.TabsModel()
    first_new_tab = tabs.TabData("My tab", models.WorkflowListModel2())
    test_model += first_new_tab

    second_new_tab = tabs.TabData("second new tab", models.WorkflowListModel2())
    test_model += second_new_tab
    assert test_model.rowCount() == 2

    test_model -= second_new_tab
    assert test_model.rowCount() == 1

    test_model -= first_new_tab
    assert test_model.rowCount() == 0
Beispiel #5
0
    def _create_new_tab(self) -> None:
        while True:
            new_tab_name: str
            accepted: bool
            new_tab_name, accepted = QtWidgets.QInputDialog.getText(
                self.parentWidget(), "Create New Tab", "Tab name")

            # The user cancelled
            if not accepted:
                return

            if new_tab_name in self.tabs_model:
                message = f"Tab named \"{new_tab_name}\" already exists."
                error = QtWidgets.QMessageBox(self)
                error.setText(message)
                error.setWindowTitle("Unable to Create New Tab")
                error.setIcon(QtWidgets.QMessageBox.Critical)
                error.exec()
                continue

            new_tab = tabs.TabData(new_tab_name, models.WorkflowListModel2())
            self.tabs_model.add_tab(new_tab)
            new_index = self.selected_tab_combo_box.findText(new_tab_name)
            self.selected_tab_combo_box.setCurrentIndex(new_index)
            return
Beispiel #6
0
def read_tabs_yaml(yaml_file) -> Iterator[TabData]:
    tabs_file_size = os.path.getsize(yaml_file)
    if tabs_file_size > 0:
        try:
            with open(yaml_file) as f:
                tabs_config_data = yaml.load(f.read(), Loader=yaml.SafeLoader)
            if not isinstance(tabs_config_data, dict):
                raise Exception("Failed to parse file")

            for tab_name in tabs_config_data:
                model = models.WorkflowListModel2()
                for workflow_name in tabs_config_data.get(tab_name, []):
                    empty_workflow = NullWorkflow()
                    empty_workflow.name = workflow_name
                    model.add_workflow(empty_workflow)
                new_tab = TabData(tab_name, model)
                yield new_tab

        except FileNotFoundError as e:
            print("Custom tabs file not found. "
                  "Reason: {}".format(e),
                  file=sys.stderr)
            raise
        except AttributeError as e:
            print("Custom tabs file failed to load. "
                  "Reason: {}".format(e),
                  file=sys.stderr)
            raise

        except yaml.YAMLError as e:
            print("{} file failed to load. "
                  "Reason: {}".format(yaml_file, e),
                  file=sys.stderr)
            raise
Beispiel #7
0
    def test_data(self):
        workflows_model = models.WorkflowListModel2()
        mock_workflow = Mock()
        mock_workflow.name = "Spam"
        workflows_model.add_workflow(mock_workflow)

        assert workflows_model.data(workflows_model.index(0, 0),
                                    role=QtCore.Qt.DisplayRole) == "Spam"
 def _changed_tab(self, tab):
     model = self.selectedTabComboBox.model()
     index = model.index(tab)
     if index.isValid():
         data = model.data(index, role=QtCore.Qt.UserRole)
         self.tabWorkflowsListView.setModel(data.workflows_model)
     else:
         self.tabWorkflowsListView.setModel(models.WorkflowListModel2())
Beispiel #9
0
    def test_workflow_list_model2_remove(self):
        workflows_model = models.WorkflowListModel2()
        workflows = job.available_workflows()

        workflows_model.add_workflow(workflows["Hathi Prep"])
        jp2_workflow = workflows['Make JP2']
        workflows_model.add_workflow(jp2_workflow)
        assert workflows_model.rowCount() == 2

        workflows_model.remove_workflow(jp2_workflow)
        assert workflows_model.rowCount() == 1
Beispiel #10
0
 def _changed_tab(self, tab: int) -> None:
     model: QtCore.QAbstractListModel = cast(
         models.TabsModel,
         self.selected_tab_combo_box.model()
     )
     index = model.index(tab)
     if index.isValid():
         data = model.data(index, role=QtCore.Qt.UserRole)
         self.tab_workflows_list_view.setModel(data.workflows_model)
     else:
         self.tab_workflows_list_view.setModel(models.WorkflowListModel2())
def test_workflow_list_model2_isub():
    workflows_model = models.WorkflowListModel2()
    workflows = job.available_workflows()

    workflows_model.add_workflow(workflows["Hathi Prep"])
    jp2_workflow = workflows['Make JP2']
    workflows_model += jp2_workflow
    assert workflows_model.rowCount() == 2

    workflows_model -= jp2_workflow
    assert workflows_model.rowCount() == 1
Beispiel #12
0
    def test_sort_defaults_alpha_by_name(self):
        workflows_model = models.WorkflowListModel2()
        mock_spam_workflow = Mock()
        mock_spam_workflow.name = "Spam"
        workflows_model.add_workflow(mock_spam_workflow)

        mock_bacon_workflow = Mock()
        mock_bacon_workflow.name = "Bacon"
        workflows_model.add_workflow(mock_bacon_workflow)
        workflows_model.sort()
        assert workflows_model.data(
            workflows_model.index(0, 0),
            role=QtCore.Qt.DisplayRole) == "Bacon" and workflows_model.data(
                workflows_model.index(1,
                                      0), role=QtCore.Qt.DisplayRole) == "Spam"
Beispiel #13
0
 def test_workflow_list_model2_add(self):
     workflows_model = models.WorkflowListModel2()
     workflows = job.available_workflows()
     workflows_model.add_workflow(workflows["Hathi Prep"])
     assert workflows_model.rowCount() == 1
Beispiel #14
0
 def test_tabs_model_iadd_tab(self):
     test_model = models.TabsModel()
     new_tab = tabs.TabData("My tab", models.WorkflowListModel2())
     test_model += new_tab
     assert test_model.rowCount() == 1
def test_workflow_list_model2_iadd():
    workflows_model = models.WorkflowListModel2()
    workflows = job.available_workflows()
    workflows_model += workflows["Hathi Prep"]
    assert workflows_model.rowCount() == 1
Beispiel #16
0
 def read_tabs_yaml(*args, **kwargs):
     return [TabData("existing tab", models.WorkflowListModel2())]