Java tutorial
/* * Copyright 2009 Fred Sauer * * 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 edu.purdue.pivot.skwiki.client.dnd; import com.allen_sauer.gwt.dnd.client.HasDragHandle; import com.google.gwt.user.client.ui.AbsolutePanel; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.FocusPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RadioButton; import com.google.gwt.user.client.ui.Widget; import edu.purdue.pivot.skwiki.client.editwindow.CanvasWindow; import edu.purdue.pivot.skwiki.client.editwindow.TextWindow; /** * Widget wrapper class used by {@link PalettePanel}. */ // public class PaletteWidget extends VerticalPanel implements HasDragHandle { public class PaletteWidget extends AbsolutePanel implements HasDragHandle { private FocusPanel shim = new FocusPanel(); private final Widget widget; public HTML header = new HTML("Sketch Editor"); /** * Default constructor to wrap the provided widget. * * @param widget * the widget to be wrapped */ public PaletteWidget(Widget widget) { setSize("400px", "400px"); this.widget = widget; // **** new from Dnd add(header, 0, 0); add(widget, 0, 25); // Add some CSS styling addStyleName("demo-PaletteWidget"); widget.addStyleName("demo-PaletteWidget-widget"); shim.addStyleName("demo-PaletteWidget-shim"); } public PaletteWidget cloneWidget() { Widget clone; // Clone our internal widget if (widget instanceof Label) { Label label = (Label) widget; clone = new Label(label.getText()); } else if (widget instanceof RadioButton) { RadioButton radioButton = (RadioButton) widget; clone = new RadioButton(radioButton.getName(), radioButton.getHTML(), true); } else if (widget instanceof CheckBox) { CheckBox checkBox = (CheckBox) widget; clone = new CheckBox(checkBox.getHTML(), true); } else if (widget instanceof TextWindow) { TextWindow editWindow = (TextWindow) widget; clone = new TextWindow(); } else if (widget instanceof CanvasWindow) { CanvasWindow editWindow = (CanvasWindow) widget; clone = new CanvasWindow(); } else { throw new IllegalStateException("Unhandled Widget class " + widget.getClass().getName()); } // Copy a few obvious common widget properties clone.setStyleName(widget.getStyleName()); clone.setTitle(widget.getTitle()); // Wrap the cloned widget in a new PaletteWidget instance return new PaletteWidget(clone); } @Override public Widget getDragHandle() { return shim; } /** * Adjust the shim size and attach once our widget dimensions are known. */ @Override protected void onLoad() { super.onLoad(); shim.setPixelSize(getOffsetWidth(), getOffsetHeight()); // **** new to DND add(shim, 0, 0); // add(shim); } /** * Remove the shim to allow the widget to size itself when reattached. */ @Override protected void onUnload() { super.onUnload(); shim.removeFromParent(); } /** * Let shim size match our size. * * @param width * the desired pixel width * @param height * the desired pixel height */ @Override public void setPixelSize(int width, int height) { super.setPixelSize(width, height); shim.setPixelSize(width, height); } /** * Let shim size match our size. * * @param width * the desired CSS width * @param height * the desired CSS height */ @Override public void setSize(String width, String height) { super.setSize(width, height); shim.setSize(width, height); } }