Browse Source

feat: added find in the text edit (#320)

pull/323/head
Pier CeccoPierangioliEugenio 1 year ago committed by GitHub
parent
commit
d809d0bcca
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      TermTk/TTkCore/string.py
  2. 16
      TermTk/TTkGui/textdocument.py
  3. 14
      TermTk/TTkWidgets/texedit.py

2
TermTk/TTkCore/string.py

@ -581,7 +581,7 @@ class TTkString():
''' '''
return re.search(regexp, self._text, re.IGNORECASE if ignoreCase else 0) return re.search(regexp, self._text, re.IGNORECASE if ignoreCase else 0)
def find(self, *args, **kwargs) -> None: def find(self, *args, **kwargs) -> Any:
return self._text.find(*args, **kwargs) return self._text.find(*args, **kwargs)
def findall(self, regexp, ignoreCase=False): def findall(self, regexp, ignoreCase=False):

16
TermTk/TTkGui/textdocument.py

@ -22,6 +22,7 @@
__all__ = ['TTkTextDocument'] __all__ = ['TTkTextDocument']
from typing import TYPE_CHECKING
from threading import Lock from threading import Lock
from TermTk.TTkCore.log import TTkLog from TermTk.TTkCore.log import TTkLog
@ -29,6 +30,11 @@ from TermTk.TTkCore.signal import pyTTkSignal, pyTTkSlot
from TermTk.TTkCore.string import TTkString from TermTk.TTkCore.string import TTkString
from TermTk.TTkCore.color import TTkColor from TermTk.TTkCore.color import TTkColor
if TYPE_CHECKING:
from TermTk.TTkGui.textcursor import TTkTextCursor
else:
class TTkTextCursor(): ...
class TTkTextDocument(): class TTkTextDocument():
# ''' # '''
# Undo,Redo Logic # Undo,Redo Logic
@ -305,6 +311,16 @@ class TTkTextDocument():
self.undoAvailable.emit(self.isUndoAvailable()) self.undoAvailable.emit(self.isUndoAvailable())
self.redoAvailable.emit(self.isRedoAvailable()) self.redoAvailable.emit(self.isRedoAvailable())
def find(self, exp) -> TTkTextCursor:
for i,line in enumerate(self._dataLines):
if -1 != (pos := line.find(str(exp))):
from .textcursor import TTkTextCursor
ret = TTkTextCursor(document=self)
ret.setPosition(line=i, pos=pos)
ret.setPosition(line=i, pos=pos+len(exp), moveMode=TTkTextCursor.MoveMode.KeepAnchor)
return ret
return None
def _restoreSnapshotDiff(self, next=True): def _restoreSnapshotDiff(self, next=True):
if ( not self._snap or if ( not self._snap or
( next and not self._snap._nextDiff) or ( next and not self._snap._nextDiff) or

14
TermTk/TTkWidgets/texedit.py

@ -476,6 +476,14 @@ class TTkTextEditView(TTkAbstractScrollView):
if c := self._textDocument.restoreSnapshotNext(): if c := self._textDocument.restoreSnapshotNext():
self._textCursor.restore(c) self._textCursor.restore(c)
@pyTTkSlot(TTkString)
def find(self, exp):
if not (cursor := self._textDocument.find(exp)):
return False
self._textCursor = cursor
self._textDocument.cursorPositionChanged.emit(self._textCursor)
return True
@pyTTkSlot() @pyTTkSlot()
def clear(self) -> None: def clear(self) -> None:
pass pass
@ -573,6 +581,11 @@ class TTkTextEditView(TTkAbstractScrollView):
self._scrolToInclude(x,y) self._scrolToInclude(x,y)
return x, y return x, y
@pyTTkSlot()
def ensureCursorVisible(self):
cp = self._textCursor.position()
self._scrolToInclude(cp.pos,cp.line)
def _scrolToInclude(self, x, y) -> None: def _scrolToInclude(self, x, y) -> None:
# Scroll the area (if required) to include the position x,y # Scroll the area (if required) to include the position x,y
_,_,w,h = self.geometry() _,_,w,h = self.geometry()
@ -846,6 +859,7 @@ class TTkTextEdit(TTkAbstractScrollArea):
'extraSelections', 'setExtraSelections', 'extraSelections', 'setExtraSelections',
'cut', 'copy', 'paste', 'cut', 'copy', 'paste',
'undo', 'redo', 'isUndoAvailable', 'isRedoAvailable', 'undo', 'redo', 'isUndoAvailable', 'isRedoAvailable',
'find', 'ensureCursorVisible',
# Export Methods, # Export Methods,
'toAnsi', 'toRawText', 'toPlainText', # 'toHtml', 'toMarkdown', 'toAnsi', 'toRawText', 'toPlainText', # 'toHtml', 'toMarkdown',
]) ])

Loading…
Cancel
Save