/*
* Copyright 2009 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.appengine.demos.taskengine.client;
import com.google.appengine.demos.taskengine.shared.Label;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.EventListener;
/**
* Simple 2x2 matrix of color labels marking a Task as a single permutation of
* Urgent/Important.
*/
public class LabelMatrix extends Widget {
/**
* The Label Matrix 9 boxes.
* Vertical: Top, Middle, Bottom.
* Horizontal: Left, Middle, Right.
*/
public interface Css extends CssResource {
String bl();
String bm();
String br();
String colorChooser();
String labelMatrix();
String ml();
String mm();
String mr();
String selected();
String tl();
String tm();
String tr();
}
/**
* Rotated text image labels.
*/
public interface Resources extends ClientBundle {
@Source("resources/important.png")
ImageResource important();
@Source("resources/LabelMatrix.css")
LabelMatrix.Css labelMatrixCss();
@Source("resources/not_important.png")
ImageResource notImportant();
}
private final DivElement colorChooser;
private int currentLabelPriority = -1;
private final DivElement selectedColor;
public LabelMatrix(Element parentElement, LabelMatrix.Resources resources) {
super(parentElement);
LabelMatrix.Css css = resources.labelMatrixCss();
Element elem = getElement();
elem.setClassName(css.labelMatrix());
selectedColor = Document.get().createDivElement();
selectedColor.setClassName(css.selected());
colorChooser = Document.get().createDivElement();
colorChooser.setClassName(css.colorChooser());
createMatrixCell(css.tl());
Element cell = createMatrixCell(css.tm());
cell.setInnerText("Urgent");
cell = createMatrixCell(css.tr());
cell.setInnerText("Not Urgent");
createMatrixCell(css.ml());
// Add click listener to Red cell
DomUtils.addEventListener("click", createMatrixCell(css.mm()),
new EventListener() {
public void onBrowserEvent(Event event) {
setLabelPriority(Label.URGENT_IMPORTANT);
}
});
// Add click listener to Orange cell
DomUtils.addEventListener("click", createMatrixCell(css.mr()),
new EventListener() {
public void onBrowserEvent(Event event) {
setLabelPriority(Label.NOT_URGENT_IMPORTANT);
}
});
createMatrixCell(css.bl());
// Add click listener to Yellow cell
DomUtils.addEventListener("click", createMatrixCell(css.bm()),
new EventListener() {
public void onBrowserEvent(Event event) {
setLabelPriority(Label.URGENT_NOT_IMPORTANT);
}
});
// Add click listener to Green cell
DomUtils.addEventListener("click", createMatrixCell(css.br()),
new EventListener() {
public void onBrowserEvent(Event event) {
setLabelPriority(Label.NOT_URGENT_NOT_IMPORTANT);
}
});
DomUtils.addEventListener("click", selectedColor, new EventListener() {
public void onBrowserEvent(Event event) {
showColorChooser();
}
});
elem.appendChild(selectedColor);
elem.appendChild(colorChooser);
}
public int getCurrentLabelPriority() {
return currentLabelPriority;
}
/**
* Hides the color chooser.
*/
public void hideColorChooser() {
colorChooser.getStyle().setProperty("display", "none");
selectedColor.getStyle().setProperty("display", "block");
}
/**
* Sets the selected label priority.
*
* @param labelPriority the priority for the label
*/
public void setLabelPriority(int labelPriority) {
currentLabelPriority = labelPriority;
if (currentLabelPriority >= 0) {
selectedColor.getStyle().setProperty("backgroundColor",
Label.chooseColor(currentLabelPriority));
hideColorChooser();
}
}
/**
* Displays the color chooser.
*/
public void showColorChooser() {
colorChooser.getStyle().setProperty("display", "inline-block");
selectedColor.getStyle().setProperty("display", "none");
}
private Element createMatrixCell(String className) {
DivElement elem = Document.get().createDivElement();
elem.setClassName(className);
colorChooser.appendChild(elem);
return elem;
}
}