/* * 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.dialog; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.user.client.DOM; import com.google.gwt.dom.client.Element; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; public class AvroUiDialog extends DialogBox { private BottomPanel bottomPanel; private HorizontalPanel buttonsPanel; public static final int GLASS_Z_INDEX = 32764; public static final int DIALOG_Z_INDEX = 32765; private static class BottomPanel extends HorizontalPanel { public BottomPanel() { setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); setWidth("100%"); } public void doAttach() { super.onAttach(); } public void doDetach() { super.onDetach(); } } public AvroUiDialog(boolean autoHide, boolean modal) { super(autoHide, modal); setAutoHideOnHistoryEventsEnabled(true); setGlassEnabled(true); setAnimationEnabled(true); buttonsPanel = new HorizontalPanel(); buttonsPanel.setSpacing(5); buttonsPanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); bottomPanel = new BottomPanel(); bottomPanel.setStyleName("Bottom"); bottomPanel.add(buttonsPanel); Element td = getCellElement(2, 1); DOM.insertChild(td,bottomPanel.getElement(),0); adopt(bottomPanel); getGlassElement().getStyle().setZIndex(GLASS_Z_INDEX); getElement().getStyle().setZIndex(DIALOG_Z_INDEX); } public void addButton(Button button) { buttonsPanel.add(button); } public void setTitle(String title) { setHTML(SafeHtmlUtils.fromTrustedString("<h2 title=\""+title+"\">"+title+"</h2>")); } @Override protected void doAttachChildren() { try { super.doAttachChildren(); } finally { this.bottomPanel.doAttach(); } } @Override protected void doDetachChildren() { try { super.doDetachChildren(); } finally { this.bottomPanel.doDetach(); } } /** * * @param resize * @param clientX * @return */ private int getRelX(com.google.gwt.dom.client.Element resize, int clientX) { return clientX - resize.getAbsoluteLeft() + resize.getScrollLeft() + resize.getOwnerDocument().getScrollLeft(); } /** * * @param resize * @param clientY * @return */ private int getRelY(com.google.gwt.dom.client.Element resize, int clientY) { return clientY - resize.getAbsoluteTop() + resize.getScrollTop() + resize.getOwnerDocument().getScrollTop(); } /** * Calculates the position of the mouse relative to the dialog box, and returns the corresponding "drag-mode" * integer, which describes which area of the box is being resized. * * @param clientX The x-coordinate of the mouse in screen pixels * @param clientY The y-coordinate of the mouse in screen pixels * @return A value in range [-1..8] describing the position of the mouse (see {@link #updateCursor(int)} for more * information) */ protected int calcDragMode(int clientX, int clientY) { com.google.gwt.dom.client.Element resize = this.getCellElement(2,2).getParentElement(); int xr = this.getRelX(resize, clientX); int yr = this.getRelY(resize, clientY); int w = resize.getClientWidth(); int h = resize.getClientHeight(); if ((xr >= 0 && xr < w && yr >= -5 && yr < h) || (yr >= 0 && yr < h && xr >= -5 && xr < w)) return 8; resize = this.getCellElement(2,0).getParentElement(); xr = this.getRelX(resize, clientX); yr = this.getRelY(resize, clientY); if ((xr >= 0 && xr < w && yr >= -5 && yr < h) || (yr >= 0 && yr < h && xr >= 0 && xr < w+5)) return 6; resize = this.getCellElement(0,2).getParentElement(); xr = this.getRelX(resize, clientX); yr = this.getRelY(resize, clientY); if ((xr >= 0 && xr < w && yr >= 0 && yr < h+5) || (yr >= 0 && yr < h && xr >= -5 && xr < w)) return 2; resize = this.getCellElement(0,0).getParentElement(); xr = this.getRelX(resize, clientX); yr = this.getRelY(resize, clientY); if ((xr >= 0 && xr < w && yr >= 0 && yr < h+5) || (yr >= 0 && yr < h && xr >= 0 && xr < w+5)) return 0; resize = this.getCellElement(0,1).getParentElement(); xr = this.getRelX(resize, clientX); yr = this.getRelY(resize, clientY); if (yr >= 0 && yr < h) return 1; resize = this.getCellElement(1,0).getParentElement(); xr = this.getRelX(resize, clientX); yr = this.getRelY(resize, clientY); if (xr >= 0 && xr < w) return 3; resize = this.getCellElement(2,1).getParentElement(); xr = this.getRelX(resize, clientX); yr = this.getRelY(resize, clientY); if (yr >= 0 && yr < h) return -1;//return 7; resize = this.getCellElement(1,2).getParentElement(); xr = this.getRelX(resize, clientX); yr = this.getRelY(resize, clientY); if (xr >= 0 && xr < w) return 5; return -1; } }