Figure 17.9.2.1: TreeView with item selected.
At appropriate points in the following sections, parts of the source code of the 'Image Viewer' project are given to demonstrate the use of the TreeeView class and briefly commented on:
When starting the programme for the first time, you can use the menu item 'File > Select Base Directory' in a dialogue to select a directory in which images are also stored.This base directory from the system directory structure is mapped with all its sub-directories to a TreeView. Note the recursion in the procedure:
Private Sub DirTree2TreeView(BaseDir As String) Dim sDir, sBaseDir, sPattern As String Dim iFilter As Integer sBaseDir = BaseDir sPattern = "*" iFilter = gb.Directory If Exist(sBaseDir) Then For Each sDir In Dir(sBaseDir, sPattern, iFilter).Sort(gb.Descent) TreeView1.Add(sBaseDir &/ sDir, sDir, Picture["icon:/16/directory"], sBaseDir, Null) DirTree2TreeView(sBaseDir &/ sDir) ' recursive loop Next ' Directory Endif ' Exist() ? End
When selecting a directory in the TreeView with a mouse click, a list (array) of all image files in the selected directory is generated:
Public Sub TreeView1_Select() ' Bild-Liste für das ausgewählte Verzeichnis in der TreeView erzeugen GetImagePaths(TreeView1.Current.Key) If aImagePaths.Count > 0 Then SetEnabled() iPictureIndex = 0 PictureBoxD.Picture = Picture.Load(aImagePaths[0]) ' Anzeige des 1. Bildes in der Bild-Liste ' Einschalten der Bild-Navigation, wenn die Bild-Liste mehr als ein Bild enthält If aImagePaths.Count > 1 Then btnNext.Enabled = True Else btnNext.Enabled = False Endif Endif End
A pattern filter (sPattern) ensures that only image files (iFilter = gb.File) with specified extensions (→ JPG, JPEG, jpeg, jpg, png, gif, .svg) are included in the image list. The list contains the (absolute) image file paths.
Private Sub GetImagePaths(sDir As String) Dim sFile, sPattern As String Dim iFilter As Integer sPattern = "*{.JPG,.png,.JEPG,.jpeg,.jpg,.gif,.svg}" iFilter = gb.File aImagePaths = New String[] ' Neue Bild-Liste If Exist(sDir) Then For Each sFile In Dir(sDir, sPattern, iFilter).Sort(gb.Ascent) aImagePaths.Add(sDir &/ sFile) Next ' File Endif ' Exist() ? End
The first picture in the list is immediately displayed in a picture box. Then you can navigate through the picture list with the two navigation buttons. If the picture list is empty, a default picture is displayed.You can completely expand and collapse the TreeView entries by using the two buttons below the TreeView.
If the number of items in the TreeView is at least one, the internal pointer of the TreeView is set to the first item (lines 1 and 2). Then, in a repeat-until control structure in lines 4 to 6, each parent item is expanded until the internal cursor reaches the bottom TreeView end. However, this causes the function value of the TreeView method trvTreeView.MoveBelow() to become positive (!) and thus the loop to be aborted. Analogous considerations also apply to collapsing:
[1] Private Sub ExpandAll(trvTreeView As TreeView) [2] If trvTreeView <> Null And trvTreeView.Count > 0 Then [3] trvTreeView.MoveFirst() [4] Repeat [5] trvTreeView.Item.Expanded = True ' → ausklappen [6] Until trvTreeView.MoveBelow() [7] Endif [8] End
[1] Private Sub ContractAll(trvTreeView As TreeView) [2] If trvTreeView <> Null And trvTreeView.Count > 0 Then [3] trvTreeView.MoveFirst() [4] Repeat [5] trvTreeView.Item.Expanded = False ' → einklappen [6] Until trvTreeView.MoveBelow() [7] Endif [8] End
Collapsing and expanding the items in the TreeView is only intended to demonstrate selected methods of the TreeView in the project.
If the programme is terminated, then the current directory is entered as the start directory in the settings file dir.conf. Example:
# Start-Directory [Base] BasePath="/home/hans/11-Buchprojekt/K17_KomF2/17.9_TreeView/URLAUB"
The default language for the project is English. There is a German language file for the project.
In the project → Chapter 24.3.4 Manager for email accounts you will find another example for the use of a TreeView as navigation in a tree structure.
Note:The project only serves to demonstrate the use of the TreeView class. Therefore, the 'Picture Viewer' programme is still missing some details such as thumbnails or automatic recognition of the picture format that you would have expected for a picture viewer.