From 282671282b20fa17ab9dbbaba9d1cf2246b5029d Mon Sep 17 00:00:00 2001
From: Miller Puckette <millerpuckette@users.sourceforge.net>
Date: Mon, 17 Aug 2009 23:31:36 +0000
Subject: merge in new tcl implementation by Steiner & Chun

svn path=/trunk/; revision=11934
---
 pd/tcl/dialog_find.tcl | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 94 insertions(+)
 create mode 100644 pd/tcl/dialog_find.tcl

(limited to 'pd/tcl/dialog_find.tcl')

diff --git a/pd/tcl/dialog_find.tcl b/pd/tcl/dialog_find.tcl
new file mode 100644
index 00000000..92d58347
--- /dev/null
+++ b/pd/tcl/dialog_find.tcl
@@ -0,0 +1,94 @@
+
+package provide dialog_find 0.1
+
+package require pd_bindings
+
+namespace eval ::dialog_find:: {
+    namespace export menu_dialog_find
+}
+
+# TODO figure out findagain
+# TODO make targetlabel into a popup menu
+# TODO make panel go away after a find
+
+proc find_ok {mytoplevel} {::dialog_find::ok $mytoplevel} ;# TODO temp kludge
+proc ::dialog_find::ok {mytoplevel} {
+    # find will be on top, so use the previous window that was on top
+    set search_window [lindex [wm stackorder .] end-1]
+    if {$search_window eq "."} {
+        puts "search pd window not implemented yet"
+    } else {
+        puts "search_window $search_window"
+        set find_string [.find.entry get]
+        if {$find_string ne ""} {
+            pdsend "$search_window find $find_string"
+        }
+    }
+}
+
+proc find_cancel {mytoplevel} {::dialog_find::cancel $mytoplevel} ;# TODO temp kludge
+proc ::dialog_find::cancel {mytoplevel} {
+    wm withdraw .find
+}
+
+proc ::dialog_find::set_canvas_to_search {mytoplevel} {
+    if {[winfo exists .find.frame.targetlabel]} {
+        set focusedtoplevel [winfo toplevel [lindex [wm stackorder .] end]]
+        if {$focusedtoplevel eq ".find"} {
+            set focusedtoplevel [winfo toplevel [lindex [wm stackorder .] end-1]]
+        }
+        # TODO this text should be based on $::menu_windowlist
+        if {$focusedtoplevel eq "."} {  
+            .find.frame.targetlabel configure -text [wm title .]
+        } else {
+            foreach window $::menu_windowlist {
+                if {[lindex $window 1] eq $focusedtoplevel} {
+                    .find.frame.targetlabel configure -text [lindex $window 0]
+                }
+            }
+        }
+    }
+}
+
+# the find panel is opened from the menu and key bindings
+proc ::dialog_find::menu_dialog_find {mytoplevel} {
+    if {[winfo exists .find]} {
+        wm deiconify .find
+        raise .find
+    } else {
+        create_panel $mytoplevel
+    }
+}
+
+proc ::dialog_find::create_panel {mytoplevel} {
+    toplevel .find
+    wm title .find [_ "Find"]
+    wm geometry .find =475x125+150+150
+    wm resizable .find 0 0
+    if {[catch {wm attributes .find -topmost}]} {puts stderr ".find -topmost failed"}
+    .find configure
+    ::pd_bindings::panel_bindings .find "find"
+    
+    frame .find.frame
+    pack .find.frame -side top -fill x -pady 7
+    label .find.frame.searchin -text [_ "Search in"]
+    label .find.frame.targetlabel -font "TkTextFont 14" 
+    label .find.frame.for -text [_ "for:"]
+    pack .find.frame.searchin .find.frame.targetlabel .find.frame.for -side left
+    entry .find.entry -width 54 -font 18 -relief sunken \
+        -highlightthickness 3 -highlightcolor blue
+    focus .find.entry
+    pack .find.entry -side top -padx 10
+    
+    frame .find.buttonframe -background yellow
+    button .find.button -text [_ "Find"] -default active -width 9 \
+        -command "::dialog_find::ok $mytoplevel"
+    if {$::windowingsystem eq "x11"} {
+        button .find.close -text [_ "Close"] -default normal -width 9 \
+            -command "::dialog_find::cancel $mytoplevel"
+        pack .find.buttonframe .find.button .find.close -side right -padx 10 -pady 15
+    } else {
+        pack .find.buttonframe .find.button -side right -padx 10 -pady 15
+    }
+    ::dialog_find::set_canvas_to_search $mytoplevel
+}
-- 
cgit v1.2.1