class Plugin::Gtk::SlugDictionary

Public Class Methods

nameklass() click to toggle source

名前に対するGtkクラスのハッシュを返す

# File core/plugin/gtk/slug_dictionary.rb, line 6
def nameklass
  @nameklass ||= {} end
new() click to toggle source
# File core/plugin/gtk/slug_dictionary.rb, line 29
def initialize
  @widget_of_gtk = Hash.new{|h, k|
    if Plugin::Gtk::SlugDictionary.nameklass.has_key?(k)
      h[k] = {}
    else
      raise UndefinedWidgetError, "widget type `#{k}' does not exists" end } end
register_widget(name, gtk_klass) click to toggle source

新しいウィジェットタイプ name を登録する。

Args

name

ウィジェットのタイプ(Class)

gtk_klass

クラス(Class)

# File core/plugin/gtk/slug_dictionary.rb, line 13
def register_widget(name, gtk_klass)
  type_strict name => Class, gtk_klass => Class
  nameklass[name] = gtk_klass
end

Public Instance Methods

add(i_widget, gtk_widget) click to toggle source

i_widget に対応するGtkウィジェットが gtk_widget であることを登録する

Args

i_widget

Plugin::GUI::Widget

gtk_widget

Gtk::Widget

Return

self

# File core/plugin/gtk/slug_dictionary.rb, line 42
def add(i_widget, gtk_widget)
  @widget_of_gtk[i_widget.class][i_widget.slug] = gtk_widget end
get(klass_or_i_widget, slug=nil) click to toggle source

ウィジェットに対するGtkウィジェットを返す

Args

klass_or_i_widget

ウィジェットかクラス名

slug

第一引数にウィジェットのクラスを指定した場合、そのスラッグ

Return

Gtkウィジェット

# File core/plugin/gtk/slug_dictionary.rb, line 60
def get(klass_or_i_widget, slug=nil)
  if klass_or_i_widget.is_a? Plugin::GUI::Widget
    @widget_of_gtk[klass_or_i_widget.class][klass_or_i_widget.slug]
  else
    @widget_of_gtk[klass_or_i_widget][slug] end end
imaginally_by_gtk(gtk_widget) click to toggle source

gtk_widget に対応する内部表現のウィジェットをかえす。逆引きなので非効率、あまり使わないこと。

Args

gtk_widget

Gtkウィジェットのインスタンス

Return

対応するウィジェット、または存在しない場合はnil

# File core/plugin/gtk/slug_dictionary.rb, line 71
def imaginally_by_gtk(gtk_widget)
  type_strict gtk_widget => ::Gtk::Widget
  Plugin::Gtk::SlugDictionary.nameklass.each{ |i_widget_klass, gtk_widget_klass|
    if gtk_widget.is_a? gtk_widget_klass
      next if not i_widget_klass
      slug = @widget_of_gtk[i_widget_klass].key(gtk_widget)
      next if not slug
      if i_widget_klass.exist?(slug)
        return i_widget_klass.instance(slug) end end }
  error "not found (#{gtk_widget.inspect})"
  nil end
remove(i_widget) click to toggle source

i_widget の登録を解除する

Args

i_widget

Plugin::GUI::Widget

Return

self

# File core/plugin/gtk/slug_dictionary.rb, line 50
def remove(i_widget)
 @widget_of_gtk[i_widget.class].remove(i_widget.slug)
end