Ejemplo n.º 1
0
 def _create_line_edit_widget(
     self,
     name: str,
     attribute: Attribute[Any],
 ) -> QWidget:
     widget: Union[SecretLineEditWidget, QLineEdit]
     if attribute.secret:
         widget = SecretLineEditWidget(parent=self, )
         as_signal_instance(widget.text_edited).connect(
             partial(
                 self._on_line_edit_changed,
                 widget,
                 name,
                 attribute,
             ), )
     else:
         widget = QLineEdit(self)
         if isinstance(attribute.default, str):
             widget.setPlaceholderText(attribute.default)
         as_signal_instance(widget.textEdited).connect(
             partial(
                 self._on_line_edit_changed,
                 widget,
                 name,
                 attribute,
             ), )
     return widget
 def save_as(self, ) -> None:
     """Engage the saving process into a new file."""
     entry = self._entry
     save_invalid = self._prompt_save_invalid_entry(entry=entry, )
     if not save_invalid:
         return
     path_format = self._prompt_new_file(
         format_filters=self._file_format_dialog_filters.get_filters_string(
         ), )
     if not path_format:
         return
     file_path, file_format = path_format
     if entry.configuration is None:
         entry.configuration = RootConfiguration()
     saved = self._save_to_file(
         entry=entry,
         file_path=file_path,
         file_format=file_format,
     )
     if not saved:
         return
     as_signal_instance(self.root_configuration_saved_as).emit(
         file_path,
         file_format,
     )
 def _create_add_button(
     self,
     icon: Optional[QIcon],
     text: Optional[str],
     tool_tip: Optional[str],
     entry_args: Dict[str, Any],
     size: QSize,
     icon_size: QSize,
 ) -> QToolButton:
     widget = QToolButton(self)
     widget.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
     if text:
         widget.setText(text)
     if icon:
         widget.setIcon(icon)
     if tool_tip:
         widget.setToolTip(tool_tip)
     widget.setFixedSize(size)
     widget.setIconSize(icon_size)
     as_signal_instance(widget.clicked).connect(
         partial(
             self._on_add_button_clicked,
             entry_args,
         ), )
     return widget
Ejemplo n.º 4
0
 def _create_exit_action(self, ) -> QAction:
     action = QAction('E&xit', self)
     action.setObjectName('action_exit')
     action.setShortcuts(QKeySequence.Quit)
     action.setStatusTip('Exit the application')
     as_signal_instance(action.triggered).connect(self._on_exit_triggered, )
     return action
Ejemplo n.º 5
0
    def set_model(
        self,
        model: ExportableDictModel,
    ) -> None:
        """
        Set the model.

        Args:
            model: an exportable dict model
        """
        signals = {
            model.dataChanged,
            model.rowsInserted,
            model.rowsRemoved,
        }
        for signal in signals:
            as_signal_instance(signal).connect(
                partial(
                    self._on_model_data_changed,
                    model,
                ), )
        self._table.setModel(model)
        selection_model = self._table.selectionModel()
        as_signal_instance(selection_model.selectionChanged).connect(
            self._on_selection_changed, )
    def __init__(
        self,
        settings: QSettings,
        entry: RootConfigurationEntry,
        parent: Optional[QWidget] = None,
        *args: Any,
        **kwargs: Any,
    ) -> None:
        """
        Initialize self.

        Args:
            settings: application settings
            entry: a root configuration entry
            parent: a parent widget
            args: extra arguments
            kwargs: extra keyword arguments
        """
        super().__init__(
            parent,
            *args,
            **kwargs,
        )
        self._entry = entry
        self._settings = settings
        self._file_format_dialog_filters = FileFormatDialogFilters(
            formats=AVAILABLE_FORMATS, )
        self._init_ui()
        self._on_entry_changed()
        as_signal_instance(self._log_entry_available).connect(
            self._on_log_entry_available, )
        self._thread_running = False
 def _create_tab_widget(self, ) -> QTabWidget:
     widget = QTabWidget(self)
     widget.setTabsClosable(True)
     widget.setCornerWidget(self._create_buttons_widget())
     as_signal_instance(widget.tabCloseRequested).connect(
         self._on_tab_close_requested, )
     return widget
Ejemplo n.º 8
0
 def _create_tab_widget(self, ) -> QTabWidget:
     widget = QTabWidget(self)
     widget.setTabsClosable(True)
     as_signal_instance(widget.currentChanged).connect(
         self._on_current_tab_changed, )
     as_signal_instance(widget.tabCloseRequested).connect(
         self._on_tab_close_requested, )
     return widget
Ejemplo n.º 9
0
 def _create_about_action(self, ) -> QAction:
     action = QAction('&About', self)
     action.setObjectName('action_about')
     action.setIcon(QIcon(':/resources/icons/ywh2bt.png'))
     action.setStatusTip('Show information about this application')
     as_signal_instance(action.triggered).connect(
         self._on_about_triggered, )
     return action
Ejemplo n.º 10
0
 def _create_schema_doc_action(self, ) -> QAction:
     action = QAction('&Schema documentation', self)
     action.setObjectName('action_schema_doc')
     action.setIcon(self.style().standardIcon(QStyle.SP_DialogHelpButton))
     action.setStatusTip('Show configuration schema documentation')
     as_signal_instance(action.triggered).connect(
         self._on_schema_doc_triggered, )
     return action
Ejemplo n.º 11
0
 def _on_model_data_changed(
     self,
     model: ExportableDictModel,
     top_left: QModelIndex,
     bottom_right: QModelIndex,
     roles: List[int],
 ) -> None:
     as_signal_instance(self.dataChanged).emit(model.get_value())
Ejemplo n.º 12
0
 def _create_save_as_action(self, ) -> QAction:
     action = QAction('&Save as...', self)
     action.setObjectName('action_save_as')
     action.setEnabled(False)
     action.setStatusTip('Save the current configuration in a new file')
     as_signal_instance(action.triggered).connect(
         self._on_save_as_configuration_triggered, )
     return action
Ejemplo n.º 13
0
 def _on_current_tab_changed(
     self,
     tab_index: int,
 ) -> None:
     entry = None
     if tab_index >= 0:
         entry = self._entries[tab_index]
     as_signal_instance(self.current_entry_changed).emit(entry, )
Ejemplo n.º 14
0
 def _create_open_action(self, ) -> QAction:
     action = QAction('&Open...', self)
     action.setObjectName('action_open')
     action.setIcon(self.style().standardIcon(QStyle.SP_DialogOpenButton))
     action.setShortcuts(QKeySequence.Open)
     action.setStatusTip('Open a configuration file')
     as_signal_instance(action.triggered).connect(
         self._on_open_file_triggered, )
     return action
 def _create_edit_tab_widget(self, ) -> AttributesContainerWidget:
     widget = AttributesContainerWidget(
         parent=self,
         container_class=RootConfiguration,
         container=self._entry.configuration,
     )
     as_signal_instance(widget.container_changed).connect(
         self._on_root_configuration_modified, )
     return widget
 def _on_root_configuration_modified(
     self,
     configuration: RootConfiguration,
 ) -> None:
     self._entry.configuration = configuration
     self._validate_entry()
     self._update_raw_widget()
     as_signal_instance(self.root_configuration_modified).emit(
         self._entry, )
Ejemplo n.º 17
0
 def _create_sync_action(self, ) -> QAction:
     action = QAction('&Sync...', self)
     action.setObjectName('action_sync')
     action.setEnabled(False)
     action.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
     action.setStatusTip('Synchronize the current configuration file')
     as_signal_instance(action.triggered).connect(
         self._on_sync_configuration_triggered, )
     return action
Ejemplo n.º 18
0
 def _create_add_button(self, ) -> QPushButton:
     widget = QPushButton(
         '+',
         self,
     )
     widget.setFixedSize(constants.SMALL_BUTTON_SIZE)
     as_signal_instance(widget.clicked).connect(
         self._on_add_button_clicked, )
     return widget
Ejemplo n.º 19
0
 def _create_new_action(self, ) -> QAction:
     action = QAction('&New', self)
     action.setObjectName('action_new')
     action.setIcon(self.style().standardIcon(QStyle.SP_FileIcon))
     action.setShortcuts(QKeySequence.New)
     action.setStatusTip('Create a new configuration file')
     as_signal_instance(action.triggered).connect(
         self._on_new_file_triggered, )
     return action
 def _create_raw_widget(self, ) -> QWidget:
     widget = QPlainTextEdit(self)
     font = QFontDatabase.systemFont(QFontDatabase.FixedFont)
     font.setFixedPitch(True)
     metrics = QFontMetrics(font)
     widget.setFont(font)
     widget.setTabStopDistance(2 * metrics.width(' '))
     as_signal_instance(widget.textChanged).connect(self._on_raw_changed, )
     return widget
 def _create_value_widget(self, ) -> AttributesContainerWidget:
     widget = AttributesContainerWidget(
         parent=self,
         container_class=self._entry.value.__class__,
         container=self._entry.value,
     )
     as_signal_instance(widget.container_changed).connect(
         self._on_value_changed, )
     return widget
Ejemplo n.º 22
0
 def _create_save_action(self, ) -> QAction:
     action = QAction('&Save...', self)
     action.setObjectName('action_save')
     action.setEnabled(False)
     action.setIcon(self.style().standardIcon(QStyle.SP_DialogSaveButton))
     action.setShortcuts(QKeySequence.Save)
     action.setStatusTip('Save the current configuration file')
     as_signal_instance(action.triggered).connect(
         self._on_save_configuration_triggered, )
     return action
Ejemplo n.º 23
0
 def _create_test_action(self, ) -> QAction:
     action = QAction('&Test...', self)
     action.setObjectName('action_test')
     action.setEnabled(False)
     action.setIcon(self.style().standardIcon(QStyle.SP_DialogApplyButton))
     action.setStatusTip(
         'Test the connection to the trackers and to YesWeHack programs')
     as_signal_instance(action.triggered).connect(
         self._on_test_configuration_triggered, )
     return action
Ejemplo n.º 24
0
 def _create_del_button(self, ) -> QPushButton:
     widget = QPushButton(
         '-',
         self,
     )
     widget.setFixedSize(constants.SMALL_BUTTON_SIZE)
     widget.setEnabled(False)
     as_signal_instance(widget.clicked).connect(
         self._on_del_button_clicked, )
     return widget
Ejemplo n.º 25
0
 def _on_attribute_value_changed(
     self,
     widget: QWidget,
     name: str,
     attribute: Attribute[Any],
     value: Any,
 ) -> None:
     if self._container is None:
         self._container = self._container_class()
     setattr(self._container, name, value)
     as_signal_instance(self.container_changed).emit(self._container)
Ejemplo n.º 26
0
 def _create_close_action(
     self,
 ) -> QAction:
     action = QAction('&Close', self)
     action.setObjectName('action_close')
     action.setShortcuts(QKeySequence.Close)
     action.setStatusTip('Close')
     as_signal_instance(action.triggered).connect(
         self._on_close_triggered,
     )
     return action
Ejemplo n.º 27
0
 def _create_reload_action(self, ) -> QAction:
     action = QAction('&Reload from disk', self)
     action.setObjectName('action_reload')
     action.setEnabled(False)
     action.setIcon(self.style().standardIcon(QStyle.SP_BrowserReload))
     action.setShortcuts(QKeySequence.Refresh)
     action.setStatusTip(
         'Reload the current configuration file from the disk')
     as_signal_instance(action.triggered).connect(
         self._on_reload_configuration_triggered, )
     return action
 def _on_check_box_state_changed(
     self,
     state: int,
 ) -> None:
     states = {
         0: Qt.Unchecked,
         1: Qt.PartiallyChecked,
         2: Qt.Checked,
     }
     self._update_label_for_state(state=states[state], )
     as_signal_instance(self.stateChanged).emit(states[state])
 def _on_raw_changed(self, ) -> None:
     raw = self._raw_widget.toPlainText()
     try:
         self._entry.raw = raw
     except CoreException as e:
         self._log(
             log_type=LogType.error,
             message=_format_error(error=e, ),
         )
     self._on_entry_changed(update_raw=False, )
     as_signal_instance(self.root_configuration_modified).emit(
         self._entry, )
Ejemplo n.º 30
0
 def _on_context_menu_requested(
     self,
     position: QPoint,
 ) -> None:
     menu = QMenu(self)
     action_clear = menu.addAction('Clear')
     as_signal_instance(action_clear.triggered).connect(
         self._on_clear_action_triggered,
     )
     menu.popup(
         self.mapToGlobal(position),
     )