#class Bar # def initialize( text = '' ) # @text = text # @text_prefix = nil # @max = 0 # @done = 0 # @counter = 0 # @thread = nil # @update_proc = nil # Fm.bar_add(self) # end # # def kill(evil = true) # Fm.bar_del(self) # Fm.force_update # # @thread.kill # end # # def update(&block) # if block # @update_proc = block # elsif @update_proc # @update_proc.call(self) # end # end # # def set_text_prefix(text) # @text_prefix = text # end # def set_text(text) # @text_prefix = nil # @text = text # end # alias text= set_text # # attr_accessor :thread, :counter, :max #end # #class CopyBar < Bar # def initialize( text = '' ) # super # # @update_proc = proc do |b| # begin # b.done = File.size(fname).to_f / finished # rescue # b.done = 0 # end # end # end #end class Bar2 def kill(evil = true) Fm.bar_del(self) Fm.force_update @thread.kill end def set_text_prefix(text) @text_prefix = text end def set_text(text) @text_prefix = nil @text = text end alias text= set_text attr_accessor :thread, :counter, :max def done if @counter.is_a? MutableNumber @counter.value.to_f / @max else 0 end end def update() end def text if @text_prefix "#{@text_prefix} #{(@counter.value.to_f * 10000/ @max).round.to_f/100}%" elsif @text @text else "" end end end class CopyOrMoveBar < Bar2 def initialize(files, path) path = path.path unless path.is_a? String Fm.bar_add(self) log([files, path]) @thread = Thread.new do begin for file in files file = file.path unless file.is_a? String if File.exists?(file) run_operation(file, path) end end rescue log $! log $!.backtrace ensure kill(false) end end @thread.priority = Fm::COPY_PRIORITY end end class CopyBar2 < CopyOrMoveBar def run_operation(file, path) if File.directory?(file) FileUtils.cp_r_in_bar(self, file, path) else FileUtils.cp_in_bar(self, file, path) end end end class MoveBar2 < CopyOrMoveBar def run_operation(file, path) FileUtils.mv_in_bar(self, file, path) end end