Exemplo n.º 1
0
void ConnectWindow::OnOk(wxCommandEvent&)
{
	wxString HostAddress = m_server_combo->GetValue();
	// We assume that the server is given as : "host:port" so we split based on ":"
	wxArrayString serverString = wxStringTokenize(HostAddress, _T(":"));
	if (serverString.GetCount() > 2) {
		OnLoginDenied(_T("invalid host/port."));
		return;
	}
	if (serverString.GetCount() == 2) {
		long port;
		if (!serverString[1].ToLong(&port)) {
			OnLoginDenied(_T("Invalid port."));
			return;
		}
		if (port < 1 || port > 65535) {
			OnLoginDenied(_T("Port number out of range.\n\nIt must be an integer between 1 and 65535"));
			return;
		}
		sett().SetServer(HostAddress, serverString[0], port);
	}
	sett().SetDefaultServer(HostAddress);
	cfg().Write(_T( "/Server/Autoconnect" ), m_autoconnect_check->IsChecked());

	//if autoconnect enabled force saving of pw, actual saving is done in Ui::DoConnect

	sett().SaveSettings();
	ReloadServerList();

	if (m_tabs->GetSelection() <= 0) { //normal login
		sett().SetServerAccountNick(HostAddress, m_nick_text->GetValue());
		sett().SetServerAccountSavePass(HostAddress, m_rpass_check->GetValue());
		if (m_rpass_check->IsChecked()) {
			sett().SetServerAccountPass(HostAddress, m_pass_text->GetValue());
		}
		CleanHide();
		ServerManager::Instance()->DoConnectToServer(STD_STRING(HostAddress), STD_STRING(m_nick_text->GetValue()), STD_STRING(m_pass_text->GetValue()));
		return;
	}

	sett().SetServerAccountNick(HostAddress, m_regnick_text->GetValue());
	if (m_rpass_check->IsChecked()) {
		sett().SetServerAccountPass(HostAddress, m_regpass1_text->GetValue());
	}

	// register new nick
	if (!IsValidNickname(STD_STRING(m_regnick_text->GetValue()))) {
		OnRegistrationDenied(_("The entered nickname contains invalid characters like )? &%.\n Please try again"));
		return;
	}
	if (m_regpass2_text->GetValue() != m_regpass1_text->GetValue() || m_regpass1_text->GetValue().IsEmpty()) {
		OnRegistrationDenied(_("Registration failed, the reason was:\nPassword / confirmation mismatch (or empty passwort)"));
		return;
	}
	CleanHide();
	ServerManager::Instance()->RegisterNewUser(STD_STRING(HostAddress), STD_STRING(m_regnick_text->GetValue()), STD_STRING(m_regpass1_text->GetValue()));
}
Exemplo n.º 2
0
//! @brief Constructor
//!
//! @param parent Parent window
ConnectWindow::ConnectWindow(wxWindow* parent, Ui& ui)
    : wxDialog(parent, -1, _("Connect to lobby server"), wxDefaultPosition, wxSize(300, 300),
	       wxDEFAULT_DIALOG_STYLE | wxCLIP_CHILDREN)
    , m_ui(ui)
{
	wxString server;
	wxString username;
	wxString password;
	bool savepass;
	bool autoconnect;

	SetIcon(wxIcon(connect_xpm));

	server = sett().GetDefaultServer();
	username = sett().GetServerAccountNick(sett().GetDefaultServer());
	password = sett().GetServerAccountPass(sett().GetDefaultServer());
	savepass = sett().GetServerAccountSavePass(sett().GetDefaultServer());
	autoconnect = cfg().ReadBool(_T( "/Server/Autoconnect" ));
	// Create all UI elements.
	m_tabs = new wxNotebook(this, -1);
	m_login_tab = new wxPanel(m_tabs, -1);
	m_register_tab = new wxPanel(m_tabs, -1);

	m_server_lbl = new wxStaticText(m_login_tab, -1, _("Server"));
	m_server_combo = new wxComboBox(m_login_tab, CON_SERV_SEL, server);
	m_server_combo->SetToolTip(_("Server to connect to. You can connect to any server you like by typing in hostaddress:port format."));

	m_ser_acc_line = new wxStaticLine(m_login_tab);

	m_nick_lbl = new wxStaticText(m_login_tab, -1, _("Nickname"));
	m_nick_text = new wxTextCtrl(m_login_tab, -1, username);
	m_pass_lbl = new wxStaticText(m_login_tab, -1, _("Password"));
	m_pass_text = new wxTextCtrl(m_login_tab, -1, password, wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD);
	m_rpass_check = new wxCheckBox(m_login_tab, -1, _("Remember password"));
	m_autoconnect_check = new wxCheckBox(m_login_tab, -1, _("Autoconnect next time"));
	m_autoconnect_check->SetToolTip(_("remember connection details and automatically connect to server on next lobby startup"));

	m_rpass_check->SetValue(savepass);
	m_autoconnect_check->SetValue(autoconnect);

	m_acc_note_line = new wxStaticLine(m_login_tab);

	m_note_lbl = new wxStaticText(m_login_tab, -1, _("Note: If you do not have an account, you can register one for free on the Register tab."));
	m_note_lbl->Wrap(400);

	m_ok_btn = new wxButton(this, wxID_OK, _("Ok"));
	m_cancel_btn = new wxButton(this, wxID_CANCEL, _("Cancel"));

	// Add tabs to tab control.
	m_tabs->AddPage(m_login_tab, _("Login"), true);
	m_tabs->AddPage(m_register_tab, _("Register"), false);

	// Create sizers.
	m_main_sizer = new wxBoxSizer(wxVERTICAL);
	m_login_main_sizer = new wxBoxSizer(wxVERTICAL);
	m_server_sizer = new wxBoxSizer(wxHORIZONTAL);
	m_nick_sizer = new wxBoxSizer(wxHORIZONTAL);
	m_pass_sizer = new wxBoxSizer(wxHORIZONTAL);
	m_rpass_sizer = new wxBoxSizer(wxVERTICAL);
	wxBoxSizer* m_check_sizer = new wxBoxSizer(wxHORIZONTAL);
	m_buttons_sizer = new wxStdDialogButtonSizer();

	// Add UI elements to sizers.
	m_buttons_sizer->Add(m_cancel_btn);
	m_buttons_sizer->AddStretchSpacer();
	m_buttons_sizer->Add(m_ok_btn);


	m_rpass_sizer->Add(m_rpass_check, 2, wxEXPAND | wxALL | wxALIGN_RIGHT, 4);
	m_rpass_sizer->Add(m_autoconnect_check, 2, wxEXPAND | wxALL | wxALIGN_RIGHT, 4);

	m_pass_sizer->Add(m_pass_lbl, 1, wxALL | wxALIGN_CENTER_VERTICAL, 4);
	m_pass_sizer->Add(m_pass_text, 2, wxEXPAND | wxALL, 4);

	//FIXME was lazy, absoulte positioning isn't that nice //probably causing http://springlobby.info/issues/1094
	int pos1 = (m_pass_lbl->GetSize()).GetWidth() + 40;
	m_check_sizer->Add(pos1, 0, 0);
	m_check_sizer->Add(m_rpass_sizer, 0, wxEXPAND | wxALIGN_RIGHT);

	m_nick_sizer->Add(m_nick_lbl, 1, wxALL | wxALIGN_CENTER_VERTICAL, 4);
	m_nick_sizer->Add(m_nick_text, 2, wxEXPAND | wxALL, 4);

	m_server_sizer->Add(m_server_lbl, 1, wxALL | wxALIGN_CENTER_VERTICAL, 4);
	m_server_sizer->Add(m_server_combo, 2, wxEXPAND | wxALL, 4);

	m_login_main_sizer->Add(m_server_sizer, 0, wxEXPAND | wxALL, 0);
	m_login_main_sizer->Add(m_ser_acc_line, 0, wxEXPAND | wxALL, 4);
	m_login_main_sizer->Add(m_nick_sizer, 0, wxEXPAND);
	m_login_main_sizer->Add(m_pass_sizer, 0, wxEXPAND);
	m_login_main_sizer->Add(m_check_sizer, 0, wxEXPAND);
	m_login_main_sizer->Add(m_acc_note_line, 0, wxEXPAND | wxALL, 4);
	m_login_main_sizer->Add(m_note_lbl, 0, wxEXPAND | wxALL, 4);
	m_login_main_sizer->AddStretchSpacer();

	m_login_tab->SetSizer(m_login_main_sizer);

	m_main_sizer->Add(m_tabs, 1, wxEXPAND);
	m_main_sizer->Add(m_buttons_sizer, 0, wxEXPAND);


	// Register page
	wxBoxSizer* m_register_sizer = new wxBoxSizer(wxVERTICAL);

	wxBoxSizer* m_regnick_sizer = new wxBoxSizer(wxHORIZONTAL);

	m_regnick_lbl = new wxStaticText(m_register_tab, wxID_ANY, _("Nickname"), wxDefaultPosition, wxDefaultSize, 0);
	m_regnick_sizer->Add(m_regnick_lbl, 1, wxALL | wxALIGN_CENTER_VERTICAL, 4);

	m_regnick_text = new wxTextCtrl(m_register_tab, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);
	m_regnick_sizer->Add(m_regnick_text, 1, wxALL, 4);

	m_register_sizer->Add(m_regnick_sizer, 0, wxEXPAND, 4);

	m_regpass_sep = new wxStaticLine(m_register_tab, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL);
	m_register_sizer->Add(m_regpass_sep, 0, wxALL | wxEXPAND, 4);

	wxBoxSizer* m_regpass1_sizer = new wxBoxSizer(wxHORIZONTAL);

	m_regpass1_lbl = new wxStaticText(m_register_tab, wxID_ANY, _("Password"), wxDefaultPosition, wxDefaultSize, 0);
	m_regpass1_sizer->Add(m_regpass1_lbl, 1, wxALL | wxALIGN_CENTER_VERTICAL, 4);

	m_regpass1_text = new wxTextCtrl(m_register_tab, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD);
	m_regpass1_sizer->Add(m_regpass1_text, 1, wxALL, 4);

	m_register_sizer->Add(m_regpass1_sizer, 0, wxEXPAND, 4);

	wxBoxSizer* m_regpass1_sizer1 = new wxBoxSizer(wxHORIZONTAL);

	m_regpass2_lbl = new wxStaticText(m_register_tab, wxID_ANY, _("Retype password"), wxDefaultPosition, wxDefaultSize, 0);
	m_regpass1_sizer1->Add(m_regpass2_lbl, 1, wxALL | wxALIGN_CENTER_VERTICAL, 4);

	m_regpass2_text = new wxTextCtrl(m_register_tab, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD);
	m_regpass1_sizer1->Add(m_regpass2_text, 1, wxALL, 4);


	m_register_sizer->Add(m_regpass1_sizer1, 0, wxEXPAND, 4);

	m_reginfo_text = new wxStaticText(m_register_tab, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0);

	m_register_sizer->Add(m_reginfo_text, 1, wxALL, 4);

	m_register_tab->SetSizer(m_register_sizer);
	m_register_tab->Layout();
	m_register_sizer->Fit(m_register_tab);


	// Set sizer.
	SetSizer(m_main_sizer);

	if (!username.empty()) {
		m_ok_btn->SetFocus();
	} else { // no nick set, make register tab default
		m_tabs->SetSelection(1);
		m_regnick_text->SetFocus();
	}

	m_ok_btn->SetDefault();

	Layout();
	m_main_sizer->SetSizeHints(this);
#ifdef __WXMSW__
	SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));
#endif

	ReloadServerList();
}
Exemplo n.º 3
0
void ConnectWindow::OnOk(wxCommandEvent& )
{
    Hide();
    wxString HostAddress = m_server_combo->GetValue();
    if ( HostAddress.Find( _T(":") ) == wxNOT_FOUND )
		{
			if ( !sett().ServerExists( HostAddress ) )
			{
				HostAddress += wxFormat(_T(":%d") ) % DEFSETT_DEFAULT_SERVER_PORT;
			}
		}
    if ( m_tabs->GetSelection() <= 0 )
    {
        sett().SetServerAccountNick( HostAddress,m_nick_text->GetValue() );
        sett().SetServerAccountSavePass( HostAddress, m_rpass_check->GetValue() );

        // We assume that the server is given as : "host:port" so we split based on ":"
        wxArrayString serverString = wxStringTokenize( HostAddress ,_T(":") );
        if ( serverString.GetCount() == 2 )
        {
            long port;
            if ( !serverString[1].ToLong( &port ) )
            {
                wxLogWarning( _T("Invalid port.") );
                customMessageBox(SL_MAIN_ICON, _("Invalid port."), _("Invalid port"), wxOK );
                return;
            }
            if ( port < 1 || port > 65535)
            {
                wxLogWarning( _T("port number out of range") );
                customMessageBox(SL_MAIN_ICON, _("Port number out of range.\n\nIt must be an integer between 1 and 65535"), _("Invalid port"), wxOK );
                return;
            }
            sett().SetServer( HostAddress, serverString[0], port );
        }

        if ( serverString.GetCount() > 2 )
        {
            wxLogWarning( _T("invalid host/port.") );
            customMessageBox(SL_MAIN_ICON, _("Invalid host/port."), _("Invalid host"), wxOK );
            return;
        }
        sett().SetAutoConnect( m_autoconnect_check->IsChecked() );

        //if autoconnect enabled force saving of pw, actual saving is done in Ui::DoConnect
        if ( m_autoconnect_check->IsChecked() ) sett().SetServerAccountSavePass( HostAddress, true );

        sett().SaveSettings();
        ReloadServerList();

        m_ui.DoConnect( HostAddress, m_nick_text->GetValue(), m_pass_text->GetValue() );
    }
    else
    {
        wxString reason;
        if ( !IsValidNickname( m_regnick_text->GetValue() ) )
        {
            customMessageBox(SL_MAIN_ICON,_("The entered nickname contains invalid characters like )? &%.\n Please try again") , _("Invalid nickname"), wxOK );
            Show();
        }
        else if ( m_regpass2_text->GetValue()!= m_regpass1_text->GetValue() || m_regpass1_text->GetValue().IsEmpty() )
        {
            Show();
            wxLogWarning( _T("registration failed, reason: password/confirmation mismatch")  );
            customMessageBox(SL_MAIN_ICON,_("Registration failed, the reason was:\nPassword / confirmation mismatch (or empty passwort)") , _("Registration failed."), wxOK );
        }
        else if ( m_ui.DoRegister( HostAddress, m_regnick_text->GetValue(), m_regpass1_text->GetValue(),reason ) )
        {
            m_tabs->SetSelection( 0 );
            m_nick_text->SetValue(m_regnick_text->GetValue());
            m_pass_text->SetValue(m_regpass1_text->GetValue());
            Show();
        }
        else
        {
            Show();
        }

    }
}