[#3234] sample of TkFont class — NAGAI Hidetoshi <nagai@...>

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

52 messages 1998/07/08
[#3241] Re: sample of TkFont class — NAGAI Hidetoshi <nagai@...> 1998/07/09

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

[#3290] Re: sample of TkFont class — NAGAI Hidetoshi <nagai@...> 1998/07/15

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

[#3291] Re: sample of TkFont class — matz@... (Yukihiro Matsumoto) 1998/07/15

まつもと ゆきひろです

[#3307] Re: sample of TkFont class — NAGAI Hidetoshi <nagai@...> 1998/07/16

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

[#3309] Re: sample of TkFont class — matz@... (Yukihiro Matsumoto) 1998/07/16

まつもと ゆきひろです

[#3319] Re: sample of TkFont class — NAGAI Hidetoshi <nagai@...> 1998/07/16

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

[#3321] Re: sample of TkFont class — matz@... (Yukihiro Matsumoto) 1998/07/16

まつもと ゆきひろです

[#3324] Re: sample of TkFont class — NAGAI Hidetoshi <nagai@...> 1998/07/16

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

[#3367] Re: sample of TkFont class — Tadayoshi Funaba <tadf@...> 1998/07/22

ふなばです。

[#3369] Re: sample of TkFont class — ttate@... 1998/07/22

立石@JAISTです。

[#3370] Re: sample of TkFont class — Tadayoshi Funaba <tadf@...> 1998/07/22

ふなばです。

[#3371] Re: sample of TkFont class — ttate@... 1998/07/23

立石@JAISTです。

[#3292] exprimental release 1.1b9_31 (hopefully final) — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

20 messages 1998/07/15
[#3293] Re: exprimental release 1.1b9_31 (hopefully final) — Takahiro Maebashi <maebashi@...> 1998/07/15

前橋です。

[#3294] Re: exprimental release 1.1b9_31 (hopefully final) — matz@... (Yukihiro Matsumoto) 1998/07/15

まつもと ゆきひろです

[#3295] Re: exprimental release 1.1b9_31 (hopefully final) — Takahiro Maebashi <maebashi@...> 1998/07/15

前橋です。

[ruby-dev:3410] dialogue

From: Tadayoshi Funaba <tadf@...>
Date: 1998-07-25 07:14:48 UTC
List: ruby-dev #3410
ふなばです。

擬似コードでも書いてみると、気分くらいは伝わるかもしれないので、ちょっ
と書いてみようと思ったんですが、やっているうちに、ある程度までなら実装
できそうな気がしてきたので、一応、動くものを書いてみました。

dialog.tcl を参考にしましたが、いろいろ手を抜いています。

手を抜いたところは、protocol で、WM_DELETE_WINDOW を設定するところ (つ
かおうとしたら、None がないと怒られた)、focus に関して、それから、グラ
ブもこれで十分なのか判りません。他にもアヤシイところがありそうです。

ボタンの登録はその都度、 set_button メソッドでする、というふうにしてみ
ました。デフォルトボタンは set_default メソッドでおこなっています。

--Tadayoshi Funaba
# tkdialogue.rb (prototype): Written by Tadayoshi Funaba 1998
# $Id: tkdialogue.rb,v 1.1 1998/07/25 06:49:05 tadf Exp tadf $

require 'tk'

class TkDialogue < TkToplevel

  def initialize
    super()
    @buttons = {}
    @counter = 0
    @default = nil
    @result = -1
    transient TkWinfo.toplevel(TkWinfo.parent(self))
    bind 'Return', lambda {
      @result = @buttons[@default]
      @default.
	configure('state'=>'active', 'relief'=>'sunken')
      update 'idletasks'
      after 100, lambda{destroy}}
    grab
  end

  def set_button(w)
    @buttons[w] = @counter
    @counter += 1
    w.command lambda {
      @result = @buttons[w]
      destroy}
  end

  def set_default(w)
    @default = w
  end

  def wait
    withdraw
    update 'idletasks'
    sw = TkWinfo.screenwidth(self)
    sh = TkWinfo.screenheight(self)
    dw = TkWinfo.reqwidth(self)
    dh = TkWinfo.reqheight(self)
    vx = TkWinfo.vrootx(TkWinfo.parent(self))
    vy = TkWinfo.vrooty(TkWinfo.parent(self))
    x = (sw - dw) / 2 - vx
    y = (sh - dh) / 2 - vy
    geometry "+#{x}+#{y}"
    deiconify
    wait_destroy
    @result
  end

end

if __FILE__ == $0 then

  class TkSimplestDialogue < TkDialogue

    def initialize
      super()
      w = TkButton.new(self, 'text'=>'OK').pack
      set_button w
      set_default w
    end

  end

  class TkImitationDialogue < TkDialogue

    def initialize
      super()
      title 'Question'
      iconname 'Dialogue'
      bot = TkFrame.new(self, 'relief'=>'raised', 'bd'=>1).
	pack('side'=>'bottom', 'fill'=>'both')
      top = TkFrame.new(self, 'relief'=>'raised', 'bd'=>1).
	pack('side'=>'top', 'fill'=>'both', 'expand'=>1)
      msg = TkLabel.
	new(self,
	    'justify'=>'left',
	    'text'=>
%Q("tkdialog.rb" already exists.\nDo you want to overwrite it?),
	    'font'=>'-adobe-times-medium-r-normal--*-180-*').
	pack('in'=>top, 'side'=>'right', 'expand'=>1, 'fill'=>'both',
	     'padx'=>'3m', 'pady'=>'3m')
      bitmap = TkLabel.new(self, 'bitmap'=>'questhead').
	pack('in'=>top, 'side'=>'left', 'padx'=>'3m', 'pady'=>'3m')
      default = TkFrame.new(self, 'relief'=>'sunken', 'bd'=>1).
	pack('in'=>bot, 'side'=>'left', 'expand'=>1,
	     'padx'=>'3m', 'pady'=>'2m')
      button = TkButton.new(self, 'text'=>'OK').
	pack('in'=>default, 'padx'=>'2m', 'pady'=>'2m')
      set_button button
      set_default button
      button2 = TkButton.new(self, 'text'=>'Cancel').
	pack('in'=>bot, 'side'=>'left', 'expand'=>1,
	     'padx'=>'2m', 'pady'=>'2m')
      set_button button2
    end

  end

  class TkTest < TkRoot

    def initialize
      super()
      TkButton.
	new(self,
	    'text'=>'simplest',
	    'command'=>lambda {
	      p TkSimplestDialogue.new.wait}).
	pack
      TkButton.
	new(self,
	    'text'=>'imitation',
	    'command'=>lambda {
	      p TkImitationDialogue.new.wait}).
	pack
      TkButton.
	new(self,
	    'text'=>'Quit',
	    'command'=>lambda{destroy}).
	pack
    end

  end

  TkTest.new
  Tk.mainloop

end

In This Thread

Prev Next