Mercurial > lcfOS
comparison python/apps/ide.py @ 68:654c5ac4f2c5
Refactor of menus
author | windel |
---|---|
date | Sat, 13 Oct 2012 16:13:05 +0200 |
parents | 99bf4f7d47f4 |
children | 60cc36ef5a50 |
comparison
equal
deleted
inserted
replaced
67:99bf4f7d47f4 | 68:654c5ac4f2c5 |
---|---|
114 | 114 |
115 class Ide(QMainWindow): | 115 class Ide(QMainWindow): |
116 def __init__(self, parent=None): | 116 def __init__(self, parent=None): |
117 super(Ide, self).__init__(parent) | 117 super(Ide, self).__init__(parent) |
118 self.setWindowTitle('LCFOS IDE') | 118 self.setWindowTitle('LCFOS IDE') |
119 self.compiler = Compiler() | |
119 icon = QPixmap() | 120 icon = QPixmap() |
120 icon.loadFromData(lcfospng) | 121 icon.loadFromData(lcfospng) |
121 self.setWindowIcon(QIcon(icon)) | 122 self.setWindowIcon(QIcon(icon)) |
122 | 123 |
123 # Create menus: | 124 # Create menus: |
124 self.projectMenu = self.menuBar().addMenu('Project') | 125 mb = self.menuBar() |
125 self.viewMenu = self.menuBar().addMenu('View') | 126 self.projectMenu = mb.addMenu('Project') |
126 self.helpMenu = self.menuBar().addMenu('Help') | 127 self.viewMenu = mb.addMenu('View') |
128 self.helpMenu = mb.addMenu('Help') | |
127 | 129 |
128 # Create mdi area: | 130 # Create mdi area: |
129 self.mdiArea = QMdiArea() | 131 self.mdiArea = QMdiArea() |
130 self.setCentralWidget(self.mdiArea) | 132 self.setCentralWidget(self.mdiArea) |
131 | 133 |
132 # Create components: | 134 # Create components: |
133 self.buildOutput = BuildOutput() | 135 def addComponent(name, widget): |
134 self.addComponent('Build output', self.buildOutput) | 136 dw = QDockWidget(name) |
135 | 137 dw.setWidget(widget) |
136 self.astViewer = AstViewer() | 138 dw.setObjectName(name) |
137 self.addComponent('AST viewer', self.astViewer) | 139 self.addDockWidget(Qt.RightDockWidgetArea, dw) |
140 self.viewMenu.addAction(dw.toggleViewAction()) | |
141 return widget | |
142 | |
143 self.buildOutput = addComponent('Build output', BuildOutput()) | |
144 self.astViewer = addComponent('AST viewer', AstViewer()) | |
138 self.astViewer.sigNodeSelected.connect(self.nodeSelected) | 145 self.astViewer.sigNodeSelected.connect(self.nodeSelected) |
139 | 146 self.builderrors = addComponent('Build errors', BuildErrors()) |
140 self.builderrors = BuildErrors() | |
141 self.addComponent('Build errors', self.builderrors) | |
142 self.builderrors.sigErrorSelected.connect(self.errorSelected) | 147 self.builderrors.sigErrorSelected.connect(self.errorSelected) |
143 | 148 self.projectview = addComponent('Project explorer', ProjectView()) |
144 self.projectview = ProjectView() | |
145 self.addComponent('Project explorer', self.projectview) | |
146 self.projectview.sigLoadFile.connect(self.loadFile) | 149 self.projectview.sigLoadFile.connect(self.loadFile) |
147 | 150 |
148 # About dialog: | 151 # About dialog: |
149 self.aboutDialog = AboutDialog() | 152 self.aboutDialog = AboutDialog() |
150 self.aboutDialog.setWindowIcon(QIcon(icon)) | 153 self.aboutDialog.setWindowIcon(QIcon(icon)) |
151 # Create actions: | 154 # Create actions: |
152 self.newFileAction = QAction("New", self) | 155 def addMenuEntry(name, menu, callback, shortcut=None): |
153 self.projectMenu.addAction(self.newFileAction) | 156 a = QAction(name, self) |
154 self.newFileAction.triggered.connect(self.newProject) | 157 menu.addAction(a) |
155 | 158 a.triggered.connect(callback) |
156 self.openAction = QAction("Open", self) | 159 if shortcut: |
157 self.openAction.triggered.connect(self.openProject) | 160 a.setShortcut(shortcut) |
158 self.projectMenu.addAction(self.openAction) | 161 |
159 | 162 addMenuEntry("New", self.projectMenu, self.newProject) |
160 self.saveAction = QAction("Save", self) | 163 addMenuEntry("Open", self.projectMenu, self.openProject) |
161 self.projectMenu.addAction(self.saveAction) | 164 addMenuEntry("Save", self.projectMenu, self.saveProject) |
162 self.saveAction.triggered.connect(self.saveProject) | 165 addMenuEntry("Close", self.projectMenu, self.closeProject) |
163 self.closeAction = QAction("Close", self) | 166 addMenuEntry("Build", self.projectMenu, self.buildProject, shortcut=QKeySequence('F7')) |
164 self.projectMenu.addAction(self.closeAction) | |
165 self.closeAction.triggered.connect(self.closeProject) | |
166 self.buildAction = QAction('Build', self) | |
167 self.buildAction.setShortcut(QKeySequence('F7')) | |
168 self.projectMenu.addAction(self.buildAction) | |
169 self.buildAction.triggered.connect(self.buildProject) | |
170 | 167 |
171 self.helpAction = QAction('Help', self) | 168 self.helpAction = QAction('Help', self) |
172 self.helpAction.setShortcut(QKeySequence('F1')) | 169 self.helpAction.setShortcut(QKeySequence('F1')) |
173 self.helpMenu.addAction(self.helpAction) | 170 self.helpMenu.addAction(self.helpAction) |
174 self.aboutAction = QAction('About', self) | 171 addMenuEntry('About', self.helpMenu, self.aboutDialog.open) |
175 self.helpMenu.addAction(self.aboutAction) | 172 |
176 self.aboutAction.triggered.connect(self.aboutDialog.open) | 173 addMenuEntry('Cascade windows', self.viewMenu, self.mdiArea.cascadeSubWindows) |
177 | 174 addMenuEntry('Tile windows', self.viewMenu, self.mdiArea.tileSubWindows) |
178 | |
179 cascadeAction = QAction("Cascade windows", self) | |
180 cascadeAction.triggered.connect(self.mdiArea.cascadeSubWindows) | |
181 self.viewMenu.addAction(cascadeAction) | |
182 tileAction = QAction('Tile windows', self) | |
183 tileAction.triggered.connect(self.mdiArea.tileSubWindows) | |
184 self.viewMenu.addAction(tileAction) | |
185 | 175 |
186 # Load settings: | 176 # Load settings: |
187 self.settings = QSettings('windelsoft', 'lcfoside') | 177 self.settings = QSettings('windelsoft', 'lcfoside') |
188 self.loadSettings() | 178 self.loadSettings() |
189 | |
190 def addComponent(self, name, widget): | |
191 dw = QDockWidget(name) | |
192 dw.setWidget(widget) | |
193 dw.setObjectName(name) | |
194 self.addDockWidget(Qt.RightDockWidgetArea, dw) | |
195 self.viewMenu.addAction(dw.toggleViewAction()) | |
196 | 179 |
197 # File handling: | 180 # File handling: |
198 def newProject(self): | 181 def newProject(self): |
199 filename = QFileDialog.getSaveFileName(self, \ | 182 filename = QFileDialog.getSaveFileName(self, \ |
200 "Select new projectfile", "", "lcfos Project files (*.lcp2)") | 183 "Select new projectfile", "", "lcfos Project files (*.lcp2)") |
297 # Project loading: | 280 # Project loading: |
298 | 281 |
299 # Build recepy: | 282 # Build recepy: |
300 def buildProject(self): | 283 def buildProject(self): |
301 """ Build project """ | 284 """ Build project """ |
302 self.saveAll() | |
303 self.buildOutput.clear() | 285 self.buildOutput.clear() |
304 self.buildOutput.append(str(self.compiler)) | 286 self.buildOutput.append(str(self.compiler)) |
305 mods = self.compiler.compileProject(self.project) | 287 mods = self.compiler.compileProject(self.project) |
306 | 288 |
307 self.builderrors.setErrorList(self.compiler.errorlist) | 289 self.builderrors.setErrorList(self.compiler.errorlist) |
308 self.astViewer.setAst(mods[0]) | 290 self.astViewer.setAst(mods[0]) |
309 for err in self.compiler.errorlist: | 291 for err in self.compiler.errorlist: |
310 self.buildOutput.append(str(err)) | 292 self.buildOutput.append(str(err)) |
311 self.buildOutput.append("Done!") | 293 self.buildOutput.append("Done!") |
312 | 294 |
313 | |
314 if __name__ == '__main__': | 295 if __name__ == '__main__': |
315 app = QApplication(sys.argv) | 296 app = QApplication(sys.argv) |
316 ide = Ide() | 297 ide = Ide() |
317 ide.compiler = Compiler() | |
318 ide.show() | 298 ide.show() |
319 app.exec_() | 299 app.exec_() |
320 | 300 |