class TkWidgetFactory

require ‘tkextlib/tile’ Tk.tk_call “eval”,“ttk::setTheme clam” Tk::Tile::Style.theme_use(‘clam’)

Public Class Methods

new() click to toggle source
# File lib/a-tkcommons.rb, line 2218
def initialize
  if Arcadia.conf('tile.theme')
    @use_tile = true
    begin
      require 'tkextlib/tile'
      if Tk::Tile::Style.theme_names.include?(Arcadia.conf('tile.theme'))
        Tk::Tile::Style.theme_use(Arcadia.conf('tile.theme'))
      end
    rescue
      @use_tile = false
    end
    initialize_tile_widgets if @use_tile
  end
end

Public Instance Methods

button(_parent,_args={}, &b) click to toggle source
# File lib/a-tkcommons.rb, line 2579
def button(_parent,_args={}, &b)
  begin
    if @use_tile
      obj = Tk::Tile::Button.new(_parent,{:style=>"Arcadia.TButton"}.update(_args), &b)
    else
      obj = TkButton.new(_parent,Arcadia.style('button').update(_args), &b)
    end
    class << obj
      include WidgetEnhancer
    end
    return obj
  rescue RuntimeError => e
    Arcadia.runtime_error(e) 
    return nil
  end
end
checkbutton(_parent, _args={}, &b) click to toggle source
# File lib/a-tkcommons.rb, line 2698
def checkbutton(_parent, _args={}, &b)
  begin
    if @use_tile
      obj = Tk::Tile::Checkbutton.new(_parent,{:style=>"Arcadia.TCheckbutton"}.update(_args), &b)
    else
      obj = TkCheckbutton.new(_parent,Arcadia.style('checkbox').update(_args), &b)
    end
    class << obj
      include WidgetEnhancer
    end
    return obj
  rescue RuntimeError => e
    Arcadia.runtime_error(e) 
    return nil
  end
end
combobox(_parent,_args={}, &b) click to toggle source
# File lib/a-tkcommons.rb, line 2647
def combobox(_parent,_args={}, &b)
  begin
    if @use_tile
      obj = Tk::Tile::Combobox.new(_parent,{:style=>"Arcadia.TCombobox"}.update(_args), &b)
    else
      obj = Tk::BWidget::ComboBox.new(_parent, Arcadia.style('combobox').update(_args), &b)
    end
    class << obj
      include WidgetEnhancer
    end
    return obj
  rescue RuntimeError => e
    Arcadia.runtime_error(e) 
    return nil
  end
end
entry(_parent,_args={}, &b) click to toggle source
# File lib/a-tkcommons.rb, line 2545
def entry(_parent,_args={}, &b)
  begin
    if @use_tile
      obj = Tk::Tile::TEntry.new(_parent,{:style=>"Arcadia.TEntry"}.update(_args), &b)
    else
      obj = TkEntry.new(_parent,Arcadia.style('edit').update(_args), &b)
    end
    class << obj
      include WidgetEnhancer
    end
    return obj
  rescue RuntimeError => e
    Arcadia.runtime_error(e) 
    return nil
  end
end
frame(_parent,_args={}, &b) click to toggle source
# File lib/a-tkcommons.rb, line 2510
def frame(_parent,_args={}, &b)
  begin
    if @use_tile
      obj = Tk::Tile::TFrame.new(_parent,{:style=>"Arcadia.TFrame"}.update(_args), &b)
    else
      obj = TkFrame.new(_parent,Arcadia.style('panel').update(_args), &b)
    end
    class << obj
      include WidgetEnhancer
    end
    return obj
  rescue RuntimeError => e
    Arcadia.runtime_error(e) 
    return nil
  end
end
initialize_tile_widgets() click to toggle source
# File lib/a-tkcommons.rb, line 2233
  def initialize_tile_widgets
  
    #Widget state flags include:
    #active,disabled,focus,pressed,selected,background,readonly,alternate,invalid,hover
  
         # Workaround for #1100117:
    # Actually, on Aqua we probably shouldn't stipple images in
    # disabled buttons even if it did work...
    # don't work with Cocoa
    Tk.tk_call("eval","ttk::style configure . -stipple {}") if OS.mac?
  
    #TScrollbar
    Tk::Tile::Style.configure("Arcadia.TScrollbar", Arcadia.style('scrollbar'))
    Tk::Tile::Style.map("Arcadia.TScrollbar",
    :background=>[:pressed, Arcadia.style('scrollbar')['activebackground'], :disabled, Arcadia.style('scrollbar')['background'], :active, Arcadia.style('scrollbar')['activebackground']],
    :arrowcolor=>[:pressed, Arcadia.style('scrollbar')['background'], :disabled, Arcadia.style('scrollbar')['highlightbackground'], :active, Arcadia.style('scrollbar')['background']],
    :relief=>[:pressed, :sunken])

    Tk::Tile::Style.layout(Tk::Tile.style('Vertical', "Arcadia.TScrollbar"),
    ["Scrollbar.trough",{:sticky=>"nsew", :children=>[
      "Scrollbar.uparrow",{:side=>:top, :sticky=>"we"},
      "Scrollbar.downarrow", {:side=>:bottom, :sticky=>"we"},
    "Scrollbar.thumb", {:sticky=>"nswe",:side=>:top, :border =>1, :expand=>true}]}])

    Tk::Tile::Style.layout(Tk::Tile.style('Horizontal', "Arcadia.TScrollbar"),
    ['Scrollbar.trough', {:children=>[
      'Scrollbar.leftarrow',   {:side=>:left},
      'Scrollbar.rightarrow', {:side=>:right},
    'Scrollbar.thumb',  {:side=>:left, :expand=>true}]}])

    #TFrame
    #Tk::Tile::Style.configure(Tk::Tile::TFrame, Arcadia.style('panel'))

    #TPaned
    #Tk::Tile::Style.configure(Tk::Tile::TPaned, Arcadia.style('panel'))

    #TEntry
    #Tk::Tile::Style.configure(Tk::Tile::TEntry, Arcadia.style('edit'))

    #TCombobox
    #Tk::Tile::Style.configure(Tk::Tile::TCombobox, Arcadia.style('combobox'))

    #TLabel
    #Tk::Tile::Style.configure(Tk::Tile::TLabel, Arcadia.style('label'))


    #Treeview
    #Tk::Tile::Style.configure(Tk::Tile::Treeview, Arcadia.style('treepanel'))

    #TMenubutton
    Tk::Tile::Style.element_create('Arcadia.Menubutton.indicator', 
                                   :image, Arcadia.image_res(DROP_DOWN_ARROW_GIF),
                                   :sticky=>:w)    

    Tk::Tile::Style.configure("Arcadia.TMenubutton", Arcadia.style('menubutton').update(
      'padding'=>"0 0 0 0", 
      'width'=>0
      )
    )

    Tk::Tile::Style.map("Arcadia.TMenubutton",
    :background=>[:pressed, Arcadia.style('menubutton')['activebackground'], :disabled, Arcadia.style('menubutton')['background'], :active, Arcadia.style('menubutton')['activebackground']],
    :arrowcolor=>[:pressed, Arcadia.style('menubutton')['background'], :disabled, Arcadia.style('menubutton')['highlightbackground'], :active, Arcadia.style('menubutton')['background']],
    :relief=>[:pressed, :flat])
    Tk::Tile::Style.layout('Arcadia.TMenubutton', [
        'Menubutton.border', {:children=>[
             'Menubutton.padding', {:children=>[
                  'Arcadia.Menubutton.indicator', {:side=>:right}, 
                  'Menubutton.focus', {:side=>:left, :children=>['Menubutton.label']}
             ]}
        ]}
    ])

    #Title.TMenubutton
    #
    Tk::Tile::Style.configure("Arcadia.Title.TMenubutton", Arcadia.style('titlelabel').update(
      'padding'=>"0 0 0 0", 
      'font'=>Arcadia.conf('titlelabel.font'), 
      'width'=>0,
      'foreground' => Arcadia.conf('titlelabel.foreground'),
      )
    )
    Tk::Tile::Style.map("Arcadia.Title.TMenubutton",
    :background=>[:pressed, Arcadia.style('titlelabel')['activebackground'], :disabled, Arcadia.style('titlelabel')['background'], :active, Arcadia.style('titlelabel')['activebackground']],
    :arrowcolor=>[:pressed, Arcadia.style('titlelabel')['background'], :disabled, Arcadia.style('titlelabel')['highlightbackground'], :active, Arcadia.style('titlelabel')['background']],
    :relief=>[:pressed, :flat])
    Tk::Tile::Style.layout('Arcadia.Title.TMenubutton', [
        'Menubutton.border', {:children=>[
             'Menubutton.padding', {:children=>[
                  'Arcadia.Menubutton.indicator', {:side=>:right}, 
                  'Menubutton.focus', {:side=>:left, :children=>['Menubutton.label']}
             ]}
        ]}
    ])

    #Title.Context.TMenubutton
    #
    Tk::Tile::Style.configure("Arcadia.Title.Context.TMenubutton", Arcadia.style('titlelabel').update(
      'padding'=>"0 0 0 0", 
      'font'=>"#{Arcadia.conf('titlelabel.font')} italic", 
      'width'=>0,
      'foreground' => Arcadia.conf('titlecontext.foreground'),
      )
    )
    Tk::Tile::Style.map("Arcadia.Title.Context.TMenubutton",
    :background=>[:pressed, Arcadia.style('titlelabel')['activebackground'], :disabled, Arcadia.style('titlelabel')['background'], :active, Arcadia.style('titlelabel')['activebackground']],
    :arrowcolor=>[:pressed, Arcadia.style('titlelabel')['background'], :disabled, Arcadia.style('titlelabel')['highlightbackground'], :active, Arcadia.style('titlelabel')['background']],
    :relief=>[:pressed, :flat])
    Tk::Tile::Style.layout('Arcadia.Title.Context.TMenubutton', [
        'Menubutton.border', {:children=>[
             'Menubutton.padding', {:children=>[
                  'Arcadia.Menubutton.indicator', {:side=>:right}, 
                  'Menubutton.focus', {:side=>:left, :children=>['Menubutton.label']}
             ]}
        ]}
    ])
    
    
    #TCheckbutton,

    Tk::Tile::Style.element_create('Arcadia.Checkbutton.indicator', 
                                   :image, Arcadia.image_res(CHECKBOX_0_DARK_GIF),
                                   :map=>[
                                     [:pressed, :selected],Arcadia.image_res(CHECKBOX_1_DARK_GIF),
                                     :pressed,             Arcadia.image_res(CHECKBOX_0_DARK_GIF),
                                     [:active, :selected], Arcadia.image_res(CHECKBOX_2_DARK_GIF),
                                     :active,              Arcadia.image_res(CHECKBOX_0_DARK_GIF),
                                     :selected,            Arcadia.image_res(CHECKBOX_1_DARK_GIF),
                                   ], :sticky=>:w)  

    Tk::Tile::Style.configure("Arcadia.TCheckbutton", Arcadia.style('checkbox').update(
        'padding'=>"0 0 0 0", 
        'width'=>0
        )
      )
    
    Tk::Tile::Style.layout('Arcadia.TCheckbutton', [
        'Checkbutton.background', # this is not needed in tile 0.5 or later
        'Checkbutton.border', {:children=>[
             'Checkbutton.padding', {:children=>[
                  'Arcadia.Checkbutton.indicator', {:side=>:left}, 
                  'Checkbutton.focus', {:side=>:left, :children=>[
                      'Checkbutton.label'
                  ]}
             ]}
        ]}
    ])    

                                   
    Tk::Tile::Style.configure("Arcadia.Title.TCheckbutton", Arcadia.style('titlelabel').update(
        'padding'=>"0 0 0 0", 
        'width'=>0
        )
      )
    
    Tk::Tile::Style.layout('Arcadia.Title.TCheckbutton', [
        'Checkbutton.background', # this is not needed in tile 0.5 or later
        'Checkbutton.border', {:children=>[
             'Checkbutton.padding', {:children=>[
                  'Arcadia.Checkbutton.indicator', {:side=>:left}, 
                  'Checkbutton.focus', {:side=>:left, :children=>[
                      'Checkbutton.label'
                  ]}
             ]}
        ]}
    ])    
    
    #Combobox
    

    Tk::Tile::Style.element_create('Arcadia.Combobox.indicator', 
                                   :image, Arcadia.image_res(DROP_DOWN_ARROW_GIF),
                                   :sticky=>:w)    

    Tk::Tile::Style.configure("Arcadia.TCombobox", Arcadia.style('combobox').update(
      'padding'=>"0 0 0 0", 
      'width'=>0
     # 'borderwidth'=>1,
     # 'relief'=>'groove'
      )
    )

#    Tk::Tile::Style.map("Arcadia.TCombobox",
#    :relief=>[:pressed, :flat])
    
    Tk::Tile::Style.layout('Arcadia.TCombobox', [
        'Combobox.border', {:children=>[
             'Combobox.padding', {:children=>[
                  'Arcadia.Combobox.indicator', {:side=>:right}, 
                  'Combobox.focus', {:side=>:left, :children=>['Combobox.label']}
             ]}
        ]}
    ])


    #TFrame
    Tk::Tile::Style.configure("Arcadia.TFrame", Arcadia.style('panel'))



    #Tk::Tile::Style.configure(Tk::Tile::TLabel, Arcadia.style('label'))
    #TLabel
    Tk::Tile::Style.configure("Arcadia.TLabel", Arcadia.style('label'))


    #TEntry
    Tk::Tile::Style.layout("Arcadia.TEntry", [
        'Entry.border', { :sticky => 'nswe', :border => 1, 
              :children =>  ['Entry.padding',  { :sticky => 'nswe', 
                      :children => [ 'Entry.textarea',  { :sticky => 'nswe' } ] }] } ])
    
    
    Tk::Tile::Style.configure("Arcadia.TEntry", Arcadia.style('edit').update(
         'fieldbackground' => Arcadia.style('edit')['background'],
         'selectbackground' => 'red',
         'selectforeground' => 'yellow'
       )
    )
  
    #TText
    Tk::Tile::Style.configure("Arcadia.TText", Arcadia.style('text'))


    #TButton
    Tk::Tile::Style.configure("Arcadia.TButton", Arcadia.style('button').update(
      'padding'=>"0 0 0 0"
#      ,
#      'borderwidth'=>1,
#      'relief'=>'groove'
      )
    )
    Tk::Tile::Style.map("Arcadia.TButton",
    :background=>[:pressed, Arcadia.style('button')['activebackground'], :disabled, Arcadia.style('button')['background'], :active, Arcadia.style('button')['activebackground']],
    :foreground=>[:pressed, Arcadia.style('button')['activeforeground'], :disabled, Arcadia.style('button')['foreground'], :active, Arcadia.style('button')['activeforeground']],
    :relief=>[:pressed, :sunken])

    #Tool.TButton
    Tk::Tile::Style.configure("Arcadia.Tool.TButton", Arcadia.style('toolbarbutton').update(
      'padding'=>"0 0 0 0",
      'anchor'=>'w' 
      )
    )
    Tk::Tile::Style.map("Arcadia.Tool.TButton",
    :background=>[:pressed, Arcadia.style('button')['activebackground'], :disabled, Arcadia.style('toolbarbutton')['background'], :active, Arcadia.style('toolbarbutton')['activebackground']],
    :arrowcolor=>[:pressed, Arcadia.style('button')['background'], :disabled, Arcadia.style('toolbarbutton')['highlightbackground'], :active, Arcadia.style('toolbarbutton')['background']],
    :relief=>[:pressed, :sunken])

    #Title.Tool.TButton
    Tk::Tile::Style.configure("Arcadia.Title.Tool.TButton", Arcadia.style('titletoolbarbutton').update(
      'padding'=>"0 0 0 0" 
      )
    )
    Tk::Tile::Style.map("Arcadia.Title.Tool.TButton",
    :background=>[:pressed, Arcadia.style('button')['activebackground'], :disabled, Arcadia.style('titletoolbarbutton')['background'], :active, Arcadia.style('toolbarbutton')['activebackground']],
    :arrowcolor=>[:pressed, Arcadia.style('button')['background'], :disabled, Arcadia.style('titletoolbarbutton')['highlightbackground'], :active, Arcadia.style('toolbarbutton')['background']],
    :relief=>[:pressed, :sunken])
    
  end
label(_parent,_args={}, &b) click to toggle source
# File lib/a-tkcommons.rb, line 2528
def label(_parent,_args={}, &b)
  begin
    if @use_tile
      obj = Tk::Tile::TLabel.new(_parent,{:style=>"Arcadia.TLabel"}.update(_args), &b)
    else
      obj = TkLabel.new(_parent,Arcadia.style('label').update(_args), &b)
    end
    class << obj
      include WidgetEnhancer
    end
    return obj
  rescue RuntimeError => e
    Arcadia.runtime_error(e) 
    return nil
  end
end
menu(_parent,_args={}, &b) click to toggle source
menubutton(_parent,_args={}, &b) click to toggle source
scrollbar(_parent,_args={}, &b) click to toggle source
# File lib/a-tkcommons.rb, line 2494
def scrollbar(_parent,_args={}, &b)
  begin
    if @use_tile
      obj = Tk::Tile::Scrollbar.new(_parent,{:style=>"Arcadia.TScrollbar"}.update(_args), &b)
    else
      obj = TkScrollbar.new(_parent,Arcadia.style('scrollbar').update(_args), &b)
    end
    class << obj
      include WidgetEnhancer
    end
    return obj
  rescue RuntimeError => e
    Arcadia.runtime_error(e) 
  end
end
text(_parent,_args={}, &b) click to toggle source
# File lib/a-tkcommons.rb, line 2562
  def text(_parent,_args={}, &b)
    begin
#      if @use_tile
#        obj = Tk::Tile::Text.new(_parent,{:style=>"Arcadia.TText"}.update(_args), &b)
#      else
        obj = TkText.new(_parent,Arcadia.style('text').update(_args), &b)
#      end
      class << obj
        include WidgetEnhancer
      end
      return obj
    rescue RuntimeError => e
      Arcadia.runtime_error(e) 
      return nil
    end
  end
titlecontextcheckbutton(_parent, _args={}, &b) click to toggle source
# File lib/a-tkcommons.rb, line 2715
def titlecontextcheckbutton(_parent, _args={}, &b)
  begin
    if @use_tile
      obj = Tk::Tile::Checkbutton.new(_parent,{:style=>"Arcadia.Title.TCheckbutton"}.update(_args), &b)
    else
      obj = TkCheckbutton.new(_parent,Arcadia.style('checkbox').update(_args), &b)
    end
    class << obj
      include WidgetEnhancer
    end
    return obj
  rescue RuntimeError => e
    Arcadia.runtime_error(e) 
    return nil
  end
end
titlecontextmenubutton(_parent, _args={}, &b) click to toggle source
# File lib/a-tkcommons.rb, line 2681
def titlecontextmenubutton(_parent, _args={}, &b)
  begin
    if @use_tile
      obj = Tk::Tile::Menubutton.new(_parent,{:style=>"Arcadia.Title.Context.TMenubutton"}.update(_args), &b)
    else
      obj = TkMenuButton.new(_parent,Arcadia.style('menubutton').update(_args), &b)
    end
    class << obj
      include WidgetEnhancer
    end
    return obj
  rescue RuntimeError => e
    Arcadia.runtime_error(e) 
    return nil
  end
end
titlemenu(_parent,_args={}, &b) click to toggle source
# File lib/a-tkcommons.rb, line 2746
def titlemenu(_parent,_args={}, &b)
  begin
    obj = TkMenu.new(_parent, &b)
    if !OS.mac?
      obj.configure(Arcadia.style('titlemenu').update(_args))
      obj.extend(TkAutoPostMenu)
    end
    return obj
  rescue RuntimeError => e
    Arcadia.runtime_error(e) 
    return nil
  end
end
titlemenubutton(_parent, _args={}, &b) click to toggle source
# File lib/a-tkcommons.rb, line 2664
def titlemenubutton(_parent, _args={}, &b)
  begin
    if @use_tile
      obj = Tk::Tile::Menubutton.new(_parent,{:style=>"Arcadia.Title.TMenubutton"}.update(_args), &b)
    else
      obj = TkMenuButton.new(_parent,Arcadia.style('menubutton').update(_args), &b)
    end
    class << obj
      include WidgetEnhancer
    end
    return obj
  rescue RuntimeError => e
    Arcadia.runtime_error(e) 
    return nil
  end
end
titletoolbutton(_parent,_args={}, &b) click to toggle source
# File lib/a-tkcommons.rb, line 2613
def titletoolbutton(_parent,_args={}, &b)
  begin
    if @use_tile
      obj = Tk::Tile::Button.new(_parent,{:style=>"Arcadia.Title.Tool.TButton"}.update(_args), &b)
    else
      obj = TkButton.new(_parent,Arcadia.style('toolbarbutton').update(_args), &b)
    end
    class << obj
      include WidgetEnhancer
    end
    return obj
  rescue RuntimeError => e
    Arcadia.runtime_error(e) 
    return nil
  end
end
toolbutton(_parent,_args={}, &b) click to toggle source
# File lib/a-tkcommons.rb, line 2596
def toolbutton(_parent,_args={}, &b)
  begin
    if @use_tile
      obj = Tk::Tile::Button.new(_parent,{:style=>"Arcadia.Tool.TButton"}.update(_args), &b)
    else
      obj = TkButton.new(_parent,Arcadia.style('toolbarbutton').update(_args), &b)
    end
    class << obj
      include WidgetEnhancer
    end
    return obj
  rescue RuntimeError => e
    Arcadia.runtime_error(e) 
    return nil
  end
end