Page 1 of 1

Scintilla #SCI_SETMODEVENTMASK

Posted: Sun May 12, 2024 9:55 am
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

Re: Scintilla #SCI_SETMODEVENTMASK

Posted: Sun May 12, 2024 10:16 am
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

Re: Scintilla #SCI_SETMODEVENTMASK

Posted: Sun May 12, 2024 10:25 am
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?

Re: Scintilla #SCI_SETMODEVENTMASK

Posted: Wed Aug 21, 2024 5:28 pm
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.