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"] = \ |
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 |
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 |