/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and 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
*
* Contributors:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.jsf.ui.editor.figures;
import org.eclipse.draw2d.*;
import org.eclipse.draw2d.geometry.*;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.handles.HandleBounds;
import org.jboss.tools.jsf.ui.editor.edit.PageEditPart;
import org.jboss.tools.jsf.ui.editor.figures.xpl.FixedConnectionAnchor;
import org.jboss.tools.jsf.ui.editor.model.IGroup;
import org.jboss.tools.jsf.ui.editor.model.IPage;
public class PageFigure
extends NodeFigure
implements HandleBounds
{
private static final Dimension SIZE = new Dimension(56, 100);
private PageEditPart pagePart;
private IPage page;
private IGroup group;
public void setConstraint(IFigure child, Object constraint) {
super.setConstraint(child, constraint);
}
public void init(int number){
FixedConnectionAnchor c;
if(number == 0) number = 1;
for(int i=0;i<number;i++){
c = new FixedConnectionAnchor(this);
c.offsetV = 8+LINK_HEIGHT*i;
c.offsetH = -2;
c.leftToRight = false;
connectionAnchors.put((i+1)+"_OUT", c); //$NON-NLS-1$
outputConnectionAnchors.addElement(c);
}
}
public void addConnectionAnchor(int number){
if(number == 1) return;
FixedConnectionAnchor c;
c = new FixedConnectionAnchor(this);
c.offsetV = 8+LINK_HEIGHT*(number-1);
c.offsetH = -2;
c.leftToRight = false;
connectionAnchors.put(number+"_OUT", c); //$NON-NLS-1$
outputConnectionAnchors.addElement(c);
}
public void removeConnectionAnchor(){
if(outputConnectionAnchors.size() == 1)return;
outputConnectionAnchors.remove(outputConnectionAnchors.size()-1);
}
public void removeAllConnectionAnchor(){
outputConnectionAnchors.removeAllElements();
}
public PageFigure(PageEditPart pagePart) {
this.pagePart = pagePart;
page = pagePart.getPageModel();
group = (IGroup)page.getParentJSFElement();
setOpaque(false);
init(page.getLinkList().size());
}
public Rectangle getHandleBounds() {
return getBounds().getCropped(new Insets(2,0,2,0));
}
public Dimension getPreferredSize(int wHint, int hHint) {
return SIZE;
}
protected void paintFigure(Graphics g) {
Rectangle r = getBounds().getCopy();
g.translate(r.getLocation());
int width = r.width;
int height = r.height;
if(pagePart.getSelected() == EditPart.SELECTED_PRIMARY || pagePart.getSelected() == EditPart.SELECTED){
if(page.hasErrors())
g.setBackgroundColor(errorSelected);
else if(group.isPattern())
g.setBackgroundColor(pattSelected);
else if(group.isConfirmed())
g.setBackgroundColor(brownColor);
else
g.setBackgroundColor(lightGrayColor);
}else{
if(page.hasErrors())
g.setBackgroundColor(errorColor);
else if(group.isPattern())
g.setBackgroundColor(lightBlueColor);
else if(group.isConfirmed())
g.setBackgroundColor(yellowColor);
else
g.setBackgroundColor(lightGrayColor);
}
g.fillRectangle(0,0,width,height);
if(pagePart.getSelected() == EditPart.SELECTED_PRIMARY || pagePart.getSelected() == EditPart.SELECTED){
if(page.hasErrors())
g.setForegroundColor(errorBorder);
else if(group.isPattern())
g.setForegroundColor(pattBorder);
else if(group.isConfirmed())
g.setForegroundColor(borderColor);
else
g.setForegroundColor(darkGrayColor);
g.drawRectangle(0,0,width-1, height-1);
if(group.getPageList().indexOf(page) == 0) g.drawLine(0,1,width-1, 1);
}
}
}