# -*- coding: utf-8 -*- """ 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 3 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, see . @author: mkaay """ from PyQt4.QtCore import * from PyQt4.QtGui import * from sip import delete class SettingsWidget(QWidget): def __init__(self): QWidget.__init__(self) self.connector = None self.sections = {} self.psections = {} self.data = None self.pdata = None self.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) def setConnector(self, connector): self.connector = connector def loadConfig(self): if self.layout(): delete(self.layout()) for s in self.sections.values()+self.psections.values(): delete(s) self.sections = {} self.setLayout(QVBoxLayout()) self.clearConfig() layout = self.layout() layout.setSizeConstraint(QLayout.SetMinAndMaxSize) self.data = self.connector.proxy.get_config() self.pdata = self.connector.proxy.get_plugin_config() for k, section in self.data.items(): s = Section(section, self) self.sections[k] = s layout.addWidget(s) for k, section in self.pdata.items(): s = Section(section, self, "plugin") self.psections[k] = s layout.addWidget(s) rel = QPushButton(_("Reload")) layout.addWidget(rel) save = QPushButton(_("Save")) #layout.addWidget(save) self.connect(rel, SIGNAL("clicked()"), self.loadConfig) def clearConfig(self): self.sections = {} class Section(QGroupBox): def __init__(self, data, parent, ctype="core"): self.data = data QGroupBox.__init__(self, data["desc"], parent) self.labels = {} self.inputs = {} self.ctype = ctype layout = QGridLayout(self) self.setLayout(layout) row = 0 for k, option in self.data.items(): if k == "desc": continue l = QLabel(option["desc"], self) l.setMinimumWidth(400) self.labels[k] = l layout.addWidget(l, row, 0) if option["type"] == "int": i = QSpinBox(self) i.setMaximum(999999) i.setValue(int(option["value"])) elif not option["type"].find(";") == -1: choices = option["type"].split(";") i = QComboBox(self) i.addItems(choices) i.setCurrentIndex(i.findText(option["value"])) elif option["type"] == "bool": i = QComboBox(self) i.addItem(_("Yes"), QVariant(True)) i.addItem(_("No"), QVariant(False)) if option["value"]: i.setCurrentIndex(0) else: i.setCurrentIndex(1) else: i = QLineEdit(self) i.setText(option["value"]) self.inputs[k] = i #i.setMaximumWidth(300) layout.addWidget(i, row, 1) row += 1