Package ModalGUI

Source Code of ModalGUI.GUIToggle

/*******************************************************************************
* This is part of SketchChair, an open-source tool for designing your own furniture.
*     www.sketchchair.cc
*    
*     Copyright (C) 2012, Diatom Studio ltd.  Contact: hello@diatom.cc
*
*     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 ModalGUI;

import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.lang.reflect.Field;

import cc.sketchchair.core.LOGGER;

import processing.core.PApplet;
import processing.core.PGraphics;
import processing.core.PImage;

public class GUIToggle extends GUIButton {

  PImage img_clicked;

  boolean linkedVal;
  public boolean justMade = true;
  private GUIComponentSet componentSet = null;

  public boolean isTab = false;

  public float cornerRad = 0;

  public GUIToggle(float x, float y, float w, float h) {
    super(x, y, w, h);
    this.setPos(x, y);
    this.setSize(w, h);
  }

  public GUIToggle(float x, float y, float w, float h,
      GUIComponentSet componentSet, ModalGUI c) {
    super(x, y, w, h, "", c);
    this.setComponentSet(componentSet);
    componentSet.add(this);
    this.setPos(x, y);
    this.setSize(w, h);
  }

  public GUIToggle(float x, float y, float w, float h, String label,
      GUIComponentSet componentSet, ModalGUI c) {
    super(x, y, w, h, "", c);
    this.componentSet = componentSet;
    componentSet.add(this);
    this.setPos(x, y);
    this.setSize(w, h);
    this.label = new GUILabel(this, label, c);

  }

  public GUIToggle(float x, float y, float w, float h, String img_up,
      ModalGUI c) {
    this(x, y, w, h, img_up, "", c);
  }

  public GUIToggle(float x, float y, float w, float h, String img_up_path,
      String img_down_path, ModalGUI c) {
    super(x, y, w, h, img_up_path, img_down_path, c);
    //this.setPos(x,y);
    //this.setSize(w,h);
    //this.setLabel(label);
    this.setController(c);

    PImage img_src = controller.applet.loadImage(img_up_path);

    img_up = controller.makeImgUp((int) w, (int) h, img_src);

    if (img_down_path != null && img_down_path != "")
      img_down = controller.makeImgDown((int) w, (int) h, controller.applet.loadImage(img_down_path));
    else
      img_down = controller.makeImgDown((int) w, (int) h, img_src);//ModalGUI.applet.loadImage(img_up_path);

    if (img_up != null)
      img_over = controller.makeImgOver((int) w, (int) h, img_src);//ModalGUI.applet.loadImage(img_up_path);

    this.setSize(this.img_up.width, this.img_up.height);

  }

  public GUIToggle(float x, float y, String img_up, ModalGUI c) {
    this(x, y, img_up, null, c);
  }

  public GUIToggle(float x, float y, String img_up_path,
      String img_down_path, ModalGUI c) {
    super(y, y, null, null, c);
    this.setController(c);
    this.setPos(x, y);
    //this.setSize(w,h);
    //this.setLabel(label);

    img_up = controller.applet.loadImage(img_up_path);

    if (img_down_path != null)
      img_down = controller.applet.loadImage(img_down_path);
    else
      img_down = controller.makeImgDown(img_up);//ModalGUI.applet.loadImage(img_up_path);

    if (img_up != null)
      img_over = controller.makeImgOver(img_up);//ModalGUI.applet.loadImage(img_up_path);

    this.setSize(this.img_up.width, this.img_up.height);

  }

  public void addLinkedVal(boolean link) {
    this.linkedVal = link;
    this.isDown = this.linkedVal;
  }

  void checkLinkedVal() {

    for (int i = 0; i < listeners.size(); i++) {
      GUIListener listener = listeners.get(i);

      if (listener == null || listener.methodName == "")
        return;
      Field field;
      try {

        field = listener.object.getClass()
            .getField(listener.methodName);
        Class classType = field.getType();

        if (classType.toString().equals("boolean"))
          this.isDown = field.getBoolean(listener.object);
      } catch (Exception e) {
        // TODO Auto-generated catch block
        //e.printStackTrace();
      }
    }

  }

  @Override
  public void mouseEvent(MouseEvent e) {
    //super.mouseEvent(e);

    if (!this.visible)
      return ;
   
    if(isMouseOver()){
      mouseOver = true;
      reRender();
    }else if(mouseOver){
      reRender();
      mouseOver = false;
    }
     
   
   
    if (this.destroy)
      return;

    if (justMade) {
      justMade = false;
      return;
    }
    //
    if (e.getID() == MouseEvent.MOUSE_PRESSED) {

      if (isMouseOver() && !wasClicked) {
        wasClicked = true;

      }
    } else if (e.getID() == MouseEvent.MOUSE_RELEASED && wasClicked
        && isMouseOver()) {

      fireEventNotification(this, "Clicked");
      wasClicked = false;
      this.toggle();

    }

  }

  @Override
  public void render(PGraphics g) {
   
   
   
    //Render on update optimization
    if(controller.renderOnUpdate && !reRender){return;}
    if(controller.renderOnUpdate)
    reRender = false; // only render once

   
   
    if (!this.visible)
      return;

    if (this.destroy)
      return;
   

    checkLinkedVal();

    g.strokeWeight(1);
    g.noFill();
    float sw = g.strokeWeight;

    //setup fill colours

    if (this.getFillColour() != -2)
      g.fill(this.getFillColour());
    if (this.getStrokeColour() != -2)
      g.stroke(this.getStrokeColour());

    if (this.isDown) {
      g.strokeWeight(2);

      if (this.getFillColourDown() != -2)
        g.fill(this.getFillColourDown());
      if (this.getStrokeColourDown() != -2)
        g.stroke(this.getStrokeColourDown());
    }

    if (isMouseOver() && !this.isDown) {
      g.strokeWeight(2);

      if (this.getFillColourOver() != -2)
        g.fill(this.getFillColourOver());
      if (this.getStrokeColourOver() != -2)
        g.stroke(this.getStrokeColourOver());
    }

   
   
    //no images set
    if (this.img_clicked == null && this.img_down == null || isTab) {
     
      if (isTab && this.isDown) {
       
        g.stroke(this.getStrokeColour());
        g.strokeWeight(1);
       
        g.rect(this.getX(), this.getY(), this.getWidth(),
            this.getHeight() + 3,cornerRad,cornerRad,0,0);
 
        g.noStroke();
        g.rect(this.getX(), this.getY()+this.getHeight()-2, this.getWidth(),
            8);
       
        if(this.img_down != null)
          g.image(this.img_down ,this.getX()+this.getWidth()-img_up.width-5,this.getY()+3);
           
      } else{
        g.rect(this.getX(), this.getY(), this.getWidth(),
            this.getHeight(),cornerRad,cornerRad,0,0);
       
        if(this.img_up != null)
          g.image(this.img_up ,this.getX()+this.getWidth()-img_up.width-5,this.getY()+3);
       
      }
      //  return ;
    }

    if(!isTab){
    //  boolean hasFocus = controller.getFocusStatusForComponent(this);
    if (wasClicked && this.img_clicked != null) {
      g.image(this.img_clicked, (int)this.getX(), (int)this.getY());
    } else {
      if (isMouseOver() && this.img_over != null && !this.isDown) {
        g.image(this.img_over, (int)this.getX(), (int)this.getY());

      } else {

        if (this.isDown) {
          if (this.img_down != null)
            g.image(this.img_down, (int)this.getX(), (int)this.getY());
          else
            g.rect(this.getX(), this.getY(), this.getWidth(),
                this.getHeight());
        } else {
          if (this.img_up != null)
            g.image(this.img_up, (int)this.getX(), (int)this.getY());
          else
            g.rect(this.getX(), this.getY(), this.getWidth(),
                this.getHeight());

        }

      }
    }
    }
   
    renderLabel(g);
    g.noStroke();
  }

  @Override
  public void renderTop(PGraphics g) {
    if (isMouseOver() && this.toolTip != null) {
      this.renderToolTip(g, controller.applet.mouseX,
          controller.applet.mouseY);
      if (toolTipAlpha < 255)
        this.toolTipAlpha += 20;
    } else {
      this.toolTipAlpha = -100;
    }
   
 
  }

  public void setComponentSet(GUIComponentSet componentSet) {
    this.componentSet = componentSet;
    componentSet.add(this);

  }

  public void setState(boolean newState) {
    this.isDown = newState;
  }

  void toggle() {
    if (this.componentSet != null)
      this.componentSet.setAllUp();

    this.isDown = !this.isDown;

    this.fireEventNotification(this.isDown);
    this.fireEventNotification("");

  }
 
  public void toggleDown() {
    if (this.componentSet != null)
      this.componentSet.setAllUp();

    this.isDown = true;

    this.fireEventNotification(this.isDown);
    this.fireEventNotification("");

  }

}
TOP

Related Classes of ModalGUI.GUIToggle

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.