# module Tk::Tile

### Constants

Button
CANNOT_FIND_PACKAGE
CheckButton
Checkbutton
Combobox
Entry
Frame
Label
LabelFrame
Labelframe
MenuButton
Menubutton
Notebook
PACKAGE_NAME
PanedWindow
Progress
Progressbar
RadioButton
Radiobutton
Scale
Scrollbar
Separator
Sizegrip
Spinbox
Square
TCheckbutton
TILE_SPEC_VERSION_ID
TLabelFrame
TMenuButton
TRadiobutton
USE_TILE_NAMESPACE
USE_TTK_NAMESPACE

### Public Class Methods

__Import_Tile_Widgets__!() click to toggle source

    # File lib/tkextlib/tile.rb, line 128
    def self.__Import_Tile_Widgets__!
      warn 'Warning: "Tk::Tile::__Import_Tile_Widgets__!" is obsolete.' <<
           ' To control default widget set, use "Tk.default_widget_set = :Ttk"'
      Tk.tk_call('namespace', 'import', '-force', 'ttk::*')
    end

__define_LoadImages_proc_for_compatibility__!() click to toggle source

    # File lib/tkextlib/tile.rb, line 134
        def self.__define_LoadImages_proc_for_compatibility__!
          # Ttk 8.5 (Tile 0.8) lost 'LoadImages' utility procedure.
          # So, some old scripts don't work, because those scripts use the
          # procedure to define local styles.
          # Of course, rewriting such Tcl/Tk scripts isn't difficult for
          # Tcl/Tk users. However, it may be troublesome for Ruby/Tk users
          # who use such Tcl/Tk scripts as it is.
          # This method may help Ruby/Tk users who don't want to modify old
          # Tcl/Tk scripts for the latest version of Ttk (Tile) extension.
          # This method defines a compatible 'LoadImages' procedure on the
          # Tcl/Tk interpreter working under Ruby/Tk.
          # Please give attention to use this method. It may conflict with
          # some definitions on Tcl/Tk scripts.
          klass_name = self.name
          proc_name = 'LoadImages'
          if Tk::Tile::USE_TTK_NAMESPACE
            ns_list = ['::tile']
            if Tk.info(:commands, "::ttk::#{proc_name}").empty?
              ns_list << '::ttk'
            end
          else # Tk::Tile::USE_TILE_NAMESPACE
            ns_list = ['::ttk']
            if Tk.info(:commands, "::tile::#{proc_name}").empty?
              ns_list << '::tile'
            end
          end

          ns_list.each{|ns|
            cmd = "#{ns}::#{proc_name}"
            unless Tk.info(:commands, cmd).empty?
              #fail RuntimeError, "can't define '#{cmd}' command (already exist)"

              # do nothing !!!
              warn "Warning: can't define '#{cmd}' command (already exist)" if $DEBUG
              next
            end
            TkNamespace.eval(ns){
              TkCore::INTERP.add_tk_procs(proc_name, 'imgdir {patterns {*.gif}}',
                                          <<-'EOS')
                foreach pattern $patterns {
                  foreach file [glob -directory $imgdir $pattern] {
                    set img [file tail [file rootname $file]]
                    if {![info exists images($img)]} {
                      set images($img) [image create photo -file $file]
                    }
                  }
                }
                return [array get images]
              EOS
            }
          }
        end

const_missing(sym) click to toggle source

    # File lib/tkextlib/tile.rb, line 39
    def self.const_missing(sym)
      TkPackage.require(PACKAGE_NAME)
    end

load_images(imgdir, pat=nil) click to toggle source

    # File lib/tkextlib/tile.rb, line 187
    def self.load_images(imgdir, pat=nil)
      if Tk::Tile::TILE_SPEC_VERSION_ID < 8
        if Tk::Tile::USE_TTK_NAMESPACE
          cmd = '::ttk::LoadImages'
        else # Tk::Tile::USE_TILE_NAMESPACE
          cmd = '::tile::LoadImages'
        end
        pat ||= TkComm::None
        images = Hash[*TkComm.simplelist(Tk.tk_call(cmd, imgdir, pat))]
        images.keys.each{|k|
          images[k] = TkPhotoImage.new(:imagename=>images[k],
                                       :without_creating=>true)
        }
      else ## TILE_SPEC_VERSION_ID >= 8
        pat ||= '*.gif'
        if pat.kind_of?(Array)
          pat_list = pat
        else
          pat_list = [ pat ]
        end
        Dir.chdir(imgdir){
          pat_list.each{|pat|
            Dir.glob(pat).each{|f|
              img = File.basename(f, '.*')
              unless TkComm.bool(Tk.info('exists', "images(#{img})"))
                Tk.tk_call('set', "images(#{img})",
                           Tk.tk_call('image', 'create', 'photo', '-file', f))
              end
            }
          }
        }
        images = Hash[*TkComm.simplelist(Tk.tk_call('array', 'get', 'images'))]
        images.keys.each{|k|
          images[k] = TkPhotoImage.new(:imagename=>images[k],
                                       :without_creating=>true)
        }
      end

      images
    end

method_missing(*args) click to toggle source

    # File lib/tkextlib/tile.rb, line 42
    def self.method_missing(*args)
      TkPackage.require(PACKAGE_NAME)
    end

package_name() click to toggle source

    # File lib/tkextlib/tile.rb, line 116
    def self.package_name
      PACKAGE_NAME
    end

package_version() click to toggle source

    # File lib/tkextlib/tile.rb, line 120
    def self.package_version
      begin
        TkPackage.require(PACKAGE_NAME)
      rescue
        ''
      end
    end

set_theme(theme) click to toggle source

    # File lib/tkextlib/tile.rb, line 250
    def self.set_theme(theme)
      if TILE_SPEC_VERSION_ID < 8 && Tk.info(:commands, '::ttk::setTheme').empty?
        cmd = '::tile::setTheme'
      else
        cmd = '::ttk::setTheme'
      end

      begin
        Tk.tk_call_without_enc(cmd, theme)
      rescue
        Tk::Tile::Style.theme_use(theme)
      end
    end

style(*args) click to toggle source

    # File lib/tkextlib/tile.rb, line 228
    def self.style(*args)
      args.map!{|arg| TkComm._get_eval_string(arg)}.join('.')
    end

themes(glob_ptn = nil) click to toggle source

    # File lib/tkextlib/tile.rb, line 232
    def self.themes(glob_ptn = nil)
      if TILE_SPEC_VERSION_ID < 8 && Tk.info(:commands, '::ttk::themes').empty?
        fail RuntimeError, 'not support glob option' if glob_ptn
        cmd = ['::tile::availableThemes']
      else
        glob_ptn = '*' unless glob_ptn
        cmd = ['::ttk::themes', glob_ptn]
      end

      begin
        TkComm.simplelist(Tk.tk_call_without_enc(*cmd))
      rescue
        TkComm.simplelist(Tk.tk_call('lsearch', '-all', '-inline',
                                     Tk::Tile::Style.theme_names,
                                     glob_ptn))
      end
    end