00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "gui/changeemaildialog.h"
00023
00024 #include "main.h"
00025 #include "log.h"
00026 #include "logindata.h"
00027
00028 #include "gui/register.h"
00029 #include "gui/ok_dialog.h"
00030
00031 #include "gui/widgets/button.h"
00032 #include "gui/widgets/label.h"
00033 #include "gui/widgets/textfield.h"
00034
00035 #include "utils/gettext.h"
00036 #include "utils/strprintf.h"
00037
00038 #include <string>
00039 #include <sstream>
00040
00041 ChangeEmailDialog::ChangeEmailDialog(Window *parent, LoginData *loginData):
00042 Window(_("Change Email Address"), true, parent),
00043 mWrongDataNoticeListener(new WrongDataNoticeListener),
00044 mLoginData(loginData)
00045 {
00046 gcn::Label *accountLabel = new Label(strprintf(_("Account: %s"),
00047 mLoginData->username.c_str()));
00048 gcn::Label *newEmailLabel = new Label(_("Type New Email Address twice:"));
00049 mFirstEmailField = new TextField;
00050 mSecondEmailField = new TextField;
00051 mChangeEmailButton = new Button(_("Change Email Address"), "change_email", this);
00052 mCancelButton = new Button(_("Cancel"), "cancel", this);
00053
00054 const int width = 200;
00055 const int height = 130;
00056 setContentSize(width, height);
00057
00058 accountLabel->setPosition(5, 5);
00059 accountLabel->setWidth(130);
00060
00061 newEmailLabel->setPosition(
00062 5, accountLabel->getY() + accountLabel->getHeight() + 7);
00063 newEmailLabel->setWidth(width - 5);
00064
00065 mFirstEmailField->setPosition(
00066 5, newEmailLabel->getY() + newEmailLabel->getHeight() + 7);
00067 mFirstEmailField->setWidth(130);
00068
00069 mSecondEmailField->setPosition(
00070 5, mFirstEmailField->getY() + mFirstEmailField->getHeight() + 7);
00071 mSecondEmailField->setWidth(130);
00072
00073 mCancelButton->setPosition(
00074 width - 5 - mCancelButton->getWidth(),
00075 height - 5 - mCancelButton->getHeight());
00076 mChangeEmailButton->setPosition(
00077 mCancelButton->getX() - 5 - mChangeEmailButton->getWidth(),
00078 mCancelButton->getY());
00079
00080 add(accountLabel);
00081 add(newEmailLabel);
00082 add(mFirstEmailField);
00083 add(mSecondEmailField);
00084 add(mChangeEmailButton);
00085 add(mCancelButton);
00086
00087 setLocationRelativeTo(getParent());
00088 setVisible(true);
00089 mFirstEmailField->requestFocus();
00090
00091 mFirstEmailField->setActionEventId("change_email");
00092 mSecondEmailField->setActionEventId("change_email");
00093 }
00094
00095 ChangeEmailDialog::~ChangeEmailDialog()
00096 {
00097 delete mWrongDataNoticeListener;
00098 }
00099
00100 void
00101 ChangeEmailDialog::action(const gcn::ActionEvent &event)
00102 {
00103 if (event.getId() == "cancel")
00104 {
00105 scheduleDelete();
00106 }
00107 else if (event.getId() == "change_email")
00108 {
00109
00110 const std::string username = mLoginData->username.c_str();
00111 const std::string newFirstEmail = mFirstEmailField->getText();
00112 const std::string newSecondEmail = mSecondEmailField->getText();
00113 logger->log("ChangeEmailDialog::Email change, Username is %s",
00114 username.c_str());
00115
00116 std::stringstream errorMsg;
00117 int error = 0;
00118
00119 if (newFirstEmail.length() < LEN_MIN_PASSWORD)
00120 {
00121
00122 errorMsg << "The new email address needs to be at least "
00123 << LEN_MIN_PASSWORD
00124 << " characters long.";
00125 error = 1;
00126 }
00127 else if (newFirstEmail.length() > LEN_MAX_PASSWORD - 1 )
00128 {
00129
00130 errorMsg << "The new email address needs to be less than "
00131 << LEN_MAX_PASSWORD
00132 << " characters long.";
00133 error = 1;
00134 }
00135 else if (newFirstEmail != newSecondEmail)
00136 {
00137
00138 errorMsg << "The email address entries mismatch.";
00139 error = 2;
00140 }
00141
00142 if (error > 0)
00143 {
00144 if (error == 1)
00145 {
00146 mWrongDataNoticeListener->setTarget(this->mFirstEmailField);
00147 }
00148 else if (error == 2)
00149 {
00150 mWrongDataNoticeListener->setTarget(this->mSecondEmailField);
00151 }
00152
00153 OkDialog *dlg = new OkDialog("Error", errorMsg.str());
00154 dlg->addActionListener(mWrongDataNoticeListener);
00155 }
00156 else
00157 {
00158
00159 mChangeEmailButton->setEnabled(false);
00160
00161 mLoginData->newEmail = newFirstEmail;
00162 state = STATE_CHANGEEMAIL_ATTEMPT;
00163 scheduleDelete();
00164 }
00165
00166 }
00167 }