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 |
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() |