Examples of SnapPositionsModel


Examples of org.pentaho.reporting.designer.core.editor.report.snapping.SnapPositionsModel

    snapThreshold = WorkspaceSettings.getInstance().getSnapThreshold();
  }

  public void update(final Point2D normalizedPoint, final double zoomFactor)
  {
    final SnapPositionsModel horizontalSnapModel = getHorizontalSnapModel();
    final Element[] selectedVisualElements = getSelectedVisualElements();
    final long originPointX = getOriginPointX();
    final long[] elementWidth = getElementWidth();
    final long[] elementX = getElementX();

    final long px = StrictGeomUtility.toInternalValue(normalizedPoint.getX());
    final long dx = px - originPointX;

    for (int i = 0; i < selectedVisualElements.length; i++)
    {
      final Element element = selectedVisualElements[i];
      if (element instanceof RootLevelBand)
      {
        continue;
      }
      final ElementStyleSheet styleSheet = element.getStyle();
      final double definedElementX = styleSheet.getDoubleStyleProperty(ElementStyleKeys.POS_X, 0);

      // this is where I want the element on a global scale...
      final long targetPositionX = elementX[i] + dx;
      final Element parent = element.getParentSection();
      final CachedLayoutData parentData = ModelUtility.getCachedLayoutData(parent);
      final long layoutedParentX = parentData.getX();

      if (targetPositionX < layoutedParentX)
      {
        continue;
      }
      // this is what we used to apply to POS_X
      final long computedPositionX;
      if (definedElementX >= 0)
      {
        // absolute position; resolving is easy here
        final long snapPosition = horizontalSnapModel.getNearestSnapPosition(targetPositionX, element.getObjectID());
        if (Math.abs(snapPosition - targetPositionX) > snapThreshold)
        {
          computedPositionX = targetPositionX;
          final long localXPosition = Math.max(0, targetPositionX - layoutedParentX);
          final float position = (float) StrictGeomUtility.toExternalValue(localXPosition);
          styleSheet.setStyleProperty(ElementStyleKeys.POS_X, new Float(position));
        }
        else
        {
          computedPositionX = snapPosition;
          final long localXPosition = Math.max(0, snapPosition - layoutedParentX);
          final float position = (float) StrictGeomUtility.toExternalValue(localXPosition);
          styleSheet.setStyleProperty(ElementStyleKeys.POS_X, new Float(position));
        }
      }
      else
      {
        final long parentBase = parentData.getWidth();
        if (parentBase > 0)
        {
          // relative position; resolve the percentage against the width of the parent.
          final long snapPosition = horizontalSnapModel.getNearestSnapPosition(targetPositionX, element.getObjectID());
          if (Math.abs(snapPosition - targetPositionX) > snapThreshold)
          {
            computedPositionX = targetPositionX;
            final long localXPosition = Math.max(0, targetPositionX - layoutedParentX);
            // strict geometry: all values are multiplied by 1000
View Full Code Here

Examples of org.pentaho.reporting.designer.core.editor.report.snapping.SnapPositionsModel

    snapThreshold = WorkspaceSettings.getInstance().getSnapThreshold();
  }

  public void update(final Point2D normalizedPoint, final double zoomFactor)
  {
    final SnapPositionsModel verticalSnapModel = getVerticalSnapModel();
    final Element[] selectedVisualElements = getSelectedVisualElements();
    final long originPointY = getOriginPointY();
    final long[] elementHeight = getElementHeight();

    final long py = StrictGeomUtility.toInternalValue(normalizedPoint.getY());

    final long dy = py - originPointY;

    for (int i = 0; i < selectedVisualElements.length; i++)
    {
      final Element element = selectedVisualElements[i];
      if (element instanceof RootLevelBand)
      {
        continue;
      }
      final ElementStyleSheet styleSheet = element.getStyle();
      final double elementMinHeight = styleSheet.getDoubleStyleProperty(ElementStyleKeys.MIN_HEIGHT, 0);

      // this is where I want the element on a global scale...
      final long targetheight = elementHeight[i] + dy;

      final CachedLayoutData data = ModelUtility.getCachedLayoutData(element);
      final long elementY = data.getY();
      final long targetY2 = elementY + targetheight;

      if (elementMinHeight >= 0)
      {
        // absolute position; resolving is easy here
        final long snapPosition = verticalSnapModel.getNearestSnapPosition(targetY2, element.getObjectID());
        if (Math.abs(snapPosition - targetY2) > snapThreshold)
        {
          final long localHeight = Math.max(0, targetY2 - elementY);
          final float position = (float) StrictGeomUtility.toExternalValue(localHeight);
          styleSheet.setStyleProperty(ElementStyleKeys.MIN_HEIGHT, new Float(position));
        }
        else
        {
          final long localHeight = Math.max(0, snapPosition - elementY);
          final float position = (float) StrictGeomUtility.toExternalValue(localHeight);
          styleSheet.setStyleProperty(ElementStyleKeys.MIN_HEIGHT, new Float(position));
        }
      }
      else
      {

        final Element parent = element.getParentSection();
        final CachedLayoutData parentData = ModelUtility.getCachedLayoutData(parent);
        final long parentBase;
        if (isCanvasElement(parent))
        {
          parentBase = parentData.getHeight();
        }
        else
        {
          parentBase = parentData.getWidth();
        }
        if (parentBase > 0)
        {
          // relative position; resolve the percentage against the height of the parent.
          final long snapPosition = verticalSnapModel.getNearestSnapPosition(targetY2, element.getObjectID());
          if (Math.abs(snapPosition - targetY2) > snapThreshold)
          {
            final long localHeight = Math.max(0, targetY2 - elementY);
            // strict geometry: all values are multiplied by 1000
            // percentages in the engine are represented by floats betwen 0 and 100.
View Full Code Here

Examples of org.pentaho.reporting.designer.core.editor.report.snapping.SnapPositionsModel

    snapThreshold = WorkspaceSettings.getInstance().getSnapThreshold();
  }

  public void update(final Point2D normalizedPoint, final double zoomFactor)
  {
    final SnapPositionsModel horizontalSnapModel = getHorizontalSnapModel();
    final SnapPositionsModel verticalSnapModel = getVerticalSnapModel();
    final Element[] selectedVisualElements = getSelectedVisualElements();
    final long originPointX = getOriginPointX();
    final long originPointY = getOriginPointY();
    final long[] elementXCoords = getElementX();
    final long[] elementYCoords = getElementY();
    final long[] elementWidth = getElementWidth();
    final long[] elementHeight = getElementHeight();

    final long px = StrictGeomUtility.toInternalValue(normalizedPoint.getX());
    final long py = StrictGeomUtility.toInternalValue(normalizedPoint.getY());

    final long dx = px - originPointX;
    final long dy = py - originPointY;

    for (int i = 0; i < selectedVisualElements.length; i++)
    {
      final Element element = selectedVisualElements[i];
      if (element instanceof RootLevelBand)
      {
        continue;
      }
      final ElementStyleSheet styleSheet = element.getStyle();
      final double elementX = styleSheet.getDoubleStyleProperty(ElementStyleKeys.POS_X, 0);
      final double elementY = styleSheet.getDoubleStyleProperty(ElementStyleKeys.POS_Y, 0);

      final Element parent = element.getParentSection();
      if (parent == null)
      {
        throw new IllegalStateException("Parent has been removed, but the drag operation was not finished: " + element);
      }
      final CachedLayoutData data = ModelUtility.getCachedLayoutData(parent);
      final long layoutedParentX = data.getX() + data.getPaddingX();
      final long layoutedParentY = data.getY() + data.getPaddingY();

      // this is where I want the element on a global scale...
      final long targetPositionX = elementXCoords[i] + dx;
      final long targetPositionY = elementYCoords[i] + dy;

      if (elementX >= 0)
      {
        // absolute position; resolving is easy here
        final long snapPosition = horizontalSnapModel.getNearestSnapPosition
            (targetPositionX, element.getObjectID());
        if (Math.abs(snapPosition - targetPositionX) > snapThreshold)
        {
          final long targetPositionX2 = targetPositionX + elementWidth[i];
          final long snapPosition2 = horizontalSnapModel.getNearestSnapPosition
              (targetPositionX2, element.getObjectID());
          if (Math.abs(snapPosition2 - targetPositionX2) < snapThreshold)
          {
            // snapping to the right border..
            final long snapX = snapPosition2 - elementWidth[i];
            final long localXPosition = Math.max(0, snapX - layoutedParentX);
            final float position = (float) StrictGeomUtility.toExternalValue(localXPosition);
            styleSheet.setStyleProperty(ElementStyleKeys.POS_X, new Float(position));
          }
          else
          {
            // not snapping ...
            final long localXPosition = Math.max(0, targetPositionX - layoutedParentX);
            final float position = (float) StrictGeomUtility.toExternalValue(localXPosition);
            styleSheet.setStyleProperty(ElementStyleKeys.POS_X, new Float(position));
          }
        }
        else
        {
          // snapping to the left border..
          final long localXPosition = Math.max(0, snapPosition - layoutedParentX);
          final float position = (float) StrictGeomUtility.toExternalValue(localXPosition);
          styleSheet.setStyleProperty(ElementStyleKeys.POS_X, new Float(position));
        }
      }
      else
      {
        final long parentBase = data.getWidth();
        if (parentBase > 0)
        {
          // relative position; resolve the percentage against the width of the parent.
          final long snapPosition = horizontalSnapModel.getNearestSnapPosition(targetPositionX,
              element.getObjectID());
          if (Math.abs(snapPosition - targetPositionX) > snapThreshold)
          {
            final long targetPositionX2 = targetPositionX + elementWidth[i];
            final long snapPosition2 = horizontalSnapModel.getNearestSnapPosition(targetPositionX2,
                element.getObjectID());
            if (Math.abs(snapPosition2 - targetPositionX2) < snapThreshold)
            {
              // snapping to the right
              final long snapX = snapPosition2 - elementWidth[i];
              final long localXPosition = Math.max(0, snapX - layoutedParentX);
              final long percentage = StrictGeomUtility.toInternalValue(localXPosition * 100 / parentBase);
              styleSheet.setStyleProperty(ElementStyleKeys.POS_X,
                  new Float(StrictGeomUtility.toExternalValue(-percentage)));
            }
            else
            {
              // not snapping
              final long localXPosition = Math.max(0, targetPositionX - layoutedParentX);
              // strict geometry: all values are multiplied by 1000
              // percentages in the engine are represented by floats betwen 0 and 100.
              final long percentage = StrictGeomUtility.toInternalValue(localXPosition * 100 / parentBase);
              styleSheet.setStyleProperty(ElementStyleKeys.POS_X,
                  new Float(StrictGeomUtility.toExternalValue(-percentage)));
            }
          }
          else
          {
            // snapping to the left
            final long localXPosition = Math.max(0, snapPosition - layoutedParentX);
            // strict geometry: all values are multiplied by 1000
            // percentages in the engine are represented by floats betwen 0 and 100.
            final long percentage = StrictGeomUtility.toInternalValue(localXPosition * 100 / parentBase);
            styleSheet.setStyleProperty(ElementStyleKeys.POS_X,
                new Float(StrictGeomUtility.toExternalValue(-percentage)));
          }
        }
      }

      if (elementY >= 0)
      {
        // absolute position; resolving is easy here
        final long snapPosition = verticalSnapModel.getNearestSnapPosition(targetPositionY, element.getObjectID());
        if (Math.abs(snapPosition - targetPositionY) > snapThreshold)
        {
          final long targetPositionY2 = targetPositionY + elementHeight[i];
          final long snapPosition2 = horizontalSnapModel.getNearestSnapPosition(targetPositionY2,
              element.getObjectID());
          if (Math.abs(snapPosition2 - targetPositionY2) < snapThreshold)
          {
            // snap to the bottom
            final long snapY = snapPosition2 - elementHeight[i];
            final long localYPosition = Math.max(0, snapY - layoutedParentY);
            final float position = (float) StrictGeomUtility.toExternalValue(localYPosition);
            styleSheet.setStyleProperty(ElementStyleKeys.POS_Y, new Float(position));
          }
          else
          {
            // not snapping
            final long localYPosition = Math.max(0, targetPositionY - layoutedParentY);
            final float position = (float) StrictGeomUtility.toExternalValue(localYPosition);
            styleSheet.setStyleProperty(ElementStyleKeys.POS_Y, new Float(position));
          }
        }
        else
        {
          // snap to the top
          final long localYPosition = Math.max(0, snapPosition - layoutedParentY);
          final float position = (float) StrictGeomUtility.toExternalValue(localYPosition);
          styleSheet.setStyleProperty(ElementStyleKeys.POS_Y, new Float(position));
        }
      }
      else
      {

        final long parentBase;
        if (isCanvasElement(parent))
        {
          parentBase = data.getHeight();
        }
        else
        {
          parentBase = data.getWidth();
        }
        if (parentBase > 0)
        {
          // relative position; resolve the percentage against the height of the parent.
          final long snapPosition = verticalSnapModel.getNearestSnapPosition(targetPositionY, element.getObjectID());
          if (Math.abs(snapPosition - targetPositionY) > snapThreshold)
          {
            final long targetPositionY2 = targetPositionY + elementHeight[i];
            final long snapPosition2 = horizontalSnapModel.getNearestSnapPosition(targetPositionY2,
                element.getObjectID());
View Full Code Here

Examples of org.pentaho.reporting.designer.core.editor.report.snapping.SnapPositionsModel

    snapThreshold = WorkspaceSettings.getInstance().getSnapThreshold();
  }

  public void update(final Point2D normalizedPoint, final double zoomFactor)
  {
    final SnapPositionsModel horizontalSnapModel = getHorizontalSnapModel();
    final Element[] selectedVisualElements = getSelectedVisualElements();
    final long originPointX = getOriginPointX();
    final long[] elementWidth = getElementWidth();
    final long px = StrictGeomUtility.toInternalValue(normalizedPoint.getX());
    final long dx = px - originPointX;

    for (int i = 0; i < selectedVisualElements.length; i++)
    {
      final Element element = selectedVisualElements[i];
      if (element instanceof RootLevelBand)
      {
        continue;
      }
      final ElementStyleSheet styleSheet = element.getStyle();
      final double elementMinWidth = styleSheet.getDoubleStyleProperty(ElementStyleKeys.MIN_WIDTH, 0);

      // this is where I want the element on a global scale...
      final long targetWidth = elementWidth[i] + dx;
      final CachedLayoutData data = ModelUtility.getCachedLayoutData(element);
      final long elementX = data.getX();
      final long targetX2 = elementX + targetWidth;

      if (elementMinWidth >= 0)
      {
        // absolute position; resolving is easy here
        final long snapPosition = horizontalSnapModel.getNearestSnapPosition(targetX2, element.getObjectID());
        if (Math.abs(snapPosition - targetX2) > snapThreshold)
        {
          final long localWidth = Math.max(0, targetX2 - elementX);
          final float position = (float) StrictGeomUtility.toExternalValue(localWidth);
          styleSheet.setStyleProperty(ElementStyleKeys.MIN_WIDTH, new Float(position));
        }
        else
        {
          final long localWidth = Math.max(0, snapPosition - elementX);
          final float position = (float) StrictGeomUtility.toExternalValue(localWidth);
          styleSheet.setStyleProperty(ElementStyleKeys.MIN_WIDTH, new Float(position));
        }
      }
      else
      {
        final Element parent = element.getParentSection();
        final CachedLayoutData parentData = ModelUtility.getCachedLayoutData(parent);

        final long parentBase = parentData.getWidth();
        if (parentBase > 0)
        {
          // relative position; resolve the percentage against the height of the parent.
          final long snapPosition = horizontalSnapModel.getNearestSnapPosition(targetX2, element.getObjectID());
          if (Math.abs(snapPosition - targetX2) > snapThreshold)
          {
            final long localWidth = Math.max(0, targetX2 - elementX);
            // strict geometry: all values are multiplied by 1000
            // percentages in the engine are represented by floats betwen 0 and 100.
View Full Code Here

Examples of org.pentaho.reporting.designer.core.editor.report.snapping.SnapPositionsModel

    snapThreshold = WorkspaceSettings.getInstance().getSnapThreshold();
  }

  public void update(final Point2D normalizedPoint, final double zoomFactor)
  {
    final SnapPositionsModel verticalSnapModel = getVerticalSnapModel();
    final Element[] selectedVisualElements = getSelectedVisualElements();
    final long originPointY = getOriginPointY();
    final long[] elementHeight = getElementHeight();
    final long[] elementY = getElementY();

    final long py = StrictGeomUtility.toInternalValue(normalizedPoint.getY());
    final long dy = py - originPointY;

    for (int i = 0; i < selectedVisualElements.length; i++)
    {
      final Element element = selectedVisualElements[i];
      if (element instanceof RootLevelBand)
      {
        continue;
      }
      final ElementStyleSheet styleSheet = element.getStyle();
      final double definedElementY = styleSheet.getDoubleStyleProperty(ElementStyleKeys.POS_Y, 0);

      // this is where I want the element on a global scale...
      final long targetPositionY = elementY[i] + dy;
      final Element parent = element.getParentSection();
      final CachedLayoutData parentData = ModelUtility.getCachedLayoutData(parent);
      final long layoutedParentY = parentData.getY();

      if (targetPositionY < layoutedParentY)
      {
        continue;
      }
      // this is what we used to apply to POS_Y
      final long computedPositionY;
      if (definedElementY >= 0)
      {
        // absolute position; resolving is easy here
        final long snapPosition = verticalSnapModel.getNearestSnapPosition(targetPositionY, element.getObjectID());
        if (Math.abs(snapPosition - targetPositionY) > snapThreshold)
        {
          computedPositionY = targetPositionY;
          final long localYPosition = Math.max(0, targetPositionY - layoutedParentY);
          final float position = (float) StrictGeomUtility.toExternalValue(localYPosition);
          styleSheet.setStyleProperty(ElementStyleKeys.POS_Y, new Float(position));
        }
        else
        {
          computedPositionY = snapPosition;
          final long localYPosition = Math.max(0, snapPosition - layoutedParentY);
          final float position = (float) StrictGeomUtility.toExternalValue(localYPosition);
          styleSheet.setStyleProperty(ElementStyleKeys.POS_Y, new Float(position));
        }
      }
      else
      {
        final long parentBase;
        if (isCanvasElement(parent))
        {
          parentBase = parentData.getHeight();
        }
        else
        {
          parentBase = parentData.getWidth();
        }
        if (parentBase > 0)
        {
          // relative position; resolve the percentage against the width of the parent.
          final long snapPosition = verticalSnapModel.getNearestSnapPosition(targetPositionY, element.getObjectID());
          if (Math.abs(snapPosition - targetPositionY) > snapThreshold)
          {
            computedPositionY = targetPositionY;
            final long localYPosition = Math.max(0, targetPositionY - layoutedParentY);
            // strict geometry: all values are multiplied by 1000
View Full Code Here

Examples of org.pentaho.reporting.designer.core.editor.report.snapping.SnapPositionsModel

    super(selectedVisualElements, originPoint, horizontalSnapModel, verticalSnapModel);
  }

  public void update(final Point2D normalizedPoint, final double zoomFactor)
  {
    final SnapPositionsModel horizontalSnapModel = getHorizontalSnapModel();
    final Element[] selectedVisualElements = getSelectedVisualElements();
    final long originPointX = getOriginPointX();
    final long[] elementWidth = getElementWidth();
    final long[] elementX = getElementX();

    final long px = StrictGeomUtility.toInternalValue(normalizedPoint.getX());
    final long dx = px - originPointX;

    for (int i = 0; i < selectedVisualElements.length; i++)
    {
      final Element element = selectedVisualElements[i];
      if (element instanceof RootLevelBand)
      {
        continue;
      }
      final ElementStyleSheet styleSheet = element.getStyle();
      final double definedElementX = styleSheet.getDoubleStyleProperty(ElementStyleKeys.POS_X, 0);

      // this is where I want the element on a global scale...
      final long targetPositionX = elementX[i] + dx;
      final Element parent = element.getParentSection();
      final CachedLayoutData parentData = ModelUtility.getCachedLayoutData(parent);
      final long layoutedParentX = parentData.getX();

      if (targetPositionX < layoutedParentX)
      {
        continue;
      }
      // this is what we used to apply to POS_X
      final long computedPositionX;
      if (definedElementX >= 0)
      {
        // absolute position; resolving is easy here
        final long snapPosition = horizontalSnapModel.getNearestSnapPosition(targetPositionX, element.getObjectID());
        if (Math.abs(snapPosition - targetPositionX) > SNAP_THRESHOLD)
        {
          computedPositionX = targetPositionX;
          final long localXPosition = Math.max(0, targetPositionX - layoutedParentX);
          final float position = (float) StrictGeomUtility.toExternalValue(localXPosition);
          styleSheet.setStyleProperty(ElementStyleKeys.POS_X, new Float(position));
        }
        else
        {
          computedPositionX = snapPosition;
          final long localXPosition = Math.max(0, snapPosition - layoutedParentX);
          final float position = (float) StrictGeomUtility.toExternalValue(localXPosition);
          styleSheet.setStyleProperty(ElementStyleKeys.POS_X, new Float(position));
        }
      }
      else
      {
        final long parentBase = parentData.getWidth();
        if (parentBase > 0)
        {
          // relative position; resolve the percentage against the width of the parent.
          final long snapPosition = horizontalSnapModel.getNearestSnapPosition(targetPositionX, element.getObjectID());
          if (Math.abs(snapPosition - targetPositionX) > SNAP_THRESHOLD)
          {
            computedPositionX = targetPositionX;
            final long localXPosition = Math.max(0, targetPositionX - layoutedParentX);
            // strict geometry: all values are multiplied by 1000
View Full Code Here

Examples of org.pentaho.reporting.designer.core.editor.report.snapping.SnapPositionsModel

    super(selectedVisualElements, originPoint, horizontalSnapModel, verticalSnapModel);
  }

  public void update(final Point2D normalizedPoint, final double zoomFactor)
  {
    final SnapPositionsModel verticalSnapModel = getVerticalSnapModel();
    final Element[] selectedVisualElements = getSelectedVisualElements();
    final long originPointY = getOriginPointY();
    final long[] elementHeight = getElementHeight();

    final long py = StrictGeomUtility.toInternalValue(normalizedPoint.getY());

    final long dy = py - originPointY;

    for (int i = 0; i < selectedVisualElements.length; i++)
    {
      final Element element = selectedVisualElements[i];
      if (element instanceof RootLevelBand)
      {
        continue;
      }
      final ElementStyleSheet styleSheet = element.getStyle();
      final double elementMinHeight = styleSheet.getDoubleStyleProperty(ElementStyleKeys.MIN_HEIGHT, 0);

      // this is where I want the element on a global scale...
      final long targetheight = elementHeight[i] + dy;

      final CachedLayoutData data = ModelUtility.getCachedLayoutData(element);
      final long elementY = data.getY();
      final long targetY2 = elementY + targetheight;

      if (elementMinHeight >= 0)
      {
        // absolute position; resolving is easy here
        final long snapPosition = verticalSnapModel.getNearestSnapPosition(targetY2, element.getObjectID());
        if (Math.abs(snapPosition - targetY2) > SNAP_THRESHOLD)
        {
          final long localHeight = Math.max(0, targetY2 - elementY);
          final float position = (float) StrictGeomUtility.toExternalValue(localHeight);
          styleSheet.setStyleProperty(ElementStyleKeys.MIN_HEIGHT, new Float(position));
        }
        else
        {
          final long localHeight = Math.max(0, snapPosition - elementY);
          final float position = (float) StrictGeomUtility.toExternalValue(localHeight);
          styleSheet.setStyleProperty(ElementStyleKeys.MIN_HEIGHT, new Float(position));
        }
      }
      else
      {

        final Element parent = element.getParentSection();
        final CachedLayoutData parentData = ModelUtility.getCachedLayoutData(parent);
        final long parentBase;
        if (isCanvasElement(parent))
        {
          parentBase = parentData.getHeight();
        }
        else
        {
          parentBase = parentData.getWidth();
        }
        if (parentBase > 0)
        {
          // relative position; resolve the percentage against the height of the parent.
          final long snapPosition = verticalSnapModel.getNearestSnapPosition(targetY2, element.getObjectID());
          if (Math.abs(snapPosition - targetY2) > SNAP_THRESHOLD)
          {
            final long localHeight = Math.max(0, targetY2 - elementY);
            // strict geometry: all values are multiplied by 1000
            // percentages in the engine are represented by floats betwen 0 and 100.
View Full Code Here

Examples of org.pentaho.reporting.designer.core.editor.report.snapping.SnapPositionsModel

    super(selectedVisualElements, originPoint, horizontalSnapModel, verticalSnapModel);
  }

  public void update(final Point2D normalizedPoint, final double zoomFactor)
  {
    final SnapPositionsModel horizontalSnapModel = getHorizontalSnapModel();
    final SnapPositionsModel verticalSnapModel = getVerticalSnapModel();
    final Element[] selectedVisualElements = getSelectedVisualElements();
    final long originPointX = getOriginPointX();
    final long originPointY = getOriginPointY();
    final long[] elementXCoords = getElementX();
    final long[] elementYCoords = getElementY();
    final long[] elementWidth = getElementWidth();
    final long[] elementHeight = getElementHeight();

    final long px = StrictGeomUtility.toInternalValue(normalizedPoint.getX());
    final long py = StrictGeomUtility.toInternalValue(normalizedPoint.getY());

    final long dx = px - originPointX;
    final long dy = py - originPointY;

    for (int i = 0; i < selectedVisualElements.length; i++)
    {
      final Element element = selectedVisualElements[i];
      if (element instanceof RootLevelBand)
      {
        continue;
      }
      final ElementStyleSheet styleSheet = element.getStyle();
      final double elementX = styleSheet.getDoubleStyleProperty(ElementStyleKeys.POS_X, 0);
      final double elementY = styleSheet.getDoubleStyleProperty(ElementStyleKeys.POS_Y, 0);

      final Element parent = element.getParentSection();
      if (parent == null)
      {
        throw new IllegalStateException("Parent has been removed, but the drag operation was not finished: " + element);
      }
      final CachedLayoutData data = ModelUtility.getCachedLayoutData(parent);
      final long layoutedParentX = data.getX() + data.getPaddingX();
      final long layoutedParentY = data.getY() + data.getPaddingY();

      // this is where I want the element on a global scale...
      final long targetPositionX = elementXCoords[i] + dx;
      final long targetPositionY = elementYCoords[i] + dy;

      if (elementX >= 0)
      {
        // absolute position; resolving is easy here
        final long snapPosition = horizontalSnapModel.getNearestSnapPosition
            (targetPositionX, element.getObjectID());
        if (Math.abs(snapPosition - targetPositionX) > SNAP_THRESHOLD)
        {
          final long targetPositionX2 = targetPositionX + elementWidth[i];
          final long snapPosition2 = horizontalSnapModel.getNearestSnapPosition
              (targetPositionX2, element.getObjectID());
          if (Math.abs(snapPosition2 - targetPositionX2) < SNAP_THRESHOLD)
          {
            // snapping to the right border..
            final long snapX = snapPosition2 - elementWidth[i];
            final long localXPosition = Math.max(0, snapX - layoutedParentX);
            final float position = (float) StrictGeomUtility.toExternalValue(localXPosition);
            styleSheet.setStyleProperty(ElementStyleKeys.POS_X, new Float(position));
          }
          else
          {
            // not snapping ...
            final long localXPosition = Math.max(0, targetPositionX - layoutedParentX);
            final float position = (float) StrictGeomUtility.toExternalValue(localXPosition);
            styleSheet.setStyleProperty(ElementStyleKeys.POS_X, new Float(position));
          }
        }
        else
        {
          // snapping to the left border..
          final long localXPosition = Math.max(0, snapPosition - layoutedParentX);
          final float position = (float) StrictGeomUtility.toExternalValue(localXPosition);
          styleSheet.setStyleProperty(ElementStyleKeys.POS_X, new Float(position));
        }
      }
      else
      {
        final long parentBase = data.getWidth();
        if (parentBase > 0)
        {
          // relative position; resolve the percentage against the width of the parent.
          final long snapPosition = horizontalSnapModel.getNearestSnapPosition(targetPositionX,
              element.getObjectID());
          if (Math.abs(snapPosition - targetPositionX) > SNAP_THRESHOLD)
          {
            final long targetPositionX2 = targetPositionX + elementWidth[i];
            final long snapPosition2 = horizontalSnapModel.getNearestSnapPosition(targetPositionX2,
                element.getObjectID());
            if (Math.abs(snapPosition2 - targetPositionX2) < SNAP_THRESHOLD)
            {
              // snapping to the right
              final long snapX = snapPosition2 - elementWidth[i];
              final long localXPosition = Math.max(0, snapX - layoutedParentX);
              final long percentage = localXPosition * (1000 * 100) / parentBase;
              styleSheet.setStyleProperty(ElementStyleKeys.POS_X,
                  new Float(StrictGeomUtility.toExternalValue(-percentage)));
            }
            else
            {
              // not snapping
              final long localXPosition = Math.max(0, targetPositionX - layoutedParentX);
              // strict geometry: all values are multiplied by 1000
              // percentages in the engine are represented by floats betwen 0 and 100.
              final long percentage = localXPosition * (1000 * 100) / parentBase;
              styleSheet.setStyleProperty(ElementStyleKeys.POS_X,
                  new Float(StrictGeomUtility.toExternalValue(-percentage)));
            }
          }
          else
          {
            // snapping to the left
            final long localXPosition = Math.max(0, snapPosition - layoutedParentX);
            // strict geometry: all values are multiplied by 1000
            // percentages in the engine are represented by floats betwen 0 and 100.
            final long percentage = localXPosition * (1000 * 100) / parentBase;
            styleSheet.setStyleProperty(ElementStyleKeys.POS_X,
                new Float(StrictGeomUtility.toExternalValue(-percentage)));
          }
        }
      }

      if (elementY >= 0)
      {
        // absolute position; resolving is easy here
        final long snapPosition = verticalSnapModel.getNearestSnapPosition(targetPositionY, element.getObjectID());
        if (Math.abs(snapPosition - targetPositionY) > SNAP_THRESHOLD)
        {
          final long targetPositionY2 = targetPositionY + elementHeight[i];
          final long snapPosition2 = horizontalSnapModel.getNearestSnapPosition(targetPositionY2,
              element.getObjectID());
          if (Math.abs(snapPosition2 - targetPositionY2) < SNAP_THRESHOLD)
          {
            // snap to the bottom
            final long snapY = snapPosition2 - elementHeight[i];
            final long localYPosition = Math.max(0, snapY - layoutedParentY);
            final float position = (float) StrictGeomUtility.toExternalValue(localYPosition);
            styleSheet.setStyleProperty(ElementStyleKeys.POS_Y, new Float(position));
          }
          else
          {
            // not snapping
            final long localYPosition = Math.max(0, targetPositionY - layoutedParentY);
            final float position = (float) StrictGeomUtility.toExternalValue(localYPosition);
            styleSheet.setStyleProperty(ElementStyleKeys.POS_Y, new Float(position));
          }
        }
        else
        {
          // snap to the top
          final long localYPosition = Math.max(0, snapPosition - layoutedParentY);
          final float position = (float) StrictGeomUtility.toExternalValue(localYPosition);
          styleSheet.setStyleProperty(ElementStyleKeys.POS_Y, new Float(position));
        }
      }
      else
      {

        final long parentBase;
        if (isCanvasElement(parent))
        {
          parentBase = data.getHeight();
        }
        else
        {
          parentBase = data.getWidth();
        }
        if (parentBase > 0)
        {
          // relative position; resolve the percentage against the height of the parent.
          final long snapPosition = verticalSnapModel.getNearestSnapPosition(targetPositionY, element.getObjectID());
          if (Math.abs(snapPosition - targetPositionY) > SNAP_THRESHOLD)
          {
            final long targetPositionY2 = targetPositionY + elementHeight[i];
            final long snapPosition2 = horizontalSnapModel.getNearestSnapPosition(targetPositionY2,
                element.getObjectID());
View Full Code Here

Examples of org.pentaho.reporting.designer.core.editor.report.snapping.SnapPositionsModel

    super(selectedVisualElements, originPoint, horizontalSnapModel, verticalSnapModel);
  }

  public void update(final Point2D normalizedPoint, final double zoomFactor)
  {
    final SnapPositionsModel horizontalSnapModel = getHorizontalSnapModel();
    final Element[] selectedVisualElements = getSelectedVisualElements();
    final long originPointX = getOriginPointX();
    final long[] elementWidth = getElementWidth();
    final long px = StrictGeomUtility.toInternalValue(normalizedPoint.getX());
    final long dx = px - originPointX;

    for (int i = 0; i < selectedVisualElements.length; i++)
    {
      final Element element = selectedVisualElements[i];
      if (element instanceof RootLevelBand)
      {
        continue;
      }
      final ElementStyleSheet styleSheet = element.getStyle();
      final double elementMinWidth = styleSheet.getDoubleStyleProperty(ElementStyleKeys.MIN_WIDTH, 0);

      // this is where I want the element on a global scale...
      final long targetWidth = elementWidth[i] + dx;
      final CachedLayoutData data = ModelUtility.getCachedLayoutData(element);
      final long elementX = data.getX();
      final long targetX2 = elementX + targetWidth;

      if (elementMinWidth >= 0)
      {
        // absolute position; resolving is easy here
        final long snapPosition = horizontalSnapModel.getNearestSnapPosition(targetX2, element.getObjectID());
        if (Math.abs(snapPosition - targetX2) > SNAP_THRESHOLD)
        {
          final long localWidth = Math.max(0, targetX2 - elementX);
          final float position = (float) StrictGeomUtility.toExternalValue(localWidth);
          styleSheet.setStyleProperty(ElementStyleKeys.MIN_WIDTH, new Float(position));
        }
        else
        {
          final long localWidth = Math.max(0, snapPosition - elementX);
          final float position = (float) StrictGeomUtility.toExternalValue(localWidth);
          styleSheet.setStyleProperty(ElementStyleKeys.MIN_WIDTH, new Float(position));
        }
      }
      else
      {
        final Element parent = element.getParentSection();
        final CachedLayoutData parentData = ModelUtility.getCachedLayoutData(parent);

        final long parentBase = parentData.getWidth();
        if (parentBase > 0)
        {
          // relative position; resolve the percentage against the height of the parent.
          final long snapPosition = horizontalSnapModel.getNearestSnapPosition(targetX2, element.getObjectID());
          if (Math.abs(snapPosition - targetX2) > SNAP_THRESHOLD)
          {
            final long localWidth = Math.max(0, targetX2 - elementX);
            // strict geometry: all values are multiplied by 1000
            // percentages in the engine are represented by floats betwen 0 and 100.
View Full Code Here

Examples of org.pentaho.reporting.designer.core.editor.report.snapping.SnapPositionsModel

    super(selectedVisualElements, originPoint, horizontalSnapModel, verticalSnapModel);
  }

  public void update(final Point2D normalizedPoint, final double zoomFactor)
  {
    final SnapPositionsModel verticalSnapModel = getVerticalSnapModel();
    final Element[] selectedVisualElements = getSelectedVisualElements();
    final long originPointY = getOriginPointY();
    final long[] elementHeight = getElementHeight();
    final long[] elementY = getElementY();

    final long py = StrictGeomUtility.toInternalValue(normalizedPoint.getY());
    final long dy = py - originPointY;

    for (int i = 0; i < selectedVisualElements.length; i++)
    {
      final Element element = selectedVisualElements[i];
      if (element instanceof RootLevelBand)
      {
        continue;
      }
      final ElementStyleSheet styleSheet = element.getStyle();
      final double definedElementY = styleSheet.getDoubleStyleProperty(ElementStyleKeys.POS_Y, 0);

      // this is where I want the element on a global scale...
      final long targetPositionY = elementY[i] + dy;
      final Element parent = element.getParentSection();
      final CachedLayoutData parentData = ModelUtility.getCachedLayoutData(parent);
      final long layoutedParentY = parentData.getY();

      if (targetPositionY < layoutedParentY)
      {
        continue;
      }
      // this is what we used to apply to POS_Y
      final long computedPositionY;
      if (definedElementY >= 0)
      {
        // absolute position; resolving is easy here
        final long snapPosition = verticalSnapModel.getNearestSnapPosition(targetPositionY, element.getObjectID());
        if (Math.abs(snapPosition - targetPositionY) > SNAP_THRESHOLD)
        {
          computedPositionY = targetPositionY;
          final long localYPosition = Math.max(0, targetPositionY - layoutedParentY);
          final float position = (float) StrictGeomUtility.toExternalValue(localYPosition);
          styleSheet.setStyleProperty(ElementStyleKeys.POS_Y, new Float(position));
        }
        else
        {
          computedPositionY = snapPosition;
          final long localYPosition = Math.max(0, snapPosition - layoutedParentY);
          final float position = (float) StrictGeomUtility.toExternalValue(localYPosition);
          styleSheet.setStyleProperty(ElementStyleKeys.POS_Y, new Float(position));
        }
      }
      else
      {
        final long parentBase;
        if (isCanvasElement(parent))
        {
          parentBase = parentData.getHeight();
        }
        else
        {
          parentBase = parentData.getWidth();
        }
        if (parentBase > 0)
        {
          // relative position; resolve the percentage against the width of the parent.
          final long snapPosition = verticalSnapModel.getNearestSnapPosition(targetPositionY, element.getObjectID());
          if (Math.abs(snapPosition - targetPositionY) > SNAP_THRESHOLD)
          {
            computedPositionY = targetPositionY;
            final long localYPosition = Math.max(0, targetPositionY - layoutedParentY);
            // strict geometry: all values are multiplied by 1000
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.