Page 1 of 1
Cant find RightClick (TabBarGadget + Scintilla)
Posted: Fri Oct 31, 2014 8:32 pm
by rmenezes
Cheers!
I'm still trying to wrap my head around PB. So far, I am very pleased with it.
I seem to have hit a wall here though: In a multi-Scintilla scenario and a TabBarGadget as "switcher", where do I trap the RightClick event? In my app I use this event to start a spellcheck where the caret is. It works fine when I have only one Scintilla instance... Any ideas?
Here is a testbase to illustrate the situation:
Code: Select all
XIncludeFile "TabBarGadget.pbi"
EnableExplicit
#main = 0
#tabs = 999
#sci = 1000
Procedure DoRightClick()
Debug "[RightClick]"
EndProcedure
Procedure UpdateTabs()
Protected i, tabSel, sciNum
tabSel = GetTabBarGadgetItemPosition(#tabs, #TabBarGadgetItem_Selected)
For i=0 To CountTabBarGadgetItems(#tabs)-1
sciNum = #sci+i
If tabSel = i
HideGadget(sciNum, #False)
SetActiveGadget(sciNum)
BindGadgetEvent(sciNum, @DoRightClick(), #PB_Event_RightClick) ; <----- No good.
Else
UnbindGadgetEvent(sciNum, @DoRightClick(), #PB_Event_RightClick) ; <----- Maybe no good.
HideGadget(sciNum, #True)
EndIf
Next
EndProcedure
Procedure CreateNewSci()
Protected tabPos, sciNum, tabName.s
tabName = "New " + Str(CountTabBarGadgetItems(#tabs)+1)
tabPos = AddTabBarGadgetItem(#tabs, #PB_Default, tabName)
sciNum = #sci+tabPos
ScintillaGadget(sciNum, 0, GadgetHeight(#tabs), WindowWidth(#main), WindowHeight(#main)-GadgetHeight(#tabs), 0)
SetActiveGadget(sciNum)
SetTabBarGadgetState(#tabs, tabPos)
EndProcedure
Procedure DoGadgetEvent()
Select EventType()
Case #TabBarGadget_EventType_Change
UpdateTabs()
Case #TabBarGadget_EventType_NewItem
CreateNewSci()
EndSelect
EndProcedure
OpenWindow(#main, 0, 0, 600, 700, "MultiSciTest", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TabBarGadget(#tabs, 0, 0, WindowWidth(#main), #TabBarGadget_DefaultHeight, #TabBarGadget_NoTabMoving | #TabBarGadget_NewTab, #main)
InitScintilla()
CreateNewSci()
BindGadgetEvent(#tabs, @DoGadgetEvent())
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
End
Sorry if this has been answered before (if so, could anybody point me the way?)
Peace.
Ricardo
Re: Cant find RightClick (TabBarGadget + Scintilla)
Posted: Fri Oct 31, 2014 9:15 pm
by netmaestro
Code: Select all
XIncludeFile "TabBarGadget.pbi"
EnableExplicit
#main = 0
#tabs = 999
#sci = 1000
Procedure DoRightClick()
Debug "[RightClick]"
EndProcedure
Procedure UpdateTabs()
Protected i, tabSel, sciNum
tabSel = GetTabBarGadgetItemPosition(#tabs, #TabBarGadgetItem_Selected)
For i=0 To CountTabBarGadgetItems(#tabs)-1
sciNum = #sci+i
If tabSel = i
HideGadget(sciNum, #False)
SetActiveGadget(sciNum)
BindGadgetEvent(sciNum, @DoRightClick(), #PB_Event_RightClick) ; <----- No good.
Else
UnbindGadgetEvent(sciNum, @DoRightClick(), #PB_Event_RightClick) ; <----- Maybe no good.
HideGadget(sciNum, #True)
EndIf
Next
EndProcedure
Procedure DoScintillaEvent() ; new line <=========================================================================
If EventType() = #PB_EventType_RightClick ; new line <=========================================================================
Debug "right click" ; new line <=========================================================================
EndIf ; new line <=========================================================================
EndProcedure
Procedure CreateNewSci()
Protected tabPos, sciNum, tabName.s
tabName = "New " + Str(CountTabBarGadgetItems(#tabs)+1)
tabPos = AddTabBarGadgetItem(#tabs, #PB_Default, tabName)
sciNum = #sci+tabPos
ScintillaGadget(sciNum, 0, GadgetHeight(#tabs), WindowWidth(#main), WindowHeight(#main)-GadgetHeight(#tabs), 0)
BindGadgetEvent(sciNum, @DoScintillaEvent()) ; new line <========================================================================
SetActiveGadget(sciNum)
SetTabBarGadgetState(#tabs, tabPos)
EndProcedure
Procedure DoGadgetEvent()
Select EventType()
Case #TabBarGadget_EventType_Change
UpdateTabs()
Case #TabBarGadget_EventType_NewItem
CreateNewSci()
EndSelect
EndProcedure
OpenWindow(#main, 0, 0, 600, 700, "MultiSciTest", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TabBarGadget(#tabs, 0, 0, WindowWidth(#main), #TabBarGadget_DefaultHeight, #TabBarGadget_NoTabMoving | #TabBarGadget_NewTab, #main)
InitScintilla()
CreateNewSci()
BindGadgetEvent(#tabs, @DoGadgetEvent())
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
End
Re: Cant find RightClick (TabBarGadget + Scintilla)
Posted: Sat Nov 01, 2014 2:12 am
by rmenezes
Wow!
Grazie Maestro, right on the money.
Ricardo
Re: Cant find RightClick (TabBarGadget + Scintilla)
Posted: Sat Nov 01, 2014 4:49 pm
by mestnyi
You have two errors 1 ) Put "#PB_EventType_RightClick" in place "#PB_Event_RightClick"
and 2) there is an event "#TabBarGadget_EventType_Change", so you should call UpdateTabs ()

Re: Cant find RightClick (TabBarGadget + Scintilla)
Posted: Sat Nov 01, 2014 9:16 pm
by rmenezes
@Mestnyi.
But tab events are already being trapped (right before main event loop) :
Code: Select all
Procedure DoGadgetEvent()
Select EventType()
Case #TabBarGadget_EventType_Change
UpdateTabs()
Case #TabBarGadget_EventType_NewItem
CreateNewSci()
EndSelect
EndProcedure
OpenWindow(#main, 0, 0, 600, 700, "MultiSciTest", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TabBarGadget(#tabs, 0, 0, WindowWidth(#main), #TabBarGadget_DefaultHeight, #TabBarGadget_NoTabMoving | #TabBarGadget_NewTab, #main)
InitScintilla()
CreateNewSci()
BindGadgetEvent(#tabs, @DoGadgetEvent()) ; <---------------- trap this gadgets events
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
End
Is that what you meant?
On thing that the sample code doesn't show is an "UnbindGadgetEvent" trap for when the tab/sci editor is closed. It is there in the final version. I didn't put it here to keep the post clean
Thanks for the interest, though.
Ricardo
Re: Cant find RightClick (TabBarGadget + Scintilla)
Posted: Sun Nov 02, 2014 2:59 pm
by mestnyi
No events , that's what I said
Code: Select all
XIncludeFile "TabBarGadget.pbi"
Procedure DoGadgetEvent()
Select EventType()
Case #TabBarGadget_EventType_Change
Debug "NO EVENT"
Case #TabBarGadget_EventType_NewItem
EndSelect
EndProcedure
#main=1
#tabs=2
OpenWindow(#main, 0, 0, 600, 700, "MultiSciTest", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TabBarGadget(#tabs, 0, 0, WindowWidth(#main), #TabBarGadget_DefaultHeight, #TabBarGadget_NoTabMoving | #TabBarGadget_NewTab, #main)
InitScintilla()
BindGadgetEvent(#tabs, @DoGadgetEvent()) ; <---------------- trap this gadgets events
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
End
so works, I can not understand what is
Code: Select all
XIncludeFile "TabBarGadget.pbi"
EnableExplicit
#main = 0
#tabs = 999
#sci = 1000
Procedure DoRightClick()
Debug "[RightClick]"
EndProcedure
Procedure UpdateTabs()
Protected i, tabSel, sciNum
tabSel = GetTabBarGadgetItemPosition(#tabs, #TabBarGadgetItem_Selected)
For i=0 To CountTabBarGadgetItems(#tabs)-1
sciNum = #sci+i
If tabSel = i
HideGadget(sciNum, #False)
SetActiveGadget(sciNum)
BindGadgetEvent(sciNum, @DoRightClick(), #PB_EventType_RightClick) ; <----- No good.
Else
UnbindGadgetEvent(sciNum, @DoRightClick(), #PB_EventType_RightClick) ; <----- Maybe no good.
HideGadget(sciNum, #True)
EndIf
Next
EndProcedure
Procedure CreateNewSci()
Protected tabPos, sciNum, tabName.s
tabName = "New " + Str(CountTabBarGadgetItems(#tabs)+1)
tabPos = AddTabBarGadgetItem(#tabs, #PB_Default, tabName)
sciNum = #sci+tabPos
ScintillaGadget(sciNum, 0, GadgetHeight(#tabs), WindowWidth(#main), WindowHeight(#main)-GadgetHeight(#tabs), 0)
SetActiveGadget(sciNum)
SetTabBarGadgetState(#tabs, tabPos)
EndProcedure
Procedure DoGadgetEvent()
Select EventType()
Case #TabBarGadget_EventType_Change
UpdateTabs()
Case #TabBarGadget_EventType_NewItem
CreateNewSci()
EndSelect
EndProcedure
OpenWindow(#main, 0, 0, 600, 700, "MultiSciTest", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TabBarGadget(#tabs, 0, 0, WindowWidth(#main), #TabBarGadget_DefaultHeight, #TabBarGadget_NoTabMoving | #TabBarGadget_NewTab, #main)
InitScintilla()
CreateNewSci()
UpdateTabs() ;<--------
BindGadgetEvent(#tabs, @DoGadgetEvent())
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
End
Re: Cant find RightClick (TabBarGadget + Scintilla)
Posted: Sun Nov 02, 2014 6:47 pm
by rmenezes
You're right. Maybe because the inner BindGadgetEvent in UpdateTabs? Anyway, I've cleaned up the code and here is a working version of it:
Code: Select all
XIncludeFile "TabBarGadget.pbi"
EnableExplicit
#main = 0
#tabs = 999
#sci = 1000
Procedure UpdateTabs()
Protected i, tabSel, sciNum
tabSel = GetTabBarGadgetItemPosition(#tabs, #TabBarGadgetItem_Selected)
For i=0 To CountTabBarGadgetItems(#tabs)-1
sciNum = #sci+i
If tabSel = i
HideGadget(sciNum, #False)
SetActiveGadget(sciNum)
Else
HideGadget(sciNum, #True)
EndIf
Next
EndProcedure
Procedure DoScintillaEvent()
If EventType() = #PB_EventType_RightClick
Debug "Right click on tab "+Str(GetTabBarGadgetItemPosition(#tabs, #TabBarGadgetItem_Selected)+1)
EndIf
EndProcedure
Procedure CreateNewSci()
Protected tabPos, sciNum, tabName.s
tabName = "New " + Str(CountTabBarGadgetItems(#tabs)+1)
tabPos = AddTabBarGadgetItem(#tabs, #PB_Default, tabName)
sciNum = #sci+tabPos
ScintillaGadget(sciNum, 0, GadgetHeight(#tabs), WindowWidth(#main), WindowHeight(#main)-GadgetHeight(#tabs), 0)
BindGadgetEvent(sciNum, @DoScintillaEvent())
SetActiveGadget(sciNum)
SetTabBarGadgetState(#tabs, tabPos)
EndProcedure
Procedure DoGadgetEvent()
Select EventType()
Case #TabBarGadget_EventType_Change
UpdateTabs()
Case #TabBarGadget_EventType_NewItem
CreateNewSci()
EndSelect
EndProcedure
OpenWindow(#main, 0, 0, 600, 700, "MultiSciTest", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TabBarGadget(#tabs, 0, 0, WindowWidth(#main), #TabBarGadget_DefaultHeight, #TabBarGadget_NoTabMoving | #TabBarGadget_NewTab, #main)
InitScintilla()
CreateNewSci()
BindGadgetEvent(#tabs, @DoGadgetEvent())
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
End
Thanks guys.
Ricardo