/* * Copyright 2008 Jeff Dwyer * * 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.apress.progwt.client.college.gui; import com.apress.progwt.client.domain.RatingType; import com.google.gwt.user.client.ui.AbsolutePanel; import com.google.gwt.user.client.ui.ChangeListener; import com.google.gwt.user.client.ui.ChangeListenerCollection; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.MouseListener; import com.google.gwt.user.client.ui.SourcesChangeEvents; import com.google.gwt.user.client.ui.Widget; public class RatingChooser extends Composite implements SourcesChangeEvents { private static final int X_SPACING = 12; private static final int ELEMENTS = 10; private static final int FUDGE = 20; private static final int HEIGHT = 25; private int selectedRating; private RatingType ratingType; private AbsolutePanel mainPanel; private ChangeListenerCollection changeListeners; public RatingChooser(RatingType ratingType, int selectedRating) { this.ratingType = ratingType; this.selectedRating = selectedRating; mainPanel = new AbsolutePanel(); for (int i = 1; i <= ELEMENTS; i++) { Digit digit = new Digit(i); if (i == selectedRating) { digit.setSelected(true); } mainPanel.add(digit, i * X_SPACING, 0); } mainPanel.setPixelSize(X_SPACING * ELEMENTS + FUDGE, HEIGHT); mainPanel.setStylePrimaryName("RatingChooser"); initWidget(mainPanel); } public int getSelectedRating() { return selectedRating; } public RatingType getRatingType() { return ratingType; } private void select(int value) { ((Digit) mainPanel.getWidget(selectedRating - 1)) .setSelected(false); ((Digit) mainPanel.getWidget(value - 1)).setSelected(true); selectedRating = value; if (changeListeners != null) { changeListeners.fireChange(this); } } private class Digit extends Label implements MouseListener { private int value; public Digit(int value) { super(value + ""); this.value = value; setStylePrimaryName("Rating"); addMouseListener(this); } public void setSelected(boolean b) { if (b) { addStyleDependentName("Selected"); } else { removeStyleDependentName("Selected"); } } public int getValue() { return value; } public void onMouseUp(Widget sender, int x, int y) { select(value); } public void onMouseEnter(Widget sender) { addStyleDependentName("Hover"); } public void onMouseLeave(Widget sender) { removeStyleDependentName("Hover"); } public void onMouseMove(Widget sender, int x, int y) { } public void onMouseDown(Widget sender, int x, int y) { } } public void addChangeListener(ChangeListener listener) { if (changeListeners == null) { changeListeners = new ChangeListenerCollection(); } changeListeners.add(listener); } public void removeChangeListener(ChangeListener listener) { if (changeListeners != null) { changeListeners.remove(listener); } } }