example browser: fix for GUI button toggle state
This commit is contained in:
@@ -43,6 +43,7 @@ struct ButtonParams
|
|||||||
int m_buttonId;
|
int m_buttonId;
|
||||||
void* m_userPointer;
|
void* m_userPointer;
|
||||||
bool m_isTrigger;
|
bool m_isTrigger;
|
||||||
|
bool m_initialState;
|
||||||
|
|
||||||
ButtonParamChangedCallback m_callback;
|
ButtonParamChangedCallback m_callback;
|
||||||
ButtonParams(const char* name, int buttonId, bool isTrigger)
|
ButtonParams(const char* name, int buttonId, bool isTrigger)
|
||||||
@@ -50,6 +51,7 @@ struct ButtonParams
|
|||||||
m_buttonId(buttonId),
|
m_buttonId(buttonId),
|
||||||
m_userPointer(0),
|
m_userPointer(0),
|
||||||
m_isTrigger(isTrigger),
|
m_isTrigger(isTrigger),
|
||||||
|
m_initialState(false),
|
||||||
m_callback(0)
|
m_callback(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,12 +3,14 @@
|
|||||||
|
|
||||||
struct MyButtonEventHandler : public Gwen::Event::Handler
|
struct MyButtonEventHandler : public Gwen::Event::Handler
|
||||||
{
|
{
|
||||||
|
Gwen::Controls::Button* m_buttonControl;
|
||||||
ButtonParamChangedCallback m_callback;
|
ButtonParamChangedCallback m_callback;
|
||||||
void* m_userPointer;
|
void* m_userPointer;
|
||||||
int m_buttonId;
|
int m_buttonId;
|
||||||
|
|
||||||
MyButtonEventHandler(ButtonParamChangedCallback callback, int buttonId, void* userPointer)
|
MyButtonEventHandler(Gwen::Controls::Button* buttonControl, ButtonParamChangedCallback callback, int buttonId, void* userPointer)
|
||||||
:m_callback(callback),
|
:m_buttonControl(buttonControl),
|
||||||
|
m_callback(callback),
|
||||||
m_userPointer(userPointer),
|
m_userPointer(userPointer),
|
||||||
m_buttonId(buttonId)
|
m_buttonId(buttonId)
|
||||||
{
|
{
|
||||||
@@ -18,7 +20,12 @@ struct MyButtonEventHandler : public Gwen::Event::Handler
|
|||||||
{
|
{
|
||||||
if (m_callback)
|
if (m_callback)
|
||||||
{
|
{
|
||||||
(*m_callback)(m_buttonId, true, m_userPointer);
|
bool buttonState = true;
|
||||||
|
if (m_buttonControl->IsToggle())
|
||||||
|
{
|
||||||
|
buttonState = m_buttonControl->GetToggleState();
|
||||||
|
}
|
||||||
|
( *m_callback )( m_buttonId, buttonState, m_userPointer );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -140,10 +147,11 @@ void GwenParameterInterface::registerButtonParameter(ButtonParams& params)
|
|||||||
{
|
{
|
||||||
|
|
||||||
Gwen::Controls::Button* button = new Gwen::Controls::Button(m_gwenInternalData->m_demoPage->GetPage());
|
Gwen::Controls::Button* button = new Gwen::Controls::Button(m_gwenInternalData->m_demoPage->GetPage());
|
||||||
MyButtonEventHandler* handler = new MyButtonEventHandler(params.m_callback,params.m_buttonId,params.m_userPointer);
|
MyButtonEventHandler* handler = new MyButtonEventHandler(button, params.m_callback,params.m_buttonId,params.m_userPointer);
|
||||||
button->SetText(params.m_name);
|
button->SetText(params.m_name);
|
||||||
button->onPress.Add( handler, &MyButtonEventHandler::onButtonPress );
|
button->onPress.Add( handler, &MyButtonEventHandler::onButtonPress );
|
||||||
button->SetIsToggle(params.m_isTrigger);
|
button->SetIsToggle(params.m_isTrigger);
|
||||||
|
button->SetToggleState(params.m_initialState);
|
||||||
|
|
||||||
m_paramInternalData->m_buttons.push_back(button);
|
m_paramInternalData->m_buttons.push_back(button);
|
||||||
m_paramInternalData->m_buttonEventHandlers.push_back(handler);
|
m_paramInternalData->m_buttonEventHandlers.push_back(handler);
|
||||||
|
|||||||
@@ -665,7 +665,14 @@ void boolPtrButtonCallback(int buttonId, bool buttonState, void* userPointer)
|
|||||||
|
|
||||||
void toggleSolverModeCallback(int buttonId, bool buttonState, void* userPointer)
|
void toggleSolverModeCallback(int buttonId, bool buttonState, void* userPointer)
|
||||||
{
|
{
|
||||||
gSolverMode ^= buttonId;
|
if (buttonState)
|
||||||
|
{
|
||||||
|
gSolverMode |= buttonId;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gSolverMode &= ~buttonId;
|
||||||
|
}
|
||||||
if (CommonRigidBodyMTBase* crb = reinterpret_cast<CommonRigidBodyMTBase*>(userPointer))
|
if (CommonRigidBodyMTBase* crb = reinterpret_cast<CommonRigidBodyMTBase*>(userPointer))
|
||||||
{
|
{
|
||||||
if (crb->m_dynamicsWorld)
|
if (crb->m_dynamicsWorld)
|
||||||
@@ -795,6 +802,7 @@ void CommonRigidBodyMTBase::createDefaultParameters()
|
|||||||
{
|
{
|
||||||
// create a button to toggle multithreaded world
|
// create a button to toggle multithreaded world
|
||||||
ButtonParams button( "Multithreaded world enable", 0, true );
|
ButtonParams button( "Multithreaded world enable", 0, true );
|
||||||
|
button.m_initialState = gMultithreadedWorld;
|
||||||
button.m_userPointer = &gMultithreadedWorld;
|
button.m_userPointer = &gMultithreadedWorld;
|
||||||
button.m_callback = boolPtrButtonCallback;
|
button.m_callback = boolPtrButtonCallback;
|
||||||
m_guiHelper->getParameterInterface()->registerButtonParameter( button );
|
m_guiHelper->getParameterInterface()->registerButtonParameter( button );
|
||||||
@@ -802,6 +810,7 @@ void CommonRigidBodyMTBase::createDefaultParameters()
|
|||||||
{
|
{
|
||||||
// create a button to toggle profile printing
|
// create a button to toggle profile printing
|
||||||
ButtonParams button( "Display solver info", 0, true );
|
ButtonParams button( "Display solver info", 0, true );
|
||||||
|
button.m_initialState = gDisplayProfileInfo;
|
||||||
button.m_userPointer = &gDisplayProfileInfo;
|
button.m_userPointer = &gDisplayProfileInfo;
|
||||||
button.m_callback = boolPtrButtonCallback;
|
button.m_callback = boolPtrButtonCallback;
|
||||||
m_guiHelper->getParameterInterface()->registerButtonParameter( button );
|
m_guiHelper->getParameterInterface()->registerButtonParameter( button );
|
||||||
@@ -813,7 +822,7 @@ void CommonRigidBodyMTBase::createDefaultParameters()
|
|||||||
char buttonName[256];
|
char buttonName[256];
|
||||||
SolverType solverType = static_cast<SolverType>(i);
|
SolverType solverType = static_cast<SolverType>(i);
|
||||||
sprintf(buttonName, "Solver Type %s", getSolverTypeName(solverType));
|
sprintf(buttonName, "Solver Type %s", getSolverTypeName(solverType));
|
||||||
ButtonParams button( buttonName, 0, true );
|
ButtonParams button( buttonName, 0, false );
|
||||||
button.m_buttonId = solverType;
|
button.m_buttonId = solverType;
|
||||||
button.m_callback = setSolverTypeCallback;
|
button.m_callback = setSolverTypeCallback;
|
||||||
m_guiHelper->getParameterInterface()->registerButtonParameter( button );
|
m_guiHelper->getParameterInterface()->registerButtonParameter( button );
|
||||||
@@ -831,6 +840,7 @@ void CommonRigidBodyMTBase::createDefaultParameters()
|
|||||||
{
|
{
|
||||||
ButtonParams button( "Solver use SIMD", 0, true );
|
ButtonParams button( "Solver use SIMD", 0, true );
|
||||||
button.m_buttonId = SOLVER_SIMD;
|
button.m_buttonId = SOLVER_SIMD;
|
||||||
|
button.m_initialState = !! (gSolverMode & button.m_buttonId);
|
||||||
button.m_callback = toggleSolverModeCallback;
|
button.m_callback = toggleSolverModeCallback;
|
||||||
button.m_userPointer = this;
|
button.m_userPointer = this;
|
||||||
m_guiHelper->getParameterInterface()->registerButtonParameter( button );
|
m_guiHelper->getParameterInterface()->registerButtonParameter( button );
|
||||||
@@ -838,6 +848,7 @@ void CommonRigidBodyMTBase::createDefaultParameters()
|
|||||||
{
|
{
|
||||||
ButtonParams button( "Solver randomize order", 0, true );
|
ButtonParams button( "Solver randomize order", 0, true );
|
||||||
button.m_buttonId = SOLVER_RANDMIZE_ORDER;
|
button.m_buttonId = SOLVER_RANDMIZE_ORDER;
|
||||||
|
button.m_initialState = !! (gSolverMode & button.m_buttonId);
|
||||||
button.m_callback = toggleSolverModeCallback;
|
button.m_callback = toggleSolverModeCallback;
|
||||||
button.m_userPointer = this;
|
button.m_userPointer = this;
|
||||||
m_guiHelper->getParameterInterface()->registerButtonParameter( button );
|
m_guiHelper->getParameterInterface()->registerButtonParameter( button );
|
||||||
@@ -845,6 +856,7 @@ void CommonRigidBodyMTBase::createDefaultParameters()
|
|||||||
{
|
{
|
||||||
ButtonParams button( "Solver interleave contact/friction", 0, true );
|
ButtonParams button( "Solver interleave contact/friction", 0, true );
|
||||||
button.m_buttonId = SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS;
|
button.m_buttonId = SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS;
|
||||||
|
button.m_initialState = !! (gSolverMode & button.m_buttonId);
|
||||||
button.m_callback = toggleSolverModeCallback;
|
button.m_callback = toggleSolverModeCallback;
|
||||||
button.m_userPointer = this;
|
button.m_userPointer = this;
|
||||||
m_guiHelper->getParameterInterface()->registerButtonParameter( button );
|
m_guiHelper->getParameterInterface()->registerButtonParameter( button );
|
||||||
@@ -852,6 +864,7 @@ void CommonRigidBodyMTBase::createDefaultParameters()
|
|||||||
{
|
{
|
||||||
ButtonParams button( "Solver 2 friction directions", 0, true );
|
ButtonParams button( "Solver 2 friction directions", 0, true );
|
||||||
button.m_buttonId = SOLVER_USE_2_FRICTION_DIRECTIONS;
|
button.m_buttonId = SOLVER_USE_2_FRICTION_DIRECTIONS;
|
||||||
|
button.m_initialState = !! (gSolverMode & button.m_buttonId);
|
||||||
button.m_callback = toggleSolverModeCallback;
|
button.m_callback = toggleSolverModeCallback;
|
||||||
button.m_userPointer = this;
|
button.m_userPointer = this;
|
||||||
m_guiHelper->getParameterInterface()->registerButtonParameter( button );
|
m_guiHelper->getParameterInterface()->registerButtonParameter( button );
|
||||||
@@ -859,6 +872,7 @@ void CommonRigidBodyMTBase::createDefaultParameters()
|
|||||||
{
|
{
|
||||||
ButtonParams button( "Solver friction dir caching", 0, true );
|
ButtonParams button( "Solver friction dir caching", 0, true );
|
||||||
button.m_buttonId = SOLVER_ENABLE_FRICTION_DIRECTION_CACHING;
|
button.m_buttonId = SOLVER_ENABLE_FRICTION_DIRECTION_CACHING;
|
||||||
|
button.m_initialState = !! (gSolverMode & button.m_buttonId);
|
||||||
button.m_callback = toggleSolverModeCallback;
|
button.m_callback = toggleSolverModeCallback;
|
||||||
button.m_userPointer = this;
|
button.m_userPointer = this;
|
||||||
m_guiHelper->getParameterInterface()->registerButtonParameter( button );
|
m_guiHelper->getParameterInterface()->registerButtonParameter( button );
|
||||||
@@ -866,6 +880,7 @@ void CommonRigidBodyMTBase::createDefaultParameters()
|
|||||||
{
|
{
|
||||||
ButtonParams button( "Solver warmstarting", 0, true );
|
ButtonParams button( "Solver warmstarting", 0, true );
|
||||||
button.m_buttonId = SOLVER_USE_WARMSTARTING;
|
button.m_buttonId = SOLVER_USE_WARMSTARTING;
|
||||||
|
button.m_initialState = !! (gSolverMode & button.m_buttonId);
|
||||||
button.m_callback = toggleSolverModeCallback;
|
button.m_callback = toggleSolverModeCallback;
|
||||||
button.m_userPointer = this;
|
button.m_userPointer = this;
|
||||||
m_guiHelper->getParameterInterface()->registerButtonParameter( button );
|
m_guiHelper->getParameterInterface()->registerButtonParameter( button );
|
||||||
|
|||||||
Reference in New Issue
Block a user