QScintilla/Editor.py

changeset 6297
85e20e9b4d55
parent 6285
045dc4c38701
child 6299
feb3cf2cbde3
equal deleted inserted replaced
6296:db9b3a419845 6297:85e20e9b4d55
1170 self.tr('Previous bookmark'), self.previousBookmark) 1170 self.tr('Previous bookmark'), self.previousBookmark)
1171 self.marginMenuActs["ClearBookmark"] = self.bmMarginMenu.addAction( 1171 self.marginMenuActs["ClearBookmark"] = self.bmMarginMenu.addAction(
1172 self.tr('Clear all bookmarks'), self.clearBookmarks) 1172 self.tr('Clear all bookmarks'), self.clearBookmarks)
1173 1173
1174 self.bmMarginMenu.aboutToShow.connect( 1174 self.bmMarginMenu.aboutToShow.connect(
1175 lambda: self.__showContextMenuMargin(self.bmMarginMenu)) 1175 lambda: self.__showContextMenuMargin(self.bmMarginMenu, False))
1176 1176
1177 # breakpoint margin 1177 # breakpoint margin
1178 self.bpMarginMenu = QMenu() 1178 self.bpMarginMenu = QMenu()
1179 1179
1180 self.marginMenuActs["Breakpoint"] = self.bpMarginMenu.addAction( 1180 self.marginMenuActs["Breakpoint"] = self.bpMarginMenu.addAction(
1195 self.menuPreviousBreakpoint) 1195 self.menuPreviousBreakpoint)
1196 self.marginMenuActs["ClearBreakpoint"] = self.bpMarginMenu.addAction( 1196 self.marginMenuActs["ClearBreakpoint"] = self.bpMarginMenu.addAction(
1197 self.tr('Clear all breakpoints'), self.__menuClearBreakpoints) 1197 self.tr('Clear all breakpoints'), self.__menuClearBreakpoints)
1198 1198
1199 self.bpMarginMenu.aboutToShow.connect( 1199 self.bpMarginMenu.aboutToShow.connect(
1200 lambda: self.__showContextMenuMargin(self.bpMarginMenu)) 1200 lambda: self.__showContextMenuMargin(self.bpMarginMenu, False))
1201
1202 # fold margin
1203 self.foldMarginMenu = QMenu()
1204
1205 self.marginMenuActs["ToggleAllFolds"] = \
1206 self.foldMarginMenu.addAction(
1207 self.tr("Toggle all folds"),
1208 self.foldAll)
1209 self.marginMenuActs["ToggleAllFoldsAndChildren"] = \
1210 self.foldMarginMenu.addAction(
1211 self.tr("Toggle all folds (including children)"),
1212 lambda: self.foldAll(True))
1213 self.marginMenuActs["ToggleCurrentFold"] = \
1214 self.foldMarginMenu.addAction(
1215 self.tr("Toggle current fold"),
1216 self.toggleCurrentFold)
1217 self.foldMarginMenu.addSeparator()
1218 self.marginMenuActs["ExpandChildren"] = \
1219 self.foldMarginMenu.addAction(
1220 self.tr("Expand (including children)"),
1221 self.__contextMenuExpandFoldWithChildren)
1222 self.marginMenuActs["CollapseChildren"] = \
1223 self.foldMarginMenu.addAction(
1224 self.tr("Collapse (including children)"),
1225 self.__contextMenuCollapseFoldWithChildren)
1226 self.foldMarginMenu.addSeparator()
1227 self.marginMenuActs["ClearAllFolds"] = \
1228 self.foldMarginMenu.addAction(
1229 self.tr("Clear all folds"),
1230 self.clearFolds)
1231
1232 self.foldMarginMenu.aboutToShow.connect(
1233 lambda: self.__showContextMenuMargin(self.foldMarginMenu, False))
1201 1234
1202 # indicator margin 1235 # indicator margin
1203 self.indicMarginMenu = QMenu() 1236 self.indicMarginMenu = QMenu()
1204 1237
1205 self.marginMenuActs["GotoSyntaxError"] = \ 1238 self.marginMenuActs["GotoSyntaxError"] = \
1249 self.marginMenuActs["ClearChangeMarkers"] = \ 1282 self.marginMenuActs["ClearChangeMarkers"] = \
1250 self.indicMarginMenu.addAction( 1283 self.indicMarginMenu.addAction(
1251 self.tr('Clear changes'), self.__reinitOnlineChangeTrace) 1284 self.tr('Clear changes'), self.__reinitOnlineChangeTrace)
1252 1285
1253 self.indicMarginMenu.aboutToShow.connect( 1286 self.indicMarginMenu.aboutToShow.connect(
1254 lambda: self.__showContextMenuMargin(self.indicMarginMenu)) 1287 lambda: self.__showContextMenuMargin(self.indicMarginMenu, False))
1255 1288
1256 def __initContextMenuUnifiedMargins(self): 1289 def __initContextMenuUnifiedMargins(self):
1257 """ 1290 """
1258 Private method used to setup the context menu for the unified margins. 1291 Private method used to setup the context menu for the unified margins.
1259 """ 1292 """
1330 self.tr('LMB toggles breakpoints'), self.__lmBbreakpoints) 1363 self.tr('LMB toggles breakpoints'), self.__lmBbreakpoints)
1331 self.marginMenuActs["LMBbreakpoints"].setCheckable(True) 1364 self.marginMenuActs["LMBbreakpoints"].setCheckable(True)
1332 self.marginMenuActs["LMBbreakpoints"].setChecked(True) 1365 self.marginMenuActs["LMBbreakpoints"].setChecked(True)
1333 1366
1334 self.marginMenu.aboutToShow.connect( 1367 self.marginMenu.aboutToShow.connect(
1335 lambda: self.__showContextMenuMargin(self.marginMenu)) 1368 lambda: self.__showContextMenuMargin(self.marginMenu, True))
1336 1369
1337 def __exportMenuTriggered(self, act): 1370 def __exportMenuTriggered(self, act):
1338 """ 1371 """
1339 Private method to handle the selection of an export format. 1372 Private method to handle the selection of an export format.
1340 1373
3311 3344
3312 ########################################################################### 3345 ###########################################################################
3313 ## Utility methods below 3346 ## Utility methods below
3314 ########################################################################### 3347 ###########################################################################
3315 3348
3316 def ensureVisible(self, line): 3349 def ensureVisible(self, line, expand=False):
3317 """ 3350 """
3318 Public slot to ensure, that the specified line is visible. 3351 Public slot to ensure, that the specified line is visible.
3319 3352
3320 @param line line number to make visible 3353 @param line line number to make visible
3354 @type int
3355 @keyparam expand flag indicating to expand all folds
3356 @type bool
3321 """ 3357 """
3322 self.ensureLineVisible(line - 1) 3358 self.ensureLineVisible(line - 1)
3323 3359 if expand:
3324 def ensureVisibleTop(self, line): 3360 self.SendScintilla(QsciScintilla.SCI_FOLDCHILDREN, line - 1,
3361 QsciScintilla.SC_FOLDACTION_EXPAND)
3362
3363 def ensureVisibleTop(self, line, expand=False):
3325 """ 3364 """
3326 Public slot to ensure, that the specified line is visible at the top 3365 Public slot to ensure, that the specified line is visible at the top
3327 of the editor. 3366 of the editor.
3328 3367
3329 @param line line number to make visible 3368 @param line line number to make visible
3330 """ 3369 @type int
3370 @keyparam expand flag indicating to expand all folds
3371 @type bool
3372 """
3373 self.ensureVisible(line)
3331 self.setFirstVisibleLine(line - 1) 3374 self.setFirstVisibleLine(line - 1)
3375 self.ensureCursorVisible()
3376 if expand:
3377 self.SendScintilla(QsciScintilla.SCI_FOLDCHILDREN, line - 1,
3378 QsciScintilla.SC_FOLDACTION_EXPAND)
3332 3379
3333 def __marginClicked(self, margin, line, modifiers): 3380 def __marginClicked(self, margin, line, modifiers):
3334 """ 3381 """
3335 Private slot to handle the marginClicked signal. 3382 Private slot to handle the marginClicked signal.
3336 3383
4019 if self.lexer_ and self.lexer_.hasSmartIndent(): 4066 if self.lexer_ and self.lexer_.hasSmartIndent():
4020 self.lexer_.smartIndentLine(self) 4067 self.lexer_.smartIndentLine(self)
4021 else: 4068 else:
4022 self.__indentLine(True) 4069 self.__indentLine(True)
4023 4070
4024 def gotoLine(self, line, pos=1, firstVisible=False): 4071 def gotoLine(self, line, pos=1, firstVisible=False, expand=False):
4025 """ 4072 """
4026 Public slot to jump to the beginning of a line. 4073 Public slot to jump to the beginning of a line.
4027 4074
4028 @param line line number to go to (integer) 4075 @param line line number to go to
4029 @keyparam pos position in line to go to (integer) 4076 @type int
4077 @keyparam pos position in line to go to
4078 @type int
4030 @keyparam firstVisible flag indicating to make the line the first 4079 @keyparam firstVisible flag indicating to make the line the first
4031 visible line (boolean) 4080 visible line
4081 @type bool
4082 @keyparam expand flag indicating to expand all folds
4083 @type bool
4032 """ 4084 """
4033 self.setCursorPosition(line - 1, pos - 1) 4085 self.setCursorPosition(line - 1, pos - 1)
4034 if firstVisible: 4086 if firstVisible:
4035 self.ensureVisibleTop(line) 4087 self.ensureVisibleTop(line, expand)
4036 else: 4088 else:
4037 self.ensureVisible(line) 4089 self.ensureVisible(line, expand)
4038 4090
4039 def __textChanged(self): 4091 def __textChanged(self):
4040 """ 4092 """
4041 Private slot to handle a change of the editor text. 4093 Private slot to handle a change of the editor text.
4042 4094
5213 self.bmMarginMenu.popup(evt.globalPos()) 5265 self.bmMarginMenu.popup(evt.globalPos())
5214 elif self.__marginNumber(evt.x()) == self.__bpMargin: 5266 elif self.__marginNumber(evt.x()) == self.__bpMargin:
5215 self.bpMarginMenu.popup(evt.globalPos()) 5267 self.bpMarginMenu.popup(evt.globalPos())
5216 elif self.__marginNumber(evt.x()) == self.__indicMargin: 5268 elif self.__marginNumber(evt.x()) == self.__indicMargin:
5217 self.indicMarginMenu.popup(evt.globalPos()) 5269 self.indicMarginMenu.popup(evt.globalPos())
5270 elif self.__marginNumber(evt.x()) == self.__foldMargin:
5271 self.foldMarginMenu.popup(evt.globalPos())
5218 5272
5219 def __showContextMenu(self): 5273 def __showContextMenu(self):
5220 """ 5274 """
5221 Private slot handling the aboutToShow signal of the context menu. 5275 Private slot handling the aboutToShow signal of the context menu.
5222 """ 5276 """
5374 else: 5428 else:
5375 self.applicationDiagramMenuAct.setEnabled(False) 5429 self.applicationDiagramMenuAct.setEnabled(False)
5376 5430
5377 self.showMenu.emit("Graphics", self.graphicsMenu, self) 5431 self.showMenu.emit("Graphics", self.graphicsMenu, self)
5378 5432
5379 def __showContextMenuMargin(self, menu): 5433 def __showContextMenuMargin(self, menu, unifiedMenu):
5380 """ 5434 """
5381 Private slot handling the aboutToShow signal of the margins context 5435 Private slot handling the aboutToShow signal of the margins context
5382 menu. 5436 menu.
5383 5437
5384 @param menu reference to the menu to be shown 5438 @param menu reference to the menu to be shown
5385 @type QMenu 5439 @type QMenu
5386 """ 5440 @param unifiedMenu flag indicating the unified margins menu
5387 if self.fileName and self.isPyFile(): 5441 @type bool
5388 self.marginMenuActs["Breakpoint"].setEnabled(True) 5442 """
5389 self.marginMenuActs["TempBreakpoint"].setEnabled(True) 5443 if unifiedMenu or menu is self.bpMarginMenu:
5390 if self.markersAtLine(self.line) & self.breakpointMask: 5444 if self.fileName and self.isPyFile():
5391 self.marginMenuActs["EditBreakpoint"].setEnabled(True) 5445 self.marginMenuActs["Breakpoint"].setEnabled(True)
5392 self.marginMenuActs["EnableBreakpoint"].setEnabled(True) 5446 self.marginMenuActs["TempBreakpoint"].setEnabled(True)
5447 if self.markersAtLine(self.line) & self.breakpointMask:
5448 self.marginMenuActs["EditBreakpoint"].setEnabled(True)
5449 self.marginMenuActs["EnableBreakpoint"].setEnabled(True)
5450 else:
5451 self.marginMenuActs["EditBreakpoint"].setEnabled(False)
5452 self.marginMenuActs["EnableBreakpoint"].setEnabled(False)
5453 if self.markersAtLine(self.line) & (1 << self.dbreakpoint):
5454 self.marginMenuActs["EnableBreakpoint"].setText(
5455 self.tr('Enable breakpoint'))
5456 else:
5457 self.marginMenuActs["EnableBreakpoint"].setText(
5458 self.tr('Disable breakpoint'))
5459 if self.breaks:
5460 self.marginMenuActs["NextBreakpoint"].setEnabled(True)
5461 self.marginMenuActs["PreviousBreakpoint"].setEnabled(True)
5462 self.marginMenuActs["ClearBreakpoint"].setEnabled(True)
5463 else:
5464 self.marginMenuActs["NextBreakpoint"].setEnabled(False)
5465 self.marginMenuActs["PreviousBreakpoint"].setEnabled(False)
5466 self.marginMenuActs["ClearBreakpoint"].setEnabled(False)
5393 else: 5467 else:
5468 self.marginMenuActs["Breakpoint"].setEnabled(False)
5469 self.marginMenuActs["TempBreakpoint"].setEnabled(False)
5394 self.marginMenuActs["EditBreakpoint"].setEnabled(False) 5470 self.marginMenuActs["EditBreakpoint"].setEnabled(False)
5395 self.marginMenuActs["EnableBreakpoint"].setEnabled(False) 5471 self.marginMenuActs["EnableBreakpoint"].setEnabled(False)
5396 if self.markersAtLine(self.line) & (1 << self.dbreakpoint):
5397 self.marginMenuActs["EnableBreakpoint"].setText(
5398 self.tr('Enable breakpoint'))
5399 else:
5400 self.marginMenuActs["EnableBreakpoint"].setText(
5401 self.tr('Disable breakpoint'))
5402 if self.breaks:
5403 self.marginMenuActs["NextBreakpoint"].setEnabled(True)
5404 self.marginMenuActs["PreviousBreakpoint"].setEnabled(True)
5405 self.marginMenuActs["ClearBreakpoint"].setEnabled(True)
5406 else:
5407 self.marginMenuActs["NextBreakpoint"].setEnabled(False) 5472 self.marginMenuActs["NextBreakpoint"].setEnabled(False)
5408 self.marginMenuActs["PreviousBreakpoint"].setEnabled(False) 5473 self.marginMenuActs["PreviousBreakpoint"].setEnabled(False)
5409 self.marginMenuActs["ClearBreakpoint"].setEnabled(False) 5474 self.marginMenuActs["ClearBreakpoint"].setEnabled(False)
5410 else:
5411 self.marginMenuActs["Breakpoint"].setEnabled(False)
5412 self.marginMenuActs["TempBreakpoint"].setEnabled(False)
5413 self.marginMenuActs["EditBreakpoint"].setEnabled(False)
5414 self.marginMenuActs["EnableBreakpoint"].setEnabled(False)
5415 self.marginMenuActs["NextBreakpoint"].setEnabled(False)
5416 self.marginMenuActs["PreviousBreakpoint"].setEnabled(False)
5417 self.marginMenuActs["ClearBreakpoint"].setEnabled(False)
5418 5475
5419 if self.bookmarks: 5476 if unifiedMenu or menu is self.bmMarginMenu:
5420 self.marginMenuActs["NextBookmark"].setEnabled(True) 5477 if self.bookmarks:
5421 self.marginMenuActs["PreviousBookmark"].setEnabled(True) 5478 self.marginMenuActs["NextBookmark"].setEnabled(True)
5422 self.marginMenuActs["ClearBookmark"].setEnabled(True) 5479 self.marginMenuActs["PreviousBookmark"].setEnabled(True)
5423 else: 5480 self.marginMenuActs["ClearBookmark"].setEnabled(True)
5424 self.marginMenuActs["NextBookmark"].setEnabled(False) 5481 else:
5425 self.marginMenuActs["PreviousBookmark"].setEnabled(False) 5482 self.marginMenuActs["NextBookmark"].setEnabled(False)
5426 self.marginMenuActs["ClearBookmark"].setEnabled(False) 5483 self.marginMenuActs["PreviousBookmark"].setEnabled(False)
5484 self.marginMenuActs["ClearBookmark"].setEnabled(False)
5427 5485
5428 if len(self.syntaxerrors): 5486 if unifiedMenu or menu is self.indicMarginMenu:
5429 self.marginMenuActs["GotoSyntaxError"].setEnabled(True) 5487 if len(self.syntaxerrors):
5430 self.marginMenuActs["ClearSyntaxError"].setEnabled(True) 5488 self.marginMenuActs["GotoSyntaxError"].setEnabled(True)
5431 if self.markersAtLine(self.line) & (1 << self.syntaxerror): 5489 self.marginMenuActs["ClearSyntaxError"].setEnabled(True)
5432 self.marginMenuActs["ShowSyntaxError"].setEnabled(True) 5490 if self.markersAtLine(self.line) & (1 << self.syntaxerror):
5491 self.marginMenuActs["ShowSyntaxError"].setEnabled(True)
5492 else:
5493 self.marginMenuActs["ShowSyntaxError"].setEnabled(False)
5433 else: 5494 else:
5495 self.marginMenuActs["GotoSyntaxError"].setEnabled(False)
5496 self.marginMenuActs["ClearSyntaxError"].setEnabled(False)
5434 self.marginMenuActs["ShowSyntaxError"].setEnabled(False) 5497 self.marginMenuActs["ShowSyntaxError"].setEnabled(False)
5435 else: 5498
5436 self.marginMenuActs["GotoSyntaxError"].setEnabled(False) 5499 if len(self.warnings):
5437 self.marginMenuActs["ClearSyntaxError"].setEnabled(False) 5500 self.marginMenuActs["NextWarningMarker"].setEnabled(True)
5438 self.marginMenuActs["ShowSyntaxError"].setEnabled(False) 5501 self.marginMenuActs["PreviousWarningMarker"].setEnabled(True)
5439 5502 self.marginMenuActs["ClearWarnings"].setEnabled(True)
5440 if len(self.warnings): 5503 if self.markersAtLine(self.line) & (1 << self.warning):
5441 self.marginMenuActs["NextWarningMarker"].setEnabled(True) 5504 self.marginMenuActs["ShowWarning"].setEnabled(True)
5442 self.marginMenuActs["PreviousWarningMarker"].setEnabled(True) 5505 else:
5443 self.marginMenuActs["ClearWarnings"].setEnabled(True) 5506 self.marginMenuActs["ShowWarning"].setEnabled(False)
5444 if self.markersAtLine(self.line) & (1 << self.warning):
5445 self.marginMenuActs["ShowWarning"].setEnabled(True)
5446 else: 5507 else:
5508 self.marginMenuActs["NextWarningMarker"].setEnabled(False)
5509 self.marginMenuActs["PreviousWarningMarker"].setEnabled(False)
5510 self.marginMenuActs["ClearWarnings"].setEnabled(False)
5447 self.marginMenuActs["ShowWarning"].setEnabled(False) 5511 self.marginMenuActs["ShowWarning"].setEnabled(False)
5448 else:
5449 self.marginMenuActs["NextWarningMarker"].setEnabled(False)
5450 self.marginMenuActs["PreviousWarningMarker"].setEnabled(False)
5451 self.marginMenuActs["ClearWarnings"].setEnabled(False)
5452 self.marginMenuActs["ShowWarning"].setEnabled(False)
5453
5454 if self.notcoveredMarkers:
5455 self.marginMenuActs["NextCoverageMarker"].setEnabled(True)
5456 self.marginMenuActs["PreviousCoverageMarker"].setEnabled(True)
5457 else:
5458 self.marginMenuActs["NextCoverageMarker"].setEnabled(False)
5459 self.marginMenuActs["PreviousCoverageMarker"].setEnabled(False)
5460
5461 if self.__hasTaskMarkers:
5462 self.marginMenuActs["PreviousTaskMarker"].setEnabled(True)
5463 self.marginMenuActs["NextTaskMarker"].setEnabled(True)
5464 else:
5465 self.marginMenuActs["PreviousTaskMarker"].setEnabled(False)
5466 self.marginMenuActs["NextTaskMarker"].setEnabled(False)
5467
5468 if self.__hasChangeMarkers:
5469 self.marginMenuActs["PreviousChangeMarker"].setEnabled(True)
5470 self.marginMenuActs["NextChangeMarker"].setEnabled(True)
5471 self.marginMenuActs["ClearChangeMarkers"].setEnabled(True)
5472 5512
5473 else: 5513 if self.notcoveredMarkers:
5474 self.marginMenuActs["PreviousChangeMarker"].setEnabled(False) 5514 self.marginMenuActs["NextCoverageMarker"].setEnabled(True)
5475 self.marginMenuActs["NextChangeMarker"].setEnabled(False) 5515 self.marginMenuActs["PreviousCoverageMarker"].setEnabled(True)
5476 self.marginMenuActs["ClearChangeMarkers"].setEnabled(False) 5516 else:
5517 self.marginMenuActs["NextCoverageMarker"].setEnabled(False)
5518 self.marginMenuActs["PreviousCoverageMarker"].setEnabled(False)
5519
5520 if self.__hasTaskMarkers:
5521 self.marginMenuActs["PreviousTaskMarker"].setEnabled(True)
5522 self.marginMenuActs["NextTaskMarker"].setEnabled(True)
5523 else:
5524 self.marginMenuActs["PreviousTaskMarker"].setEnabled(False)
5525 self.marginMenuActs["NextTaskMarker"].setEnabled(False)
5526
5527 if self.__hasChangeMarkers:
5528 self.marginMenuActs["PreviousChangeMarker"].setEnabled(True)
5529 self.marginMenuActs["NextChangeMarker"].setEnabled(True)
5530 self.marginMenuActs["ClearChangeMarkers"].setEnabled(True)
5531
5532 else:
5533 self.marginMenuActs["PreviousChangeMarker"].setEnabled(False)
5534 self.marginMenuActs["NextChangeMarker"].setEnabled(False)
5535 self.marginMenuActs["ClearChangeMarkers"].setEnabled(False)
5477 5536
5478 self.showMenu.emit("Margin", menu, self) 5537 self.showMenu.emit("Margin", menu, self)
5479 5538
5480 def __showContextMenuChecks(self): 5539 def __showContextMenuChecks(self):
5481 """ 5540 """
6433 self.clearAnnotations() 6492 self.clearAnnotations()
6434 for handle in list(self.warnings.keys()) + \ 6493 for handle in list(self.warnings.keys()) + \
6435 list(self.syntaxerrors.keys()): 6494 list(self.syntaxerrors.keys()):
6436 line = self.markerLine(handle) 6495 line = self.markerLine(handle)
6437 self.__setAnnotation(line) 6496 self.__setAnnotation(line)
6497
6498 #################################################################
6499 ## Fold handling methods
6500 #################################################################
6501
6502 def toggleCurrentFold(self):
6503 """
6504 Public slot to toggle the fold containing the current line.
6505 """
6506 line, index = self.getCursorPosition()
6507 self.foldLine(line)
6508
6509 def expandFoldWithChildren(self, line=-1):
6510 """
6511 Public slot to expand the current fold including its children.
6512
6513 @param line number of line to be expanded
6514 @type int
6515 """
6516 if line == -1:
6517 line, index = self.getCursorPosition()
6518
6519 self.SendScintilla(QsciScintilla.SCI_FOLDCHILDREN, line,
6520 QsciScintilla.SC_FOLDACTION_EXPAND)
6521
6522 def collapseFoldWithChildren(self, line=-1):
6523 """
6524 Public slot to collapse the current fold including its children.
6525
6526 @param line number of line to be expanded
6527 @type int
6528 """
6529 if line == -1:
6530 line, index = self.getCursorPosition()
6531
6532 self.SendScintilla(QsciScintilla.SCI_FOLDCHILDREN, line,
6533 QsciScintilla.SC_FOLDACTION_CONTRACT)
6534
6535 def __contextMenuExpandFoldWithChildren(self):
6536 """
6537 Private slot to handle the context menu expand with children action.
6538 """
6539 self.expandFoldWithChildren(self.line)
6540
6541 def __contextMenuCollapseFoldWithChildren(self):
6542 """
6543 Private slot to handle the context menu collapse with children action.
6544 """
6545 self.collapseFoldWithChildren(self.line)
6438 6546
6439 ################################################################# 6547 #################################################################
6440 ## Macro handling methods 6548 ## Macro handling methods
6441 ################################################################# 6549 #################################################################
6442 6550

eric ide

mercurial