package org.geogebra.web.web.gui.toolbarpanel;
import org.geogebra.common.euclidian.event.PointerEventType;
import org.geogebra.common.main.App;
import org.geogebra.web.html5.gui.util.ClickStartHandler;
import org.geogebra.web.web.css.MaterialDesignResources;
import org.geogebra.web.web.gui.applet.GeoGebraFrameBoth;
import org.geogebra.web.web.gui.layout.DockSplitPaneW;
import org.geogebra.web.web.gui.layout.panels.ToolbarDockPanelW;
import org.geogebra.web.web.main.AppWFull;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ToggleButton;
public class ToolbarPanel extends FlowPanel {
private static final int CLOSED_WIDTH = 56;
private Header header;
private App app;
private Integer lastOpenWidth = null;
private class Header extends FlowPanel {
private ToggleButton btnMenu;
private ToggleButton btnClose;
private boolean open = true;
private Image imgClose;
private Image imgOpen;
private FlowPanel contents;
public Header() {
contents = new FlowPanel();
contents.addStyleName("contents");
add(contents);
createCloseButton();
createMenuButton();
}
private void createCloseButton() {
imgClose = new Image(MaterialDesignResources.INSTANCE.toolbar_close_white());
imgOpen = new Image(MaterialDesignResources.INSTANCE.toolbar_open_white());
btnClose = new ToggleButton();
btnClose.addStyleName("flatButton");
btnClose.addStyleName("close");
contents.add(btnClose);
ClickStartHandler.init(btnClose, new ClickStartHandler() {
@Override
public void onClickStart(int x, int y, PointerEventType type) {
if (open) {
lastOpenWidth = getOffsetWidth();
}
setOpen(!open);
((GeoGebraFrameBoth) ((AppWFull) app).getAppletFrame()).showKeyBoard(false, null, true);
}
});
}
private void createMenuButton() {
btnMenu = new ToggleButton(new Image(MaterialDesignResources.INSTANCE.toolbar_menu_white()));
btnMenu.addStyleName("flatButton");
btnMenu.addStyleName("menu");
contents.add(btnMenu);
ClickStartHandler.init(btnMenu, new ClickStartHandler() {
@Override
public void onClickStart(int x, int y, PointerEventType type) {
}
});
}
public boolean isOpen() {
return open;
}
public void setOpen(boolean value) {
this.open = value;
if (open) {
removeStyleName("header-close");
addStyleName("header-open");
btnClose.getUpFace().setImage(imgClose);
} else {
removeStyleName("header-open");
addStyleName("header-close");
btnClose.getUpFace().setImage(imgOpen);
}
updateWidth();
showKeyboardButtonDeferred(open);
}
}
public ToolbarPanel(App app) {
this.app = app;
initGUI();
}
private void initGUI() {
clear();
addStyleName("toolbar");
header = new Header();
add(header);
add(new Label("Here comes the contents..."));
open();
}
public void open() {
if (header.isOpen()) {
return;
}
header.setOpen(true);
}
public void close() {
if (!header.isOpen()) {
return;
}
header.setOpen(false);
}
public void updateWidth() {
ToolbarDockPanelW dockPanel = getToolbarDockPanel();
DockSplitPaneW dockParent = dockPanel != null ? dockPanel.getParentSplitPane() : null;
if (dockPanel != null && lastOpenWidth != null) {
dockParent.setWidgetSize(dockPanel, header.isOpen() ? lastOpenWidth : CLOSED_WIDTH);
dockPanel.deferredOnResize();
}
}
/**
* @return algebra dock panel
*/
ToolbarDockPanelW getToolbarDockPanel() {
return (ToolbarDockPanelW) app.getGuiManager().getLayout().getDockManager().getPanel(App.VIEW_ALGEBRA);
}
public boolean isOpen() {
return header.isOpen();
}
private void showKeyboardButtonDeferred(final boolean show) {
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
((GeoGebraFrameBoth) ((AppWFull) app).getAppletFrame()).showKeyboardButton(show);
}
});
}
}