Update e-mail address
[pysize.git] / pysize / core / history.py
blob73573f7d857355f8059b2fe28a10e93f42794f0f
1 # This program is free software; you can redistribute it and/or modify
2 # it under the terms of the GNU General Public License as published by
3 # the Free Software Foundation; either version 2 of the License, or
4 # (at your option) any later version.
6 # This program is distributed in the hope that it will be useful,
7 # but WITHOUT ANY WARRANTY; without even the implied warranty of
8 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 # GNU Library General Public License for more details.
11 # You should have received a copy of the GNU General Public License
12 # along with this program; if not, write to the Free Software
13 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
15 # See the COPYING file for license information.
17 # Copyright (c) 2006, 2007, 2008 Guillaume Chazarain <guichaz@gmail.com>
19 from pysize.core.observable import observable
21 # [(fullpaths, name)]
22 history = []
23 next_insertion_index = 0
24 history_observable = observable()
26 def add_entry(tree):
27 global next_insertion_index
28 fp = tree.fullpaths
29 if not fp:
30 return
31 same = next_insertion_index and fp == history[next_insertion_index - 1][0]
32 if not same:
33 if next_insertion_index == len(history):
34 # History is being written
35 history.append(None)
36 else:
37 paths, name = history[next_insertion_index]
38 if fp != paths:
39 # History took another path, clear the remaining forward history
40 del history[next_insertion_index + 1:]
41 history[next_insertion_index] = fp, tree.root.get_name()
42 next_insertion_index += 1
43 history_observable.fire_observers(next_insertion_index, history)
45 def go_to_history(index):
46 global next_insertion_index
47 entry = history[index][0]
48 next_insertion_index = index + 1
49 history_observable.fire_observers(next_insertion_index, history)
50 return entry
52 def forward():
53 if len(history) > next_insertion_index:
54 return go_to_history(next_insertion_index)
56 def back():
57 if next_insertion_index > 1:
58 return go_to_history(next_insertion_index - 2)