aboutsummaryrefslogtreecommitdiffhomepage
path: root/win32/ScintillaWin.cxx
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2014-05-01 10:51:55 +1000
committerNeil <nyamatongwe@gmail.com>2014-05-01 10:51:55 +1000
commitd4240cac256a9fc8e49e127a602a8ec6e47ba067 (patch)
treeb95f529ed4a663877831868f4cbce56e65ad1cbe /win32/ScintillaWin.cxx
parent87c435a58c291770bedbc1302a86dacff14cac4f (diff)
downloadscintilla-mirror-d4240cac256a9fc8e49e127a602a8ec6e47ba067.tar.gz
Consolidate insertion for paste into Editor class and perform line end
conversion in Editor.
Diffstat (limited to 'win32/ScintillaWin.cxx')
-rw-r--r--win32/ScintillaWin.cxx49
1 files changed, 5 insertions, 44 deletions
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx
index a0372f574..e084354f1 100644
--- a/win32/ScintillaWin.cxx
+++ b/win32/ScintillaWin.cxx
@@ -274,8 +274,6 @@ class ScintillaWin :
virtual bool GetScrollInfo(int nBar, LPSCROLLINFO lpsi);
void ChangeScrollPos(int barType, int pos);
- void InsertPasteText(const char *text, int len, SelectionPosition selStart, bool isRectangular, bool isLine);
-
public:
// Public for benefit of Scintilla_DirectFunction
virtual sptr_t WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
@@ -1648,44 +1646,12 @@ public:
}
};
-void ScintillaWin::InsertPasteText(const char *text, int len, SelectionPosition selStart, bool isRectangular, bool isLine) {
- if (isRectangular) {
- PasteRectangular(selStart, text, len);
- } else {
- std::string convertedText;
- if (convertPastes) {
- // Convert line endings of the paste into our local line-endings mode
- convertedText = Document::TransformLineEnds(text, len, pdoc->eolMode);
- len = static_cast<int>(convertedText.length());
- text = convertedText.c_str();
- }
- if (isLine) {
- int insertPos = pdoc->LineStart(pdoc->LineFromPosition(sel.MainCaret()));
- int lengthInserted = pdoc->InsertString(insertPos, text, len);
- // add the newline if necessary
- if ((len > 0) && (text[len-1] != '\n' && text[len-1] != '\r')) {
- const char *endline = StringFromEOLMode(pdoc->eolMode);
- int length = static_cast<int>(strlen(endline));
- lengthInserted += pdoc->InsertString(insertPos + lengthInserted, endline, length);
- }
- if (sel.MainCaret() == insertPos) {
- SetEmptySelection(sel.MainCaret() + lengthInserted);
- }
- } else {
- InsertPaste(selStart, text, len);
- }
- }
-}
-
void ScintillaWin::Paste() {
if (!::OpenClipboard(MainHWND()))
return;
UndoGroup ug(pdoc);
- bool isLine = SelectionEmpty() && (::IsClipboardFormatAvailable(cfLineSelect) != 0);
+ const bool isLine = SelectionEmpty() && (::IsClipboardFormatAvailable(cfLineSelect) != 0);
ClearSelection(multiPasteMode == SC_MULTIPASTE_EACH);
- SelectionPosition selStart = sel.IsRectangular() ?
- sel.Rectangular().Start() :
- sel.Range(sel.Main()).Start();
bool isRectangular = (::IsClipboardFormatAvailable(cfColumnSelect) != 0);
if (!isRectangular) {
@@ -1696,6 +1662,7 @@ void ScintillaWin::Paste() {
memBorlandSelection.Unlock();
}
}
+ const PasteShape pasteShape = isRectangular ? pasteRectangular : (isLine ? pasteLine : pasteStream);
// Always use CF_UNICODETEXT if available
GlobalMemory memUSelection(::GetClipboardData(CF_UNICODETEXT));
@@ -1721,7 +1688,7 @@ void ScintillaWin::Paste() {
&putf[0], len + 1, NULL, NULL);
}
- InsertPasteText(&putf[0], len, selStart, isRectangular, isLine);
+ InsertPasteShape(&putf[0], len, pasteShape);
}
memUSelection.Unlock();
} else {
@@ -1749,9 +1716,9 @@ void ScintillaWin::Paste() {
// CP_UTF8 not available on Windows 95, so use UTF8FromUTF16()
UTF8FromUTF16(&uptr[0], ulen, &putf[0], mlen);
- InsertPasteText(&putf[0], mlen, selStart, isRectangular, isLine);
+ InsertPasteShape(&putf[0], mlen, pasteShape);
} else {
- InsertPasteText(ptr, len, selStart, isRectangular, isLine);
+ InsertPasteShape(ptr, len, pasteShape);
}
}
memSelection.Unlock();
@@ -2534,12 +2501,6 @@ STDMETHODIMP ScintillaWin::Drop(LPDATAOBJECT pIDataSource, DWORD grfKeyState,
}
}
- if (!data.empty() && convertPastes) {
- // Convert line endings of the drop into our local line-endings mode
- std::string convertedText = Document::TransformLineEnds(&data[0], data.size() - 1, pdoc->eolMode);
- data.assign(convertedText.c_str(), convertedText.c_str()+convertedText.length()+1);
- }
-
if (!SUCCEEDED(hr) || data.empty()) {
//Platform::DebugPrintf("Bad data format: 0x%x\n", hres);
return hr;