1#!/usr/bin/env ruby 2 3require 'tk' 4require 'tkextlib/vu/dial' 5 6####################################### 7 8v_volume = TkVariable.new 9v_speed = TkVariable.new 10v_dir = TkVariable.new 11v_rot = TkVariable.new 12v_linked = TkVariable.new 13v_needle = TkVariable.new 14 15volume = Tk::Vu::Dial.new(:label=>"Volume", :from=>-0.1, :to=>0.1, 16 :resolution=>0.001, :minortickinterval=>0.01, 17 :tickinterval=>0.1, :beginangle=>-20, 18 :endangle=>260, :variable=>v_volume) 19 20speed = Tk::Vu::Dial.new(:label=>"Speed", :from=>2000, :to=>100, 21 :resolution=>10, :tickinterval=>100, 22 :minortickinterval=>0, :variable=>v_speed, 23 :showtags=>:label, :showvalue=>false) 24 25speed.set_tag_constrain(100, 'Fast', 2000, 'Slow') 26 27fwd = Tk::Vu::Dial.new(:from=>-10.0, :to=>-20.0, :resolution=>0.1, 28 :tickinterval=>5.0, :minortickinterval=>1.0, 29 :variable=>v_dir) 30 31rev = Tk::Vu::Dial.new(:from=>-20.0, :to=>-10.0, :resolution=>0.1, 32 :tickinterval=>5.0, :minortickinterval=>1.0, 33 :variable=>v_dir) 34 35small = Tk::Vu::Dial.new(:font=>"Helvetica -10", :from=>0, :to=>10, 36 :resolution=>0.05, :tickinterval=>2, 37 :minortickinterval=>0.5, :radius=>20, 38 :dialcolor=>'red2', :activebackground=>'red', 39 :variable=>v_rot) 40 41large = Tk::Vu::Dial.new(:font=>"Helvetica -8", :from=>0, :to=>10, 42 :resolution=>0.05, :tickinterval=>1, 43 :minortickinterval=>0.25, :radius=>40, 44 :dialcolor=>'red2', :activebackground=>'red', 45 :variable=>v_rot) 46 47turn = Tk::Vu::Dial.new(:needlecolor=>'red', :label=>"Linked", 48 :variable=>v_linked) 49 50scale = TkScale.new(:label=>"Linked", :variable=>v_linked) 51 52d1 = Tk::Vu::Dial.new(:resolution=>0.0001, :from=>-0.1, :to=>0.1, 53 :showvalue=>true, :minortickinterval=>0.01, 54 :tickinterval=>0.1, :radius=>30, :label=>"Dial", 55 :beginangle=>-20, :endangle=>260, :variable=>v_needle, 56 :relief=>:raised) 57 58d2 = Tk::Vu::Dial.new(:resolution=>0.01, :from=>-0.1, :to=>0.1, 59 :showvalue=>true, :minortickinterval=>0.01, 60 :tickinterval=>0.1, :radius=>30, :label=>"Dial 2", 61 :beginangle=>-20, :endangle=>260, :variable=>v_needle, 62 :dialrelief=>:flat, :needlecolor=>'red', 63 :needletype=>:triangle, :relief=>:sunken) 64 65d3 = Tk::Vu::Dial.new(:resolution=>0.001, :from=>-0.1, :to=>0.1, 66 :showvalue=>true, :minortickinterval=>0.01, 67 :tickinterval=>0.1, :radius=>30, :label=>"Dial 3", 68 :beginangle=>-20, :endangle=>260, :variable=>v_needle, 69 :dialrelief=>:flat, :needlecolor=>'blue', 70 :needletype=>:arc, :relief=>:ridge) 71 72f_btns = TkFrame.new 73f_sep = TkFrame.new(:height=>2, :relief=>:sunken, :bd=>1) 74 75 76v_volume.value = -0.1 77v_speed.value = 500 78 79update = TkTimer.new(proc{v_speed.numeric}, -1, proc{ 80 if v_volume == volume[:to] 81 v_volume.numeric = volume[:from] 82 else 83 v_volume.numeric += volume[:resolution] 84 end 85 }) 86 87b_start = TkButton.new(:text=>"Start", :command=>proc{update.start}) 88b_stop = TkButton.new(:text=>"Stop", :command=>proc{update.stop}) 89b_exit = TkButton.new(:text=>"Exit", :command=>proc{exit}) 90 91Tk.grid(b_start, :in=>f_btns, :sticky=>:ew, :padx=>4, :pady=>4) 92Tk.grid(b_stop, :in=>f_btns, :sticky=>:ew, :padx=>4, :pady=>4) 93f_btns.grid_columnconfigure(0, :weight=>1) 94 95Tk.grid(f_btns, speed, volume, :sticky=>:news) 96Tk.grid(f_sep, '-', '-', :sticky=>:news) 97Tk.grid(fwd, rev, d1, :sticky=>:news) 98Tk.grid(small, large, d2, :sticky=>:news) 99Tk.grid(turn, scale, d3, :sticky=>:news) 100 101Tk.grid(b_exit, '-', '-', :sticky=>:ew, :padx=>4, :pady=>4) 102 103Tk.root.grid_columnconfigure(0, :weight=>1) 104Tk.root.grid_columnconfigure(1, :weight=>1) 105Tk.root.grid_columnconfigure(2, :weight=>1) 106 107Tk.root.grid_rowconfigure(0, :weight=>1) 108Tk.root.grid_rowconfigure(2, :weight=>1) 109Tk.root.grid_rowconfigure(3, :weight=>1) 110Tk.root.grid_rowconfigure(4, :weight=>1) 111 112 113Tk.mainloop 114