package data;
import java.awt.*;
import java.util.List;
import bGUI.BGameCanvas;
/**
*
* @author Junichi Tsutsui
* @author Chidozie Nwobilor
*
*/
public class BPage {
private BPageModel pageModel;
protected boolean drawKnobs;
/**
* Default constructor for a page
* constructs a page model to store data.
*/
public BPage() {
pageModel = new BPageModel();
setDrawKnobs(true);
}
/**
* Constructs the page model with a provided width and height
* @param width
* @param height
*/
public BPage(int width, int height) {
pageModel = new BPageModel(width, height);
setDrawKnobs(true);
}
/**
* Constructs new page from inputted model. Sets drawknobs to false
*/
public BPage(BPageModel model){
setModel(model);
setDrawKnobs(false);
}
public void setModel(BPageModel model) {
this.pageModel = model;
}
/**
* Adds a provided shape to the Page
* @param shape
*/
public Rectangle addShape(BShape shape) {
pageModel.addShape(shape);
return null;
}
/**
* Removes a provided shape from the Page
* @param shape
*/
public void removeShape(BShape shape) {
pageModel.removeShape(shape);
}
/**
* Moves a provided shape to the front of the page
* @param shape
*/
public void moveToFront(BShape shape) {
pageModel.moveToFront(shape);
}
/**
* Moves a provided shape to the back of the page
* @param shape
*/
public void moveToBack(BShape shape) {
pageModel.moveToBack(shape);
}
/**
* Returns the name of the page
* @return
*/
public String getName() {
return pageModel.getName();
}
/**
* Sets the name of the page;
* @param name
*/
public void setName(String name) {
pageModel.setName(name);
}
/**
* Returns the bounds of the page as a Rectangle
* @return Rectangle
*/
public Rectangle getBounds() {
return pageModel.getBounds();
}
/**
* Sets the bounds of the page with a Rectangle
* @param newBounds
*/
public void setBounds(Rectangle newBounds) {
pageModel.setBounds(newBounds);
}
/**
* Returns the shapes on the page
* @return List<BShape>
*/
public List<BShape> getShapes() {
return pageModel.getShapes();
}
/**
* Returns the shape associated with the point. returns null otherwise
* @param pt
* @return
*/
public BShape getShape(Point pt) {
return pageModel.getShape(pt);
}
/**
* Draws a provided shape on the page
* @param g
* @param selected
*/
public void draw(Graphics g, BShape selected) {
BDataModel data = pageModel.getData();
if(data != null){
}
for(BShape shape: pageModel.getShapes()) {
if(!shape.getHidden()) {
shape.draw(g);
if(selected == (shape)&&drawKnobs) drawShapeWithKnobs(g, selected);
}
}
}
public void draw(Graphics g, BShape selected, boolean drawHidden) {
BDataModel data = pageModel.getData();
if(data != null){
}
for(BShape shape: pageModel.getShapes()) {
shape.draw(g);
if(selected == (shape)&&drawKnobs) drawShapeWithKnobs(g, selected);
}
}
/**
* Draws knobs on the selected shape
* @param g
* @param selected
*/
public void drawShapeWithKnobs(Graphics g, BShape selected) {
List<Point> knobs = selected.getKnobs();
for(Point p: knobs) {
g.setColor(Color.BLACK);
g.fillRect((int)p.getX()-BShape.KNOB_SIZE/2, (int)p.getY()-BShape.KNOB_SIZE/2,
BShape.KNOB_SIZE, BShape.KNOB_SIZE);
}
}
/**
* @param drawKnobs the drawKnobs to set
*/
public void setDrawKnobs(boolean drawKnobs) {
this.drawKnobs = drawKnobs;
}
public boolean contains(BShape selected) {
// TODO Auto-generated method stub
return pageModel.contains(selected);
}
public BPageModel getModel() {
return pageModel;
}
public void executeScript(String s, BShape selected, BShape droppedOn, BGameCanvas canvas) {
pageModel.executeScript(s, selected, droppedOn, canvas);
}
public BShape getDroppedOn(Point point, BShape selected) {
return pageModel.getDroppedOn(point, selected);
}
public void drawIsDroppable(Graphics g, BShape selected) {
for(BShape shape: pageModel.getShapes()) {
if(shape.canRecieve(selected)){
Rectangle r = shape.getBounds();
g.setColor(Color.GREEN);
g.drawRect(r.x, r.y, r.width, r.height);
}
}
}
public void removeCanvasAsListener(BGameCanvas gameCanvas) {
pageModel.removeCanvasAsListener(gameCanvas);
}
public void addListener(BModelListener l) {
pageModel.addListener(l);
}
public String getBackgroundName(){
return pageModel.getBackground();
}
public void setBackgroundName(String background){
pageModel.setBackground(background);
}
public BShape getShapeForEditor(Point pt) {
return pageModel.getShapeForEditor(pt);
}
}