/* ****************************************************************************** * Copyright (c) 2006-2012 XMind Ltd. and others. * * This file is a part of XMind 3. XMind releases 3 and * above are dual-licensed under the Eclipse Public License (EPL), * which is available at http://www.eclipse.org/legal/epl-v10.html * and the GNU Lesser General Public License (LGPL), * which is available at http://www.gnu.org/licenses/lgpl.html * See http://www.xmind.net/license.html for details. * * Contributors: * XMind Ltd. - initial API and implementation *******************************************************************************/ package org.xmind.ui.color; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.eclipse.swt.graphics.RGB; public class PaletteContents { private static PaletteContents instance = null; public static PaletteContents getDefault() { if (instance == null) { PaletteContents palette = new PaletteContents(70, 7, 10); // // row 1 // palette.addItem(PaletteItem.Black); // palette.addItem(PaletteItem.Red); // palette.addItem(PaletteItem.Orange); // palette.addItem(PaletteItem.Yellow); // palette.addItem(PaletteItem.Green); // palette.addItem(PaletteItem.Blue); // palette.addItem(PaletteItem.Indigo); // palette.addItem(PaletteItem.Purple); // // // row 2 // palette.addItem(PaletteItem.White); // palette.addItem(PaletteItem.Red80); // palette.addItem(PaletteItem.Orange80); // palette.addItem(PaletteItem.Yellow80); // palette.addItem(PaletteItem.Green80); // palette.addItem(PaletteItem.Blue80); // palette.addItem(PaletteItem.Indigo80); // palette.addItem(PaletteItem.Purple80); // // // row 3 // palette.addItem(PaletteItem.Black80); // palette.addItem(PaletteItem.Red60); // palette.addItem(PaletteItem.Orange60); // palette.addItem(PaletteItem.Yellow60); // palette.addItem(PaletteItem.Green60); // palette.addItem(PaletteItem.Blue60); // palette.addItem(PaletteItem.Indigo60); // palette.addItem(PaletteItem.Purple60); // // // row 4 // palette.addItem(PaletteItem.Black60); // palette.addItem(PaletteItem.Red40); // palette.addItem(PaletteItem.Orange40); // palette.addItem(PaletteItem.Yellow40); // palette.addItem(PaletteItem.Green40); // palette.addItem(PaletteItem.Blue40); // palette.addItem(PaletteItem.Indigo40); // palette.addItem(PaletteItem.Purple40); // // // row 5 // palette.addItem(PaletteItem.Black40); // palette.addItem(PaletteItem.Red25); // palette.addItem(PaletteItem.Orange25); // palette.addItem(PaletteItem.Yellow25); // palette.addItem(PaletteItem.Green25); // palette.addItem(PaletteItem.Blue25); // palette.addItem(PaletteItem.Indigo25); // palette.addItem(PaletteItem.Purple25); // // // row 6 // palette.addItem(PaletteItem.Black20); // palette.addItem(PaletteItem.Red50); // palette.addItem(PaletteItem.Orange50); // palette.addItem(PaletteItem.Yellow50); // palette.addItem(PaletteItem.Green50); // palette.addItem(PaletteItem.Blue50); // palette.addItem(PaletteItem.Indigo50); // palette.addItem(PaletteItem.Purple50); // row 1 palette.addItem(PaletteItem.Background1); ; palette.addItem(PaletteItem.Text1); palette.addItem(PaletteItem.Background2); palette.addItem(PaletteItem.Text2); palette.addItem(PaletteItem.Accent1); palette.addItem(PaletteItem.Accent2); palette.addItem(PaletteItem.Accent3); palette.addItem(PaletteItem.Accent4); palette.addItem(PaletteItem.Accent5); palette.addItem(PaletteItem.Accent6); // row 2 palette.addItem(PaletteItem.Background1_Darker5); ; palette.addItem(PaletteItem.Text1_Lighter50); palette.addItem(PaletteItem.Background2_Darker10); palette.addItem(PaletteItem.Text2_Lighter80); palette.addItem(PaletteItem.Accent1_Lighter80); palette.addItem(PaletteItem.Accent2_Lighter80); palette.addItem(PaletteItem.Accent3_Lighter80); palette.addItem(PaletteItem.Accent4_Lighter80); palette.addItem(PaletteItem.Accent5_Lighter80); palette.addItem(PaletteItem.Accent6_Lighter80); // row 3 palette.addItem(PaletteItem.Background1_Darker15); palette.addItem(PaletteItem.Text1_Lighter35); palette.addItem(PaletteItem.Background2_Darker25); palette.addItem(PaletteItem.Text2_Lighter60); palette.addItem(PaletteItem.Accent1_Lighter60); palette.addItem(PaletteItem.Accent2_Lighter60); palette.addItem(PaletteItem.Accent3_Lighter60); palette.addItem(PaletteItem.Accent4_Lighter60); palette.addItem(PaletteItem.Accent5_Lighter60); palette.addItem(PaletteItem.Accent6_Lighter60); // row 4 palette.addItem(PaletteItem.Background1_Darker25); palette.addItem(PaletteItem.Text1_Lighter25); palette.addItem(PaletteItem.Background2_Darker50); palette.addItem(PaletteItem.Text2_Lighter40); palette.addItem(PaletteItem.Accent1_Lighter40); palette.addItem(PaletteItem.Accent2_Lighter40); palette.addItem(PaletteItem.Accent3_Lighter40); palette.addItem(PaletteItem.Accent4_Lighter40); palette.addItem(PaletteItem.Accent5_Lighter40); palette.addItem(PaletteItem.Accent6_Lighter40); // row 5 palette.addItem(PaletteItem.Background1_Darker35); palette.addItem(PaletteItem.Text1_Lighter15); palette.addItem(PaletteItem.Background2_Darker75); palette.addItem(PaletteItem.Text2_Darker25); palette.addItem(PaletteItem.Accent1_Darker25); palette.addItem(PaletteItem.Accent2_Darker25); palette.addItem(PaletteItem.Accent3_Darker25); palette.addItem(PaletteItem.Accent4_Darker25); palette.addItem(PaletteItem.Accent5_Darker25); palette.addItem(PaletteItem.Accent6_Darker25); // row 6 palette.addItem(PaletteItem.Background1_Darker50); palette.addItem(PaletteItem.Text1_Lighter5); palette.addItem(PaletteItem.Background2_Darker90); palette.addItem(PaletteItem.Text2_Darker50); palette.addItem(PaletteItem.Accent1_Darker50); palette.addItem(PaletteItem.Accent2_Darker50); palette.addItem(PaletteItem.Accent3_Darker50); palette.addItem(PaletteItem.Accent4_Darker50); palette.addItem(PaletteItem.Accent5_Darker50); palette.addItem(PaletteItem.Accent6_Darker50); // standard row palette.addItem(PaletteItem.Standard_Red_Dark); palette.addItem(PaletteItem.Standard_Red); palette.addItem(PaletteItem.Standard_Orange); palette.addItem(PaletteItem.Standard_Yellow); palette.addItem(PaletteItem.Standard_Green_Light); palette.addItem(PaletteItem.Standard_Green); palette.addItem(PaletteItem.Standard_Blue_Light); palette.addItem(PaletteItem.Standard_Blue); palette.addItem(PaletteItem.Standard_Blue_Dark); palette.addItem(PaletteItem.Standard_Purple_Dark); instance = palette; } return instance; } private List<PaletteItem> items; private int prefRows; private int prefColumns; public PaletteContents() { this(10); } public PaletteContents(int num) { this(num, calcRows(num)); } public PaletteContents(int num, int preferredRows) { this(num, preferredRows, calcColumns(num, preferredRows)); } public PaletteContents(int num, int preferredRows, int preferredColumns) { if (num <= 0) throw new IllegalArgumentException(); this.items = new ArrayList<PaletteItem>(num); this.prefRows = Math.min(Math.max(preferredRows, 1), num); this.prefColumns = Math.min(Math.max(preferredColumns, 1), num); } public PaletteContents(PaletteItem[] items) { this.items = new ArrayList<PaletteItem>(Arrays.asList(items)); this.prefRows = calcRows(items.length); this.prefColumns = calcColumns(items.length, prefRows); } public void addItem(RGB color, String description) { addItem(new PaletteItem(color, description)); } public void addItem(int r, int g, int b, String description) { addItem(new RGB(r, g, b), description); } public void addItem(int color, String description) { addItem((color >> 16) & 0xff, (color >> 8) & 0xff, color & 0xff, description); } public void addItem(PaletteItem item) { items.add(item); } public void clear() { items.clear(); } public RGB getColor(int index) { return items.get(index).color; } public String getDescription(int index) { return items.get(index).description; } public int getPreferredRows() { return prefRows; } public int getPreferredColumns() { return prefColumns; } public int size() { return items.size(); } public PaletteItem[] toArray() { return items.toArray(new PaletteItem[items.size()]); } public List<PaletteItem> toList() { return Collections.unmodifiableList(items); } public boolean equals(Object obj) { if (obj == null) return false; if (obj == this) return true; if (!(obj instanceof PaletteContents)) return false; PaletteContents that = (PaletteContents) obj; return this.items.equals(that.items); } public int hashCode() { return items.hashCode(); } private static int calcRows(int num) { return (int) Math.sqrt(num); } private static int calcColumns(int num, int rows) { return rows == 0 ? 0 : (num + rows - 1) / rows; } }