Skip to content

Commit

Permalink
HaikuDepot: Limit language selection for account creation
Browse files Browse the repository at this point in the history
For the time being, there is a limited amount of supported languages
when creating accounts, reflect this in the UI and use a BMenuField.
Creating accounts with other languages fails, the error reporting was
not ideal and could be improved. The server responded with "object not found",
which was reported in the alert, but the response actually contains the
object which was not found (NaturalLanguageCode).
  • Loading branch information
stippi committed Sep 27, 2014
1 parent 83f46c7 commit 3e3d0ef
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 5 deletions.
45 changes: 41 additions & 4 deletions src/apps/haikudepot/ui/UserLoginWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
#include <Catalog.h>
#include <Button.h>
#include <LayoutBuilder.h>
#include <MenuField.h>
#include <PopUpMenu.h>
#include <TabView.h>
#include <TextControl.h>

Expand All @@ -31,6 +33,7 @@ enum {
MSG_SEND = 'send',
MSG_TAB_SELECTED = 'tbsl',
MSG_CAPTCHA_OBTAINED = 'cpob',
MSG_LANGUAGE_SELECTED = 'lngs',
};


Expand Down Expand Up @@ -59,12 +62,26 @@ class TabView : public BTabView {
};


static void
add_languages_to_menu(const StringList& languages, BMenu* menu)
{
for (int i = 0; i < languages.CountItems(); i++) {
const BString& language = languages.ItemAtFast(i);
BMessage* message = new BMessage(MSG_LANGUAGE_SELECTED);
message->AddString("code", language);
BMenuItem* item = new BMenuItem(language, message);
menu->AddItem(item);
}
}


UserLoginWindow::UserLoginWindow(BWindow* parent, BRect frame, Model& model)
:
BWindow(frame, B_TRANSLATE_SYSTEM_NAME("Log in"),
B_FLOATING_WINDOW_LOOK, B_FLOATING_SUBSET_WINDOW_FEEL,
B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS
| B_NOT_RESIZABLE | B_NOT_ZOOMABLE),
fPreferredLanguage(model.PreferredLanguage()),
fModel(model),
fMode(NONE),
fWorkerThread(-1)
Expand All @@ -73,14 +90,30 @@ UserLoginWindow::UserLoginWindow(BWindow* parent, BRect frame, Model& model)

fUsernameField = new BTextControl(B_TRANSLATE("User name:"), "", NULL);
fPasswordField = new BTextControl(B_TRANSLATE("Pass phrase:"), "", NULL);
fPasswordField->TextView()->HideTyping(true);

fNewUsernameField = new BTextControl(B_TRANSLATE("User name:"), "", NULL);
fNewPasswordField = new BTextControl(B_TRANSLATE("Pass phrase:"), "",
NULL);
fNewPasswordField->TextView()->HideTyping(true);
fRepeatPasswordField = new BTextControl(B_TRANSLATE("Repeat pass phrase:"),
"", NULL);
fLanguageCodeField = new BTextControl(B_TRANSLATE("Language code:"),
model.PreferredLanguage(), NULL);
fRepeatPasswordField->TextView()->HideTyping(true);

// Construct languages popup
BPopUpMenu* languagesMenu = new BPopUpMenu(B_TRANSLATE("Language"));
fLanguageCodeField = new BMenuField("language",
B_TRANSLATE("Preferred language:"), languagesMenu);

add_languages_to_menu(fModel.SupportedLanguages(), languagesMenu);
languagesMenu->SetTargetForItems(this);

BMenuItem* defaultItem = languagesMenu->ItemAt(
fModel.SupportedLanguages().IndexOf(fPreferredLanguage));
if (defaultItem != NULL)
defaultItem->SetMarked(true);


fEmailField = new BTextControl(B_TRANSLATE("Email address:"), "", NULL);
fCaptchaView = new BitmapView("captcha view");
fCaptchaResultField = new BTextControl("", "", NULL);
Expand All @@ -104,7 +137,7 @@ UserLoginWindow::UserLoginWindow(BWindow* parent, BRect frame, Model& model)
.AddTextControl(fNewPasswordField, 0, 1)
.AddTextControl(fRepeatPasswordField, 0, 2)
.AddTextControl(fEmailField, 0, 3)
.AddTextControl(fLanguageCodeField, 0, 4)
.AddMenuField(fLanguageCodeField, 0, 4)
.Add(fCaptchaView, 0, 5)
.Add(fCaptchaResultField, 1, 5)

Expand Down Expand Up @@ -190,6 +223,10 @@ UserLoginWindow::MessageReceived(BMessage* message)
}
break;

case MSG_LANGUAGE_SELECTED:
message->FindString("code", &fPreferredLanguage);
break;

default:
BWindow::MessageReceived(message);
break;
Expand Down Expand Up @@ -448,7 +485,7 @@ UserLoginWindow::_CreateAccountThread()
BString email(fEmailField->Text());
BString captchaToken(fCaptchaToken);
BString captchaResponse(fCaptchaResultField->Text());
BString languageCode(fLanguageCodeField->Text());
BString languageCode(fPreferredLanguage);

Unlock();

Expand Down
4 changes: 3 additions & 1 deletion src/apps/haikudepot/ui/UserLoginWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@


class BButton;
class BMenuField;
class BTabView;
class BTextControl;
class BitmapView;
Expand Down Expand Up @@ -63,7 +64,7 @@ class UserLoginWindow : public BWindow {
BTextControl* fNewPasswordField;
BTextControl* fRepeatPasswordField;
BTextControl* fEmailField;
BTextControl* fLanguageCodeField;
BMenuField* fLanguageCodeField;
BitmapView* fCaptchaView;
BTextControl* fCaptchaResultField;

Expand All @@ -72,6 +73,7 @@ class UserLoginWindow : public BWindow {

BString fCaptchaToken;
BitmapRef fCaptchaImage;
BString fPreferredLanguage;

Model& fModel;

Expand Down

0 comments on commit 3e3d0ef

Please sign in to comment.