Beispiel #1
0
    def load_cfg(self, cfg: Config, cfg_path: Optional[Path]) -> None:
        self._cfg_path = cfg_path
        self._any_unsaved = False
        self.load_title()
        self.left_tabs.setCurrentIndex(0)

        if self.model is None:
            self.model = ConfigModel(cfg)
            self.model.edited.connect(self.on_model_edited)
            # Calls self.on_gui_edited() whenever GUI widgets change.
            map_gui(self, self.model)
        else:
            self.model.set_cfg(cfg)

        self.channel_model = ChannelModel(cfg.channels)
        # Calling setModel again disconnects previous model.
        self.channel_view.setModel(self.channel_model)
        self.channel_model.dataChanged.connect(self.on_model_edited)
        self.channel_model.rowsInserted.connect(self.on_model_edited)
        self.channel_model.rowsMoved.connect(self.on_model_edited)
        self.channel_model.rowsRemoved.connect(self.on_model_edited)
Beispiel #2
0
    def __init__(self, cfg_or_path: Union[Config, Path]):
        super().__init__()

        # Load settings.
        prefs_error = None
        try:
            self.pref = gp.load_prefs()
            if not isinstance(self.pref, gp.GlobalPrefs):
                raise TypeError(
                    f"prefs.yaml contains wrong type {type(self.pref)}")
        except Exception as e:
            prefs_error = e
            self.pref = gp.GlobalPrefs()

        # Load UI.
        self.setupUi(self)  # sets windowTitle

        # Bind UI buttons, etc. Functions block main thread, avoiding race conditions.
        self.master_audio_browse.clicked.connect(self.on_master_audio_browse)

        self.channelUp.add_shortcut(self.channelsGroup, "ctrl+shift+up")
        self.channelDown.add_shortcut(self.channelsGroup, "ctrl+shift+down")

        self.channelUp.clicked.connect(self.channel_view.on_channel_up)
        self.channelDown.clicked.connect(self.channel_view.on_channel_down)
        self.channelAdd.clicked.connect(self.on_channel_add)
        self.channelDelete.clicked.connect(self.on_channel_delete)

        # Bind actions.
        self.action_separate_render_dir.setChecked(
            self.pref.separate_render_dir)
        self.action_separate_render_dir.toggled.connect(
            self.on_separate_render_dir_toggled)

        self.action_open_config_dir.triggered.connect(self.on_open_config_dir)

        self.actionNew.triggered.connect(self.on_action_new)
        self.actionOpen.triggered.connect(self.on_action_open)
        self.actionSave.triggered.connect(self.on_action_save)
        self.actionSaveAs.triggered.connect(self.on_action_save_as)
        self.actionPreview.triggered.connect(self.on_action_preview)
        self.actionRender.triggered.connect(self.on_action_render)

        self.actionWebsite.triggered.connect(self.on_action_website)
        self.actionHelp.triggered.connect(self.on_action_help)

        self.actionExit.triggered.connect(qw.QApplication.closeAllWindows)

        # Initialize CorrScope-thread attribute.
        self.corr_thread: Optional[CorrThread] = None

        # Setup UI.
        self.model = ConfigModel(template_config())
        self.model.edited.connect(self.on_model_edited)
        # Calls self.on_gui_edited() whenever GUI widgets change.
        map_gui(self, self.model)

        self.model.update_widget["render_stereo"].append(
            self.on_render_stereo_changed)

        # Bind config to UI.
        if isinstance(cfg_or_path, Config):
            self.load_cfg(cfg_or_path, None)
            save_dir = self.compute_save_dir(self.cfg)
            if save_dir:
                self.pref.file_dir = save_dir
        elif isinstance(cfg_or_path, Path):
            self.load_cfg_from_path(cfg_or_path)
        else:
            raise TypeError(
                f"argument cfg={cfg_or_path} has invalid type {obj_name(cfg_or_path)}"
            )

        self.show()

        if prefs_error is not None:
            TracebackDialog(self).showMessage(
                "Warning: failed to load global preferences, resetting to default.\n"
                + format_stack_trace(prefs_error))