Skip to content

Commit

Permalink
Merge pull request #223 from ceccopierangiolieugenio/221-copy-disable…
Browse files Browse the repository at this point in the history
…d-in-new-version-of-ttkdesigner

FIX: #221 Add clipboard support in the lineedit
  • Loading branch information
ceccopierangiolieugenio committed Jan 24, 2024
2 parents 5d404cb + b37fb59 commit e16e21f
Showing 1 changed file with 37 additions and 1 deletion.
38 changes: 37 additions & 1 deletion TermTk/TTkWidgets/lineedit.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
from TermTk.TTkCore.string import TTkString
from TermTk.TTkCore.color import TTkColor
from TermTk.TTkCore.signal import pyTTkSlot, pyTTkSignal
from TermTk.TTkGui.clipboard import TTkClipboard
from TermTk.TTkWidgets.widget import TTkWidget

'''
Expand All @@ -57,7 +58,9 @@ class EchoMode(int):
}

__slots__ = (
'_text', '_cursorPos', '_offset', '_replace', '_inputType', '_echoMode', '_selectionFrom', '_selectionTo',
'_text', '_cursorPos', '_offset', '_replace', '_inputType', '_echoMode',
'_selectionFrom', '_selectionTo',
'_clipboard',
# Signals
'returnPressed', 'textChanged', 'textEdited' )
def __init__(self, text='', inputType:int=TTkK.Input_Text, echoMode:EchoMode=EchoMode.Normal, **kwargs):
Expand All @@ -73,6 +76,7 @@ def __init__(self, text='', inputType:int=TTkK.Input_Text, echoMode:EchoMode=Ech
self._text = TTkString(text)
self._inputType = inputType
self._echoMode = echoMode
self._clipboard = TTkClipboard()
super().__init__(**kwargs)
self.setInputType(inputType)
self.setMaximumHeight(1)
Expand Down Expand Up @@ -161,6 +165,7 @@ def mouseDragEvent(self, evt) -> bool:
if self._selectionFrom < self._selectionTo:
TTkHelper.hideCursor()
self.update()
self.copy()
return True

def mouseDoubleClickEvent(self, evt) -> bool:
Expand All @@ -185,6 +190,7 @@ def mouseDoubleClickEvent(self, evt) -> bool:
TTkHelper.hideCursor()

self.update()
self.copy()
return True

def mouseTapEvent(self, evt) -> bool:
Expand All @@ -193,6 +199,7 @@ def mouseTapEvent(self, evt) -> bool:
if self._selectionFrom < self._selectionTo:
TTkHelper.hideCursor()
self.update()
self.copy()
return True

@staticmethod
Expand All @@ -203,6 +210,23 @@ def _isFloat(num):
except:
return False

@pyTTkSlot()
def copy(self):
if self._selectionFrom >= self._selectionTo: return
txt = self._text.substring(fr=self._selectionFrom,to=self._selectionTo)
self._clipboard.setText(txt)

@pyTTkSlot()
def cut(self):
self.copy()
self._text = self._text.substring(to=self._selectionFrom) + self._text.substring(fr=self._selectionTo)
self._cursorPos = self._selectionFrom
self.update()

@pyTTkSlot()
def paste(self):
txt = self._clipboard.text()
self.pasteEvent(txt)

def pasteEvent(self, txt:str):
txt = TTkString().join(txt.split('\n'))
Expand Down Expand Up @@ -238,6 +262,18 @@ def keyEvent(self, evt):
TTkK.Key_Tab, TTkK.Key_Up, TTkK.Key_Down):
return False

# CTRL Pressed
if evt.mod==TTkK.ControlModifier:
if evt.key == TTkK.Key_C:
self.copy()
elif evt.key == TTkK.Key_V:
self.paste()
elif evt.key == TTkK.Key_X:
self.cut()
else:
return False
return True

if evt.key == TTkK.Key_Left:
if self._selectionFrom < self._selectionTo:
self._cursorPos = self._selectionTo
Expand Down

0 comments on commit e16e21f

Please sign in to comment.