package locate class LocateBehaviour( val form : LocateForm ) : TableBehaviour( form.title ), Promptable { val refresh = Action( "Refresh", this:>refresh ) .icon("refresh").shortcut( Key.F5.noMods() ) init { columns = listOf( TableColumn( "Name", 250 ), TableColumn("Folder") ) // form.searchText.listen( this:>refresh ) form.useRegex.listen( this:>refresh ) form.searchNames.listen( this:>refresh ) } override meth toolbar() = listOf( form.searchText, form.useRegex, form.searchNames, refresh ) override meth attached( container : Container ) { super.attached( container ) refresh() } meth refresh() { rows.clear() message( "Collecting data..." ) val baseNameFlag = if (form.searchNames.value) "-b" else "" val regexFlag = if (form.useRegex.value) "--regex" else "" val command = $( plocate $regexFlag $baseNameFlag '${form.searchText.value}' ) command.evalInNewThread("Locate", this:>success, this:>failure ) } meth success( output : String ) { //println( "Success :\n$output") message("") for (line in output.split( "\n" ) ) { val file = File( line ) rows.add( LocateRow( file ) ) } if (rows.isEmpty()) { message( "No items found" ) } } meth failure( message : String ) { message( "Failed : $message" ) } override meth promptForm() = form }