virtual int handleEvent( mxEvent *event ) { int iret = 0; switch ( event->event ) { default: break; case mxEvent::Action: { iret = 1; switch ( event->action ) { default: iret = 0; break; case IDC_MODELTAB_SHOWALL: case IDC_MODELTAB_HIDEALL: { bool show = ( event->action == IDC_MODELTAB_SHOWALL ) ? true : false; int c = models->Count(); for ( int i = 0; i < c ; i++ ) { models->ShowModelIn3DView( i, show ); } } break; case IDC_MODELTAB_LOAD: { const char *ptr = mxGetOpenFileName( this, FacePoser_MakeWindowsSlashes( va( "%s/models/", GetGameDirectory() ) ), "*.mdl" ); if (ptr) { g_MDLViewer->LoadModelFile( ptr ); } } break; case IDC_MODELTAB_CLOSE: { int idx = getSelectedIndex(); if ( idx >= 0 ) { models->FreeModel( idx ); } } break; case IDC_MODELTAB_CLOSEALL: { models->CloseAllModels(); } break; case IDC_MODELTAB_CENTERONFACE: { g_pControlPanel->CenterOnFace(); } break; case IDC_MODELTAB_TOGGLE3DVIEW: { int idx = getSelectedIndex(); if ( idx >= 0 ) { bool visible = models->IsModelShownIn3DView( idx ); models->ShowModelIn3DView( idx, !visible ); } } break; case IDC_MODELTAB_ASSOCIATEACTOR: { int idx = getSelectedIndex(); if ( idx >= 0 ) { char const *modelname = models->GetModelFileName( idx ); CChoreoScene *scene = g_pChoreoView->GetScene(); if ( scene ) { CChoiceParams params; strcpy( params.m_szDialogTitle, "Associate Actor" ); params.m_bPositionDialog = false; params.m_nLeft = 0; params.m_nTop = 0; strcpy( params.m_szPrompt, "Choose actor:" ); params.m_Choices.RemoveAll(); params.m_nSelected = -1; int oldsel = -1; int c = scene->GetNumActors(); ChoiceText text; for ( int i = 0; i < c; i++ ) { CChoreoActor *a = scene->GetActor( i ); Assert( a ); strcpy( text.choice, a->GetName() ); if ( !stricmp( a->GetFacePoserModelName(), modelname ) ) { params.m_nSelected = i; oldsel = -1; } params.m_Choices.AddToTail( text ); } if ( ChoiceProperties( ¶ms ) && params.m_nSelected != oldsel ) { // Chose something new... CChoreoActor *a = scene->GetActor( params.m_nSelected ); g_pChoreoView->AssociateModelToActor( a, idx ); } } } } } } break; } if ( iret ) return iret; return BaseClass::handleEvent( event ); }
virtual void ShowRightClickMenu( int mx, int my ) { mxPopupMenu *pop = new mxPopupMenu(); Assert( pop ); char const *current = ""; char const *filename = ""; int idx = getSelectedIndex(); if ( idx >= 0 ) { current = models->GetModelName( idx ); filename = models->GetModelFileName( idx ); } if ( models->Count() < MAX_FP_MODELS ) { pop->add( "Load Model...", IDC_MODELTAB_LOAD ); } if ( idx >= 0 ) { pop->add( va( "Close '%s'", current ), IDC_MODELTAB_CLOSE ); } if ( models->Count() > 0 ) { pop->add( "Close All", IDC_MODELTAB_CLOSEALL ); } if ( idx >= 0 ) { pop->addSeparator(); pop->add( va( "Center %s's face", current ), IDC_MODELTAB_CENTERONFACE ); CChoreoScene *scene = g_pChoreoView->GetScene(); if ( scene ) { // See if there is already an actor with this model associated int c = scene->GetNumActors(); bool hasassoc = false; for ( int i = 0; i < c; i++ ) { CChoreoActor *a = scene->GetActor( i ); Assert( a ); if ( stricmp( a->GetFacePoserModelName(), filename ) ) continue; hasassoc = true; break; } if ( hasassoc ) { pop->add( va( "Change associated actor for %s", current ), IDC_MODELTAB_ASSOCIATEACTOR ); } else { pop->add( va( "Associate actor to %s", current ), IDC_MODELTAB_ASSOCIATEACTOR ); } } pop->addSeparator(); bool visible = models->IsModelShownIn3DView( idx ); if ( visible ) { pop->add( va( "Remove %s from 3D View", current ), IDC_MODELTAB_TOGGLE3DVIEW ); } else { pop->add( va( "Show %s in 3D View", current ), IDC_MODELTAB_TOGGLE3DVIEW ); } } if ( models->Count() > 0 ) { pop->addSeparator(); pop->add( "Show All", IDC_MODELTAB_SHOWALL ); pop->add( "Hide All", IDC_MODELTAB_HIDEALL ); } // Convert click position POINT pt; pt.x = mx; pt.y = my; // Convert coordinate space pop->popup( this, pt.x, pt.y ); }