From 5cca905e537db066e52d2f0c82c5ebb43a9da5a6 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 12 Jan 2011 07:03:18 +0000 Subject: cleaned up for deployment and got all search results to find their basedir svn path=/trunk/scripts/guiplugins/search-plugin/; revision=14713 --- search-plugin.tcl | 88 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 51 insertions(+), 37 deletions(-) diff --git a/search-plugin.tcl b/search-plugin.tcl index 0f09d53..65872b4 100644 --- a/search-plugin.tcl +++ b/search-plugin.tcl @@ -7,6 +7,8 @@ package require pd_menucommands namespace eval ::dialog_search:: { variable selected_file {} + variable selected_basedir {} + variable basedir_list {} } # TODO it works funny when libdirs are symlinks @@ -42,50 +44,62 @@ proc ::dialog_search::find_doc_files { basedir } { proc ::dialog_search::selectline {listingwidget} { variable selected_file + variable selected_basedir + variable basedir_list set selection [$listingwidget curselection] if {$selection eq ""} { set selected_file "" } else { set line [$listingwidget get $selection] set selected_file [string replace $line [string first ":" $line] end] + set selected_basedir [lindex $basedir_list $selection] } } -proc ::dialog_search::readfile {file varName} { - upvar \#0 $varName data - set fp [open $file] - set data [split [read $fp] \n] +proc ::dialog_search::open_line {} { + variable selected_file + variable selected_basedir + if {$selected_file ne ""} { + menu_doc_open $selected_basedir $selected_file + } +} + +proc ::dialog_search::readfile {filename} { + set fp [open $filename] + set file_contents [split [read $fp] \n] close $fp + return $file_contents } proc ::dialog_search::search {searchtext} { + variable basedir_list {} set widget .search.resultslistbox $widget delete 0 end - foreach dir [concat [file join $::sys_libdir doc] $::sys_searchpath $::sys_staticpath] { + foreach basedir [concat [file join $::sys_libdir doc] $::sys_searchpath $::sys_staticpath] { # Fix the directory name, this ensures the directory name is in the # native format for the platform and contains a final directory seperator - set dir [file normalize $dir] - foreach docfile [find_doc_files $dir] { - readfile $docfile data - searchfile $searchtext $widget \ - [string replace $docfile 0 [string length $dir]] + set basedir [file normalize $basedir] + foreach docfile [find_doc_files $basedir] { + searchfile $searchtext [readfile $docfile] $widget \ + [string replace $docfile 0 [string length $basedir]] $basedir } } } -proc ::dialog_search::searchfile {searchtext widget filename} { - global data +proc ::dialog_search::searchfile {searchtext file_contents widget filename basedir} { + variable basedir_list set n 0 - foreach line $data { + foreach line $file_contents { if {[regexp -nocase -- $searchtext $line]} { $widget insert end "$filename: $line" + lappend basedir_list $basedir incr n } } } proc ::dialog_search::ok {mytoplevel} { - pdtk_post "::dialog_search::ok\n" + # this is a placeholder for the standard dialog bindings } proc ::dialog_search::cancel {mytoplevel} { @@ -93,42 +107,42 @@ proc ::dialog_search::cancel {mytoplevel} { } proc ::dialog_search::open_search_dialog {mytoplevel} { - if {[winfo exists .search]} { - wm deiconify .search - raise .search + if {[winfo exists $mytoplevel]} { + wm deiconify $mytoplevel + raise $mytoplevel } else { - create_dialog + create_dialog $mytoplevel } } -proc ::dialog_search::create_dialog {} { +proc ::dialog_search::create_dialog {mytoplevel} { variable selected_file - toplevel .search - wm title .search [_ "Search"] - entry .search.searchtextentry -bg white -textvar searchtext - bind .search.searchtextentry {::dialog_search::search $searchtext} + toplevel $mytoplevel + wm title $mytoplevel [_ "Search"] + entry $mytoplevel.searchtextentry -bg white -textvar searchtext \ + -highlightcolor blue -font 18 -borderwidth 3 + bind $mytoplevel.searchtextentry {::dialog_search::search $searchtext} # TODO add history like in the find box - bind .search.searchtextentry {set searchtext ""} - listbox .search.resultslistbox -yscrollcommand ".search.yscrollbar set" \ + bind $mytoplevel.searchtextentry {set searchtext ""} + listbox $mytoplevel.resultslistbox -yscrollcommand "$mytoplevel.yscrollbar set" \ -bg white -highlightcolor blue -height 30 -width 80 - scrollbar .search.yscrollbar -command ".search.resultslistbox yview" \ + scrollbar $mytoplevel.yscrollbar -command "$mytoplevel.resultslistbox yview" \ -takefocus 0 - bind .search.resultslistbox <> \ - "::dialog_search::selectline .search.resultslistbox" - bind .search.resultslistbox \ - {menu_doc_open $::sys_libdir $::dialog_search::selected_file} - bind .search.resultslistbox \ - {menu_doc_open $::sys_libdir $::dialog_search::selected_file} - ::pd_bindings::dialog_bindings .search "search" - - grid .search.searchtextentry - -sticky ew - grid .search.resultslistbox .search.yscrollbar -sticky news + bind $mytoplevel.resultslistbox <> \ + "::dialog_search::selectline $mytoplevel.resultslistbox" + bind $mytoplevel.resultslistbox ::dialog_search::open_line + bind $mytoplevel.resultslistbox ::dialog_search::open_line + ::pd_bindings::dialog_bindings $mytoplevel "search" + + grid $mytoplevel.searchtextentry - -sticky ew + grid $mytoplevel.resultslistbox $mytoplevel.yscrollbar -sticky news grid columnconfig . 0 -weight 1 grid rowconfig . 1 -weight 1 - focus .search.searchtextentry + focus $mytoplevel.searchtextentry } +# create the menu item on load set mymenu .menubar.help set inserthere [$mymenu index [_ "Report a bug"]] $mymenu insert $inserthere separator -- cgit v1.2.1