def rowCount(self, parent_index):
        if parent_index.isValid():

            if isinstance(parent_index.internalPointer(), bpQtCore.IndexPath):
                # connections do not have any children of their own
                row_count = 0

            elif isinstance(
                    parent_index.internalPointer(),
                (bfPropertyQtCache.BfPropertyId, bfSceneQtCache.BfIdData,
                 bfSceneQtCache.BfIdDummyData)):
                # connection level
                row_count = self._connection_count(parent_index)
                return row_count
            else:
                raise bfQtCore.BfQtError(
                    "Unrecognised valid parent index, cannot get row count: {} {}"
                    .format(parent_index, parent_index.internalPointer()))

# print "row count {} {}".format(row_count,
# parent_index.internalPointer())

        else:
            # root level
            row_count = super(BfConnectedProxyModelBase,
                              self).rowCount(parent_index)

        return row_count
Exemple #2
0
    def parent(self, index):
        data = index.internalPointer()

        if isinstance(
                data,
            (bfSceneQtCache.BfIdConData, bfPropertyQtCache.BfPropertyConId)):
            # connection level
            # get parent row
            parent_row = self._connected_model.find_row(data.value())

            parent_data = self._connected_model.get_id_object(data.value())

            parent_index = self.createIndex(parent_row, 0, parent_data)

            return parent_index

        elif isinstance(data, (
                bfSceneQtCache.BfIdData,
                bfSceneQtCache.BfIdDummyData,
                bfPropertyQtCache.BfPropertyId,
        )):
            # connected level
            # return invalid index to indicate root level
            return Qt.QtCore.QModelIndex()

        else:
            raise bfQtCore.BfQtError(
                "Failed to create parent index: {} {}".format(index, data))
Exemple #3
0
    def get_id_con_object(self, object_id):
        """Get cached BfIdConData object for specified uid
        """
        if object_id not in self.id_con_objects:
            raise bfQtCore.BfQtError(
                "Failed to get id con object: {} {}".format(object_id))

        return self.id_con_objects[object_id]
Exemple #4
0
    def index(self, row, column, parent_index):
        """
        if at root level behaviour is normal

        if at child level then get property index...

        get fbx_object id, then get corresponding property mapping dict

        Then construct a bpCore.IndexPath for parent_index and append row,
        then use this to find proxy index.

        """

        if not parent_index.isValid():
            print "debugging: getting child index: {} {} {} {}".format(
                row, column, parent_index.internalPointer(), parent_index)

            return self._index_list[row]

        # find proxy index
        source_parent_index = self.mapToSource(parent_index)

        property_model = self.get_property_model(parent_index)

        if self.is_scene_index(source_parent_index, reject_dummys=True):

            source_property_index = property_model.index(
                row, column, Qt.QtCore.QModelIndex())

        elif self.is_scene_index(source_parent_index, reject_dummys=False):

            raise bfQtCore.BfQtError(
                "Cannot create child property index of Dummy object index: {}".
                format(parent_index))

        elif self.is_property_index(source_parent_index):

            source_property_index = property_model.index(
                row, column, source_parent_index)

        else:
            raise bfQtCore.BfQtError(
                "Failed to find child property source index: {}".format(
                    parent_index))

        return self.mapFromSource(source_property_index)
    def get_id_con_object(self, value):

        uid = self.get_id_value(value)

        if uid not in self._id_con_objects:
            raise bfQtCore.BfQtError(
                "Failed to get id con object: {} {}".format(
                    uid, value
                )
            )

        return self._id_con_objects[uid]
Exemple #6
0
    def rowCount(self, parent_index):
        """
        TODO

        if parent_index belongs to scene model, the get parent object,
        then get property model for object and return property model root row count.

        else if parent_index belongs to property model, then return
        property row count for source index.

        """
        # if at root level behaviour is normal

        # if at child level then get property data
        property_model = self.get_property_model(parent_index)

        if self.is_scene_index(parent_index, reject_dummys=True):

            return property_model.rowCount(Qt.QtCore.QModelIndex())

        elif self.is_scene_index(parent_index, reject_dummys=False):

            # Dummy objects should display no properties
            return 0

        elif self.is_property_index(parent_index):

            if not parent_index.isValid():
                raise Exception(
                    "Cannot get property row count for invalid index: {}".
                    format(parent_index))

            source_parent_index = self.mapToSource(parent_index)

            row_count = property_model.rowCount(source_parent_index)
            print "debug rowCount: {}".format(row_count)
            return row_count

        elif not parent_index.isValid():

            #             print "debug getting scene rowCount: {} {}".format(
            #                 parent_index, parent_index.internalPointer()
            #             )

            row_count = len(self._index_list)

            #             print "debug rowCount: {}".format(row_count)

            return row_count

        else:
            raise bfQtCore.BfQtError("Failed to get row count")
    def get_id_value(self, value):
        if isinstance(value, BFbxPropertyRoot):
            uid = value.unique_id()

        elif isinstance(value, (int, long)):
            uid = value

        else:
            raise bfQtCore.BfQtError(
                "Failed to retreive unique id: {}".format(value)
            )

        return uid
    def get_connected(self, proxy_index):
        if self.sourceModel() is None:
            raise bfQtCore.BfQtError(
                "Cannot retreive connected object or property when sourceModel is None"
            )

        #         source_index = self.map_to_root(proxy_index)

        if isinstance(self.get_root_model(),
                      bfPropertyModels.BFbxPropertyModel):
            fbx_property = self.get_root_model().get_fbx_property(proxy_index)
            return fbx_property

        elif isinstance(self.get_root_model(),
                        bfSceneModels.BFbxSceneTreeQtModel):
            fbx_object = self.get_root_model().get_fbx_object(proxy_index)
            return fbx_object

        else:
            raise bfQtCore.BfQtError(
                "Failed to retreive connected object or property: {}".format(
                    proxy_index))
Exemple #9
0
    def get_property_id(self, index):
        """Use IdObject to retrieve unique id.

        Index can be either proxy index or source index.
        """

        id_object = index.internalPointer()

        if self.is_scene_index(index, reject_dummys=False):

            raise bfQtCore.BfQtError("Cannot get property id from scene index")

        elif self.is_property_index(index):

            return id_object.value()

        else:
            return None
Exemple #10
0
 def get_id_con_object(self, value):
     #         id_value = self.get_id_value(value)
     #         id_con_object = self._get_id_con_object(id_value)
     #         return id_con_object
     raise bfQtCore.BfQtError(
         "Cannot retrieve id_con_object from base class")
Exemple #11
0
    def data(self, index, role):
        """
        TODO more checks and helper methods
        """

        # check index is valid
        if not index.isValid():
            return

        if not index.parent().isValid():

            data = self._connected_model.data(index, role)

            return data

        else:
            row = index.row()
            column = index.column()

            if row > self.rowCount(None):
                return Qt.QtCore.QModelIndex()

            # get connected property objects
            con_property = self.get_connection(row)

            if con_property is None:
                raise bfQtCore.BfQtError("Failed to get connected FbxProperty")

            con_property_id = bfFbxUtils.get_fbx_property_object_index(
                con_property)

            con_object = con_property.GetFbxObject()
            con_object_id = con_object.GetUniqueID()

            con_property_cache = self.scene_cache().get_property_cache(
                con_object_id)

            if con_property_cache is None:
                raise bfQtCore.BfQtError(
                    "Failed to find cache for connected Property")

            con_property_item = con_property_cache.get_item_from_unique_id(
                con_property_id)

            if con_property_item is None:
                raise bfQtCore.BfQtError(
                    "Failed to find item for connected Property")

            # get connected property data
            if column == 0:
                con_object_data = self._scene_model.get_fbx_object_data(
                    con_object_id, column, role)

                if role in [Qt.QtCore.Qt.DisplayRole]:
                    # append property name
                    con_property_data = self._scene_model.property_model(
                    )._get_prop_fn_data(column, role, con_property_item)

                    data = "{}.{}".format(con_object_data, con_property_data)

                    return data
                else:
                    return con_object_data

            else:
                con_property_data = self._scene_model.property_model(
                )._get_prop_fn_data(column, role, con_property_item)

                return con_property_data

        return None