X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sface%2Fscreens%2Fconfigscreen.py;h=5adefa2e06dc8f6123b3cd8b768dda71b7fd8a8f;hb=96ec1c38a62466c4d69a57835d470fee98a39edc;hp=bed2ce7fdeb2e0968b0dcd4de7442d2504fe89f5;hpb=4d4d8e5fd0711655ac0906d880857ff9d9d3bd16;p=sface.git
diff --git a/sface/screens/configscreen.py b/sface/screens/configscreen.py
index bed2ce7..5adefa2 100644
--- a/sface/screens/configscreen.py
+++ b/sface/screens/configscreen.py
@@ -5,38 +5,116 @@ from PyQt4.QtGui import *
from sface.config import config
from sface.screens.sfascreen import SfaScreen
+from sfa.util.version import version_core
+from sface.version import version_dict
+
+from sface.sficreate import CreateWindow, RemoveWindow
+
+static_labels = {
+ 'slice' : [
+ "Sface : %s (%s)" % (version_dict()['code_tag'], version_dict()['code_url']),
+ "with (local) SFA libs : %s (%s)" % (version_core()['code_tag'],version_core()['code_url']),
+ ] ,
+ 'registry': "usual port for registry: 12345",
+ 'slicemgr': ["usual port for slice manager: 12347","usual port for aggregate: 12346"],
+}
+
class ConfigWidget(QWidget):
def __init__(self, parent):
QWidget.__init__(self, parent)
+ # init can be called several times for when the config dir is changed
+ self.inited=False
+ self.init ()
- layout = QVBoxLayout()
+ def store_local (self, name, value):
+ setattr (self, 'widget_'+name, value)
+ def retrieve_local (self, name):
+ return getattr (self, 'widget_'+name, None)
+
+ def init (self):
+ # if already inited we just need to set the values
+ if self.inited:
+ for (field,msg) in config.field_labels():
+ edit = self.retrieve_local(field)
+ if isinstance (edit,QCheckBox):
+ if config.is_true(config.get(field)): edit.setCheckState (Qt.Checked)
+ else: edit.setCheckState (Qt.Unchecked)
+ else:
+ edit.setText (config.get(field) or "")
+ return
+
+ # otherwise we need to build the whole thing up
+ glayout = QGridLayout()
+ row = 0
for (field,msg) in config.field_labels():
- # label
- layout.addWidget(QLabel(msg,self))
+
+ if static_labels.has_key(field):
+ labels=static_labels[field]
+ if not isinstance(labels,list): labels = [ labels, ]
+ for label in labels:
+ glayout.addWidget(QLabel(label),row,1)
+ row+=1
# edit : text or checkbox
default=config.field_default(field)
if isinstance(default,bool):
edit=QCheckBox(msg)
+ self.store_local (field, edit)
if config.is_true(config.get(field)):
edit.setCheckState(Qt.Checked)
else:
- edit=QLineEdit(config.get(field), self)
+ edit=QLineEdit(config.get(field) or "", self)
+ self.store_local (field, edit)
edit.setAttribute(Qt.WA_MacShowFocusRect, 0)
setattr(self,field,edit)
- layout.addWidget (edit)
+
+ glayout.addWidget(QLabel(msg+":",self), row, 0)
+ glayout.addWidget(edit, row, 1)
+
+ row += 1
hlayout = QHBoxLayout()
- hlayout.addStretch()
- for (action,label) in [('apply','Apply'),
- ('save','Apply && Save')]:
+ def bottom_button (action,label,align):
button=QPushButton(label, self)
button.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum)
- hlayout.addWidget(button, 0, Qt.AlignRight)
+ hlayout.addWidget(button,0,align)
hlayout.addSpacing(10)
self.connect(button, SIGNAL('clicked()'), getattr(self,action))
+
+ bottom_button ('load','Load Config Dir',Qt.AlignLeft)
+
+ # the config dir edit dialog
+ confdir=QLineEdit (config.get_dirname(),self)
+ self.store_local('config_dirname',confdir)
+ confdir.setAttribute(Qt.WA_MacShowFocusRect, 0)
+ confdir.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Maximum)
+ confdir.setStyleSheet("QLineEdit { width: 200px; }")
+ self.connect(confdir,SIGNAL ('returnPressed()'), self.load)
+ hlayout.addWidget (confdir,0,Qt.AlignLeft)
+ hlayout.addSpacing(10)
+
+ hlayout.addStretch()
+ bottom_button ('deleteSlice', 'Delete Slice', Qt.AlignRight),
+ bottom_button ('createSlice', 'Create New Slice', Qt.AlignRight),
+ bottom_button ('apply','Apply Only',Qt.AlignRight),
+ bottom_button ('save','Apply && Save',Qt.AlignRight)
+
+ layout = QVBoxLayout()
+ layout.addLayout(glayout)
layout.addLayout(hlayout)
+ layout.addStretch()
self.setLayout(layout)
+ self.inited=True
+
+ def createSlice(self):
+ dlg = CreateWindow(parent=self)
+ dlg.exec_()
+ if (dlg.sliceWasCreated):
+ self.slice.setText(dlg.getHrn())
+ self.save()
+ def deleteSlice(self):
+ dlg = RemoveWindow(hrn = config.getSlice(), parent=self)
+ dlg.exec_()
def apply(self):
for field in config.fields():
@@ -52,14 +130,31 @@ class ConfigWidget(QWidget):
self.parent().setStatus("Settings loaded for current session", timeout=5000)
config.display("after apply")
+ self.parent().signalAll('configurationChanged')
+
+
def save(self):
self.apply()
config.save_config()
- self.parent().setStatus("Configuration saved in %s !"%config.filename(), timeout=5000)
+ self.parent().setStatus("Configuration saved in %s !"%config.config_file(), timeout=5000)
+
+ # switch to another config dir
+ def load(self):
+ # obtain new dor somehow
+
+ edit=self.retrieve_local('config_dirname')
+ newdir=str(edit.text())
+ newdir+='/'
+ print 'installing',newdir
+ config.set_dirname (newdir)
+ self.init()
+ self.parent().signalAll('configurationChanged')
+
class ConfigScreen(SfaScreen):
def __init__(self, parent):
SfaScreen.__init__(self, parent)
widget = ConfigWidget(self)
- self.init(widget, "Configure", "Configure the OneLab Federation GUI")
+ self.init(widget, "Configure", "Configure the OneLab SFA crawler")
+