Exemplo n.º 1
0
void Timeline::SetScene(SceneModel* scene)
{
    if (mScene == scene)
    {
        return;
    }

    // unload all layers
    QVBoxLayout* l = (QVBoxLayout*)mTimeLinePanel->layout();
    while(QLayoutItem* item = l->itemAt(0))
    {
        l->removeItem(item);
    }

    l = (QVBoxLayout*)mPropertyPanel->layout();
    while(QLayoutItem* item = l->itemAt(0))
    {
        l->removeItem(item);
    }

    for (size_t i = 0; i < mLayers.size(); ++i)
    {
        Layer* layer = mLayers[i];
        delete layer->GetPropertyWindow();
        delete layer;
    }
    mLayers.clear();

    mScene = scene;
    if (mScene)
    {
        for (size_t i = 0; i < mScene->GetLayers().size(); ++i)
        {
            LayerModel* layerModel = mScene->GetLayers()[i];
            if (layerModel)
            {
                switch(layerModel->GetType())
                {
                    case LayerModel::LayerTypeRaster:
                        {
                            RasterLayerModel* rlm = (RasterLayerModel*)layerModel;
                            RasterLayer* layer = new RasterLayer(this, rlm);
                            mLayers.push_back(layer);
                        }
                        break;
                    case LayerModel::LayerTypeTrace:
                        {
                            TraceLayerModel* lm = (TraceLayerModel*)layerModel;
                            TraceLayer* layer = new TraceLayer(this, lm);
                            mLayers.push_back(layer);
                        }
                        break;
                }
            }
        }
        delete mCompositeImage;
        mCompositeImage = new QImage(scene->GetWidth(), scene->GetHeight(), QImage::Format_RGBA8888);
    }

    UpdateLayersUi();
    SetLayerIndex((int)mLayers.size() - 1);
    UpdateMaxFrames();
}