diff --git a/picard/ui/mainwindow.py b/picard/ui/mainwindow.py index f6ebccb6c..a23c389fe 100644 --- a/picard/ui/mainwindow.py +++ b/picard/ui/mainwindow.py @@ -29,6 +29,7 @@ from picard.util import decodeFileName, encodeFileName from picard.ui.coverartbox import CoverArtBox from picard.ui.metadatabox import MetadataBox from picard.ui.itemviews import FileTreeView, AlbumTreeView +from picard.ui.options import OptionsDialog class MainWindow(QtGui.QMainWindow): diff --git a/picard/ui/options.py b/picard/ui/options.py new file mode 100644 index 000000000..3fb5584b9 --- /dev/null +++ b/picard/ui/options.py @@ -0,0 +1,188 @@ +# -*- coding: utf-8 -*- +# +# Picard, the next-generation MusicBrainz tagger +# Copyright (C) 2006 Lukáš Lalinský +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +from PyQt4 import QtCore, QtGui +from picard.component import * + +class GeneralOptionsPage(QtCore.QObject): + + def getName(self): + return _(u"General") + + def getPageWidget(self, parent=None): + page = QtGui.QWidget(parent) + vbox = QtGui.QVBoxLayout(page) + + title = QtGui.QLabel(u"General", page) + font = title.font() + font.setPointSize(11) + font.setBold(True) + title.setFont(font) + vbox.addWidget(title, 0) + + line = QtGui.QFrame(page) + line.setFrameShape(QtGui.QFrame.HLine) + line.setFrameShadow(QtGui.QFrame.Plain) + vbox.addWidget(line, 0) + + groupBox = QtGui.QGroupBox(_(u"MusicBrainz Server"), page) + grid = QtGui.QGridLayout(groupBox) + grid.addWidget(QtGui.QLabel(_(u"Host:"), groupBox), 0, 0) + self.serverHostEdit = QtGui.QLineEdit(groupBox) + self.serverHostEdit.setText(self.config.setting.getString("serverHost", "")) + grid.addWidget(self.serverHostEdit, 0, 1) + grid.addWidget(QtGui.QLabel(_(u"Port:"), groupBox), 0, 2) + self.serverPortEdit = QtGui.QLineEdit(groupBox) + self.serverPortEdit.setText(self.config.setting.getString("serverPort", "")) + grid.addWidget(self.serverPortEdit, 0, 3) + grid.setColumnStretch(1, 5) + grid.setColumnStretch(3, 1) + vbox.addWidget(groupBox) + + groupBox = QtGui.QGroupBox(_(u"MusicBrainz Account"), page) + grid = QtGui.QGridLayout(groupBox) + grid.addWidget(QtGui.QLabel(_(u"Username:"), groupBox), 0, 0) + self.usernameEdit = QtGui.QLineEdit(groupBox) + self.usernameEdit.setText(self.config.setting.getString("username", "")) + grid.addWidget(self.usernameEdit, 0, 1) + grid.addWidget(QtGui.QLabel(_(u"Password:"), groupBox), 1, 0) + self.passwordEdit = QtGui.QLineEdit(groupBox) + self.passwordEdit.setEchoMode(QtGui.QLineEdit.Password) + self.passwordEdit.setText(self.config.setting.getString("password", "")) + grid.addWidget(self.passwordEdit, 1, 1) + vbox.addWidget(groupBox) + + vbox.addStretch(1) + + return page + + def saveSettings(self): + self.config.setting.set("serverHost", self.serverHostEdit.text()) + self.config.setting.set("serverPort", self.serverPortEdit.text()) + self.config.setting.set("username", self.usernameEdit.text()) + self.config.setting.set("password", self.passwordEdit.text()) + +class AboutOptionsPage(QtCore.QObject): + + def getName(self): + return _(u"About") + + def getPageWidget(self, parent=None): + page = QtGui.QWidget(parent) + vbox = QtGui.QVBoxLayout(page) + + title = QtGui.QLabel(u"About", page) + font = title.font() + font.setPointSize(11) + font.setBold(True) + title.setFont(font) + vbox.addWidget(title, 0) + + line = QtGui.QFrame(page) + line.setFrameShape(QtGui.QFrame.HLine) + line.setFrameShadow(QtGui.QFrame.Plain) + vbox.addWidget(line, 0) + + vbox.addStretch(1) + + return page + + def saveSettings(self): + pass + +class OptionsDialog(QtGui.QDialog): + + def __init__(self, parent=None): + QtGui.QDialog.__init__(self, parent) + self.setupUi() + + def setupUi(self): + self.setWindowTitle(_("Options")) + + self.splitter = QtGui.QSplitter(self) + + self.pagesTree = QtGui.QTreeWidget(self.splitter) + self.pagesTree.setHeaderLabels([u"Name"]) + self.pagesTree.header().hide() + self.connect(self.pagesTree, QtCore.SIGNAL("itemSelectionChanged()"), + self.switchPage) + self.splitter.addWidget(self.pagesTree) + + self.pagesStackWidget = QtGui.QWidget(self.splitter) + self.pagesStack = QtGui.QStackedLayout(self.pagesStackWidget) + self.splitter.addWidget(self.pagesStackWidget) + + self.okButton = QtGui.QPushButton(_("OK"), self) + self.connect(self.okButton, QtCore.SIGNAL("clicked()"), self.accept) + self.cancelButton = QtGui.QPushButton(_("Cancel"), self) + self.connect(self.cancelButton, QtCore.SIGNAL("clicked()"), self.reject) + + buttonLayout = QtGui.QHBoxLayout() + buttonLayout.addStretch() + buttonLayout.addWidget(self.okButton, 0) + buttonLayout.addWidget(self.cancelButton, 0) + + mainLayout = QtGui.QVBoxLayout() + mainLayout.addWidget(self.splitter) + mainLayout.addLayout(buttonLayout) + + self.setLayout(mainLayout) + + self.pageProviders = [ + GeneralOptionsPage(), + AboutOptionsPage(), + ] + self.items = [] + self.itemToPage = {} + + for pageProvider in self.pageProviders: + name = pageProvider.getName() + page = pageProvider.getPageWidget() + item = QtGui.QTreeWidgetItem(self.pagesTree) + item.setText(0, name) + self.itemToPage[item] = page + self.pagesStack.addWidget(page) + + self.restoreWindowState() + + def switchPage(self): + item = self.pagesTree.selectedItems()[0] + page = self.itemToPage[item] + self.pagesStack.setCurrentWidget(page) + + def accept(self): + for pageProvider in self.pageProviders: + pageProvider.saveSettings() + QtGui.QDialog.accept(self) + + def closeEvent(self, event): + self.saveWindowState() + event.accept() + + def saveWindowState(self): + self.config.persist.set("optionsDialogPosition", self.pos()) + self.config.persist.set("optionsDialogSize", self.size()) + self.config.persist.set("optionsDialogSplitter", self.splitter.saveState()) + + def restoreWindowState(self): + self.move(self.config.persist.get("optionsDialogPosition").toPoint()) + self.resize(self.config.persist.get("optionsDialogSize").toSize()) + self.splitter.restoreState( + self.config.persist.get("optionsDialogSplitter").toByteArray()) + diff --git a/picard/ui/optionsdialog.py b/picard/ui/optionsdialog.py deleted file mode 100644 index c1d902d89..000000000 --- a/picard/ui/optionsdialog.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Picard, the next-generation MusicBrainz tagger -# Copyright (C) 2006 Lukáš Lalinský -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -from PyQt4 import QtCore, QtGui - -class OptionsDialog(QtGui.QDialog): - - def __init__(self, parent=None): - QtGui.QDialog.__init__(self, parent) - self.setupUi() - - def setupUi(self): - self.setWindowTitle(_("Options")) - - self.splitter = QtGui.QSplitter(self) - - self.treeWidget = QtGui.QTreeWidget(self.splitter) - self.splitter.addWidget(self.treeWidget) - self.splitter.addWidget(QtGui.QWidget()) - - self.okButton = QtGui.QPushButton(_("OK"), self) - self.connect(self.okButton, QtCore.SIGNAL("clicked()"), self.onOk) - self.cancelButton = QtGui.QPushButton(_("Cancel"), self) - self.connect(self.cancelButton, QtCore.SIGNAL("clicked()"), self.onCancel) - - buttonLayout = QtGui.QHBoxLayout() - buttonLayout.addStretch() - buttonLayout.addWidget(self.okButton, 0) - buttonLayout.addWidget(self.cancelButton, 0) - - mainLayout = QtGui.QVBoxLayout() - mainLayout.addWidget(self.splitter) - mainLayout.addLayout(buttonLayout) - - self.setLayout(mainLayout) - - def onOk(self): - print "ok" - self.close() - - def onCancel(self): - print "cancel" - self.close()