Esempio n. 1
0
    def startDrag(self, supportedActions):

        item = self.currentIndex()

        itemData = QtCore.QByteArray()
        dataStream = QtCore.QDataStream(itemData, QtCore.QIODevice.WriteOnly)
        pixmap = QtGui.QPixmap(":/icons/ccmime.png")

        l = self.model().datapool.keys()
        l.sort()
        name = l[item.row()]

        dataStream.writeSting(name)

        mimeData = QtCore.QMimeData()
        mimeData.setData("openalea/data_instance", itemData)

        linecode = cli.get_datapool_code(name)
        mimeData.setText(linecode)

        drag = QtGui.QDrag(self)
        drag.setMimeData(mimeData)
        drag.setHotSpot(QtCore.QPoint(pixmap.width()/2, pixmap.height()/2))
        drag.setPixmap(pixmap)

        drag.start(QtCore.Qt.MoveAction)
Esempio n. 2
0
    def mimeData(self, modelIndexes):
        item       = self.itemFromIndex(modelIndexes[0])
        mimeData   = QtGui.QStandardItemModel.mimeData(self, modelIndexes)
        (pkg_id, factory_id, mimetype) = self.get_item_info(item)

        # -- marshall package and factory to the data stream, needed later --
        itemData   = QtCore.QByteArray()
        dataStream = QtCore.QDataStream(itemData, QtCore.QIODevice.WriteOnly)
        dataStream.writeString(pkg_id)
        dataStream.writeString(factory_id)
        mimeData.setData(mimetype, itemData)

        # -- build an url --
        factory = PackageManager()[pkg_id][factory_id]
        if isinstance(factory, DataFactory):
            url = QtCore.QUrl.fromLocalFile(factory.get_pkg_data().repr)
        else:
            query   = ["fac="+factory_id]
            ftname  = type(factory).__name__
            query.append("ft="+ftname)
            query = reduce(lambda x,y:"&".join((x,y)), query)
            url = QtCore.QUrl("oa://local/"+pkg_id+"?"+query)

        mimeData.setUrls([url])
        return mimeData
Esempio n. 3
0
    def startDrag(self, supportedActions):
        index = self.getIndex()
        item = self.getItem()
        data = self._model.projectdata(index)
        if data is None:
            return
        category, name = data
        # Check item in src
        # TODO move this part in dragEnterEvent with mimetype
        obj = self._model._project.get(category, name)
        if category in ['src', 'model']:
            # Read file and parse model to get inputs, outputs, doc that may be
            # useful once dropped.
            obj.read()
            text = item.text()

            # name_without_ext = ".".join(text.split(".")[:-1])
            name_without_ext = text
            name_without_space = "_".join(name_without_ext.split())
            for sym in ["-", "+", "*", "/", "\"", "."]:
                name_without_space = "_".join(name_without_space.split(sym))

            python_call_string = '%s = Model("%s")' % (name_without_space,
                                                       name_without_ext)
            icon = item.icon()
            pixmap = icon.pixmap(20, 20)

            itemData = QtCore.QByteArray()
            dataStream = QtCore.QDataStream(itemData,
                                            QtCore.QIODevice.WriteOnly)
            model_id = name_without_ext
            dataStream.writeString(str(python_call_string))
            dataStream.writeString(str(model_id))

            mimeData = QtCore.QMimeData()
            mimeData.setText(python_call_string)
            mimeData.setData("openalealab/model", itemData)

            drag = QtGui.QDrag(self)
            drag.setMimeData(mimeData)
            drag.setHotSpot(
                QtCore.QPoint(pixmap.width() / 2,
                              pixmap.height() / 2))
            drag.setPixmap(pixmap)

            drag.start(QtCore.Qt.CopyAction)

        elif category == 'data':
            p = '%s/%r' % (category, str(obj.filename))
            mimetype, mimedata = encode(obj, mimetype='openalealab/data')
            qmime_data = QtCore.QMimeData()
            qmime_data.setData(mimetype, mimedata)
            qmime_data.setText(p)
            drag = QtGui.QDrag(self)
            drag.setMimeData(qmime_data)
            drag.start()