diff options
author | nyamatongwe <unknown> | 2010-10-11 21:40:17 +1100 |
---|---|---|
committer | nyamatongwe <unknown> | 2010-10-11 21:40:17 +1100 |
commit | 66c09167ac82b63f4584ffd28ad425194811595b (patch) | |
tree | 7ac755258f485f98c53e4fe7423831d5a24040c1 | |
parent | 54cd02b4bbe654fea892975d46cd9071a7fc891e (diff) | |
download | scintilla-mirror-66c09167ac82b63f4584ffd28ad425194811595b.tar.gz |
Feature request #3082409 implemented for SCN_HOTSPOTRELEASECLICK event.
Contributed by Farshid Lashkari.
-rw-r--r-- | doc/ScintillaDoc.html | 14 | ||||
-rw-r--r-- | doc/ScintillaHistory.html | 1 | ||||
-rw-r--r-- | include/Scintilla.h | 1 | ||||
-rw-r--r-- | include/Scintilla.iface | 1 | ||||
-rw-r--r-- | src/Editor.cxx | 22 | ||||
-rw-r--r-- | src/Editor.h | 2 |
6 files changed, 36 insertions, 5 deletions
diff --git a/doc/ScintillaDoc.html b/doc/ScintillaDoc.html index 02747ee69..153d0cfda 100644 --- a/doc/ScintillaDoc.html +++ b/doc/ScintillaDoc.html @@ -4851,8 +4851,8 @@ sptr_t CallScintilla(unsigned int iMessage, uptr_t wParam, sptr_t lParam){ <code>SciTEBase::Expand()</code> for examples of the use of these messages.</p> <p><b id="SCI_CONTRACTEDFOLDNEXT">SCI_CONTRACTEDFOLDNEXT(int lineStart)</b><br /> - Search efficiently for lines that are contracted fold headers. - This is useful when saving the user's folding when switching documents or saving folding with a file. + Search efficiently for lines that are contracted fold headers. + This is useful when saving the user's folding when switching documents or saving folding with a file. The search starts at line number <code>lineStart</code> and continues forwards to the end of the file. <code>lineStart</code> is returned if it is a contracted fold header otherwise the next contracted fold header is returned. If there are no more contracted fold headers then -1 is returned.</p> @@ -5676,9 +5676,10 @@ struct SCNotification { int position; // SCN_STYLENEEDED, SCN_DOUBLECLICK, SCN_MODIFIED, SCN_DWELLSTART, // SCN_DWELLEND, SCN_CALLTIPCLICK, - // SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK + // SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK, SCN_HOTSPOTRELEASECLICK int ch; // SCN_CHARADDED, SCN_KEY - int modifiers; // SCN_KEY, SCN_DOUBLECLICK, SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK + int modifiers; + // SCN_KEY, SCN_DOUBLECLICK, SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK, SCN_HOTSPOTRELEASECLICK int modificationType; // SCN_MODIFIED const char *text; // SCN_MODIFIED, SCN_USERLISTSELECTION, SCN_AUTOCSELECTION int length; // SCN_MODIFIED @@ -5718,6 +5719,7 @@ struct SCNotification { <a class="message" href="#SCN_ZOOM">SCN_ZOOM</a><br /> <a class="message" href="#SCN_HOTSPOTCLICK">SCN_HOTSPOTCLICK</a><br /> <a class="message" href="#SCN_HOTSPOTDOUBLECLICK">SCN_HOTSPOTDOUBLECLICK</a><br /> + <a class="message" href="#SCN_HOTSPOTRELEASECLICK">SCN_HOTSPOTRELEASECLICK</a><br /> <a class="message" href="#SCN_INDICATORCLICK">SCN_INDICATORCLICK</a><br /> <a class="message" href="#SCN_INDICATORRELEASE">SCN_INDICATORRELEASE</a><br /> <a class="message" href="#SCN_CALLTIPCLICK">SCN_CALLTIPCLICK</a><br /> @@ -6349,12 +6351,14 @@ for line = lineStart to lineEnd do SCI_ENSUREVISIBLE(line) next <p> <b id="SCN_HOTSPOTCLICK">SCN_HOTSPOTCLICK</b><br /> <b id="SCN_HOTSPOTDOUBLECLICK">SCN_HOTSPOTDOUBLECLICK</b><br /> + <b id="SCN_HOTSPOTRELEASECLICK">SCN_HOTSPOTRELEASECLICK</b><br /> These notifications are generated when the user clicks or double clicks on text that is in a style with the hotspot attribute set. This notification can be used to link to variable definitions or web pages. The <code>position</code> field is set the text position of the click or double click and the <code>modifiers</code> field set to the key modifiers - held down in a similar manner to <a class="message" href="#SCN_KEY">SCN_KEY</a>.</p> + held down in a similar manner to <a class="message" href="#SCN_KEY">SCN_KEY</a>. + Only the state of the Ctrl key is reported for <code>SCN_HOTSPOTRELEASECLICK</code>.</p> <p> <b id="SCN_INDICATORCLICK">SCN_INDICATORCLICK</b><br /> diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html index 1b3ec124e..ae6827309 100644 --- a/doc/ScintillaHistory.html +++ b/doc/ScintillaHistory.html @@ -353,6 +353,7 @@ </tr><tr> <td>Neo</td> <td>Jordan Russell</td> + <td>Farshid Lashkari</td> </tr> </table> <p> diff --git a/include/Scintilla.h b/include/Scintilla.h index 54f104437..331216979 100644 --- a/include/Scintilla.h +++ b/include/Scintilla.h @@ -885,6 +885,7 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam, #define SCN_INDICATORRELEASE 2024 #define SCN_AUTOCCANCELLED 2025 #define SCN_AUTOCCHARDELETED 2026 +#define SCN_HOTSPOTRELEASECLICK 2027 /* --Autogenerated -- end of section automatically generated from Scintilla.iface */ /* These structures are defined to be exactly the same shape as the Win32 diff --git a/include/Scintilla.iface b/include/Scintilla.iface index 679bce53b..a8ef722a0 100644 --- a/include/Scintilla.iface +++ b/include/Scintilla.iface @@ -3846,6 +3846,7 @@ evt void IndicatorClick=2023(int modifiers, int position) evt void IndicatorRelease=2024(int modifiers, int position) evt void AutoCCancelled=2025(void) evt void AutoCCharDeleted=2026(void) +evt void HotSpotReleaseClick=2027(int modifiers, int position) cat Deprecated diff --git a/src/Editor.cxx b/src/Editor.cxx index d180e6194..681cb12cd 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -135,6 +135,7 @@ Editor::Editor() { dropWentOutside = false; posDrag = SelectionPosition(invalidPosition); posDrop = SelectionPosition(invalidPosition); + hotSpotClickPos = INVALID_POSITION; selectionType = selChar; lastXChosen = 0; @@ -4198,6 +4199,15 @@ void Editor::NotifyHotSpotClicked(int position, bool shift, bool ctrl, bool alt) NotifyParent(scn); } +void Editor::NotifyHotSpotReleaseClick(int position, bool shift, bool ctrl, bool alt) { + SCNotification scn = {0}; + scn.nmhdr.code = SCN_HOTSPOTRELEASECLICK; + scn.position = position; + scn.modifiers = (shift ? SCI_SHIFT : 0) | (ctrl ? SCI_CTRL : 0) | + (alt ? SCI_ALT : 0); + NotifyParent(scn); +} + void Editor::NotifyUpdateUI() { SCNotification scn = {0}; scn.nmhdr.code = SCN_UPDATEUI; @@ -5939,6 +5949,7 @@ void Editor::ButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, b } else { if (PointIsHotspot(pt)) { NotifyHotSpotClicked(newPos.Position(), shift, ctrl, alt); + hotSpotClickPos = PositionFromLocation(pt,true,false); } if (!shift) { if (PointInSelection(pt) && !SelectionEmpty()) @@ -6118,6 +6129,13 @@ void Editor::ButtonMove(Point pt) { if (hsStart != -1 && !PositionIsHotspot(movePos.Position())) SetHotSpotRange(NULL); + if (hotSpotClickPos != INVALID_POSITION && PositionFromLocation(pt,true,false) != hotSpotClickPos ) { + if (inDragDrop == ddNone) { + DisplayCursor(Window::cursorText); + } + hotSpotClickPos = INVALID_POSITION; + } + } else { if (vs.fixedColumnWidth > 0) { // There is a margin if (PointInSelMargin(pt)) { @@ -6148,6 +6166,10 @@ void Editor::ButtonUp(Point pt, unsigned int curTime, bool ctrl) { inDragDrop = ddNone; SetEmptySelection(newPos.Position()); } + if (hotSpotClickPos != INVALID_POSITION && PointIsHotspot(pt)) { + hotSpotClickPos = INVALID_POSITION; + NotifyHotSpotReleaseClick(newPos.Position(), false, ctrl, false); + } if (HaveMouseCapture()) { if (PointInSelMargin(pt)) { DisplayCursor(Window::cursorReverseArrow); diff --git a/src/Editor.h b/src/Editor.h index 3f36c9088..17683c63a 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -197,6 +197,7 @@ protected: // ScintillaBase subclass needs access to much of Editor bool dropWentOutside; SelectionPosition posDrag; SelectionPosition posDrop; + int hotSpotClickPos; int lastXChosen; int lineAnchor; int originalAnchorPos; @@ -417,6 +418,7 @@ protected: // ScintillaBase subclass needs access to much of Editor virtual void NotifyDoubleClick(Point pt, bool shift, bool ctrl, bool alt); void NotifyHotSpotClicked(int position, bool shift, bool ctrl, bool alt); void NotifyHotSpotDoubleClicked(int position, bool shift, bool ctrl, bool alt); + void NotifyHotSpotReleaseClick(int position, bool shift, bool ctrl, bool alt); void NotifyUpdateUI(); void NotifyPainted(); void NotifyIndicatorClick(bool click, int position, bool shift, bool ctrl, bool alt); |