1) Removed warnings.

2) Enabled up/down events (e.g. pressing arrow up/down).


git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/trunk/supertuxkart@2152 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
hikerstk 2008-07-10 00:43:33 +00:00
parent edbfdece99
commit df3b8206ed
2 changed files with 144 additions and 122 deletions

View File

@ -39,10 +39,7 @@ enum WidgetTokens
WTOK_IMG0, WTOK_IMG0,
WTOK_IMG1, WTOK_IMG1,
WTOK_AUTHOR, WTOK_AUTHOR,
WTOK_EMPTY_UP,
WTOK_UP, WTOK_UP,
WTOK_EMPTY_DOWN,
WTOK_DOWN, WTOK_DOWN,
WTOK_EMPTY0 = 1000, WTOK_EMPTY0 = 1000,
WTOK_TRACK0 = 2000 WTOK_TRACK0 = 2000
@ -94,11 +91,12 @@ TrackSel::TrackSel()
updateScrollPosition(); updateScrollPosition();
// Make sure to select one track. The call to update() here is necessary, // Make sure to select one track. The call to update() here is necessary,
// since it guarantees that selectedWgt is indeed track0 (otherwise the // since it guarantees that selectedWgt is indeed a track (otherwise the
// manager might select e.g. arrow up, and then no track is displayed). // manager might select e.g. arrow up, and then no track is displayed).
widget_manager->setSelectedWgt(WTOK_TRACK0+(m_max_entries-1)/2); widget_manager->setSelectedWgt(WTOK_TRACK0+(m_max_entries-1)/2);
update(0); displayImages(0);
widget_manager->layout(WGT_AREA_TOP); widget_manager->layout(WGT_AREA_TOP);
//update(0);
} // TrackSel } // TrackSel
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -143,6 +141,7 @@ void TrackSel::updateScrollPosition()
widget_manager->setWgtText(WTOK_TRACK0+i, g[-indx-1]); widget_manager->setWgtText(WTOK_TRACK0+i, g[-indx-1]);
} }
} // for i } // for i
m_current_track = -1; // force new display of tracks
} // updateScrollPosition } // updateScrollPosition
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -190,30 +189,11 @@ void TrackSel::switchGroup()
} // switchGroup } // switchGroup
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void TrackSel::update(float dt) void TrackSel::displayImages(int selected_track)
{ {
int indx = widget_manager->getSelectedWgt() - WTOK_TRACK0; if( m_current_track == selected_track) return;
if(indx<0 || indx >= m_max_entries) m_current_track = selected_track;
{ if(selected_track<0)
widget_manager->update(dt);
return;
}
indx = m_offset + indx;
// Don't use modulo here, otherwise (one extreme short lists, e.g. 1 track,
// 1 group, the track is selected when hovering over invisible menu entries
if(indx< 0 ) indx += m_index_avail_tracks.size();
if(indx>=(int)m_index_avail_tracks.size()) indx -= m_index_avail_tracks.size();
if(indx<0 || indx >= (int)m_index_avail_tracks.size())
{
widget_manager->update(dt);
return;
}
const int SELECTED_TRACK = m_index_avail_tracks[indx];
// Group selected, disable track imagess
if( m_current_track != SELECTED_TRACK)
{
if(SELECTED_TRACK<0)
{ {
widget_manager->hideWgtTexture(WTOK_IMG0); widget_manager->hideWgtTexture(WTOK_IMG0);
widget_manager->hideWgtTexture(WTOK_IMG1); widget_manager->hideWgtTexture(WTOK_IMG1);
@ -223,21 +203,17 @@ void TrackSel::update(float dt)
widget_manager->hideWgtBorder(WTOK_IMG1); widget_manager->hideWgtBorder(WTOK_IMG1);
widget_manager->hideWgtRect(WTOK_AUTHOR); widget_manager->hideWgtRect(WTOK_AUTHOR);
widget_manager->hideWgtText(WTOK_AUTHOR); widget_manager->hideWgtText(WTOK_AUTHOR);
return;
} }
else
{ // Now we have to display new images
// ---------------------------------
widget_manager->showWgtBorder(WTOK_IMG0); widget_manager->showWgtBorder(WTOK_IMG0);
widget_manager->showWgtBorder(WTOK_IMG1); widget_manager->showWgtBorder(WTOK_IMG1);
widget_manager->showWgtRect(WTOK_AUTHOR); widget_manager->showWgtRect(WTOK_AUTHOR);
widget_manager->showWgtText(WTOK_AUTHOR); widget_manager->showWgtText(WTOK_AUTHOR);
}
} const Track* TRACK = track_manager->getTrack(selected_track);
if( m_current_track != SELECTED_TRACK &&
SELECTED_TRACK >= 0 &&
SELECTED_TRACK < (int)track_manager->getNumberOfTracks() )
{
const Track* TRACK = track_manager->getTrack( SELECTED_TRACK );
bool isAvailable = !unlock_manager->isLocked(TRACK->getIdent()); bool isAvailable = !unlock_manager->isLocked(TRACK->getIdent());
if( isAvailable ) if( isAvailable )
@ -282,14 +258,14 @@ void TrackSel::update(float dt)
widget_manager->hideWgtRect( WTOK_IMG1 ); widget_manager->hideWgtRect( WTOK_IMG1 );
widget_manager->hideWgtTexture( WTOK_IMG1 ); widget_manager->hideWgtTexture( WTOK_IMG1 );
widget_manager->setWgtTrackNum( WTOK_IMG1, SELECTED_TRACK ); widget_manager->setWgtTrackNum( WTOK_IMG1, selected_track );
widget_manager->showWgtTrack( WTOK_IMG1 ); widget_manager->showWgtTrack( WTOK_IMG1 );
} }
else if( screenshot.empty() ) else if( screenshot.empty() )
{ {
widget_manager->hideWgtRect( WTOK_IMG0 ); widget_manager->hideWgtRect( WTOK_IMG0 );
widget_manager->hideWgtTexture( WTOK_IMG0 ); widget_manager->hideWgtTexture( WTOK_IMG0 );
widget_manager->setWgtTrackNum( WTOK_IMG0, SELECTED_TRACK ); widget_manager->setWgtTrackNum( WTOK_IMG0, selected_track );
widget_manager->showWgtTrack( WTOK_IMG0 ); widget_manager->showWgtTrack( WTOK_IMG0 );
widget_manager->setWgtColor( WTOK_IMG1, WGT_WHITE); widget_manager->setWgtColor( WTOK_IMG1, WGT_WHITE);
@ -302,7 +278,7 @@ void TrackSel::update(float dt)
{ {
widget_manager->hideWgtRect( WTOK_IMG0 ); widget_manager->hideWgtRect( WTOK_IMG0 );
widget_manager->hideWgtTexture( WTOK_IMG0 ); widget_manager->hideWgtTexture( WTOK_IMG0 );
widget_manager->setWgtTrackNum( WTOK_IMG0, SELECTED_TRACK ); widget_manager->setWgtTrackNum( WTOK_IMG0, selected_track );
widget_manager->showWgtTrack( WTOK_IMG0 ); widget_manager->showWgtTrack( WTOK_IMG0 );
widget_manager->hideWgtRect( WTOK_IMG1 ); widget_manager->hideWgtRect( WTOK_IMG1 );
@ -310,9 +286,29 @@ void TrackSel::update(float dt)
widget_manager->hideWgtTrack( WTOK_IMG1 ); widget_manager->hideWgtTrack( WTOK_IMG1 );
} }
} // isAvailable } // isAvailable
} // m_current_track != SELECTED_TRACK && ... } // displayImages
m_current_track = SELECTED_TRACK; //-----------------------------------------------------------------------------
void TrackSel::update(float dt)
{
int indx = widget_manager->getSelectedWgt() - WTOK_TRACK0;
if(indx<0 || indx >= m_max_entries)
{
widget_manager->update(dt);
return;
}
indx = m_offset + indx;
// Don't use modulo here, otherwise (one extreme short lists, e.g. 1 track,
// 1 group, the track is selected when hovering over invisible menu entries
if(indx< 0 ) indx += m_index_avail_tracks.size();
if(indx>=(int)m_index_avail_tracks.size()) indx -= m_index_avail_tracks.size();
if(indx<0 || indx >= (int)m_index_avail_tracks.size())
{
widget_manager->update(dt);
return;
}
displayImages(m_index_avail_tracks[indx]);
widget_manager->update(dt); widget_manager->update(dt);
} // update } // update
@ -369,4 +365,28 @@ void TrackSel::select()
} }
} // select } // select
// ----------------------------------------------------------------------------
void TrackSel::handle(GameAction action, int value)
{
// Forward keypresses to basegui
if(value) return BaseGUI::handle(action, value);
if(action==GA_CURSOR_UP)
{
m_offset--;
if(m_offset < 0) m_offset = (int)m_index_avail_tracks.size() - 1;
updateScrollPosition();
return;
} // if cursor up
if(action ==GA_CURSOR_DOWN)
{
m_offset++;
if(m_offset >= (int)m_index_avail_tracks.size()) m_offset = 0;
updateScrollPosition();
return;
} // if cursor down
BaseGUI::handle(action, value);
} // handle
/* EOF */ /* EOF */

View File

@ -35,11 +35,13 @@ private:
int computeIndent(int n) {return 40+abs((int)(m_num_entries-1)/2 - n)*3;} int computeIndent(int n) {return 40+abs((int)(m_num_entries-1)/2 - n)*3;}
void updateScrollPosition(); void updateScrollPosition();
void switchGroup(); void switchGroup();
void displayImages(int selected_track);
public: public:
TrackSel(); TrackSel();
~TrackSel(); ~TrackSel();
void update(float dt); void update(float dt);
virtual void handle(GameAction, int);
void select(); void select();
}; };