REBOL [ Title: "Demo 7 - List view with advanced filtering" Short: "Advanced Filtering" Author: ["Henrik Mikael Kristensen"] Copyright: "2006 - HMK Design" Filename: %demo07.r Version: 0.0.1 Created: 24-Mar-2006 Date: 24-Mar-2006 License: { BSD (www.opensource.org/licenses/bsd-license.php) Use at your own risk. } Purpose: { List view with advanced filtering } History: [] Keywords: [data filtering] ] do http://www.hmkdesign.dk/rebol/list-view/list-view.r view/new layout [ text bold {List view with advanced filtering} across space 2 lbl 75 "Global" right ; ---------- Global filter f-global-search: field 150 [lv/set-filter-spec 'global value []] button "Clear" 50 gray edge [size: 1x1] [ clear-face f-global-search do-face f-global-search none ] return lbl 75 "First Name" right ; ---------- Filter only on first name. f-name-search: field 150 [do-face c-name-search none] button "Clear" gray 50 edge [size: 1x1] [ clear-face f-name-search do-face c-name-search none ] lbl "Full Word" ; ---------- The /only refinement determines the use of the search string ; as a substring or as a full word c-name-search: check [ either value [ lv/set-filter-spec/only 'firstname get-face f-name-search [firstname] ][ lv/set-filter-spec 'firstname get-face f-name-search [firstname] ] ] return lbl 75 "Gender" right ; ---------- Filter only on gender. Note the /only refinement. t-male: tog 49 "Male" [lv/set-filter-spec/only 'gender 'male [gender]] of 'gender t-female: tog 48 "Female" [lv/set-filter-spec/only 'gender 'female [gender]] of 'gender t-both: tog 49 "Both" true [lv/remove-filter-spec 'gender] of 'gender return lbl 75 "Occupation" right ; ---------- Filter only on occupation. Note the /not refinement d-occupation: drop-down [do-face c-occupation none] lbl "Leave out" c-occupation: check [ either value [ lv/set-filter-spec/not 'occupation get-face d-occupation [occupation] ][ lv/set-filter-spec 'occupation get-face d-occupation [occupation] ] ] return btn 100 "Reset" [ lv/reset-filter-specs set-face t-male none set-face t-female none set-face t-both true ] return ; ---------- Lots of different data in our list view lv: list-view 500x200 with [ data-columns: [Firstname Lastname Age Color Height Gender Occupation] data: [ ["James" "Kirk" 36 red 175 male "Captain"] ["Jim" "Belushi" 25 blue 182 male "Actor"] ["Jill" "McGill" 17 blue 171 female "Unknown"] ["Jane" "Doe" 35 green 167 female "Unknown"] ["Joe" "DiMaggio" 46 red 167 male "Player"] ["John" "Rambo" 42 blue 177 male "Soldier"] ["Jamie" "Oliver" 21 yellow 177 male "Cook"] ["Judy" "Dench" 21 yellow 159 female "Actress"] ["Jack" "Nicholson" 41 blue 171 male "Actor"] ["Jack" "Lemmon" 55 red 169 male "Actor"] ["Jack" "Bauer" 34 red 178 male "Agent"] ["Henry" "Ford" 56 yellow 183 male "Boss"] ["Audrey" "Hepburn" 23 blue 168 female "Actress"] ["Ford" "Fairlane" 33 green 186 male "Detective"] ["Walther" "Matthau" 67 green 191 male "Actor"] ] ] ] ; ---------- Using GET-UNIQUE to get all different kinds of occupations. ; This way the occupation list is dynamically generated. d-occupation/list-data: lv/get-unique 'occupation show d-occupation do-events