mirror of
https://github.com/bec-project/bec_widgets.git
synced 2026-05-13 10:05:44 +02:00
242 lines
8.7 KiB
Python
242 lines
8.7 KiB
Python
"""A wrapper for the optional external dependency pyside6_qtermwidget.
|
|
Simply displays a message in a QLabel if the dependency is not installed."""
|
|
|
|
import os
|
|
from functools import wraps
|
|
from typing import Sequence
|
|
|
|
from qtpy.QtCore import QIODevice, QPoint, QSize, QUrl, Signal # type: ignore
|
|
from qtpy.QtGui import QAction, QFont, QKeyEvent, QResizeEvent, Qt # type: ignore
|
|
from qtpy.QtWidgets import QLabel, QVBoxLayout, QWidget
|
|
|
|
try:
|
|
from pyside6_qtermwidget import QTermWidget
|
|
except ImportError:
|
|
QTermWidget = None
|
|
|
|
|
|
def _forward(func):
|
|
"""Apply to a private method to forward the call to the method on QTermWidget with the same name,
|
|
(with leading '_' removed) if it is defined, otherwise do nothing."""
|
|
|
|
@wraps(func)
|
|
def wrapper(self, *args, **kwargs):
|
|
target = getattr(self, "_main_widget")
|
|
if QTermWidget:
|
|
method = getattr(target, func.__name__[1:])
|
|
return method(*args, **kwargs)
|
|
else:
|
|
...
|
|
|
|
return wrapper
|
|
|
|
|
|
class BecQTerm(QWidget):
|
|
activity = Signal()
|
|
bell = Signal(str)
|
|
copy_available = Signal(bool)
|
|
current_directory_changed = Signal(str)
|
|
finished = Signal()
|
|
profile_changed = Signal(str)
|
|
received_data = Signal(str)
|
|
silence = Signal()
|
|
term_got_focus = Signal()
|
|
term_key_pressed = Signal(QKeyEvent)
|
|
term_lost_focus = Signal()
|
|
title_changed = Signal()
|
|
url_activated = Signal(QUrl, bool)
|
|
|
|
def __init__(self, /, parent: QWidget | None = None, **kwargs) -> None:
|
|
super().__init__(parent)
|
|
self._layout = QVBoxLayout()
|
|
self.setLayout(self._layout)
|
|
if QTermWidget:
|
|
self._main_widget = QTermWidget(parent=self)
|
|
self._main_widget.activity.connect(self.activity)
|
|
self._main_widget.bell.connect(self.bell)
|
|
self._main_widget.copyAvailable.connect(self.copy_available)
|
|
self._main_widget.currentDirectoryChanged.connect(self.current_directory_changed)
|
|
self._main_widget.finished.connect(self.finished)
|
|
self._main_widget.profileChanged.connect(self.profile_changed)
|
|
self._main_widget.receivedData.connect(self.received_data)
|
|
self._main_widget.silence.connect(self.silence)
|
|
self._main_widget.termGetFocus.connect(self.term_got_focus)
|
|
self._main_widget.termKeyPressed.connect(self.term_key_pressed)
|
|
self._main_widget.termLostFocus.connect(self.term_lost_focus)
|
|
self._main_widget.titleChanged.connect(self.title_changed)
|
|
self._main_widget.urlActivated.connect(self.url_activated)
|
|
self._setEnvironment([f"{k}={v}" for k, v in os.environ.items()])
|
|
self._setColorScheme("Solarized")
|
|
else:
|
|
self._layout.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
|
self._main_widget = QLabel("pyside6_qterminal is not installed!")
|
|
|
|
self._layout.addWidget(self._main_widget)
|
|
|
|
def write(self, text: str, add_newline: bool = True):
|
|
if add_newline:
|
|
text += "\n"
|
|
self._sendText(text)
|
|
|
|
# automatically forwarded to the widget only if it exists
|
|
@_forward
|
|
def _addCustomColorSchemeDir(self, custom_dir: str, /) -> None: ...
|
|
@_forward
|
|
def _autoHideMouseAfter(self, delay: int, /) -> None: ...
|
|
@_forward
|
|
def _availableColorSchemes(self) -> list[str]: ...
|
|
@_forward
|
|
def _availableKeyBindings(self) -> list[str]: ...
|
|
@_forward
|
|
def _bracketText(self, text: str, /) -> None: ...
|
|
@_forward
|
|
def _bracketedPasteModeIsDisabled(self, /) -> bool: ...
|
|
@_forward
|
|
def _changeDir(self, dir: str, /) -> None: ...
|
|
@_forward
|
|
def _clear(self, /) -> None: ...
|
|
@_forward
|
|
def _clearCustomKeyBindingsDir(self, /) -> None: ...
|
|
@_forward
|
|
def _copyClipboard(self, /) -> None: ...
|
|
@_forward
|
|
def _disableBracketedPasteMode(self, disable: bool, /) -> None: ...
|
|
@_forward
|
|
def _filterActions(self, position: QPoint, /) -> list[QAction]: ...
|
|
@_forward
|
|
def _flowControlEnabled(self, /) -> bool: ...
|
|
@_forward
|
|
def _getAvailableColorSchemes(self, /) -> list[str]: ...
|
|
@_forward
|
|
def _getForegroundProcessId(self, /) -> int: ...
|
|
@_forward
|
|
def _getMargin(self, /) -> int: ...
|
|
@_forward
|
|
def _getPtySlaveFd(self, /) -> int: ...
|
|
@_forward
|
|
def _getSelectionEnd(self, row: int, column: int, /) -> None: ...
|
|
@_forward
|
|
def _getSelectionStart(self, row: int, column: int, /) -> None: ...
|
|
@_forward
|
|
def _getShellPID(self, /) -> int: ...
|
|
@_forward
|
|
def _getTerminalFont(self, /) -> QFont: ...
|
|
@_forward
|
|
def _historyLinesCount(self, /) -> int: ...
|
|
@_forward
|
|
def _historySize(self, /) -> int: ...
|
|
@_forward
|
|
def _icon(self, /) -> str: ...
|
|
@_forward
|
|
def _isBidiEnabled(self, /) -> bool: ...
|
|
@_forward
|
|
def _isTitleChanged(self, /) -> bool: ...
|
|
@_forward
|
|
def _keyBindings(self, /) -> str: ...
|
|
@_forward
|
|
def _pasteClipboard(self, /) -> None: ...
|
|
@_forward
|
|
def _pasteSelection(self, /) -> None: ...
|
|
@_forward
|
|
def _resizeEvent(self, arg__1: QResizeEvent, /) -> None: ...
|
|
@_forward
|
|
def _saveHistory(self, device: QIODevice, /) -> None: ...
|
|
@_forward
|
|
def _screenColumnsCount(self, /) -> int: ...
|
|
@_forward
|
|
def _screenLinesCount(self, /) -> int: ...
|
|
@_forward
|
|
def _scrollToEnd(self, /) -> None: ...
|
|
@_forward
|
|
def _selectedText(self, /, preserveLineBreaks: bool = ...) -> str: ...
|
|
@_forward
|
|
def _selectionChanged(self, textSelected: bool, /) -> None: ...
|
|
@_forward
|
|
def _sendKeyEvent(self, e: QKeyEvent, /) -> None: ...
|
|
@_forward
|
|
def _sendText(self, text: str, /) -> None: ...
|
|
@_forward
|
|
def _sessionFinished(self, /) -> None: ...
|
|
@_forward
|
|
def _setArgs(self, args: Sequence[str], /) -> None: ...
|
|
@_forward
|
|
def _setAutoClose(self, arg__1: bool, /) -> None: ...
|
|
@_forward
|
|
def _setBidiEnabled(self, enabled: bool, /) -> None: ...
|
|
@_forward
|
|
def _setBlinkingCursor(self, blink: bool, /) -> None: ...
|
|
@_forward
|
|
def _setBoldIntense(self, boldIntense: bool, /) -> None: ...
|
|
@_forward
|
|
def _setColorScheme(self, name: str, /) -> None: ...
|
|
@_forward
|
|
def _setConfirmMultilinePaste(self, confirmMultilinePaste: bool, /) -> None: ...
|
|
@_forward
|
|
def _setCustomKeyBindingsDir(self, custom_dir: str, /) -> None: ...
|
|
@_forward
|
|
def _setDrawLineChars(self, drawLineChars: bool, /) -> None: ...
|
|
@_forward
|
|
def _setEnvironment(self, environment: Sequence[str], /) -> None: ...
|
|
@_forward
|
|
def _setFlowControlEnabled(self, enabled: bool, /) -> None: ...
|
|
@_forward
|
|
def _setFlowControlWarningEnabled(self, enabled: bool, /) -> None: ...
|
|
@_forward
|
|
def _setHistorySize(self, lines: int, /) -> None: ...
|
|
@_forward
|
|
def _setKeyBindings(self, kb: str, /) -> None: ...
|
|
@_forward
|
|
def _setMargin(self, arg__1: int, /) -> None: ...
|
|
@_forward
|
|
def _setMonitorActivity(self, arg__1: bool, /) -> None: ...
|
|
@_forward
|
|
def _setMonitorSilence(self, arg__1: bool, /) -> None: ...
|
|
@_forward
|
|
def _setMotionAfterPasting(self, arg__1: int, /) -> None: ...
|
|
@_forward
|
|
def _setSelectionEnd(self, row: int, column: int, /) -> None: ...
|
|
@_forward
|
|
def _setSelectionStart(self, row: int, column: int, /) -> None: ...
|
|
@_forward
|
|
def _setShellProgram(self, program: str, /) -> None: ...
|
|
@_forward
|
|
def _setSilenceTimeout(self, seconds: int, /) -> None: ...
|
|
@_forward
|
|
def _setSize(self, arg__1: QSize, /) -> None: ...
|
|
@_forward
|
|
def _setTerminalBackgroundImage(self, backgroundImage: str, /) -> None: ...
|
|
@_forward
|
|
def _setTerminalBackgroundMode(self, mode: int, /) -> None: ...
|
|
@_forward
|
|
def _setTerminalFont(self, font: QFont | str | Sequence[str], /) -> None: ...
|
|
@_forward
|
|
def _setTerminalOpacity(self, level: float, /) -> None: ...
|
|
@_forward
|
|
def _setTerminalSizeHint(self, enabled: bool, /) -> None: ...
|
|
@_forward
|
|
def _setTrimPastedTrailingNewlines(self, trimPastedTrailingNewlines: bool, /) -> None: ...
|
|
@_forward
|
|
def _setWordCharacters(self, chars: str, /) -> None: ...
|
|
@_forward
|
|
def _setWorkingDirectory(self, dir: str, /) -> None: ...
|
|
@_forward
|
|
def _sizeHint(self, /) -> QSize: ...
|
|
@_forward
|
|
def _startShellProgram(self, /) -> None: ...
|
|
@_forward
|
|
def _startTerminalTeletype(self, /) -> None: ...
|
|
@_forward
|
|
def _terminalSizeHint(self, /) -> bool: ...
|
|
@_forward
|
|
def _title(self, /) -> str: ...
|
|
@_forward
|
|
def _toggleShowSearchBar(self, /) -> None: ...
|
|
@_forward
|
|
def _wordCharacters(self, /) -> str: ...
|
|
@_forward
|
|
def _workingDirectory(self, /) -> str: ...
|
|
@_forward
|
|
def _zoomIn(self, /) -> None: ...
|
|
@_forward
|
|
def _zoomOut(self, /) -> None: ...
|