1 #!/usr/bin/env python 2 3 import os 4 5 class ConfiguratorResource: 6 7 # Standard attributes. 8 9 resource_dir = os.path.join(os.path.split(__file__)[0], "Resources") 10 11 design_resources = { 12 "configuration" : "config.ui" 13 } 14 15 widget_resources = { 16 "hard-disk" : ("config_hard_disk.ui", "hard_disk"), 17 "memory-unit" : ("config_memory_unit.ui", "memory_unit"), 18 "storage-unit" : ("config_storage_unit.ui", "storage_unit") 19 #"hard-disks" : ("config_hard_disks.ui", "hard_disks"), 20 #"memory-units" : ("config_memory_units.ui", "memory_units"), 21 #"storage-units" : ("config_storage_units.ui", "storage_units") 22 } 23 24 document_resources = { 25 "base-system" : "config_base_system.xml", 26 "cpu" : "config_cpu.xml", 27 "hard-disk" : "config_hard_disk.xml", 28 "keyboard" : "config_keyboard.xml", 29 "mouse" : "config_mouse.xml", 30 "screen" : "config_screen.xml" 31 } 32 33 # Initialisation. 34 35 def __init__(self, *args, **kw): 36 pass 37 38 def form_init(self): 39 40 # NOTE: This would be done for whole page updates in a Web application. 41 42 # Get field data. 43 44 self.populate_list(self.child("base_system"), self.get_elements("base-system")) 45 self.populate_list(self.child("keyboard"), self.get_elements("keyboard")) 46 self.populate_list(self.child("mouse"), self.get_elements("mouse")) 47 self.populate_list(self.child("screen"), self.get_elements("screen")) 48 self.reset_collection(self.child("hard_disks")) 49 self.reset_collection(self.child("memory_units")) 50 self.reset_collection(self.child("storage_units")) 51 52 # General functionality. 53 54 def form_refresh(self, current_text=None): 55 56 # Ensure consistency. 57 # NOTE: This would be done for whole page updates in a Web application. 58 # NOTE: This would also be done for page updates where the information 59 # NOTE: involved was important. 60 61 current_text = current_text or self.child("base_system").currentText() 62 63 # Find the CPU socket and the interface of the current base system. 64 cpu_socket = None 65 interface = None 66 for element in self.get_elements("base-system"): 67 text = element.getAttribute("value") 68 if text == current_text: 69 cpu_socket = element.getAttribute("cpu-socket") 70 interface = element.getAttribute("interface") 71 72 # Find all valid CPUs. 73 valid = [] 74 for element in self.get_elements("cpu"): 75 if not element.hasAttribute("cpu-socket") or element.getAttribute("cpu-socket") == cpu_socket: 76 valid.append(element) 77 self.populate_list(self.child("cpu"), valid) 78 79 # Find all valid hard disks. 80 valid = [] 81 for element in self.get_elements("hard-disk"): 82 if not element.hasAttribute("interface") or element.getAttribute("interface") == interface: 83 valid.append(element) 84 for hard_disk_value in self.factory.find_widgets(self, "hard_disk_value"): 85 self.populate_list(hard_disk_value, valid) 86 87 # Slots. 88 89 def baseSystemChanged(self, current_text): 90 self.form_refresh(current_text) 91 92 def addHardDisk(self): 93 #hard_disks = self.prepare_widget("configuration", "hard-disks") 94 #tab_pages = hard_disks.child("tab pages") 95 #tab = tab_pages.child("tab") 96 #self.child("hard_disks").addTab(tab, hard_disks.tabLabel(tab)) 97 #self.factory.connect(tab, self) 98 hard_disk = self.prepare_widget("configuration", "hard-disk", self.child("hard_disks")) 99 self.child("hard_disks").layout().add(hard_disk) 100 hard_disk.show() 101 self.factory.connect(hard_disk, self) 102 103 # Perform the consistency check. 104 # NOTE: This is not as efficient as it could be since the general check 105 # NOTE: refreshes all fields, not just newly added ones. 106 self.form_refresh() 107 108 def addMemoryUnit(self): 109 #memory_units = self.prepare_widget("configuration", "memory-units") 110 #tab_pages = memory_units.child("tab pages") 111 #tab = tab_pages.child("tab") 112 #self.child("memory_units").addTab(tab, memory_units.tabLabel(tab)) 113 #self.factory.connect(tab, self) 114 memory_unit = self.prepare_widget("configuration", "memory-unit", self.child("memory_units")) 115 self.child("memory_units").layout().add(memory_unit) 116 memory_unit.show() 117 self.factory.connect(memory_unit, self) 118 119 # Perform the consistency check. 120 # NOTE: This is not as efficient as it could be since the general check 121 # NOTE: refreshes all fields, not just newly added ones. 122 self.form_refresh() 123 124 def addStorageUnit(self): 125 #storage_units = self.prepare_widget("configuration", "storage-units") 126 #tab_pages = storage_units.child("tab pages") 127 #tab = tab_pages.child("tab") 128 #self.child("storage_units").addTab(tab, storage_units.tabLabel(tab)) 129 #self.factory.connect(tab, self) 130 storage_unit = self.prepare_widget("configuration", "storage-unit", self.child("storage_units")) 131 self.child("storage_units").layout().add(storage_unit) 132 storage_unit.show() 133 self.factory.connect(storage_unit, self) 134 135 # Perform the consistency check. 136 # NOTE: This is not as efficient as it could be since the general check 137 # NOTE: refreshes all fields, not just newly added ones. 138 self.form_refresh() 139 140 def removeHardDisk(self): 141 #page = self.hard_disks.currentPage() 142 #self.hard_disks.removePage(page) 143 #page.deleteLater() 144 remove_hard_disk = self.sender() 145 hard_disk = remove_hard_disk.parent() 146 self.child("hard_disks").layout().remove(hard_disk) 147 hard_disk.deleteLater() 148 149 def removeMemoryUnit(self): 150 #page = self.memory_units.currentPage() 151 #self.memory_units.removePage(page) 152 #page.deleteLater() 153 remove_memory_unit = self.sender() 154 memory_unit = remove_memory_unit.parent() 155 self.child("memory_units").layout().remove(memory_unit) 156 memory_unit.deleteLater() 157 158 def removeStorageUnit(self): 159 #page = self.storage_units.currentPage() 160 #self.storage_units.removePage(page) 161 #page.deleteLater() 162 remove_storage_unit = self.sender() 163 storage_unit = remove_storage_unit.parent() 164 self.child("storage_units").layout().remove(storage_unit) 165 storage_unit.deleteLater() 166 167 def updateConfig(self): 168 self.form_refresh() 169 170 def exportConfig(self): 171 print "configuration.exportConfig(): Not implemented yet" 172 173 def get_resource(resource_type, *args, **kw): 174 175 if resource_type == "PyQt": 176 import XSLForms.Resources.PyQtResources 177 import QtConfigurator.Forms 178 class Configurator(ConfiguratorResource, QtConfigurator.Forms.Configurator, XSLForms.Resources.PyQtResources.XSLFormsResource): 179 def __init__(self, *args, **kw): 180 QtConfigurator.Forms.Configurator.__init__(self, *args, **kw) 181 XSLForms.Resources.PyQtResources.XSLFormsResource.__init__(self, "configuration") 182 ConfiguratorResource.__init__(self, *args, **kw) 183 resource = Configurator(*args, **kw) 184 resource.form_init() 185 186 else: 187 import XSLForms.Resources.PyQtWebResources 188 class Configurator(ConfiguratorResource, XSLForms.Resources.PyQtWebResources.XSLFormsResource): 189 def __init__(self, *args, **kw): 190 XSLForms.Resources.PyQtWebResources.XSLFormsResource.__init__(self, "configuration") 191 ConfiguratorResource.__init__(self, *args, **kw) 192 resource = Configurator(*args, **kw) 193 # Do not initialise the resource here - it happens when a Web request is 194 # received. 195 196 return resource 197 198 # vim: tabstop=4 expandtab shiftwidth=4