package edu.purdue.pivot.skwiki.client.sketch;
import gwt.g2d.shared.Color;
import java.util.ArrayList;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.mogaleaf.client.common.widgets.ColorHandler;
import com.mogaleaf.client.common.widgets.SimpleColorPicker;
import com.smartgwt.client.types.HeaderControls;
import com.smartgwt.client.widgets.HeaderControl;
import com.smartgwt.client.widgets.ImgButton;
import com.smartgwt.client.widgets.Slider;
import com.smartgwt.client.widgets.events.CloseClickEvent;
import com.smartgwt.client.widgets.events.ValueChangedEvent;
import com.smartgwt.client.widgets.events.ValueChangedHandler;
public class CanvasToolbar extends Composite {
private EventHandler handler = new EventHandler();
// private TouchPad canvas;
private ImgButton color;
private ImgButton strokeSize;
private ImgButton eraser;
private ImgButton undo;
private ImgButton redo;
private ImgButton clear;
private ImgButton resize;
static CanvasToolbar toolbarInstance = null;
public ArrayList<TouchPad> touchpads = new ArrayList<TouchPad>();
com.smartgwt.client.widgets.Window colorWin = new com.smartgwt.client.widgets.Window();
com.smartgwt.client.widgets.Window sliderWin = new com.smartgwt.client.widgets.Window();
/* slider for strokeSize */
Slider hSlider = new Slider("Stroke Size");
HorizontalPanel sliderPanel = new HorizontalPanel();
// public CanvasToolbar(TouchPad canvas) {
// FlexTable basePanel = new FlexTable();
// initWidget(basePanel);
// this.canvas = canvas;
//
// basePanel.setWidget(0, 0, color = createImgButton("color.png"));
// basePanel.setWidget(1, 0,
// strokeSize = createImgButton("strokeSize.png"));
// basePanel.setWidget(2, 0, eraser = createImgButton("eraser.png"));
// basePanel.setWidget(3, 0, undo = createImgButton("undo.png"));
// basePanel.setWidget(4, 0, redo = createImgButton("redo.png"));
// }
public CanvasToolbar() {
FlexTable basePanel = new FlexTable();
initWidget(basePanel);
basePanel.setWidget(0, 0, color = createImgButton("color.png"));
basePanel.setWidget(1, 0,
strokeSize = createImgButton("strokeSize.png"));
basePanel.setWidget(2, 0, eraser = createImgButton("eraser.png"));
basePanel.setWidget(3, 0, undo = createImgButton("undo.png"));
basePanel.setWidget(4, 0, redo = createImgButton("redo.png"));
/* slider for the stroke size */
hSlider.setVertical(false);
hSlider.setMinValue(1);
hSlider.setMaxValue(50);
hSlider.setWidth(500);
hSlider.setNumValues(50);
hSlider.setValue(2);
hSlider.addValueChangedHandler(new ValueChangedHandler() {
@Override
public void onValueChanged(ValueChangedEvent event) {
int strokeSize1 = event.getValue();
for (int i = 0; i < touchpads.size(); i++) {
touchpads.get(i).changeStrokeSize(strokeSize1);
}
}
});
sliderPanel.add(hSlider);
sliderWin.setTitle("Stroke Size");
sliderWin.setShowMinimizeButton(true);
HeaderControl close = new HeaderControl(HeaderControl.CLOSE,
new com.smartgwt.client.widgets.events.ClickHandler() {
@Override
public void onClick(
com.smartgwt.client.widgets.events.ClickEvent event) {
sliderWin.hide();
}
});
close.setWidth(25);
close.setHeight(25);
sliderWin.setHeaderControls(HeaderControls.HEADER_LABEL, close);
sliderWin.setCanDragReposition(true);
sliderWin.setCanDragResize(true);
sliderWin.addItem(sliderPanel);
sliderWin.setAutoSize(true);
sliderWin.setCanDragReposition(true);
sliderWin.setCanDragResize(true);
/* settings window for color palette */
colorWin.setTitle("Color Palette");
final SimpleColorPicker picker = new SimpleColorPicker();
picker.addListner(new ColorHandler() {
@Override
public void newColorSelected(String color) {
color = color.replace("#", "");
edu.purdue.pivot.skwiki.client.sketch.colorpicker.Color tempColor = new edu.purdue.pivot.skwiki.client.sketch.colorpicker.Color();
try {
tempColor.setHex(color);
} catch (Exception e) {
e.printStackTrace();
}
Color currentColor = new Color(tempColor.getRed(), tempColor
.getGreen(), tempColor.getBlue());
for (int i = 0; i < touchpads.size(); i++) {
touchpads.get(i).changeColor(currentColor);
}
}
});
HeaderControl closeColorWin = new HeaderControl(HeaderControl.CLOSE,
new com.smartgwt.client.widgets.events.ClickHandler() {
@Override
public void onClick(
com.smartgwt.client.widgets.events.ClickEvent event) {
colorWin.hide();
}
});
closeColorWin.setWidth(25);
closeColorWin.setHeight(25);
colorWin.setHeaderControls(HeaderControls.HEADER_LABEL, closeColorWin);
picker.setHeight("250px");
picker.setWidth("160px");
colorWin.addItem(new SimplePanel(picker));
colorWin.setCanDragReposition(true);
colorWin.setCanDragResize(true);
colorWin.setAutoSize(true);
colorWin.setCanDragReposition(true);
colorWin.setCanDragResize(true);
}
public static CanvasToolbar getInstance() {
if (toolbarInstance == null) {
toolbarInstance = new CanvasToolbar();
}
return toolbarInstance;
}
public void addTouchPad(TouchPad canvas) {
touchpads.add(canvas);
}
private ImgButton createImgButton(String string) {
ImgButton button = new ImgButton();
button.setWidth(48);
button.setHeight(48);
button.setSrc(string);
button.setLabelHPad(5);
button.setLabelVPad(10);
button.addClickHandler(handler);
return button;
}
private class EventHandler implements
com.smartgwt.client.widgets.events.ClickHandler, KeyUpHandler {
@Override
public void onClick(
final com.smartgwt.client.widgets.events.ClickEvent event) {
Widget sender = (Widget) event.getSource();
if (sender == color) {
colorWin.show();
colorWin.setLeft(800);
colorWin.setTop(60);
colorWin.getHeader().setHeight(28);
} else if (sender == strokeSize) {
sliderWin.show();
sliderWin.setLeft(800 - sliderWin.getWidth() - 10);
sliderWin.setTop(500 - sliderWin.getHeight() - 20);
sliderWin.getHeader().setHeight(28);
} else if (sender == eraser) {
for (int i = 0; i < touchpads.size(); i++) {
touchpads.get(i).erase();
}
} else if (sender == undo) {
for (int i = 0; i < touchpads.size(); i++) {
if (touchpads.get(i).inFocus == true) {
touchpads.get(i).undo();
}
}
} else if (sender == redo) {
for (int i = 0; i < touchpads.size(); i++) {
if (touchpads.get(i).inFocus == true) {
touchpads.get(i).redo();
}
}
} else if (sender == clear) {
for (int i = 0; i < touchpads.size(); i++) {
if (touchpads.get(i).inFocus == true) {
touchpads.get(i).clear();
}
}
} else if (sender == resize) {
// canvas.resize();
}
}
@Override
public void onKeyUp(KeyUpEvent event) {
}
}
public void setFocus() {
for (int i = 0; i < touchpads.size(); i++) {
touchpads.get(i).inFocus = false;
}
}
}