Added clipboard cut and paste

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12928 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2001-12-08 18:04:27 +00:00
parent 08df3e4420
commit 51dc95a4c8

View File

@@ -75,7 +75,6 @@ class wxEditor(wxScrolledWindow):
self.InitDoubleBuffering() self.InitDoubleBuffering()
self.InitScrolling() self.InitScrolling()
self.SelectOff() self.SelectOff()
self.CopiedData = None
self.SetFocus() self.SetFocus()
self.SetText([""]) self.SetText([""])
self.SpacesPerTab = 4 self.SpacesPerTab = 4
@@ -634,17 +633,21 @@ class wxEditor(wxScrolledWindow):
self.CopySelection(event) self.CopySelection(event)
self.SelectOff() self.SelectOff()
def CopyData(self, data): def CopyToClipboard(self, linesOfText):
self.CopiedData = data do = wxTextDataObject()
do.SetText(string.join(linesOfText, os.linesep))
wxTheClipboard.Open()
wxTheClipboard.SetData(do)
wxTheClipboard.Close()
def SingleLineCopy(self, Row, bCol, eCol): def SingleLineCopy(self, Row, bCol, eCol):
Line = self.GetTextLine(Row) Line = self.GetTextLine(Row)
self.CopyData([Line[bCol:eCol]]) self.CopyToClipboard([Line[bCol:eCol]])
def MultipleLineCopy(self, bRow, bCol, eRow, eCol): def MultipleLineCopy(self, bRow, bCol, eRow, eCol):
bLine = self.GetTextLine(bRow)[bCol:] bLine = self.GetTextLine(bRow)[bCol:]
eLine = self.GetTextLine(eRow)[:eCol] eLine = self.GetTextLine(eRow)[:eCol]
self.CopyData([bLine] + [l for l in self.lines[bRow + 1:eRow]] + [eLine]) self.CopyToClipboard([bLine] + [l for l in self.lines[bRow + 1:eRow]] + [eLine])
def OnDeleteSelection(self, event): def OnDeleteSelection(self, event):
selection = self.FindSelection() selection = self.FindSelection()
@@ -677,16 +680,22 @@ class wxEditor(wxScrolledWindow):
self.lines[bRow:eRow + 1] = [ModLine] self.lines[bRow:eRow + 1] = [ModLine]
def OnPaste(self, event): def OnPaste(self, event):
if self.CopiedData is None: do = wxTextDataObject()
wxBell() wxTheClipboard.Open()
return success = wxTheClipboard.GetData(do)
elif len(self.CopiedData) == 0: wxTheClipboard.Close()
wxBell() if success:
return pastedLines = string.split(do.GetText(), '\n')
elif len(self.CopiedData) == 1:
self.SingleLineInsert(self.CopiedData[0])
else: else:
self.MultipleLinePaste() wxBell()
return
if len(pastedLines) == 0:
wxBell()
return
elif len(pastedLines) == 1:
self.SingleLineInsert(pastedLines[0])
else:
self.MultipleLinePaste(pastedLines)
def SingleLineInsert(self, newText): def SingleLineInsert(self, newText):
ModLine = self.GetTextLine(self.cy) ModLine = self.GetTextLine(self.cy)
@@ -696,18 +705,18 @@ class wxEditor(wxScrolledWindow):
self.TouchBuffer() self.TouchBuffer()
self.UpdateView() self.UpdateView()
def MultipleLinePaste(self): def MultipleLinePaste(self, pastedLines):
FirstLine = LastLine = self.GetTextLine(self.cy) FirstLine = LastLine = self.GetTextLine(self.cy)
FirstLine = FirstLine[:self.cx] + self.CopiedData[0] FirstLine = FirstLine[:self.cx] + pastedLines[0]
LastLine = self.CopiedData[-1] + LastLine[self.cx:] LastLine = pastedLines[-1] + LastLine[self.cx:]
NewSlice = [FirstLine] NewSlice = [FirstLine]
NewSlice += [l for l in self.CopiedData[1:-1]] NewSlice += [l for l in pastedLines[1:-1]]
NewSlice += [LastLine] NewSlice += [LastLine]
self.lines[self.cy:self.cy + 1] = NewSlice self.lines[self.cy:self.cy + 1] = NewSlice
self.cy = self.cy + len(self.CopiedData)-1 self.cy = self.cy + len(pastedLines)-1
self.cx = len(self.CopiedData[-1]) self.cx = len(pastedLines[-1])
self.TouchBuffer() self.TouchBuffer()
self.UpdateView() self.UpdateView()