2009年7月 1日

[ruby-list:46135] [RFC] これらの widgetを Ruby/Tkの標準ライブラリにする価値はありますか?

永井@知能.九工大です.

今,Ruby/Tk のいくつかのサンプルを Ruby/Tk の標準の機能とするように
格上げするかどうかで迷っています.
この点について,皆さんのコメントなどいただけますと幸いです.

Ruby のソースアーカイブには,いくつかの Ruby/Tk のサンプルスクリプトも
含まれています.

それらの多くは単なるデモファイルなのですが,
一部には widget class のライブラリとして使えるものもあります.
そうしたもののいくつかは便利な代物なので,
Ruby/Tk の標準ライブラリにしてしまってもいいのではないかという話です.

以下のサンプルスクリプトが候補です.
実際に格上げする場合は,クラス名をちょっといじったり
バグフィックスを行ったりした上でということになると思います.


* editable_listbox.rb
class Editable_Listbox
キーボードから項目を編集することができる listtbox widget です.
例えば,項目をダブルクリックすると,その項目の位置にその項目の
内容を編集できる entry box が現れます.
もちろん,編集結果は listbox に反映されます.


* scrollframe.rb
class TkScrollFrame
スクロール可能なビューウィンドウ (フレームの一部を切り取って見
るためのもの) を持った frame widget です.
例えば,ボタンがたくさん並んだツールバーを想像してみてください.
ツールバーはウィンドウサイズに比べてかなり長いものとします.
そのような場合には,ツールバーをスクロールさせて表示するように
したくなるかもしれません.
TkScrollFrame を使えばそうしたことが簡単に実装できます.


* tkalignbox.rb
ウィンドウサイズが変わっても,並んでいるウィジェット(例えば文字列
の長さやフォントの高さが異なるボタンの並び)のそれぞれの幅や高さを
同じに保ちつづけるというのは少々難しいものです.
以下は,そうしたことを簡単に実現できるようにするための一種の
frame widget です.
class Tk::HBox
class Tk::HLBox
class Tk::HRBox
class Tk::VBox
class Tk::VTBox
class Tk::VBBox
例えば,Tk::HLBox.new(parent).add(b1, b2, b3, b4, ...) adds などと
すると,ボタン b1, b2, b3, b4, ... が HLBox フレームに左詰めで配置
されます.その際,各ボタンの大きさが違っていても,すべて同じになる
ように調整されます.ウィンドウの大きさが変更されて HLBox ウィジェッ
トのサイズが変更になった場合でも,HLBox ウィジェットのサイズに合わ
せてそれぞれのボタンが同じ大きさとなるように保ちつづけます.


* tkballoonhelp.rb
class TkBalloonHelp
親ウィジェットにバルーンヘルプを加えます.
もちろん,表示するメッセージやバルーンヘルプが表示されるまでの
時間などを制御することが可能です.
表示の際の hoook メソッドも定義できますので,listbox の項目ごと
に異なるメッセージを出力することも可能です.


* tkcombobox.rb
class TkAutoScrollListbox

自動スクロールタブ付きの listbox です.タブはその方向に表示範囲
外の項目が存在する場合だけに現れます.タブの上でマウスを動かさ
ないようにしていれば,その方向に自動的にスクロールします.

class TkCombobox
選択リストに TkAutoScrollListbox を使った combobox widget です.


* tktextframe.rb

これに含まれる TkTextFrame クラスに基づいてデザインされた
Tk::ScrollbarComposite モジュール (tktextframe.rb には含まれて
いません) が標準化候補です.
このモジュールは,スクロール可能なウィジェットにスクロールバーを
付けた複合ウィジェットを作るのを手助けするものです.
例えば,
---------------------------------------
class ScrListbox < Tk::Listbox
include Tk::ScrollbarComposite
DEFALUT_HSCROLL = false
def create_component(keys={})
Tk::Listbox.new(@frame, keys)
end
private :create_component
end
---------------------------------------
というように定義したとき,ScrListbox.new().pack() などとして
Y 方向のスクロールバー付きの listbox ウィジェットを扱えるように
なります.

--
Hidetoshi NAGAI (nagai@xxxxx)


投稿者 xml-rpc : 2009年7月 1日 19:54
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/86300
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。