Button.java
/*
* Copyright © 2012 Nokia Corporation. All rights reserved.
* Nokia and Nokia Connecting People are registered trademarks of Nokia Corporation.
* Oracle and Java are trademarks or registered trademarks of Oracle and/or its
* affiliates. Other product and company names mentioned herein may be trademarks
* or trade names of their respective owners.
* See LICENSE.TXT for license information.
*/
package com.nokia.example.paint.views.components;
import com.nokia.example.paint.helpers.ImageLoader;
import java.util.Vector;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.Sprite;
public abstract class Button {
protected Image pressed;
protected Image unpressed;
protected Sprite sprite;
protected int width;
protected int height;
protected int x = 0;
protected int y = 0;
protected boolean isPressed = false;
private boolean isSprite = false;
private Vector listeners;
public Button(String pressed_image_url, String unpressed_image_url) {
this();
setImages(pressed_image_url, unpressed_image_url);
}
public Button() {
//default constructor
listeners = new Vector();
}
protected void setImages(String pressed_image_url, String unpressed_image_url) {
ImageLoader loader = ImageLoader.getInstance();
pressed = loader.loadImage(pressed_image_url);
unpressed = loader.loadImage(unpressed_image_url);
width = pressed.getWidth();
height = pressed.getHeight();
isSprite = false;
}
protected void setSprite(String sprite_url, int spriteWidth, int spriteHeight) {
sprite = new Sprite(ImageLoader.getInstance().loadImage(sprite_url), spriteWidth, spriteHeight);
width = sprite.getWidth();
height = sprite.getHeight();
isSprite = true;
}
public Button(String sprite_url) {
setSprite(sprite_url, 46, 41);
listeners = new Vector();
}
public void addListener(ButtonListener listener) {
listeners.addElement(listener);
}
public abstract void onSelected();
public void render(Graphics g) {
if (isSprite) {
sprite.setPosition(x, y);
sprite.paint(g);
}
else {
if (isPressed) {
g.drawImage(pressed, x, y, Graphics.TOP | Graphics.LEFT);
}
else {
g.drawImage(unpressed, x, y, Graphics.TOP | Graphics.LEFT);
}
}
}
public void setPosition(int x, int y) {
this.x = x;
this.y = y;
}
/**
* Calls the onSelected method if x and y are inside the tool area.
* @param x
* @param y
*/
public void pressed(int x, int y) {
if (x >= this.x && x <= (this.x + width)) {
if (y >= this.y && y <= this.y + height) {
isPressed = true;
}
}
}
public void unpressed(int x, int y) {
isPressed = false;
if (x >= this.x && x <= (this.x + width)) {
if (y >= this.y && y <= this.y + height) {
onSelected();
int l = listeners.size();
for (int i = 0; i < l; i++) {
ButtonListener listener = (ButtonListener) listeners.elementAt(i);
listener.buttonPressed(this);
}
}
}
}
public int getWidth() {
return width;
}
public int getHeight() {
return height;
}
}