diff options
Diffstat (limited to 'ipl/gprogs/browser.icn')
-rw-r--r-- | ipl/gprogs/browser.icn | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/ipl/gprogs/browser.icn b/ipl/gprogs/browser.icn new file mode 100644 index 0000000..691f418 --- /dev/null +++ b/ipl/gprogs/browser.icn @@ -0,0 +1,137 @@ +############################################################################ +# +# File: browser.icn +# +# Subject: Program to demonstrate file-navigation "dialog" +# +# Author: Ralph E. Griswold +# +# Date: July 10, 2002 +# +############################################################################ +# +# This file is in the public domain. +# +############################################################################ +# +# Requires: Version 9 graphics +# +############################################################################ +# +# Links: navitrix, vsetup +# +############################################################################ + +link navitrix +link vsetup + +global pat_window +global vidgets + +$define LineLength 75 +$define FileLength 500 + +procedure main() + local root, root_cur + + nav_init() + vidgets := ui() + pat_window := &window + + root := vidgets["root"] + + repeat { + root_cur := case Active() of { + pat_window : root + nav_window : nav_root + } + ProcessEvent(root_cur, , shortcuts) + case nav_state of { + &null : next + "Okay" : process_file() + } + nav_state := &null + } + +end + +procedure process_file() + local input, file_list + static list_vidget + + initial list_vidget := vidgets["list"] + + if nav_file[-1] == "/" then { # directory + chdir(nav_file) + nav_refresh() + } + + else { # "plain" file + input := open(nav_file) | { + Notice("Cannot open " || image(nav_file) || ".") + fail + } + file_list := [] + every put(file_list, left(entab(!input), LineLength)) \ FileLength + VSetItems(list_vidget, file_list) + close(input) + WAttrib(nav_window, "canvas=hidden") + } + + return + +end + +procedure file_cb(vidget, value) + + case value[1] of { + "find @F" : find_file() + "quit @Q" : exit() + } + + return + +end + +procedure list_cb(vidget, value) + + if /value then return # deselection; no action + + return + +end + +procedure find_file() + + WAttrib(nav_window, "canvas=normal") + + return + +end + +procedure shortcuts(e) + + if &meta then case map(e) of { + "f" : find_file() + "q" : exit() + } + + return + +end + +#===<<vib:begin>>=== modify using vib; do not remove this marker line +procedure ui_atts() + return ["size=587,402", "bg=pale gray", "label=Browser"] +end + +procedure ui(win, cbk) +return vsetup(win, cbk, + [":Sizer:::0,0,587,402:Browser",], + ["file:Menu:pull::0,3,36,21:File",file_cb, + ["find @F","quit @Q"]], + ["list:List:r::17,44,557,343:",list_cb], + ["menubar:Line:::0,26,585,26:",], + ) +end +#===<<vib:end>>=== end of section maintained by vib |