diff options
author | nyamatongwe <unknown> | 2001-09-08 23:32:36 +0000 |
---|---|---|
committer | nyamatongwe <unknown> | 2001-09-08 23:32:36 +0000 |
commit | c3763b4bc2858919ed5dce8c5d88fa4d0d59e37e (patch) | |
tree | 9dce286dd214d4d818f70c81f0078eedd48da6d8 | |
parent | 612c29ecb347ab66d89a2196d05543372d4a0f6c (diff) | |
download | scintilla-mirror-c3763b4bc2858919ed5dce8c5d88fa4d0d59e37e.tar.gz |
Edit control emulation moved here from Editor.cxx.
-rw-r--r-- | win32/ScintillaWin.cxx | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index ac826c0a7..04cc57d45 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -442,8 +442,34 @@ sptr_t ScintillaWin::HandleComposition(uptr_t wParam, sptr_t lParam) { } } +// Translate message IDs from WM_* and EM_* to SCI_* so can partly emulate Windows Edit control +static unsigned int SciMessageFromEM(unsigned int iMessage) { + switch (iMessage) { + case EM_CANPASTE: return SCI_CANPASTE; + case EM_CANUNDO: return SCI_CANUNDO; + case EM_EMPTYUNDOBUFFER: return SCI_EMPTYUNDOBUFFER; + case EM_FINDTEXTEX: return SCI_FINDTEXT; + case EM_FORMATRANGE: return SCI_FORMATRANGE; + case EM_GETFIRSTVISIBLELINE: return SCI_GETFIRSTVISIBLELINE; + case EM_GETLINECOUNT: return SCI_GETLINECOUNT; + case EM_GETTEXTRANGE: return SCI_GETTEXTRANGE; + case EM_HIDESELECTION: return SCI_HIDESELECTION; + case EM_LINEINDEX: return SCI_POSITIONFROMLINE; + case EM_LINESCROLL: return SCI_LINESCROLL; + case EM_REPLACESEL: return SCI_REPLACESEL; + case WM_CLEAR: return SCI_CLEAR; + case WM_COPY: return SCI_COPY; + case WM_CUT: return SCI_CUT; + case WM_GETTEXTLENGTH: return SCI_GETTEXTLENGTH; + case WM_PASTE: return SCI_PASTE; + case WM_UNDO: return SCI_UNDO; + } + return iMessage; +} + sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { //Platform::DebugPrintf("S M:%x WP:%x L:%x\n", iMessage, wParam, lParam); + iMessage = SciMessageFromEM(iMessage); switch (iMessage) { case WM_CREATE: @@ -698,6 +724,34 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam case WM_WINDOWPOSCHANGED: return ::DefWindowProc(wMain.GetID(), iMessage, wParam, lParam); + case EM_LINEFROMCHAR: + if (static_cast<int>(wParam) < 0) + wParam = SelectionStart(); + return pdoc->LineFromPosition(wParam); + + case EM_EXGETSEL: { + if (lParam == 0) + return 0; + CharacterRange *pCR = reinterpret_cast<CharacterRange *>(lParam); + pCR->cpMin = SelectionStart(); + pCR->cpMax = SelectionEnd(); + } + break; + + case EM_EXSETSEL: { + if (lParam == 0) + return 0; + CharacterRange *pCR = reinterpret_cast<CharacterRange *>(lParam); + selType = selStream; + if (pCR->cpMax == -1) { + SetSelection(pCR->cpMin, pdoc->Length()); + } else { + SetSelection(pCR->cpMin, pCR->cpMax); + } + EnsureCaretVisible(); + return pdoc->LineFromPosition(SelectionStart()); + } + case SCI_GETDIRECTFUNCTION: return reinterpret_cast<sptr_t>(DirectFunction); |