/*
* Copyright 2000-2016 Vaadin Ltd.
*
* 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.vaadin.v7.ui.components.colorpicker;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.v7.data.Property.ValueChangeEvent;
import com.vaadin.v7.data.Property.ValueChangeListener;
import com.vaadin.v7.shared.ui.colorpicker.Color;
import com.vaadin.v7.ui.ComboBox;
/**
* A component that represents color selection swatches within a color picker.
*
* @since 7.0.0
*/
@Deprecated
public class ColorPickerSelect extends CustomComponent
implements ColorSelector, ValueChangeListener {
/** The range. */
private final ComboBox range;
/** The grid. */
private final ColorPickerGrid grid;
/**
* The Enum ColorRangePropertyId.
*/
private enum ColorRangePropertyId {
ALL("All colors"), RED("Red colors"), GREEN("Green colors"), BLUE(
"Blue colors");
/** The caption. */
private String caption;
/**
* Instantiates a new color range property id.
*
* @param caption
* the caption
*/
ColorRangePropertyId(String caption) {
this.caption = caption;
}
@Override
public String toString() {
return caption;
}
}
/**
* Instantiates a new color picker select.
*
* @param rows
* the rows
* @param columns
* the columns
*/
public ColorPickerSelect() {
VerticalLayout layout = new VerticalLayout();
setCompositionRoot(layout);
setStyleName("colorselect");
setWidth("100%");
range = new ComboBox();
range.setImmediate(true);
range.setImmediate(true);
range.setNullSelectionAllowed(false);
range.setNewItemsAllowed(false);
range.setWidth("100%");
range.addValueChangeListener(this);
for (ColorRangePropertyId id : ColorRangePropertyId.values()) {
range.addItem(id);
}
range.select(ColorRangePropertyId.ALL);
layout.addComponent(range);
grid = new ColorPickerGrid(createAllColors(14, 10));
grid.setWidth("100%");
layout.addComponent(grid);
}
/**
* Creates the all colors.
*
* @param rows
* the rows
* @param columns
* the columns
*
* @return the color[][]
*/
private Color[][] createAllColors(int rows, int columns) {
Color[][] colors = new Color[rows][columns];
for (int row = 0; row < rows; row++) {
for (int col = 0; col < columns; col++) {
// Create the color grid by varying the saturation and value
if (row < (rows - 1)) {
// Calculate new hue value
float hue = ((float) col / (float) columns);
float saturation = 1f;
float value = 1f;
// For the upper half use value=1 and variable
// saturation
if (row < (rows / 2)) {
saturation = ((row + 1f) / (rows / 2f));
} else {
value = 1f - ((row - (rows / 2f)) / (rows / 2f));
}
colors[row][col] = new Color(
Color.HSVtoRGB(hue, saturation, value));
}
// The last row should have the black&white gradient
else {
float hue = 0f;
float saturation = 0f;
float value = 1f - ((float) col / (float) columns);
colors[row][col] = new Color(
Color.HSVtoRGB(hue, saturation, value));
}
}
}
return colors;
}
/**
* Creates the color.
*
* @param color
* the color
* @param rows
* the rows
* @param columns
* the columns
*
* @return the color[][]
*/
private Color[][] createColors(Color color, int rows, int columns) {
Color[][] colors = new Color[rows][columns];
float[] hsv = color.getHSV();
float hue = hsv[0];
float saturation = 1f;
float value = 1f;
for (int row = 0; row < rows; row++) {
for (int col = 0; col < columns; col++) {
int index = row * columns + col;
saturation = 1f;
value = 1f;
if (index <= ((rows * columns) / 2)) {
saturation = index
/ (((float) rows * (float) columns) / 2f);
} else {
index -= ((rows * columns) / 2);
value = 1f
- index / (((float) rows * (float) columns) / 2f);
}
colors[row][col] = new Color(
Color.HSVtoRGB(hue, saturation, value));
}
}
return colors;
}
@Override
public Color getColor() {
return grid.getColor();
}
@Override
public void setColor(Color color) {
grid.getColor();
}
@Override
public void addColorChangeListener(ColorChangeListener listener) {
grid.addColorChangeListener(listener);
}
@Override
public void removeColorChangeListener(ColorChangeListener listener) {
grid.removeColorChangeListener(listener);
}
@Override
public void valueChange(ValueChangeEvent event) {
if (grid == null) {
return;
}
if (event.getProperty().getValue() == ColorRangePropertyId.ALL) {
grid.setColorGrid(createAllColors(14, 10));
} else if (event.getProperty().getValue() == ColorRangePropertyId.RED) {
grid.setColorGrid(createColors(new Color(0xFF, 0, 0), 14, 10));
} else if (event.getProperty()
.getValue() == ColorRangePropertyId.GREEN) {
grid.setColorGrid(createColors(new Color(0, 0xFF, 0), 14, 10));
} else if (event.getProperty()
.getValue() == ColorRangePropertyId.BLUE) {
grid.setColorGrid(createColors(new Color(0, 0, 0xFF), 14, 10));
}
}
}