Package org.mt4j.components.visibleComponents.widgets.progressBar

Source Code of org.mt4j.components.visibleComponents.widgets.progressBar.MTProgressBar

/***********************************************************************
* mt4j Copyright (c) 2008 - 2009, C.Ruff, Fraunhofer-Gesellschaft All rights reserved.
*   This program is free software: you can redistribute it and/or modify
*   it under the terms of the GNU General Public License as published by
*   the Free Software Foundation, either version 3 of the License, or
*   (at your option) any later version.
*
*   This program is distributed in the hope that it will be useful,
*   but WITHOUT ANY WARRANTY; without even the implied warranty of
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*   GNU General Public License for more details.
*
*   You should have received a copy of the GNU General Public License
*   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*
***********************************************************************/
package org.mt4j.components.visibleComponents.widgets.progressBar;

import javax.media.opengl.GL;

import org.mt4j.components.TransformSpace;
import org.mt4j.components.visibleComponents.shapes.MTRectangle;
import org.mt4j.components.visibleComponents.shapes.MTRoundRectangle;
import org.mt4j.input.inputProcessors.componentProcessors.dragProcessor.DragProcessor;
import org.mt4j.input.inputProcessors.componentProcessors.rotateProcessor.RotateProcessor;
import org.mt4j.input.inputProcessors.componentProcessors.scaleProcessor.ScaleProcessor;
import org.mt4j.input.inputProcessors.componentProcessors.tapProcessor.TapProcessor;
import org.mt4j.util.MT4jSettings;
import org.mt4j.util.MTColor;
import org.mt4j.util.math.Tools3D;
import org.mt4j.util.math.Vector3D;

import processing.core.PApplet;
import processing.core.PFont;
import processing.core.PGraphics;
import processing.opengl.PGraphicsOpenGL;

/**
* The Class MTProgressBar.
*
* @author Christopher Ruff
*/
public class MTProgressBar extends MTRoundRectangle {
 
  /** The progress info. */
  private IprogressInfoProvider progressInfo;
 
  /** The font. */
  private PFont font;
 
  /** The draw action text. */
  private boolean drawActionText;
 
  /** The pa. */
  private PApplet pa;
 
  /** The outer bar. */
  private MTRectangle outerBar;
 
  /** The inner bar. */
  private MTRectangle innerBar;
//  private PGraphics3D pgraphics3D;
 
  /** The c. */
  private Vector3D c;
 
  /** The b. */
  private Vector3D b;
 
  /** The zero. */
  private Vector3D zero = new Vector3D(0,0,0);
 
  /** The target width. */
  float targetWidth;
 
 
  /** The open gl. */
  private boolean openGl = MT4jSettings.getInstance().isOpenGlMode();
 
  /** The pgl. */
  private PGraphicsOpenGL pgl;
 
  /** The upper left. */
  private Vector3D upperLeft;
 
  /** The lower right. */
  private Vector3D lowerRight;
 
  /** The upper left projected. */
  private Vector3D upperLeftProjected;
 
  /** The lower right projected. */
  private Vector3D lowerRightProjected;
 
  /**
   * The Constructor.
   *
   * @param pApplet the applet
   * @param font the font
   */
  public MTProgressBar(PApplet pApplet, PFont font) {
    this(pApplet, null, font);
  }

  /**
   * The Constructor.
   *
   * @param pApplet the applet
   * @param progressInfo the progress info
   * @param font the font
   */
  public MTProgressBar(PApplet pApplet, IprogressInfoProvider progressInfo, PFont font) {
    super(0,0,0, MT4jSettings.getInstance().getWindowWidth()/(3.5f), 100, 15, 15, pApplet);
//    super(0,0,0, ConstantsAndSettings.getInstance().getScreenWidth(),  ConstantsAndSettings.getInstance().getScreenHeight(), 15, 15, pApplet);
   
    this.progressInfo = progressInfo;
    this.font = font;
    this.pa = pApplet;
//    this.pgraphics3D = (PGraphics3D)pApplet.g;
    if (openGl){
      this.pgl = ((PGraphicsOpenGL)pa.g);
    }
   
    this.setStrokeColor(new MTColor(0, 0, 0, 200));
    this.setFillColor(new MTColor(200, 200, 210, 200));
    this.setNoStroke(false);
    this.setDrawSmooth(true);
   
   
    this.setGestureAllowance(DragProcessor.class, false);
    this.setGestureAllowance(RotateProcessor.class, false);
    this.setGestureAllowance(ScaleProcessor.class, false);
    this.setGestureAllowance(TapProcessor.class, false);
   
    if (font == null)
      this.setDrawActionText(false);
    else
      this.setDrawActionText(true);
   
    b =  new Vector3D(this.getWidthXY(TransformSpace.RELATIVE_TO_PARENT)/2, this.getHeightXY(TransformSpace.RELATIVE_TO_PARENT)/2, 0);
   
    outerBar = new MTRectangle(0, 0, 0, 200, 30, pa);
    outerBar.setStrokeWeight(1);
//    outerBar.setNoStroke(true);
    outerBar.setStrokeColor(new MTColor(0, 0, 0, 255));
    outerBar.setFillColor(new MTColor(100, 100, 100, 200));
   
    outerBar.setGestureAllowance(DragProcessor.class, false);
    outerBar.setGestureAllowance(RotateProcessor.class, false);
    outerBar.setGestureAllowance(ScaleProcessor.class, false);
    outerBar.setGestureAllowance(TapProcessor.class, false);
   
    c = new Vector3D(b.x -  outerBar.getWidthXY(TransformSpace.RELATIVE_TO_PARENT)/2, b.y - outerBar.getHeightXY(TransformSpace.RELATIVE_TO_PARENT)/2, 0);
    outerBar.translate(c);
    outerBar.setName("MTProgressbar outer bar");
    this.addChild(outerBar);
   
    innerBar = new MTRectangle(0, 0, 0, 199, 29, pa);
    innerBar.setStrokeWeight(1);
    innerBar.setNoStroke(true);
    innerBar.setStrokeColor(new MTColor(255, 255, 255, 200));
    innerBar.setFillColor(new MTColor(250, 150, 150, 200));
   
    innerBar.setGestureAllowance(DragProcessor.class, false);
    innerBar.setGestureAllowance(RotateProcessor.class, false);
    innerBar.setGestureAllowance(ScaleProcessor.class, false);
   
    //Progress bar colors
    innerBar.getGeometryInfo().getVertices()[0].setRGBA(50, 50, 100, 200);
   
    innerBar.getGeometryInfo().getVertices()[1].setRGBA(50, 50, 250, 200);
    innerBar.getGeometryInfo().getVertices()[2].setRGBA(50, 50, 250, 200);
   
    innerBar.getGeometryInfo().getVertices()[3].setRGBA(50, 50, 100, 200);
    innerBar.getGeometryInfo().getVertices()[4].setRGBA(50, 50, 100, 200);
   
    innerBar.getGeometryInfo().updateVerticesColorBuffer();
    innerBar.translate(new Vector3D(0.5f, 0.5f, 0));
    innerBar.setName("MTProgressbar inner bar");
    outerBar.addChild(innerBar);
   
    targetWidth = innerBar.getWidthXY(TransformSpace.RELATIVE_TO_PARENT);
   
    this.innerBar.scale(1/targetWidth, 1, 1, zero, TransformSpace.LOCAL);
    this.innerBar.scale(1, 1, 1, zero, TransformSpace.LOCAL);
   
    this.translateGlobal(new Vector3D(
        MT4jSettings.getInstance().getWindowWidth()/2 - this.getWidthXY(TransformSpace.GLOBAL)/2,
        MT4jSettings.getInstance().getWindowHeight()/- this.getHeightXY(TransformSpace.GLOBAL)/2 ,
        0) );
   
   
    this.upperLeft = new Vector3D(0,0,0);
    this.lowerRight = new Vector3D(upperLeft.x + this.getWidthXY(TransformSpace.LOCAL), upperLeft.y + this.getHeightXY(TransformSpace.LOCAL), 0);
   
    this.upperLeftProjected    = new Vector3D(0,0,0);
    this.lowerRightProjected   = new Vector3D(0,0,0);
   
    this.setName("MTProgressbar");
   
    //Draw this component and its children above
    //everything previously drawn and avoid z-fighting with its children
    this.setDepthBufferDisabled(true);
  }
 
 
//  /* (non-Javadoc)
//   * @see com.jMT.components.MTBaseComponent#setCustomAndGlobalCam(util.camera.Icamera, util.camera.Icamera)
//   */
//  @Override
//  public void setCustomAndGlobalCam(Icamera globalCamera, Icamera customObjectCamera) {
//    super.setCustomAndGlobalCam(globalCamera, customObjectCamera);
//    innerBar.setCustomAndGlobalCam(this.getGlobalCam(), this.getCustomObjectCam());
//    outerBar.setCustomAndGlobalCam(this.getGlobalCam(), this.getCustomObjectCam());
//  }



  /* (non-Javadoc)
   * @see com.jMT.components.visibleComponents.shapes.MTPolygon#drawComponent()
   */
  @Override
  public void drawComponent(PGraphics g) {
    if (progressInfo == null){
      return;
    }
   
    if (progressInfo.isFinished()){
      this.setVisible(false);
    }
   
    //gl.scissor so text gezts clipped
    GL gl = null;
    if (openGl){
      gl= pgl.beginGL();
      gl = pgl.gl;
     
      gl.glEnable(GL.GL_SCISSOR_TEST);
     
      //Project upper Left corner
      upperLeftProjected = Tools3D.projectGL(gl, pgl.glu, upperLeft, upperLeftProjected);
      int scissorStartX = (int) upperLeftProjected.x -0;
      int scissorStartY = (int) upperLeftProjected.y -1;
     
      //Project lower right corner
      lowerRightProjected =  Tools3D.projectGL(gl, pgl.glu, lowerRight, lowerRightProjected);
      int scissorWidth =  (int)(lowerRightProjected.x - scissorStartX + 1);
      int scissorHeight = (int)(lowerRightProjected.y - scissorStartY + 1);
     
      //Convert scissor start y to be upper left screen origin (0,0) relative
      scissorStartY = MT4jSettings.getInstance().getWindowHeight() - scissorStartY - scissorHeight;
     
      gl.glScissor(scissorStartX, scissorStartY, scissorWidth, scissorHeight);
     
      pgl.endGL();
    }
   
    //Draw component
    super.drawComponent(g);
   
    //Draw text
    if (this.isDrawActionText()){
//      pa.pushMatrix();
      pa.textMode(PApplet.MODEL);
//      pa.textAlign(PApplet.CENTER);
      pa.textAlign(PApplet.LEFT);
      pa.textFont(font, 12);
      pa.fill(20);
      pa.noStroke();
     
//      pa.translate(b.x, b.y  - font.theight +2, 0);
     
      pa.text(this.getProgressInfoProvider().getCurrentAction(), /*b.x*/c.x, b.y  - 20 );
     
//      pa.text(this.getProgressInfoProvider().getCurrentAction(), this.getLocationX() , this.getLocationY() - rectHeight/2 - rectStrokeWeight - 7);
//      pa.popMatrix();
    }
   
   
    float barDrawLength = (this.targetWidth/100) * this.getProgressInfoProvider().getPercentageFinished();
//   
    float currentWidth = this.innerBar.getWidthXY(TransformSpace.GLOBAL);
    if (currentWidth != 0){
      if (barDrawLength == 0)
        barDrawLength = 1;
     
      this.innerBar.scale(1/currentWidth, 1, 1, zero, TransformSpace.LOCAL);
      this.innerBar.scale(barDrawLength, 1, 1, zero, TransformSpace.LOCAL);
    }
   
    if (this.isDrawActionText()){
//      pa.pushMatrix();
//      float fillText = ((int)this.getProgressInfoProvider().getPercentageFinished() > 50)? 250 : 20;
      float fillText = 0;
       
      pa.fill(fillText);
      pa.textFont(font, 10);
     
      pa.text((int)this.getProgressInfoProvider().getPercentageFinished() + "%", this.getWidthXY(TransformSpace.RELATIVE_TO_PARENT)/2, this.getHeightXY(TransformSpace.RELATIVE_TO_PARENT) /+ font.ascent()+ font.descent()  );
     
//      pa.text((int)this.getProgressInfoProvider().getPercentageFinished() + "%", this.getLocationX() , this.getLocationY() + font.theight/4);
//      pa.popMatrix();
    }
   
    if (openGl){
//      gl= pgl.beginGL();
      gl.glDisable(GL.GL_SCISSOR_TEST);
//      pgl.endGL();
    }
  }
 
 
 
  /**
   * Sets the progress info provider.
   *
   * @param provider the new progress info provider
   */
  public void setProgressInfoProvider(IprogressInfoProvider provider){
    this.progressInfo = provider;
  }
 
  /**
   * Gets the progress info provider.
   *
   * @return the progress info provider
   */
  public IprogressInfoProvider getProgressInfoProvider() {
    return progressInfo;
  }
 
  /**
   * Gets the font.
   *
   * @return the font
   */
  public PFont getFont() {
    return font;
  }

  /**
   * Sets the font.
   *
   * @param font the new font
   */
  public void setFont(PFont font) {
    this.font = font;
  }

 
  /**
   * Checks if is draw action text.
   *
   * @return true, if is draw action text
   */
  public boolean isDrawActionText() {
    return drawActionText;
  }

  /**
   * Sets the draw action text.
   *
   * @param drawActionText the new draw action text
   */
  public void setDrawActionText(boolean drawActionText) {
    this.drawActionText = drawActionText;
  }

}
TOP

Related Classes of org.mt4j.components.visibleComponents.widgets.progressBar.MTProgressBar

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.