Пример #1
0
    def _add_checkbox(self,
                      text,
                      state_changed,
                      tooltip,
                      checked=True,
                      enabled=True,
                      button_label=True):
        """
        _add_checkbox - helper to add a checkbox

        :param str text: Text for label
        :param function state_changed: callback for state_changed signal
        :param bool checked: initially checked?
        :param bool enabled: initially enabled?
        :param bool button_label: label should be a button for single shot use
        :return: QCheckBox
        """
        cbox = QtWidgets.QCheckBox('' if button_label else text, self)
        self.control.layout().addWidget(cbox)
        btn = None
        if button_label:
            btn = QtWidgets.QPushButton(text, self)
            self.control.layout().addWidget(btn)

            def cb(checked, cbox=cbox, state_changed=state_changed):
                state_changed(cbox.isChecked(), one_shot=True)

            btn.clicked.connect(cb)
            btn.setToolTip(tooltip)
        cbox.setChecked(checked)
        cbox.setEnabled(enabled)
        cbox.stateChanged.connect(state_changed)
        cbox.setToolTip(tooltip)
        self.control.layout().addItem(QtWidgets.QSpacerItem(20, 0))
        return cbox
Пример #2
0
    def _build_layout(self,
                      show_head=True,
                      show_control=True,
                      update=True,
                      recurse=False):
        """build_layout - build layout
        """
        DBG("build layout")
        self.setLayout(QtWidgets.QVBoxLayout())
        self.layout().setContentsMargins(0, 0, 0, 0)
        self.layout().setSpacing(0)

        # header
        self.header = self._add_frame()
        self.toggle_ctrl = QtWidgets.QPushButton("-", self)
        self.header.layout().addWidget(self.toggle_ctrl)
        self.line_edit = QtWidgets.QLineEdit(self)
        self.header.layout().addWidget(self.line_edit)
        self.header.layout().addStretch(1)
        self.btn_close = QtWidgets.QPushButton("X", self)
        self.btn_close.clicked.connect(lambda checked: self.close())
        self.header.layout().addWidget(self.btn_close)

        # controls
        self.control = self._add_frame()
        # checkboxes
        txt = ",\ncheck to do this always"
        self.cb_track = self._add_checkbox(
            "Track", self.change_track,
            "Track the node selected in the tree" + txt)
        self.cb_goto = self._add_checkbox(
            "Goto", self.change_goto, "Make the tree go to this node" + txt)
        self.cb_update = self._add_checkbox(
            "Update", self.change_update,
            "Update view to match changed node" + txt)
        self.cb_recurse = self._add_checkbox("Recurse",
                                             self.change_recurse,
                                             "Recursive view" + txt,
                                             checked=recurse)
        # mode menu
        btn = self.btn_mode = QtWidgets.QPushButton("Mode", self)
        self.control.layout().addWidget(btn)
        btn.setContextMenuPolicy(QtConst.CustomContextMenu)
        btn.customContextMenuRequested.connect(  # right click
            lambda pnt: self.mode_menu())
        btn.clicked.connect(  # or left click
            lambda checked: self.mode_menu())

        # misc. menu
        btn = self.control_menu_button = QtWidgets.QPushButton(
            "More\u25BE", self)
        self.control.layout().addWidget(btn)
        btn.setContextMenuPolicy(QtConst.CustomContextMenu)
        btn.customContextMenuRequested.connect(  # right click
            lambda pnt: self.misc_menu())
        btn.clicked.connect(  # or left click
            lambda checked: self.misc_menu())

        # padding
        self.control.layout().addItem(
            QtWidgets.QSpacerItem(0,
                                  0,
                                  hPolicy=QtWidgets.QSizePolicy.Expanding))

        # content
        self.splitter = ClickySplitter(self)
        self.splitter.setOrientation(QtCore.Qt.Vertical)
        self.layout().addWidget(self.splitter)
        self.edit_frame = self._add_frame()
        self.splitter.addWidget(self.edit_frame)
        self.view_frame = self._add_frame()
        self.splitter.addWidget(self.view_frame)

        self.control_visible = show_control
        self.header_visible = show_head
        self.show()

        # debug
        self.line_edit.setText("test")

        # toggle control visibility
        self.toggle_ctrl.clicked.connect(
            lambda checked: self.control.setVisible(not self.control.isVisible(
            )))