[#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:3413] Re: dialogue

From: Tadayoshi Funaba <tadf@...>
Date: 1998-07-26 10:11:00 UTC
List: ruby-dev #3413
ふなばです。

ちょっと修正しました。これで、 dialog.tcl のダイアログとしての本質的な
機能はできたと思います (たぶん)。

とりあえず、このコードでは、tk_call を (三個所で) つかっていますが、そ
れは本意でないので、それを直したいと思います。これについての確認をした
いのですが、それは別のメイルにします。

仕様や実装のよしあしは別として、それなりに可能だ、ということは確認でき
たと思います。ということで、もしよければ、これを叩き台に話ししてみませ
んか。よいものができればいいので、最終的にこの仕様や実装は捨ててもよい
です。

この実装では、command がつぶれてしまうのが惜しい。 また、wait でいろい
ろやり過ぎているかなあと思います。

--Tadayoshi Funaba
# tkdialogue.rb (prototype): Written by Tadayoshi Funaba 1998
# $Id: tkdialogue.rb,v 1.2 1998/07/26 09:49:35 tadf Exp tadf $

require 'tk'

class TkDialogue < TkToplevel

  def initialize(*args)
    super(*args)
    @buttons = {}
    @counter = 0
    @default = nil
    @result = -1
    bind 'Return', lambda {
      if @buttons[@default] then
	@result = @buttons[@default]
	@default.
	  configure('state'=>'active', 'relief'=>'sunken')
	update 'idletasks'
	after 100, lambda{destroy}
      end}
    tk_call('wm', 'protocol', path, 'WM_DELETE_WINDOW', lambda{}) ###
    transient TkWinfo.toplevel(TkWinfo.parent(self))
    @focus = tk_call('focus') ###
    @grab = grab('current')
    if @grab then
      @stat = @grab.grab('status')
    end
    grab
    focus
  end

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

  def set_default(w)
    @default = w
    @default.focus
    self
  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
    begin tk_call('focus', @focus); rescue; end ###
    if @grab then
      if @stat == 'global' then
	@grab.grab('global')
      else
	@grab.grab
      end
    end
    @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')
      ok = TkButton.new(self, 'text'=>'OK').
	pack('in'=>default, 'padx'=>'2m', 'pady'=>'2m')
      ok.raise default
      set_button ok
      set_default ok
      can = TkButton.new(self, 'text'=>'Cancel').
	pack('in'=>bot, 'side'=>'left', 'expand'=>1,
	     'padx'=>'2m', 'pady'=>'2m')
      set_button can
    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
      if false then
	TkButton.
	  new(self,
	      'text'=>'?',
	      'command'=>lambda {
		d = TkDialogue.new
		w = TkButton.new(d, 'text'=>'?').pack
		d.set_button w
		d.set_default w
		if false then
		  for i in 0..100
		    x, y = rand(10), rand(10)
		    d.geometry "+#{100+x}+#{100+y}"
		    update
		  end
		end
		p d.wait}).
	  pack
      end
      TkButton.
	new(self,
	    'text'=>'Quit',
	    'command'=>lambda{destroy}).
	pack
    end

  end

  TkTest.new
  Tk.mainloop

end

In This Thread