newLISPで Amazon を参照する、GUI編、再び。。。または、image の表示方法

 先日の “newLISPで Amazon を参照する、GUI編” は如何だったでしょうか?
 その中で紹介したスクリプト中でコメント・アウトしてあった表紙画像のguiserver上の表示を試みます。
 GUI functions のリスからすると、draw-imageimage-label あたりだと見当がつきます。
 今回は、image-label を使います。明示的に jpeg が使えると書いてあるからです。(マニュアルLabels 項参照)
 使い方はというと、

(load (append (env "NEWLISPDIR") "/guiserver.lsp"))
(gs:init) 
 

(gs:frame 'Frame 10 10 300 300 "Image") (gs:set-border-layout 'Frame) (gs:image-label 'Jpeg "4274066371.jpg") (gs:add-to 'Frame 'Jpeg "center") (gs:set-visible 'Frame true) (gs:listen) (exit)

 image-label を使って、Jpeg というシンボルID に画像ファイルを割り付けます。
 それを、フレームか、パネルに、おなじみ add-to を使って追加するだけです。
 画像を切り替えるには、一手間かかります。

(gs:remove-from ‘Frame ‘Jpeg)
(image-label 'Jpeg "new.jpg") 
(gs:add-to 'Frame 'Jpeg "center")

 remove-from で、一旦、Jpeg を Frame から削除し、新しい画像ファイルを割付け、再び、Frame に追加します。
 手間ですが、こうしないと画像が切り替わらないようです。まだ、私が知らないだけかもしれませんが(汗)。
 これらを先日のスクリプトのsearch-action関数とメイン・スクリプトに組み込むと、

(define (search-action)
  (gs:remove-from 'Frame 'Jpeg)
  (gs:set-text 'BookList "serching...")
  (let (str (gs:get-text 'InputText))
    (let (isbn-code (isbn:check str))
    (if isbn-code 
        (letn (book (get-url (append "http://www.amazon.co.jp/o/ASIN/"  isbn-code))
              jpg (get-jpg book))
          (gs:clear-text 'BookList)
          (write-file (string isbn-code "." ((parse jpg ".") -1)) (read-file jpg))
          (gs:image-label 'Jpeg (string isbn-code "." ((parse jpg ".") -1)))
          (dolist (lst (get-titleList book))
            (gs:append-text 'BookList lst) (gs:append-text'BookList "n"))
          (dolist (lst (get-detailList book))
            (map (curry gs:append-text 'BookList) lst) (gs:append-text'BookList "n")))
        (gs:set-text 'BookList (string str "is ISBN number?")))
    (gs:add-to 'Frame 'RegsPanel "north" 'BookList "center" 'Jpeg "east")
    (gs:set-visible 'Frame true))))
; frame define
(gs:frame 'Frame FPosX FPosY FWidth FHeight "Book-Search from Amazon JAPAN")
; define panel
(gs:panel 'RegsPanel)
; define button & area for panel
(gs:button 'SearchButton 'search-action "search")
(gs:text-area 'InputText 'text-handler 160 22)
(gs:text-area 'BookList 'null-handler)
(gs:image-label 'Jpeg "")
; mount button & area on panel
(gs:add-to 'RegsPanel 'SearchButton 'InputText)
; set layout for frame & panel
(gs:set-border-layout 'Frame)
(gs:set-flow-layout 'RegsPanel "left")
; mount all on frame
(gs: add-to 'Frame 'RegsPanel "north" 'BookList "center" 'Jpeg "east")
(gs:set-visible 'Frame true) 
(gs:request-focus 'InputText)
; start
(gs:listen)
(exit) 

 という、感じ。
 ついでに、with-open-file 部分をnewLSIP組込write-fileread-file の組合せに置き換え、ちょっとだけ高速にしています(笑)。
bookcover 変更したスクリプトを実行し、ISBN番号を打ち込めば、右のような表示が得られるはずです。続けて、新しいISBN番号を打ち込めば、その情報と表紙画像に変わります。ただ、その都度、表紙画像がディスクに増えていきますで、ご注意を(笑)。気になる方は、画像ファイル名に固定ファイル名にすればよいだけですけどね。

 以上、如何でしょうか?

カテゴリー: LISP パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中