class Document(object): def __init__(self, storage, storageData): self.storage = storage self.storageData = storageData self.pages = storage.loadPages(storageData) self._manager = CommandManager(config.UNDO_HISTORY_SIZE) def __len__(self): return len(self.pages) def __getitem__(self, key): return self.pages[key] def findItemByPoint(self, page, itemType, point): if isinstance(page, int): page = self[page] return page.findItem(itemType, lambda item: item.bounds.containsPoint(point)) def merge(self, page, itemType, bounds): if isinstance(page, int): page = self[page] page.flagByBounds(itemType, bounds.intersects) page.merge(itemType, self._manager) if self._manager.commit(): Publisher().sendMessage('DOCUMENT_CHANGE') def cutout(self, page, itemType, bounds): if isinstance(page, int): page = self[page] page.flagByBounds(itemType - 1, bounds.intersects) page.cutout(itemType, self._manager) if self._manager.commit(): Publisher().sendMessage('DOCUMENT_CHANGE') def cutout2(self, pagenb, itemType, bounds): self.pages[pagenb].flagByBounds(itemType - 1, bounds.intersects) self.pages[pagenb]._cutout2(itemType, self._manager) if self._manager.commit(): Publisher().sendMessage('DOCUMENT_CHANGE') def atomize(self, page, itemType, bounds): if isinstance(page, int): page = self[page] page.flagByBounds(itemType, bounds.intersects) page.atomize(itemType, self._manager) if self._manager.commit(): Publisher().sendMessage('DOCUMENT_CHANGE') def smartSplitWords(self, page, bounds): if isinstance(page, int): page = self[page] page.flagByBounds(constants.WORD, bounds.intersects) page.smartSplitWords(self._manager) if self._manager.commit(): Publisher().sendMessage('DOCUMENT_CHANGE') def changeLabel(self, zone, label): zone.setLabel(label, self._manager) if self._manager.commit(): Publisher().sendMessage('DOCUMENT_CHANGE') def changeLabels(self, page, bounds, label): if isinstance(page, int): page = self[page] for zone in page.iterItems(constants.ZONE, lambda item: bounds.intersects(item.bounds)): zone.setLabel(label, self._manager) if self._manager.commit(): Publisher().sendMessage('DOCUMENT_CHANGE') def canUndo(self): return self._manager.canUndo() def undo(self): if self._manager.undo(): Publisher().sendMessage('DOCUMENT_CHANGE') def canRedo(self): return self._manager.canRedo() def redo(self): if self._manager.redo(): Publisher().sendMessage('DOCUMENT_CHANGE') def isModified(self): """ Returns true if the document has been modified since last save and false otherwise. """ return not self._manager.isClean() def save(self, *args, **kwargs): self.storage.savePages(self.pages, self.storageData, *args, **kwargs) self._manager.clean()
class Document(object): def __init__(self, storage, storageData): self.storage = storage self.storageData = storageData self.pages = storage.loadPages(storageData) self._manager = CommandManager(config.UNDO_HISTORY_SIZE) def __len__(self): return len(self.pages) def __getitem__(self, key): return self.pages[key] def findItemByPoint(self, page, itemType, point): if isinstance(page, int): page = self[page] return page.findItem(itemType, lambda item: item.bounds.containsPoint(point)) def merge(self, page, itemType, bounds): if isinstance(page, int): page = self[page] page.flagByBounds(itemType, bounds.intersects) page.merge(itemType, self._manager) if self._manager.commit(): Publisher().sendMessage('DOCUMENT_CHANGE') def cutout(self, page, itemType, bounds): if isinstance(page, int): page = self[page] page.flagByBounds(itemType - 1, bounds.intersects) page.cutout(itemType, self._manager) if self._manager.commit(): Publisher().sendMessage('DOCUMENT_CHANGE') def cutout2(self, pagenb, itemType, bounds): self.pages[pagenb].flagByBounds(itemType - 1, bounds.intersects) self.pages[pagenb]._cutout2(itemType, self._manager) if self._manager.commit(): Publisher().sendMessage('DOCUMENT_CHANGE') def atomize(self, page, itemType, bounds): if isinstance(page, int): page = self[page] page.flagByBounds(itemType, bounds.intersects) page.atomize(itemType, self._manager) if self._manager.commit(): Publisher().sendMessage('DOCUMENT_CHANGE') def smartSplitWords(self, page, bounds): if isinstance(page, int): page = self[page] page.flagByBounds(constants.WORD, bounds.intersects) page.smartSplitWords(self._manager) if self._manager.commit(): Publisher().sendMessage('DOCUMENT_CHANGE') def changeLabel(self, zone, label): zone.setLabel(label, self._manager) if self._manager.commit(): Publisher().sendMessage('DOCUMENT_CHANGE') def changeLabels(self, page, bounds, label): if isinstance(page, int): page = self[page] for zone in page.iterItems( constants.ZONE, lambda item: bounds.intersects(item.bounds)): zone.setLabel(label, self._manager) if self._manager.commit(): Publisher().sendMessage('DOCUMENT_CHANGE') def canUndo(self): return self._manager.canUndo() def undo(self): if self._manager.undo(): Publisher().sendMessage('DOCUMENT_CHANGE') def canRedo(self): return self._manager.canRedo() def redo(self): if self._manager.redo(): Publisher().sendMessage('DOCUMENT_CHANGE') def isModified(self): """ Returns true if the document has been modified since last save and false otherwise. """ return not self._manager.isClean() def save(self, *args, **kwargs): self.storage.savePages(self.pages, self.storageData, *args, **kwargs) self._manager.clean()