/*******************************************************************************
* Copyright (c) 2007-2009 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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
*
* Contributor:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.hibernate.ui.diagram.editors.model;
import java.util.Properties;
import org.eclipse.ui.IMemento;
/**
* Shape with two intrinsic states: expand and collapse.
*
* @author some modifications from Vitali
*/
public class ExpandableShape extends Shape {
public static final String EXPANDED = "expanded"; //$NON-NLS-1$
protected boolean expanded = true;
public ExpandableShape(Object ioe, String consoleConfigName) {
super(ioe, consoleConfigName);
}
public boolean isExpanded() {
return expanded;
}
public void setExpanded(boolean expanded) {
if (expanded) {
expand();
} else {
collapse();
}
}
public boolean expand() {
if (!isVisible()) {
// prohibit expand and collapse in invisible mode
return false;
}
boolean expandedOld = this.expanded;
expanded = true;
setVisibleChildren(true);
firePropertyChange(EXPANDED, Boolean.valueOf(expandedOld), Boolean.valueOf(expanded));
return true;
}
public boolean collapse() {
if (!isVisible()) {
// prohibit expand and collapse in invisible mode
return false;
}
boolean expandedOld = this.expanded;
expanded = false;
setVisibleChildren(false);
firePropertyChange(EXPANDED, Boolean.valueOf(expandedOld), Boolean.valueOf(expanded));
return true;
}
@Override
public void setVisible(boolean visible) {
boolean visibleOld = this.visible;
this.visible = visible;
if (expanded) {
// set children visible only if in expanded state
setVisibleChildren(visible);
}
firePropertyChange(VISIBLE, Boolean.valueOf(visibleOld), Boolean.valueOf(visible));
// update connections visibility state
updateVisibleValue(this.visible);
}
@Override
public void loadState(IMemento memento) {
super.loadState(memento);
boolean expanded = getPrValue(memento, EXPANDED, true);
setExpanded(expanded);
}
@Override
protected void loadFromProperties(Properties properties) {
super.loadFromProperties(properties);
boolean expanded = getPrValue(properties, EXPANDED, true);
setExpanded(expanded);
}
@Override
public void saveState(IMemento memento) {
boolean expanded = isExpanded();
setPrValue(memento, EXPANDED, expanded);
super.saveState(memento);
}
@Override
protected void saveInProperties(Properties properties) {
boolean expanded = isExpanded();
setPrValue(properties, EXPANDED, expanded);
super.saveInProperties(properties);
}
}