[mcclim-devel] file-browser example application
Robert Goldman
rpgoldman at real-time.com
Sun Jan 7 19:18:36 UTC 2007
Robert Goldman wrote:
> Troels Henriksen wrote:
>> Robert Goldman <rpgoldman at real-time.com> writes:
>>
>>> I made a stab at it, but no, it didn't seem to work. I am attaching two
>>> different versions of the file-browser: one that works, using a new
>>> presentation-type, dir-pathname, and one that tries to do the job with
>>> (and pathname (satisfies cl-fad:directory-pathname-p)), that doesn't
>>> work.
>> It seems that the `and' type doesn't work at all. Try doing (present 2
>> 'integer) and then (accept '(and integer)) - the previous output will
>> not be selectable.
>>
> Hm....
>
> At least in presentation-defs.lisp, there is no accept presentation
> method for AND. Is this the culprit?
>
> By analogy, I tried whacking together the following definition for
> presentation-defs:
> (define-presentation-method accept ((type and)
> (stream input-editing-stream)
> (view textual-view)
> &key)
> (let ((scan-begin (stream-scan-pointer stream))
> success
> value)
> (dolist (and-type types)
> (setf (stream-scan-pointer stream) scan-begin)
> (multiple-value-setq (success value)
> (block try-accept
> (handler-case (values t (accept and-type
> :stream stream
> :view view
> :prompt nil))
> (parse-error () (return-from try-accept nil)))))
> (unless success (simple-parse-error "Input type is not of type ~S"
> types)))
> value))
>
> But then I get an error that SATISFIES is an unknown presentation type.
> I suspect that this is because it's not a primary presentation type, so
> I need to use presentation-typep here instead of a recursive accept...
>
> Best,
> R
>
OK, the following works to let me enter values of type (and pathname
(satisfies cl-fad:directory-pathname-p)) to the command prompt. But I
still don't get the ability to mouse-select the directory list entries
for the presentation-to-command-translator.
(define-presentation-method accept ((type and)
(stream input-editing-stream)
(view textual-view)
&key)
(let* ((subtype (first types))
(value (accept subtype
:stream stream
:view view
:prompt nil)))
(unless (presentation-typep value type)
(simple-parse-error "Input type is not of type ~S" type))
value))
BTW, the command prompt is pretty uninformative:
Edit Directory (and) :
Is this where an abbreviation and description would be helpful?
Cheers,
R
More information about the mcclim-devel
mailing list