Properly hide the rectangle box in ghost track screen

This commit is contained in:
Benau 2018-03-17 11:12:21 +08:00
parent f9d2d539ff
commit e66c4eed35
4 changed files with 76 additions and 28 deletions

View File

@ -17,9 +17,9 @@
<tabs width="100%" height="25" id="trackgroups"> </tabs>
<spacer width="100%" height="2%" />
<box width="100%" height="20%" padding="15" layout="vertical-row">
<box id="rect-box" width="100%" height="20%" padding="15" layout="vertical-row">
<div width="100%" height="fit" layout="horizontal-row" >
<label id="lap-text" proportion="1" I18N="In the track screen" text="Number of laps" text_align="right"/>
<label id="lap-text" proportion="1" I18N="In the track screen" text_align="right"/>
<spacer width="40"/>
<div proportion="1" height="fit" layout="horizontal-row">
<spinner id="lap-spinner" width="50%" min_value="1" max_value="20" align="center"
@ -28,7 +28,7 @@
</div>
<spacer height="10"/>
<div width="100%" height="fit" layout="horizontal-row" >
<label id="reverse-text" proportion="1" I18N="In the track screen" text="Drive in reverse" text_align="right"/>
<label id="reverse-text" proportion="1" I18N="In the track screen" text_align="right"/>
<spacer width="40"/>
<div proportion="1" height="fit" layout="horizontal-row">
<div width="50%" height="fit" text-align="center" layout="vertical-row" >

View File

@ -309,8 +309,9 @@ bool Widget::isVisible() const
{
if (m_element != NULL)
{
// repair mismatch
if (m_element->isVisible() != m_is_visible)
Log::warn("Widget", "Widget isVisible mismatch");
m_element->setVisible(m_is_visible);
}
return m_is_visible;
}

View File

@ -48,13 +48,7 @@ static const char ALL_TRACK_GROUPS_ID[] = "all";
DEFINE_SCREEN_SINGLETON( TracksScreen );
// -----------------------------------------------------------------------------
void TracksScreen::loadedFromFile()
{
getWidget<CheckBoxWidget>("reverse")->setState(false);
getWidget<SpinnerWidget>("lap-spinner")->setValue(1);
} // loadedFromFile
// -----------------------------------------------------------------------------
void TracksScreen::eventCallback(Widget* widget, const std::string& name,
const int playerID)
{
@ -97,12 +91,16 @@ void TracksScreen::eventCallback(Widget* widget, const std::string& name,
{
if (STKHost::existHost())
{
assert(m_laps);
assert(m_reversed);
// Remember reverse globally for each stk instance
m_reverse_checked = m_reversed->getState();
UserConfigParams::m_num_laps = m_laps->getValue();
NetworkString vote(PROTOCOL_LOBBY_ROOM);
vote.addUInt8(LobbyProtocol::LE_VOTE);
vote.encodeString(track->getIdent()).addUInt8
(getWidget<SpinnerWidget>("lap-spinner")->getValue())
.addUInt8(
getWidget<CheckBoxWidget>("reverse")->getState());
vote.encodeString(track->getIdent())
.addUInt8(m_laps->getValue())
.addUInt8(m_reversed->getState());
STKHost::get()->sendToServer(&vote, true);
}
else
@ -143,11 +141,56 @@ void TracksScreen::tearDown()
m_network_tracks = false;
} // tearDown
// -----------------------------------------------------------------------------
void TracksScreen::loadedFromFile()
{
m_reversed = NULL;
m_laps = NULL;
} // loadedFromFile
// -----------------------------------------------------------------------------
void TracksScreen::beforeAddingWidget()
{
Screen::init();
Widget* rect_box = getWidget("rect-box");
if (m_bottom_box_height == -1)
m_bottom_box_height = rect_box->m_h;
if (m_network_tracks)
{
rect_box->setVisible(true);
rect_box->m_properties[GUIEngine::PROP_HEIGHT] = StringUtils::toString(m_bottom_box_height);
getWidget("lap-text")->setVisible(true);
//I18N: In track screen
getWidget<LabelWidget>("lap-text")->setText(_("Number of laps"), false);
m_laps = getWidget<SpinnerWidget>("lap-spinner");
assert(m_laps != NULL);
m_laps->setVisible(true);
getWidget("reverse-text")->setVisible(true);
//I18N: In track screen
getWidget<LabelWidget>("reverse-text")->setText(_("Drive in reverse"), false);
m_reversed = getWidget<CheckBoxWidget>("reverse");
assert(m_reversed != NULL);
m_reversed->m_properties[GUIEngine::PROP_ALIGN] = "center";
calculateLayout();
}
else
{
rect_box->setVisible(false);
rect_box->m_properties[GUIEngine::PROP_HEIGHT] = "0";
m_laps = NULL;
m_reversed = NULL;
getWidget("lap-text")->setVisible(false);
getWidget<LabelWidget>("lap-text")->setText(L"", false);
getWidget("lap-spinner")->setVisible(false);
getWidget("reverse-text")->setVisible(false);
getWidget<LabelWidget>("reverse-text")->setText(L"", false);
getWidget("reverse")->setVisible(false);
calculateLayout();
}
RibbonWidget* tabs = getWidget<RibbonWidget>("trackgroups");
tabs->clearAllChildren();
@ -202,20 +245,15 @@ void TracksScreen::init()
tracks_widget->setSelection(0, PLAYER_ID_GAME_MASTER, true);
}
STKTexManager::getInstance()->unsetTextureErrorMessage();
if (!m_network_tracks)
if (m_network_tracks)
{
getWidget("lap-text")->setVisible(false);
getWidget("lap-spinner")->setVisible(false);
getWidget("reverse-text")->setVisible(false);
getWidget("reverse")->setVisible(false);
}
else
{
getWidget("lap-text")->setVisible(true);
getWidget("lap-spinner")->setVisible(true);
getWidget("reverse-text")->setVisible(true);
getWidget("reverse")->setVisible(true);
if (UserConfigParams::m_num_laps == 0 ||
UserConfigParams::m_num_laps > 20)
UserConfigParams::m_num_laps = 1;
m_laps->setValue(UserConfigParams::m_num_laps);
m_reversed->setState(m_reverse_checked);
}
if (NetworkConfig::get()->isAutoConnect() && m_network_tracks)
{
assert(!m_random_track_list.empty());

View File

@ -21,7 +21,11 @@
#include "guiengine/screen.hpp"
#include <deque>
namespace GUIEngine { class Widget; }
namespace GUIEngine
{
class CheckBoxWidget;
class SpinnerWidget;
}
/**
* \brief screen where the user can select a track
@ -36,9 +40,14 @@ private:
TracksScreen() : Screen("tracks.stkgui")
{
m_network_tracks = false;
m_reverse_checked = false;
}
bool m_network_tracks;
GUIEngine::CheckBoxWidget* m_reversed;
GUIEngine::SpinnerWidget* m_laps;
bool m_network_tracks, m_reverse_checked;
int m_bottom_box_height = -1;
/** adds the tracks from the current track group into the tracks ribbon */
void buildTrackList();