TextViewPanelは、テキストファイルを表示するための アプリケーションwindowクラスである (図 )。 プログラムテキストは、もっとも簡単なアプリケーションwindowの1つが どのように記述されているかを見れる。 :createメソッドにおいて、quitボタンとfindボタンと ファイルの中を捜すための文字列を供給するためのtext-itemを 作成する。 view-windowは、縦と横にスクロールバーを持ちファイルを表示するための ScrollTextWindowである。 TextViewPanelは、windowマネージャーにより一番外側のタイトルwindowの 大きさを変えたときview-windowの大きさを変えるために :ConfigureNotifyイベントを捕獲する。
(defclass TextViewPanel :super panel :slots (quit-button find-button find-text view-window)) (defmethod TextViewPanel (:create (file &rest args &key (width 400) &allow-other-keys) (send-super* :create :width width args) (setq quit-button (send self :create-item panel-button "quit" self :quit)) (setq find-button (send self :create-item panel-button "find" self :find)) (setq find-text (send self :create-item text-item "find: " self :find)) (setq view-window (send self :locate-item (instance ScrollTextWindow :create :width (setq width (- (send self :width) 10)) :height (- (setq height (send self :height)) 38) :scroll-bar t :horizontal-scroll-bar t :map nil :parent self))) (send view-window :read-file file)) (:quit (event) (send self :destroy)) (:find (event) (let ((findstr (send find-text :value)) (found) (nlines (send view-window :nlines))) (do ((i 0 (1+ i))) ((or (>= i nlines) found)) (if (substringp findstr (send view-window :line i)) (setq found i))) (when found (send view-window :display-selection found) (send view-window :locate found)))) (:resize (w h) (setq width w height h) (send view-window :resize (- w 10) (- h 38))) (:configureNotify (event) (let ((newwidth (send self :width)) (newheight (send self :height))) (when (or (/= newwidth width) (/= newheight height)) (send self :resize newwidth newheight))) ) )