/* * Copyright 2014-2015 CyberVision, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kaaproject.avro.ui.gwt.client.widget.nav; import org.kaaproject.avro.ui.gwt.client.util.Utils; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.Style.Display; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Widget; public class NavigationPanel extends FlowPanel { private Breadcrumbs breadcrumbs; private Element zoomElement; private ZoomListener zoomListener; public NavigationPanel() { super(); setWidth("100%"); breadcrumbs = new Breadcrumbs(); add(breadcrumbs); DOM.sinkEvents(this.getElement(), Event.ONMOUSEUP); zoomElement = DOM.createDiv(); zoomElement.addClassName(Utils.avroUiStyle.zoomActionPanel()); Element zoomIcon = DOM.createDiv(); zoomIcon.addClassName(Utils.avroUiStyle.zoomAction()); zoomElement.appendChild(zoomIcon); this.getElement().appendChild(zoomElement); } public void enableZoom(boolean enableZoom) { if (enableZoom) { zoomElement.getStyle().clearDisplay(); } else { zoomElement.getStyle().setDisplay(Display.NONE); } } public void setZoomListener(ZoomListener zoomListener) { this.zoomListener = zoomListener; } public void clearNavElements() { breadcrumbs.clear(); } public void addNavElement(Widget navElement) { breadcrumbs.add(navElement); } public void removeNavElement(Widget navElement) { breadcrumbs.remove(navElement); } @Override public void onBrowserEvent(Event event) { final int eventType = DOM.eventGetType(event); if (Event.ONMOUSEUP == eventType && isZoomElement(event)) { if (zoomListener != null) { zoomListener.onZoom(); } } else { super.onBrowserEvent(event); } } protected boolean isZoomElement(Event event) { if (zoomElement != null) { int cursorY = event.getClientY(); int initialY = zoomElement.getAbsoluteTop(); int height = zoomElement.getOffsetHeight(); int cursorX = event.getClientX(); int initialX = zoomElement.getAbsoluteLeft(); int width = zoomElement.getOffsetWidth(); if (cursorY >= initialY && cursorY <= (initialY + height) && cursorX >= initialX && cursorX <= (initialX + width)) { return true; } else { return false; } } else { return false; } } public static interface ZoomListener { void onZoom(); } }