Skip to content

Commit

Permalink
Merge pull request #1165 from alfar/develop
Browse files Browse the repository at this point in the history
Simple history back/forward navigation
  • Loading branch information
TheJackiMonster committed Jun 15, 2023
2 parents 8e298c0 + b05377b commit 4ebbf5e
Show file tree
Hide file tree
Showing 7 changed files with 339 additions and 5 deletions.
56 changes: 56 additions & 0 deletions manuskript/functions/history/History.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
from manuskript.functions.history.NavigatedEvent import NavigatedEvent
from manuskript.functions.history.Signal import Signal


class History():
def __init__(self) -> None:
self._entries = []
self._position = 0
self.navigated = Signal()
self._navigating = False

def next(self, entry):
if self._navigating:
return

while self._position < len(self._entries) - 1:
self._entries.pop()

self._entries.append(entry)
self._position = len(self._entries) - 1
self._navigating = True
self.navigated.fire(NavigatedEvent(self._position, len(self._entries), entry))
self._navigating = False


def replace(self, entry):
if self._navigating:
return

while self._position < len(self._entries):
self._entries.pop()

self._entries.append(entry)
self._position = len(self._entries) - 1
self._navigating = True
self.navigated.fire(NavigatedEvent(self._position, len(self._entries), entry))
self._navigating = False

def forward(self):
if self._position < len(self._entries) - 1:
self._position += 1
self._navigating = True
self.navigated.fire(NavigatedEvent(self._position, len(self._entries), self._entries[self._position]))
self._navigating = False

def back(self):
if self._position > 0:
self._position -= 1
self._navigating = True
self.navigated.fire(NavigatedEvent(self._position, len(self._entries), self._entries[self._position]))
self._navigating = False

def reset(self):
self._entries.clear()
self._position = 0
self.navigated.fire(NavigatedEvent(self._position, len(self._entries), None))
5 changes: 5 additions & 0 deletions manuskript/functions/history/NavigatedEvent.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class NavigatedEvent():
def __init__(self, position, count, entry) -> None:
self.position = position
self.count = count
self.entry = entry
23 changes: 23 additions & 0 deletions manuskript/functions/history/Signal.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@

class Signal():
def __init__(self) -> None:
self._methods = []

def connect(self, func):
self._methods.append(func)

def disconnect(self, func):
try:
self._methods.remove(func)
except ValueError:
raise TypeError

def disconnect(self):
if len(self._methods) == 0:
raise TypeError
self._methods.pop()

def fire(self, data):
for m in self._methods:
m(data)

Loading

0 comments on commit 4ebbf5e

Please sign in to comment.