Example #1
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(
            )))
Example #2
0
    def make_ui(self):
        """make_ui - build up UI"""

        ui = type('CSVEditUI', (), {})
        # a QVBox containing two QHBoxes
        self.setLayout(QtWidgets.QVBoxLayout())
        buttons = QtWidgets.QHBoxLayout()
        self.layout().addLayout(buttons)
        buttons2 = QtWidgets.QHBoxLayout()
        self.layout().addLayout(buttons2)

        # make 4 directional buttons
        def mkbuttons(what, function):

            list_ = [
                ('go-first', "%s column left", QtWidgets.QStyle.SP_ArrowLeft),
                ('go-last', "%s column right", QtWidgets.QStyle.SP_ArrowRight),
                ('go-top', "%s row above", QtWidgets.QStyle.SP_ArrowUp),
                ('go-bottom', "%s row below", QtWidgets.QStyle.SP_ArrowDown),
            ]

            buttons.addWidget(QtWidgets.QLabel(what + ": "))
            for name, tip, fallback in list_:
                button = QtWidgets.QPushButton()
                button.setIcon(
                    QtGui.QIcon.fromTheme(
                        name,
                        QtWidgets.QApplication.style().standardIcon(fallback)))
                button.setToolTip(tip % what)
                button.clicked.connect(
                    lambda checked, name=name: function(name))
                buttons.addWidget(button)

        # add buttons to move rows / columns
        mkbuttons("Move", self.move)
        # add buttons to insert rows / columns
        mkbuttons("Insert", self.insert)

        for text, function, layout in [
            ("Del row", lambda clicked: self.delete_col(row=True), buttons),
            ("Del col.", lambda clicked: self.delete_col(), buttons),
            ("Prev", lambda clicked: self.prev_tbl(), buttons2),
            ("Next", lambda clicked: self.prev_tbl(next=True), buttons2),
        ]:
            btn = QtWidgets.QPushButton(text)
            layout.addWidget(btn)
            btn.clicked.connect(function)

        # input for minimum rows to count as a table
        ui.min_rows = QtWidgets.QSpinBox()
        buttons2.addWidget(ui.min_rows)
        ui.min_rows.setMinimum(1)
        ui.min_rows.setPrefix("tbl with ")
        ui.min_rows.setSuffix(" rows")
        ui.min_rows.setValue(self.state['rows'])
        # separator text and line start / end text
        for attr in 'sep', 'start', 'end':
            buttons2.addWidget(QtWidgets.QLabel(attr.title() + ':'))
            w = QtWidgets.QLineEdit()
            w.setText(self.state[attr])
            setattr(ui, attr + '_txt', w)
            # w.textEdited.connect(self.delim_changed)
            buttons2.addWidget(w)
        ui.sep_txt.setToolTip("Use Prev/Next to rescan table with new sep")
        w = QtWidgets.QPushButton('Change')
        w.setToolTip("Change separator in text")
        w.clicked.connect(lambda checked: self.delim_changed())
        buttons2.addWidget(w)

        buttons.addStretch(1)
        buttons2.addStretch(1)

        ui.table = QtWidgets.QTableView()
        self.layout().addWidget(ui.table)
        return ui