Пример #1
0
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()
Пример #2
0
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()