/*******************************************************************************
* 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 javax.xml.bind.annotation.XmlElementDecl.GLOBAL;
import cc.sketchchair.sketch.LOGGER;
import processing.core.PApplet;
import processing.core.PConstants;
import processing.core.PGraphics;
import processing.core.PImage;
public class GUIButton extends GUIComponent {
PImage img_up = null;
PImage img_down = null;
PImage img_over = null;
String img_up_txt = null;
String img_down_txt = null;
PImage img_clicked;
//GUILabel label = null;
public GUIButton(float x, float y, float w, float h) {
// TODO Auto-generated constructor stub
}
public GUIButton(float x, float y, float w, float h, GUILabel labelButton,
ModalGUI c) {
this.setController(c);
this.setPos(x, y);
this.setSize(w, h);
this.label = labelButton;
}
public GUIButton(float x, float y, float w, float h, String label,
ModalGUI c) {
this.setController(c);
this.setPos(x, y);
this.setSize(w, h);
this.label = new GUILabel(this, label, this.controller);
this.label.layout = GUILabel.CENTRE_OF_COMPONENT;
//System.out.println("HERE"+this.label.labelStr);
}
public GUIButton(float x, float y, float w, float h, String img_up_path,
String img_down_path, ModalGUI c) {
this.setPos(x, y);
this.setController(c);
//this.setSize(w,h);
//this.setLabel(label);
if (img_up_path == null)
return;
PImage img_src = controller.applet.loadImage(img_up_path);
if (w == 0 || h == 0) {
w = img_src.width;
h = img_src.height;
img_up = img_src;
} else {
img_up = controller.makeImgUp((int) w, (int) h, img_src);
}
if (img_down_path != null && img_down_path != "")
img_down = controller.applet.loadImage(img_down_path);
else
img_down = controller.makeImgDown(w, 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 GUIButton(float x, float y, PImage img_up_in, PImage img_down_in,
PApplet applet, ModalGUI c) {
this.setPos(x, y);
this.setController(c);
//this.setSize(w,h);
//this.setLabel(label);
this.img_up = img_up_in;
if(img_down_in == null)
this.img_down = controller.makeImgOver(img_up.width, img_up.height, img_up_in);
else
this.img_down = img_down_in;
// img_up = applet.loadImage(img_up_path);
//if(img_down != null)
this.setSize(this.img_up.width, this.img_up.height);
}
public GUIButton(float x, float y, String img_up, ModalGUI c) {
this(x, y, img_up, null, c);
}
public GUIButton(float x, float y, String img_up_path,
String img_down_path, ModalGUI c) {
this(x, y, 0, 0, img_up_path, img_down_path, c);
}
public boolean isMouseOver() {
if (super.isMouseOver()) {
if (!controller.useAlphaMouseOver)
return true;
if (this.img_down != null) {
this.img_up.loadPixels();
int index = (int) (((controller.applet.mouseY - this.getY()) * this.img_up.width) + (controller.applet.mouseX - this
.getX()));
int c = 0;
if (index < this.img_up.width * this.img_up.height)
c = this.img_up.pixels[index];
if (controller.applet.alpha(c) == 255)
return true;
else
return false;
}
} else {
return false;
}
return false;
}
@Override
public void keyEvent(KeyEvent theKeyEvent) {
}
public void mouseEvent(MouseEvent e) {
if (!this.visible)
return ;
if (this.destroy)
return;
if (e.getID() == MouseEvent.MOUSE_PRESSED) {
if (isMouseOver())
wasClicked = true;
} else if (e.getID() == MouseEvent.MOUSE_RELEASED && wasClicked
&& isMouseOver()) {
fireEventNotification(this, "Clicked");
wasClicked = false;
}
}
@Override
public void render(PGraphics g) {
super.render(g);
if(controller.renderOnUpdate && !reRender){
return;
}
if(controller.renderOnUpdate)
reRender = false; // only render once
if (!this.visible)
return;
if (this.getFillColour() != -2)
g.fill(this.getFillColour());
if (this.getStrokeColour() != -2)
g.stroke(this.getStrokeColour());
if (this.isDown) {
if (this.getFillColourDown() != -2)
g.fill(this.getFillColourDown());
if (this.getStrokeColourDown() != -2)
g.stroke(this.getStrokeColourDown());
}
if (isMouseOver() && !this.isDown) {
if (this.getFillColourOver() != -2)
g.fill(this.getFillColourOver());
if (this.getStrokeColourOver() != -2)
g.stroke(this.getStrokeColourOver());
}
if (this.label != null && this.img_up == null) {
g.noFill();
if (wasClicked) {
} else {
if (isMouseOver()) {
g.strokeWeight(2);
} else {
g.strokeWeight(1);
}
}
g.rectMode(PConstants.CORNER);
g.rect(this.getX(), this.getY(), this.getWidth(), this.getHeight());
if (this.img_up == null) {
//label.align = GUILabel.CENTRE ;
//label.render(g,this.getX()+(this.getWidth()/2) , this.getY() + (this.getHeight()/2));
}
}
if (wasClicked && this.img_clicked != null) {
g.image(this.img_clicked, (int)this.getX(), (int)this.getY());
} else {
if (isMouseOver() && this.img_down != null) {
g.image(this.img_down, (int)this.getX(), (int)this.getY());
reRender();
} else if (isMouseOver() && this.img_down == null
&& this.img_up != null) {
g.image(this.img_up, (int)this.getX(), (int)this.getY());
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);
}
@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;
}
}
@Override
public void setup() {
// TODO Auto-generated method stub
}
}