fix to work with new AutoScreenMessages

better adding, removing, or selecting elements when or resulting in an empty wheel
style changes in regards to some curly brackets
This commit is contained in:
Josh Allen
2005-04-06 00:17:25 +00:00
parent d137be895e
commit 58c45a9fbf
2 changed files with 66 additions and 33 deletions
+40 -8
View File
@@ -76,6 +76,7 @@ WheelBase::~WheelBase()
void WheelBase::Load( CString sType ) void WheelBase::Load( CString sType )
{ {
m_isEmpty = true;
LOG->Trace( "MusicWheel::Load('%s')", sType.c_str() ); LOG->Trace( "MusicWheel::Load('%s')", sType.c_str() );
SWITCH_SECONDS .Load(sType,"SwitchSeconds"); SWITCH_SECONDS .Load(sType,"SwitchSeconds");
@@ -111,7 +112,8 @@ void WheelBase::Load( CString sType )
FOREACH( WheelItemBase*, m_WheelBaseItems, i ) FOREACH( WheelItemBase*, m_WheelBaseItems, i )
SAFE_DELETE( *i ); SAFE_DELETE( *i );
m_WheelBaseItems.clear(); m_WheelBaseItems.clear();
for( int i=0; i<NUM_WHEEL_ITEMS; i++ ) { for( int i=0; i<NUM_WHEEL_ITEMS; i++ )
{
m_WheelBaseItems.push_back( new WheelItemBase ); m_WheelBaseItems.push_back( new WheelItemBase );
} }
@@ -252,7 +254,8 @@ void WheelBase::UpdateScrollbar()
int total_num_items = m_WheelBaseItemsData.size(); int total_num_items = m_WheelBaseItemsData.size();
float item_at=m_iSelection - m_fPositionOffsetFromSelection; float item_at=m_iSelection - m_fPositionOffsetFromSelection;
if(NUM_WHEEL_ITEMS >= total_num_items) { if(NUM_WHEEL_ITEMS >= total_num_items)
{
m_ScrollBar.SetPercentage( 0, 1 ); m_ScrollBar.SetPercentage( 0, 1 );
} else { } else {
float size = float(NUM_WHEEL_ITEMS) / total_num_items; float size = float(NUM_WHEEL_ITEMS) / total_num_items;
@@ -412,6 +415,8 @@ bool WheelBase::Select() // return true if this selection ends the screen
m_Moving = 0; m_Moving = 0;
if (!m_isEmpty)
{
switch( m_WheelBaseItemsData[m_iSelection]->m_Type ) switch( m_WheelBaseItemsData[m_iSelection]->m_Type )
{ {
case TYPE_GENERIC: case TYPE_GENERIC:
@@ -433,6 +438,8 @@ bool WheelBase::Select() // return true if this selection ends the screen
return false; return false;
} }
} }
return false;
}
int WheelBase::IsMoving() const int WheelBase::IsMoving() const
{ {
@@ -582,14 +589,23 @@ void WheelBase::Move(int n)
ChangeMusic(m_Moving); ChangeMusic(m_Moving);
} }
void WheelBase::AddItem(WheelItemBaseData* itemdata) { void WheelBase::AddItem(WheelItemBaseData* itemdata)
{
int visible, index; int visible, index;
m_WheelBaseItemsData.push_back(itemdata); m_WheelBaseItemsData.push_back(itemdata);
visible = FirstVisibleIndex(); visible = FirstVisibleIndex();
index = m_WheelBaseItemsData.size(); index = m_WheelBaseItemsData.size();
if (m_isEmpty)
{
m_isEmpty = false;
//Remove the - Empty - field when we add an object from an empty state.
RemoveItem(0);
}
//If the item was shown in the wheel, rebuild the wheel //If the item was shown in the wheel, rebuild the wheel
if ((0 <= (index - visible)) && ((index - visible) < NUM_WHEEL_ITEMS)) { if ((0 <= (index - visible)) && ((index - visible) < NUM_WHEEL_ITEMS))
{
RebuildWheelItems(); RebuildWheelItems();
SCREENMAN->SystemMessageNoAnimate("redraw"); SCREENMAN->SystemMessageNoAnimate("redraw");
} }
@@ -611,7 +627,8 @@ void WheelBase::ChangeMusic(int dist)
m_soundChangeMusic.Play(); m_soundChangeMusic.Play();
} }
void WheelBase::BuildWheelItemsData( vector<WheelItemBaseData*> &arrayWheelItemDatas ) { void WheelBase::BuildWheelItemsData( vector<WheelItemBaseData*> &arrayWheelItemDatas )
{
if( arrayWheelItemDatas.empty() ) if( arrayWheelItemDatas.empty() )
{ {
arrayWheelItemDatas.push_back( new WheelItemBaseData(TYPE_GENERIC, "- EMPTY -", RageColor(1,0,0,1)) ); arrayWheelItemDatas.push_back( new WheelItemBaseData(TYPE_GENERIC, "- EMPTY -", RageColor(1,0,0,1)) );
@@ -684,11 +701,18 @@ void WheelBase::RebuildWheelItems( int dist )
WheelItemBaseData* WheelBase::LastSelected( ) WheelItemBaseData* WheelBase::LastSelected( )
{ {
if (m_isEmpty)
return NULL;
else
return m_LastSelection; return m_LastSelection;
} }
void WheelBase::RemoveItem( int index ) { void WheelBase::RemoveItem( int index )
if (index < m_WheelBaseItemsData.size()) { {
if (!m_isEmpty)
{
if (index < m_WheelBaseItemsData.size())
{
vector<WheelItemBaseData *>::iterator i = m_WheelBaseItemsData.begin(); vector<WheelItemBaseData *>::iterator i = m_WheelBaseItemsData.begin();
i += index; i += index;
@@ -699,11 +723,19 @@ void WheelBase::RemoveItem( int index ) {
SAFE_DELETE( *i ); SAFE_DELETE( *i );
m_WheelBaseItemsData.erase(i); m_WheelBaseItemsData.erase(i);
if (m_WheelBaseItemsData.size() < 1)
{
m_isEmpty = true;
BuildWheelItemsData(m_WheelBaseItemsData);
}
RebuildWheelItems(); RebuildWheelItems();
} }
} }
}
int WheelBase::FirstVisibleIndex() { int WheelBase::FirstVisibleIndex()
{
// rewind to first index that will be displayed; // rewind to first index that will be displayed;
int iFirstVisibleIndex = m_iSelection; int iFirstVisibleIndex = m_iSelection;
if( m_iSelection > int(m_WheelBaseItemsData.size()-1) ) if( m_iSelection > int(m_WheelBaseItemsData.size()-1) )
+2 -1
View File
@@ -16,7 +16,7 @@
#include "WheelItemBase.h" #include "WheelItemBase.h"
#include "ThemeMetric.h" #include "ThemeMetric.h"
extern const AutoScreenMessage SM_SongChanged; // TODO: Replace this with a Message and MESSAGEMAN AutoScreenMessage( SM_SongChanged ); // TODO: Replace this with a Message and MESSAGEMAN
//struct CompareSongPointerArrayBySectionName; //struct CompareSongPointerArrayBySectionName;
@@ -67,6 +67,7 @@ protected:
vector<WheelItemBase *> m_WheelBaseItems; vector<WheelItemBase *> m_WheelBaseItems;
WheelItemBaseData* m_LastSelection; WheelItemBaseData* m_LastSelection;
bool m_isEmpty;
int m_iSelection; // index into m_CurWheelItemBaseData int m_iSelection; // index into m_CurWheelItemBaseData
CString m_sExpandedSectionName; CString m_sExpandedSectionName;