Beispiel #1
0
    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()
Beispiel #2
0
	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()
Beispiel #3
0
    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)
Beispiel #4
0
    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()
Beispiel #5
0
	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()
Beispiel #6
0
 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()
Beispiel #7
0
	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()
Beispiel #8
0
    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)