Sha256: 2454f8494424c0c8dccd232071c120637b8229cd00aef8a0b4f3c79fbc113d3e

Contents?: true

Size: 1.34 KB

Versions: 9

Compression:

Stored size: 1.34 KB

Contents

module Tk
  class Widget
    include Pack, Destroy, Bind, Bindtags, WM, Winfo, Grid, Clipboard, Place, TkCmd

    attr_reader :tk_parent, :tk_pathname

    def self.tk_command
      raise NotImplementedError, "Implement in subclass"
    end

    def initialize(tk_parent = Tk.root, options = None)
      if tk_parent.respond_to?(:to_tcl_options?)
        tk_parent, options = Tk.root, tk_parent
      end

      if !options || None == options
        options = {}
      else
        options = options.dup
      end

      @tk_parent = tk_parent

      yield(options) if block_given? && !options[:command]

      command = self.class.tk_command
      Tk.execute(command, assign_pathname, options.to_tcl_options?)
    end

    def to_tcl
      tk_pathname.dump
    end

    def focus(option = None)
      Focus.focus(self, option)
    end

    def focus_next
      Focus.next(self)
    end

    def focus_prev
      Focus.prev(self)
    end

    def raise(above = None)
      Raise.raise(self, above)
    end

    def lower(below = None)
      Lower.lower(self, below)
    end

    def execute(command, *args)
      Tk.execute(tk_pathname, command, *args)
    end

    def execute_only(command, *args)
      Tk.execute_only(tk_pathname, command, *args)
    end

    private

    def assign_pathname
      @tk_pathname = Tk.register_object(tk_parent, self)
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
ffi-tk-2010.08.23 lib/ffi-tk/widget.rb
ffi-tk-2010.08 lib/ffi-tk/widget.rb
ffi-tk-2010.06 lib/ffi-tk/widget.rb
ffi-tk-2010.03 lib/ffi-tk/widget.rb
ffi-tk-2010.02 lib/ffi-tk/widget.rb
ffi-tk-2010.01 lib/ffi-tk/widget.rb
ffi-tk-2010.01.02 lib/ffi-tk/widget.rb
ffi-tk-2009.12.14 lib/ffi-tk/widget.rb
ffi-tk-2009.11.29 lib/ffi-tk/widget.rb