Scintilla #SCI_SETMODEVENTMASK

Just starting out? Need help? Post your questions and find answers here.
User avatar
useful
Enthusiast
Enthusiast
Posts: 403
Joined: Fri Jul 19, 2013 7:36 am

Scintilla #SCI_SETMODEVENTMASK

Post by useful »

I assumed that calling SCI SET MOD EVENT MASK with parameters other than the default SC_MODEVENTMASKALL 0x1FFFFF would reduce the number of messages that I am not interested in. But the result does not change, even if you specify 0 (no events are interesting)

Code: Select all

EnableExplicit

Declare SE(G.i,*SCN.SCNotification)
Declare WS()

#MW  = 0
#MWT = "SciEdit 0.0.1"
#MWF = #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget
#GSC = 0

Global MWL.i = 100
Global MWT.i = 100
Global MWW.i = 800
Global MWH.i = 600

OpenWindow(#MW, MWL, MWT, MWW, MWH, #MWT, #MWF)
ScintillaGadget(#GSC, 0, 0, 0, 0, @SE())

BindEvent(#PB_Event_SizeWindow, @WS()) : WS()
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Debug Hex(ScintillaSendMessage(#GSC,#SCI_GETMODEVENTMASK))
ScintillaSendMessage(#GSC,#SCI_SETMODEVENTMASK, #SC_MOD_INSERTTEXT|#SC_MOD_DELETETEXT)
Debug Hex(ScintillaSendMessage(#GSC,#SCI_GETMODEVENTMASK))
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

Procedure WS()
	ResizeGadget(#GSC, 0, 0, WindowWidth(#MW), WindowHeight(#MW))
EndProcedure

Procedure SE(G.i,*SCN.SCNotification)
	Select *SCN\nmhdr\code
		Case #SCN_STYLENEEDED
			Debug "STYLENEEDED"			
		Case #SCN_CHARADDED
			Debug "CHARADDED"			
		Case #SCN_SAVEPOINTREACHED
			Debug "SAVEPOINTREACHED"			
		Case #SCN_SAVEPOINTLEFT
			Debug "SAVEPOINTLEFT"			
		Case #SCN_MODIFYATTEMPTRO	
			Debug "MODIFYATTEMPTRO"			
		Case #SCN_KEY
			Debug "KEY"			
		Case #SCN_DOUBLECLICK	
			Debug "DOUBLECLICK"			
		Case #SCN_UPDATEUI	
			Debug "UPDATEUI"			
		Case #SCN_MODIFIED	
			Debug "MODIFIED"			
		Case #SCN_MACRORECORD	
			Debug "MACRORECORD"			
		Case #SCN_MARGINCLICK	
			Debug "MARGINCLICK"			
		Case #SCN_NEEDSHOWN		
			Debug "NEEDSHOWN"			
		Case #SCN_PAINTED		
			Debug "PAINTED"			
		Case #SCN_USERLISTSELECTION	
			Debug "USERLISTSELECTION"			
		Case #SCN_URIDROPPED	
			Debug "URIDROPPED"			
		Case #SCN_DWELLSTART	
			Debug "DWELLSTART"			
		Case #SCN_DWELLEND	
			Debug "DWELLEND"			
		Case #SCN_ZOOM		
			Debug "ZOOM"			
		Case #SCN_HOTSPOTCLICK	
			Debug "HOTSPOTCLICK"			
		Case #SCN_HOTSPOTDOUBLECLICK
			Debug "HOTSPOTDOUBLECLICK"			
		Case #SCN_CALLTIPCLICK	
			Debug "CALLTIPCLICK"			
		Case #SCN_AUTOCSELECTION	
			Debug "AUTOCSELECTION"			
		Case #SCN_INDICATORCLICK	
			Debug "INDICATORCLICK"			
		Case #SCN_INDICATORRELEASE	
			Debug "INDICATORRELEASE"			
		Case #SCN_AUTOCCANCELLED
			Debug "AUTOCCANCELLED"			
		Case #SCN_AUTOCCHARDELETED	
			Debug "AUTOCCHARDELETED"			
		Case #SCN_HOTSPOTRELEASECLICK	
			Debug "HOTSPOTRELEASECLICK"			
		Case #SCN_FOCUSIN	
			Debug "FOCUSIN"			
		Case #SCN_FOCUSOUT	
			Debug "FOCUSOUT"			
		Case #SCN_AUTOCCOMPLETED	
			Debug "AUTOCCOMPLETED"			
		Case #SCN_MARGINRIGHTCLICK	
			Debug "MARGINRIGHTCLICK"			
		Case #SCN_AUTOCSELECTIONCHANGE 
			Debug "AUTOCSELECTIONCHANGE"			
		Default
			Debug -111			
	EndSelect
EndProcedure
Dawn will come inevitably.
infratec
Always Here
Always Here
Posts: 7662
Joined: Sun Sep 07, 2008 12:45 pm
Location: Germany

Re: Scintilla #SCI_SETMODEVENTMASK

Post by infratec »

You set SCI_GETMODEVENTMASK
So you can only check:

Code: Select all

Select *scn\modificationType
    ;Case #SC_MOD_NONE : Debug "SC_MOD_NONE"
    Case #SC_MOD_INSERTTEXT : Debug "SC_MOD_INSERTTEXT"
    Case #SC_MOD_DELETETEXT : Debug "SC_MOD_DELETETEXT"
    Case #SC_MOD_CHANGESTYLE : Debug "SC_MOD_CHANGESTYLE"
    Case #SC_MOD_CHANGEFOLD : Debug "SC_MOD_CHANGEFOLD"
    Case #SC_PERFORMED_USER : Debug "SC_PERFORMED_USER"
    Case #SC_PERFORMED_UNDO : Debug "SC_PERFORMED_UNDO"
    Case #SC_PERFORMED_REDO : Debug "SC_PERFORMED_REDO"
    Case #SC_MULTISTEPUNDOREDO : Debug "SC_MULTISTEPUNDOREDO"
    Case #SC_LASTSTEPINUNDOREDO : Debug "SC_LASTSTEPINUNDOREDO"
    Case #SC_MOD_CHANGEMARKER : Debug "SC_MOD_CHANGEMARKER"
    Case #SC_MOD_BEFOREINSERT : Debug "SC_MOD_BEFOREINSERT"
    Case #SC_MOD_BEFOREDELETE : Debug "SC_MOD_BEFOREDELETE"
    Case #SC_MOD_CHANGEINDICATOR : Debug "SC_MOD_CHANGEINDICATOR"
    Case #SC_MOD_CHANGELINESTATE : Debug "SC_MOD_CHANGELINESTATE"
    Case #SC_MOD_CHANGETABSTOPS : Debug "SC_MOD_CHANGETABSTOPS"
    Case #SC_MOD_LEXERSTATE : Debug "SC_MOD_LEXERSTATE"
    Case #SC_MOD_CHANGEMARGIN : Debug "SC_MOD_CHANGEMARGIN"
    Case #SC_MOD_CHANGEANNOTATION : Debug "SC_MOD_CHANGEANNOTATION"
    Case #SC_MOD_INSERTCHECK : Debug "SC_MOD_INSERTCHECK"
    Case #SC_MULTILINEUNDOREDO : Debug "SC_MULTILINEUNDOREDO"
    Case #SC_STARTACTION : Debug "SC_STARTACTION"
    Case #SC_MOD_CONTAINER : Debug "SC_MOD_CONTAINER"
  EndSelect
User avatar
useful
Enthusiast
Enthusiast
Posts: 403
Joined: Fri Jul 19, 2013 7:36 am

Re: Scintilla #SCI_SETMODEVENTMASK

Post by useful »

I assumed that using a mask I could extinguish the generation of STYLENEEDED and PAINTED that I was not interested in, for example

sci_doc:
These messages set and get an event mask that determines which document change events are notified to the container with SCN_MODIFIED and SCEN_CHANGE. For example, a container may decide to see only notifications about changes to text and not styling changes by calling SCI_SETMODEVENTMASK(SC_MOD_INSERTTEXT|SC_MOD_DELETETEXT).

p.s.
I realized my mistake. The mask controls only the granularity of the #SCN_MODIFIED event.

But the question remains: is there a more global event filtering mechanism?
Dawn will come inevitably.
User avatar
skywalk
Addict
Addict
Posts: 4242
Joined: Wed Dec 23, 2009 10:14 pm
Location: Boston, MA

Re: Scintilla #SCI_SETMODEVENTMASK

Post by skywalk »

I am also confused how to quiet down the scintillagadget notifications?
As mentioned:
I need a simple IsModified(#myscintillagadget) function.
And maybe a ClearModified(#myscintillagadget) function.
The nice thing about standards is there are so many to choose from. ~ Andrew Tanenbaum
Post Reply