NARCISO, Rui wrote:
and when doing so create the sub-node "Folder1" if it does not exist within "campaign" and put the dragged items under "folder1" (and not "campaign" where they were dropped). How to do this ? Do I do this in a dropEvent? In a dropEventAction ?
you could monitor the tree using QTreeView.rowsInserted and then reparent dropped items as necessary.

Hi again,
I have tried but I am unable from redefining rowsInserted to reparent the items.
I am having problems combining the information QModelIndex used by rowsInserted 
and the QAbstractModel automatically set-up behind the scenes by QTreeWidget 
....

don't know what you're trying to do, but i had in mind something like this:

import sys
from PyQt4 import QtGui, QtCore

CAMPAIGN_TYPE, FOLDER_TYPE, CALC_TYPE = range(1001, 1004)


class TreeWidget(QtGui.QTreeWidget):
    def __init__(self, parent=None):
        QtGui.QTreeWidget.__init__(self, parent)
        self.header().setHidden(True)
        self.setSelectionMode(self.ExtendedSelection)
        self.setDragDropMode(self.InternalMove)
        self.setDragEnabled(True)
        self.setDropIndicatorShown(True)
        self.invisibleRootItem().setFlags(QtCore.Qt.NoItemFlags)
        parent = TreeWidgetItem(self, CAMPAIGN_TYPE)
        for i in xrange(1, 4):
            TreeWidgetItem(parent, CALC_TYPE)
        TreeWidgetItem(self, CAMPAIGN_TYPE)
        TreeWidgetItem(self, CAMPAIGN_TYPE)

    def rowsInserted(self, parent, start, end):
        QtGui.QTreeWidget.rowsInserted(self, parent, start, end)
        item = self.itemFromIndex(parent)
        if (item is not None and
            item.type() == CAMPAIGN_TYPE and
            item.child(start).type() == CALC_TYPE):
            child = item.takeChild(start)
            if item.folder is None:
                item.folder = TreeWidgetItem(item, FOLDER_TYPE)
            item.folder.addChild(child)


class TreeWidgetItem(QtGui.QTreeWidgetItem):
    def __init__(self, parent, type):
        QtGui.QTreeWidgetItem.__init__(self, parent, type)
        if type == CALC_TYPE:
            text, flags = 'Calc', ~QtCore.Qt.ItemIsDropEnabled
        else:
            self.setChildIndicatorPolicy(self.ShowIndicator)
            self.setExpanded(True)
            if type == CAMPAIGN_TYPE:
                text, flags = 'Campaign', ~QtCore.Qt.ItemIsDragEnabled
            elif type == FOLDER_TYPE:
                text, flags = 'Folder', ~QtCore.Qt.ItemIsDragEnabled
        self.setText(0, text)
        self.setFlags(self.flags() & flags)
        self.folder = None


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    tree = TreeWidget()
    tree.resize(200, 300)
    tree.move(300, 300)
    tree.show()
    sys.exit(app.exec_())
_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to