package foldertree open class FolderTreeBehaviour( val form : FolderTreeForm ) : TreeBehaviour( form.folder.value.name, Context( Context.FOLDER, form.folder.value ) ), Promptable { constructor( folder : File ) : this( FolderTreeForm().folder(folder) ) init { description = form.folder.value.path iconName = "tree" form.showHiddenFolders.listen( this:>refreshRoot ) form.showHiddenFiles.listen( this:>refreshRoot ) form.noFiles.listen( this:>refreshRoot ) form.folder.listen( this:>refreshRoot ) } // ==== Features ==== val refresh = Action( "Refresh", this:>refresh ) .shortcut( Key.F5.noMods() ).icon( "refresh" ) override meth toolbar() = listOf ( form.showHiddenFiles, form.showHiddenFolders, form.noFiles, spacer, refresh ) override meth promptForm() = form // Function Callbacks // Refresh override meth attached( container : Container ) { super.attached( container ) refresh() } meth refreshRoot() { (root as FolderTreeItem).refreshRecursively() } meth refresh() { // Used to re-select the correct item after re-attaching/refreshing. //val oldSelectedRow = selectedRow as? ListFolderRow //val oldSelectedFile = if (oldSelectedRow == null) null else oldSelectedRow.file if ( form.validate() != null ) return root = FolderTreeItem( form.folder.value, form ) root.expanded = true focus() } }