/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.eas.window; import com.eas.window.events.MaximizeEvent; import com.eas.window.events.MaximizeHandler; import com.eas.window.events.MinimizeEvent; import com.eas.window.events.MinimizeHandler; import com.eas.window.events.RestoreEvent; import com.eas.window.events.RestoreHandler; import com.google.gwt.dom.client.Style; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.DoubleClickEvent; import com.google.gwt.event.dom.client.DoubleClickHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HasHTML; import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; /** * * @author mg */ public class ToolsCaption extends FlowPanel implements HasHTML { public static final String WINDOW_TOOL_CLASS_NAME = "window-tool"; protected HTML label = new HTML(); protected ImageResource icon; protected Panel tools = new FlowPanel(); protected SimplePanel btnMinimize = new SimplePanel(); protected SimplePanel btnMaximize = new SimplePanel(); protected SimplePanel btnRestore = new SimplePanel(); protected SimplePanel btnClose = new SimplePanel(); protected WindowUI window; protected HandlerRegistration windowMinimize; protected HandlerRegistration windowMaximize; protected HandlerRegistration windowRestore; public ToolsCaption(WindowUI aWindow) { super(); setStyleName("window-caption"); btnMinimize.getElement().addClassName(WINDOW_TOOL_CLASS_NAME + "-minimize"); btnMaximize.getElement().addClassName(WINDOW_TOOL_CLASS_NAME + "-maximize"); btnRestore.getElement().addClassName(WINDOW_TOOL_CLASS_NAME + "-restore"); btnClose.getElement().addClassName(WINDOW_TOOL_CLASS_NAME + "-close"); for (Widget w : new Widget[] { btnMinimize, btnMaximize, btnRestore, btnClose }) { w.getElement().getStyle().setMargin(0, Style.Unit.PX); w.getElement().getStyle().setDisplay(Style.Display.INLINE_BLOCK); w.getElement().addClassName(WINDOW_TOOL_CLASS_NAME); } label.getElement().getStyle().setDisplay(Style.Display.INLINE_BLOCK); label.getElement().getStyle().setPosition(Style.Position.RELATIVE); label.getElement().getStyle().setVerticalAlign(Style.VerticalAlign.MIDDLE); label.setStyleName("window-caption-text");// to implicitly remove // gwt-HTML class tools.getElement().getStyle().setDisplay(Style.Display.INLINE_BLOCK); tools.getElement().getStyle().setFloat(Style.Float.RIGHT); tools.getElement().getStyle().setVerticalAlign(Style.VerticalAlign.MIDDLE); tools.setStyleName("window-caption-tools"); getElement().getStyle().setPosition(Style.Position.RELATIVE); add(tools); add(label); tools.add(btnMinimize); tools.add(btnMaximize); tools.add(btnRestore); tools.add(btnClose); btnMinimize.addDomHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { window.minimize(); } }, ClickEvent.getType()); btnMaximize.addDomHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { window.maximize(); } }, ClickEvent.getType()); btnRestore.addDomHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { window.restore(); } }, ClickEvent.getType()); btnClose.addDomHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { window.close(); } }, ClickEvent.getType()); addDomHandler(new DoubleClickHandler() { @Override public void onDoubleClick(DoubleClickEvent event) { if (window.isMaximized()) { window.restore(); } else { window.maximize(); } } }, DoubleClickEvent.getType()); setWindow(aWindow); } public ToolsCaption() { this(null); } public ToolsCaption(WindowUI aWindow, String aCaptionHtml) { this(aWindow); label.setHTML(aCaptionHtml); } private void setWindow(WindowUI aWindow) { if (windowMinimize != null) { windowMinimize.removeHandler(); } if (windowMaximize != null) { windowMaximize.removeHandler(); } if (windowRestore != null) { windowRestore.removeHandler(); } window = aWindow; if (window != null) { windowMinimize = window.addMinimizeHandler(new MinimizeHandler<WindowUI>() { @Override public void onMinimize(MinimizeEvent<WindowUI> anEvent) { updateToolsVisibility(); } }); windowMaximize = window.addMaximizeHandler(new MaximizeHandler<WindowUI>() { @Override public void onMaximize(MaximizeEvent<WindowUI> anEvent) { updateToolsVisibility(); } }); windowRestore = window.addRestoreHandler(new RestoreHandler<WindowUI>() { @Override public void onRestore(RestoreEvent<WindowUI> anEvent) { updateToolsVisibility(); } }); } updateToolsVisibility(); } @Override public String getHTML() { return label.getHTML(); } @Override public void setHTML(String html) { if (html != null && !html.isEmpty()) { label.setHTML(html); } else { label.setHTML(" "); } } @Override public String getText() { return label.getText(); } @Override public void setText(String text) { if (text != null && !text.isEmpty()) { label.setText(text); } else { label.setHTML(" "); } } public ImageResource getIcon() { return icon; } public void setIcon(ImageResource aValue) { icon = aValue; if (icon != null) { label.getElement().getStyle().setPaddingLeft(icon.getWidth(), Style.Unit.PX); label.getElement().getStyle().setBackgroundImage("url(" + icon.getSafeUri().asString() + ")"); label.getElement().getStyle().setProperty("backgroundRepeat", "no-repeat"); } else { label.getElement().getStyle().clearPaddingLeft(); label.getElement().getStyle().clearBackgroundImage(); label.getElement().getStyle().clearProperty("backgroundRepeat"); } } public void updateToolsVisibility() { btnMinimize.getElement().getStyle().setDisplay(window.isMinimizable() && !window.isMinimized() ? Style.Display.INLINE_BLOCK : Style.Display.NONE); btnMaximize.getElement().getStyle().setDisplay(window.isMaximizable() && !window.isMaximized() && !window.isMinimized() ? Style.Display.INLINE_BLOCK : Style.Display.NONE); btnRestore.getElement().getStyle().setDisplay(window.isMinimized() || window.isMaximized() ? Style.Display.INLINE_BLOCK : Style.Display.NONE); btnClose.getElement().getStyle().setDisplay(window.isClosable() ? Style.Display.INLINE_BLOCK : Style.Display.NONE); } }