package org.ovirt.engine.ui.userportal.client; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.ui.HTML; import org.ovirt.engine.core.compat.EventArgs; import org.ovirt.engine.core.compat.PropertyChangedEventArgs; import org.ovirt.engine.ui.uicommon.models.common.AboutModel; import org.ovirt.engine.core.compat.Event; import org.ovirt.engine.core.compat.EventDefinition; import org.ovirt.engine.core.compat.IEventListener; import org.ovirt.engine.ui.userportal.client.common.UserPortalMode; import org.ovirt.engine.ui.userportal.client.components.NonDraggableModalPanel; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.BkgndRepeat; import com.smartgwt.client.types.VerticalAlignment; import com.smartgwt.client.widgets.Button; import com.smartgwt.client.widgets.Img; import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.StretchImgButton; import com.smartgwt.client.widgets.events.CloseClickHandler; import com.smartgwt.client.widgets.events.CloseClientEvent; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.LinkItem; import com.smartgwt.client.widgets.form.fields.StaticTextItem; import com.smartgwt.client.widgets.form.fields.events.ClickEvent; import com.smartgwt.client.widgets.form.fields.events.ClickHandler; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.HStack; import com.smartgwt.client.widgets.layout.VStack; public class Masthead extends HLayout { public static final int MASTHEAD_HEIGHT = 54; private static final String LOGO_FILE_NAME = "user_portal_logo.gif"; private static final String HEADER_RIGHT_IMAGE_FILE_NAME = "user_portal_header_right.jpg"; private static final String HEADER_BACKGROUND_IMG_FILE_NAME = "bg_head.gif"; private static StaticTextItem userName; private static Masthead masterHead; private static Event modeChangedEvent = new Event(new EventDefinition("UserPortalModeChanged", Masthead.class)); private static UserPortalMode userPortalMode; private ModeSelectTab selectedTab; private HLayout tabsLayout; public static Masthead getInstance() { if (masterHead == null) { masterHead = new Masthead(); } return masterHead; } private Masthead() { super(); masterHead = this; GWT.log("Initializing Masthead"); setStyleName("masterhead"); Img logo = new Img(LOGO_FILE_NAME, 131, 60); logo.setStyleName("engine-masterhead-logo"); this.setHeight(MASTHEAD_HEIGHT); HLayout westLayout = new HLayout(); westLayout.setHeight(MASTHEAD_HEIGHT); westLayout.setWidth("50%"); westLayout.addMember(logo); westLayout.setBackgroundImage(HEADER_BACKGROUND_IMG_FILE_NAME); westLayout.setBackgroundRepeat(BkgndRepeat.REPEAT_X); HLayout eastLayout = new HLayout(); eastLayout.setAlign(Alignment.RIGHT); eastLayout.setBackgroundImage(HEADER_RIGHT_IMAGE_FILE_NAME); eastLayout.setHeight(74); eastLayout.setWidth(310); eastLayout.addMember(getModeTabSelectLayout()); StaticTextItem delimiter = new StaticTextItem("delimiter"); delimiter.setValue(" | "); delimiter.setShowTitle(false); delimiter.setTextBoxStyle("header-text-style"); StaticTextItem userNameLabel = new StaticTextItem("userNameLabel"); userNameLabel.setValue("User: "); userNameLabel.setShowTitle(false); userNameLabel.setTextBoxStyle("header-text-style"); // userNameLabel.setWidth("100%"); userName = new StaticTextItem("userName"); userName.setShowTitle(false); userName.setTextBoxStyle("header-text-style"); initLoggedInUserName(); final DynamicForm form = new DynamicForm(); form.setNumCols(8); form.setStyleName("links-style"); final LinkItem aboutLink = new LinkItem(); aboutLink.setLinkTitle("About"); aboutLink.setShowTitle(false); aboutLink.setTextBoxStyle("header-link-style"); aboutLink.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { final NonDraggableModalPanel winModal = new NonDraggableModalPanel( 500, 200, "About"); winModal.setAlign(Alignment.RIGHT); winModal.setAlign(VerticalAlignment.BOTTOM); winModal.setShowMinimizeButton(false); winModal.setIsModal(true); winModal.setScrollbarSize(0); winModal.centerInPage(); winModal.addCloseClickHandler(new CloseClickHandler() { public void onCloseClick(CloseClientEvent event) { winModal.destroy(); } }); HTML aboutText = new HTML(ApplicationConstants.aboutHtmlString); HLayout buttonsLayout = new HLayout(); buttonsLayout.setAlign(Alignment.RIGHT); Button closeButton = new Button("Close"); buttonsLayout.addMember(closeButton); closeButton .addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { @Override public void onClick( com.smartgwt.client.widgets.events.ClickEvent event) { winModal.hide(); } }); winModal.addItem(aboutText); winModal.setFooterButtons(Alignment.RIGHT, closeButton); winModal.show(); } }); form.setItems(userNameLabel, userName, delimiter, buildSignOutLink(), delimiter, buildHelpLink(), delimiter, aboutLink); // form.setItems(delimiter, delimiter, delimiter, delimiter); Label productNameText = new Label(ApplicationConstants.PRODUCT_NAME); productNameText.setStyleName("engine-productname-label"); productNameText.setAutoFit(true); productNameText.setWidth100(); productNameText.setHeight(18); VStack v = new VStack(); // v.setAutoWidth(); v.addMember(productNameText); // v.setShowEdges(true); // v.setMembersMargin(0); // v.setLayoutMargin(0); // v.setPadding(0); // v.setWidth("60%"); HStack linksStack = new HStack(10); linksStack.setMembers(form); linksStack.setHeight(17); // westLayout.addMember(productNameText); v.addMember(linksStack); westLayout.addMember(v); this.setMembers(westLayout, eastLayout); } public LinkItem buildHelpLink() { LinkItem helpLink = new LinkItem(); helpLink.setLinkTitle("Guide"); helpLink.setShowTitle(false); helpLink.setTextBoxStyle("header-link-style"); helpLink.setValue(com.google.gwt.user.client.Window.Location .getProtocol() + "//" + com.google.gwt.user.client.Window.Location.getHost() + "/rhev-docs/en-US/html/User_Portal_Guide/index.html"); return helpLink; } public LinkItem buildSignOutLink() { LinkItem signOutLink = new LinkItem(); signOutLink.setLinkTitle("Sign out"); signOutLink.setShowTitle(false); signOutLink.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { UserPortal.logout(); } }); signOutLink.setTextBoxStyle("header-link-style"); return signOutLink; } class ModeSelectTab extends StretchImgButton { public UserPortalMode mode; public ModeSelectTab(final UserPortalMode mode) { this.mode = mode; setLayoutAlign(VerticalAlignment.BOTTOM); setSrc("buttons/modeSelectTab.png"); setTitle(mode.title); setBaseStyle("modeTab"); setHeight(25); setWidth(100); setShowHover(false); setShowDown(false); addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { @Override public void onClick(com.smartgwt.client.widgets.events.ClickEvent event) { select(); } }); } @Override public void select() { if (!selectedTab.equals(this)) { super.select(); selectedTab.deselect(); selectedTab = this; setUserPortalMode(mode); } } } public HLayout getModeTabSelectLayout() { if (tabsLayout != null) return tabsLayout; tabsLayout = new HLayout(); tabsLayout.setAutoWidth(); tabsLayout.setLayoutRightMargin(20); ModeSelectTab basicModeTab = new ModeSelectTab(UserPortalMode.BASIC); ModeSelectTab extendedModeTab = new ModeSelectTab(UserPortalMode.EXTENDED); tabsLayout.addMember(basicModeTab); tabsLayout.addMember(extendedModeTab); selectedTab = basicModeTab; extendedModeTab.select(); // selectedTab = extendedModeTab; // basicModeTab.select(); return tabsLayout; } public void initLoggedInUserName() { if (UserPortal.getSessionUser() != null) { userName.setValue(UserPortal.getSessionUser().getUserName()); } else { userName.setValue(""); } } public void refreshUserName() { initLoggedInUserName(); userName.redraw(); } public void cleanUserName() { userName.setValue(""); userName.redraw(); } public static UserPortalMode getUserPortalMode() { return userPortalMode; } public void setUserPortalMode(UserPortalMode mode) { GWT.log("Setting user portal mode to: " + mode.name()); this.userPortalMode = mode; modeChangedEvent.raise(this, EventArgs.Empty); } public static Event getModeChangedEvent() { return modeChangedEvent; } }