[bb] Gadget Tabber by Mr Brine [ 1+ years ago ]

Started by BlitzBot, June 29, 2017, 00:28:41

Previous topic - Next topic

BlitzBot

Title : Gadget Tabber
Author : Mr Brine
Posted : 1+ years ago

Description : See the code!  

thanx to Soja for info on getfocus()


Code :
Code (blitzbasic) Select
; (c)oded by Mr Brine
;
; Press tab/shift tab to iterate through the os objects
;
;
; User Libs
; =========
;
; .lib "user32.dll"
;
; GetFocus():"GetFocus"
;


test()


Function Test()

; create some test data

win = CreateWindow("tab test", 100, 100, 300, 300, 0)

tf = CreateTextField(0, 0, 100, 22, win)
ta = CreateTextArea(0, 30, 100, 70, win)
lb = CreateListBox(0, 110, 100, 100, win)
AddGadgetItem lb, "1", True
AddGadgetItem lb, "2"
AddGadgetItem lb, "3"
AddGadgetItem lb, "4"
bt = CreateButton("button", 110,  0, 100, 22, win)
cb = CreateButton("check", 110, 30, 100, 22, win, 2)
rd = CreateButton("radio", 110, 60, 100, 22, win, 3)
tv = CreateTreeView(110, 90, 100, 100, win)

t = AddTreeViewNode("1", TreeViewRoot(tv))
AddTreeViewNode("1-1", t)
AddTreeViewNode("1-2", t)
AddTreeViewNode("1-3", t)

; add gadgets to tab list

tablist = Tab_Add(0, tf)
tablist = Tab_Add(tablist, ta)
tablist = Tab_Add(tablist, lb)
tablist = Tab_Add(tablist, bt)
tablist = Tab_Add(tablist, cb)
tablist = Tab_Add(tablist, rd)
tablist = Tab_Add(tablist, tv)

; set up hot key events to scan for 'tab' & 'shift-tab'
; the event id's for the hotkeys can be any value

HotKeyEvent 15, 0, $8888
HotKeyEvent 15, 1, $8889

Repeat

WaitEvent()

Select EventID()

Case $8888

HotKeyEvent 15, 0, $8888 ; resinitialise hot key events
HotKeyEvent 15, 1, $8889

Tab_Process(tablist, 1) ; goto next os object in tab list

Case $8889

HotKeyEvent 15, 0, $8888 ; resinitialise hot key events
HotKeyEvent 15, 1, $8889

Tab_Process(tablist, -1) ; goto prev os object in tab list

Case $803

Exit

End Select

Forever

FreeBank tablist
FreeGadget win

End Function




; ----------------------------------------------------------------------------------------------------


; tablist = tab list (pass 0 if no tablist yet defined)
; oh = os object to assign to tablist
;
; returns a pointer to tablist
;
Function Tab_Add(tablist, oh)

If(oh <> 0)

If(tablist = 0)

tablist = CreateBank(4)

Else

ResizeBank tablist, BankSize(tablist) + 4


End If

PokeInt tablist, BankSize(tablist) - 4, oh

End If

Return tablist

End Function




; tablist - tablist to work from
; dir - direction tabber to go
;
Function Tab_Process(tablist, dir)

If(tablist = 0) Return
If(BankSize(tablist) = 0) Return

Local lo = 0

While lo < BankSize(tablist)

If(QueryObject(PeekInt(tablist, lo), 1) = GetFocus()) Exit
lo = lo + 4

Wend

If(lo => BankSize(tablist))

lo = 0 ; current focus not in tab list

Else

lo = lo + dir * 4 ; current focus is in tab list

End If

While lo < 0

lo = lo + BankSize(tablist)

Wend  

lo = lo Mod BankSize(tablist)

ActivateGadget PeekInt(tablist, lo)

End Function


Comments :


gman(Posted 1+ years ago)

 works well but i cannot get it to tab past a combobox.  the TAB and SHIFT-TAB events dont seem to generate when performed on this gadget.  has anyone worked around this problem?


Gabriel(Posted 1+ years ago)

 It doesn't work in TextAreas either, because it reads the tab and puts that in the TextArea. Heck, the example itself demonstrates this. It's not the author's fault, of course, it just goes to show that BlitzPlus is so horribly inadequate that even workarounds are mostly pointless and half-working is about as good as you can get.