2009/06/10

McCLIM テーブルフォーマット

「グリッドビューみたいなのはどうするんかなぁ。」の件だけど、ちゃんとテーブルフォーマットあったよ。うん、確かにあったよ。 仕様はこちら。

ただプレゼンテーションと両立する方法がにわかりは分からなかった。いや、仕様を見ればちゃんと書いてある気がするけど、いまは英語を読む気力がない。あと幅の指定とかも。

(defun table-format (stream timeline)
(fresh-line stream)
(formatting-table (stream :x-spacing '(1 :character))
(loop for tweet in timeline
do (formatting-row (stream)
(formatting-cell (stream)
(princ (twitter:twitter-user-screen-name
(twitter:tweet-user tweet))
stream))
(formatting-cell (stream)
(princ (twitter:tweet-text tweet) stream))
(formatting-cell (stream)
(princ (dispay-create-at tweet) stream))))))


(defun display-timeline (frame pane)
(with-slots (timeline) frame
(table-format pane timeline)))

;; (defun display-timeline (frame pane)
;; (with-slots (timeline) frame
;; (mapc (lambda (tweet)
;; (updating-output (pane :unique-id tweet)
;; (present tweet 'twitter:tweet :stream pane)
;; (terpri pane)))
;; timeline)))

(define-application-frame twitter-frame ()
((timeline :initform nil :accessor timeline)
(last-id :initform 1 :accessor last-id)
(worker))
(:menu-bar t)
(:panes (timeline-pane
:application
:incremental-redisplay t
:display-function 'display-timeline)
(text-editor
:text-editor
:space-requirement (make-space-requirement :width 900))
(entry-button
:push-button
:label "投稿する"
:activate-callback
(lambda (button)
(declare (ignore button))
(execute-frame-command *application-frame*
`(com-update-status)))))
(:layouts (default (vertically (:width 900 :height 600)
timeline-pane
(horizontally (:height 50) text-editor entry-button)))))

0 件のコメント: