MultiProject/MultiProject.py

changeset 3197
4103c8013c36
parent 3190
a9a94491c4fd
child 3345
071afe8be2a1
equal deleted inserted replaced
3196:cfc025de587c 3197:4103c8013c36
87 self.description = "" # description of the multi project 87 self.description = "" # description of the multi project
88 self.name = "" 88 self.name = ""
89 self.opened = False 89 self.opened = False
90 self.projects = [] # list of project info; each info entry is 90 self.projects = [] # list of project info; each info entry is
91 # a dictionary 91 # a dictionary
92 # 'name' : Name of the project 92 # 'name' : name of the project
93 # 'file' : project filename 93 # 'file' : project file name
94 # 'master' : flag indicating the master 94 # 'master' : flag indicating the master
95 # project 95 # project
96 # 'description' : description of the project 96 # 'description' : description of the project
97 # 'category' : name of the group
98 self.categories = []
97 99
98 def __loadRecent(self): 100 def __loadRecent(self):
99 """ 101 """
100 Private method to load the recently opened multi project filenames. 102 Private method to load the recently opened multi project filenames.
101 """ 103 """
185 187
186 if removelist: 188 if removelist:
187 for project in removelist: 189 for project in removelist:
188 self.projects.remove(project) 190 self.projects.remove(project)
189 self.setDirty(True) 191 self.setDirty(True)
192
193 def __extractCategories(self):
194 """
195 Private slot to extract the categories used in the project definitions.
196 """
197 for project in self.projects:
198 if project['category'] and \
199 project['category'] not in self.categories:
200 self.categories.append(project['category'])
201
202 def getCategories(self):
203 """
204 Public method to get the list of defined categories.
205
206 @return list of categories (list of string)
207 """
208 return [c for c in self.categories if c]
190 209
191 def __readMultiProject(self, fn): 210 def __readMultiProject(self, fn):
192 """ 211 """
193 Private method to read in a multi project (.e4m) file. 212 Private method to read in a multi project (.e4m) file.
194 213
214 return False 233 return False
215 234
216 self.pfile = os.path.abspath(fn) 235 self.pfile = os.path.abspath(fn)
217 self.ppath = os.path.abspath(os.path.dirname(fn)) 236 self.ppath = os.path.abspath(os.path.dirname(fn))
218 237
238 self.__extractCategories()
239
219 # insert filename into list of recently opened multi projects 240 # insert filename into list of recently opened multi projects
220 self.__syncRecent() 241 self.__syncRecent()
221 242
222 self.name = os.path.splitext(os.path.basename(fn))[0] 243 self.name = os.path.splitext(os.path.basename(fn))[0]
223 244
276 from .AddProjectDialog import AddProjectDialog 297 from .AddProjectDialog import AddProjectDialog
277 if not startdir: 298 if not startdir:
278 startdir = self.ppath 299 startdir = self.ppath
279 if not startdir: 300 if not startdir:
280 startdir = Preferences.getMultiProject("Workspace") 301 startdir = Preferences.getMultiProject("Workspace")
281 dlg = AddProjectDialog(self.ui, startdir=startdir) 302 dlg = AddProjectDialog(self.ui, startdir=startdir,
303 categories=self.categories)
282 if dlg.exec_() == QDialog.Accepted: 304 if dlg.exec_() == QDialog.Accepted:
283 name, filename, isMaster, description = dlg.getData() 305 name, filename, isMaster, description, category = dlg.getData()
284 306
285 # step 1: check, if project was already added 307 # step 1: check, if project was already added
286 for project in self.projects: 308 for project in self.projects:
287 if project['file'] == filename: 309 if project['file'] == filename:
288 return 310 return
300 project = { 322 project = {
301 'name': name, 323 'name': name,
302 'file': filename, 324 'file': filename,
303 'master': isMaster, 325 'master': isMaster,
304 'description': description, 326 'description': description,
327 'category': category,
305 } 328 }
306 self.projects.append(project) 329 self.projects.append(project)
330 if category not in self.categories:
331 self.categories.append(category)
307 self.projectAdded.emit(project) 332 self.projectAdded.emit(project)
308 self.setDirty(True) 333 self.setDirty(True)
309 334
310 def changeProjectProperties(self, pro): 335 def changeProjectProperties(self, pro):
311 """ 336 """
324 break 349 break
325 350
326 # step 2: change the entry 351 # step 2: change the entry
327 for project in self.projects: 352 for project in self.projects:
328 if project['file'] == pro['file']: 353 if project['file'] == pro['file']:
329 # project filename is not changeable via interface 354 # project file name is not changeable via interface
330 project['name'] = pro['name'] 355 project['name'] = pro['name']
331 project['master'] = pro['master'] 356 project['master'] = pro['master']
332 project['description'] = pro['description'] 357 project['description'] = pro['description']
358 project['category'] = pro['category']
359 if project['category'] not in self.categories:
360 self.categories.append(project['category'])
333 self.projectDataChanged.emit(project) 361 self.projectDataChanged.emit(project)
334 self.setDirty(True) 362 self.setDirty(True)
335 363
336 def getProjects(self): 364 def getProjects(self):
337 """ 365 """
418 fn = E5FileDialog.getOpenFileName( 446 fn = E5FileDialog.getOpenFileName(
419 self.parent(), 447 self.parent(),
420 self.tr("Open multiproject"), 448 self.tr("Open multiproject"),
421 Preferences.getMultiProject("Workspace") or 449 Preferences.getMultiProject("Workspace") or
422 Utilities.getHomeDir(), 450 Utilities.getHomeDir(),
423 self.tr("Multiproject Files (*.e4m)")) 451 self.tr("Multiproject Files (*.e5m *.e4m)"))
424 452
425 if fn == "": 453 if fn == "":
426 fn = None 454 fn = None
427 455
428 QApplication.processEvents() 456 QApplication.processEvents()
455 483
456 @return flag indicating success (boolean) 484 @return flag indicating success (boolean)
457 """ 485 """
458 if self.isDirty(): 486 if self.isDirty():
459 if len(self.pfile) > 0: 487 if len(self.pfile) > 0:
488 if self.pfile.endswith(".e4m"):
489 self.pfile = self.pfile.replace(".e4m", ".e5m")
490 self.__syncRecent()
460 ok = self.__writeMultiProject() 491 ok = self.__writeMultiProject()
461 else: 492 else:
462 ok = self.saveMultiProjectAs() 493 ok = self.saveMultiProjectAs()
463 else: 494 else:
464 ok = True 495 ok = True
468 """ 499 """
469 Public slot to save the current multi project to a different file. 500 Public slot to save the current multi project to a different file.
470 501
471 @return flag indicating success (boolean) 502 @return flag indicating success (boolean)
472 """ 503 """
473 defaultFilter = self.tr("Multiproject Files (*.e4m)") 504 defaultFilter = self.tr("Multiproject Files (*.e5m)")
474 if self.ppath: 505 if self.ppath:
475 defaultPath = self.ppath 506 defaultPath = self.ppath
476 else: 507 else:
477 defaultPath = Preferences.getMultiProject("Workspace") or \ 508 defaultPath = Preferences.getMultiProject("Workspace") or \
478 Utilities.getHomeDir() 509 Utilities.getHomeDir()
479 fn, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( 510 fn, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
480 self.parent(), 511 self.parent(),
481 self.tr("Save multiproject as"), 512 self.tr("Save multiproject as"),
482 defaultPath, 513 defaultPath,
483 self.tr("Multiproject Files (*.e4m)"), 514 self.tr("Multiproject Files (*.e5m)"),
484 defaultFilter, 515 defaultFilter,
485 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) 516 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
486 517
487 if fn: 518 if fn:
488 ext = QFileInfo(fn).suffix() 519 ext = QFileInfo(fn).suffix()

eric ide

mercurial