Пример #1
0
    def __init__(self, switcherState, parent=None):
        super(OutputsGrid, self).__init__(parent)

        self.signalMapper = QSignalMapper(self)
        self.longPressSignalMapper = QSignalMapper(self)

        layout = QGridLayout()

        mainMixFrame = MainMixControl()
        mainMixFrame.cut.connect(self.cut.emit)
        mainMixFrame.take.connect(self.take.emit)

        layout.addWidget(mainMixFrame, 0, 0, 1, 2)

        self.aux_buttons = []

        for idx, output in switcherState.outputs.iteritems():
            ob = OutputButton(output)
            layout.addWidget(ob, 1 + (idx / 2), idx % 2)
            ob.clicked.connect(self.signalMapper.map)
            self.signalMapper.setMapping(ob, idx)

            ob.longpress.connect(self.longPressSignalMapper.map)
            self.longPressSignalMapper.setMapping(ob, idx)
            self.aux_buttons.append(ob)

        self.signalMapper.mapped.connect(self.registerClick)
        self.longPressSignalMapper.mapped.connect(self.longPress)

        btnAll = ExpandingButton()
        btnAll.setProperty("class", "mainMix")
        btnAll.setText("Mix to all")
        btnAll.clicked.connect(self.mainToAll.emit)
        layout.addWidget(btnAll, 4, 0)

        self.btnAll = ExpandingButton()
        self.btnAll.setText("All")
        self.btnAll.clicked.connect(self.all.emit)
        layout.addWidget(self.btnAll, 4, 1)

        layout.setColumnMinimumWidth(0, 100)
        layout.setColumnMinimumWidth(1, 100)
        layout.setColumnStretch(0, 1)
        layout.setColumnStretch(1, 1)

        layout.setRowStretch(0, 2)
        for i in range(1, 5):
            layout.setRowStretch(i, 1)

        self.setLayout(layout)
Пример #2
0
    def testSignalMapper(self):
        checkboxMapper = QSignalMapper()
        box = QCheckBox('check me')
        box.stateChanged.connect(checkboxMapper.map)

        checkboxMapper.setMapping(box, box.text())
        checkboxMapper.mapped[str].connect(self.cb_changed)
        self._changed = False
        box.setChecked(True)
        self.assert_(self._changed)
Пример #3
0
    def __init__(self, main_widget_or_layout, side_widgets, parent=None):
        super(VerticalSideBarLayout, self).__init__(parent)

        self.stars = []

        self.signal_mapper_tab_changed = QSignalMapper()
        self.signal_mapper_tab_changed.mapped.connect(self._tab_changed)

        self.side_widgets = side_widgets

        self.stack = QStackedLayout(self)
        for w in side_widgets:
            self.stack.addWidget(w)

        self.stack.setCurrentIndex(-1)

        # I need a widget so that I can show/hide it.
        # (we can't do that with a layout)
        self.stack_widget = QWidget(self)
        self.stack_widget.setLayout(self.stack)

        layout = QHBoxLayout()
        if isinstance(main_widget_or_layout, QWidget):
            layout.addWidget(main_widget_or_layout)
        else:
            layout.addLayout(main_widget_or_layout)

        # The panel layout is made of
        # stack of widgets, vertical separator, buttons for widget selection
        panel_layout = QHBoxLayout()
        panel_layout.addWidget(self.stack_widget)

        self.separator = VerticalSeparator(self)
        panel_layout.addWidget(self.separator)

        self.buttons_layout = self._make_tabs_button(
            side_widgets,
            ["appbar.cabinet.files.png", "thumb-up-3x.png"])  # ,"comments.png"
        panel_layout.addLayout(self.buttons_layout)

        # The panel layout is wrapped into an inline sub frame

        isf = InlineSubFrame(panel_layout, parent=self)
        isf.setObjectName("HorseSubFrame")  # ""HorseTightFrame")
        isf.layout().setContentsMargins(2, 2, 2, 2)

        # isf.setObjectName("HorseTightFrame")
        layout.addWidget(isf)

        # layout.setStretch(0,3)
        # layout.setStretch(1,2)

        self.setLayout(layout)
        self._hide_content_pane()
Пример #4
0
    def __init__(self,
                 parent=None,
                 doc_service=None,
                 show_description=False,
                 used_category_short_name=[],
                 no_header=False,
                 prototype=None):
        super(DocumentCollectionWidget, self).__init__(parent)

        # -TRACE- Crashing code seems after this
        # return

        self.view = AnimatedTableView(
            self, drop_event_handler=self.animated_drop_event_handler)
        # self.view = QTableView() # -TRACE- prevents crash
        # Editing is started by single clicking on a selected cell or by using F2
        # Double click is disabled for editing => it will just open the file
        self.view.setEditTriggers(QAbstractItemView.SelectedClicked
                                  | QAbstractItemView.AnyKeyPressed
                                  | QAbstractItemView.EditKeyPressed)
        self.view.verticalHeader().setVisible(False)
        self.view.horizontalHeader().setVisible(False)
        self.view.setMinimumSize(250, 100)
        self.view.setShowGrid(True)
        self.view.doubleClicked.connect(self._doubleClicked)

        #return # -TRACE- Crashing code seems before this

        if prototype:
            self.prototype = prototype
        else:
            # I tie the prototype to the instance because I will change some
            # of its delegate => I cannot share prototypes across instances...

            self.prototype = PrototypeArray([
                DocumentCategoryPrototype(
                    'document_category_id', _("Cat."),
                    editable=False),  # Will be configured at instance lvel
                FilenamePrototype('filename', _("Filename")),
                EmptyPrototype(_("Actions"))
            ])

        if doc_service:
            self.documents_service = doc_service
        else:
            self.documents_service = documents_service

        self.button_data = dict()
        self.button_id_counter = 1

        self.show_description = show_description
        self.documents_changed = False
        self.track_edits = True
        self.documents_to_remove = []

        # [] == we don't want to use categories at all (so no drop zones)
        if used_category_short_name != None and used_category_short_name != []:
            mainlog.debug("__init__ 1")
            categories = [
                self.documents_service.find_category_by_short_name(
                    used_category_short_name)
            ]
        elif used_category_short_name == []:  # Use all categories
            mainlog.debug("__init__ doc collection widget 2")
            categories = self.documents_service.categories()
        else:  # None => use no categories at all
            mainlog.debug("__init__ 3")
            categories = None

        mainlog.debug(categories)
        self.set_used_categories(categories)

        # self.delegate = FilenameDelegate()

        self.prototype['filename'].edit_next_item = False

        # self.delegate.edit_next_item = False

        mainlog.debug(self.prototype)

        # return # -TRACE- Test passes or crashes

        # I don't use the factory because I want this to work
        # also when inherited
        dummy_model = DocumentsModel(self.prototype)

        # dummy_model = QStandardItemModel()
        self.set_model(dummy_model)  # Doesn't prevent crash

        # return # -TRACE- Test crashes if it reaches here

        hb = QHBoxLayout()
        if no_header:
            hb.addWidget(QLabel(_("Documents")))
        else:
            hb.addWidget(QLabel(u"<h3>{}</h3>".format(_("Documents"))))

        pb = make_tool_button("appbar.page.upload.png", "upload_button")
        pb.clicked.connect(self.add_document_dialog)
        pb.setObjectName("upload_button")
        hb.addWidget(pb)

        # pb = make_tool_button("appbar.book.hardcover.open.png", "add_template_button")
        # pb.clicked.connect(self.add_template_dialog)
        # pb.setToolTip(_("Add documents from the template library"))
        # hb.addWidget(pb)

        # return # -TRACE- Test crashes

        # -TRACE- return Crash after this

        l = QVBoxLayout()
        l.setContentsMargins(0, 0, 0, 0)
        l.addLayout(hb)
        l.addWidget(
            self.view)  # -TRACE- Commenting this makes the crash disappear
        self.setLayout(l)

        # -TRACE- Crash before this

        self.signal_mapper_open_button = QSignalMapper()
        self.signal_mapper_open_button.mapped.connect(self.open_clicked)
        self.signal_mapper_close_button = QSignalMapper()
        self.signal_mapper_close_button.mapped.connect(
            self.delete_remote_clicked)
        self.signal_mapper_save_a_copy_button = QSignalMapper()
        self.signal_mapper_save_a_copy_button.mapped.connect(
            self.save_a_copy_clicked)

        self.view.setContextMenuPolicy(Qt.CustomContextMenu)
        self.view.customContextMenuRequested.connect(self.popup_menu)
Пример #5
0
    def makeContent(self):
        layout = QGridLayout()

        self.btnGroupSDCard = QButtonGroup()

        self.sdSlotMapper = QSignalMapper()

        for i in range(2):
            btn = ExpandingButton()
            btn.setCheckable(True)
            btn.setText("SD card {}".format(i + 1))
            btn.clicked.connect(self.sdSlotMapper.map)
            self.sdSlotMapper.setMapping(btn, i + 1)
            self.btnGroupSDCard.addButton(btn, i)
            layout.addWidget(btn, 0, i)

        self.sdSlotMapper.mapped.connect(self.hyperdeck.selectSlot)

        self.btnSetPreview = ExpandingButton()
        self.btnSetPreview.setText("To preview")
        self.btnSetPreview.clicked.connect(
            lambda: self.atem.setPreview(VideoSource.INPUT_7))
        layout.addWidget(self.btnSetPreview, 0, 4)

        btnClearPeaks = ExpandingButton()
        btnClearPeaks.setText("Clear VU peaks")
        btnClearPeaks.clicked.connect(self.atem.resetAudioMixerPeaks)
        layout.addWidget(btnClearPeaks, 0, 5)

        self.btnGroupTransportMode = QButtonGroup()

        self.btnPlaybackMode = ExpandingButton()
        self.btnPlaybackMode.setCheckable(True)
        self.btnPlaybackMode.setChecked(True)
        self.btnPlaybackMode.setText("Playback mode")
        self.btnGroupTransportMode.addButton(self.btnPlaybackMode)
        self.btnPlaybackMode.clicked.connect(
            lambda: self._setRecordMode(False))
        layout.addWidget(self.btnPlaybackMode, 1, 1, 1, 2)

        self.btnRecordMode = ExpandingButton()
        self.btnRecordMode.setCheckable(True)
        self.btnRecordMode.setText("Record mode")
        self.btnGroupTransportMode.addButton(self.btnRecordMode)
        self.btnRecordMode.clicked.connect(lambda: self._setRecordMode(True))
        layout.addWidget(self.btnRecordMode, 1, 3, 1, 2)

        self.btnSkipBack = _make_button("Back", ":icons/media-skip-backward",
                                        self.hyperdeck.prev)
        layout.addWidget(self.btnSkipBack, 2, 0)

        self.btngroup = QButtonGroup()

        self.btnPlay = _make_button("Play", ":icons/media-playback-start",
                                    self.hyperdeck.play)
        self.btnPlay.setCheckable(True)
        self.btngroup.addButton(self.btnPlay)
        layout.addWidget(self.btnPlay, 2, 1)

        self.btnLoopPlay = _make_button("Loop", ":icons/media-playback-loop",
                                        lambda: self.hyperdeck.play(loop=True))
        layout.addWidget(self.btnLoopPlay, 2, 2)

        self.btnSkipForward = _make_button("Forward",
                                           ":icons/media-skip-forward",
                                           self.hyperdeck.next)
        layout.addWidget(self.btnSkipForward, 2, 3)

        self.btnStop = _make_button("Stop", ":icons/media-playback-stop",
                                    self.hyperdeck.stop)
        self.btnStop.setCheckable(True)
        self.btngroup.addButton(self.btnStop)
        layout.addWidget(self.btnStop, 2, 4)

        self.btnRecord = _make_button("Record", ":icons/media-record",
                                      self.hyperdeck.record)
        self.btnRecord.setCheckable(True)
        self.btnRecord.setEnabled(False)
        self.btngroup.addButton(self.btnRecord)
        layout.addWidget(self.btnRecord, 2, 5)

        self.clipSelectionScreen = RecorderClipSelectionScreen(
            self.hyperdeck, self.state, self.mainWindow)
        self.state.clipsListChange.connect(
            self.clipSelectionScreen.populateClipsList)
        self.state.transportChange.connect(
            self.clipSelectionScreen._updateClipSelectionFromState)

        self.btnChooseClip = ExpandingButton()
        self.btnChooseClip.setText("Select clip")
        self.btnChooseClip.clicked.connect(self._showClipSelection)
        layout.addWidget(self.btnChooseClip, 3, 1, 1, 2)

        layout.setRowStretch(0, 1)
        layout.setRowStretch(1, 1)
        layout.setRowStretch(2, 2)
        layout.setRowStretch(3, 1)

        return layout