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
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( )))