P C psilocidal@gmail.com writes:
Hello,
I've been trying to get my list-panes fully operational, but it seems as I take one step forward, something else seems to push me back two steps.
It is frustrating, but I am more grateful to be learning these tools, because this is really the only way I will be exposed to CL. It seems that at first, my lists didn't seem to want to be nonexclusive. I found out that the problem with that was my McCLIM directory in quicklisp had about half of the files missing (?). I don't know how that happened. Then after I figured that out, when I try to update the items of the list using (setf (list-pane-items pane) new-items), it says there is no generic function to handle this. Maybe my problem comes from my work around. This is what I did.
(with-slots (pane) *application-frame* (with-slots (items) pane (setf (climi::list-pane-items (find-pane-named *application-frame* 'pane)) new-items-list)))
Is all of this necessary? It seems the second (with-slots ...) is not necessary.
I've read through the gadgets.lisp and it seems that the defgeneric and defmethods are defined appropriately, but (setf list-pane-items) or (setf climi::list-pane-items) errors out as no generic function. Is there a way better than what I did?
After I use this to update my list, it redisplays with only half of the items; 1500 instead of 3000. Is this a limit of the size that a list-pane can handle; or is this from my work around?
Also I would like to mention, :scroll-bars and :visible-items keys don't work for me. Are these known bugs? When I had :scroll-bars t and tried to update my list, the whole screen became transparent except for around the borders where it was refracted.
Try this instead:
(define-application-frame test () () (:menu-bar t) (:panes (list (make-pane 'list-pane))) (:layouts (default (scrolling (:scroll-bar :vertical) list))))
(define-test-command (com-add-items :name t :menu t) () (let ((list-pane (find-pane-named *application-frame* 'list))) (setf (clim-extensions:list-pane-items list-pane) (loop for i to 3000 collect i))))
(defun test () (run-frame-top-level (make-application-frame 'test)))