diff options
Diffstat (limited to 'src/Editor.cxx')
-rw-r--r-- | src/Editor.cxx | 117 |
1 files changed, 34 insertions, 83 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx index 346d1e1fd..73114f103 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -58,7 +58,6 @@ Editor::Editor() { dwelling = false; ptMouseLast.x = 0; ptMouseLast.y = 0; - firstExpose = true; inDragDrop = false; dropWentOutside = false; posDrag = invalidPosition; @@ -69,9 +68,6 @@ Editor::Editor() { lineAnchor = 0; originalAnchorPos = 0; - dragChars = 0; - lenDrag = 0; - dragIsRectangle = false; selType = selStream; xStartSelect = 0; xEndSelect = 0; @@ -111,15 +107,11 @@ Editor::Editor() { modEventMask = SC_MODEVENTMASKALL; - displayPopupMenu = true; - pdoc = new Document(); pdoc ->AddRef(); pdoc->AddWatcher(this, 0); -#ifdef MACRO_SUPPORT - recordingMacro = 0; -#endif + recordingMacro = false; foldFlags = 0; } @@ -128,10 +120,6 @@ Editor::~Editor() { pdoc->Release(); pdoc = 0; DropGraphics(); - - delete []dragChars; - dragChars = 0; - lenDrag = 0; } void Editor::Finalise() { @@ -1914,14 +1902,12 @@ void Editor::NotifyChar(int ch) { scn.nmhdr.code = SCN_CHARADDED; scn.ch = ch; NotifyParent(scn); -#ifdef MACRO_SUPPORT if (recordingMacro) { char txt[2]; txt[0] = static_cast<char>(ch); txt[1] = '\0'; NotifyMacroRecord(SCI_REPLACESEL, 0, reinterpret_cast<long>(txt)); } -#endif } void Editor::NotifySavePoint(bool isSavePoint) { @@ -2147,7 +2133,6 @@ void Editor::NotifyDeleted(Document *, void *) { /* Do nothing */ } -#ifdef MACRO_SUPPORT void Editor::NotifyMacroRecord(unsigned int iMessage, unsigned long wParam, long lParam) { // Enumerates all macroable messages @@ -2233,7 +2218,6 @@ void Editor::NotifyMacroRecord(unsigned int iMessage, unsigned long wParam, long scn.lParam = lParam; NotifyParent(scn); } -#endif // Force scroll and keep position relative to top of window void Editor::PageMove(int direction, bool extend) { @@ -2797,33 +2781,23 @@ char *Editor::CopyRange(int start, int end) { return text; } -int Editor::SelectionRangeLength() { +void Editor::CopySelectionRange(SelectionText *ss) { + char *text = 0; + int size = 0; if (selType == selRectangle) { int lineStart = pdoc->LineFromPosition(SelectionStart()); int lineEnd = pdoc->LineFromPosition(SelectionEnd()); - int totalSize = 0; - for (int line = lineStart; line <= lineEnd; line++) { - totalSize += SelectionEnd(line) - SelectionStart(line) + 1; + int line; + for (line = lineStart; line <= lineEnd; line++) { + size += SelectionEnd(line) - SelectionStart(line) + 1; if (pdoc->eolMode == SC_EOL_CRLF) - totalSize++; + size++; } - return totalSize; - } else { - return SelectionEnd() - SelectionStart(); - } -} - -char *Editor::CopySelectionRange() { - if (selType == selRectangle) { - char *text = 0; - int lineStart = pdoc->LineFromPosition(SelectionStart()); - int lineEnd = pdoc->LineFromPosition(SelectionEnd()); - int totalSize = SelectionRangeLength(); - if (totalSize > 0) { - text = new char[totalSize + 1]; + if (size > 0) { + text = new char[size + 1]; if (text) { int j = 0; - for (int line = lineStart; line <= lineEnd; line++) { + for (line = lineStart; line <= lineEnd; line++) { for (int i = SelectionStart(line);i < SelectionEnd(line);i++) { text[j++] = pdoc->CharAt(i); } @@ -2832,24 +2806,14 @@ char *Editor::CopySelectionRange() { if (pdoc->eolMode != SC_EOL_CR) text[j++] = '\n'; } - text[totalSize] = '\0'; + text[size] = '\0'; } } - return text; } else { - return CopyRange(SelectionStart(), SelectionEnd()); - } -} - -void Editor::CopySelectionIntoDrag() { - delete []dragChars; - dragChars = 0; - lenDrag = SelectionRangeLength(); - dragChars = CopySelectionRange(); - dragIsRectangle = selType == selRectangle; - if (!dragChars) { - lenDrag = 0; + size = SelectionEnd() - SelectionStart(); + text = CopyRange(SelectionStart(), SelectionEnd()); } + ss->Set(text, size, selType == selRectangle); } void Editor::SetDragPosition(int newPos) { @@ -2879,8 +2843,6 @@ void Editor::StartDrag() { //DisplayCursor(Window::cursorArrow); } - - void Editor::DropAt(int position, const char *value, bool moving, bool rectangular) { //Platform::DebugPrintf("DropAt %d\n", inDragDrop); if (inDragDrop) @@ -3112,7 +3074,7 @@ void Editor::ButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, b if (inDragDrop) { SetMouseCapture(false); SetDragPosition(newPos); - CopySelectionIntoDrag(); + CopySelectionRange(&drag); StartDrag(); } else { xStartSelect = pt.x - vs.fixedColumnWidth + xOffset; @@ -3217,25 +3179,23 @@ void Editor::ButtonUp(Point pt, unsigned int curTime, bool ctrl) { int selStart = SelectionStart(); int selEnd = SelectionEnd(); if (selStart < selEnd) { - if (dragChars && lenDrag) { + if (drag.len) { if (ctrl) { - pdoc->InsertString(newPos, dragChars, lenDrag); - SetSelection(newPos, newPos + lenDrag); + pdoc->InsertString(newPos, drag.s, drag.len); + SetSelection(newPos, newPos + drag.len); } else if (newPos < selStart) { - pdoc->DeleteChars(selStart, lenDrag); - pdoc->InsertString(newPos, dragChars, lenDrag); - SetSelection(newPos, newPos + lenDrag); + pdoc->DeleteChars(selStart, drag.len); + pdoc->InsertString(newPos, drag.s, drag.len); + SetSelection(newPos, newPos + drag.len); } else if (newPos > selEnd) { - pdoc->DeleteChars(selStart, lenDrag); - newPos -= lenDrag; - pdoc->InsertString(newPos, dragChars, lenDrag); - SetSelection(newPos, newPos + lenDrag); + pdoc->DeleteChars(selStart, drag.len); + newPos -= drag.len; + pdoc->InsertString(newPos, drag.s, drag.len); + SetSelection(newPos, newPos + drag.len); } else { SetEmptySelection(newPos); } - delete []dragChars; - dragChars = 0; - lenDrag = 0; + drag.Set(0, 0); } selectionType = selChar; } @@ -3542,10 +3502,8 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { //Platform::DebugPrintf("S start wnd proc %d %d %d\n",iMessage, wParam, lParam); // Optional macro recording hook -#ifdef MACRO_SUPPORT if (recordingMacro) NotifyMacroRecord(iMessage, wParam, lParam); -#endif switch (iMessage) { @@ -3777,15 +3735,14 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { case SCI_GETSELTEXT: { if (lParam == 0) return 0; + SelectionText selectedText; + CopySelectionRange(&selectedText); char *ptr = reinterpret_cast<char *>(lParam); - int selSize = SelectionRangeLength(); - char *text = CopySelectionRange(); int iChar = 0; - if (text) { - for (; iChar < selSize; iChar++) - ptr[iChar] = text[iChar]; + if (selectedText.len) { + for (; iChar < selectedText.len; iChar++) + ptr[iChar] = selectedText.s[iChar]; ptr[iChar] = '\0'; - delete []text; } else { ptr[0] = '\0'; } @@ -4664,10 +4621,6 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { case SCI_LINESONSCREEN: return LinesOnScreen(); - case SCI_USEPOPUP: - displayPopupMenu = wParam; - break; - case SCI_SETSELFORE: vs.selforeset = wParam; vs.selforeground.desired = Colour(lParam); @@ -4912,15 +4865,13 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { case SCI_GETCURSOR: return cursorMode; -#ifdef MACRO_SUPPORT case SCI_STARTRECORD: - recordingMacro = 1; + recordingMacro = true; return 0; case SCI_STOPRECORD: - recordingMacro = 0; + recordingMacro = false; return 0; -#endif case SCI_MOVECARETINSIDEVIEW: MoveCaretInsideView(); |