//================================================================================== void CALLBACK gOnUIPageEvent( UINT nEvent, NxI32 nControlID, CDXUTControl* pControl ) { CDXUTDialog *dialog = pControl->m_pDialog; void *userdata = dialog->GetUserData(); if ( userdata ) { TuiElement *page = (TuiElement *) userdata; TextUserInterface *tui = gTui; if ( page ) { TuiElement *ret = page->GetElement( nControlID-1 ); switch ( ret->GetType() ) { case TT_MULTI_SELECT: { switch( nEvent ) { case EVENT_LISTBOX_ITEM_DBLCLK: { //DXUTListBoxItem *pItem = ((CDXUTListBox *)pControl)->GetItem( ((CDXUTListBox *)pControl)->GetSelectedIndex( -1 ) ); break; } case EVENT_LISTBOX_SELECTION: { CDXUTListBox *pListBox = (CDXUTListBox *)pControl; TuiChoiceVector &choices = ret->GetChoices(); NxI32 count = (NxI32)choices.size(); for (NxI32 i=0; i<count; i++) { DXUTListBoxItem *item = pListBox->GetItem(i); TuiChoice &choice = choices[i]; assert(item); if ( item ) { if ( choice.GetState() != item->bSelected ) { choice.SetState(item->bSelected); const char *args[2]; args[0] = choice.GetArg().Get(); if ( choice.GetState() ) args[1] = "true"; else args[1] = "false"; page->ExecuteElement( nControlID-1, 2, args, tui, false ); } } } } } } break; case TT_SLIDER: { CDXUTSlider *slider = (CDXUTSlider *) pControl; NxI32 v = slider->GetValue(); NxF32 fv = ret->GetSliderValue(v); char scratch[512]; sprintf(scratch,"%0.3f", fv ); const char *args[1]; args[0] = scratch; page->ExecuteElement( nControlID-1, 1, args, tui, false ); } break; case TT_COMBO: { CDXUTComboBox *combo = (CDXUTComboBox *) pControl; DXUTComboBoxItem *pItem = combo->GetSelectedItem(); wchar_t *string = pItem->strText; char scratch[512]; wcstombs(scratch, string, 512 ); const char *args[1]; args[0] = scratch; page->ExecuteElement( nControlID-1, 1, args,tui, false ); // now, do we need to hide any items (or show them)? page->OnComboBoxChange( scratch, nControlID-1 ); } break; case TT_BUTTON: case TT_PAGE: page->ExecuteElement( nControlID-1, 0, 0, tui, false ); break; case TT_CHECKBOX: { CDXUTCheckBox *pCheck = (CDXUTCheckBox *)pControl; bool state = pCheck->GetChecked(); const char *args[1]; if ( state ) { args[0] = "true"; } else { args[0] = "false"; } page->ExecuteElement( nControlID-1, 1, args, tui, false ); // now, do we need to hide any items (or show them)? page->OnCheckboxChange( state, nControlID-1 ); } break; } if ( tui ) { if ( ret && ret->GetType() == TT_PAGE ) { // tell the last page it is now exiting TuiElement *exitingPage = tui->GetPage(); if ( exitingPage ) { exitingPage->OnExit( exitingPage ); } tui->SetPage(ret); // tell new page it is now loading TuiElement *loadingPage = tui->GetPage(); if ( loadingPage ) { loadingPage->OnLoad( loadingPage ); } } } } } else { // it's for the console CDXUTEditBox *edit = (CDXUTEditBox *) pControl; switch ( nEvent ) { case EVENT_EDITBOX_STRING: { LPCWSTR text = edit->GetText(); char scratch[1024]; WideToChar(text,scratch,1024); gLog->Display("%s\r\n", scratch); CPARSER.Parse("%s",scratch); edit->SetText(L"",true); } break; case EVENT_EDITBOX_CHANGE: break; default: break; } } }