1196 self.marginMenuActs["ClearBreakpoint"] = self.bpMarginMenu.addAction( |
1181 self.marginMenuActs["ClearBreakpoint"] = self.bpMarginMenu.addAction( |
1197 self.tr('Clear all breakpoints'), self.__menuClearBreakpoints) |
1182 self.tr('Clear all breakpoints'), self.__menuClearBreakpoints) |
1198 |
1183 |
1199 self.bpMarginMenu.aboutToShow.connect( |
1184 self.bpMarginMenu.aboutToShow.connect( |
1200 lambda: self.__showContextMenuMargin(self.bpMarginMenu)) |
1185 lambda: self.__showContextMenuMargin(self.bpMarginMenu)) |
|
1186 |
|
1187 # fold margin |
|
1188 self.foldMarginMenu = QMenu() |
|
1189 |
|
1190 self.marginMenuActs["ToggleAllFolds"] = \ |
|
1191 self.foldMarginMenu.addAction( |
|
1192 self.tr("Toggle all folds"), |
|
1193 self.foldAll) |
|
1194 self.marginMenuActs["ToggleAllFoldsAndChildren"] = \ |
|
1195 self.foldMarginMenu.addAction( |
|
1196 self.tr("Toggle all folds (including children)"), |
|
1197 lambda: self.foldAll(True)) |
|
1198 self.marginMenuActs["ToggleCurrentFold"] = \ |
|
1199 self.foldMarginMenu.addAction( |
|
1200 self.tr("Toggle current fold"), |
|
1201 self.toggleCurrentFold) |
|
1202 self.foldMarginMenu.addSeparator() |
|
1203 self.marginMenuActs["ExpandChildren"] = \ |
|
1204 self.foldMarginMenu.addAction( |
|
1205 self.tr("Expand (including children)"), |
|
1206 self.__contextMenuExpandFoldWithChildren) |
|
1207 self.marginMenuActs["CollapseChildren"] = \ |
|
1208 self.foldMarginMenu.addAction( |
|
1209 self.tr("Collapse (including children)"), |
|
1210 self.__contextMenuCollapseFoldWithChildren) |
|
1211 self.foldMarginMenu.addSeparator() |
|
1212 self.marginMenuActs["ClearAllFolds"] = \ |
|
1213 self.foldMarginMenu.addAction( |
|
1214 self.tr("Clear all folds"), |
|
1215 self.clearFolds) |
|
1216 |
|
1217 self.foldMarginMenu.aboutToShow.connect( |
|
1218 lambda: self.__showContextMenuMargin(self.foldMarginMenu)) |
1201 |
1219 |
1202 # indicator margin |
1220 # indicator margin |
1203 self.indicMarginMenu = QMenu() |
1221 self.indicMarginMenu = QMenu() |
1204 |
1222 |
1205 self.marginMenuActs["GotoSyntaxError"] = \ |
1223 self.marginMenuActs["GotoSyntaxError"] = \ |
1251 self.tr('Clear changes'), self.__reinitOnlineChangeTrace) |
1269 self.tr('Clear changes'), self.__reinitOnlineChangeTrace) |
1252 |
1270 |
1253 self.indicMarginMenu.aboutToShow.connect( |
1271 self.indicMarginMenu.aboutToShow.connect( |
1254 lambda: self.__showContextMenuMargin(self.indicMarginMenu)) |
1272 lambda: self.__showContextMenuMargin(self.indicMarginMenu)) |
1255 |
1273 |
1256 def __initContextMenuUnifiedMargins(self): |
|
1257 """ |
|
1258 Private method used to setup the context menu for the unified margins. |
|
1259 """ |
|
1260 self.marginMenu = QMenu() |
|
1261 |
|
1262 self.marginMenu.addAction( |
|
1263 self.tr('Toggle bookmark'), self.menuToggleBookmark) |
|
1264 self.marginMenuActs["NextBookmark"] = self.marginMenu.addAction( |
|
1265 self.tr('Next bookmark'), self.nextBookmark) |
|
1266 self.marginMenuActs["PreviousBookmark"] = self.marginMenu.addAction( |
|
1267 self.tr('Previous bookmark'), self.previousBookmark) |
|
1268 self.marginMenuActs["ClearBookmark"] = self.marginMenu.addAction( |
|
1269 self.tr('Clear all bookmarks'), self.clearBookmarks) |
|
1270 self.marginMenu.addSeparator() |
|
1271 self.marginMenuActs["GotoSyntaxError"] = self.marginMenu.addAction( |
|
1272 self.tr('Goto syntax error'), self.gotoSyntaxError) |
|
1273 self.marginMenuActs["ShowSyntaxError"] = self.marginMenu.addAction( |
|
1274 self.tr('Show syntax error message'), self.__showSyntaxError) |
|
1275 self.marginMenuActs["ClearSyntaxError"] = self.marginMenu.addAction( |
|
1276 self.tr('Clear syntax error'), self.clearSyntaxError) |
|
1277 self.marginMenu.addSeparator() |
|
1278 self.marginMenuActs["NextWarningMarker"] = self.marginMenu.addAction( |
|
1279 self.tr("Next warning"), self.nextWarning) |
|
1280 self.marginMenuActs["PreviousWarningMarker"] = \ |
|
1281 self.marginMenu.addAction( |
|
1282 self.tr("Previous warning"), self.previousWarning) |
|
1283 self.marginMenuActs["ShowWarning"] = self.marginMenu.addAction( |
|
1284 self.tr('Show warning message'), self.__showWarning) |
|
1285 self.marginMenuActs["ClearWarnings"] = self.marginMenu.addAction( |
|
1286 self.tr('Clear warnings'), self.clearWarnings) |
|
1287 self.marginMenu.addSeparator() |
|
1288 self.marginMenuActs["Breakpoint"] = self.marginMenu.addAction( |
|
1289 self.tr('Toggle breakpoint'), self.menuToggleBreakpoint) |
|
1290 self.marginMenuActs["TempBreakpoint"] = self.marginMenu.addAction( |
|
1291 self.tr('Toggle temporary breakpoint'), |
|
1292 self.__menuToggleTemporaryBreakpoint) |
|
1293 self.marginMenuActs["EditBreakpoint"] = self.marginMenu.addAction( |
|
1294 self.tr('Edit breakpoint...'), self.menuEditBreakpoint) |
|
1295 self.marginMenuActs["EnableBreakpoint"] = self.marginMenu.addAction( |
|
1296 self.tr('Enable breakpoint'), |
|
1297 self.__menuToggleBreakpointEnabled) |
|
1298 self.marginMenuActs["NextBreakpoint"] = self.marginMenu.addAction( |
|
1299 self.tr('Next breakpoint'), self.menuNextBreakpoint) |
|
1300 self.marginMenuActs["PreviousBreakpoint"] = self.marginMenu.addAction( |
|
1301 self.tr('Previous breakpoint'), self.menuPreviousBreakpoint) |
|
1302 self.marginMenuActs["ClearBreakpoint"] = self.marginMenu.addAction( |
|
1303 self.tr('Clear all breakpoints'), self.__menuClearBreakpoints) |
|
1304 self.marginMenu.addSeparator() |
|
1305 self.marginMenuActs["NextCoverageMarker"] = self.marginMenu.addAction( |
|
1306 self.tr('Next uncovered line'), self.nextUncovered) |
|
1307 self.marginMenuActs["PreviousCoverageMarker"] = \ |
|
1308 self.marginMenu.addAction( |
|
1309 self.tr('Previous uncovered line'), self.previousUncovered) |
|
1310 self.marginMenu.addSeparator() |
|
1311 self.marginMenuActs["NextTaskMarker"] = self.marginMenu.addAction( |
|
1312 self.tr('Next task'), self.nextTask) |
|
1313 self.marginMenuActs["PreviousTaskMarker"] = self.marginMenu.addAction( |
|
1314 self.tr('Previous task'), self.previousTask) |
|
1315 self.marginMenu.addSeparator() |
|
1316 self.marginMenuActs["NextChangeMarker"] = self.marginMenu.addAction( |
|
1317 self.tr('Next change'), self.nextChange) |
|
1318 self.marginMenuActs["PreviousChangeMarker"] = \ |
|
1319 self.marginMenu.addAction( |
|
1320 self.tr('Previous change'), self.previousChange) |
|
1321 self.marginMenuActs["ClearChangeMarkers"] = \ |
|
1322 self.marginMenu.addAction( |
|
1323 self.tr('Clear changes'), self.__reinitOnlineChangeTrace) |
|
1324 self.marginMenu.addSeparator() |
|
1325 self.marginMenuActs["LMBbookmarks"] = self.marginMenu.addAction( |
|
1326 self.tr('LMB toggles bookmarks'), self.__lmBbookmarks) |
|
1327 self.marginMenuActs["LMBbookmarks"].setCheckable(True) |
|
1328 self.marginMenuActs["LMBbookmarks"].setChecked(False) |
|
1329 self.marginMenuActs["LMBbreakpoints"] = self.marginMenu.addAction( |
|
1330 self.tr('LMB toggles breakpoints'), self.__lmBbreakpoints) |
|
1331 self.marginMenuActs["LMBbreakpoints"].setCheckable(True) |
|
1332 self.marginMenuActs["LMBbreakpoints"].setChecked(True) |
|
1333 |
|
1334 self.marginMenu.aboutToShow.connect( |
|
1335 lambda: self.__showContextMenuMargin(self.marginMenu)) |
|
1336 |
|
1337 def __exportMenuTriggered(self, act): |
1274 def __exportMenuTriggered(self, act): |
1338 """ |
1275 """ |
1339 Private method to handle the selection of an export format. |
1276 Private method to handle the selection of an export format. |
1340 |
1277 |
1341 @param act reference to the action that was triggered (QAction) |
1278 @param act reference to the action that was triggered (QAction) |
3311 |
3249 |
3312 ########################################################################### |
3250 ########################################################################### |
3313 ## Utility methods below |
3251 ## Utility methods below |
3314 ########################################################################### |
3252 ########################################################################### |
3315 |
3253 |
3316 def ensureVisible(self, line): |
3254 def ensureVisible(self, line, expand=False): |
3317 """ |
3255 """ |
3318 Public slot to ensure, that the specified line is visible. |
3256 Public slot to ensure, that the specified line is visible. |
3319 |
3257 |
3320 @param line line number to make visible |
3258 @param line line number to make visible |
|
3259 @type int |
|
3260 @keyparam expand flag indicating to expand all folds |
|
3261 @type bool |
3321 """ |
3262 """ |
3322 self.ensureLineVisible(line - 1) |
3263 self.ensureLineVisible(line - 1) |
3323 |
3264 if expand: |
3324 def ensureVisibleTop(self, line): |
3265 self.SendScintilla(QsciScintilla.SCI_FOLDCHILDREN, line - 1, |
|
3266 QsciScintilla.SC_FOLDACTION_EXPAND) |
|
3267 |
|
3268 def ensureVisibleTop(self, line, expand=False): |
3325 """ |
3269 """ |
3326 Public slot to ensure, that the specified line is visible at the top |
3270 Public slot to ensure, that the specified line is visible at the top |
3327 of the editor. |
3271 of the editor. |
3328 |
3272 |
3329 @param line line number to make visible |
3273 @param line line number to make visible |
3330 """ |
3274 @type int |
|
3275 @keyparam expand flag indicating to expand all folds |
|
3276 @type bool |
|
3277 """ |
|
3278 self.ensureVisible(line) |
3331 self.setFirstVisibleLine(line - 1) |
3279 self.setFirstVisibleLine(line - 1) |
|
3280 self.ensureCursorVisible() |
|
3281 if expand: |
|
3282 self.SendScintilla(QsciScintilla.SCI_FOLDCHILDREN, line - 1, |
|
3283 QsciScintilla.SC_FOLDACTION_EXPAND) |
3332 |
3284 |
3333 def __marginClicked(self, margin, line, modifiers): |
3285 def __marginClicked(self, margin, line, modifiers): |
3334 """ |
3286 """ |
3335 Private slot to handle the marginClicked signal. |
3287 Private slot to handle the marginClicked signal. |
3336 |
3288 |
3337 @param margin id of the clicked margin (integer) |
3289 @param margin id of the clicked margin (integer) |
3338 @param line line number of the click (integer) |
3290 @param line line number of the click (integer) |
3339 @param modifiers keyboard modifiers (Qt.KeyboardModifiers) |
3291 @param modifiers keyboard modifiers (Qt.KeyboardModifiers) |
3340 """ |
3292 """ |
3341 if self.__unifiedMargins: |
3293 if margin == self.__bmMargin: |
3342 if margin == 1: |
3294 self.toggleBookmark(line + 1) |
3343 if modifiers & Qt.KeyboardModifiers(Qt.ShiftModifier): |
3295 elif margin == self.__bpMargin: |
3344 if self.marginMenuActs["LMBbreakpoints"].isChecked(): |
3296 self.__toggleBreakpoint(line + 1) |
3345 self.toggleBookmark(line + 1) |
3297 elif margin == self.__indicMargin: |
3346 else: |
3298 if self.markersAtLine(line) & (1 << self.syntaxerror): |
3347 self.__toggleBreakpoint(line + 1) |
3299 self.__showSyntaxError(line) |
3348 elif modifiers & Qt.KeyboardModifiers(Qt.ControlModifier): |
3300 elif self.markersAtLine(line) & (1 << self.warning): |
3349 if self.markersAtLine(line) & (1 << self.syntaxerror): |
3301 self.__showWarning(line) |
3350 self.__showSyntaxError(line) |
|
3351 elif self.markersAtLine(line) & (1 << self.warning): |
|
3352 self.__showWarning(line) |
|
3353 else: |
|
3354 if self.marginMenuActs["LMBbreakpoints"].isChecked(): |
|
3355 self.__toggleBreakpoint(line + 1) |
|
3356 else: |
|
3357 self.toggleBookmark(line + 1) |
|
3358 else: |
|
3359 if margin == self.__bmMargin: |
|
3360 self.toggleBookmark(line + 1) |
|
3361 elif margin == self.__bpMargin: |
|
3362 self.__toggleBreakpoint(line + 1) |
|
3363 elif margin == self.__indicMargin: |
|
3364 if self.markersAtLine(line) & (1 << self.syntaxerror): |
|
3365 self.__showSyntaxError(line) |
|
3366 elif self.markersAtLine(line) & (1 << self.warning): |
|
3367 self.__showWarning(line) |
|
3368 |
3302 |
3369 def handleMonospacedEnable(self): |
3303 def handleMonospacedEnable(self): |
3370 """ |
3304 """ |
3371 Public slot to handle the Use Monospaced Font context menu entry. |
3305 Public slot to handle the Use Monospaced Font context menu entry. |
3372 """ |
3306 """ |
4019 if self.lexer_ and self.lexer_.hasSmartIndent(): |
3953 if self.lexer_ and self.lexer_.hasSmartIndent(): |
4020 self.lexer_.smartIndentLine(self) |
3954 self.lexer_.smartIndentLine(self) |
4021 else: |
3955 else: |
4022 self.__indentLine(True) |
3956 self.__indentLine(True) |
4023 |
3957 |
4024 def gotoLine(self, line, pos=1, firstVisible=False): |
3958 def gotoLine(self, line, pos=1, firstVisible=False, expand=False): |
4025 """ |
3959 """ |
4026 Public slot to jump to the beginning of a line. |
3960 Public slot to jump to the beginning of a line. |
4027 |
3961 |
4028 @param line line number to go to (integer) |
3962 @param line line number to go to |
4029 @keyparam pos position in line to go to (integer) |
3963 @type int |
|
3964 @keyparam pos position in line to go to |
|
3965 @type int |
4030 @keyparam firstVisible flag indicating to make the line the first |
3966 @keyparam firstVisible flag indicating to make the line the first |
4031 visible line (boolean) |
3967 visible line |
|
3968 @type bool |
|
3969 @keyparam expand flag indicating to expand all folds |
|
3970 @type bool |
4032 """ |
3971 """ |
4033 self.setCursorPosition(line - 1, pos - 1) |
3972 self.setCursorPosition(line - 1, pos - 1) |
4034 if firstVisible: |
3973 if firstVisible: |
4035 self.ensureVisibleTop(line) |
3974 self.ensureVisibleTop(line, expand) |
4036 else: |
3975 else: |
4037 self.ensureVisible(line) |
3976 self.ensureVisible(line, expand) |
4038 |
3977 |
4039 def __textChanged(self): |
3978 def __textChanged(self): |
4040 """ |
3979 """ |
4041 Private slot to handle a change of the editor text. |
3980 Private slot to handle a change of the editor text. |
4042 |
3981 |
4257 self.setMarginMarkerMask(margin, 0) |
4194 self.setMarginMarkerMask(margin, 0) |
4258 self.setMarginWidth(margin, 0) |
4195 self.setMarginWidth(margin, 0) |
4259 self.setMarginSensitivity(margin, False) |
4196 self.setMarginSensitivity(margin, False) |
4260 |
4197 |
4261 # set marker margin(s) settings |
4198 # set marker margin(s) settings |
4262 if self.__unifiedMargins: |
4199 self.__bmMargin = 0 |
4263 margin1Mask = (1 << self.breakpoint) | \ |
4200 self.__linenoMargin = 1 |
4264 (1 << self.cbreakpoint) | \ |
4201 self.__bpMargin = 2 |
4265 (1 << self.tbreakpoint) | \ |
4202 self.__foldMargin = 3 |
4266 (1 << self.tcbreakpoint) | \ |
4203 self.__indicMargin = 4 |
4267 (1 << self.dbreakpoint) | \ |
4204 |
4268 (1 << self.currentline) | \ |
4205 marginBmMask = (1 << self.bookmark) |
4269 (1 << self.errorline) | \ |
4206 self.setMarginWidth(self.__bmMargin, 16) |
4270 (1 << self.bookmark) | \ |
4207 self.setMarginSensitivity(self.__bmMargin, True) |
4271 (1 << self.syntaxerror) | \ |
4208 self.setMarginMarkerMask(self.__bmMargin, marginBmMask) |
|
4209 |
|
4210 marginBpMask = (1 << self.breakpoint) | \ |
|
4211 (1 << self.cbreakpoint) | \ |
|
4212 (1 << self.tbreakpoint) | \ |
|
4213 (1 << self.tcbreakpoint) | \ |
|
4214 (1 << self.dbreakpoint) |
|
4215 self.setMarginWidth(self.__bpMargin, 16) |
|
4216 self.setMarginSensitivity(self.__bpMargin, True) |
|
4217 self.setMarginMarkerMask(self.__bpMargin, marginBpMask) |
|
4218 |
|
4219 marginIndicMask = (1 << self.syntaxerror) | \ |
4272 (1 << self.notcovered) | \ |
4220 (1 << self.notcovered) | \ |
4273 (1 << self.taskmarker) | \ |
4221 (1 << self.taskmarker) | \ |
4274 (1 << self.warning) | \ |
4222 (1 << self.warning) | \ |
4275 (1 << self.__changeMarkerUnsaved) | \ |
4223 (1 << self.__changeMarkerUnsaved) | \ |
4276 (1 << self.__changeMarkerSaved) |
4224 (1 << self.__changeMarkerSaved) | \ |
4277 self.setMarginWidth(1, 16) |
4225 (1 << self.currentline) | \ |
4278 self.setMarginSensitivity(1, True) |
4226 (1 << self.errorline) |
4279 self.setMarginMarkerMask(1, margin1Mask) |
4227 self.setMarginWidth(self.__indicMargin, 16) |
4280 |
4228 self.setMarginSensitivity(self.__indicMargin, True) |
4281 self.__linenoMargin = 0 |
4229 self.setMarginMarkerMask(self.__indicMargin, marginIndicMask) |
4282 self.__foldMargin = 2 |
|
4283 else: |
|
4284 |
|
4285 self.__bmMargin = 0 |
|
4286 self.__linenoMargin = 1 |
|
4287 self.__bpMargin = 2 |
|
4288 self.__foldMargin = 3 |
|
4289 self.__indicMargin = 4 |
|
4290 |
|
4291 marginBmMask = (1 << self.bookmark) |
|
4292 self.setMarginWidth(self.__bmMargin, 16) |
|
4293 self.setMarginSensitivity(self.__bmMargin, True) |
|
4294 self.setMarginMarkerMask(self.__bmMargin, marginBmMask) |
|
4295 |
|
4296 marginBpMask = (1 << self.breakpoint) | \ |
|
4297 (1 << self.cbreakpoint) | \ |
|
4298 (1 << self.tbreakpoint) | \ |
|
4299 (1 << self.tcbreakpoint) | \ |
|
4300 (1 << self.dbreakpoint) |
|
4301 self.setMarginWidth(self.__bpMargin, 16) |
|
4302 self.setMarginSensitivity(self.__bpMargin, True) |
|
4303 self.setMarginMarkerMask(self.__bpMargin, marginBpMask) |
|
4304 |
|
4305 marginIndicMask = (1 << self.syntaxerror) | \ |
|
4306 (1 << self.notcovered) | \ |
|
4307 (1 << self.taskmarker) | \ |
|
4308 (1 << self.warning) | \ |
|
4309 (1 << self.__changeMarkerUnsaved) | \ |
|
4310 (1 << self.__changeMarkerSaved) | \ |
|
4311 (1 << self.currentline) | \ |
|
4312 (1 << self.errorline) |
|
4313 self.setMarginWidth(self.__indicMargin, 16) |
|
4314 self.setMarginSensitivity(self.__indicMargin, True) |
|
4315 self.setMarginMarkerMask(self.__indicMargin, marginIndicMask) |
|
4316 |
4230 |
4317 # set linenumber margin settings |
4231 # set linenumber margin settings |
4318 linenoMargin = Preferences.getEditor("LinenoMargin") |
4232 linenoMargin = Preferences.getEditor("LinenoMargin") |
4319 self.setMarginLineNumbers(self.__linenoMargin, linenoMargin) |
4233 self.setMarginLineNumbers(self.__linenoMargin, linenoMargin) |
4320 if linenoMargin: |
4234 if linenoMargin: |
5380 menu. |
5258 menu. |
5381 |
5259 |
5382 @param menu reference to the menu to be shown |
5260 @param menu reference to the menu to be shown |
5383 @type QMenu |
5261 @type QMenu |
5384 """ |
5262 """ |
5385 if self.fileName and self.isPyFile(): |
5263 if menu is self.bpMarginMenu: |
5386 self.marginMenuActs["Breakpoint"].setEnabled(True) |
5264 supportsDebugger = bool(self.fileName and self.isPyFile()) |
5387 self.marginMenuActs["TempBreakpoint"].setEnabled(True) |
5265 hasBreakpoints = bool(self.breaks) |
5388 if self.markersAtLine(self.line) & self.breakpointMask: |
5266 hasBreakpoint = bool( |
5389 self.marginMenuActs["EditBreakpoint"].setEnabled(True) |
5267 self.markersAtLine(self.line) & self.breakpointMask) |
5390 self.marginMenuActs["EnableBreakpoint"].setEnabled(True) |
|
5391 else: |
|
5392 self.marginMenuActs["EditBreakpoint"].setEnabled(False) |
|
5393 self.marginMenuActs["EnableBreakpoint"].setEnabled(False) |
|
5394 if self.markersAtLine(self.line) & (1 << self.dbreakpoint): |
|
5395 self.marginMenuActs["EnableBreakpoint"].setText( |
|
5396 self.tr('Enable breakpoint')) |
|
5397 else: |
|
5398 self.marginMenuActs["EnableBreakpoint"].setText( |
|
5399 self.tr('Disable breakpoint')) |
|
5400 if self.breaks: |
|
5401 self.marginMenuActs["NextBreakpoint"].setEnabled(True) |
|
5402 self.marginMenuActs["PreviousBreakpoint"].setEnabled(True) |
|
5403 self.marginMenuActs["ClearBreakpoint"].setEnabled(True) |
|
5404 else: |
|
5405 self.marginMenuActs["NextBreakpoint"].setEnabled(False) |
|
5406 self.marginMenuActs["PreviousBreakpoint"].setEnabled(False) |
|
5407 self.marginMenuActs["ClearBreakpoint"].setEnabled(False) |
|
5408 else: |
|
5409 self.marginMenuActs["Breakpoint"].setEnabled(False) |
|
5410 self.marginMenuActs["TempBreakpoint"].setEnabled(False) |
|
5411 self.marginMenuActs["EditBreakpoint"].setEnabled(False) |
|
5412 self.marginMenuActs["EnableBreakpoint"].setEnabled(False) |
|
5413 self.marginMenuActs["NextBreakpoint"].setEnabled(False) |
|
5414 self.marginMenuActs["PreviousBreakpoint"].setEnabled(False) |
|
5415 self.marginMenuActs["ClearBreakpoint"].setEnabled(False) |
|
5416 |
5268 |
5417 if self.bookmarks: |
5269 self.marginMenuActs["Breakpoint"].setEnabled(supportsDebugger) |
5418 self.marginMenuActs["NextBookmark"].setEnabled(True) |
5270 self.marginMenuActs["TempBreakpoint"].setEnabled(supportsDebugger) |
5419 self.marginMenuActs["PreviousBookmark"].setEnabled(True) |
5271 self.marginMenuActs["NextBreakpoint"].setEnabled( |
5420 self.marginMenuActs["ClearBookmark"].setEnabled(True) |
5272 supportsDebugger and hasBreakpoints) |
5421 else: |
5273 self.marginMenuActs["PreviousBreakpoint"].setEnabled( |
5422 self.marginMenuActs["NextBookmark"].setEnabled(False) |
5274 supportsDebugger and hasBreakpoints) |
5423 self.marginMenuActs["PreviousBookmark"].setEnabled(False) |
5275 self.marginMenuActs["ClearBreakpoint"].setEnabled( |
5424 self.marginMenuActs["ClearBookmark"].setEnabled(False) |
5276 supportsDebugger and hasBreakpoints) |
|
5277 self.marginMenuActs["EditBreakpoint"].setEnabled( |
|
5278 supportsDebugger and hasBreakpoint) |
|
5279 self.marginMenuActs["EnableBreakpoint"].setEnabled( |
|
5280 supportsDebugger and hasBreakpoint) |
|
5281 if supportsDebugger: |
|
5282 if self.markersAtLine(self.line) & (1 << self.dbreakpoint): |
|
5283 self.marginMenuActs["EnableBreakpoint"].setText( |
|
5284 self.tr('Enable breakpoint')) |
|
5285 else: |
|
5286 self.marginMenuActs["EnableBreakpoint"].setText( |
|
5287 self.tr('Disable breakpoint')) |
|
5288 |
|
5289 if menu is self.bmMarginMenu: |
|
5290 hasBookmarks = bool(self.bookmarks) |
5425 |
5291 |
5426 if len(self.syntaxerrors): |
5292 self.marginMenuActs["NextBookmark"].setEnabled(hasBookmarks) |
5427 self.marginMenuActs["GotoSyntaxError"].setEnabled(True) |
5293 self.marginMenuActs["PreviousBookmark"].setEnabled(hasBookmarks) |
5428 self.marginMenuActs["ClearSyntaxError"].setEnabled(True) |
5294 self.marginMenuActs["ClearBookmark"].setEnabled(hasBookmarks) |
5429 if self.markersAtLine(self.line) & (1 << self.syntaxerror): |
5295 |
|
5296 if menu is self.foldMarginMenu: |
|
5297 isFoldHeader = bool(self.SendScintilla( |
|
5298 QsciScintilla.SCI_GETFOLDLEVEL, self.line) & |
|
5299 QsciScintilla.SC_FOLDLEVELHEADERFLAG) |
|
5300 |
|
5301 self.marginMenuActs["ExpandChildren"].setEnabled(isFoldHeader) |
|
5302 self.marginMenuActs["CollapseChildren"].setEnabled(isFoldHeader) |
|
5303 |
|
5304 if menu is self.indicMarginMenu: |
|
5305 hasSyntaxErrors = bool(self.syntaxerrors) |
|
5306 hasWarnings = bool(self.warnings) |
|
5307 hasNotCoveredMarkers = bool(self.notcoveredMarkers) |
|
5308 |
|
5309 self.marginMenuActs["GotoSyntaxError"].setEnabled(hasSyntaxErrors) |
|
5310 self.marginMenuActs["ClearSyntaxError"].setEnabled(hasSyntaxErrors) |
|
5311 if hasSyntaxErrors and \ |
|
5312 self.markersAtLine(self.line) & (1 << self.syntaxerror): |
5430 self.marginMenuActs["ShowSyntaxError"].setEnabled(True) |
5313 self.marginMenuActs["ShowSyntaxError"].setEnabled(True) |
5431 else: |
5314 else: |
5432 self.marginMenuActs["ShowSyntaxError"].setEnabled(False) |
5315 self.marginMenuActs["ShowSyntaxError"].setEnabled(False) |
5433 else: |
5316 |
5434 self.marginMenuActs["GotoSyntaxError"].setEnabled(False) |
5317 self.marginMenuActs["NextWarningMarker"].setEnabled(hasWarnings) |
5435 self.marginMenuActs["ClearSyntaxError"].setEnabled(False) |
5318 self.marginMenuActs["PreviousWarningMarker"].setEnabled( |
5436 self.marginMenuActs["ShowSyntaxError"].setEnabled(False) |
5319 hasWarnings) |
5437 |
5320 self.marginMenuActs["ClearWarnings"].setEnabled(hasWarnings) |
5438 if len(self.warnings): |
5321 if hasWarnings and \ |
5439 self.marginMenuActs["NextWarningMarker"].setEnabled(True) |
5322 self.markersAtLine(self.line) & (1 << self.warning): |
5440 self.marginMenuActs["PreviousWarningMarker"].setEnabled(True) |
|
5441 self.marginMenuActs["ClearWarnings"].setEnabled(True) |
|
5442 if self.markersAtLine(self.line) & (1 << self.warning): |
|
5443 self.marginMenuActs["ShowWarning"].setEnabled(True) |
5323 self.marginMenuActs["ShowWarning"].setEnabled(True) |
5444 else: |
5324 else: |
5445 self.marginMenuActs["ShowWarning"].setEnabled(False) |
5325 self.marginMenuActs["ShowWarning"].setEnabled(False) |
5446 else: |
|
5447 self.marginMenuActs["NextWarningMarker"].setEnabled(False) |
|
5448 self.marginMenuActs["PreviousWarningMarker"].setEnabled(False) |
|
5449 self.marginMenuActs["ClearWarnings"].setEnabled(False) |
|
5450 self.marginMenuActs["ShowWarning"].setEnabled(False) |
|
5451 |
|
5452 if self.notcoveredMarkers: |
|
5453 self.marginMenuActs["NextCoverageMarker"].setEnabled(True) |
|
5454 self.marginMenuActs["PreviousCoverageMarker"].setEnabled(True) |
|
5455 else: |
|
5456 self.marginMenuActs["NextCoverageMarker"].setEnabled(False) |
|
5457 self.marginMenuActs["PreviousCoverageMarker"].setEnabled(False) |
|
5458 |
|
5459 if self.__hasTaskMarkers: |
|
5460 self.marginMenuActs["PreviousTaskMarker"].setEnabled(True) |
|
5461 self.marginMenuActs["NextTaskMarker"].setEnabled(True) |
|
5462 else: |
|
5463 self.marginMenuActs["PreviousTaskMarker"].setEnabled(False) |
|
5464 self.marginMenuActs["NextTaskMarker"].setEnabled(False) |
|
5465 |
|
5466 if self.__hasChangeMarkers: |
|
5467 self.marginMenuActs["PreviousChangeMarker"].setEnabled(True) |
|
5468 self.marginMenuActs["NextChangeMarker"].setEnabled(True) |
|
5469 self.marginMenuActs["ClearChangeMarkers"].setEnabled(True) |
|
5470 |
5326 |
5471 else: |
5327 self.marginMenuActs["NextCoverageMarker"].setEnabled( |
5472 self.marginMenuActs["PreviousChangeMarker"].setEnabled(False) |
5328 hasNotCoveredMarkers) |
5473 self.marginMenuActs["NextChangeMarker"].setEnabled(False) |
5329 self.marginMenuActs["PreviousCoverageMarker"].setEnabled( |
5474 self.marginMenuActs["ClearChangeMarkers"].setEnabled(False) |
5330 hasNotCoveredMarkers) |
|
5331 |
|
5332 self.marginMenuActs["PreviousTaskMarker"].setEnabled( |
|
5333 self.__hasTaskMarkers) |
|
5334 self.marginMenuActs["NextTaskMarker"].setEnabled( |
|
5335 self.__hasTaskMarkers) |
|
5336 |
|
5337 self.marginMenuActs["PreviousChangeMarker"].setEnabled( |
|
5338 self.__hasChangeMarkers) |
|
5339 self.marginMenuActs["NextChangeMarker"].setEnabled( |
|
5340 self.__hasChangeMarkers) |
|
5341 self.marginMenuActs["ClearChangeMarkers"].setEnabled( |
|
5342 self.__hasChangeMarkers) |
5475 |
5343 |
5476 self.showMenu.emit("Margin", menu, self) |
5344 self.showMenu.emit("Margin", menu, self) |
5477 |
5345 |
5478 def __showContextMenuChecks(self): |
5346 def __showContextMenuChecks(self): |
5479 """ |
5347 """ |
6431 self.clearAnnotations() |
6299 self.clearAnnotations() |
6432 for handle in list(self.warnings.keys()) + \ |
6300 for handle in list(self.warnings.keys()) + \ |
6433 list(self.syntaxerrors.keys()): |
6301 list(self.syntaxerrors.keys()): |
6434 line = self.markerLine(handle) |
6302 line = self.markerLine(handle) |
6435 self.__setAnnotation(line) |
6303 self.__setAnnotation(line) |
|
6304 |
|
6305 ################################################################# |
|
6306 ## Fold handling methods |
|
6307 ################################################################# |
|
6308 |
|
6309 def toggleCurrentFold(self): |
|
6310 """ |
|
6311 Public slot to toggle the fold containing the current line. |
|
6312 """ |
|
6313 line, index = self.getCursorPosition() |
|
6314 self.foldLine(line) |
|
6315 |
|
6316 def expandFoldWithChildren(self, line=-1): |
|
6317 """ |
|
6318 Public slot to expand the current fold including its children. |
|
6319 |
|
6320 @param line number of line to be expanded |
|
6321 @type int |
|
6322 """ |
|
6323 if line == -1: |
|
6324 line, index = self.getCursorPosition() |
|
6325 |
|
6326 self.SendScintilla(QsciScintilla.SCI_FOLDCHILDREN, line, |
|
6327 QsciScintilla.SC_FOLDACTION_EXPAND) |
|
6328 |
|
6329 def collapseFoldWithChildren(self, line=-1): |
|
6330 """ |
|
6331 Public slot to collapse the current fold including its children. |
|
6332 |
|
6333 @param line number of line to be expanded |
|
6334 @type int |
|
6335 """ |
|
6336 if line == -1: |
|
6337 line, index = self.getCursorPosition() |
|
6338 |
|
6339 self.SendScintilla(QsciScintilla.SCI_FOLDCHILDREN, line, |
|
6340 QsciScintilla.SC_FOLDACTION_CONTRACT) |
|
6341 |
|
6342 def __contextMenuExpandFoldWithChildren(self): |
|
6343 """ |
|
6344 Private slot to handle the context menu expand with children action. |
|
6345 """ |
|
6346 self.expandFoldWithChildren(self.line) |
|
6347 |
|
6348 def __contextMenuCollapseFoldWithChildren(self): |
|
6349 """ |
|
6350 Private slot to handle the context menu collapse with children action. |
|
6351 """ |
|
6352 self.collapseFoldWithChildren(self.line) |
6436 |
6353 |
6437 ################################################################# |
6354 ################################################################# |
6438 ## Macro handling methods |
6355 ## Macro handling methods |
6439 ################################################################# |
6356 ################################################################# |
6440 |
6357 |