freenode/#clim - IRC Chatlog
Search
15:24:50
scymtym
jackdaniel: i think i mentioned wanting to turn this into a separate thing: https://github.com/scymtym/trivial-with-current-source-form . would the README convey to you what the library does if you didn't already know?
15:51:33
scymtym
thrashdin: addresses and parts of addresses are displayed as "presentations". are you already familiar with those?
15:55:49
scymtym
presentations are for displaying something that has an associated object as well as a type. this allows applying commands to the displayed thing and using the displayed thing when an object of a certain type is required as a command argument
15:56:47
scymtym
presentation types are separate from ordinary CL types and classes, but classes can be used as presentation types
15:57:22
scymtym
however, you can present any object with any presentation type, regardless of its CL class or CL type
15:59:01
scymtym
for example, you can do (clim:define-presentation-type my-integer ()) and then (clim:with-output-as-presentation (stream "foo" 'my-integer) (write-string "foo" stream))
16:01:24
thrashdin
(define-presentation-method present (object (type creature) stream view &key) (declare (ignore view)) (write-string (format nil "~a, ~a" (name object) (%sym-to-str (race object))) stream))
16:03:22
scymtym
the displayed presentation will become clickable and selectable as soon as a command is applicable
16:04:05
scymtym
try (define-command (com-test :command-table YOUR-APPLICATION-NAME) ((creature creature :gesture :select))) [untested]
16:05:29
scymtym
where (define-command (… :command-table FOO) …) is the same as (define-FOO-command …) in case you are looking at the address book demo
16:11:24
scymtym
second question first: COM-TEST is a command. you (or in this case i) choose the names, parameters and behavior of commands for your application. try C-/ in an interactor pane to see all commands of an application. commands are invoked by 1) typing their names and arguments into an interactor 2) by clicking presentations
16:14:39
scymtym
if you want a persistent selection that the user can manipulate, you should make the selection information part of your application state and present creatures accordingly. for example, you could add a (%selected :type list :initform '() :accessor selector) slot to your application frame and add something like (if (member object (selected *application-frame*)) (with-drawing-options (stream :text-face :bold) (write-string …))
16:18:48
thrashdin
well that's maybe ok but what you made after that -- will it make selected thing written in bold font?
16:22:17
scymtym
yes, assuming the selection would be populated somehow, selected things would be presented in bold
16:23:49
scymtym
to manipulated the selection, you could do (define-command com-toggle-select ((creature creature :gesture :select)) (if (member creates (selected *application-frame*)) (setf … (remove …)) (push …)))
16:24:44
scymtym
the above defines another command that will add/remove a creature to/from the selection when clicked
16:26:11
scymtym
defining multiple commands for the same "gesture" (:select) puts multiple entries into the right-click menu of the presentation
16:27:06
scymtym
you could make the %SELECTED slot not a list and define a COM-SELECT instead of COM-TOGGLE-SELECT
16:27:37
scymtym
regarding why COM-TEST is not in the interactor: commands can be named or not. only named commands are available in the interactor
16:28:08
thrashdin
okay well I dont need it in the interactor I was just wondering why it isnt there
16:28:10
scymtym
try (define-command (com-test :command-table YOUR-APPLICATION :named t or :named "Some Name") …)
16:29:59
scymtym
displaying your object as a presentation in (define-presentation-method present ((object creature) (presentation-type creature) …)) can use the object via OBJECT and the presentation type via well PRESENTATION-TYPE
16:31:03
scymtym
that's the cool thing: you just work with your unchanged object but present and manipulate in whatever way you like. kind of like model view controller if you know that
16:32:24
scymtym
in the above method the OBJECT parameter will be your object and it must be a CREATURE instance, yes
16:32:52
thrashdin
(define-presentation-method present ((object creature) (type creature) stream view &key) (declare (ignore view)) (write-string (format nil "~a, ~a" (name object) (%sym-to-str (race object))) stream))
16:34:03
scymtym
but you would have to say (present my-creature-instance 'my-new-presentation-type-name) where you do that
16:49:11
froggey
scymtym: I've fixed some of the issues that your profiler log showed (round, sin/cos, open-coded aref at high safety, slow clos dispatch for accessors)
16:56:39
scymtym
froggey: wow, that was quick. i also made some progress. things are borderline usable even without your fixes
16:57:34
scymtym
froggey: are you aware of an issue where setf slot-value sets the wrong slot or maybe no slot at all? i'm pretty sure that is happening in some cases
16:58:31
froggey
yes, slot-value caches slot locations but the cache doesn't get invalidated properly
17:03:33
froggey
it should be possible to work around by doing (mezzano.clos::finalize-generic-function (mezzano.clos::fast-slot-value-reader THE-SLOT-NAME)), and the same for fast-slot-value-writer
17:05:04
scymtym
an easily available test case could be instances of STANDARD-READER-METHOD which don't seem to get the GENERIC-FUNCTION slot set in ADD-METHOD
17:45:40
jackdaniel
scymtym: it is clear from the description. that said, README is phrased as if it works on something else than /only/ sbcl, what might be misleading (but I get the intention, you want to invite other implementations to provide their own equivalent)
17:46:06
jackdaniel
n.b it is the first time I see a portability trivial-* library spanning only one implementation ;)
19:01:48
jackdaniel
hence name is no use here. it is possible to look up frame by name in the frame-manager, but you'd need to know in which fm to look for, so I'd just stick to *application-frame* dynamic variable
19:02:16
jackdaniel
alternatively, when you make-application-frame, you may assign a result to a variable which you know how to access
19:05:32
thrashdin
Can I have buttons (say in the menu) that would completely switch the contents of the fram
19:06:24
jackdaniel
yes, one way is to use extension clim-tab-pane (there is an example in Examples), that's probably what you are aftert
20:29:52
jackdaniel
you may call redisplay on a specific pane with http://bauhh.dyndns.org:8000/clim-spec/28-3.html#_1518
20:30:55
jackdaniel
as of interactor pane issue, please fill it on the bugtracker as a separate issue, because it is not related to text-field, that way maybe someone will take a look at drei to fix that. I can only tell where the issue originates and it was new to me when you have mentioned it a few days back
20:32:30
jackdaniel
note, that in principle you could trigger redisplay with execute-command (if display-time is bound to command execution), but it doesn't work correctly (issue is reported)