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);
      }
    }
  }
예제 #3
0
    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;
    }
예제 #4
0
  /** 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();
 }
예제 #8
0
  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();
      }
    }
  }