/////////////////////////////////////////////////////////////////////////////// // Callback for when the remove button is pressed. If there are any items // selected in the list control, they will be removed from the list. // void ReflectStlSetInterpreter::OnRemove( const ButtonClickedArgs& args ) { Reflect::ObjectPtr clientData = args.m_Control->GetClientData(); if ( clientData.ReferencesObject() && clientData->IsClass( Reflect::GetClass<ClientData>() ) ) { ClientData* data = static_cast< ClientData* >( clientData.Ptr() ); List* list = static_cast< List* >( data->GetControl() ); const std::set< size_t >& selectedItemIndices = list->a_SelectedItemIndices.Get(); if ( !selectedItemIndices.empty() ) { // for each item in the array to remove (by index) std::set< size_t >::const_reverse_iterator itr = selectedItemIndices.rbegin(); std::set< size_t >::const_reverse_iterator end = selectedItemIndices.rend(); for ( ; itr != end; ++itr ) { // for each array in the selection set (the objects the array data is connected to) std::vector< DataPtr >::const_iterator serItr = m_Datas.begin(); std::vector< DataPtr >::const_iterator serEnd = m_Datas.end(); for ( ; serItr != serEnd; ++serItr ) { Reflect::StlSetData* setData = Reflect::AssertCast<Reflect::StlSetData>(*serItr); std::vector< DataPtr > items; setData->GetItems( items ); setData->RemoveItem( items[ *itr ] ); } } list->a_SelectedItemIndices.Set( std::set< size_t > () ); args.m_Control->GetCanvas()->Read(); } } }
void ReflectStlVectorInterpreter::OnMoveDown( const ButtonClickedArgs& args ) { Reflect::ObjectPtr clientData = args.m_Control->GetClientData(); if ( clientData.ReferencesObject() && clientData->IsClass( Reflect::GetClass<ClientData>() ) ) { ClientData* data = static_cast< ClientData* >( clientData.Ptr() ); List* list = static_cast< List* >( data->GetControl() ); std::set< size_t > selectedItemIndices = list->a_SelectedItemIndices.Get(); if ( !selectedItemIndices.empty() ) { // for each array in the selection set (the objects the array data is connected to) std::vector< DataPtr >::const_iterator serItr = m_Datas.begin(); std::vector< DataPtr >::const_iterator serEnd = m_Datas.end(); for ( ; serItr != serEnd; ++serItr ) { Reflect::StlVectorData* arrayData = Reflect::AssertCast<Reflect::StlVectorData>(*serItr); arrayData->MoveDown( selectedItemIndices ); } list->a_SelectedItemIndices.Set( selectedItemIndices ); args.m_Control->GetCanvas()->Read(); } } }
/////////////////////////////////////////////////////////////////////////////// // Callback for when the add button is pressed. Displays a dialog that lets // you enter a new key-value pair. If you enter a key that already exists in // the list, you will be asked if you want to replace it or not. // void ReflectStlSetInterpreter::OnAdd( const ButtonClickedArgs& args ) { Reflect::ObjectPtr clientData = args.m_Control->GetClientData(); if ( clientData.ReferencesObject() && clientData->IsClass( Reflect::GetClass<ClientData>() ) ) { ClientData* data = static_cast< ClientData* >( clientData.Ptr() ); List* list = static_cast< List* >( data->GetControl() ); list->e_AddItem.Raise( AddItemArgs() ); args.m_Control->GetCanvas()->Read(); } }