




The argument for the callbacks. If it is nil the top-level-interface of the layout is used.
A function of one argument (the callback-object ). It is called whenever the text in the filter changes. Also if callback is not supplied, change-callback is called instead.
A function of one argument (the 
callback-object
). It is called when the user presses Return, makes a selection from the menu, or clicks the 
Confirm
 button. If 
callback
 is not supplied, 
change-callback
 is called instead.
Additional 
gesture-callbacks
 to the text-input-pane inside the filtering-layout.
A string specifying the initial text of the filter, or nil.
The main part of a filtering layout is a text-input-pane which allows the user to enter a string, which is intended to be used for filtering. The user can control how it is used by a menu (or special keystroke) that allows her to specify whether:
Control+R).Control+E).Control+C).The filtering layout defines the parameters to use, and calls the callbacks to perform the filtering. It does not do any filtering itself.
To actually do the filtering, the using code needs to call filtering-layout-match-object-and-exclude-p, which returns as multiple values a precompiled regexp and a flag specifying whether to exclude matches. The regexp should be used to perform the filtering, typically by using lispworks:find-regexp-in-string. Note that filtering-layout-match-object-and-exclude-p returns nil when there is no string in the text-input-pane, and that even when the filter is set to plain match it returns a regexp (which matches a plain string).
You supply a filtering-layout amongst the 
panes
 of your interface definition (not its 
layouts
). The description of a filtering-layout is set by the initialize-instance method of the class, and therefore the description cannot be passed as an initarg and should not be manipulated.
filtering-layout-state returns a "state" object which can be used later to set the state of any filtering-layout by (setf capi:filtering-layout-state). When setting the state, the value can also be a string or nil. A string means setting the filter string to it and making the filtering state be plain string, includes matches, and case-insensitive. nil means the same as the empty string.
matches-title
 controls whether the filtering-layout contains a display-pane (the "matches pane") showing the number of matches. If 
matches-title
 is a string, it provides the title of the matches pane. If 
matches-title
 is t the title is 
Matches:
. Note that the actual text in the matches pane must be set by the caller by (setf capi:filtering-layout-matches-text).
If 
help-string
 is non-nil then the filter has a Help button which raises a default help text if 
help-string
 is t, or the text of 
help-string
 if it is a string.
If 
label-style
 is :short the filter menu has a short title. For example if the filter is set for case-sensitive plain inclusive matching the short label is 
PMC
. If 
label-style
 is :medium then this label would be 
Filter:C
. Any other value of 
label-style
 would make a long label 
Plain Match Cased
.
A filtering-layout is used when a list-panel is made with the :filter initarg.
(defvar *things* (list "Foo" "Bar" "Baz" 'car 'cdr))
(capi:define-interface my-interface ()
((things :reader my-things
:initform *things*))
(:panes
(my-things-list-panel
capi:list-panel
:reader my-interface-list-panel
:items things
:visible-min-height `(:character ,(length *things*)))
(my-filtering
capi:filtering-layout
:change-callback 'update-my-interface
:reader my-interface-filtering))
(:layouts
(a-layout
capi:column-layout
'(my-filtering my-things-list-panel)))
(:default-initargs :title "Filtering example")
)
(defun update-my-interface (my-interface)
(let* ((things (my-things my-interface))
(filtered-things
(multiple-value-bind (regexp excludep)
(capi:filtering-layout-match-object-and-exclude-p
(my-interface-filtering my-interface)
nil)
(if regexp
(loop for thing in things
when (if (find-regexp-in-string
regexp
(string thing))
(not excludep)
excludep)
collect thing)
things))))
(setf (capi:collection-items
(my-interface-list-panel my-interface))
filtered-things)))
CAPI User Guide and Reference Manual (Windows version) - 3 Aug 2017