コード例 #1
0
ファイル: plotview.py プロジェクト: uamhforever/ray-optics
def create_command_panel(fig, commands):
    command_panel = QListWidget()

    for c in commands:
        cmd_txt, cntxt = c
        cntxt[2]['figure'] = fig
        btn = CommandItem(command_panel, cmd_txt, cntxt)

    command_panel.itemClicked.connect(on_command_clicked)
    width = command_panel.size()
    hint = command_panel.sizeHint()
    frame_width = command_panel.frameWidth() + 2
    column_width = command_panel.sizeHintForColumn(0) + 2 * frame_width
    command_panel.setMinimumWidth(column_width)
    command_panel.setMaximumWidth(column_width)
    command_panel.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Minimum)

    return command_panel
コード例 #2
0
class LocationLineEditPopup(QWidget):
    def __init__(self, parent: 'LocationLineEdit') -> None:
        super().__init__(
            parent, Qt.Window | Qt.WindowStaysOnTopHint
            | Qt.X11BypassWindowManagerHint | Qt.FramelessWindowHint)

        self._parent = parent
        self._previous_text: Optional[str] = None

        self._build_gui()
        self.listwidget.itemClicked.connect(self._on_item_clicked)

    def _build_gui(self) -> None:
        # Widgets
        self.listwidget = QListWidget()

        # Layout
        vbox = QVBoxLayout()
        # vbox.setSizeConstraint(QLayout.SetMaximumSize)
        vbox.addWidget(self.listwidget)
        vbox.setContentsMargins(0, 0, 0, 0)

        self.listwidget.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)

        self.setLayout(vbox)

    def set_completions(self, longest: str, candidates: List[str]) -> None:
        self.listwidget.clear()
        for candidate in candidates:
            self.listwidget.addItem(candidate)

        self._fit_box_to_content()

    def _fit_box_to_content(self) -> None:
        self.listwidget.setMinimumWidth(self.listwidget.sizeHintForColumn(0))

    def on_key_up(self) -> None:
        row = self.listwidget.currentRow()

        if row == -1:
            self._previous_text = self._parent.text()

        row -= 1
        if row >= 0:
            self.listwidget.setCurrentRow(row)

        completion = self.get_current_completion()
        if completion is not None:
            self._parent.setText(completion)

    def on_key_down(self) -> None:
        row = self.listwidget.currentRow()

        if row == -1:
            self._previous_text = self._parent.text()

        row += 1
        if row < self.listwidget.count():
            self.listwidget.setCurrentRow(row)

        completion = self.get_current_completion()
        if completion is not None:
            self._parent.setText(completion)

    def abort_completion(self) -> None:
        self._parent.setText(self._previous_text)
        self._previous_text = None
        self.listwidget.setCurrentRow(-1)

    def get_prefered_height(self) -> int:
        height: int = (
            self.listwidget.sizeHintForRow(0) * self.listwidget.count() +
            2 * self.listwidget.frameWidth())
        return min(height, 400)

    def get_current_completion(self) -> Optional[str]:
        row = self.listwidget.currentRow()
        if row == -1:
            return None
        else:
            item = self.listwidget.item(row)
            return cast(str, item.text())

    def _on_item_clicked(self, item):
        self._parent.setText(item.text())
        self._parent.on_return_pressed()