package com.sibvisions.apps.customlogin; import javax.rad.genui.component.UIButton; import javax.rad.genui.container.UIPanel; import javax.rad.genui.layout.UIFormLayout; import javax.rad.ui.Style; import com.sibvisions.apps.vaadin.web.WebLogin; import com.vaadin.ui.Component; import com.vaadin.ui.CssLayout; public class MyCustomLogin extends WebLogin { private UIPanel panCustomButtons; @Override protected void createLogin() { super.createLogin(); updateUI(); } @Override protected void handleLoginError(Throwable pException) { super.handleLoginError(pException); //important, because the error area will be added dynamically updateUI(); } private void updateUI() { if (!isChangePassword()) { CssLayout cssl = (CssLayout)getInfoLabel().getParent().getParent(); //cleanup if (panCustomButtons != null) { cssl.removeComponent((Component)panCustomButtons.getResource()); } else { UIFormLayout flCustomButtons = new UIFormLayout(); //flCustomButtons.setHorizontalAlignment(IAlignmentConstants.ALIGN_CENTER); flCustomButtons.setMargins(10, 18, 5, 18); flCustomButtons.setHorizontalGap(10); panCustomButtons = new UIPanel(flCustomButtons); UIButton butISA = new UIButton("ISA"); butSAM.eventAction().addListener(this, "doISA"); Style.addStyleNames(butISA, "default", "isa"); UIButton butSAM = new UIButton("SAM"); butSAM.eventAction().addListener(this, "doSAM"); Style.addStyleNames(butSAM, "default", "sam"); panCustomButtons.add(butISA, flCustomButtons.getConstraints(0, 0)); panCustomButtons.add(butSAM, flCustomButtons.getConstraints(1, 0)); } //always above the "error area" cssl.addComponent((Component)panCustomButtons.getResource(), 2); } } public void doISA() throws Throwable { ((RemoteApplication)getApplication()).showInformation(null, "ISA pressed!"); } public void doSAM() throws Throwable { ((RemoteApplication)getApplication()).showInformation(null, "SAM pressed!"); } }