class PluginConfigPreviewDialog(PluginConfigDialog): def __init__(self, context, config, title, codec, icon=None): super(PluginConfigPreviewDialog, self).__init__(context, config, title, codec, icon) def _init_main_layout(self): main_layout = QVBoxLayout() main_layout.addWidget(self._init_input_frame()) main_layout.addWidget(self._init_preview_frame()) main_layout.addWidget(self._init_error_frame()) self._btn_box = self._init_button_box() main_layout.addWidget(self._btn_box) return main_layout def _init_preview_frame(self): view_frame = QFrame(self) view_frame_layout = QHBoxLayout() self._txt_preview = QPlainTextEdit(self) self._txt_preview.setReadOnly(True) self._txt_preview.setLineWrapMode(QPlainTextEdit.NoWrap) self._txt_preview.customContextMenuRequested.connect( self._show_preview_frame_context_menu) self._txt_preview.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) view_frame_layout.addWidget(self._txt_preview) view_frame.setLayout(view_frame_layout) return view_frame def _init_input_frame(self): input_frame = QGroupBox() self._input_frame_layout = QHBoxLayout() input_frame.setLayout(self._input_frame_layout) return input_frame def _add_option_widget(self, label: QLabel, widget): self._input_frame_layout.addWidget(label) self._input_frame_layout.addWidget(widget) def _on_change(self): super(PluginConfigPreviewDialog, self)._on_change() if self._validate(): self._do_preview() def _do_preview(self): try: result = self._codec(self.config, self._input) self._txt_preview.setPlainText(result) return True except BaseException as e: return False def _show_preview_frame_context_menu(self, point: QPoint = None): """ Displays a customized context menu for the plain view. """ def _on_plain_text_context_menu_wrap_lines(e: QEvent): """ Un-/wraps lines when user clicks the wrap-lines action within the plain views context-menu. """ if self._txt_preview.lineWrapMode() == QPlainTextEdit.NoWrap: self._txt_preview.setLineWrapMode(QPlainTextEdit.WidgetWidth) else: self._txt_preview.setLineWrapMode(QPlainTextEdit.NoWrap) if not point: point = QCursor.pos() context_menu = self._txt_preview.createStandardContextMenu() context_menu.addSeparator() wrap_lines_action = QAction(self) wrap_lines_action.setText("Wrap Lines") wrap_lines_action.setCheckable(True) wrap_lines_action.setChecked( self._txt_preview.lineWrapMode() == QPlainTextEdit.WidgetWidth) wrap_lines_action.triggered.connect( _on_plain_text_context_menu_wrap_lines) context_menu.addAction(wrap_lines_action) context_menu.exec(self._txt_preview.mapToGlobal(point))