def __init__(self, mainwin, pdfs): KDialog.__init__(self, mainwin) self.mainwin = mainwin self.setAttribute(Qt.WA_DeleteOnClose) self.setButtons(KDialog.ButtonCode( KDialog.User1 | KDialog.Ok | KDialog.Cancel)) self.setButtonGuiItem(KDialog.Ok, KStandardGuiItem.print_()) self.setButtonIcon(KDialog.User1, KIcon("edit-select-all")) self.setButtonText(KDialog.User1, i18n("Select all")) self.setCaption(i18n("Print documents")) b = KVBox(self) b.setSpacing(4) QLabel(i18n("Please select the files you want to print:"), b) fileList = QListWidget(b) fileList.setIconSize(QSize(22, 22)) fileList.setWhatsThis(i18n( "These are the PDF documents that are up-to-date (i.e. newer than " "the LilyPond source document). " "Check the documents you want to send to the printer.")) for pdf in pdfs: i = QListWidgetItem(KIcon("application-pdf"), os.path.basename(pdf), fileList) i.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsUserCheckable) i.setCheckState(Qt.Unchecked) fileList.item(0).setCheckState(Qt.Checked) self.fileList = fileList self.setMainWidget(b) self.resize(350, 200) self.pdfs = pdfs self.user1Clicked.connect(self.selectAll)
class PreferencesDialog(QDialog): def __init__(self, mainwindow): super(PreferencesDialog, self).__init__(mainwindow) self.setWindowModality(Qt.WindowModal) self.addAction(mainwindow.actionCollection.help_whatsthis) layout = QVBoxLayout() layout.setSpacing(10) self.setLayout(layout) # listview to the left, stacked widget to the right top = QHBoxLayout() layout.addLayout(top) self.pagelist = QListWidget(self) self.stack = QStackedWidget(self) top.addWidget(self.pagelist, 0) top.addWidget(self.stack, 2) layout.addWidget(widgets.Separator(self)) b = self.buttons = QDialogButtonBox(self) b.setStandardButtons( QDialogButtonBox.Ok | QDialogButtonBox.Cancel | QDialogButtonBox.Apply | QDialogButtonBox.Reset | QDialogButtonBox.Help) layout.addWidget(b) b.accepted.connect(self.accept) b.rejected.connect(self.reject) b.button(QDialogButtonBox.Apply).clicked.connect(self.saveSettings) b.button(QDialogButtonBox.Reset).clicked.connect(self.loadSettings) b.button(QDialogButtonBox.Help).clicked.connect(self.showHelp) b.button(QDialogButtonBox.Help).setShortcut(QKeySequence.HelpContents) b.button(QDialogButtonBox.Apply).setEnabled(False) # fill the pagelist self.pagelist.setIconSize(QSize(32, 32)) self.pagelist.setSpacing(2) for item in pageorder(): self.pagelist.addItem(item()) self.pagelist.currentItemChanged.connect(self.slotCurrentItemChanged) app.translateUI(self, 100) # read our size and selected page qutil.saveDialogSize(self, "preferences/dialog/size", QSize(500, 300)) self.pagelist.setCurrentRow(_prefsindex) def translateUI(self): self.pagelist.setFixedWidth(self.pagelist.sizeHintForColumn(0) + 12) self.setWindowTitle(app.caption(_("Preferences"))) def done(self, result): if result and self.buttons.button(QDialogButtonBox.Apply).isEnabled(): self.saveSettings() # save our size and selected page global _prefsindex _prefsindex = self.pagelist.currentRow() super(PreferencesDialog, self).done(result) def pages(self): """Yields the settings pages that are already instantiated.""" for n in range(self.stack.count()): yield self.stack.widget(n) def showHelp(self): userguide.show(self.pagelist.currentItem().help) def loadSettings(self): """Loads the settings on reset.""" for page in self.pages(): page.loadSettings() page.hasChanges = False self.buttons.button(QDialogButtonBox.Apply).setEnabled(False) def saveSettings(self): """Saves the settings and applies them.""" for page in self.pages(): if page.hasChanges: page.saveSettings() page.hasChanges = False self.buttons.button(QDialogButtonBox.Apply).setEnabled(False) # emit the signal app.settingsChanged() def slotCurrentItemChanged(self, item): item.activate() def changed(self): """Call this to enable the Apply button.""" self.buttons.button(QDialogButtonBox.Apply).setEnabled(True)
class PreferencesDialog(QDialog): def __init__(self, mainwindow): super(PreferencesDialog, self).__init__(mainwindow) self.setWindowModality(Qt.WindowModal) if mainwindow: self.addAction(mainwindow.actionCollection.help_whatsthis) layout = QVBoxLayout() layout.setSpacing(10) self.setLayout(layout) # listview to the left, stacked widget to the right top = QHBoxLayout() layout.addLayout(top) self.pagelist = QListWidget(self) self.stack = QStackedWidget(self) top.addWidget(self.pagelist, 0) top.addWidget(self.stack, 2) layout.addWidget(widgets.Separator(self)) b = self.buttons = QDialogButtonBox(self) b.setStandardButtons( QDialogButtonBox.Ok | QDialogButtonBox.Cancel | QDialogButtonBox.Apply | QDialogButtonBox.Reset | QDialogButtonBox.Help) layout.addWidget(b) b.accepted.connect(self.accept) b.rejected.connect(self.reject) b.button(QDialogButtonBox.Apply).clicked.connect(self.saveSettings) b.button(QDialogButtonBox.Reset).clicked.connect(self.loadSettings) b.button(QDialogButtonBox.Help).clicked.connect(self.showHelp) b.button(QDialogButtonBox.Help).setShortcut(QKeySequence.HelpContents) b.button(QDialogButtonBox.Apply).setEnabled(False) # fill the pagelist self.pagelist.setIconSize(QSize(32, 32)) self.pagelist.setSpacing(2) for item in pageorder(): self.pagelist.addItem(item()) self.pagelist.currentItemChanged.connect(self.slotCurrentItemChanged) app.translateUI(self, 100) # read our size and selected page qutil.saveDialogSize(self, "preferences/dialog/size", QSize(500, 300)) self.pagelist.setCurrentRow(_prefsindex) def translateUI(self): self.pagelist.setFixedWidth(self.pagelist.sizeHintForColumn(0) + 12) self.setWindowTitle(app.caption(_("Preferences"))) def done(self, result): if result and self.buttons.button(QDialogButtonBox.Apply).isEnabled(): self.saveSettings() # save our size and selected page global _prefsindex _prefsindex = self.pagelist.currentRow() super(PreferencesDialog, self).done(result) def pages(self): """Yields the settings pages that are already instantiated.""" for n in range(self.stack.count()): yield self.stack.widget(n) def showHelp(self): userguide.show(self.pagelist.currentItem().help) def loadSettings(self): """Loads the settings on reset.""" for page in self.pages(): page.loadSettings() page.hasChanges = False self.buttons.button(QDialogButtonBox.Apply).setEnabled(False) def saveSettings(self): """Saves the settings and applies them.""" for page in self.pages(): if page.hasChanges: page.saveSettings() page.hasChanges = False self.buttons.button(QDialogButtonBox.Apply).setEnabled(False) # emit the signal app.settingsChanged() def slotCurrentItemChanged(self, item): item.activate() def changed(self): """Call this to enable the Apply button.""" self.buttons.button(QDialogButtonBox.Apply).setEnabled(True)
class Window(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.media = Phonon.MediaObject(self) ### video widget #### self.video = Phonon.VideoWidget(self) self.video.setMinimumSize(320,200) self.videoCuts = [] self.myfilename = "" self.extension = "" self.t1 = "" self.t2 = "" self.t3 = "" self.t4 = "" self.t5 = "" self.t6 = "" ### open button ### self.button = QtGui.QPushButton('Choose Video', self) self.button.setFixedWidth(90) self.button.clicked.connect(self.handleButton) self.button.setStyleSheet(stylesheet(self)) ### context menu #### self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.popup2) ### play / pause button ### self.playbutton = QtGui.QPushButton('Play', self) self.playbutton.setFixedWidth(70) self.playbutton.clicked.connect(self.handlePlayButton) self.playbutton.setStyleSheet(stylesheet(self)) self.connect(QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Space), self), QtCore.SIGNAL('activated()'), self.handlePlayButton) self.connect(QtGui.QShortcut(QtGui.QKeySequence("Ctrl+o"), self), QtCore.SIGNAL('activated()'), self.handleButton) self.connect(QtGui.QShortcut(QtGui.QKeySequence("Ctrl+s"), self), QtCore.SIGNAL('activated()'), self.handleSaveVideo) self.connect(QtGui.QShortcut(QtGui.QKeySequence("Ctrl+q"), self), QtCore.SIGNAL('activated()'), self.handleQuit) ### save button ### self.savebutton = QtGui.QPushButton('Save Video', self) self.savebutton.setFixedWidth(90) self.savebutton.clicked.connect(self.handleSaveVideo) self.savebutton.setStyleSheet(stylesheet(self)) ### seek slider ### self.slider = Phonon.SeekSlider(self.media) self.slider.setStyleSheet(stylesheet(self)) isize = QSize(16,16) self.slider.setIconSize(isize) self.slider.setFocus() # self.slider.connect(self.handleLabel) ### connection position to label ### self.media.isSeekable() self.media.tick.connect(self.handleLabel) self.media.seekableChanged.connect(self.handleLabel) #self.slider.wheel.connect(self.handleLabel) ### table view ### self.iconList = QListWidget() self.iconList.setAlternatingRowColors(True) self.iconList.setFixedWidth(200) self.iconList.setContextMenuPolicy(Qt.CustomContextMenu) self.iconList.setStyleSheet("QListWidget::item:selected:active { background: #7D8ED9; color:#FFFFFF; } ") self.iconList.setViewMode(0) self.iconList.setSelectionBehavior(1) self.iconList.setIconSize(QSize(80, 80/1.78)) self._hookListActions() self.iconList.customContextMenuRequested.connect(self._openListMenu) ### set start button ### self.startbutton = QtGui.QPushButton('set Start', self) self.startbutton.setFixedWidth(70) self.startbutton.clicked.connect(self.handleStartButton) self.startbutton.setStyleSheet(stylesheet(self)) self.connect(QtGui.QShortcut(QtGui.QKeySequence("s"), self), QtCore.SIGNAL('activated()'), self.handleStartButton) ### set end button ### self.endbutton = QtGui.QPushButton('set End', self) self.endbutton.setFixedWidth(70) self.endbutton.clicked.connect(self.handleEndButton) self.endbutton.setStyleSheet(stylesheet(self)) self.connect(QtGui.QShortcut(QtGui.QKeySequence("e"), self), QtCore.SIGNAL('activated()'), self.handleEndButton) ### label ### self.mlabel = QtGui.QLabel('Frame', self) self.mlabel.setStyleSheet('QLabel \ {background-color: transparent; color: white;}\nQLabel{color: darkcyan; font-size: 12px; background-color: transparent; border-radius: 5px; padding: 6px; text-align: center;}\n QLabel:hover{color: red;}') #self.mlabel.setFixedWidth(80) ### layout ### layout = QtGui.QGridLayout(self) layout.addWidget(self.iconList, 0, 0, 1, 1) layout.addWidget(self.video, 0, 1, 1, 6) layout.addWidget(self.slider, 1, 1, 1, 6) layout.addWidget(self.button, 2, 0, 1, 1) layout.addWidget(self.savebutton, 2, 1, 1, 1) layout.addWidget(self.playbutton, 2, 3, 1, 1) layout.addWidget(self.startbutton, 2, 5, 1, 1) layout.addWidget(self.endbutton, 2, 6, 1, 1) layout.addWidget(self.mlabel, 2, 4, 1, 1) def popup2(self, pos): contextmenu = QMenu() contextmenu.addAction("Play / Pause (SPACE)", self.handlePlayButton) contextmenu.addSeparator() contextmenu.addAction("Load Video (Ctrl-O)", self.handleButton) contextmenu.addAction("Save Video (Ctrl-S)", self.handleSaveVideo) contextmenu.addSeparator() contextmenu.addAction("Info", self.handleInfo) contextmenu.addSeparator() contextmenu.addAction("Exit (q)", self.handleQuit) contextmenu.exec_(QCursor.pos()) def handleInfo(self): msg = QMessageBox() #msg.setFixedSize(500, 300) #msg.setGeometry(100,100, 400, 200) msg.setIcon(QMessageBox.Information) msg.setText("Axel Schneider") msg.setInformativeText(unicode(u"©2016")) msg.setWindowTitle("Cut Video") msg.setDetailedText("Python Qt4") msg.setStandardButtons(QMessageBox.Ok) retval = msg.exec_() print "value of pressed message box button:", retval def handleQuit(self): app.quit() def handleButton(self): if self.media.state() == Phonon.PlayingState: self.media.stop() else: path = QtGui.QFileDialog.getOpenFileName(self, ("Video laden"), '/Axel_1/Filme', "Videos (*.ts *.mp4)") if path: self.myfilename = unicode(path) #.encode("utf-8") window.setWindowTitle(self.myfilename.split("/")[-1]) self.extension = path.split(".")[1] print(self.extension) self.media.setCurrentSource(Phonon.MediaSource(path)) self.video.setScaleMode(1) self.video.setAspectRatio(1) self.audio = Phonon.AudioOutput(Phonon.VideoCategory, self) Phonon.createPath(self.media, self.audio) Phonon.createPath(self.media, self.video) self.media.play() self.playbutton.setText('Pause') def handleSaveVideo(self): result = QFileDialog.getSaveFileName(self, ("Video speichern"), '/tmp/film.' + str(self.extension), "Videos (*.ts *.mp4)") if result: target = unicode(result) self.t1 = float(self.videoCuts[0]) self.t2 = float(self.videoCuts[1]) ffmpeg_extract_subclip(self.myfilename, self.t1, self.t2, targetname=target) window.setWindowTitle("Film gespeichert") self.purgeMarker() def handlePlayButton(self): if self.media.state() == Phonon.PlayingState: self.media.pause() self.playbutton.setText('Play') else: #print(self.iconList.count()) self.media.play() self.playbutton.setText('Pause') def handleStartButton(self): if self.iconList.count() < 2: rm = str(self.media.currentTime() / 100.00 / 10.00) item = QListWidgetItem() img = QImage(self.video.snapshot()) pix = QtGui.QPixmap.fromImage(img) item.setIcon(QIcon(pix)) item.setText("Start: " + rm) self.iconList.addItem(item) self.videoCuts.append(rm) else: return def handleEndButton(self): if self.iconList.count() < 2: rm = str(self.media.currentTime() / 100.00 / 10.00) item = QListWidgetItem() #item.setSizeHint(QSize(150, 40)) img = QImage(self.video.snapshot()) pix = QtGui.QPixmap.fromImage(img) item.setIcon(QIcon(pix)) item.setText("End: " + rm) self.iconList.addItem(item) self.videoCuts.append(rm) self.t3 = float(str(self.media.remainingTime())) print(self.t3) self.media.stop() self.playbutton.setText('Play') else: return def handleLabel(self): ms = self.media.currentTime() seconds=str((ms/1000)%60) minutes=str((ms/(1000*60))%60) hours=str((ms/(1000*60*60))%24) if int(seconds) < 10: seconds = "0" + seconds if int(minutes) < 10: minutes = "0" + minutes if int(hours) < 10: hours = "0" + hours s = hours + ":" + minutes + ":" + seconds self.mlabel.setText(s) def _hookListActions(self): #TOO bad-the list model -should be here... rmAction = QtGui.QAction(QtGui.QIcon('icons/close-x.png'), 'entfernen', self) rmAction.triggered.connect(self._removeMarker) rmAllAction = QtGui.QAction(QtGui.QIcon('icons/clear-all.png'), 'alle entfernen', self) rmAllAction.triggered.connect(self.purgeMarker) self.gotoAction = QtGui.QAction(QtGui.QIcon('icons/go-next.png'), 'zu dieser Position springen', self) self.gotoAction.triggered.connect(self._gotoFromMarker) #menus self._listMenu = QMenu() self._listMenu.addAction(self.gotoAction) self._listMenu.addSeparator() self._listMenu.addAction(rmAction) self._listMenu.addAction(rmAllAction) #---List widget context menu def _removeMarker(self,whatis): selectionList = self.iconList.selectedIndexes() if len(selectionList)==0: return item = selectionList[0] self.iconList.takeItem(item.row()) #self.videoCuts.remove[1]) def clearMarkerList(self): self.iconList.clear() #remove contents, remove file def purgeMarker(self): self.iconList.clear() self.videoCuts = [] def _gotoFromMarker(self,whatis): selectionList = self.iconList.selectedIndexes() if len(selectionList)==0: return item = selectionList[0] pos = item.data().toString().replace("Start: ", "").replace("End: ", "") #frame = pos.ToInt() #self.video.currentTime = 1589 self.setWindowTitle(pos) def _openListMenu(self,position): selectionList = self.iconList.selectedIndexes() if len(selectionList)==0: return self._listMenu.exec_(self.iconList.viewport().mapToGlobal(position))
class RunLilyPondDialog(KDialog): """ A dialog where a DocumentJob can be configured before it's started. """ def __init__(self, mainwin): self.mainwin = mainwin KDialog.__init__(self, mainwin) self.setCaption(i18n("Run LilyPond")) self.setButtons(KDialog.ButtonCode( KDialog.Help | KDialog.Ok | KDialog.Cancel )) self.setButtonText(KDialog.Ok, i18n("Run LilyPond")) self.setButtonIcon(KDialog.Ok, KIcon("run-lilypond")) self.setHelp("running") layout = QVBoxLayout(self.mainWidget()) layout.addWidget(QLabel(i18n( "Select which LilyPond version you want to run:"))) self.lilypond = QListWidget() self.lilypond.setIconSize(QSize(22, 22)) self.lilypond.setSpacing(4) layout.addWidget(self.lilypond) self.preview = QCheckBox(i18n( "Run LilyPond in preview mode (with Point and Click)")) layout.addWidget(self.preview) self.verbose = QCheckBox(i18n("Run LilyPond with verbose output")) layout.addWidget(self.verbose) def configureJob(self, job, doc=None): """Configure a job, belonging to document. If the document is not given, it is expected to live in the document attribute of the job. If there is already a job running, we just display, but disable the Run button, until the old job finishes. """ doc = doc or job.document # populate the dialog based on remembered settings for this document self.lilypond.clear() # find the configured lilypond versions conf = config("lilypond") paths = conf.readEntry("paths", ["lilypond"]) or ["lilypond"] default = conf.readEntry("default", "lilypond") import ly.version # get all versions ver = dict((path, lilyPondVersion(path)) for path in paths) # default if default not in paths: default = paths[0] # Sort on version paths.sort(key=ver.get) versions = [format(ver.get(p)) for p in paths] # Determine automatic version (lowest possible) autopath = None docVersion = doc.lilyPondVersion() if docVersion: autopath = automaticLilyPondCommand(docVersion) def addItem(version, path, icon, title, tooltip): item = QListWidgetItem(self.lilypond) item.setIcon(KIcon(icon)) item.setText("{0}\n{1}: {2}".format(title, i18n("Command"), path)) item.setToolTip(tooltip) version or item.setFlags(Qt.NoItemFlags) # Add all available LilyPond versions: for path in paths: if ver[path]: title = i18n("LilyPond %1", format(ver[path])) tooltip = i18n("Use LilyPond version %1", format(ver[path])) addenda, tips = [], [] if path == default: addenda.append(i18n("default")) tips.append(i18n("Default LilyPond Version.")) if path == autopath: addenda.append(i18n("automatic")) tips.append(i18n("Automatic LilyPond Version (determined from document).")) if addenda: title += " [{0}]".format(", ".join(addenda)) tooltip += "\n{0}".format("\n".join(tips)) addItem(format(ver[path]), path, "run-lilypond", title, tooltip + "\n" + i18n("Path: %1", ly.version.LilyPondInstance(path).command() or path)) else: addItem("", path, "dialog-error", i18n("LilyPond (version unknown)"), i18n("Use LilyPond (version unknown)\nPath: %1", ly.version.LilyPondInstance(path).command() or path)) # Copy the settings from the document: self.preview.setChecked(doc.metainfo["custom preview"]) self.verbose.setChecked(doc.metainfo["custom verbose"]) try: self.lilypond.setCurrentRow(versions.index( doc.metainfo["custom lilypond version"])) except ValueError: cmd = autopath if autopath and conf.readEntry("automatic version", False) else default self.lilypond.setCurrentRow(paths.index(cmd)) # Focus our listbox: self.lilypond.setFocus() # Disable the Run button if a job is running for this document oldjob = self.mainwin.jobManager().job(doc) self.enableButtonOk(not oldjob) if oldjob: enable = lambda: self.enableButtonOk(True) oldjob.done.connect(enable) # Wait for user interaction: result = self.exec_() # If a job was running, don't listen to it anymore if oldjob: oldjob.done.disconnect(enable) if not result: return False # cancelled # Save the settings in the document's metainfo and configure job: doc.metainfo["custom preview"] = job.preview = self.preview.isChecked() doc.metainfo["custom verbose"] = job.verbose = self.verbose.isChecked() index = self.lilypond.currentRow() doc.metainfo["custom lilypond version"] = versions[index] job.command = paths[index] return True
def __init__(self, parent, updatedFiles, warnpreview): KDialog.__init__(self, parent) self.setAttribute(Qt.WA_DeleteOnClose) self.setButtons(KDialog.ButtonCode(KDialog.Ok | KDialog.Cancel)) self.setCaption(i18n("Email documents")) self.showButtonSeparator(True) b = KVBox(self) b.setSpacing(4) QLabel(i18n("Please select the files you want to send:"), b) fileList = QListWidget(b) fileList.setIconSize(QSize(22, 22)) fileList.setWhatsThis(i18n( "These are the files that are up-to-date (i.e. newer than " "the LilyPond source document). Also LilyPond files included " "by the source document are shown.")) lyFiles = ly.parse.findIncludeFiles(updatedFiles.lyfile, config("preferences").readPathEntry("lilypond include path", [])) pdfFiles = updatedFiles("pdf") midiFiles = updatedFiles("mid*") if warnpreview and pdfFiles: QLabel(i18np( "Note: this PDF file has been created with " "embedded point-and-click URLs (preview mode), which " "increases the file size dramatically. " "Please consider to rebuild the file in publish mode, " "because then the PDF file is much smaller.", "Note: these PDF files have been created with " "embedded point-and-click URLs (preview mode), which " "increases the file size dramatically. " "Please consider to rebuild the files in publish mode, " "because then the PDF files are much smaller.", len(pdfFiles)), b).setWordWrap(True) if not pdfFiles and not midiFiles: QLabel(i18n( "Note: If there are no PDF and no MIDI files, you " "probably need to run LilyPond to update those files, " "before sending the e-mail."), b).setWordWrap(True) self.fileList = fileList self.setMainWidget(b) self.resize(450, 300) basedir = os.path.dirname(updatedFiles.lyfile) exts = config("general").readEntry("email_extensions", [".pdf"]) def item(icon, fileName): """ Add item to the fileList list widget. """ directory, name = os.path.split(fileName) if directory != basedir: name += " ({0})".format(os.path.normpath(directory)) i = QListWidgetItem(KIcon(icon), name, fileList) i.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsUserCheckable) i.ext = os.path.splitext(fileName)[1] i.url = KUrl.fromPath(fileName).url() i.setCheckState(Qt.Checked if i.ext in exts else Qt.Unchecked) # insert the files for lyfile in lyFiles: item("text-x-lilypond", lyfile) for pdf in pdfFiles: item("application-pdf", pdf) for midi in midiFiles: item("audio-midi", midi)
main_window.setWindowTitle('Spamalot Launcher') if config_options['translucent background']: main_window.setAttribute(Qt.WA_TranslucentBackground) main_window.setWindowFlags(Qt.FramelessWindowHint) main_window.show() layout = QVBoxLayout(main_window) search_bar = QLineEdit() search_bar.textChanged.connect(searcher.search) search_bar.returnPressed.connect(launch_first_item) layout.addWidget(search_bar) result_list_widget = QListWidget() result_list_widget.setIconSize(QSize(*(config_options['icon size'],) * 2)) result_list_widget.setAlternatingRowColors(True) result_list_widget.setTextElideMode(Qt.ElideMiddle) result_list_widget.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel) result_list_widget.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) result_list_widget.itemActivated.connect(launch_item) # Prepare alternating row colors for transparency palette = result_list_widget.palette() color = palette.brush(QPalette.Base).color() color.setAlphaF(0.9) palette.setBrush(QPalette.Base, QBrush(color)) color = palette.brush(QPalette.AlternateBase).color() color.setAlphaF(0.5) palette.setBrush(QPalette.AlternateBase, QBrush(color)) main_window.setPalette(palette)
class LayerImportBrowser(QDialog): class VectorPage(QWidget): def __init__(self, parent=None, filters="", encodings=[]): QWidget.__init__(self, parent) self.filters = filters self.layerLineEdit = QLineEdit() self.browseToolButton = QToolButton() self.browseToolButton.setAutoRaise(True) self.browseToolButton.setIcon(QIcon(":document-open")) layerLabel = QLabel("&Dataset:") layerLabel.setBuddy(self.layerLineEdit) self.encodingComboBox = QComboBox() self.encodingComboBox.addItems(encodings) encodingLabel = QLabel("&Encoding:") encodingLabel.setBuddy(self.encodingComboBox) hbox = QHBoxLayout() hbox.addWidget(layerLabel) hbox.addWidget(self.layerLineEdit) hbox.addWidget(self.browseToolButton) vbox = QVBoxLayout() vbox.addLayout(hbox) hbox = QHBoxLayout() hbox.addWidget(encodingLabel) hbox.addWidget(self.encodingComboBox) vbox.addLayout(hbox) self.setLayout(vbox) self.encodingComboBox.setCurrentIndex(self.encodingComboBox.findText("System")) self.connect(self.browseToolButton, SIGNAL("clicked()"), self.browseToFile) self.connect(self.encodingComboBox, SIGNAL("currentIndexChanged(QString)"), self.changeEncoding) def browseToFile(self): dialog = QFileDialog(self, "manageR - Open Vector File", unicode(robjects.r.getwd()[0]), self.filters) if not dialog.exec_() == QDialog.Accepted: return files = dialog.selectedFiles() file = files.first().trimmed() self.layerLineEdit.setText(file) self.emit(SIGNAL("filePathChanged(QString)"), file) def changeEncoding(self, text): self.emit(SIGNAL("encodingChanged(QString)"), text) class RasterPage(QWidget): def __init__(self, parent=None, filters=""): QWidget.__init__(self, parent) self.parent = parent self.filters = filters self.layerLineEdit = QLineEdit() self.browseToolButton = QToolButton() self.browseToolButton.setAutoRaise(True) self.browseToolButton.setIcon(QIcon(":document-open")) layerLabel = QLabel("&Dataset:") layerLabel.setBuddy(self.layerLineEdit) hbox = QHBoxLayout() hbox.addWidget(layerLabel) hbox.addWidget(self.layerLineEdit) hbox.addWidget(self.browseToolButton) vbox = QVBoxLayout() vbox.addLayout(hbox) self.setLayout(vbox) self.connect(self.browseToolButton, SIGNAL("clicked()"), self.browseToFile) def browseToFile(self): dialog = QFileDialog(self, "manageR - Open Raster File", unicode(robjects.r.getwd()[0]), self.filters) if not dialog.exec_() == QDialog.Accepted: return files = dialog.selectedFiles() file = files.first().trimmed() self.layerLineEdit.setText(file) self.emit(SIGNAL("filePathChanged(QString)"), file) def __init__(self, parent=None, vectors="", rasters="", encodings=[]): QDialog.__init__(self, parent) self.contentsWidget = QListWidget() self.setWindowIcon(QIcon(":icon")) self.contentsWidget.setViewMode(QListView.IconMode) self.contentsWidget.setIconSize(QSize(76, 66)) self.contentsWidget.setMovement(QListView.Static) self.contentsWidget.setMaximumWidth(106) self.contentsWidget.setMinimumWidth(106) self.contentsWidget.setMinimumHeight(220) self.contentsWidget.setSpacing(12) self.__filePath = "" self.__encoding = "System" self.__type = 0 self.pagesWidget = QStackedWidget() vectorPage = self.VectorPage(self, vectors, encodings) self.pagesWidget.addWidget(vectorPage) rasterPage = self.RasterPage(self, rasters) self.pagesWidget.addWidget(rasterPage) buttons = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel, Qt.Horizontal, self) self.connect(buttons, SIGNAL("accepted()"), self.accept) self.connect(buttons, SIGNAL("rejected()"), self.reject) self.connect(vectorPage, SIGNAL("filePathChanged(QString)"), self.setFilePath) self.connect(vectorPage, SIGNAL("encodingChanged(QString)"), self.setEncoding) self.connect(rasterPage, SIGNAL("filePathChanged(QString)"), self.setFilePath) self.createIcons() self.contentsWidget.setCurrentRow(0) horizontalLayout = QHBoxLayout() horizontalLayout.addWidget(self.contentsWidget) horizontalLayout.addWidget(self.pagesWidget, 1) mainLayout = QVBoxLayout() mainLayout.addLayout(horizontalLayout) mainLayout.addStretch(1) mainLayout.addSpacing(12) mainLayout.addWidget(buttons) self.setLayout(mainLayout) self.setWindowTitle("manageR - Import Layer") def createIcons(self): vectorButton = QListWidgetItem(self.contentsWidget) vectorButton.setIcon(QIcon(":custom-vector.svg")) vectorButton.setText("Vector Layer") vectorButton.setTextAlignment(Qt.AlignHCenter) vectorButton.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) rasterButton = QListWidgetItem(self.contentsWidget) rasterButton.setIcon(QIcon(":custom-raster.svg")) rasterButton.setText("Raster Layer") rasterButton.setTextAlignment(Qt.AlignHCenter) rasterButton.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) self.connect(self.contentsWidget, SIGNAL("currentItemChanged(QListWidgetItem*, QListWidgetItem*)"), self.changePage) def changePage(self, current, previous): if not current: current = previous self.pagesWidget.setCurrentIndex(self.contentsWidget.row(current)) def filePath(self): return self.__filePath def setFilePath(self, filePath): self.__filePath = filePath def encoding(self): return self.__encoding def setEncoding(self, encoding): self.__encoding = encoding def layerType(self): return self.__type def setLayerType(self, type): self.__type = type def accept(self): self.__type = self.pagesWidget.currentIndex() QDialog.accept(self)