/* Copyright 2012-2013 the original author or authors.
*
* 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.snaker.designer.parts;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.GraphicalEditPart;
import org.snaker.designer.config.ConfigManager;
import org.snaker.designer.model.Attr;
import org.snaker.designer.model.BaseElement;
import org.snaker.designer.model.Field;
import org.snaker.designer.model.ModelHelper;
/**
* EditPart帮助类,主要针对Form、Field的编辑
* @author yuqs
* @version 1.0
*/
public class EditPartHelper {
public static Point getCurFigureLocation(GraphicalEditPart edit,
Figure figure) {
GraphicalEditPart preEdit = getPreviousPart(edit);
if (preEdit == null) {
return new Point(30, 30);
}
Point point = createCurLocation(preEdit);
String lineBR = ModelHelper.getElementLineBR((BaseElement) preEdit
.getModel());
if (lineBR.equalsIgnoreCase(ConfigManager.VALUE_LIST_FALSE)) {
Point prePoint = ((Figure) preEdit.getFigure()).getLocation();
if (point.y == prePoint.y) {
List<Attr> attrs = ((BaseElement) edit.getModel()).getAttrs();
if (attrs.isEmpty()) {
Attr attr = new Attr();
attr.setName(ConfigManager.PROPERTIES_LINEBR);
attr.setValue(ConfigManager.VALUE_LIST_TRUE);
attrs.add(attr);
} else {
for (Attr attr : attrs) {
if (attr.getName().equalsIgnoreCase(
ConfigManager.PROPERTIES_LINEBR)) {
attr.setValue(ConfigManager.VALUE_LIST_TRUE);
}
}
}
}
}
return point;
}
public static Point getCurFigureLocation(GraphicalEditPart edit) {
GraphicalEditPart preEdit = getPreviousPart(edit);
if (preEdit == null) {
return new Point(30, 30);
}
Point point = createCurLocation(preEdit);
return point;
}
private static GraphicalEditPart getPreviousPart(GraphicalEditPart curPart) {
GraphicalEditPart preEdit = null;
List<?> listParts = curPart.getParent().getChildren();
for (int i = 0; i < listParts.size(); i++) {
if (listParts.get(i) != curPart)
continue;
if (i == 0)
continue;
preEdit = (GraphicalEditPart) listParts.get(i - 1);
}
return preEdit;
}
private static Point createCurLocation(GraphicalEditPart preEdit) {
String lineBR = ConfigManager.VALUE_LIST_FALSE;
Point point = null;
Figure figure = (Figure) preEdit.getFigure();
if ((preEdit.getModel() instanceof BaseElement)) {
lineBR = ModelHelper.getElementLineBR((BaseElement) preEdit
.getModel());
}
if (lineBR.equals(ConfigManager.VALUE_LIST_TRUE)) {
point = new Point(30, figure.getLocation().y
+ figure.getSize().height - 1);
} else {
point = new Point(figure.getLocation().x + figure.getSize().width
- 1, figure.getLocation().y);
}
return point;
}
@SuppressWarnings("unchecked")
public static List<EditPart> getRestEditParts(EditPart editpart) {
List<EditPart> listOut = new ArrayList<EditPart>();
List<EditPart> listParts = editpart.getParent().getChildren();
boolean bFlag = false;
if (listParts == null) {
return new ArrayList<EditPart>();
}
for (int i = 0; i < listParts.size(); i++) {
if (bFlag) {
listOut.add(listParts.get(i));
} else {
if (editpart != listParts.get(i)) {
continue;
}
bFlag = true;
listOut.add(listParts.get(i));
}
}
return listOut;
}
public static void refreshEditPartsLocation(List<EditPart> editparts) {
for (int i = 0; i < editparts.size(); i++) {
if (i == 0) {
continue;
}
FieldEditPart curPart = (FieldEditPart) editparts.get(i);
FieldEditPart nextPart = (FieldEditPart) editparts.get(i - 1);
Point p = createCurLocation(nextPart);
curPart.getFigure().setLocation(p);
}
}
public static void refreshAllChildren(EditPart part) {
if ((part.getModel() instanceof Field)) {
return;
}
List<?> list = part.getChildren();
for (int i = 0; i < list.size(); i++) {
FieldEditPart tmpPart = (FieldEditPart) list.get(i);
tmpPart.refreshLocation();
}
}
public static List<?> getEditPartsInLayouts(EditPart editpart) {
if (!(editpart instanceof FieldEditPart)) {
return null;
}
FieldEditPart ep = (FieldEditPart) editpart;
if (ep.isLayout()) {
return ep.getChildren();
}
EditPart pep = ep.getParent();
return pep.getChildren();
}
public static void refreshLocation(List<?> editparts) {
for (int i = 0; i < editparts.size(); i++) {
FieldEditPart ep = (FieldEditPart) editparts.get(i);
if (i == 0) {
Point p = new Point(30, 30);
ep.getFigure().setLocation(p);
} else {
FieldEditPart pep = (FieldEditPart) editparts.get(i - 1);
Point p = createCurLocation(pep);
ep.getFigure().setLocation(p);
}
}
}
public static void refreshAllEditPartLocation(EditPart part) {
List<?> list = getEditPartsInLayouts(part);
refreshLocation(list);
}
public static Object getParentModel(TaskFieldEditPart editpart) {
if (editpart == null) {
return null;
}
while (!editpart.isLayout()) {
if (!(editpart.getParent() instanceof TaskFieldEditPart)) {
break;
}
editpart = (TaskFieldEditPart) editpart.getParent();
continue;
}
return editpart.getModel();
}
}