Use tabs in register screen (work in progress).

This commit is contained in:
hiker 2015-01-09 09:42:18 +11:00
parent 91b4c6e08a
commit 5ccedfc349
3 changed files with 62 additions and 34 deletions

View File

@ -4,22 +4,23 @@
<header align="center" width="80%" text="Create User" text_align="center" <header align="center" width="80%" text="Create User" text_align="center"
I18N="In the registration dialog" /> I18N="In the registration dialog" />
<spacer height="15" width="10"/> <spacer height="15" width="10"/>
<tabs id="mode_tabs" height="10%" max_height="110" x="2%" width="98%" align="center">
<icon-button id="tab_new_online" width="128" height="128" icon="gui/main_network.png"
I18N="Section in the register screen" text="New Online Account"/>
<icon-button id="tab_existing_online" width="128" height="128" icon="gui/main_network.png"
I18N="Section in the register screen" text="Existing Online Account"/>
<icon-button id="tab_offline" width="128" height="128" icon="gui/options_players.png"
I18N="Section in the register screen" text="Offline Account"/>
</tabs>
<box proportion="1" width="100%" height="100%" layout="vertical-row"> <box proportion="1" width="100%" height="100%" layout="vertical-row">
<div width="90%" align="center" layout="vertical-row" height="80%"> <div width="90%" align="center" layout="vertical-row" height="80%">
<div width="100%" height="12%" layout="horizontal-row" > <div width="100%" height="12%" layout="horizontal-row" >
<label proportion="1" height="100%" text_align="left" <label proportion="1" height="100%" text_align="left"
I18N="In the registration dialog" text="Local Username"/> I18N="In the registration dialog" text="Local Username"/>
<textbox id="local_username" proportion="2" height="fit" I18N="In the registration dialog"/> <textbox id="local_username" proportion="2" height="fit" I18N="In the registration dialog"/>
</div> </div>
<div width="100%" height="12%" layout="horizontal-row" >
<label id="label_online" proportion="1" height="100%" text_align="left"
I18N="In the registration dialog" text="Create online account"/>
<div proportion="2" layout="horizontal-row" height="fit">
<checkbox id="online" I18N="In the registration dialog" text_align="left"/>
</div>
</div>
<div width="100%" height="12%" layout="horizontal-row" > <div width="100%" height="12%" layout="horizontal-row" >
<label id="label_username" proportion="1" height="100%" text_align="left" <label id="label_username" proportion="1" height="100%" text_align="left"

View File

@ -50,6 +50,22 @@ RegisterScreen::RegisterScreen() : Screen("online/register.stkgui")
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void RegisterScreen::init() void RegisterScreen::init()
{ {
RibbonWidget* ribbon = getWidget<RibbonWidget>("mode_tabs");
assert(ribbon);
if (UserConfigParams::m_internet_status !=
Online::RequestManager::IPERM_NOT_ALLOWED)
{
m_account_mode = ACCOUNT_NEW_ONLINE;
ribbon->select("tab_new_online", PLAYER_ID_GAME_MASTER);
}
else
{
m_account_mode = ACCOUNT_OFFLINE;
ribbon->select("tab_offline", PLAYER_ID_GAME_MASTER);
}
// Hide the tabs in case of a rename
ribbon->setVisible(m_existing_player == NULL);
Screen::init(); Screen::init();
// If there is no player (i.e. first start of STK), try to pick // If there is no player (i.e. first start of STK), try to pick
@ -85,13 +101,8 @@ void RegisterScreen::init()
m_signup_request = NULL; m_signup_request = NULL;
m_info_message_shown = false; m_info_message_shown = false;
getWidget<CheckBoxWidget>("online")->setVisible(true);
getWidget<LabelWidget>("label_online")->setVisible(true);
onDialogClose(); onDialogClose();
bool online = UserConfigParams::m_internet_status makeEntryFieldsVisible();
!= Online::RequestManager::IPERM_NOT_ALLOWED;
getWidget<CheckBoxWidget>("online")->setState(online);
makeEntryFieldsVisible(online);
} // init } // init
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
@ -109,8 +120,8 @@ void RegisterScreen::onDialogClose()
{ {
bool online = UserConfigParams::m_internet_status bool online = UserConfigParams::m_internet_status
!= Online::RequestManager::IPERM_NOT_ALLOWED; != Online::RequestManager::IPERM_NOT_ALLOWED;
getWidget<CheckBoxWidget>("online")->setState(online); m_account_mode = online ? ACCOUNT_NEW_ONLINE : ACCOUNT_OFFLINE;
makeEntryFieldsVisible(online); makeEntryFieldsVisible();
} // onDialogClose } // onDialogClose
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
@ -118,29 +129,30 @@ void RegisterScreen::onDialogClose()
* online mode. * online mode.
* \param online True if an online account should be created. * \param online True if an online account should be created.
*/ */
void RegisterScreen::makeEntryFieldsVisible(bool online) void RegisterScreen::makeEntryFieldsVisible()
{ {
// In case of a rename, hide all other fields. // In case of a rename, hide all other fields.
if(m_existing_player) if(m_existing_player)
{ {
m_info_widget->setVisible(false); m_info_widget->setVisible(false);
getWidget<CheckBoxWidget>("online")->setVisible(false); m_account_mode = ACCOUNT_OFFLINE;
getWidget<LabelWidget>("label_online")->setVisible(false);
online = false;
} }
bool online = m_account_mode != ACCOUNT_OFFLINE;
getWidget<TextBoxWidget>("username")->setVisible(online); getWidget<TextBoxWidget>("username")->setVisible(online);
getWidget<LabelWidget >("label_username")->setVisible(online); getWidget<LabelWidget >("label_username")->setVisible(online);
getWidget<TextBoxWidget>("password")->setVisible(online); getWidget<TextBoxWidget>("password")->setVisible(online);
getWidget<LabelWidget >("label_password")->setVisible(online); getWidget<LabelWidget >("label_password")->setVisible(online);
getWidget<TextBoxWidget>("password_confirm")->setVisible(online);
getWidget<LabelWidget >("label_password_confirm")->setVisible(online); bool new_account = online && (m_account_mode == ACCOUNT_NEW_ONLINE);
getWidget<TextBoxWidget>("email")->setVisible(online); getWidget<TextBoxWidget>("password_confirm")->setVisible(new_account);
getWidget<LabelWidget >("label_email")->setVisible(online); getWidget<LabelWidget >("label_password_confirm")->setVisible(new_account);
getWidget<TextBoxWidget>("email")->setVisible(new_account);
getWidget<LabelWidget >("label_email")->setVisible(new_account);
if(getWidget<TextBoxWidget>("email_confirm")) if(getWidget<TextBoxWidget>("email_confirm"))
{ {
getWidget<TextBoxWidget>("email_confirm")->setVisible(online); getWidget<TextBoxWidget>("email_confirm")->setVisible(new_account);
getWidget<LabelWidget >("label_email_confirm")->setVisible(online); getWidget<LabelWidget >("label_email_confirm")->setVisible(new_account);
} }
} // makeEntryFieldsVisible } // makeEntryFieldsVisible
@ -199,7 +211,7 @@ void RegisterScreen::doRegister()
handleLocalName(local_name); handleLocalName(local_name);
// If no online account is requested, don't register // If no online account is requested, don't register
if(!getWidget<CheckBoxWidget>("online")->getState() || m_existing_player) if(m_account_mode!=ACCOUNT_NEW_ONLINE|| m_existing_player)
{ {
StateManager::get()->popMenu(); StateManager::get()->popMenu();
m_existing_player = NULL; m_existing_player = NULL;
@ -339,16 +351,25 @@ void RegisterScreen::onUpdate(float dt)
void RegisterScreen::eventCallback(Widget* widget, const std::string& name, void RegisterScreen::eventCallback(Widget* widget, const std::string& name,
const int playerID) const int playerID)
{ {
if (name == "online") if (name == "mode_tabs")
{ {
if (UserConfigParams::m_internet_status == Online::RequestManager::IPERM_NOT_ALLOWED) RibbonWidget *ribbon = static_cast<RibbonWidget*>(widget);
std::string selection = ribbon->getSelectionIDString(PLAYER_ID_GAME_MASTER);
if ( (selection == "tab_new_online" || selection == "tab_existing_online")
&& (UserConfigParams::m_internet_status == Online::RequestManager::IPERM_NOT_ALLOWED) )
{ {
m_info_widget->setErrorColor(); m_info_widget->setErrorColor();
m_info_widget->setText(_("Internet access is disabled, please enable it in the options"), false); m_info_widget->setText(_("Internet access is disabled, please enable it in the options"), false);
getWidget<CheckBoxWidget>("online")->setState(false); return;
} }
else if (selection == "tab_new_online")
makeEntryFieldsVisible(getWidget<CheckBoxWidget>("online")->getState()); m_account_mode = ACCOUNT_NEW_ONLINE;
else if (selection == "tab_existing_online")
m_account_mode = ACCOUNT_EXISTING_ONLINE;
else if (selection == "tab_offline")
m_account_mode = ACCOUNT_OFFLINE;
makeEntryFieldsVisible();
} }
else if (name=="options") else if (name=="options")
{ {

View File

@ -36,7 +36,7 @@ class RegisterScreen : public GUIEngine::Screen,
private: private:
friend class GUIEngine::ScreenSingleton<RegisterScreen>; friend class GUIEngine::ScreenSingleton<RegisterScreen>;
void makeEntryFieldsVisible(bool online); void makeEntryFieldsVisible();
void handleLocalName(const irr::core::stringw &local_name); void handleLocalName(const irr::core::stringw &local_name);
void doRegister(); void doRegister();
void init(); void init();
@ -58,6 +58,12 @@ private:
/** True if the info message (email was sent...) is shown. */ /** True if the info message (email was sent...) is shown. */
bool m_info_message_shown; bool m_info_message_shown;
/** Which kind of account to create: new online account, new account
* using an existing online account, offline account. */
enum { ACCOUNT_NEW_ONLINE,
ACCOUNT_EXISTING_ONLINE,
ACCOUNT_OFFLINE } m_account_mode;
public: public:
/** \brief implement callback from parent class GUIEngine::Screen */ /** \brief implement callback from parent class GUIEngine::Screen */