private static int getGravity(ViewDefinition child, ConfigDefinition config) { int parentGravity = config.getGravity(); int childGravity; // get childGravity of child view (if exists) if (child != null && child.gravitySpecified()) { childGravity = child.getGravity(); } else { childGravity = parentGravity; } childGravity = getGravityFromRelative(childGravity, config); parentGravity = getGravityFromRelative(parentGravity, config); // add parent gravity to child gravity if child gravity is not specified if ((childGravity & Gravity.HORIZONTAL_GRAVITY_MASK) == 0) { childGravity |= parentGravity & Gravity.HORIZONTAL_GRAVITY_MASK; } if ((childGravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) { childGravity |= parentGravity & Gravity.VERTICAL_GRAVITY_MASK; } // if childGravity is still not specified - set default top - left gravity if ((childGravity & Gravity.HORIZONTAL_GRAVITY_MASK) == 0) { childGravity |= Gravity.LEFT; } if ((childGravity & Gravity.VERTICAL_GRAVITY_MASK) == 0) { childGravity |= Gravity.TOP; } return childGravity; }
public static void fillLines( List<ViewDefinition> views, List<LineDefinition> lines, ConfigDefinition config) { LineDefinition currentLine = new LineDefinition(config); lines.add(currentLine); final int count = views.size(); for (int i = 0; i < count; i++) { final ViewDefinition child = views.get(i); boolean newLine = child.isNewLine() || (config.isCheckCanFit() && !currentLine.canFit(child)); if (newLine) { currentLine = new LineDefinition(config); if (config.getOrientation() == CommonLogic.VERTICAL && config.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) { lines.add(0, currentLine); } else { lines.add(currentLine); } } if (config.getOrientation() == CommonLogic.HORIZONTAL && config.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) { currentLine.addView(0, child); } else { currentLine.addView(child); } } }
private ViewDefinition readViewDefinition(Element element) { String name = element.getAttribute("name"); Assert.ifEmpty(name, "can`t read view without name"); String extend = element.getAttribute("extend"); String file = element.getAttribute("file"); if (isNoneEmpty(file)) file = fileScope.getRelativePath(file); ViewDefinition viewDef = new ViewDefinition(name, file); viewDef.setExtend(extend); fragmentRefExpressions.forEach( x -> { XmlUtils.iterateSubElements( element, x, e -> viewDef.addFragment(readFragmentReference(e))); }); resourcesRefExpressions.forEach( x -> { XmlUtils.iterateSubElements( element, x, e -> viewDef.addResources(readResourcesReference(e))); }); return viewDef; }
/** Return the view for Sybase. */ public static ViewDefinition oracleView() { ViewDefinition definition = new ViewDefinition(); definition.setName("AllVehicles"); definition.setSelectClause( "Select V.*, F.FUEL_CAP, F.FUEL_TYP, B.DESCRIP, B.DRIVER_ID, C.CDESCRIP" + " from VEHICLE V, FUEL_VEH F, BUS B, CAR C" + " where V.ID = F.ID (+) AND V.ID = B.ID (+) AND V.ID = C.ID (+)"); return definition; }
public static void calculateLinesAndChildPosition(List<LineDefinition> lines) { int prevLinesThickness = 0; final int linesCount = lines.size(); for (int i = 0; i < linesCount; i++) { final LineDefinition line = lines.get(i); line.setLineStartThickness(prevLinesThickness); prevLinesThickness += line.getLineThickness(); int prevChildThickness = 0; final List<ViewDefinition> childViews = line.getViews(); final int childCount = childViews.size(); for (int j = 0; j < childCount; j++) { ViewDefinition child = childViews.get(j); child.setInlineStartLength(prevChildThickness); prevChildThickness += child.getLength() + child.getSpacingLength(); } } }
public static void applyGravityToLine(LineDefinition line, ConfigDefinition config) { final List<ViewDefinition> views = line.getViews(); final int viewCount = views.size(); if (viewCount <= 0) { return; } float totalWeight = 0; for (int i = 0; i < viewCount; i++) { final ViewDefinition child = views.get(i); totalWeight += getWeight(child, config); } ViewDefinition lastChild = views.get(viewCount - 1); int excessLength = line.getLineLength() - (lastChild.getLength() + lastChild.getSpacingLength() + lastChild.getInlineStartLength()); int excessOffset = 0; for (int i = 0; i < viewCount; i++) { final ViewDefinition child = views.get(i); float weight = getWeight(child, config); int gravity = getGravity(child, config); int extraLength; if (totalWeight == 0) { extraLength = excessLength / viewCount; } else { extraLength = Math.round(excessLength * weight / totalWeight); } final int childLength = child.getLength() + child.getSpacingLength(); final int childThickness = child.getThickness() + child.getSpacingThickness(); Rect container = new Rect(); container.top = 0; container.left = excessOffset; container.right = childLength + extraLength + excessOffset; container.bottom = line.getLineThickness(); Rect result = new Rect(); Gravity.apply(gravity, childLength, childThickness, container, result); excessOffset += extraLength; child.setInlineStartLength(result.left + child.getInlineStartLength()); child.setInlineStartThickness(result.top); child.setLength(result.width() - child.getSpacingLength()); child.setThickness(result.height() - child.getSpacingThickness()); } }
private static float getWeight(ViewDefinition child, ConfigDefinition config) { return child.weightSpecified() ? child.getWeight() : config.getWeightDefault(); }
public static void zoomToFit(Viewport2 viewport) { ViewDefinition viewdef = viewport.getViewDefinition(); // if (MainFrame.getInstance().getMeshToolBar().getMode() != MeshToolBar.VIEW_ZOOM) { // MainFrame.getInstance().getJPatchScreen().removeAllMouseListeners(); // MainFrame.getInstance().getJPatchScreen().addMouseListeners(new // ChangeViewMouseListener(MouseEvent.BUTTON1,ChangeViewMouseListener.ZOOM)); // MainFrame.getInstance().getMeshToolBar().setMode(MeshToolBar.VIEW_ZOOM); // } else { // MainFrame.getInstance().getMeshToolBar().reset(); // } Selection selection = MainFrame.getInstance().getSelection(); float left = Float.MAX_VALUE; float right = -Float.MAX_VALUE; float bottom = Float.MAX_VALUE; float top = -Float.MAX_VALUE; Point3f p3 = new Point3f(); Matrix4f m4View = viewdef.getScreenMatrix(); // Matrix3f m3RotScale = new Matrix3f(); // m4View.getRotationScale(m3RotScale); boolean doit = true; if (selection != null && !selection.isSingle()) { for (Iterator it = selection.getObjects().iterator(); it.hasNext(); ) { Object object = it.next(); if (object instanceof ControlPoint) { p3.set(((ControlPoint) object).getPosition()); m4View.transform(p3); if (p3.x < left) left = p3.x; if (p3.x > right) right = p3.x; if (p3.y < bottom) bottom = p3.y; if (p3.y > top) top = p3.y; } } } else { ArrayList heads = MainFrame.getInstance().getModel().allHeads(); int p = 0; for (Iterator it = heads.iterator(); it.hasNext(); ) { ControlPoint cp = (ControlPoint) it.next(); if (!cp.isHidden()) { p3.set(cp.getPosition()); m4View.transform(p3); if (p3.x < left) left = p3.x; if (p3.x > right) right = p3.x; if (p3.y < bottom) bottom = p3.y; if (p3.y > top) top = p3.y; p++; } } doit = (p >= 2); } if (doit) { // System.out.println(left + " " + right + " " + top + " " + bottom + " " + // viewdef.getScale()); // System.out.println(viewdef.getTranslateX() + " " + viewdef.getTranslateY()); float centerX = (left + right) / 2f; float centerY = (top + bottom) / 2f; float dimX = viewdef.getWidth() / 2f; float dimY = viewdef.getHeight() / 2f; float sizeX = right - centerX; float sizeY = top - centerY; if (sizeX > 0 || sizeY > 0) { // System.out.println(centerX + ":" + centerY); float scaleX = dimX / sizeX; float scaleY = dimY / sizeY; float scale = Math.min(scaleX, scaleY) * 0.9f; // viewdef.setScale(viewdef.getScale() * scale); viewdef.setLock(null); viewdef.moveView(-centerX / dimX + 1, (dimY - centerY) / dimX, false); viewdef.scaleView(scale); // viewdef.setTranslation(centerX, centerY); // viewdef.computeMatrix(); // viewport.render(); } } }