QScintilla/Editor.py

changeset 3329
1ee38e29ed4f
parent 3327
1338767b5315
child 3341
7c015811fc4d
equal deleted inserted replaced
3328:15aaa8d3a840 3329:1ee38e29ed4f
17 QMenu, QPalette, QFont, QPixmap, QPainter 17 QMenu, QPalette, QFont, QPixmap, QPainter
18 from PyQt4.Qsci import QsciScintilla, QsciMacro, QsciStyledText 18 from PyQt4.Qsci import QsciScintilla, QsciMacro, QsciStyledText
19 19
20 from E5Gui.E5Application import e5App 20 from E5Gui.E5Application import e5App
21 from E5Gui import E5FileDialog, E5MessageBox 21 from E5Gui import E5FileDialog, E5MessageBox
22 from E5Gui.E5MapWidget import E5MapWidget
23 22
24 from .QsciScintillaCompat import QsciScintillaCompat, QSCINTILLA_VERSION 23 from .QsciScintillaCompat import QsciScintillaCompat, QSCINTILLA_VERSION
24 from .EditorMarkerMap import EditorMarkerMap
25 25
26 import Preferences 26 import Preferences
27 import Utilities 27 import Utilities
28 28
29 import UI.PixmapCache 29 import UI.PixmapCache
290 (1 << self.dbreakpoint) 290 (1 << self.dbreakpoint)
291 291
292 self.changeMarkersMask = (1 << self.__changeMarkerSaved) | \ 292 self.changeMarkersMask = (1 << self.__changeMarkerSaved) | \
293 (1 << self.__changeMarkerUnsaved) 293 (1 << self.__changeMarkerUnsaved)
294 294
295 self.__markerMap = E5MapWidget(self) 295 self.__markerMap = EditorMarkerMap(self)
296 296
297 # configure the margins 297 # configure the margins
298 self.__setMarginsDisplay() 298 self.__setMarginsDisplay()
299 self.linesChanged.connect(self.__resizeLinenoMargin) 299 self.linesChanged.connect(self.__resizeLinenoMargin)
300 300
442 self.project.isProjectSource(self.fileName): 442 self.project.isProjectSource(self.fileName):
443 self.project.projectPropertiesChanged.connect( 443 self.project.projectPropertiesChanged.connect(
444 self.__projectPropertiesChanged) 444 self.__projectPropertiesChanged)
445 445
446 self.grabGesture(Qt.PinchGesture) 446 self.grabGesture(Qt.PinchGesture)
447
448 self.SCN_ZOOM.connect(self.__markerMap.update)
449 self.__markerMap.update()
447 450
448 def __registerImages(self): 451 def __registerImages(self):
449 """ 452 """
450 Private method to register images for autocompletion lists. 453 Private method to register images for autocompletion lists.
451 """ 454 """
1652 doSpelling = False 1655 doSpelling = False
1653 if doSpelling: 1656 if doSpelling:
1654 pos = self.positionFromLineIndex(self.lastLine, self.lastIndex) 1657 pos = self.positionFromLineIndex(self.lastLine, self.lastIndex)
1655 self.spell.checkWord(pos) 1658 self.spell.checkWord(pos)
1656 1659
1660 if self.lastLine != line:
1661 self.__markerMap.update()
1662
1657 self.lastLine = line 1663 self.lastLine = line
1658 self.lastIndex = index 1664 self.lastIndex = index
1659 1665
1660 def __modificationReadOnly(self): 1666 def __modificationReadOnly(self):
1661 """ 1667 """
1949 """ 1955 """
1950 for handle in list(self.breaks.keys()): 1956 for handle in list(self.breaks.keys()):
1951 self.markerDeleteHandle(handle) 1957 self.markerDeleteHandle(handle)
1952 self.__addBreakPoints( 1958 self.__addBreakPoints(
1953 QModelIndex(), 0, self.breakpointModel.rowCount() - 1) 1959 QModelIndex(), 0, self.breakpointModel.rowCount() - 1)
1960 self.__markerMap.update()
1954 1961
1955 def __deleteBreakPoints(self, parentIndex, start, end): 1962 def __deleteBreakPoints(self, parentIndex, start, end):
1956 """ 1963 """
1957 Private slot to delete breakpoints. 1964 Private slot to delete breakpoints.
1958 1965
2025 # not found, simply ignore it 2032 # not found, simply ignore it
2026 return 2033 return
2027 2034
2028 del self.breaks[handle] 2035 del self.breaks[handle]
2029 self.markerDeleteHandle(handle) 2036 self.markerDeleteHandle(handle)
2037 self.__markerMap.update()
2030 2038
2031 def newBreakpointWithProperties(self, line, properties): 2039 def newBreakpointWithProperties(self, line, properties):
2032 """ 2040 """
2033 Private method to set a new breakpoint and its properties. 2041 Private method to set a new breakpoint and its properties.
2034 2042
2045 2053
2046 if self.markersAtLine(line - 1) & self.breakpointMask == 0: 2054 if self.markersAtLine(line - 1) & self.breakpointMask == 0:
2047 handle = self.markerAdd(line - 1, marker) 2055 handle = self.markerAdd(line - 1, marker)
2048 self.breaks[handle] = (line,) + properties 2056 self.breaks[handle] = (line,) + properties
2049 self.breakpointToggled.emit(self) 2057 self.breakpointToggled.emit(self)
2058 self.__markerMap.update()
2050 2059
2051 def __toggleBreakpoint(self, line, temporary=False): 2060 def __toggleBreakpoint(self, line, temporary=False):
2052 """ 2061 """
2053 Private method to toggle a breakpoint. 2062 Private method to toggle a breakpoint.
2054 2063
2268 2277
2269 @param line line number of the bookmark (integer) 2278 @param line line number of the bookmark (integer)
2270 """ 2279 """
2271 for handle in self.bookmarks: 2280 for handle in self.bookmarks:
2272 if self.markerLine(handle) == line - 1: 2281 if self.markerLine(handle) == line - 1:
2282 self.bookmarks.remove(handle)
2283 self.markerDeleteHandle(handle)
2273 break 2284 break
2274 else: 2285 else:
2275 # set a new bookmark 2286 # set a new bookmark
2276 handle = self.markerAdd(line - 1, self.bookmark) 2287 handle = self.markerAdd(line - 1, self.bookmark)
2277 self.bookmarks.append(handle) 2288 self.bookmarks.append(handle)
2278 self.bookmarkToggled.emit(self)
2279 return
2280
2281 self.bookmarks.remove(handle)
2282 self.markerDeleteHandle(handle)
2283 self.bookmarkToggled.emit(self) 2289 self.bookmarkToggled.emit(self)
2290 self.__markerMap.update()
2284 2291
2285 def getBookmarks(self): 2292 def getBookmarks(self):
2286 """ 2293 """
2287 Public method to retrieve the bookmarks. 2294 Public method to retrieve the bookmarks.
2288 2295
2371 """ 2378 """
2372 for handle in self.bookmarks: 2379 for handle in self.bookmarks:
2373 self.markerDeleteHandle(handle) 2380 self.markerDeleteHandle(handle)
2374 self.bookmarks = [] 2381 self.bookmarks = []
2375 self.bookmarkToggled.emit(self) 2382 self.bookmarkToggled.emit(self)
2383 self.__markerMap.update()
2376 2384
2377 ########################################################################### 2385 ###########################################################################
2378 ## Printing methods below 2386 ## Printing methods below
2379 ########################################################################### 2387 ###########################################################################
2380 2388
2543 shouldBreak = True 2551 shouldBreak = True
2544 break 2552 break
2545 if shouldBreak: 2553 if shouldBreak:
2546 break 2554 break
2547 self.taskMarkersUpdated.emit(self) 2555 self.taskMarkersUpdated.emit(self)
2556 self.__markerMap.update()
2548 2557
2549 ########################################################################### 2558 ###########################################################################
2550 ## Change tracing methods below 2559 ## Change tracing methods below
2551 ########################################################################### 2560 ###########################################################################
2552 2561
2626 self.markerAdd(lineNo, self.__changeMarkerUnsaved) 2635 self.markerAdd(lineNo, self.__changeMarkerUnsaved)
2627 self.__hasChangeMarkers = True 2636 self.__hasChangeMarkers = True
2628 2637
2629 if self.__hasChangeMarkers: 2638 if self.__hasChangeMarkers:
2630 self.changeMarkersUpdated.emit(self) 2639 self.changeMarkersUpdated.emit(self)
2640 self.__markerMap.update()
2631 2641
2632 def __resetOnlineChangeTraceInfo(self): 2642 def __resetOnlineChangeTraceInfo(self):
2633 """ 2643 """
2634 Private slot to reset the online change trace info. 2644 Private slot to reset the online change trace info.
2635 """ 2645 """
2647 self.markerAdd(lineNo, self.__changeMarkerSaved) 2657 self.markerAdd(lineNo, self.__changeMarkerSaved)
2648 self.__hasChangeMarkers = True 2658 self.__hasChangeMarkers = True
2649 2659
2650 if self.__hasChangeMarkers: 2660 if self.__hasChangeMarkers:
2651 self.changeMarkersUpdated.emit(self) 2661 self.changeMarkersUpdated.emit(self)
2662 self.__markerMap.update()
2652 2663
2653 def __deleteAllChangeMarkers(self): 2664 def __deleteAllChangeMarkers(self):
2654 """ 2665 """
2655 Private slot to delete all change markers. 2666 Private slot to delete all change markers.
2656 """ 2667 """
2657 self.markerDeleteAll(self.__changeMarkerUnsaved) 2668 self.markerDeleteAll(self.__changeMarkerUnsaved)
2658 self.markerDeleteAll(self.__changeMarkerSaved) 2669 self.markerDeleteAll(self.__changeMarkerSaved)
2659 self.__hasChangeMarkers = False 2670 self.__hasChangeMarkers = False
2660 self.changeMarkersUpdated.emit(self) 2671 self.changeMarkersUpdated.emit(self)
2672 self.__markerMap.update()
2661 2673
2662 def getChangeLines(self): 2674 def getChangeLines(self):
2663 """ 2675 """
2664 Public method to get the lines containing a change. 2676 Public method to get the lines containing a change.
2665 2677
5246 missing = cover.analysis2(self.fileName)[3] 5258 missing = cover.analysis2(self.fileName)[3]
5247 if missing: 5259 if missing:
5248 for line in missing: 5260 for line in missing:
5249 handle = self.markerAdd(line - 1, self.notcovered) 5261 handle = self.markerAdd(line - 1, self.notcovered)
5250 self.notcoveredMarkers.append(handle) 5262 self.notcoveredMarkers.append(handle)
5251 self.coverageMarkersShown.emit(True) 5263 self.coverageMarkersShown.emit(True)
5264 self.__markerMap.update()
5252 else: 5265 else:
5253 if not silent: 5266 if not silent:
5254 E5MessageBox.information( 5267 E5MessageBox.information(
5255 self, 5268 self,
5256 self.tr("Show Code Coverage Annotations"), 5269 self.tr("Show Code Coverage Annotations"),
5271 for handle in self.notcoveredMarkers: 5284 for handle in self.notcoveredMarkers:
5272 self.markerDeleteHandle(handle) 5285 self.markerDeleteHandle(handle)
5273 self.notcoveredMarkers = [] 5286 self.notcoveredMarkers = []
5274 self.coverageMarkersShown.emit(False) 5287 self.coverageMarkersShown.emit(False)
5275 self.showingNotcoveredMarkers = False 5288 self.showingNotcoveredMarkers = False
5289 self.__markerMap.update()
5276 5290
5277 def getCoverageLines(self): 5291 def getCoverageLines(self):
5278 """ 5292 """
5279 Public method to get the lines containing a coverage marker. 5293 Public method to get the lines containing a coverage marker.
5280 5294
5447 del self.syntaxerrors[handle] 5461 del self.syntaxerrors[handle]
5448 self.markerDeleteHandle(handle) 5462 self.markerDeleteHandle(handle)
5449 self.syntaxerrorToggled.emit(self) 5463 self.syntaxerrorToggled.emit(self)
5450 5464
5451 self.__setAnnotation(line - 1) 5465 self.__setAnnotation(line - 1)
5466 self.__markerMap.update()
5452 5467
5453 def getSyntaxErrors(self): 5468 def getSyntaxErrors(self):
5454 """ 5469 """
5455 Public method to retrieve the syntax error markers. 5470 Public method to retrieve the syntax error markers.
5456 5471
5574 del self.warnings[handle] 5589 del self.warnings[handle]
5575 self.markerDeleteHandle(handle) 5590 self.markerDeleteHandle(handle)
5576 self.syntaxerrorToggled.emit(self) 5591 self.syntaxerrorToggled.emit(self)
5577 5592
5578 self.__setAnnotation(line - 1) 5593 self.__setAnnotation(line - 1)
5594 self.__markerMap.update()
5579 5595
5580 def getWarnings(self): 5596 def getWarnings(self):
5581 """ 5597 """
5582 Public method to retrieve the warning markers. 5598 Public method to retrieve the warning markers.
5583 5599
5685 else: 5701 else:
5686 del self.warnings[handle] 5702 del self.warnings[handle]
5687 self.__setAnnotation(self.markerLine(handle)) 5703 self.__setAnnotation(self.markerLine(handle))
5688 self.markerDeleteHandle(handle) 5704 self.markerDeleteHandle(handle)
5689 self.syntaxerrorToggled.emit(self) 5705 self.syntaxerrorToggled.emit(self)
5706 self.__markerMap.update()
5690 5707
5691 def clearWarnings(self): 5708 def clearWarnings(self):
5692 """ 5709 """
5693 Public slot to clear all warnings. 5710 Public slot to clear all warnings.
5694 """ 5711 """
5696 self.warnings[handle] = [] 5713 self.warnings[handle] = []
5697 self.__setAnnotation(self.markerLine(handle)) 5714 self.__setAnnotation(self.markerLine(handle))
5698 self.markerDeleteHandle(handle) 5715 self.markerDeleteHandle(handle)
5699 self.warnings = {} 5716 self.warnings = {}
5700 self.syntaxerrorToggled.emit(self) 5717 self.syntaxerrorToggled.emit(self)
5718 self.__markerMap.update()
5701 5719
5702 def __showWarning(self, line=-1): 5720 def __showWarning(self, line=-1):
5703 """ 5721 """
5704 Private slot to handle the 'Show warning' context menu action. 5722 Private slot to handle the 'Show warning' context menu action.
5705 5723
6327 self.toggleBookmark(bm) 6345 self.toggleBookmark(bm)
6328 self.__restoreBreakpoints() 6346 self.__restoreBreakpoints()
6329 6347
6330 self.editorSaved.emit(self.fileName) 6348 self.editorSaved.emit(self.fileName)
6331 self.__autoSyntaxCheck(useText=False) 6349 self.__autoSyntaxCheck(useText=False)
6350
6351 self.__markerMap.update()
6332 6352
6333 self.refreshed.emit() 6353 self.refreshed.emit()
6334 6354
6335 def setMonospaced(self, on): 6355 def setMonospaced(self, on):
6336 """ 6356 """

eric ide

mercurial