aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authornyamatongwe <unknown>2001-09-01 03:01:09 +0000
committernyamatongwe <unknown>2001-09-01 03:01:09 +0000
commit2551486092fa6cd68a1881b84c502f0bb7e74892 (patch)
treea90dfa88218a698f1a689abd2caa2e0b54772405 /src
parent111ae4b1a706e2daf7c6e561a5389b57d4b7ea2b (diff)
downloadscintilla-mirror-2551486092fa6cd68a1881b84c502f0bb7e74892.tar.gz
Using new SelectionText type to handle text that is the subject of copy,
cut, paste and drag operations. Mouse wheel scrolling moved into platform subclasses. Macro support always included so MACRO_SUPPORT definition and use removed. Allowing menu popup moved from Editor to ScintillaBase.
Diffstat (limited to 'src')
-rw-r--r--src/Editor.cxx117
-rw-r--r--src/Editor.h40
-rw-r--r--src/ScintillaBase.cxx5
-rw-r--r--src/ScintillaBase.h1
4 files changed, 64 insertions, 99 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();
diff --git a/src/Editor.h b/src/Editor.h
index 1c1a13660..658161088 100644
--- a/src/Editor.h
+++ b/src/Editor.h
@@ -50,6 +50,26 @@ public:
int positions[maxLineLength+1];
};
+class SelectionText {
+public:
+ char *s;
+ int len;
+ bool rectangular;
+ SelectionText() : s(0), len(0), rectangular(false) {}
+ ~SelectionText() {
+ Set(0, 0);
+ }
+ void Set(char *s_, int len_, bool rectangular_=false) {
+ delete []s;
+ s = s_;
+ if (s)
+ len = len_;
+ else
+ len = 0;
+ rectangular = rectangular_;
+ }
+};
+
/**
*/
class Editor : public DocWatcher {
@@ -68,6 +88,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
bool stylesValid;
ViewStyle vs;
Palette palette;
+
int printMagnification;
int printColourMode;
int cursorMode;
@@ -106,7 +127,6 @@ protected: // ScintillaBase subclass needs access to much of Editor
bool dwelling;
enum { selChar, selWord, selLine } selectionType;
Point ptMouseLast;
- bool firstExpose;
bool inDragDrop;
bool dropWentOutside;
int posDrag;
@@ -135,9 +155,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
int modEventMask;
- char *dragChars;
- int lenDrag;
- bool dragIsRectangle;
+ SelectionText drag;
enum { selStream, selRectangle, selRectangleFixed } selType;
int xStartSelect;
int xEndSelect;
@@ -151,11 +169,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
int searchAnchor;
- int displayPopupMenu;
-
-#ifdef MACRO_SUPPORT
- int recordingMacro;
-#endif
+ bool recordingMacro;
int foldFlags;
ContractionState cs;
@@ -267,11 +281,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
void NotifyModified(Document *document, DocModification mh, void *userData);
void NotifyDeleted(Document *document, void *userData);
void NotifyStyleNeeded(Document *doc, void *userData, int endPos);
-
-
-#ifdef MACRO_SUPPORT
void NotifyMacroRecord(unsigned int iMessage, unsigned long wParam, long lParam);
-#endif
void PageMove(int direction, bool extend=false);
void ChangeCaseOfSelection(bool makeUpperCase);
@@ -293,9 +303,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
void GoToLine(int lineNo);
char *CopyRange(int start, int end);
- int SelectionRangeLength();
- char *CopySelectionRange();
- void CopySelectionIntoDrag();
+ void CopySelectionRange(SelectionText *ss);
void SetDragPosition(int newPos);
void DisplayCursor(Window::Cursor c);
virtual void StartDrag();
diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx
index 707f59b9f..75a8ffffa 100644
--- a/src/ScintillaBase.cxx
+++ b/src/ScintillaBase.cxx
@@ -35,6 +35,7 @@
#include "ScintillaBase.h"
ScintillaBase::ScintillaBase() {
+ displayPopupMenu = true;
listType = 0;
#ifdef SCI_LEXER
lexLanguage = SCLEX_CONTAINER;
@@ -514,6 +515,10 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara
InvalidateStyleRedraw();
break;
+ case SCI_USEPOPUP:
+ displayPopupMenu = wParam;
+ break;
+
#ifdef SCI_LEXER
case SCI_SETLEXER:
SetLexer(wParam);
diff --git a/src/ScintillaBase.h b/src/ScintillaBase.h
index d5b1e8ba0..acf70e000 100644
--- a/src/ScintillaBase.h
+++ b/src/ScintillaBase.h
@@ -30,6 +30,7 @@ protected:
idcmdSelectAll=16
};
+ bool displayPopupMenu;
Menu popup;
AutoComplete ac;