Mercurial > lcfOS
comparison python/ide.py @ 256:225f444019b1
Added build and flash menu option
author | Windel Bouwman |
---|---|
date | Sun, 04 Aug 2013 18:32:04 +0200 |
parents | 7416c923a02a |
children | 04c19282a5aa |
comparison
equal
deleted
inserted
replaced
255:7416c923a02a | 256:225f444019b1 |
---|---|
14 stutil = __import__('st-util') | 14 stutil = __import__('st-util') |
15 import c3 | 15 import c3 |
16 import zcc | 16 import zcc |
17 import outstream | 17 import outstream |
18 | 18 |
19 logformat='%(asctime)s|%(levelname)s|%(name)s|%(msg)s' | |
19 | 20 |
20 class BuildOutput(QTextEdit): | 21 class BuildOutput(QTextEdit): |
21 """ Build output component """ | 22 """ Build output component """ |
22 def __init__(self, parent=None): | 23 def __init__(self, parent=None): |
23 super(BuildOutput, self).__init__(parent) | 24 super(BuildOutput, self).__init__(parent) |
24 fmt = logging.Formatter(fmt='%(asctime)s %(levelname)s %(name)s %(msg)s') | 25 fmt = logging.Formatter(fmt=logformat) |
25 class MyHandler(logging.Handler): | 26 class MyHandler(logging.Handler): |
26 def emit(self2, x): | 27 def emit(self2, x): |
27 self.append(str(fmt.format(x))) | 28 self.append(str(fmt.format(x))) |
28 | 29 |
29 logging.getLogger().addHandler(MyHandler()) | 30 logging.getLogger().addHandler(MyHandler()) |
55 icol = QStandardItem(str(e.loc.col)) | 56 icol = QStandardItem(str(e.loc.col)) |
56 icol.setData(e) | 57 icol.setData(e) |
57 self.model.appendRow([item, irow, icol]) | 58 self.model.appendRow([item, irow, icol]) |
58 | 59 |
59 def itemSelected(self, index): | 60 def itemSelected(self, index): |
60 if not index.isValid(): | 61 if not index.isValid(): |
61 return | 62 return |
62 item = self.model.itemFromIndex(index) | 63 item = self.model.itemFromIndex(index) |
63 err = item.data() | 64 err = item.data() |
64 self.sigErrorSelected.emit(err) | 65 self.sigErrorSelected.emit(err) |
65 | 66 |
66 | 67 |
67 class AboutDialog(QDialog): | 68 class AboutDialog(QDialog): |
68 def __init__(self, parent=None): | 69 def __init__(self, parent=None): |
69 super(AboutDialog, self).__init__(parent) | 70 super(AboutDialog, self).__init__(parent) |
85 | 86 |
86 | 87 |
87 class Ide(QMainWindow): | 88 class Ide(QMainWindow): |
88 def __init__(self, parent=None): | 89 def __init__(self, parent=None): |
89 super(Ide, self).__init__(parent) | 90 super(Ide, self).__init__(parent) |
90 | 91 self.to_open_files = [] |
91 | 92 |
92 self.setWindowTitle('LCFOS IDE') | 93 self.setWindowTitle('LCFOS IDE') |
93 icon = QIcon('icons/logo.png') | 94 icon = QIcon('icons/logo.png') |
94 self.setWindowIcon(icon) | 95 self.setWindowIcon(icon) |
95 | 96 |
101 | 102 |
102 # Create mdi area: | 103 # Create mdi area: |
103 self.mdiArea = QMdiArea() | 104 self.mdiArea = QMdiArea() |
104 self.mdiArea.setViewMode(QMdiArea.TabbedView) | 105 self.mdiArea.setViewMode(QMdiArea.TabbedView) |
105 self.mdiArea.setTabsClosable(True) | 106 self.mdiArea.setTabsClosable(True) |
107 self.mdiArea.setTabsMovable(True) | |
106 self.setCentralWidget(self.mdiArea) | 108 self.setCentralWidget(self.mdiArea) |
107 | 109 |
108 # Create components: | 110 # Create components: |
109 def addComponent(name, widget): | 111 def addComponent(name, widget): |
110 dw = QDockWidget(name) | 112 dw = QDockWidget(name) |
145 | 147 |
146 addMenuEntry("New", self.fileMenu, self.newFile, shortcut=QKeySequence(QKeySequence.New)) | 148 addMenuEntry("New", self.fileMenu, self.newFile, shortcut=QKeySequence(QKeySequence.New)) |
147 addMenuEntry("Open", self.fileMenu, self.openFile, shortcut=QKeySequence(QKeySequence.Open)) | 149 addMenuEntry("Open", self.fileMenu, self.openFile, shortcut=QKeySequence(QKeySequence.Open)) |
148 addMenuEntry("Save", self.fileMenu, self.saveFile, shortcut=QKeySequence(QKeySequence.Save)) | 150 addMenuEntry("Save", self.fileMenu, self.saveFile, shortcut=QKeySequence(QKeySequence.Save)) |
149 addMenuEntry("Build", self.fileMenu, self.buildFile, shortcut=QKeySequence("F7")) | 151 addMenuEntry("Build", self.fileMenu, self.buildFile, shortcut=QKeySequence("F7")) |
152 addMenuEntry("Build and flash", self.fileMenu, self.buildFileAndFlash, shortcut=QKeySequence("F8")) | |
150 | 153 |
151 self.helpAction = QAction('Help', self) | 154 self.helpAction = QAction('Help', self) |
152 self.helpAction.setShortcut(QKeySequence('F1')) | 155 self.helpAction.setShortcut(QKeySequence('F1')) |
153 self.helpMenu.addAction(self.helpAction) | 156 self.helpMenu.addAction(self.helpAction) |
154 addMenuEntry('About', self.helpMenu, self.aboutDialog.open) | 157 addMenuEntry('About', self.helpMenu, self.aboutDialog.open) |
215 self.restoreState(self.settings.value('mainwindowstate')) | 218 self.restoreState(self.settings.value('mainwindowstate')) |
216 if self.settings.contains('mainwindowgeometry'): | 219 if self.settings.contains('mainwindowgeometry'): |
217 self.restoreGeometry(self.settings.value('mainwindowgeometry')) | 220 self.restoreGeometry(self.settings.value('mainwindowgeometry')) |
218 if self.settings.contains('lastfiles'): | 221 if self.settings.contains('lastfiles'): |
219 lfs = self.settings.value('lastfiles') | 222 lfs = self.settings.value('lastfiles') |
220 for lf in lfs: | 223 self.to_open_files.extend(lfs) |
221 self.loadFile(lf) | 224 |
225 def showEvent(self, ev): | |
226 super().showEvent(ev) | |
227 while self.to_open_files: | |
228 fn = self.to_open_files.pop(0) | |
229 self.loadFile(fn) | |
222 | 230 |
223 def closeEvent(self, ev): | 231 def closeEvent(self, ev): |
224 self.settings.setValue('mainwindowstate', self.saveState()) | 232 self.settings.setValue('mainwindowstate', self.saveState()) |
225 self.settings.setValue('mainwindowgeometry', self.saveGeometry()) | 233 self.settings.setValue('mainwindowgeometry', self.saveGeometry()) |
226 ac = self.activeMdiChild() | 234 ac = self.activeMdiChild() |
280 # Set errors: | 288 # Set errors: |
281 self.builderrors.setErrorList(self.diag.diags) | 289 self.builderrors.setErrorList(self.diag.diags) |
282 ce.setErrors(self.diag.diags) | 290 ce.setErrors(self.diag.diags) |
283 return | 291 return |
284 | 292 |
293 def buildFileAndFlash(self): | |
294 ce = self.activeMdiChild() | |
295 if not ce: | |
296 return | |
297 self.diag.clear() | |
298 outs = outstream.TextOutputStream() | |
299 if not zcc.zcc(ce.Source, outs, self.diag, do_optimize=True): | |
300 # Set errors: | |
301 self.builderrors.setErrorList(self.diag.diags) | |
302 ce.setErrors(self.diag.diags) | |
303 return | |
304 | |
285 code_s = outs.getSection('code') | 305 code_s = outs.getSection('code') |
286 self.debugInfo = code_s.debugInfos() | 306 self.debugInfo = code_s.debugInfos() |
287 if self.ctrlToolbar.device: | 307 if self.ctrlToolbar.device: |
288 logging.info('Flashing stm32f4 discovery') | 308 logging.info('Flashing stm32f4 discovery') |
289 bts = code_s.to_bytes() | 309 bts = code_s.to_bytes() |
290 self.ctrlToolbar.device.writeFlash(0x08000000, bts) | 310 self.ctrlToolbar.device.writeFlash(0x08000000, bts) |
291 stl = self.ctrlToolbar.device.iface | 311 stl = self.ctrlToolbar.device.iface |
292 stl.reset() | 312 stl.reset() |
293 stl.halt() | 313 stl.halt() |
314 stl.run() | |
294 logging.info('Done!') | 315 logging.info('Done!') |
295 | 316 |
317 | |
296 if __name__ == '__main__': | 318 if __name__ == '__main__': |
297 logging.basicConfig(format='%(asctime)s %(levelname)s %(name)s %(message)s', level=logging.DEBUG) | 319 logging.basicConfig(format=logformat, level=logging.DEBUG) |
298 app = QApplication(sys.argv) | 320 app = QApplication(sys.argv) |
299 ide = Ide() | 321 ide = Ide() |
300 ide.show() | 322 ide.show() |
301 logging.info('IDE started') | 323 logging.info('IDE started') |
302 app.exec_() | 324 app.exec_() |