WWidget *WItemDelegate::createEditor(const WModelIndex& index, WFlags<ViewItemRenderFlag> flags) const { IndexContainerWidget *const result = new IndexContainerWidget(index); result->setSelectable(true); WLineEdit *lineEdit = new WLineEdit(); lineEdit->setText(asString(index.data(EditRole), textFormat_)); lineEdit->enterPressed().connect (boost::bind(&WItemDelegate::doCloseEditor, this, result, true)); lineEdit->escapePressed().connect (boost::bind(&WItemDelegate::doCloseEditor, this, result, false)); lineEdit->escapePressed().preventPropagation(); if (flags & RenderFocused) lineEdit->setFocus(true); // We use a layout so that the line edit fills the entire cell. // Somehow, this does not work with konqueror, but it does respond // properly to width, height being set to 100% ! WApplication *app = WApplication::instance(); if (app->environment().agent() != WEnvironment::Konqueror) { result->setLayout(new WHBoxLayout()); result->layout()->setContentsMargins(1, 1, 1, 1); result->layout()->addWidget(lineEdit); } else { lineEdit->resize(WLength(100, WLength::Percentage), WLength(100, WLength::Percentage)); result->addWidget(lineEdit); } return result; }
PasswordPromptDialog::PasswordPromptDialog(Login& login, AuthModel *model) : WDialog(tr("Wt.Auth.enter-password")), login_(login), model_(model) { impl_ = new WTemplateFormView(tr("Wt.Auth.template.password-prompt")); model_->setValue(AuthModel::LoginNameField, login_.user().identity(Identity::LoginName)); model_->setReadOnly(AuthModel::LoginNameField, true); WLineEdit *nameEdit = new WLineEdit(); impl_->bindWidget(AuthModel::LoginNameField, nameEdit); impl_->updateViewField(model_, AuthModel::LoginNameField); WLineEdit *passwordEdit = new WLineEdit(); passwordEdit->setEchoMode(WLineEdit::Password); passwordEdit->setFocus(true); impl_->bindWidget(AuthModel::PasswordField, passwordEdit); impl_->updateViewField(model_, AuthModel::PasswordField); WPushButton *okButton = new WPushButton(tr("Wt.WMessageBox.Ok")); WPushButton *cancelButton = new WPushButton(tr("Wt.WMessageBox.Cancel")); model_->configureThrottling(okButton); impl_->bindWidget("ok-button", okButton); impl_->bindWidget("cancel-button", cancelButton); okButton->clicked().connect(this, &PasswordPromptDialog::check); cancelButton->clicked().connect(this, &PasswordPromptDialog::reject); contents()->addWidget(impl_); if (!WApplication::instance()->environment().ajax()) { /* * try to center it better, we need to set the half width and * height as negative margins. */ setMargin(WLength("-21em"), Left); // .Wt-form width setMargin(WLength("-200px"), Top); // ??? } }
void focusPass2() { edtPass2->setFocus(); }
void focusPass1() { edtPass1->setFocus(); }
// Statless slots void focusName() { edtName->setFocus(); }
UpdatePasswordWidget::UpdatePasswordWidget(const User& user, RegistrationModel *registrationModel, AuthModel *authModel, WContainerWidget *parent) : WTemplateFormView(tr("Wt.Auth.template.update-password"), parent), user_(user), registrationModel_(registrationModel), authModel_(authModel) { registrationModel_->setValue(RegistrationModel::LoginNameField, user.identity(Identity::LoginName)); registrationModel_->setReadOnly(RegistrationModel::LoginNameField, true); if (authModel_->baseAuth()->emailVerificationEnabled()) { /* * This is set in the model so that the password checker can take * into account whether the password is derived from the email * address. */ registrationModel_->setValue(RegistrationModel::EmailField, WT_USTRING::fromUTF8(user.email() + " " + user.unverifiedEmail())); registrationModel_->setVisible(RegistrationModel::EmailField, false); } WPushButton *okButton = new WPushButton(tr("Wt.WMessageBox.Ok")); WPushButton *cancelButton = new WPushButton(tr("Wt.WMessageBox.Cancel")); if (authModel_) { authModel_->setValue(AuthModel::LoginNameField, user.identity(Identity::LoginName)); updateViewField(authModel_, AuthModel::PasswordField); authModel_->configureThrottling(okButton); WLineEdit *password = resolve<WLineEdit *>(AuthModel::PasswordField); password->setFocus(); } updateView(registrationModel_); WLineEdit *password = resolve<WLineEdit *> (RegistrationModel::ChoosePasswordField); WLineEdit *password2 = resolve<WLineEdit *> (RegistrationModel::RepeatPasswordField); WText *password2Info = resolve<WText *> (RegistrationModel::RepeatPasswordField + std::string("-info")); registrationModel_->validatePasswordsMatchJS(password, password2, password2Info); if (!authModel_) password->setFocus(); okButton->clicked().connect(this, &UpdatePasswordWidget::doUpdate); cancelButton->clicked().connect(this, &UpdatePasswordWidget::close); bindWidget("ok-button", okButton); bindWidget("cancel-button", cancelButton); }
UpdatePasswordWidget::UpdatePasswordWidget(const User& user, const AbstractPasswordService& auth, Login& login, bool promptPassword, WContainerWidget *parent) : WTemplate(tr("Wt.Auth.template.update-password"), parent), user_(user), promptPassword_(promptPassword), validated_(false), enterPasswordFields_(0) { addFunction("id", &WTemplate::Functions::id); addFunction("tr", &WTemplate::Functions::tr); WLineEdit *nameEdit = new WLineEdit(user.identity(Identity::LoginName)); nameEdit->disable(); nameEdit->addStyleClass("Wt-disabled"); bindWidget("user-name", nameEdit); WPushButton *okButton = new WPushButton(tr("Wt.WMessageBox.Ok")); WPushButton *cancelButton = new WPushButton(tr("Wt.WMessageBox.Cancel")); if (promptPassword_) { setCondition("if:old-password", true); WLineEdit *oldPasswd = new WLineEdit(); WText *oldPasswdInfo = new WText(); enterPasswordFields_ = new EnterPasswordFields(auth, oldPasswd, oldPasswdInfo, okButton, this); oldPasswd->setFocus(); bindWidget("old-password", oldPasswd); bindWidget("old-password-info", oldPasswdInfo); } WLineEdit *password = new WLineEdit(); password->setEchoMode(WLineEdit::Password); password->keyWentUp().connect (boost::bind(&UpdatePasswordWidget::checkPassword, this)); password->changed().connect (boost::bind(&UpdatePasswordWidget::checkPassword, this)); WText *passwordInfo = new WText(); WLineEdit *password2 = new WLineEdit(); password2->setEchoMode(WLineEdit::Password); password2->changed().connect (boost::bind(&UpdatePasswordWidget::checkPassword2, this)); WText *password2Info = new WText(); bindWidget("choose-password", password); bindWidget("choose-password-info", passwordInfo); bindWidget("repeat-password", password2); bindWidget("repeat-password-info", password2Info); model_ = new RegistrationModel(auth.baseAuth(), *user.database(), login, this); model_->addPasswordAuth(&auth); model_->setValue(RegistrationModel::LoginName, user.identity(Identity::LoginName)); model_->setValue(RegistrationModel::Email, WT_USTRING::fromUTF8(user.email() + " " + user.unverifiedEmail())); model_->validatePasswordsMatchJS(password, password2, password2Info); passwordInfo->setText(model_->validationResult (RegistrationModel::Password).message()); password2Info->setText(model_->validationResult (RegistrationModel::Password2).message()); okButton->clicked().connect(this, &UpdatePasswordWidget::doUpdate); cancelButton->clicked().connect(this, &UpdatePasswordWidget::close); bindWidget("ok-button", okButton); bindWidget("cancel-button", cancelButton); if (!promptPassword_) password->setFocus(); }