// Custom processing the Selection Changed in the Scene Graph model. Returns
// TRUE if no further processing needed.
bool ParticlesEditorSceneModelHelper::ProcessSelectionChanged(const QItemSelection &selected,
                                                         const QItemSelection &deselected)
{
    int32 deselectedSize = deselected.size();
    int32 selectedSize = selected.size();

    if (selectedSize <= 0)
    {
        // De-selection happened - allow processing by caller.
        ParticlesEditorController::Instance()->CleanupSelectedNode();
        return false;
    }
    
    // Determine whether the selected node belongs to Particle Editor.
    QItemSelectionRange selectedRange = selected.at(0);
    SceneGraphItem *selectedItem = static_cast<SceneGraphItem*>(selectedRange.topLeft().internalPointer());

    if (ParticlesEditorController::Instance()->IsBelongToParticlesEditor(selectedItem))
    {
        // Our one. Select and emit the appropriate event.
        ParticlesEditorController::Instance()->SetSelectedNode(selectedItem, true);
        return !ParticlesEditorController::Instance()->ShouldDisplayPropertiesInSceneEditor(selectedItem);
    }

    // Not ours. Cleanup the selected node and return control back to the caller.
    ParticlesEditorController::Instance()->CleanupSelectedNode();
    return false;
}
Ejemplo n.º 2
0
bool KCSheetModel::setData(const QItemSelectionRange &range, const QVariant &value, int role)
{
    const KCRegion region(toRange(range), d->sheet);
    KCCellStorage *const storage = d->sheet->cellStorage();
    switch (role) {
    case CommentRole:
        storage->setComment(region, value.toString());
        break;
    case ConditionRole:
        storage->setConditions(region, value.value<KCConditions>());
        break;
    case FusionedRangeRole:
        // TODO
//         storage->setFusion(region, value.value<bool>());
        break;
    case LockedRangeRole:
        // TODO
//         storage->setMatrix(region, value.value<bool>());
        break;
    case NamedAreaRole:
        storage->emitInsertNamedArea(region, value.toString());
            break;
    case SourceRangeRole:
        storage->setBinding(region, value.value<KCBinding>());
        break;
    case StyleRole:
        // TODO
//         storage->setStyle(region, value.value<KCStyle>());
        break;
    case TargetRangeRole:
        storage->setDatabase(region, value.value<Database>());
        break;
    case ValidityRole:
        storage->setValidity(region, value.value<KCValidity>());
        break;
    default:
        return false;
    }
    emit dataChanged(range.topLeft(), range.bottomRight());
    return true;
}