diff options
| -rw-r--r-- | doc/ScintillaDoc.html | 27 | ||||
| -rw-r--r-- | include/Scintilla.h | 2 | ||||
| -rw-r--r-- | include/Scintilla.iface | 6 | ||||
| -rw-r--r-- | src/Editor.cxx | 11 | ||||
| -rw-r--r-- | src/Editor.h | 1 | ||||
| -rw-r--r-- | win32/ScintillaWin.cxx | 45 | 
6 files changed, 67 insertions, 25 deletions
| diff --git a/doc/ScintillaDoc.html b/doc/ScintillaDoc.html index 8ed6dd9d1..8446cf895 100644 --- a/doc/ScintillaDoc.html +++ b/doc/ScintillaDoc.html @@ -79,7 +79,7 @@      <h1>Scintilla Documentation</h1> -    <p>Last edited 21/May/2011 NH</p> +    <p>Last edited 13/June/2011 NH</p>      <p>There is <a class="jump" href="Design.html">an overview of the internal design of      Scintilla</a>.<br /> @@ -5831,11 +5831,12 @@ struct SCNotification {      </code>      <p>The following <code>SCI_*</code> messages are associated with these notifications:</p> -    <code><a class="message" href="#SCI_SETMODEVENTMASK">SCI_SETMODEVENTMASK(int -    eventMask)</a><br /> +    <code><a class="message" href="#SCI_SETMODEVENTMASK">SCI_SETMODEVENTMASK(int eventMask)</a><br />       <a class="message" href="#SCI_GETMODEVENTMASK">SCI_GETMODEVENTMASK</a><br /> -     <a class="message" href="#SCI_SETMOUSEDWELLTIME">SCI_SETMOUSEDWELLTIME</a><br /> +     <a class="message" href="#SCI_SETMOUSEDWELLTIME">SCI_SETMOUSEDWELLTIME(int milliseconds)</a><br />       <a class="message" href="#SCI_GETMOUSEDWELLTIME">SCI_GETMOUSEDWELLTIME</a><br /> +     <a class="message" href="#SCI_SETIDENTIFIER">SCI_SETIDENTIFIER(int identifier)</a><br /> +     <a class="message" href="#SCI_GETIDENTIFIER">SCI_GETIDENTIFIER</a><br />      </code>      <p>The following additional notifications are sent using the <code>WM_COMMAND</code> message on @@ -5846,6 +5847,17 @@ struct SCNotification {       <a class="message" href="#SCEN_KILLFOCUS">SCEN_KILLFOCUS</a><br />      </code> +    <p><b id="SCI_SETIDENTIFIER">SCI_SETIDENTIFIER(int identifier)</b><br /> +     <b id="SCI_GETIDENTIFIER">SCI_GETIDENTIFIER</b><br /> +     These two messages set and get the identifier of the Scintilla instance which is included in notifications as the  +     <code>ídFrom</code> field.  +     When an application creates multiple Scintilla widgets, this allows the source of each notification to be found. +     On Windows, this value is initialised in the <code>CreateWindow</code> call and stored as the  +     <code>GWLP_ID</code> attribute of the window.  +     The value should be small, preferrably less than 16 bits, +     rather than a pointer as some of the functions will only transmit 16 or 32 bits. +    </p> +      <p><b id="SCN_STYLENEEDED">SCN_STYLENEEDED</b><br />       If you used <code><a class="message"      href="#SCI_SETLEXER">SCI_SETLEXER</a>(SCLEX_CONTAINER)</code> to make the container act as the @@ -6489,7 +6501,7 @@ for line = lineStart to lineEnd do SCI_ENSUREVISIBLE(line) next      </table>      <br /> -    <p><b id="SCI_SETMOUSEDWELLTIME">SCI_SETMOUSEDWELLTIME</b><br /> +    <p><b id="SCI_SETMOUSEDWELLTIME">SCI_SETMOUSEDWELLTIME(int milliseconds)</b><br />       <b id="SCI_GETMOUSEDWELLTIME">SCI_GETMOUSEDWELLTIME</b><br />       These two messages set and get the time the mouse must sit still, in milliseconds, to generate      a <code><a class="message" href="#SCN_DWELLSTART">SCN_DWELLSTART</a></code> notification. If @@ -6582,9 +6594,8 @@ for line = lineStart to lineEnd do SCI_ENSUREVISIBLE(line) next      <p><b id="scintilla_set_id">void scintilla_set_id(ScintillaObject *sci, uptr_t id)</b><br />      Set the control ID which will be used in the idFrom field of the NotifyHeader structure of all -    notifications for this instance. When an application creates multiple Scintilla widgets, this allows -    the source of each notification to be found. The value should be small, preferrably less than 16 bits, -    rather than a pointer as some of the functions will only transmit 16 or 32 bits.</p> +    notifications for this instance. +    This is equivalent to <a class="message" href="#SCI_SETIDENTIFIER">SCI_SETIDENTIFIER</a>.</p>      <p><b id="scintilla_send_message">sptr_t scintilla_send_message(ScintillaObject *sci,unsigned int iMessage, uptr_t wParam, sptr_t lParam)</b><br />      The main entry point allows sending any of the messages described in this document.</p> diff --git a/include/Scintilla.h b/include/Scintilla.h index 8819b1b0c..d1f3c9dd2 100644 --- a/include/Scintilla.h +++ b/include/Scintilla.h @@ -807,6 +807,8 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,  #define SCI_VERTICALCENTRECARET 2619  #define SCI_MOVESELECTEDLINESUP 2620  #define SCI_MOVESELECTEDLINESDOWN 2621 +#define SCI_SETIDENTIFIER 2622 +#define SCI_GETIDENTIFIER 2623  #define SCI_STARTRECORD 3001  #define SCI_STOPRECORD 3002  #define SCI_SETLEXER 4001 diff --git a/include/Scintilla.iface b/include/Scintilla.iface index 773e29427..6bfac5d98 100644 --- a/include/Scintilla.iface +++ b/include/Scintilla.iface @@ -2143,6 +2143,12 @@ fun void MoveSelectedLinesUp=2620(,)  # Move the selected lines down one line, shifting the line below before the selection  fun void MoveSelectedLinesDown=2621(,) +# Set the identifier reported as idFrom in notification messages. +set void SetIdentifier=2622(int identifier,) + +# Get the identifier. +get int GetIdentifier=2623(,) +  # Start notifying the container of all key presses and commands.  fun void StartRecord=3001(,) diff --git a/src/Editor.cxx b/src/Editor.cxx index 160f94d7c..3f6e533b6 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -4303,6 +4303,10 @@ void Editor::DelCharBack(bool allowLineStartDeletion) {  void Editor::NotifyFocus(bool) {} +void Editor::SetCtrlID(int identifier) { +	ctrlID = identifier;  +} +  void Editor::NotifyStyleToNeeded(int endStyleNeeded) {  	SCNotification scn = {0};  	scn.nmhdr.code = SCN_STYLENEEDED; @@ -9119,6 +9123,13 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {  	case SCI_CHANGELEXERSTATE:  		pdoc->ChangeLexerState(wParam, lParam);  		break; +	 +	case SCI_SETIDENTIFIER: +		SetCtrlID(wParam); +		break; +	 +	case SCI_GETIDENTIFIER: +		return GetCtrlID();  	default:  		return DefWndProc(iMessage, wParam, lParam); diff --git a/src/Editor.h b/src/Editor.h index 48f4d1ccd..eccdb717f 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -422,6 +422,7 @@ protected:	// ScintillaBase subclass needs access to much of Editor  	virtual void NotifyChange() = 0;  	virtual void NotifyFocus(bool focus); +	virtual void SetCtrlID(int identifier);  	virtual int GetCtrlID() { return ctrlID; }  	virtual void NotifyParent(SCNotification scn) = 0;  	virtual void NotifyStyleToNeeded(int endStyleNeeded); diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index d4d3b24da..8092edcd8 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -102,6 +102,29 @@ const TCHAR callClassName[] = TEXT("CallTip");  using namespace Scintilla;  #endif +// Take care of 32/64 bit pointers +#ifdef GetWindowLongPtr +static void *PointerFromWindow(HWND hWnd) { +	return reinterpret_cast<void *>(::GetWindowLongPtr(hWnd, 0)); +} +static void SetWindowPointer(HWND hWnd, void *ptr) { +	::SetWindowLongPtr(hWnd, 0, reinterpret_cast<LONG_PTR>(ptr)); +} +static void SetWindowID(HWND hWnd, int identifier) { +	::SetWindowLongPtr(hWnd, GWLP_ID, identifier); +} +#else +static void *PointerFromWindow(HWND hWnd) { +	return reinterpret_cast<void *>(::GetWindowLong(hWnd, 0)); +} +static void SetWindowPointer(HWND hWnd, void *ptr) { +	::SetWindowLong(hWnd, 0, reinterpret_cast<LONG>(ptr)); +} +static void SetWindowID(HWND hWnd, int identifier) { +	::SetWindowLong(hWnd, GWL_ID, identifier); +} +#endif +  class ScintillaWin; 	// Forward declaration for COM interface subobjects  typedef void VFunction(void); @@ -211,6 +234,7 @@ class ScintillaWin :  	virtual bool ModifyScrollBars(int nMax, int nPage);  	virtual void NotifyChange();  	virtual void NotifyFocus(bool focus); +	virtual void SetCtrlID(int identifier);  	virtual int GetCtrlID();  	virtual void NotifyParent(SCNotification scn);  	virtual void NotifyDoubleClick(Point pt, bool shift, bool ctrl, bool alt); @@ -1278,6 +1302,10 @@ void ScintillaWin::NotifyFocus(bool focus) {  		reinterpret_cast<LPARAM>(MainHWND()));  } +void ScintillaWin::SetCtrlID(int identifier) { +	::SetWindowID(reinterpret_cast<HWND>(wMain.GetID()), identifier); +} +  int ScintillaWin::GetCtrlID() {  	return ::GetDlgCtrlID(reinterpret_cast<HWND>(wMain.GetID()));  } @@ -2628,23 +2656,6 @@ BOOL ScintillaWin::DestroySystemCaret() {  	return retval;  } -// Take care of 32/64 bit pointers -#ifdef GetWindowLongPtr -static void *PointerFromWindow(HWND hWnd) { -	return reinterpret_cast<void *>(::GetWindowLongPtr(hWnd, 0)); -} -static void SetWindowPointer(HWND hWnd, void *ptr) { -	::SetWindowLongPtr(hWnd, 0, reinterpret_cast<LONG_PTR>(ptr)); -} -#else -static void *PointerFromWindow(HWND hWnd) { -	return reinterpret_cast<void *>(::GetWindowLong(hWnd, 0)); -} -static void SetWindowPointer(HWND hWnd, void *ptr) { -	::SetWindowLong(hWnd, 0, reinterpret_cast<LONG>(ptr)); -} -#endif -  sptr_t PASCAL ScintillaWin::CTWndProc(      HWND hWnd, UINT iMessage, WPARAM wParam, sptr_t lParam) {  	// Find C++ object associated with window. | 
