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