Esempio n. 1
0
  /**
   * Builds the display list for a given display list index.
   *
   * @param gl Instance of GL2.
   * @param iGLDisplayListIndex Index of the display list.
   */
  private void buildDisplayList(final GL2 gl, int iGLDisplayListIndex) {
    if (pdRealRootElement != null && pdCurrentRootElement != null) {

      gl.glNewList(iGLDisplayListIndex, GL2.GL_COMPILE);

      float fXCenter = viewFrustum.getWidth() / 2;
      float fYCenter = viewFrustum.getHeight() / 2;

      gl.glLoadIdentity();

      upwardNavigationSlider.draw(
          gl,
          pickingManager,
          textureManager,
          uniqueID,
          iUpwardNavigationSliderID,
          iUpwardNavigationSliderButtonID,
          iUpwardNavigationSliderBodyID);

      float fCurrentSliderWidth = upwardNavigationSlider.getScaledWidth(gl);
      float fCurrentSliderHeight = upwardNavigationSlider.getScaledHeight(gl);

      controlBox.setRectangle(
          0, 0, fCurrentSliderWidth * 2, fCurrentSliderHeight + fCurrentSliderWidth);
      LabelManager.get().setControlBox(controlBox);
      drawingController.draw(fXCenter, fYCenter, gl, new GLU());

      gl.glEndList();
    } else {
      renderSymbol(gl, EIconTextures.RADIAL_SYMBOL.getFileName(), 0.5f);
    }
  }
Esempio n. 2
0
  @Override
  public void display(GL2 gl) {

    if (isDisplayListDirty && !bIsAnimationActive) {
      buildDisplayList(gl, displayListIndex);
      isDisplayListDirty = false;
    }

    if (pdRealRootElement != null && pdCurrentRootElement != null) {

      if (upwardNavigationSlider.handleDragging(gl, glMouseListener, pixelGLConverter)) {
        updateHierarchyAccordingToNavigationSlider();
      }
      // clipToFrustum(gl);
      //
      if (bIsAnimationActive) {
        float fXCenter = viewFrustum.getWidth() / 2;
        float fYCenter = viewFrustum.getHeight() / 2;

        gl.glLoadIdentity();
        upwardNavigationSlider.draw(
            gl,
            pickingManager,
            textureManager,
            uniqueID,
            iUpwardNavigationSliderID,
            iUpwardNavigationSliderButtonID,
            iUpwardNavigationSliderBodyID);

        float fCurrentSliderWidth = upwardNavigationSlider.getScaledWidth(gl);
        float fCurrentSliderHeight = upwardNavigationSlider.getScaledHeight(gl);

        controlBox.setRectangle(
            0, 0, fCurrentSliderWidth * 2, fCurrentSliderHeight + fCurrentSliderWidth);
        LabelManager.get().setControlBox(controlBox);
        drawingController.draw(fXCenter, fYCenter, gl, new GLU());
      } else gl.glCallList(displayListIndex);
    } else {
      renderSymbol(gl, EIconTextures.RADIAL_SYMBOL.getFileName(), 0.5f);
    }
    if (!lazyMode) checkForHits(gl);
  }
Esempio n. 3
0
  /**
   * Initializes a new hierarchy of partial discs according to a tree of cluster nodes and other
   * parameters.
   *
   * @param <E> Concrete Type of IHierarchyData
   * @param tree Tree of hierarchy data objects which is used to build the partial disc tree.
   * @param idType IDType of the hierarchy data objects.
   * @param dataEventManager Concrete DataEventManager that is responsible for handling and
   *     triggering data specific events.
   * @param alColorModes List of drawing strategies that shall be used as color modes.
   */
  public <E extends AHierarchyElement<E>> void initHierarchy(
      Tree<E> tree,
      E heRoot,
      ADataEventManager dataEventManager,
      ArrayList<EPDDrawingStrategyType> alColorModes) {

    hashPartialDiscs.clear();
    selectionManager = new SelectionManager(tree.getNodeIDType());
    partialDiscTree = new Tree<PartialDisc>();
    navigationHistory.reset();
    drawingController.setDrawingState(EDrawingStateType.DRAWING_STATE_FULL_HIERARCHY);
    LabelManager.get().clearLabels();
    drawingStrategyManager.init(pickingManager, uniqueID, alColorModes);

    PartialDisc pdRoot =
        new PartialDisc(
            partialDiscTree, heRoot, drawingStrategyManager.getDefaultDrawingStrategy());
    partialDiscTree.setRootNode(pdRoot);
    partialDiscTree.setLeafIDType(tree.getLeaveIDType());
    partialDiscTree.setNodeIDType(tree.getNodeIDType());
    hashPartialDiscs.put(heRoot.getID(), pdRoot);
    // selectionManager.initialAdd(heRoot.getID());
    buildTree(tree, heRoot, pdRoot);
    pdRoot.calculateLargestChildren();
    iMaxDisplayedHierarchyDepth = DISP_HIER_DEPTH_DEFAULT;

    this.dataEventManager = dataEventManager;
    this.dataEventManager.registerEventListeners();

    pdCurrentRootElement = pdRoot;
    pdCurrentSelectedElement = pdRoot;
    pdRealRootElement = pdRoot;

    navigationHistory.addNewHistoryEntry(
        drawingController.getCurrentDrawingState(),
        pdCurrentRootElement,
        pdCurrentSelectedElement,
        iMaxDisplayedHierarchyDepth);

    selectionManager.addToType(SelectionType.SELECTION, pdCurrentRootElement.getElementID());

    controlBox = new Rectangle(0, 0, 0.3f, 0.2f);
    upwardNavigationSlider =
        new OneWaySlider(
            new Vec2f(controlBox.getMinX() + 0.1f, controlBox.getMinY() + 0.1f),
            0.2f,
            1f,
            pdRealRootElement.getHierarchyLevel(),
            1,
            0,
            pdRealRootElement.getDepth() - 1);
    upwardNavigationSlider.setMinSize(80);
  }
Esempio n. 4
0
  /**
   * Updates the current root element according to the position of the upward navigation silder,
   * i.e. a parent of the current root element with the hierarchy level of the slider position will
   * be the new root element.
   */
  private void updateHierarchyAccordingToNavigationSlider() {
    PartialDisc pdNewRootElement =
        pdCurrentRootElement.getParentWithLevel(upwardNavigationSlider.getSelectedValue());
    if (pdNewRootElement != null) {
      pdCurrentRootElement = pdNewRootElement;

      bIsNewSelection = true;

      PartialDisc pdSelectedElement =
          drawingController.getCurrentDrawingState().getSelectedElement();
      if (pdSelectedElement != null) {
        pdCurrentSelectedElement = pdSelectedElement;
        pdSelectedElement.setCurrentStartAngle(0);
      }
      navigationHistory.addNewHistoryEntry(
          drawingController.getCurrentDrawingState(),
          pdCurrentRootElement,
          pdCurrentSelectedElement,
          iMaxDisplayedHierarchyDepth);
      setDisplayListDirty();

      setNewSelection(SelectionType.SELECTION, pdCurrentSelectedElement);
    }
  }
Esempio n. 5
0
 /**
  * Sets an element that will be displayed as root element.
  *
  * @param pdCurrentRootElement New element that will be displayed as root element.
  */
 public void setCurrentRootElement(PartialDisc pdCurrentRootElement) {
   this.pdCurrentRootElement = pdCurrentRootElement;
   upwardNavigationSlider.setSelectedValue(pdCurrentRootElement.getHierarchyLevel());
 }
Esempio n. 6
0
  @Override
  protected void handlePickingEvents(
      PickingType pickingType, PickingMode pickingMode, int externalID, Pick pick) {
    if (detailLevel == EDetailLevel.VERY_LOW) {
      return;
    }
    switch (pickingType) {
      case RAD_HIERARCHY_PDISC_SELECTION:
        PartialDisc pdPickedElement = hashPartialDiscs.get(externalID);

        switch (pickingMode) {
          case CLICKED:
            if (pdPickedElement != null) drawingController.handleSelection(pdPickedElement);
            break;

          case MOUSE_OVER:
            if (pdPickedElement != null) drawingController.handleMouseOver(pdPickedElement);
            break;

          case RIGHT_CLICKED:
            if (pdPickedElement != null) {
              // Prevent handling of non genetic data in context
              // menu
              if (!dataDomain.getDataDomainID().equals("org.caleydo.datadomain.genetic")) break;

              if (!pdPickedElement.hasChildren()) {
                AContextMenuItem menuItem =
                    new BookmarkMenuItem(
                        "Bookmark "
                            + dataDomain.getRecordLabel(dataDomain.getRecordIDType(), externalID),
                        dataDomain.getRecordIDType(),
                        externalID);
                getContextMenuCreator().addContextMenuItem(menuItem);
              } else {
                AContextMenuItem menuItem = new DetailOutsideItem(externalID);
                getContextMenuCreator().addContextMenuItem(menuItem);
              }

              break;
            }
            drawingController.handleAlternativeSelection(pdPickedElement);
            break;

          default:
            return;
        }
        break;

      case RAD_HIERARCHY_SLIDER_SELECTION:
        switch (pickingMode) {
          case CLICKED:
            if (externalID == iUpwardNavigationSliderID) {
              if (upwardNavigationSlider.handleSliderSelection(pickingType)) {
                updateHierarchyAccordingToNavigationSlider();
                setDisplayListDirty();
              }
            }
            break;

          default:
            return;
        }
        break;

      case RAD_HIERARCHY_SLIDER_BUTTON_SELECTION:
        switch (pickingMode) {
          case CLICKED:
            if (externalID == iUpwardNavigationSliderButtonID) {
              if (upwardNavigationSlider.handleSliderSelection(pickingType)) {
                updateHierarchyAccordingToNavigationSlider();
                setDisplayListDirty();
              }
            }
            break;

          default:
            return;
        }
        break;

      case RAD_HIERARCHY_SLIDER_BODY_SELECTION:
        switch (pickingMode) {
          case CLICKED:
            if (externalID == iUpwardNavigationSliderBodyID) {
              if (upwardNavigationSlider.handleSliderSelection(pickingType)) {
                updateHierarchyAccordingToNavigationSlider();
                setDisplayListDirty();
              }
            }
            break;

          default:
            return;
        }
        break;
      default:
        break;
    }
  }