############################################################################ # # 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 #===<>=== 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 #===<>=== end of section maintained by vib