summaryrefslogtreecommitdiff
path: root/ext/tk/lib/tkextlib/tile/dialog.rb
blob: b10378d7defc286bd714aa7d5f73e13dd0bd39df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#
#  ttk::dialog  (tile-0.7+)
#                               by Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
#
require 'tk'
require 'tkextlib/tile.rb'

module Tk
  module Tile
    class Dialog < TkWindow
    end
  end
end

class Tk::Tile::Dialog
  TkCommandNames = ['::ttk::dialog'.freeze].freeze

  def self.show(*args)
    dialog = self.new(*args)
    dialog.show
    [dialog.status, dialog.value]
  end
  def self.display(*args)
    self.show(*args)
  end

  def self.define_dialog_type(name, keys)
    Tk.tk_call('::ttk::dialog::define', name, keys)
    name
  end

  def self.style(*args)
    ['Dialog', *(args.map!{|a| _get_eval_string(a)})].join('.')
  end

  #########################

  def initialize(keys={})
    @keys = _symbolkey2str(keys)
    super(*args)
  end

  def create_self(keys)
    # dummy
  end
  private :create_self

  def show
    tk_call(self.class::TkCommandNames[0], @path, *hash_kv(@keys))
  end
  alias display show

  def client_frame
    window(tk_call_without_enc('::ttk::dialog::clientframe', @path))
  end

  def cget(slot)
    @keys[slot]
  end

  def configure(slot, value=None)
    if slot.kind_of?(Hash)
      slot.each{|k, v| configure(k, v)}
    else
      slot = slot.to_s
      value = _symbolkey2str(value) if value.kind_of?(Hash)
      if value && value != None
        @keys[slot] = value
      else
        @keys.delete(slot)
      end
    end
    self
  end

  def configinfo(slot = nil)
    if slot
      slot = slot.to_s
      [ slot, nil, nil, nil, @keys[slot] ]
    else
      @keys.collect{|k, v| [ k, nil, nil, nil, v ] }
    end
  end
end