Window 操作

ここでは、ウィンドウを表示して設定していくことに関してまとめていく。

ウィンドウやパネルを起動時には消しておいて、ボタンを押したり、メニューから開くようにするには、まず、Interface Builder で、ウィンドウなりパネルなりを用意する。ここでは、パネルを用意して、outlet で指定して @panel として扱う。

Interface Builder の設定では、Inspector で Release When Closed と Visible At Launch のチェックを外す。これで、アプリケーションで呼び出してパネルを消しても画面から消えるだけで、情報は保持される。Release When Closed にチェックが入っていると、消してからもう一度呼び出したときにエラーが出る。もしかしたら使い方が間違ってるだけかもしれないけど。

それ以外も、Interface Builder でいろいろ設定できるので、そちらで設定するのが楽でいい。ただ、バグなのかウィンドウの最小サイズを設定しても覚えていてくれなかったりする(変えた直後だけ反映される)ので、その辺りの設定にも触れておく。

まず、ボタンなんかを押して、パネルを表示させるには、ボタンに結びつけた ib_action で makeKeyAndOrderFront(self) を使えばいい。

@tagPanel.makeKeyAndOrderFront(self)

これで表示したパネルにいろいろと設定をしていく。

setTitle(string) タイトルをつける。表示されるのは一番上のタイトルバー。

@panel.setTitle("Title")

setBackgroundColor(color) 背景の色を設定する。color は NSColor。

@panel.setBackgroundColor(NSColor.greenColor)

setAlphaValue(float) 透明度を0−1の小数で設定する。1 で表示 0 で透明。

@panel.setAlphaValue(0.8)

setFrameOrigin(point) パネルの表示位置を設定する。point は NSPoint でパネルの左下の角の座標なので注意。

さらに、Cocoa では左下の隅が (0,0) になる。

@panel.setFrameOrigin(NSPoint.new(100,400))

実は、NSPoint は、Ruby の Array オブジェクトでいいので、次にように書ける。

@panel.setFrameOrigin([100,400])

setFrameTopLeftPoint(point) パネルの左上の角の座標を設定する。タイトルバーの下の部分の左上なので、(0,0) にすると画面の左下にタイトルバーだけが表示された状態になる。

@panel.setFrameTopLeftPoint(NSPoint.new(100,400))

( @panel.setFrameTopLeftPoint([100,400]) )

setMinSize(size), setMaxSize(size) パネルの最小サイズ、最大サイズを設定する。size は NSSize で指定する。

@panel.setMinSize(NSSize.new(200,500))

@panel.setMaxSize(NSSize.new(500,800))

( @panel.setMinSize([200,500]) )

( @panel.setMaxSize([500,800]) )

frame パネルの座標とサイズを返す。NSRect で返ってくる。to_a とすると座標とサイズの2つの配列が入った配列になる。[[x 座標,y 座標],[幅,高さ]] と入っている。

@panel.frame

座標、サイズをそれぞれ取り出すには、originsize を使う。座標は NSPoint でサイズは NSSize で返ってくる。to_a で配列にできる。

@panel.frame.origin

@panel.frame.size

座標、サイズのそれぞれの値を取り出すには、x、y、width、height を使う。

@panel.frame.origin.x

@panel.frame.origin.y

@panel.frame.size.width

@panel.frame.size.height

setFrame_display(frame,true/false)

setFrame_display_animate(frame,true/false,true/false) パネルのサイズを変更する。frame は NSRect で指定する。

_animate の方は、サイズ変更時にアニメーションを使う。false だと setFrame_display() と同じってことだと思う。display は再描画をするかどうか。ためしたところ false だとこのメソッドが呼ばれるたびにパネルがちらちらする。

@panel.setFrame_display(NSRect(NSPoint.new(100,600),NSSize(400,600),true)

@panel.setFrame_display_animate(NSRect(NSPoint.new(100,600),NSSize(400,600),true,true)

NSRect は Ruby の Array オブジェクトでいいので、次のように書ける。

@panel.setFrame_display([100,600,400,600],true)

@panel.setFrame_display_animate([100,600,400,600],true,true)

frame と setFrame_display_animate() を使ってパネルの大きさを変えてみる。

def windowResize(sender)

windowFrame = @panel.frame.to_a

windowFrame[0][1] = windowFrame[0][1]-30

windowFrame[1][1] = windowFrame[1][1]+30

@panel.setFrame_display_animate(windowFrame,false,true)

end

これを ib_action でボタンに割り当てると、ボタンを押すたびにアニメーションを伴ってパネルが下に30ポイントのびる。