Jump to content

TreeView and the SpaceBar


Recommended Posts

I have a treeview list with checkboxes and everything is working correctly when I use the mouse to check or uncheck the item. When I use the spacebar to check or uncheck the item, it only affects the item I'm on. I need to be able to disable the spacebar or when the spacebar is pressed, call a function to set the other items checked status.

Questions:

1. Can the spacebar be disabled in a treeview?

2. Can a function be called when the user presses the spacebar in a treeview?

Thanks in advance.

Link to comment
Share on other sites

  • Moderators

zamboni128,

Could you please post some reproducer code - anything we code ourselves is likely to be very different and so not helpful to you. ;)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

  • Moderators

zamboni128,

That was fun! ;)

#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseX64=n
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
;======================================================================================================================================
; Program Name:            MyTreeViewExample
; Description:          This script is a demo of the treeview function.
;
; External Programs:    None
; External Files:        None
; Author:                Robert Helgeson
;
; Asumptions:            None
;
; Revision History:
; Version 1.0:            Initial Release
; 06/15/2012 (RH)
;
;======================================================================================================================================#include <GUITreeView.au3>
#region includes
#include <Misc.au3>
#include <GUITreeView.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEX.au3>
#endregion includes

Global $hDLL = DllOpen("user32.dll")

#region Define and create Treelist
Local $hGUI = GUICreate('TreeView', 300, 700)
Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)
Local $idTreeView = GUICtrlCreateTreeView(0, 0, 300, 700, $iStyle, $WS_EX_CLIENTEDGE)
Global $hTreeView = GUICtrlGetHandle($idTreeView)
_GUICtrlTreeView_BeginUpdate($hTreeView)

; Create the Treeview evtries entry
$idTreeView_Top = GUICtrlCreateTreeViewItem("Top", $idTreeView)
$hTreeView_Top = GUICtrlGetHandle($idTreeView_Top)

Local $idParent1 = GUICtrlCreateTreeViewItem('Parent1', $idTreeView_Top)
Local $hParent1 = GUICtrlGetHandle($idParent1)
$idLevel2 = GUICtrlCreateTreeViewItem('1-1', $idParent1)
For $i = 2 To 5
    GUICtrlCreateTreeViewItem('1-' & $i, $idLevel2)
Next
$idLevel5 = GUICtrlCreateTreeViewItem('1-6', $idLevel2)
GUICtrlCreateTreeViewItem('1-6-1', $idLevel5)
$idLevel3 = GUICtrlCreateTreeViewItem('2-1', $idParent1)
For $i = 2 To 5
    GUICtrlCreateTreeViewItem('2-' & $i, $idLevel3)
Next
$idLevel4 = GUICtrlCreateTreeViewItem('3-1', $idParent1)
For $i = 2 To 5
    GUICtrlCreateTreeViewItem('3-' & $i, $idLevel4)
Next
For $i = 4 To 6
    GUICtrlCreateTreeViewItem($i, $idParent1)
Next

Local $idParent2 = GUICtrlCreateTreeViewItem('Parent2', $idTreeView_Top)
Local $hParent2 = GUICtrlGetHandle($idParent2)
For $i = 1 To 5
    GUICtrlCreateTreeViewItem('2-' & $i, $idParent2)
Next
Local $idParent3 = GUICtrlCreateTreeViewItem('Parent3', $idTreeView_Top)
Local $hParent3 = GUICtrlGetHandle($idParent3)
For $i = 1 To 5
    GUICtrlCreateTreeViewItem('3-' & $i, $idParent3)
Next
Local $idParent4 = GUICtrlCreateTreeViewItem('Parent4', $idTreeView_Top)
Local $hParent4 = GUICtrlGetHandle($idParent4)

; Expand all parents on startup
_GUICtrlTreeView_SetState($hTreeView, $hTreeView_Top, $TVIS_EXPANDED)
_GUICtrlTreeView_SetState($hTreeView, $hParent1, $TVIS_EXPANDED)
_GUICtrlTreeView_SetState($hTreeView, GUICtrlGetHandle($idLevel5), $TVIS_EXPANDED)
_GUICtrlTreeView_SetState($hTreeView, $hParent2, $TVIS_EXPANDED)
_GUICtrlTreeView_SetState($hTreeView, GUICtrlGetHandle($idLevel2), $TVIS_EXPANDED)
_GUICtrlTreeView_SetState($hTreeView, GUICtrlGetHandle($idLevel3), $TVIS_EXPANDED)
_GUICtrlTreeView_SetState($hTreeView, GUICtrlGetHandle($idLevel4), $TVIS_EXPANDED)
_GUICtrlTreeView_SetState($hTreeView, $hParent3, $TVIS_EXPANDED)
_GUICtrlTreeView_SetState($hTreeView, $hParent4, $TVIS_EXPANDED)

_GUICtrlTreeView_EndUpdate($hTreeView)

GUISetState()

#endregion Define and create Treelist
#region Program Control
While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            DllClose($hDLL)
            _GUICtrlTreeView_Destroy($hTreeView)
            GUIDelete()
            Exit
        Case $msg = $GUI_EVENT_PRIMARYDOWN
            _Test_Check()
    EndSelect
    If _IsPressed("20", $hDLL) Then
        _Test_Check()
        While _IsPressed("20", $hDLL)
            Sleep(10)
        WEnd
    EndIf
WEnd
#endregion Program Control

#region Functions
Func _Test_Check()

    $hItem = _GUICtrlTreeView_GetSelection($hTreeView)
    ConsoleWrite(_GUICtrlTreeView_GetSelected($hTreeView, $hItem) & @CRLF)
    Switch _GUICtrlTreeView_GetChecked($hTreeView, $hItem)
        Case True
            ConsoleWrite("Checked" & @CRLF)
            $fChecked = True
        Case False
            ConsoleWrite("Not Checked" & @CRLF)
            $fChecked = False
    EndSwitch
    _TvCheckbox($hItem, $fChecked)
EndFunc

Func _TvCheckbox($hTvItem, $fTvCheck)
    ;-------------- Going up the tree -----------------------------------
    _TvCheckboxParent($hTvItem, $fTvCheck)

    ;-------------- Going down the tree -----------------------------------
    _TvCheckboxChild($hTvItem, $fTvCheck)
EndFunc   ;==>_TvCheckbox

Func _TvCheckboxChild($hTvItem, $fTvCheck)
    Local $hFirst, $hNext
    $hFirst = _GUICtrlTreeView_GetFirstChild($hTreeView, $hTvItem)
    If $hFirst Then
        $hNext = $hFirst
        While $hNext
            _GUICtrlTreeView_SetChecked($hTreeView, $hNext, $fTvCheck)
            If _GUICtrlTreeView_GetFirstChild($hTreeView, $hNext) Then
                _TvCheckboxChild($hNext, $fTvCheck)
            EndIf
            $hNext = _GUICtrlTreeView_GetNextSibling($hTreeView, $hNext)
        WEnd
    EndIf
EndFunc   ;==>_TvCheckboxChild

Func _TvCheckboxParent($hTvItem, $fTvCheck)
    Local $hFirst, $hNext, $bCheckedFlag

    If $fTvCheck Then
        $hTvParent = _GUICtrlTreeView_GetParentHandle($hTreeView, $hTvItem)
        If $hTvParent = 0 Then
            _GUICtrlTreeView_SetChecked($hTreeView, $hTvItem, $fTvCheck)
        Else
            $hFirst = _GUICtrlTreeView_GetParentHandle($hTreeView, $hTvItem)
            If $hFirst Then
                $hNext = $hFirst
                _GUICtrlTreeView_SetChecked($hTreeView, $hNext, $fTvCheck)
                If _GUICtrlTreeView_GetParentHandle($hTreeView, $hNext) Then
                    _TvCheckboxParent($hNext, $fTvCheck)
                EndIf
            EndIf
        EndIf
    Else
        $hTvParent = _GUICtrlTreeView_GetParentHandle($hTreeView, $hTvItem)
        If $hTvParent = 0 Then ; reached the top of the list
            _GUICtrlTreeView_SetChecked($hTreeView, $hTvItem, $fTvCheck)
        Else
            $hNext = $hTvParent
            ; check to see if any siblings are checked
            $hSibling = _GUICtrlTreeView_GetFirstChild($hTreeView, $hNext)
            $bCheckedFlag = True
            While $hSibling > 0
                If _GUICtrlTreeView_GetChecked($hTreeView, $hSibling) Then
                    $bCheckedFlag = False
                    ExitLoop
                EndIf
                $hSibling = _GUICtrlTreeView_GetNextSibling($hTreeView, $hSibling)
            WEnd
            If $bCheckedFlag Then
                _GUICtrlTreeView_SetChecked($hTreeView, $hNext, $fTvCheck)
            EndIf
            If _GUICtrlTreeView_GetParentHandle($hTreeView, $hNext) Then
                _TvCheckboxParent($hNext, $fTvCheck)
            EndIf
        EndIf
    EndIf
EndFunc   ;==>_TvCheckboxParent

#endregion Functions

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...