Пример #1
0
//-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
WorkbenchService::pFutureProjectExplorerModel_type
WorkbenchService::createProjectExplorerModel()
{
    pFutureProjectExplorerModel_type pModel(new FutureProjectExplorerModel_type);

    ProjectExplorerModel* pRawModel = new ProjectExplorerModel(*this);

    m_pProjectExplorerModel = pProjectExplorerModel_type(pRawModel, &destroyModel);
    pModel->setValue(m_pProjectExplorerModel);

    // This will populate m_projectsToLoad by calling loadProject().
    pRawModel->loadDataModel();

    create(*pRawModel);

    // TODO Probably shouldn't share a database connection with the
    // data model because calling this next method might be done
    // before loadDataModel() is complete, which might cause us
    // to try to create a new transaction before the one that
    // loadDataModel() creates is done.
    // For now this is ok because the current database plugin
    // implementation is single threaded.
    loadProjects();

    return pModel;
}
Пример #2
0
void xRungeKutta4 :: halfTest (void)
{
	gpstk::Matrix<double> x0(2,1), truncError(2,1);
	x0(0,0) = 0.001; // Initial angle in radians
	x0(1,0) = 0.0; // Initial angular velocity in radians/second
	
	PendulumIntegrator pModel(x0,0.);
	
	double g = 9.81, L = 1.0;
	pModel.setPhysics(g,L);
	
	double deltaT = .00001;  // Step size in seconds for integrator
	
	double time = 0;
	double Nper = 2.5; // number of periods
	
	double addError = 0; //Total Error for angle
	double addDotError = 0; //Total Error for rate of change in angle
	
	long count = 0;
	
	while (pModel.getTime() < Nper * (2*3.14159265/sqrt(g/L)))
	{
		pModel.integrateTo((count++)*deltaT,truncError);
		addError += fabs(truncError(0,0));
		addDotError += fabs(truncError(1,0));
	}
	
	CPPUNIT_ASSERT_DOUBLES_EQUAL(-x0(0,0),pModel.getState()(0,0),addError*2);
	CPPUNIT_ASSERT_DOUBLES_EQUAL(x0(1,0),pModel.getState()(1,0),addDotError*2);
	
}
Пример #3
0
ezQtSkeletonPanel::ezQtSkeletonPanel(QWidget* pParent, ezSkeletonAssetDocument* pDocument)
    : ezQtDocumentPanel(pParent)
{
  m_pSkeletonDocument = pDocument;

  setObjectName("SkeletonPanel");
  setWindowTitle("Skeleton");

  m_pMainWidget = new QWidget(this);
  m_pMainWidget->setLayout(new QVBoxLayout());
  m_pMainWidget->setContentsMargins(0, 0, 0, 0);
  m_pMainWidget->layout()->setContentsMargins(0, 0, 0, 0);
  m_pFilterWidget = new ezQtSearchWidget(this);
  connect(m_pFilterWidget, &ezQtSearchWidget::textChanged, this,
          [this](const QString& text) { m_pTreeWidget->GetProxyFilterModel()->SetFilterText(text); });

  m_pMainWidget->layout()->addWidget(m_pFilterWidget);

  std::unique_ptr<ezQtDocumentTreeModel> pModel(new ezQtDocumentTreeModel(pDocument->GetObjectManager()));
  pModel->AddAdapter(new ezQtDummyAdapter(pDocument->GetObjectManager(), ezGetStaticRTTI<ezDocumentRoot>(), "Children"));
  pModel->AddAdapter(new ezQtDummyAdapter(pDocument->GetObjectManager(), ezGetStaticRTTI<ezEditableSkeleton>(), "Children"));
  pModel->AddAdapter(new ezQtJointAdapter(pDocument));

  m_pTreeWidget = new ezQtDocumentTreeView(this, pDocument, std::move(pModel));
  m_pTreeWidget->SetAllowDragDrop(true);
  m_pTreeWidget->SetAllowDeleteObjects(false);
  m_pMainWidget->layout()->addWidget(m_pTreeWidget);

  setWidget(m_pMainWidget);
}
Пример #4
0
bool CFont::InitModel()
{
  static CStrAny sPlain(ST_CONST, "Plain");
  static CStrAny sg_mWorld(ST_CONST, "g_mWorld");
  static CStrAny sg_mView(ST_CONST, "g_mView");
  static CStrAny sg_mProj(ST_CONST, "g_mProj");
  static CStrAny sg_mTexTransform(ST_CONST, "g_mTexTransform");
  static CStrAny sg_cMaterialDiffuse(ST_CONST, "g_cMaterialDiffuse");
  static CStrAny sg_txDiffuse(ST_CONST, "g_txDiffuse");
  static CStrAny sg_sDiffuse(ST_CONST, "g_sDiffuse");

  ASSERT(!m_pTextModel);
  bool bRes;
  CTechnique *pTech = CGraphics::Get()->GetTechnique(sPlain);
  if (!pTech)
    return false;
  CSmartPtr<CGeometry> pGeom(new CGeometry());
  bRes = pGeom->Init(pTech->m_pInputDesc, CGeometry::PT_TRIANGLELIST, INIT_BUFFER_CHARS * 4, INIT_BUFFER_CHARS * 6, 0, 0, 
                     CResource::RF_DYNAMIC | CResource::RF_KEEPSYSTEMCOPY, CResource::RF_DYNAMIC | CResource::RF_KEEPSYSTEMCOPY);
  if (!bRes) 
    return false;
  CSmartPtr<CMaterial> pMaterial(new CMaterial());
  bRes = pMaterial->Init(pTech, true, 0);
  if (!bRes)
    return false;
  CSmartPtr<CModel> pModel(new CModel());
  bRes = pModel->Init(pGeom, pMaterial, 0, false);
  if (!bRes) 
    return false;

  m_pTextModel = pModel;

  CMatrix<4, 4> mIdentity;
  mIdentity.SetDiagonal();
  CMatrixVar vMat(4, 4, CMatrixVar::MVF_OWNVALUES, &mIdentity(0, 0));
  m_pTextModel->SetVar(sg_mProj, vMat);
  m_pTextModel->SetVar(sg_mView, vMat);
  m_pTextModel->SetVar(sg_mWorld, vMat);
  CMatrix<3, 2> mTexIdentity;
  mTexIdentity.SetDiagonal();
  CMatrixVar vTexMat(3, 2, CMatrixVar::MVF_OWNVALUES, &mTexIdentity(0, 0));
  m_pTextModel->SetVar(sg_mTexTransform, vTexMat);
  CVar<CVector<4> > vVec4;
  vVec4.Val().Set(1, 1, 1, 1);
  m_pTextModel->SetVar(sg_cMaterialDiffuse, vVec4);

  CVar<CTexture *> vTexVar;
  vTexVar.Val() = m_pTexture;
  m_pTextModel->SetVar(sg_txDiffuse, vTexVar);

  CVar<CSampler *> vSampVar;
  vSampVar.Val() = CGraphics::Get()->GetSampler(CSampler::TDesc());
  m_pTextModel->SetVar(sg_sDiffuse, vSampVar);

  ResetModel();

  return true;
}
void GGdiDrawTextMsgCommand::Execute() throw(GException)
{
	LOG_LEVEL3("Execute()");
	
	std::auto_ptr<GResponseMsgData> poResponse(CreateInitializedResponse(GGdiDrawTextMsgDataXML::CXMLTag, GMsgCmdDataFactory::CInterfaceVersion));

	try
	{
		GGdiDrawTextMsgData *pRequestData(static_cast<GGdiDrawTextMsgData *>(m_pData));
		if( pRequestData == NULL )
		{
			throw GEXCEPTION("Null pointer for GGdiDrawTextMsgData *pRequestData");
		}
		pRequestData->Validate();

		GGDIText oText;
		oText.SetBGColor(pRequestData->GetBGColor());
		oText.SetFGColor(pRequestData->GetFGColor());
		oText.SetText(pRequestData->GetText());
		oText.SetXLoc(pRequestData->GetXLoc());
		oText.SetYLoc(pRequestData->GetYLoc());
		oText.SetFont(pRequestData->GetFont());
		oText.SetAttr(pRequestData->GetAttr());

		QSharedPointer<GGDIModel> pModel(GGDIModelSingleton::GetInstance()->GetModel());
        {
            QMutexLocker mtxScope(pModel->GetMutex());
            pModel->DrawText(oText, pRequestData->GetSynchronousRequest());
        }

		poResponse->SetResponseCode(GResponseMsgData::eOk);
	}
	catch( GException& e )
	{
		LOG_LEVEL1(QString("Excepcion: ")+e.GetMessage());

		poResponse->SetResponseCode(GResponseMsgData::eGDIError);
	}
	
	SetResponseNamespace(poResponse);
	m_pResponse=poResponse.release();
}
            void MyPinsFileIO::LoadPinModelsFromDisk(std::vector<std::pair<MyPinModel*, IMyPinBoundObject*> >& out_pinModelBindings, IMyPinsService& myPinService)
            {
                out_pinModelBindings.clear();

                std::fstream stream;
                size_t size;

                if (m_fileIO.OpenFile(stream, size, MyPinsDataFilename))
                {
                    std::string json((std::istreambuf_iterator<char>(stream)),
                                     (std::istreambuf_iterator<char>()));

                    rapidjson::Document jsonDoc;
                    if (jsonDoc.Parse<0>(json.c_str()).HasParseError())
                    {
                        Eegeo_TTY("Parse error in MyPins JSON.\n");
                        return;
                    }

                    Eegeo_ASSERT(jsonDoc.IsObject(), "JSON document is not of object type");

                    const rapidjson::Value& myPinsArray = jsonDoc[MyPinsJsonArrayName.c_str()];
                    size_t numEntries = myPinsArray.Size();

                    for(int i = 0; i < numEntries; ++i)
                    {
                        const rapidjson::Value& entry = myPinsArray[i];
                        
                        Eegeo_ASSERT(entry.HasMember("version"),
                                     "Old MyPinModel version detected. Please delete and reinstall the application.\n");
                        
                        const int version = entry["version"].GetInt();
                        
                        const int earliestSupportedVersion = 1;
                        Eegeo_ASSERT(version >= earliestSupportedVersion, "Old MyPinModel version detected: tried to deserialize version %d but current version is %d. Please delete and reinstall the application.\n", version, MyPinModel::CurrentVersion);
                        
                        
                        
                        MyPinModel::TPinIdType pinId = entry["id"].GetInt();
                        std::string title = entry["title"].GetString();
                        std::string description = entry["description"].GetString();
                        int sdkMapPinIconIndex = entry["icon"].GetInt();
                        double latitude = entry["latitude"].GetDouble();
                        double longitude = entry["longitude"].GetDouble();
                        MyPinsSemanticPinType semanticPinType = static_cast<MyPinsSemanticPinType>(entry["type"].GetInt());
                        std::string pinTypeMetadata = entry["metadata"].GetString();
                        
                        std::string ratingsImage = "";
                        int reviewCount = 0;
                        
                        if(version == 1)
                        {
                            // MB: Cannot infer review count therefore cannot show ratings by Yelp branding rules.
                            if(description.find("stars_") == 0)
                            {
                                description = "";
                            }
                        }
                        else if(version == MyPinModel::CurrentVersion)
                        {
                            ratingsImage = entry["ratingsImage"].GetString();
                            reviewCount = entry["reviewCount"].GetInt();
                        }
                        
                        float heightAboveTerrainMetres = 0;
                        if(entry.HasMember("heightAboveTerrain"))
                        {
                            heightAboveTerrainMetres = entry["heightAboveTerrain"].GetDouble();
                        }
                        
                        bool interior = false;
                        if(entry.HasMember("interior"))
                        {
                            interior = entry["interior"].GetBool();
                        }
                        
                        std::string buildingId("");
                        if(entry.HasMember("building"))
                        {
                            buildingId = entry["building"].GetString();
                        }
                        
                        int floor = 0;
                        if(entry.HasMember("floor"))
                        {
                            floor = entry["floor"].GetInt();
                        }
                        
                        IMyPinBoundObject* pPinBoundObject(m_myPinBoundObjectFactory.CreatePinBoundObjectFromSerialized(*this,
                                                                                                                        pinId,
                                                                                                                        semanticPinType,
                                                                                                                        pinTypeMetadata,
                                                                                                                        myPinService));
                        
                        MyPinModel* pModel(Eegeo_NEW(MyPinModel)(version,
                                                                 pinId,
                                                                 title,
                                                                 description,
                                                                 ratingsImage,
                                                                 reviewCount,
                                                                 sdkMapPinIconIndex,
                                                                 Eegeo::Space::LatLong::FromDegrees(latitude, longitude),
                                                                 heightAboveTerrainMetres,
                                                                 interior,
                                                                 buildingId,
                                                                 floor));
                        
                        out_pinModelBindings.push_back(std::make_pair(pModel, pPinBoundObject));
                    }
                }
            }
Пример #7
0
ezQtPropertyAnimAssetDocumentWindow::ezQtPropertyAnimAssetDocumentWindow(ezPropertyAnimAssetDocument* pDocument)
    : ezQtGameObjectDocumentWindow(pDocument)
{
  auto ViewFactory = [](ezQtEngineDocumentWindow* pWindow, ezEngineViewConfig* pConfig) -> ezQtEngineViewWidget* {
    ezQtGameObjectViewWidget* pWidget =
        new ezQtGameObjectViewWidget(nullptr, static_cast<ezQtPropertyAnimAssetDocumentWindow*>(pWindow), pConfig);
    pWindow->AddViewWidget(pWidget);
    return pWidget;
  };
  m_pQuadViewWidget = new ezQtQuadViewWidget(pDocument, this, ViewFactory, "PropertyAnimAssetViewToolBar");

  pDocument->SetEditToolConfigDelegate(
      [this](ezGameObjectEditTool* pTool) { pTool->ConfigureTool(static_cast<ezGameObjectDocument*>(GetDocument()), this, this); });

  pDocument->m_PropertyAnimEvents.AddEventHandler(
      ezMakeDelegate(&ezQtPropertyAnimAssetDocumentWindow::PropertyAnimAssetEventHandler, this));

  setCentralWidget(m_pQuadViewWidget);
  SetTargetFramerate(25);

  // Menu Bar
  {
    ezQtMenuBarActionMapView* pMenuBar = static_cast<ezQtMenuBarActionMapView*>(menuBar());
    ezActionContext context;
    context.m_sMapping = "PropertyAnimAssetMenuBar";
    context.m_pDocument = pDocument;
    context.m_pWindow = this;
    pMenuBar->SetActionContext(context);
  }

  // Tool Bar
  {
    ezQtToolBarActionMapView* pToolBar = new ezQtToolBarActionMapView("Toolbar", this);
    ezActionContext context;
    context.m_sMapping = "PropertyAnimAssetToolBar";
    context.m_pDocument = pDocument;
    context.m_pWindow = this;
    pToolBar->SetActionContext(context);
    pToolBar->setObjectName("PropertyAnimAssetWindowToolBar");
    addToolBar(pToolBar);
  }

  // Game Object Graph
  {
    std::unique_ptr<ezQtDocumentTreeModel> pModel(new ezQtGameObjectModel(pDocument));
    pModel->AddAdapter(new ezQtDummyAdapter(pDocument->GetObjectManager(), ezGetStaticRTTI<ezDocumentRoot>(), "TempObjects"));
    pModel->AddAdapter(new ezQtGameObjectAdapter(pDocument));

    ezQtDocumentPanel* pGameObjectPanel =
        new ezQtGameObjectPanel(this, pDocument, "PropertyAnimAsset_ScenegraphContextMenu", std::move(pModel));
    addDockWidget(Qt::DockWidgetArea::LeftDockWidgetArea, pGameObjectPanel);
  }

  // Property Grid
  {
    ezQtDocumentPanel* pPanel = new ezQtDocumentPanel(this);
    pPanel->setObjectName("PropertyAnimAssetDockWidget");
    pPanel->setWindowTitle("Properties");
    pPanel->show();

    ezQtPropertyGridWidget* pPropertyGrid = new ezQtPropertyGridWidget(pPanel, pDocument);
    pPanel->setWidget(pPropertyGrid);

    addDockWidget(Qt::DockWidgetArea::RightDockWidgetArea, pPanel);
  }

  // Property Tree View
  {
    ezQtDocumentPanel* pPanel = new ezQtDocumentPanel(this);
    pPanel->setObjectName("PropertyAnimPropertiesDockWidget");
    pPanel->setWindowTitle("Properties");
    pPanel->show();

    m_pPropertyTreeView = new ezQtPropertyAnimAssetTreeView(pPanel);
    m_pPropertyTreeView->setHeaderHidden(true);
    m_pPropertyTreeView->setRootIsDecorated(true);
    m_pPropertyTreeView->setUniformRowHeights(true);
    m_pPropertyTreeView->setExpandsOnDoubleClick(false);
    pPanel->setWidget(m_pPropertyTreeView);

    connect(m_pPropertyTreeView, &ezQtPropertyAnimAssetTreeView::DeleteSelectedItemsEvent, this,
            &ezQtPropertyAnimAssetDocumentWindow::onDeleteSelectedItems);
    connect(m_pPropertyTreeView, &ezQtPropertyAnimAssetTreeView::RebindSelectedItemsEvent, this,
            &ezQtPropertyAnimAssetDocumentWindow::onRebindSelectedItems);

    connect(m_pPropertyTreeView, &QTreeView::doubleClicked, this, &ezQtPropertyAnimAssetDocumentWindow::onTreeItemDoubleClicked);
    connect(m_pPropertyTreeView, &ezQtPropertyAnimAssetTreeView::FrameSelectedItemsEvent, this,
            &ezQtPropertyAnimAssetDocumentWindow::onFrameSelectedTracks);

    addDockWidget(Qt::DockWidgetArea::LeftDockWidgetArea, pPanel);
  }

  // Property Model
  {
    m_pPropertiesModel = new ezQtPropertyAnimModel(GetPropertyAnimDocument(), this);
    m_pPropertyTreeView->setModel(m_pPropertiesModel);
    m_pPropertyTreeView->expandToDepth(2);
    m_pPropertyTreeView->initialize();
  }

  // Selection Model
  {
    m_pPropertyTreeView->setSelectionBehavior(QAbstractItemView::SelectionBehavior::SelectRows);
    m_pPropertyTreeView->setSelectionMode(QAbstractItemView::SelectionMode::ExtendedSelection);

    m_pSelectionModel = new QItemSelectionModel(m_pPropertiesModel, this);
    m_pPropertyTreeView->setSelectionModel(m_pSelectionModel);

    connect(m_pSelectionModel, &QItemSelectionModel::selectionChanged, this, &ezQtPropertyAnimAssetDocumentWindow::onSelectionChanged);
  }

  // Float Curve Panel
  {
    m_pCurvePanel = new ezQtDocumentPanel(this);
    m_pCurvePanel->setObjectName("PropertyAnimFloatCurveDockWidget");
    m_pCurvePanel->setWindowTitle("Curves");
    m_pCurvePanel->show();

    m_pCurveEditor = new ezQtCurve1DEditorWidget(m_pCurvePanel);
    m_pCurvePanel->setWidget(m_pCurveEditor);

    addDockWidget(Qt::DockWidgetArea::BottomDockWidgetArea, m_pCurvePanel);
  }

  // Color Gradient Panel
  {
    m_pColorGradientPanel = new ezQtDocumentPanel(this);
    m_pColorGradientPanel->setObjectName("PropertyAnimColorGradientDockWidget");
    m_pColorGradientPanel->setWindowTitle("Color Gradient");
    m_pColorGradientPanel->show();

    m_pGradientEditor = new ezQtColorGradientEditorWidget(m_pColorGradientPanel);
    m_pColorGradientPanel->setWidget(m_pGradientEditor);

    addDockWidget(Qt::DockWidgetArea::BottomDockWidgetArea, m_pColorGradientPanel);
  }

  // Event Track Panel
  {
    m_pEventTrackPanel = new ezQtDocumentPanel(this);
    m_pEventTrackPanel->setObjectName("PropertyAnimEventTrackDockWidget");
    m_pEventTrackPanel->setWindowTitle("Event Track");
    m_pEventTrackPanel->show();

    m_pEventTrackEditor = new ezQtEventTrackEditorWidget(m_pEventTrackPanel);
    m_pEventTrackPanel->setWidget(m_pEventTrackEditor);

    addDockWidget(Qt::DockWidgetArea::BottomDockWidgetArea, m_pEventTrackPanel);
  }

  // Time Scrubber
  {
    m_pScrubberToolbar = new ezQtTimeScrubberToolbar(this);
    connect(m_pScrubberToolbar, &ezQtTimeScrubberToolbar::ScrubberPosChangedEvent, this,
            &ezQtPropertyAnimAssetDocumentWindow::onScrubberPosChanged);
    connect(m_pScrubberToolbar, &ezQtTimeScrubberToolbar::PlayPauseEvent, this, &ezQtPropertyAnimAssetDocumentWindow::onPlayPauseClicked);
    connect(m_pScrubberToolbar, &ezQtTimeScrubberToolbar::RepeatEvent, this, &ezQtPropertyAnimAssetDocumentWindow::onRepeatClicked);
    connect(m_pScrubberToolbar, &ezQtTimeScrubberToolbar::DurationChangedEvent, this,
            &ezQtPropertyAnimAssetDocumentWindow::onDurationChangedEvent);
    connect(m_pScrubberToolbar, &ezQtTimeScrubberToolbar::AdjustDurationEvent, this,
            &ezQtPropertyAnimAssetDocumentWindow::onAdjustDurationClicked);

    addToolBar(Qt::ToolBarArea::BottomToolBarArea, m_pScrubberToolbar);
  }

  // this would show the document properties
  // pDocument->GetSelectionManager()->SetSelection(pDocument->GetObjectManager()->GetRootObject()->GetChildren()[0]);

  // Curve editor events
  {
    connect(m_pCurveEditor, &ezQtCurve1DEditorWidget::InsertCpEvent, this, &ezQtPropertyAnimAssetDocumentWindow::onCurveInsertCpAt);
    connect(m_pCurveEditor, &ezQtCurve1DEditorWidget::CpMovedEvent, this, &ezQtPropertyAnimAssetDocumentWindow::onCurveCpMoved);
    connect(m_pCurveEditor, &ezQtCurve1DEditorWidget::CpDeletedEvent, this, &ezQtPropertyAnimAssetDocumentWindow::onCurveCpDeleted);
    connect(m_pCurveEditor, &ezQtCurve1DEditorWidget::TangentMovedEvent, this, &ezQtPropertyAnimAssetDocumentWindow::onCurveTangentMoved);
    connect(m_pCurveEditor, &ezQtCurve1DEditorWidget::TangentLinkEvent, this, &ezQtPropertyAnimAssetDocumentWindow::onLinkCurveTangents);
    connect(m_pCurveEditor, &ezQtCurve1DEditorWidget::CpTangentModeEvent, this,
            &ezQtPropertyAnimAssetDocumentWindow::onCurveTangentModeChanged);

    connect(m_pCurveEditor, &ezQtCurve1DEditorWidget::BeginOperationEvent, this,
            &ezQtPropertyAnimAssetDocumentWindow::onCurveBeginOperation);
    connect(m_pCurveEditor, &ezQtCurve1DEditorWidget::EndOperationEvent, this, &ezQtPropertyAnimAssetDocumentWindow::onCurveEndOperation);
    connect(m_pCurveEditor, &ezQtCurve1DEditorWidget::BeginCpChangesEvent, this,
            &ezQtPropertyAnimAssetDocumentWindow::onCurveBeginCpChanges);
    connect(m_pCurveEditor, &ezQtCurve1DEditorWidget::EndCpChangesEvent, this, &ezQtPropertyAnimAssetDocumentWindow::onCurveEndCpChanges);
  }

  // Gradient editor events
  {
    connect(m_pGradientEditor, &ezQtColorGradientEditorWidget::ColorCpAdded, this,
            &ezQtPropertyAnimAssetDocumentWindow::onGradientColorCpAdded);
    connect(m_pGradientEditor, &ezQtColorGradientEditorWidget::ColorCpMoved, this,
            &ezQtPropertyAnimAssetDocumentWindow::onGradientColorCpMoved);
    connect(m_pGradientEditor, &ezQtColorGradientEditorWidget::ColorCpDeleted, this,
            &ezQtPropertyAnimAssetDocumentWindow::onGradientColorCpDeleted);
    connect(m_pGradientEditor, &ezQtColorGradientEditorWidget::ColorCpChanged, this,
            &ezQtPropertyAnimAssetDocumentWindow::onGradientColorCpChanged);

    connect(m_pGradientEditor, &ezQtColorGradientEditorWidget::AlphaCpAdded, this,
            &ezQtPropertyAnimAssetDocumentWindow::onGradientAlphaCpAdded);
    connect(m_pGradientEditor, &ezQtColorGradientEditorWidget::AlphaCpMoved, this,
            &ezQtPropertyAnimAssetDocumentWindow::onGradientAlphaCpMoved);
    connect(m_pGradientEditor, &ezQtColorGradientEditorWidget::AlphaCpDeleted, this,
            &ezQtPropertyAnimAssetDocumentWindow::onGradientAlphaCpDeleted);
    connect(m_pGradientEditor, &ezQtColorGradientEditorWidget::AlphaCpChanged, this,
            &ezQtPropertyAnimAssetDocumentWindow::onGradientAlphaCpChanged);

    connect(m_pGradientEditor, &ezQtColorGradientEditorWidget::IntensityCpAdded, this,
            &ezQtPropertyAnimAssetDocumentWindow::onGradientIntensityCpAdded);
    connect(m_pGradientEditor, &ezQtColorGradientEditorWidget::IntensityCpMoved, this,
            &ezQtPropertyAnimAssetDocumentWindow::onGradientIntensityCpMoved);
    connect(m_pGradientEditor, &ezQtColorGradientEditorWidget::IntensityCpDeleted, this,
            &ezQtPropertyAnimAssetDocumentWindow::onGradientIntensityCpDeleted);
    connect(m_pGradientEditor, &ezQtColorGradientEditorWidget::IntensityCpChanged, this,
            &ezQtPropertyAnimAssetDocumentWindow::onGradientIntensityCpChanged);

    connect(m_pGradientEditor, &ezQtColorGradientEditorWidget::BeginOperation, this,
            &ezQtPropertyAnimAssetDocumentWindow::onGradientBeginOperation);
    connect(m_pGradientEditor, &ezQtColorGradientEditorWidget::EndOperation, this,
            &ezQtPropertyAnimAssetDocumentWindow::onGradientEndOperation);

    // connect(m_pGradientEditor, &ezQtColorGradientEditorWidget::NormalizeRange, this,
    // &ezQtPropertyAnimAssetDocumentWindow::onGradientNormalizeRange);
  }

  // Event track editor events
  {
    connect(m_pEventTrackEditor, &ezQtEventTrackEditorWidget::InsertCpEvent, this,
            &ezQtPropertyAnimAssetDocumentWindow::onEventTrackInsertCpAt);
    connect(m_pEventTrackEditor, &ezQtEventTrackEditorWidget::CpMovedEvent, this,
            &ezQtPropertyAnimAssetDocumentWindow::onEventTrackCpMoved);
    connect(m_pEventTrackEditor, &ezQtEventTrackEditorWidget::CpDeletedEvent, this,
            &ezQtPropertyAnimAssetDocumentWindow::onEventTrackCpDeleted);

    connect(m_pEventTrackEditor, &ezQtEventTrackEditorWidget::BeginOperationEvent, this,
            &ezQtPropertyAnimAssetDocumentWindow::onEventTrackBeginOperation);
    connect(m_pEventTrackEditor, &ezQtEventTrackEditorWidget::EndOperationEvent, this,
            &ezQtPropertyAnimAssetDocumentWindow::onEventTrackEndOperation);
    connect(m_pEventTrackEditor, &ezQtEventTrackEditorWidget::BeginCpChangesEvent, this,
            &ezQtPropertyAnimAssetDocumentWindow::onEventTrackBeginCpChanges);
    connect(m_pEventTrackEditor, &ezQtEventTrackEditorWidget::EndCpChangesEvent, this,
            &ezQtPropertyAnimAssetDocumentWindow::onEventTrackEndCpChanges);
  }

  // GetDocument()->GetObjectManager()->m_PropertyEvents.AddEventHandler(ezMakeDelegate(&ezQtPropertyAnimAssetDocumentWindow::PropertyEventHandler,
  // this));
  GetDocument()->GetObjectManager()->m_StructureEvents.AddEventHandler(
      ezMakeDelegate(&ezQtPropertyAnimAssetDocumentWindow::StructureEventHandler, this));
  GetDocument()->GetSelectionManager()->m_Events.AddEventHandler(
      ezMakeDelegate(&ezQtPropertyAnimAssetDocumentWindow::SelectionEventHandler, this));
  GetDocument()->GetCommandHistory()->m_Events.AddEventHandler(
      ezMakeDelegate(&ezQtPropertyAnimAssetDocumentWindow::CommandHistoryEventHandler, this));

  FinishWindowCreation();

  {
    const ezUInt64 uiDuration = GetPropertyAnimDocument()->GetAnimationDurationTicks();
    m_pScrubberToolbar->SetDuration(uiDuration, GetPropertyAnimDocument()->GetProperties()->m_uiFramesPerSecond);
  }

  UpdateCurveEditor();
  UpdateGradientEditor();
  UpdateEventTrackEditor();
}
Пример #8
0
    cWorldXMLReader::RESULT cWorldXMLReader::ReadFromFile(const string_t& sFilename, cWorldXMLData& data)
    {
      data.Clear();

      // Make sure that we are loading a .world file
      const string_t sExtension = spitfire::filesystem::GetExtension(sFilename);
      ASSERT(sExtension == TEXT("world"));


      xml::reader reader;

      xml::document doc;
      if (!reader.ReadFromFile(doc, sFilename)) {
        LOG<<"cWorldXMLReader::ReadFromFile \""<<sFilename<<"\" not found"<<std::endl;
        return RESULT_ERROR_FILE_NOT_FOUND;
      }


      breathe::xml::cNode::iterator iterWorld(doc);
      if (!iterWorld.IsValid()) return RESULT_ERROR_FILE_NOT_FOUND;

      iterWorld.FindChild("world");
      if (!iterWorld.IsValid()) return RESULT_ERROR_WORLD_NODE_NOT_FOUND;

      // Load models
      {
        breathe::xml::cNode::iterator iter(iterWorld);

        iter.FindChild("models");
        if (iter.IsValid()) {
          iter.FindChild("model");
          if (iter.IsValid()) {
            while (iter.IsValid()) {
              std::string sModel;
              if (iter.GetAttribute("model", sModel)) {
                LOG<<"Adding Model "<<sModel<<std::endl;
                std::shared_ptr<cWorldModel> pModel(new cWorldModel);

                pModel->model = spitfire::string::ToString_t(sModel);
                iter.GetAttribute("position", pModel->position);
                iter.GetAttribute("rotation", pModel->rotation);

                data.models.push_back(pModel);
              }

              iter.Next("model");
            };
          }
        }
      }

      // Load entities
      {
        breathe::xml::cNode::iterator iter(iterWorld);

        iter.FindChild("entities");
        if (iter.IsValid()) {
          iter.FindChild("entity");
          if (iter.IsValid()) {
            while (iter.IsValid()) {
              std::string sName;
              if (iter.GetAttribute("name", sName)) {
                LOG<<"Adding Entity "<<sName<<std::endl;
                std::shared_ptr<cWorldEntity> pEntity(new cWorldEntity);

                pEntity->name = spitfire::string::ToString_t(sName);
                iter.GetAttribute("position", pEntity->position);
                iter.GetAttribute("rotation", pEntity->rotation);

                // Load properties
                breathe::xml::cNode::iterator iterProperties(iter);
                iterProperties.FindChild("properties");
                if (iterProperties.IsValid()) {
                  iterProperties.FindChild("property");
                  if (iterProperties.IsValid()) {
                    while (iter.IsValid()) {
                      std::string sName;
                      std::string sValue;
                      iterProperties.GetAttribute("name", sName);
                      iterProperties.GetAttribute("value", sValue);

                      pEntity->properties[spitfire::string::ToString_t(sName)] = spitfire::string::ToString_t(sValue);

                      iterProperties.Next("property");
                    }
                  }
                }

                data.entities.push_back(pEntity);
              }

              iter.Next("entity");
            };
          }
        }
      }

      // For testing saving of .world files
      //SaveToFile(TEXT("/media/development/dev/sudoku/data/" ... ".world"));

      return RESULT_SUCCESS;
    }