| Home | Trees | Indices | Help |
|
|---|
|
|
1 #!/usr/bin/python 2 # -*- coding: utf-8 -*- 3 ''' 4 @author: Ricardo Ribeiro 5 @credits: Ricardo Ribeiro 6 @license: MIT 7 @version: 0.0 8 @maintainer: Ricardo Ribeiro 9 @email: ricardojvr@gmail.com 10 @status: Development 11 @lastEditedBy: Carlos Mão de Ferro (carlos.maodeferro@neuro.fchampalimaud.org) 12 ''' 13 14 from pyforms.gui.Controls.ControlBase import ControlBase 15 from pyforms.gui.Controls.ControlProgress import ControlProgress 16 import os, json, subprocess, time 17 from datetime import datetime, timedelta 18 from PyQt4 import QtGui, QtCore 19 from pyforms import conf23 """ 24 The class implements the most basic widget or window. 25 """ 2639428 QtGui.QWidget.__init__(self) 29 layout = QtGui.QVBoxLayout() 30 self.setLayout(layout) 31 self.layout().setMargin(0) 32 33 self.title = title 34 35 self._mainmenu = [] 36 self._splitters = [] 37 self._tabs = [] 38 self._formset = None 39 self._formLoaded = False40 41 42 43 ########################################################################## 44 ############ Module functions ########################################### 45 ########################################################################## 46 47 4850 """ 51 Generate the module Form 52 """ 53 if not self._formLoaded: 54 55 if conf.PYFORMS_MODE in ['GUI-OPENCSP']: 56 self._progress = ControlProgress("Progress", 0, 100) 57 if self._formset != None: self._formset += ['_progress'] 58 59 if self._formset is not None: 60 control = self.generatePanel(self._formset) 61 self.layout().addWidget(control) 62 else: 63 allparams = self.formControls 64 for key, param in allparams.items(): 65 param.parent = self 66 param.name = key 67 self.layout().addWidget(param.form) 68 self._formLoaded = True6971 """ 72 Generate QTabWidget for the module form 73 @param formset: Tab form configuration 74 @type formset: dict 75 """ 76 tabs = QtGui.QTabWidget(self) 77 for key, item in sorted(formsetDict.items()): 78 ctrl = self.generatePanel(item) 79 tabs.addTab(ctrl, key[key.find(':') + 1:]) 80 return tabs8183 """ 84 Generate a panel for the module form with all the controls 85 formset format example: [('_video', '_arenas', '_run'), {"Player":['_threshold', "_player", "=", "_results", "_query"], "Background image":[(' ', '_selectBackground', '_paintBackground'), '_image']}, "_progress"] 86 tuple: will display the controls in the same horizontal line 87 list: will display the controls in the same vertical line 88 dict: will display the controls in a tab widget 89 '||': will plit the controls in a horizontal line 90 '=': will plit the controls in a vertical line 91 @param formset: Form configuration 92 @type formset: list 93 """ 94 control = None 95 if '=' in formset: 96 control = QtGui.QSplitter(QtCore.Qt.Vertical) 97 tmp = list(formset) 98 index = tmp.index('=') 99 firstPanel = self.generatePanel(formset[0:index]) 100 secondPanel = self.generatePanel(formset[index + 1:]) 101 control.addWidget(firstPanel) 102 control.addWidget(secondPanel) 103 self._splitters.append(control) 104 return control 105 elif '||' in formset: 106 control = QtGui.QSplitter(QtCore.Qt.Horizontal) 107 tmp = list(formset) 108 rindex = lindex = index = tmp.index('||') 109 rindex -= 1 110 rindex += 2 111 if isinstance(formset[lindex - 1], int): 112 lindex = lindex - 1 113 if len(formset) > rindex and isinstance(formset[index + 1], int): 114 rindex += 1 115 firstPanel = self.generatePanel(formset[0:lindex]) 116 secondPanel = self.generatePanel(formset[rindex:]) 117 if isinstance(formset[index - 1], int): 118 firstPanel.setMaximumWidth(formset[index - 1]) 119 if isinstance(formset[index + 1], int): 120 secondPanel.setMaximumWidth(formset[index + 1]) 121 control.addWidget(firstPanel) 122 control.addWidget(secondPanel) 123 self._splitters.append(control) 124 return control 125 control = QtGui.QWidget() 126 layout = None 127 if type(formset) is tuple: 128 layout = QtGui.QHBoxLayout() 129 for row in formset: 130 if isinstance(row, (list, tuple)): 131 panel = self.generatePanel(row) 132 layout.addWidget(panel) 133 elif row == " ": 134 spacer = QtGui.QSpacerItem( 135 40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) 136 layout.addItem(spacer) 137 elif type(row) is dict: 138 c = self.generateTabs(row) 139 layout.addWidget(c) 140 self._tabs.append(c) 141 else: 142 param = self.formControls.get(row, None) 143 if param is None: 144 label = QtGui.QLabel() 145 label.setSizePolicy( 146 QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Maximum) 147 #layout.addWidget( label ) 148 149 if row.startswith('info:'): 150 label.setText(row[5:]) 151 font = QtGui.QFont() 152 font.setPointSize(10) 153 label.setFont(font) 154 elif row.startswith('h1:'): 155 label.setText(row[3:]) 156 font = QtGui.QFont() 157 font.setPointSize(17) 158 font.setBold(True) 159 label.setFont(font) 160 elif row.startswith('h2:'): 161 label.setText(row[3:]) 162 font = QtGui.QFont() 163 font.setPointSize(16) 164 font.setBold(True) 165 label.setFont(font) 166 elif row.startswith('h3:'): 167 label.setText(row[3:]) 168 font = QtGui.QFont() 169 font.setPointSize(15) 170 font.setBold(True) 171 label.setFont(font) 172 elif row.startswith('h4:'): 173 label.setText(row[3:]) 174 font = QtGui.QFont() 175 font.setPointSize(14) 176 font.setBold(True) 177 label.setFont(font) 178 elif row.startswith('h5:'): 179 label.setText(row[3:]) 180 font = QtGui.QFont() 181 font.setPointSize(12) 182 font.setBold(True) 183 label.setFont(font) 184 else: 185 label.setText(row) 186 font = QtGui.QFont() 187 font.setPointSize(10) 188 label.setFont(font) 189 190 layout.addWidget(label) 191 else: 192 param.parent = self 193 param.name = row 194 layout.addWidget(param.form) 195 elif type(formset) is list: 196 layout = QtGui.QVBoxLayout() 197 for row in formset: 198 if isinstance(row, (list, tuple)): 199 panel = self.generatePanel(row) 200 layout.addWidget(panel) 201 elif row == " ": 202 spacer = QtGui.QSpacerItem( 203 20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding) 204 layout.addItem(spacer) 205 elif type(row) is dict: 206 c = self.generateTabs(row) 207 layout.addWidget(c) 208 self._tabs.append(c) 209 else: 210 param = self.formControls.get(row, None) 211 if param is None: 212 label = QtGui.QLabel() 213 label.setSizePolicy( 214 QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Maximum) 215 label.resize(30, 30) 216 #layout.addWidget( label ) 217 218 if row.startswith('info:'): 219 label.setText(row[5:]) 220 font = QtGui.QFont() 221 font.setPointSize(10) 222 label.setFont(font) 223 elif row.startswith('h1:'): 224 label.setText(row[3:]) 225 font = QtGui.QFont() 226 font.setPointSize(17) 227 font.setBold(True) 228 label.setFont(font) 229 elif row.startswith('h2:'): 230 label.setText(row[3:]) 231 font = QtGui.QFont() 232 font.setPointSize(16) 233 font.setBold(True) 234 label.setFont(font) 235 elif row.startswith('h3:'): 236 label.setText(row[3:]) 237 font = QtGui.QFont() 238 font.setPointSize(15) 239 font.setBold(True) 240 label.setFont(font) 241 elif row.startswith('h4:'): 242 label.setText(row[3:]) 243 font = QtGui.QFont() 244 font.setPointSize(14) 245 font.setBold(True) 246 label.setFont(font) 247 elif row.startswith('h5:'): 248 label.setText(row[3:]) 249 font = QtGui.QFont() 250 font.setPointSize(12) 251 font.setBold(True) 252 label.setFont(font) 253 else: 254 label.setText(row) 255 font = QtGui.QFont() 256 font.setPointSize(10) 257 label.setFont(font) 258 259 layout.addWidget(label) 260 else: 261 param.parent = self 262 param.name = row 263 layout.addWidget(param.form) 264 layout.setMargin(0) 265 control.setLayout(layout) 266 return control267 268 ########################################################################## 269 ############ Parent class functions reemplementation ##################### 270 ########################################################################## 271 278 279 ########################################################################## 280 ############ Properties ################################################## 281 ########################################################################## 282 283 @property285 """ 286 Return all the form controls from the the module 287 """ 288 result = {} 289 for name, var in vars(self).items(): 290 if isinstance(var, ControlBase): 291 result[name] = var 292 return result293295 self._progress.max = total 296 self._progress.min = 0 297 self._progress.value = 0 298 self._processing_count = 0 299 self._processing_initial_time = time.time()300302 self._progress.value = self._processing_count 303 self._processing_count += progress 304 305 div = int(self._progress.max / 400) 306 if div == 0: 307 div = 1 308 if (self._processing_count % div) == 0: 309 self._processing_last_time = time.time() 310 total_passed_time = self._processing_last_time - \ 311 self._processing_initial_time 312 remaining_time = ( 313 (self._progress.max * total_passed_time) / self._processing_count) - total_passed_time 314 time_remaining = datetime( 315 1, 1, 1) + timedelta(seconds=remaining_time) 316 time_elapsed = datetime( 317 1, 1, 1) + timedelta(seconds=(total_passed_time)) 318 319 values = (time_elapsed.day - 1, time_elapsed.hour, time_elapsed.minute, time_elapsed.second, 320 time_remaining.day - 321 1, time_remaining.hour, time_remaining.minute, time_remaining.second, 322 (float(self._processing_count) / float(self._progress.max) 323 ) * 100.0, self._processing_count, self._progress.max, 324 self._processing_count / total_passed_time) 325 self._progress.label = "Elapsed: %d:%d:%d:%d; Remaining: %d:%d:%d:%d; Processed %0.2f %% (%d/%d); Cicles per second: %0.3f" % values 326 327 QtGui.QApplication.processEvents()328 332334 if cwd is not None: 335 currentdirectory = os.getcwd() 336 os.chdir(cwd) 337 proc = subprocess.Popen( 338 cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 339 (output, error) = proc.communicate() 340 if cwd is not None: 341 os.chdir(currentdirectory) 342 if error: 343 print('Error: ' + error) 344 return output345 346 @property 348 349 @property 351 352 @title.setter 354 355 @property 357 358 @mainmenu.setter 360 361363 allparams = self.formControls 364 for name, param in allparams.items(): 365 data[name] = {} 366 param.save(data[name])367369 allparams = self.formControls 370 data = {} 371 self.save(data) 372 373 filename = QtGui.QFileDialog.getSaveFileName(self, 'Select file') 374 375 with open(filename, 'w') as output_file: 376 json.dump(data, output_file)377379 with open(filename, 'r') as pkl_file: 380 project_data = json.load(pkl_file) 381 data = dict(project_data) 382 self.load(data)383385 allparams = self.formControls 386 for name, param in allparams.items(): 387 if name in data: 388 param.load(data[name]) 389 self.initForm()390392 filename = QtGui.QFileDialog.getOpenFileNames(self, 'Select file') 393 self.loadWindowData(str(filename[0]))
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1 on Fri Sep 11 13:06:35 2015 | http://epydoc.sourceforge.net |