import org.argeo.cms.CmsView;
import org.argeo.cms.auth.CurrentUser;
import org.argeo.cms.auth.HttpRequestCallback;
-import org.argeo.cms.i18n.Msg;
+import org.argeo.cms.i18n.LocaleUtils;
import org.argeo.cms.util.CmsUtils;
import org.argeo.util.LocaleChoice;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.swt.widgets.Text;
public class CmsLogin implements CmsStyles, CallbackHandler {
+ private Composite parent;
private Text usernameT, passwordT;
private Composite credentialsBlock;
+ private final SelectionListener loginSelectionListener;
private final Locale defaultLocale;
private LocaleChoice localeChoice = null;
List<Locale> locales = getKernelHeader().getLocales();
if (locales != null)
localeChoice = new LocaleChoice(locales, defaultLocale);
+ loginSelectionListener = new SelectionListener() {
+ private static final long serialVersionUID = -8832133363830973578L;
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ login();
+ }
+
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ };
}
protected boolean isAnonymous() {
return CurrentUser.isAnonymous(cmsView.getSubject());
}
- public void createContents(Composite parent) {
+ public final void createUi(Composite parent) {
+ this.parent = parent;
+ createContents(parent);
+ }
+
+ protected void createContents(Composite parent) {
defaultCreateContents(parent);
}
}
protected Composite userUi(Composite parent) {
+ Locale locale = localeChoice == null ? this.defaultLocale
+ : localeChoice.getSelectedLocale();
credentialsBlock = new Composite(parent, SWT.NONE);
credentialsBlock.setLayout(new GridLayout());
credentialsBlock.setLayoutData(CmsUtils.fillAll());
Label l = new Label(credentialsBlock, SWT.NONE);
l.setData(RWT.CUSTOM_VARIANT, CMS_USER_MENU_ITEM);
- l.setText(CmsMsg.logout.lead());
+ l.setText(CmsMsg.logout.lead(locale));
GridData lData = CmsUtils.fillWidth();
lData.widthHint = 120;
l.setLayoutData(lData);
}
protected Composite anonymousUi(Composite parent) {
+ Locale locale = localeChoice == null ? this.defaultLocale
+ : localeChoice.getSelectedLocale();
// We need a composite for the traversal
credentialsBlock = new Composite(parent, SWT.NONE);
credentialsBlock.setLayout(new GridLayout());
// new Label(this, SWT.NONE).setText(CmsMsg.username.lead());
usernameT = new Text(credentialsBlock, SWT.BORDER);
- usernameT.setMessage(username.lead(defaultLocale));
+ usernameT.setMessage(username.lead(locale));
usernameT.setData(RWT.CUSTOM_VARIANT, CMS_LOGIN_DIALOG_USERNAME);
GridData gd = CmsUtils.fillWidth();
gd.widthHint = textWidth;
// new Label(this, SWT.NONE).setText(CmsMsg.password.lead());
passwordT = new Text(credentialsBlock, SWT.BORDER | SWT.PASSWORD);
- passwordT.setMessage(password.lead(defaultLocale));
+ passwordT.setMessage(password.lead(locale));
passwordT.setData(RWT.CUSTOM_VARIANT, CMS_LOGIN_DIALOG_PASSWORD);
gd = CmsUtils.fillWidth();
gd.widthHint = textWidth;
passwordT.addTraverseListener(tl);
parent.setTabList(new Control[] { credentialsBlock });
credentialsBlock.setTabList(new Control[] { usernameT, passwordT });
- credentialsBlock.setFocus();
+ // credentialsBlock.setFocus();
+ extendsCredentialsBlock(credentialsBlock, locale,
+ loginSelectionListener);
if (localeChoice != null)
createLocalesBlock(credentialsBlock);
return credentialsBlock;
}
+ /**
+ * To be overridden in order to provide custome login button and other
+ * links.
+ */
+ protected void extendsCredentialsBlock(Composite credentialsBlock,
+ Locale selectedLocale, SelectionListener loginSelectionListener) {
+
+ }
+
+ protected void updateLocale(Locale selectedLocale) {
+ // save already entered values
+ String usernameStr = usernameT.getText();
+ char[] pwd = passwordT.getTextChars();
+
+ for (Control child : parent.getChildren())
+ child.dispose();
+ createContents(parent);
+ if (parent.getParent() != null)
+ parent.getParent().layout();
+ else
+ parent.layout();
+ usernameT.setText(usernameStr);
+ passwordT.setTextChars(pwd);
+ }
+
protected Composite createLocalesBlock(final Composite parent) {
Composite c = new Composite(parent, SWT.NONE);
c.setLayout(CmsUtils.noSpaceGridLayout());
private static final long serialVersionUID = 4891637813567806762L;
public void widgetSelected(SelectionEvent event) {
- localeChoice.setSelectedIndex((Integer) event.widget.getData());
- Locale selectedLocale = localeChoice.getSelectedLocale();
- usernameT.setMessage(username.lead(selectedLocale));
- passwordT.setMessage(password.lead(selectedLocale));
+ Button button = (Button) event.widget;
+ if (button.getSelection()) {
+ localeChoice.setSelectedIndex((Integer) event.widget
+ .getData());
+ updateLocale(localeChoice.getSelectedLocale());
+ }
};
};
Locale locale = locales.get(i);
Button button = new Button(c, SWT.RADIO);
button.setData(i);
- button.setText(Msg.lead(locale.getDisplayName(locale), locale)
- + " (" + locale + ")");
+ button.setText(LocaleUtils.lead(locale.getDisplayName(locale),
+ locale) + " (" + locale + ")");
// button.addListener(SWT.Selection, listener);
button.addSelectionListener(selectionListener);
- if (i == localeChoice.getDefaultIndex())
+ if (i == localeChoice.getSelectedIndex())
button.setSelection(true);
}
return c;