Methods
A
C
F
H
I
K
L
M
N
P
R
S
Included Modules
Class Public methods
new(file = nil)
# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 27
def initialize(file = nil)
  @root  = TkRoot.new(:title=>'HTML File Viewer', :iconname=>'HV')
  @fswin = nil

  @html = nil
  @html_fs = nil

  @hotkey = {}

  @applet_arg = TkVarAccess.new_hash('AppletArg')

  @images   = {}
  @old_imgs = {}
  @big_imgs = {}

  @last_dir = Dir.pwd

  @last_file = ''

  @key_block = false

  Tk::HTML_Widget::ClippingWindow.bind('1',
                                       proc{|w, ksym| key_press(w, ksym)},
                                       '%W Down')
  Tk::HTML_Widget::ClippingWindow.bind('3',
                                       proc{|w, ksym| key_press(w, ksym)},
                                       '%W Up')
  Tk::HTML_Widget::ClippingWindow.bind('2',
                                       proc{|w, ksym| key_press(w, ksym)},
                                       '%W Down')

  Tk::HTML_Widget::ClippingWindow.bind('KeyPress',
                                       proc{|w, ksym| key_press(w, ksym)},
                                       '%W %K')

  ############################################
  #
  # Build the half-size view of the page
  #
  menu_spec = [
    [['File', 0],
      ['Open',        proc{sel_load()},   0],
      ['Full Screen', proc{fullscreen()}, 0],
      ['Refresh',     proc{refresh()},    0],
      '---',
      ['Exit', proc{exit}, 1]]
  ]

  mbar = @root.add_menubar(menu_spec)

  @html = Tk::HTML_Widget.new(:width=>512, :height=>384,
                              :padx=>5, :pady=>9,
                              :formcommand=>proc{|*args| form_cmd(*args)},
                              :imagecommand=>proc{|*args|
                                image_cmd(1, *args)
                              },
                              :scriptcommand=>proc{|*args|
                                script_cmd(*args)
                              },
                              :appletcommand=>proc{|*args|
                                applet_cmd(*args)
                              },
                              :hyperlinkcommand=>proc{|*args|
                                hyper_cmd(*args)
                              },
                              :fontcommand=>proc{|*args|
                                pick_font(*args)
                              },
                              :appletcommand=>proc{|*args|
                                run_applet('small', *args)
                              },
                              :bg=>'white', :tablerelief=>:raised)

  @html.token_handler('meta', proc{|*args| meta(@html, *args)})

  vscr = @html.yscrollbar(TkScrollbar.new)
  hscr = @html.xscrollbar(TkScrollbar.new)

  Tk.grid(@html, vscr, :sticky=>:news)
  Tk.grid(hscr,       :sticky=>:ew)
  @root.grid_columnconfigure(0, :weight=>1)
  @root.grid_columnconfigure(1, :weight=>0)
  @root.grid_rowconfigure(0, :weight=>1)
  @root.grid_rowconfigure(1, :weight=>0)

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

  @html.clipwin.focus

  # If an arguent was specified, read it into the HTML widget.
  #
  Tk.update
  if file && file != ""
    load_file(file)
  end
end
Instance Public methods
applet_cmd(w, arglist)

This routine is called for every <APPLET> markup

# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 229
def applet_cmd(w, arglist)
  # puts "AppletCmd: w=#{w} arglist=#{arglist}"
  #TkLabel.new(w, :text=>"The Applet #{w}", :bd=>2, :relief=>raised)
end
clear_screen()

Clear the screen.

# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 260
def clear_screen
  if @html_fs && @html_fs.exist?
    w = @html_fs
  else
    w = @html
  end
  w.clear
  @old_imgs.clear
  @big_imgs.clear
  @hotkey.clear
  @images.each{|k, v| @old_imgs[k] = v }
  @images.clear
end
form_cmd(n, cmd, *args)
# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 175
def form_cmd(n, cmd, *args)
  # p [n, cmd, *args]
end
fullscreen()

Go from window mode to full-screen mode.

# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 364
def fullscreen
  if @fswin && @fswin.exist?
    @fswin.deiconify
    Tk.update
    @fswin.raise
    return
  end

  width  =  @root.winfo_screenwidth
  height =  @root.winfo_screenheight
  @fswin = TkToplevel.new(:overrideredirect=>true,
                          :geometry=>"#{width}x#{height}+0+0")

  @html_fs = Tk::HTML_Widget.new(@fswin, :padx=>5, :pady=>9,
                                 :formcommand=>proc{|*args|
                                   form_cmd(*args)
                                 },
                                 :imagecommand=>proc{|*args|
                                   image_cmd(0, *args)
                                 },
                                 :scriptcommand=>proc{|*args|
                                   script_cmd(*args)
                                 },
                                 :appletcommand=>proc{|*args|
                                   applet_cmd(*args)
                                 },
                                 :hyperlinkcommand=>proc{|*args|
                                   hyper_cmd(*args)
                                 },
                                 :appletcommand=>proc{|*args|
                                   run_applet('big', *args)
                                 },
                                 :fontcommand=>proc{|*args|
                                   pick_font_fs(*args)
                                 },
                                 :bg=>'white', :tablerelief=>:raised,
                                 :cursor=>:tcross) {
    pack(:fill=>:both, :expand=>true)
    token_handler('meta', proc{|*args| meta(self, *args)})
  }

  clear_screen()
  @old_imgs.clear
  refresh()
  Tk.update
  @html_fs.clipwin.focus
end
fullscreen_off()

Go from full-screen mode back to window mode.

# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 351
def fullscreen_off
  @fswin.destroy
  @root.deiconify
  Tk.update
  @root.raise
  @html.clipwin.focus
  clear_screen()
  @old_imgs.clear
  refresh()
end
href_binding(w, x, y)

This binding fires when there is a click on a hyperlink

# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 236
def href_binding(w, x, y)
  lst = w.href(x, y)
  unless lst.empty?
    process_url(lst)
  end
end
hyper_cmd(*args)
# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 150
def hyper_cmd(*args)
  puts "HyperlinkCommand: #{args.inspect}"
end
image_cmd(hs, *args)
# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 188
def image_cmd(hs, *args)
  fn = args[0]

  if @old_imgs.key?(fn)
    return (@images[fn] = @old_imgs.delete(fn))
  end

  begin
    img = TkPhotoImage.new(:file=>fn)
  rescue
    return ((hs)? @@smallgray: @@biggray)
  end

  if hs
    img2 = TkPhotoImage.new
    img2.copy(img, :subsample=>[2,2])
    img.delete
    img = img2
  end

  if img.width * img.height > 20000
    b = TkPhotoImage.new(:width=>img.width, :height=>img.height)
    @big_imgs[b] = img
    img = b
    Tk.after_idle(proc{ move_big_image(b) })
  end

  @images[fn] = img

  img
end
key_press(w, keysym)
# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 414
def key_press(w, keysym)
  return if @key_block
  @key_block = true
  Tk.after(250, proc{@key_block = false})

  if @hotkey.key?(keysym)
    process_url(@hotkey[keysym])
  end
  case keysym
  when 'Escape'
    if @fswin && @fswin.exist?
      fullscreen_off()
    else
      fullscreen()
    end
  end
end
load_file(name)

Load a file into the HTML widget

# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 306
def load_file(name)
  return unless (doc = read_file(name))
  clear_screen()
  @last_file = name
  if @html_fs && @html_fs.exist?
    w = @html_fs
  else
    w = @html
  end
  w.configure(:base=>name)
  w.parse(doc)
  w.configure(:cursor=>'top_left_arrow')
  @old_imgs.clear
end
meta(w, tag, alist)

This routine is called whenever a “<meta>” markup is seen.

# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 329
def meta(w, tag, alist)
  v = Hash[*simplelist(alist)]

  if v.key?('key') && v.key?('href')
    @hotkey[v['key']] = w.resolve(v['href'])
  end

  if v.key?('next')
    @hotkey['Down'] =v['next']
  end

  if v.key?('prev')
    @hotkey['Up'] =v['prev']
  end

  if v.key?('other')
    @hotkey['o'] =v['other']
  end
end
move_big_image(b)
# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 181
def move_big_image(b)
  return unless @big_imgs.key?(b)
  b.copy(@big_imgs[b])
  @big_imgs[b].delete
  @big_imgs.delete(b)
end
pick_font(size, attrs)

A font chooser routine.

html = #pick_font

# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 128
def pick_font(size, attrs)
  # puts "FontCmd: #{size} #{attrs}"
  [ ((attrs =~ /fixed/)? 'courier': 'charter'),
    (12 * (1.2**(size.to_f - 4.0))).to_i,
    ((attrs =~ /italic/)? 'italic': 'roman'),
    ((attrs =~ /bold/)? 'bold': 'normal') ].join(' ')
end
pick_font_fs(size, attrs)

This routine is called to pick fonts for the fullscreen view.

# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 138
def pick_font_fs(size, attrs)
  baseFontSize = 24

  # puts "FontCmd: #{size} #{attrs}"
  [ ((attrs =~ /fixed/)? 'courier': 'charter'),
    (baseFontSize * (1.2**(size.to_f - 4.0))).to_i,
    ((attrs =~ /italic/)? 'italic': 'roman'),
    ((attrs =~ /bold/)? 'bold': 'normal')  ].join(' ')
end
process_url(url)

Process the given URL

# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 293
def process_url(url)
  case url[0]
  when /^file:/
    load_file(url[0][5..-1])
  when /^exec:/
    Tk.ip_eval(url[0][5..-1].tr('\', ' '))
  else
    load_file(url[0])
  end
end
read_file(name)

Read a file

# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 276
def read_file(name)
  begin
    fp = open(name, 'r')
    ret = fp.read(File.size(name))
  rescue
    ret = nil
    fp = nil
    Tk.messageBox(:icon=>'error', :message=>"fail to open '#{name}'",
                  :type=>:ok)
  ensure
    fp.close if fp
  end
  ret
end
refresh(*args)

Refresh the current file.

# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 323
def refresh(*args)
  load_file(@last_file) if @last_file
end
run_applet(size, w, arglist)

This routine is called to run an applet

# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 156
def run_applet(size, w, arglist)
  applet_arg.value = Hash[*simplelist(arglist)]

  return unless @applet_arg.key?('src')

  src = @html.remove(@applet_arg['src'])

  @applet_arg['window'] = w
  @applet_arg['fontsize'] = size

  begin
    Tk.load_tclscript(src)
  rescue => e
    puts "Applet error: #{e.message}"
  end
end
script_cmd(*args)

This routine is called for every <SCRIPT> markup

# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 223
def script_cmd(*args)
  # puts "ScriptCmd: #{args.inspect}"
end
sel_load()
# File ext/tk/sample/tkextlib/tkHTML/ss.rb, line 245
def sel_load
  filetypes = [
    ['Html Files', ['.html', '.htm']],
    ['All Files', '*']
  ]

  f = Tk.getOpenFile(:initialdir=>@last_dir, :filetypes=>filetypes)
  if f != ''
    load_file(f)
    @last_dir = File.dirname(f)
  end
end