def docRead(self, readWrite, handle): stat = Connector().stat(self.rev()) uti = stat.type() if readWrite: linkMap = None else: linkMap = stat.linkMap() if uti in DictModel.UTIs: model = DictModel(linkMap, self) elif uti in SetModel.UTIs: model = SetModel(linkMap, self) else: raise TypeError('Unhandled type code: %s' % (uti)) self.__setModel(model) if self.__settings: self.__applySettings(self.__settings) model.rowsInserted.connect(self._emitSaveNeeded) model.rowsRemoved.connect(self._emitSaveNeeded) model.dataChanged.connect(self.__dataChanged) model.modelReset.connect(self.__dataChanged) model.modelReset.connect(lambda: self.selectionChanged.emit()) self.listView.selectionModel().selectionChanged.connect( lambda: self.selectionChanged.emit()) autoClean = self.metaDataGetField(CollectionModel.AUTOCLEAN, False) model.doLoad(handle, readWrite, autoClean) if model.hasChanged(): self._emitSaveNeeded()
def __init__(self, revs, parent=None): super(RevisionTab, self).__init__(parent) layout = QtGui.QGridLayout() layout.addWidget(QtGui.QLabel("Type:"), 1, 0) layout.addWidget(QtGui.QLabel("Modification time:"), 2, 0) layout.addWidget(QtGui.QLabel("Size:"), 3, 0) layout.addWidget(QtGui.QLabel("Stores:"), 4, 0) col = 1 for rev in revs: stat = Connector().stat(rev) layout.addWidget(RevButton(rev, True), 0, col) layout.addWidget(QtGui.QLabel(Registry().getDisplayString(stat.type())), 1, col) layout.addWidget(QtGui.QLabel(str(stat.mtime())), 2, col) size = 0 for part in stat.parts(): size += stat.size(part) for unit in ["Bytes", "KiB", "MiB", "GiB"]: if size < (1 << 10): break else: size = size >> 10 sizeText = "%d %s (%d parts)" % (size, unit, len(stat.parts())) layout.addWidget(QtGui.QLabel(sizeText), 3, col) storeLayout = QtGui.QVBoxLayout() for store in Connector().lookup_rev(rev): storeLayout.addWidget(DocButton(store, True)) layout.addLayout(storeLayout, 4, col) col += 1 self.setLayout(layout)
def update(self): # reset everything self.__valid = False self.__icon = None for i in xrange(len(self.__columnDefs)): column = self.__columnDefs[i] if column.derived(): self.__columnValues[i] = column.default() # determine revision needMerge = False if isinstance(self.__link, struct.DocLink): self.__link.update() revisions = self.__link.revs() if len(revisions) == 0: return elif len(revisions) > 1: needMerge = True # TODO: maybe sort by date rev = revisions[0] else: rev = self.__link.rev() self.__rev = rev # stat try: s = Connector().stat(rev) except IOError: return self.__uti = s.type() if needMerge: image = QtGui.QImage(Registry().getIcon(s.type())) painter = QtGui.QPainter() painter.begin(image) painter.drawImage(0, 0, QtGui.QImage("icons/uti/merge_overlay.png")) painter.end() self.__icon = QtGui.QIcon(QtGui.QPixmap.fromImage(image)) else: self.__icon = QtGui.QIcon(Registry().getIcon(s.type())) # overwritable by external files? self.__replacable = (not needMerge) and (not Registry().conformes( self.__uti, "org.hotchpotch.container")) self.__valid = True self.__updateColumns()
def update(self): # reset everything self.__valid = False self.__icon = None for i in xrange(len(self.__columnDefs)): column = self.__columnDefs[i] if column.derived(): self.__columnValues[i] = column.default() # determine revision needMerge = False if isinstance(self.__link, struct.DocLink): self.__link.update() revisions = self.__link.revs() if len(revisions) == 0: return elif len(revisions) > 1: needMerge = True # TODO: maybe sort by date rev = revisions[0] else: rev = self.__link.rev() self.__rev = rev # stat try: s = Connector().stat(rev) except IOError: return self.__uti = s.type() if needMerge: image = QtGui.QImage(Registry().getIcon(s.type())) painter = QtGui.QPainter() painter.begin(image) painter.drawImage(0, 0, QtGui.QImage("icons/uti/merge_overlay.png")) painter.end() self.__icon = QtGui.QIcon(QtGui.QPixmap.fromImage(image)) else: self.__icon = QtGui.QIcon(Registry().getIcon(s.type())) # overwritable by external files? self.__replacable = (not needMerge) and ( not Registry().conformes(self.__uti, "org.hotchpotch.container")) self.__valid = True self.__updateColumns()
def __doCreate(self, sourceRev): info = Connector().stat(sourceRev) destStores = Connector().lookup_rev(self.rev()) with Connector().create(info.type(), info.creator(), destStores) as w: with Connector().peek(sourceRev) as r: for part in info.parts(): w.write(part, r.readAll(part)) w.commit() destDoc = w.getDoc() # add link self.model().insertLink(struct.DocLink(destDoc)) # save immediately self.save()
def __init__(self, revs, parent=None): super(RevisionTab, self).__init__(parent) layout = QtGui.QGridLayout() layout.addWidget(QtGui.QLabel("Type:"), 1, 0) layout.addWidget(QtGui.QLabel("Modification time:"), 2, 0) layout.addWidget(QtGui.QLabel("Size:"), 3, 0) layout.addWidget(QtGui.QLabel("Stores:"), 4, 0) col = 1 for rev in revs: stat = Connector().stat(rev) layout.addWidget(RevButton(rev, True), 0, col) layout.addWidget( QtGui.QLabel(Registry().getDisplayString(stat.type())), 1, col) layout.addWidget(QtGui.QLabel(str(stat.mtime())), 2, col) size = 0 for part in stat.parts(): size += stat.size(part) for unit in ['Bytes', 'KiB', 'MiB', 'GiB']: if size < (1 << 10): break else: size = size >> 10 sizeText = "%d %s (%d parts)" % (size, unit, len(stat.parts())) layout.addWidget(QtGui.QLabel(sizeText), 3, col) storeLayout = QtGui.QVBoxLayout() for store in Connector().lookup_rev(rev): storeLayout.addWidget(DocButton(store, True)) layout.addLayout(storeLayout, 4, col) col += 1 self.setLayout(layout)