29 class PropertiesDialog(QDialog, Ui_PropertiesDialog): |
29 class PropertiesDialog(QDialog, Ui_PropertiesDialog): |
30 """ |
30 """ |
31 Class implementing the project properties dialog. |
31 Class implementing the project properties dialog. |
32 """ |
32 """ |
33 |
33 |
34 def __init__(self, project, new=True, parent=None, name=None): |
34 def __init__(self, project, new=True, isRemote=False, parent=None, name=None): |
35 """ |
35 """ |
36 Constructor |
36 Constructor |
37 |
37 |
38 @param project reference to the project object |
38 @param project reference to the project object |
39 @type Project |
39 @type Project |
40 @param new flag indicating the generation of a new project |
40 @param new flag indicating the generation of a new project |
41 (defaults to True) |
41 (defaults to True) |
42 @type bool (optional) |
42 @type bool (optional) |
|
43 @param isRemote flag indicating a remote project (defaults to False) |
|
44 @type bool (optional) |
43 @param parent parent widget of this dialog (defaults to None) |
45 @param parent parent widget of this dialog (defaults to None) |
44 @type QWidget (optional) |
46 @type QWidget (optional) |
45 @param name name of this dialog (defaults to None) |
47 @param name name of this dialog (defaults to None) |
46 @type str (optional) |
48 @type str (optional) |
47 """ |
49 """ |
48 super().__init__(parent) |
50 super().__init__(parent) |
49 if name: |
51 if name: |
50 self.setObjectName(name) |
52 self.setObjectName(name) |
51 self.setupUi(self) |
53 self.setupUi(self) |
52 |
54 |
|
55 self.__remoteProject = isRemote |
|
56 self.__remotefsInterface = ( |
|
57 ericApp().getObject("EricServer").getServiceInterface("FileSystem") |
|
58 ) |
|
59 |
53 self.dirPicker.setMode(EricPathPickerModes.DIRECTORY_MODE) |
60 self.dirPicker.setMode(EricPathPickerModes.DIRECTORY_MODE) |
|
61 self.dirPicker.setRemote(isRemote) |
|
62 |
54 self.srcDirPicker.setMode(EricPathPickerModes.DIRECTORY_MODE) |
63 self.srcDirPicker.setMode(EricPathPickerModes.DIRECTORY_MODE) |
|
64 self.srcDirPicker.setRemote(isRemote) |
|
65 |
55 self.mainscriptPicker.setMode(EricPathPickerModes.OPEN_FILE_MODE) |
66 self.mainscriptPicker.setMode(EricPathPickerModes.OPEN_FILE_MODE) |
|
67 self.mainscriptPicker.setRemote(isRemote) |
56 |
68 |
57 self.makeButton.setIcon(EricPixmapCache.getIcon("makefile")) |
69 self.makeButton.setIcon(EricPixmapCache.getIcon("makefile")) |
58 |
70 |
59 self.docstringStyleComboBox.addItem(self.tr("None"), "") |
71 self.docstringStyleComboBox.addItem(self.tr("None"), "") |
60 for docstringType, docstringStyle in sorted(getSupportedDocstringTypes()): |
72 for docstringType, docstringStyle in sorted(getSupportedDocstringTypes()): |
61 self.docstringStyleComboBox.addItem(docstringStyle, docstringType) |
73 self.docstringStyleComboBox.addItem(docstringStyle, docstringType) |
62 |
74 |
63 self.project = project |
75 self.project = project |
64 self.newProject = new |
76 self.newProject = new |
|
77 |
65 self.transPropertiesDlg = None |
78 self.transPropertiesDlg = None |
66 self.spellPropertiesDlg = None |
79 self.spellPropertiesDlg = None |
67 self.makePropertiesDlg = None |
80 self.makePropertiesDlg = None |
68 self.__fileTypesDict = {} |
81 self.__fileTypesDict = {} |
69 |
82 |
|
83 if self.__remoteProject: |
|
84 # some stuff is not supported for remote projects |
|
85 self.makeCheckBox.setEnabled(False) |
|
86 self.makeButton.setEnabled(False) |
|
87 self.testingFrameworkComboBox.setEnabled(False) |
|
88 self.embeddedVenvCheckBox.setEnabled(False) |
|
89 self.spellPropertiesButton.setEnabled(False) |
70 self.languageComboBox.addItems(project.getProgrammingLanguages()) |
90 self.languageComboBox.addItems(project.getProgrammingLanguages()) |
71 |
91 |
72 projectTypes = [] |
92 projectTypes = [] |
73 for projectTypeItem in project.getProjectTypes().items(): |
93 for projectTypeItem in project.getProjectTypes().items(): |
74 projectTypes.append((projectTypeItem[1], projectTypeItem[0])) |
94 projectTypes.append((projectTypeItem[1], projectTypeItem[0])) |
75 self.projectTypeComboBox.clear() |
95 self.projectTypeComboBox.clear() |
76 for projectType in sorted(projectTypes): |
96 for projectType in sorted(projectTypes): |
77 self.projectTypeComboBox.addItem(projectType[0], projectType[1]) |
97 self.projectTypeComboBox.addItem(projectType[0], projectType[1]) |
78 |
98 |
79 ipath = Preferences.getMultiProject("Workspace") or OSUtilities.getHomeDir() |
99 if self.__remoteProject: |
80 self.__initPaths = [ |
100 self.__initPaths = [self.__remotefsInterface.getcwd()] |
81 FileSystemUtilities.fromNativeSeparators(ipath), |
101 else: |
82 FileSystemUtilities.fromNativeSeparators(ipath) + "/", |
102 ipath = Preferences.getMultiProject("Workspace") or OSUtilities.getHomeDir() |
83 ] |
103 self.__initPaths = [ |
|
104 FileSystemUtilities.fromNativeSeparators(ipath), |
|
105 FileSystemUtilities.fromNativeSeparators(ipath) + "/", |
|
106 ] |
84 |
107 |
85 self.licenseComboBox.lineEdit().setClearButtonEnabled(True) |
108 self.licenseComboBox.lineEdit().setClearButtonEnabled(True) |
86 self.__populateLicenseComboBox() |
109 self.__populateLicenseComboBox() |
87 |
110 |
88 if not new: |
111 if not new: |
89 name = os.path.splitext(self.project.pfile)[0] |
112 self.nameEdit.setReadOnly(True) |
90 self.nameEdit.setText(os.path.basename(name)) |
113 self.dirPicker.setReadOnly(True) |
|
114 |
|
115 if self.__remoteProject: |
|
116 name = self.__remotefsInterface.splitext(self.project.pfile)[0] |
|
117 self.nameEdit.setText(self.__remotefsInterface.basename(name)) |
|
118 else: |
|
119 name = os.path.splitext(self.project.pfile)[0] |
|
120 self.nameEdit.setText(os.path.basename(name)) |
91 self.nameEdit.setReadOnly(True) |
121 self.nameEdit.setReadOnly(True) |
92 self.languageComboBox.setCurrentIndex( |
122 self.languageComboBox.setCurrentIndex( |
93 self.languageComboBox.findText( |
123 self.languageComboBox.findText( |
94 self.project.getProjectData(dataKey="PROGLANGUAGE") |
124 self.project.getProjectData(dataKey="PROGLANGUAGE") |
95 ) |
125 ) |
114 self.descriptionEdit.setPlainText( |
144 self.descriptionEdit.setPlainText( |
115 self.project.getProjectData(dataKey="DESCRIPTION") |
145 self.project.getProjectData(dataKey="DESCRIPTION") |
116 ) |
146 ) |
117 self.eolComboBox.setCurrentIndex(self.project.getProjectData(dataKey="EOL")) |
147 self.eolComboBox.setCurrentIndex(self.project.getProjectData(dataKey="EOL")) |
118 self.vcsLabel.show() |
148 self.vcsLabel.show() |
119 if self.project.vcs is not None: |
149 if not self.__remoteProject: |
120 vcsSystemsDict = ( |
150 # VCS not supported for remote projects |
121 ericApp() |
151 if self.project.vcs is not None: |
122 .getObject("PluginManager") |
152 vcsSystemsDict = ( |
123 .getPluginDisplayStrings("version_control") |
153 ericApp() |
|
154 .getObject("PluginManager") |
|
155 .getPluginDisplayStrings("version_control") |
|
156 ) |
|
157 try: |
|
158 vcsSystemDisplay = vcsSystemsDict[ |
|
159 self.project.getProjectData(dataKey="VCS") |
|
160 ] |
|
161 except KeyError: |
|
162 vcsSystemDisplay = "None" |
|
163 self.vcsLabel.setText( |
|
164 self.tr( |
|
165 "The project is version controlled by <b>{0}</b>." |
|
166 ).format(vcsSystemDisplay) |
|
167 ) |
|
168 self.vcsInfoButton.show() |
|
169 else: |
|
170 self.vcsLabel.setText( |
|
171 self.tr("The project is not version controlled.") |
|
172 ) |
|
173 self.vcsInfoButton.hide() |
|
174 else: |
|
175 self.vcsLabel.setText( |
|
176 self.tr("Version control is not available for remote projects.") |
124 ) |
177 ) |
125 try: |
|
126 vcsSystemDisplay = vcsSystemsDict[ |
|
127 self.project.getProjectData(dataKey="VCS") |
|
128 ] |
|
129 except KeyError: |
|
130 vcsSystemDisplay = "None" |
|
131 self.vcsLabel.setText( |
|
132 self.tr("The project is version controlled by <b>{0}</b>.").format( |
|
133 vcsSystemDisplay |
|
134 ) |
|
135 ) |
|
136 self.vcsInfoButton.show() |
|
137 else: |
|
138 self.vcsLabel.setText(self.tr("The project is not version controlled.")) |
|
139 self.vcsInfoButton.hide() |
178 self.vcsInfoButton.hide() |
140 self.vcsCheckBox.hide() |
179 self.vcsCheckBox.hide() |
141 self.makeCheckBox.setChecked( |
180 if self.__remoteProject: |
142 self.project.getProjectData(dataKey="MAKEPARAMS")["MakeEnabled"] |
181 self.makeCheckBox.setChecked(False) |
143 ) |
182 else: |
|
183 self.makeCheckBox.setChecked( |
|
184 self.project.getProjectData(dataKey="MAKEPARAMS")["MakeEnabled"] |
|
185 ) |
144 cindex = self.docstringStyleComboBox.findData( |
186 cindex = self.docstringStyleComboBox.findData( |
145 self.project.getProjectData(dataKey="DOCSTRING") |
187 self.project.getProjectData(dataKey="DOCSTRING") |
146 ) |
188 ) |
147 self.docstringStyleComboBox.setCurrentIndex(cindex) |
189 self.docstringStyleComboBox.setCurrentIndex(cindex) |
148 with contextlib.suppress(KeyError): |
190 if not self.__remoteProject: |
149 cindex = self.testingFrameworkComboBox.findData( |
191 with contextlib.suppress(KeyError): |
150 self.project.getProjectData(dataKey="TESTING_FRAMEWORK") |
192 cindex = self.testingFrameworkComboBox.findData( |
151 ) |
193 self.project.getProjectData(dataKey="TESTING_FRAMEWORK") |
152 self.testingFrameworkComboBox.setCurrentIndex(cindex) |
194 ) |
|
195 self.testingFrameworkComboBox.setCurrentIndex(cindex) |
153 with contextlib.suppress(KeyError): |
196 with contextlib.suppress(KeyError): |
154 self.licenseComboBox.setCurrentText( |
197 self.licenseComboBox.setCurrentText( |
155 self.project.getProjectData(dataKey="LICENSE") |
198 self.project.getProjectData(dataKey="LICENSE") |
156 ) |
199 ) |
157 self.embeddedVenvCheckBox.setChecked( |
200 self.embeddedVenvCheckBox.setChecked( |
443 if dlg.exec() == QDialog.DialogCode.Accepted: |
514 if dlg.exec() == QDialog.DialogCode.Accepted: |
444 self.__fileTypesDict = dlg.getData() |
515 self.__fileTypesDict = dlg.getData() |
445 |
516 |
446 self.__setMainScriptPickerFilters() |
517 self.__setMainScriptPickerFilters() |
447 |
518 |
|
519 self.__setMainScriptPickerFilters() |
|
520 |
448 def storeData(self): |
521 def storeData(self): |
449 """ |
522 """ |
450 Public method to store the entered/modified data. |
523 Public method to store the entered/modified data. |
451 """ |
524 """ |
452 self.project.ppath = os.path.abspath(self.dirPicker.text()) |
525 if self.newProject: |
453 fn = self.nameEdit.text() |
526 if self.__remoteProject: |
454 if fn: |
527 self.project.ppath = FileSystemUtilities.remoteFileName( |
455 self.project.name = fn |
528 self.__remotefsInterface.abspath(self.dirPicker.text()) |
456 fn = f"{fn}.epj" |
529 ) |
457 self.project.pfile = os.path.join(self.project.ppath, fn) |
530 fn = self.nameEdit.text() |
458 else: |
531 if fn: |
459 self.project.pfile = "" |
532 self.project.name = fn |
|
533 fn = f"{fn}.epj" |
|
534 self.project.pfile = self.__remotefsInterface.join( |
|
535 self.project.ppath, fn |
|
536 ) |
|
537 else: |
|
538 self.project.pfile = "" |
|
539 else: |
|
540 self.project.ppath = os.path.abspath(self.dirPicker.text()) |
|
541 fn = self.nameEdit.text() |
|
542 if fn: |
|
543 self.project.name = fn |
|
544 fn = f"{fn}.epj" |
|
545 self.project.pfile = os.path.join(self.project.ppath, fn) |
|
546 else: |
|
547 self.project.pfile = "" |
460 self.project.setProjectData(self.versionEdit.text(), dataKey="VERSION") |
548 self.project.setProjectData(self.versionEdit.text(), dataKey="VERSION") |
461 srcDir = self.srcDirPicker.text() |
549 srcDir = self.srcDirPicker.text() |
462 if srcDir: |
550 if srcDir: |
463 srcDir = self.project.getRelativePath(srcDir) |
551 srcDir = self.project.getRelativePath(srcDir) |
464 self.project.setProjectData(srcDir, dataKey="SOURCESDIR") |
552 self.project.setProjectData(srcDir, dataKey="SOURCESDIR") |
466 self.project.setProjectData("", dataKey="SOURCESDIR") |
554 self.project.setProjectData("", dataKey="SOURCESDIR") |
467 fn = self.mainscriptPicker.text() |
555 fn = self.mainscriptPicker.text() |
468 if fn: |
556 if fn: |
469 fn = self.project.getRelativePath(fn) |
557 fn = self.project.getRelativePath(fn) |
470 self.project.setProjectData(fn, dataKey="MAINSCRIPT") |
558 self.project.setProjectData(fn, dataKey="MAINSCRIPT") |
471 self.project.translationsRoot = os.path.splitext(fn)[0] |
559 if self.__remoteProject: |
|
560 self.project.translationsRoot = self.__remotefsInterface.splitext(fn)[0] |
|
561 else: |
|
562 self.project.translationsRoot = os.path.splitext(fn)[0] |
472 else: |
563 else: |
473 self.project.setProjectData("", dataKey="MAINSCRIPT") |
564 self.project.setProjectData("", dataKey="MAINSCRIPT") |
474 self.project.translationsRoot = "" |
565 self.project.translationsRoot = "" |
475 self.project.setProjectData(self.authorEdit.text(), dataKey="AUTHOR") |
566 self.project.setProjectData(self.authorEdit.text(), dataKey="AUTHOR") |
476 self.project.setProjectData(self.emailEdit.text(), dataKey="EMAIL") |
567 self.project.setProjectData(self.emailEdit.text(), dataKey="EMAIL") |