From f201a1dce85804a7d4acde2af2b63dea795a69cc Mon Sep 17 00:00:00 2001 From: Tilman Sauerbeck Date: Sun, 21 May 2006 17:12:42 +0200 Subject: [PATCH] reworked icon handling --- bin/embrace | 57 +++++++++++++++++------------------------------------ 1 file changed, 18 insertions(+), 39 deletions(-) diff --git a/bin/embrace b/bin/embrace index 5673f88..b586afe 100755 --- a/bin/embrace +++ b/bin/embrace @@ -170,28 +170,6 @@ module Embrace end end - class FixedSizeArray < Array - def initialize(siz) - super - end - - def each - super { |item| yield item unless item.nil? } - end - - def delete_at(i) - self[i] = nil - end - - undef :push - undef :<< - undef :unshift - - undef :pop - undef :shift - undef :delete - end - class Container < Evas::Smart class ContainerError < StandardError; end class ContainerFullError < ContainerError; end @@ -207,20 +185,20 @@ module Embrace add_member(@bg) - @icons = FixedSizeArray.new(MAX_ICONS) - @about_to_add = [] + @icons = [] @animators = [] - @lock_count = 0 + @about_to_add = 0 + @add_lock_count = 0 end def each - @icons.each { |i| yield i unless i.nil? } + @icons.each { |i| yield i } end def <<(i) Kernel.raise(ContainerFullError) if slots_left.zero? - Kernel.raise(ContainerLockedError) if @lock_count > 0 + Kernel.raise(ContainerLockedError) unless @add_lock_count.zero? i.move_relative(self, 0, 0) i.slot = next_slot @@ -235,7 +213,7 @@ module Embrace movement = Main.instance.icon_height * (slots_left - 1) - @about_to_add << i + @about_to_add += 1 move_time = 0.25 * slots_left @animators << MoveAnimator.new(move_time, movement, i) @@ -244,15 +222,11 @@ module Embrace @animators.delete(ani) @icons[i.slot] = i - # FIXME check whether we can always shift the array instead - #puts "really added #{i.label} now (slot #{i.slot})" - @about_to_add.delete(i) + @about_to_add -= 1 end end def delete(icon) - # icons that are placed above the one that's deleted need - # to be moved i = @icons.index(icon) return (block_given? ? yield : nil) if i.nil? @@ -260,18 +234,23 @@ module Embrace end def delete_at(i) + Kernel.raise(ContainerLockedError) unless @about_to_add.zero? + + # icons that are placed above the one that's deleted need + # to be moved + ar = @icons[(i + 1)..-1] + @icons[i].delete @icons.delete_at(i) - ar = @icons[i..-1].reject { |i| i.nil? } - return if ar.nil? + return if ar.empty? - @lock_count += 1 + @add_lock_count += 1 @animators << MoveAnimator.new(2, Main.instance.icon_height, *ar) @animators.last.on_finished do |ani| @animators.delete(ani) - @lock_count -= 1 + @add_lock_count -= 1 end end @@ -299,11 +278,11 @@ module Embrace private def slots_left - MAX_ICONS - @icons.nitems - @about_to_add.length + MAX_ICONS - @icons.nitems - @about_to_add end def next_slot - @icons.nitems + @about_to_add.length + @icons.nitems + @about_to_add end end -- 2.30.2