def __onLeftMouseDoubleClicked(self,clickedPixelPos):
     retuDict = self.transUserClickedPixelPosToIndexPos( clickedPixelPos )
     xPos,yPos = retuDict['indexPos']
     offset = retuDict['offset']
     lineText = self.document().getLineText(yPos)
     if len(lineText) == 0:
         self.selectedTextManager().clearSelectedText()
         return 
         
     prevClickedPixelPos = self.settings().getUserDataByKey('leftMouseDoubleClickedPos')
     if prevClickedPixelPos == clickedPixelPos:
         self.settings().setUserDataByKey('leftMouseDoubleClickedPos',None)
         self.selectedTextManager().setSelectTextIndexPos( (0,yPos),(len(lineText),yPos) )
         self.cursor().setGlobalCursorPos( (len(lineText),yPos) )
     else:
         self.settings().setUserDataByKey('leftMouseDoubleClickedPos',clickedPixelPos)
         if xPos == 0:
             length = TextDocument.skipSpaceAndWordByRight(lineText, xPos)['offset']
         elif xPos == len(lineText):
             length = TextDocument.skipSpaceAndWordByLeft(lineText, xPos)['offset']
             xPos -= length
         else:
             toLeftRetuDict = TextDocument.skipSpaceAndWordByLeft(lineText, xPos)
             toRightRetuDict = TextDocument.skipSpaceAndWordByRight(lineText, xPos)
             if toLeftRetuDict['searcher'] == toRightRetuDict['searcher'] and toLeftRetuDict['searcher'] != None:
                 length = toLeftRetuDict['offset'] + toRightRetuDict['offset']
                 xPos -= toLeftRetuDict['offset']
             else:
                 if offset >= 0:
                     length = toRightRetuDict['offset']
                 else:
                     length = toLeftRetuDict['offset']
                     xPos -= length
         self.selectedTextManager().setSelectTextIndexPos( (xPos,yPos),(xPos+length,yPos) )
         self.cursor().setGlobalCursorPos( (xPos+length,yPos) )
    def __init__(self,font=QtGui.QFont('Consolas',11) ,parent=None):
        TextDocument.__init__(self, font, parent)
        
        self.__descIndexPosArr = []
        self.__strIndexPosArr = []
        self.__invalidPixmapAndCharWidthArrIndexs = []

        self.totalLevelTextChangedSignal.connect(self.afterUserOperate)
        self.afterGeneratePixmapAndCharWidthArrSignal.connect(self.afterGeneratePixmapAndCharWidthArr)
 def isLinePixmapAndCharWidthArrValid(self,index):
     retV = TextDocument.isLinePixmapAndCharWidthArrValid(self, index)
     if retV == True:
         return self.__invalidPixmapAndCharWidthArrIndexs.count(index) == 0
     else:
         return retV