/******************************************************************************* * Copyright (c) 2012 Rushan R. Gilmullin and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Rushan R. Gilmullin - initial API and implementation *******************************************************************************/ package org.semanticsoft.vaaclipse.widgets; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import org.semanticsoft.commons.geom.Bounds; import com.vaadin.server.PaintException; import com.vaadin.server.PaintTarget; import fi.jasoft.dragdroplayouts.DDTabSheet; import fi.jasoft.dragdroplayouts.client.ui.LayoutDragMode; /** * @author rushan * */ public class StackWidget extends DDTabSheet { public interface StateListener { void stateChanged(int newState, int oldState); } public transient boolean maximizeEnabled = true; public transient boolean minimizeEnabled = true; private int state = 0; private List<StateListener> stateListeners = new ArrayList<StateListener>(); private Bounds bounds; public StackWidget() { this.addStyleName("stackwidget"); this.setDragMode(LayoutDragMode.CLONE); // this.setDropHandler(new VaadinDropHandler(workbench, this)); } @Override public void changeVariables(Object source, Map<String, Object> variables) { super.changeVariables(source, variables); if (variables.containsKey("vaadock_tabsheet_state")) { int newState = (Integer) variables.get("vaadock_tabsheet_state"); int oldState = state; state = newState; fireStateChangedEvent(state, oldState); } } public void setState(int state) { this.state = state; this.requestRepaint(); } @Override public void paintContent(PaintTarget target) throws PaintException { super.paintContent(target); target.addAttribute("vaadock_tabsheet_state", state); target.addAttribute("maximize_enabled", this.maximizeEnabled); target.addAttribute("minimize_enabled", this.minimizeEnabled); target.addAttribute("svoi", 5); } public boolean isMaximizeEnabled() { return this.maximizeEnabled; } public void setMaximizeEnabled(boolean maximizeEnabled) { this.maximizeEnabled = maximizeEnabled; this.requestRepaint(); } public boolean isMinimizeEnabled() { return this.minimizeEnabled; } public void setMinimizeEnabled(boolean minimizeEnabled) { this.minimizeEnabled = minimizeEnabled; this.requestRepaint(); } public List<StateListener> getStateListeners() { return Collections.unmodifiableList(stateListeners); } public void addStateListener(StateListener stateListener) { this.stateListeners.add(stateListener); } public void removeStateListener(StateListener stateListener) { this.stateListeners.remove(stateListener); } public void removeAllStateListeners() { this.stateListeners.clear(); } private void fireStateChangedEvent(int newState, int oldState) { for (StateListener stateListener : new ArrayList<StateListener>(this.stateListeners)) { stateListener.stateChanged(newState, oldState); } } public boolean hasBoundsInfo() { return this.bounds != null; } public Bounds getBounds() { return this.bounds; } public void setBounds(Bounds bounds) { this.bounds = bounds; } }