Sha256: 4f5756e063386a9ad3295d11c61b9a94a27ee09faf530143354a44e4146cf3a4

Contents?: true

Size: 892 Bytes

Versions: 21

Compression:

Stored size: 892 Bytes

Contents

module Redwood

## Implements a single undo list for the Sup instance
##
## The basic idea is to keep a list of lambdas to undo
## things. When an action is called (such as 'archive'),
## a lambda is registered with UndoManager that will
## undo the archival action

class UndoManager
  include Singleton

  def initialize
    @@actionlist = []
  end

  def register desc, *actions, &b
    actions = [*actions.flatten]
    actions << b if b
    raise ArgumentError, "need at least one action" unless actions.length > 0
    @@actionlist.push :desc => desc, :actions => actions
  end

  def undo
    unless @@actionlist.empty?
      actionset = @@actionlist.pop
      actionset[:actions].each { |action| action.call }
      BufferManager.flash "undid #{actionset[:desc]}"
    else
      BufferManager.flash "nothing more to undo!"
    end
  end

  def clear
    @@actionlist = []
  end
end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
sup-0.16.0 lib/sup/undo.rb
sup-0.15.4 lib/sup/undo.rb
sup-0.15.3 lib/sup/undo.rb
sup-0.15.2 lib/sup/undo.rb
sup-0.15.1 lib/sup/undo.rb
sup-0.15.0 lib/sup/undo.rb
sup-0.14.1.1 lib/sup/undo.rb
sup-0.13.2.1 lib/sup/undo.rb
sup-0.14.1 lib/sup/undo.rb
sup-0.14.0 lib/sup/undo.rb
sup-0.13.2 lib/sup/undo.rb
sup-0.13.1 lib/sup/undo.rb
sup-0.13.0 lib/sup/undo.rb
sup-0.12.1 lib/sup/undo.rb
sup-0.12 lib/sup/undo.rb
sup-0.11 lib/sup/undo.rb
sup-0.10.2 lib/sup/undo.rb
sup-0.10.1 lib/sup/undo.rb
sup-0.10 lib/sup/undo.rb
sup-0.9.1 lib/sup/undo.rb