diff --git a/stepmania/src/RoomWheel.cpp b/stepmania/src/RoomWheel.cpp index 22ce24457c..f9f570fa90 100644 --- a/stepmania/src/RoomWheel.cpp +++ b/stepmania/src/RoomWheel.cpp @@ -5,6 +5,7 @@ #include "ScreenTextEntry.h" #include "LocalizedString.h" #include "NetworkSyncManager.h" +#include "ScreenManager.h" AutoScreenMessage( SM_BackFromRoomName ) @@ -29,9 +30,6 @@ void RoomWheel::Load( RString sType ) m_offset = 0; LOG->Trace( "RoomWheel::Load('%s')", sType.c_str() ); - m_roomInfo.Load("RoomInfoDisplay"); - this->AddChild(&m_roomInfo); - AddPerminateItem( new RoomWheelData(TYPE_GENERIC, "Create Room", "Create a new game room", THEME->GetMetricC( m_sName, "CreateRoomColor")) ); BuildWheelItemsData( m_CurWheelItemData ); @@ -140,7 +138,8 @@ void RoomWheel::RemoveItem( int index ) static LocalizedString ENTER_ROOM_NAME( "RoomWheel", "Enter room name" ); bool RoomWheel::Select() { - m_roomInfo.RetractInfoBox(); + SCREENMAN->PostMessageToTopScreen( SM_RoomInfoRetract, 0 ); + if( m_iSelection > 0 ) return WheelBase::Select(); else if( m_iSelection == 0 ) @@ -167,10 +166,10 @@ void RoomWheel::Move(int n) { const RoomWheelData* data = GetItem(m_iSelection-m_offset); if (data != NULL) - m_roomInfo.SetRoom( data ); + SCREENMAN->PostMessageToTopScreen( SM_RoomInfoDeploy, 0 ); } else - m_roomInfo.RetractInfoBox(); + SCREENMAN->PostMessageToTopScreen( SM_RoomInfoRetract, 0 ); WheelBase::Move(n); } @@ -203,7 +202,7 @@ void RoomInfoDisplay::RetractInfoBox() { if (m_state == OPEN) OFF_COMMAND( this ); - + m_state = LOCKED; } diff --git a/stepmania/src/RoomWheel.h b/stepmania/src/RoomWheel.h index 41cc010559..6e4cd02dbf 100644 --- a/stepmania/src/RoomWheel.h +++ b/stepmania/src/RoomWheel.h @@ -7,6 +7,9 @@ #include "WheelItemBase.h" #include "ThemeMetric.h" +AutoScreenMessage( SM_RoomInfoRetract ) +AutoScreenMessage( SM_RoomInfoDeploy ) + struct RoomWheelData : public WheelItemBaseData { RoomWheelData() : m_iFlags(0) { WheelItemBaseData::WheelItemBaseData(); } @@ -99,15 +102,13 @@ public: inline RoomWheelData* GetItem(unsigned int i) { return (RoomWheelData*)WheelBase::GetItem(i + m_offset); } void AddPerminateItem(RoomWheelData* itemdata); int GetCurrentIndex() const { return m_iSelection; } - inline void SetRoomInfo( const RoomInfo& info) { m_roomInfo.SetRoomInfo(info); } + int GetPerminateOffset() const { return m_offset; } void AddItem( WheelItemBaseData* itemdata ); void RemoveItem( int index ); private: virtual WheelItemBase *MakeItem(); int m_offset; - - RoomInfoDisplay m_roomInfo; }; #endif diff --git a/stepmania/src/ScreenNetRoom.cpp b/stepmania/src/ScreenNetRoom.cpp index 2a9a799596..59ac2042cc 100644 --- a/stepmania/src/ScreenNetRoom.cpp +++ b/stepmania/src/ScreenNetRoom.cpp @@ -59,12 +59,14 @@ void ScreenNetRoom::Init() m_RoomWheel.SetName( "RoomWheel" ); m_RoomWheel.BeginScreen(); SET_XY( m_RoomWheel ); - ON_COMMAND( m_RoomWheel ); - m_RoomWheel.SetDrawOrder(1); this->AddChild( &m_RoomWheel ); - this->MoveToHead( &m_RoomWheel ); ON_COMMAND( m_RoomWheel ); + m_roomInfo.Load("RoomInfoDisplay"); + m_roomInfo.SetDrawOrder(1); + this->AddChild( &m_roomInfo ); + + this->SortByDrawOrder(); NSMAN->ReportNSSOnOff(7); } @@ -158,7 +160,7 @@ void ScreenNetRoom::HandleScreenMessage( const ScreenMessage SM ) for (int i = 0; i < info.numPlayers; i++) info.players[i] = NSMAN->m_SMOnlinePacket.ReadNT(); - m_RoomWheel.SetRoomInfo(info); + m_roomInfo.SetRoomInfo(info); break; } } @@ -186,6 +188,18 @@ void ScreenNetRoom::HandleScreenMessage( const ScreenMessage SM ) CreateNewRoom( m_newRoomName, m_newRoomDesc, m_newRoomPass); } } + else if ( SM == SM_RoomInfoRetract ) + { + m_roomInfo.RetractInfoBox(); + } + else if ( SM == SM_RoomInfoDeploy ) + { + int i = m_RoomWheel.GetCurrentIndex() - m_RoomWheel.GetPerminateOffset(); + const RoomWheelData* data = m_RoomWheel.GetItem(i); + if (data != NULL) + m_roomInfo.SetRoom(data); + } + ScreenNetSelectBase::HandleScreenMessage( SM ); } diff --git a/stepmania/src/ScreenNetRoom.h b/stepmania/src/ScreenNetRoom.h index 08a50da834..42fe479fc3 100644 --- a/stepmania/src/ScreenNetRoom.h +++ b/stepmania/src/ScreenNetRoom.h @@ -58,6 +58,7 @@ private: RString m_newRoomName, m_newRoomDesc, m_newRoomPass; RoomWheel m_RoomWheel; + RoomInfoDisplay m_roomInfo; }; #endif