Comparar commits
167 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| f8c032d38b | |||
| d873229ed8 | |||
| 17798a0f81 | |||
| 586e72d4fb | |||
| ec2916565f | |||
| b5c0de406d | |||
| 5777cab4a8 | |||
| 8d05d3958e | |||
| 38e540d8b3 | |||
| 2ce8a3378c | |||
| 23b47bfe12 | |||
| 4b93a004f6 | |||
| 5b36a9f4b6 | |||
| b92f7dd857 | |||
| 52819685e9 | |||
| c2ee37971f | |||
| 96951871fd | |||
| 1b99cc7fe2 | |||
| d873611a2b | |||
| 7a2dcf9bbb | |||
| 046c8efcfb | |||
| 325f60dcab | |||
| 5d7ce7249d | |||
| 535b3ebf99 | |||
| a56db00d36 | |||
| 440b0bdf7e | |||
| f27bbaf7c7 | |||
| d7f321a4bb | |||
| 7409c4fdf6 | |||
| ca72bf6e58 | |||
| 16547aeb93 | |||
| 761701b37e | |||
| 84d050fc48 | |||
| d4bd6896b6 | |||
| 076e9dde7f | |||
| 3af6a89dcd | |||
| 30a10531f6 | |||
| 70d8a4b766 | |||
| 93e8d2f1cc | |||
| d99e990ef2 | |||
| 0f392cfb57 | |||
| 9a99053130 | |||
| 4608208d8e | |||
| 4df863a221 | |||
| db61bb4ac0 | |||
| 23cb8c875f | |||
| 2b9df0f666 | |||
| 9ead548b8e | |||
| a516fac1c3 | |||
| 3ecaa139a6 | |||
| 8743d446d2 | |||
| 0299ef4031 | |||
| 77ec95b76d | |||
| 2d49376813 | |||
| 9b4ffe4ad3 | |||
| 1841a0dde6 | |||
| f79e56880d | |||
| e343581ea4 | |||
| 36327abc0b | |||
| 133d787f12 | |||
| d419d857b4 | |||
| b247f7e310 | |||
| ef1695fe59 | |||
| 8a168364ff | |||
| 8b3e6c75fd | |||
| f2d01585c7 | |||
| 795eb453ce | |||
| 1bc40b4dfc | |||
| e4fb5b4fcf | |||
| 851507afeb | |||
| 6e1f812846 | |||
| 4afd75b332 | |||
| 9bef9d46d7 | |||
| b4ade84641 | |||
| 54b6662663 | |||
| c7f95f1bf9 | |||
| 2b2721f795 | |||
| 509d6baf8f | |||
| 84e721aa6b | |||
| dd1ed43235 | |||
| 56b65b1d9f | |||
| 3955dfbf42 | |||
| c9e397ba43 | |||
| 27e9ae02ac | |||
| 5c89726fc3 | |||
| f217730682 | |||
| 83452510e1 | |||
| 4ffa88d58c | |||
| 10aeb80029 | |||
| d1f6cd6b40 | |||
| 297fe912af | |||
| af722fae5e | |||
| 5086cce845 | |||
| c071086d9b | |||
| 68e7822ea5 | |||
| 69ccc43101 | |||
| acbe4bcaf9 | |||
| 017f801f88 | |||
| f4888f5d46 | |||
| 9852ec5bda | |||
| acb1ceba7f | |||
| f61e469c9a | |||
| 683c30ce39 | |||
| b66ff8cae2 | |||
| 9bb97e2454 | |||
| d9c9522e1e | |||
| db459ff9f9 | |||
| 2aa35be755 | |||
| 5b00186710 | |||
| 0ad61139c5 | |||
| 39a99e5856 | |||
| cbdce1c18f | |||
| f28957b9b8 | |||
| 68d0488623 | |||
| 9b5f8f0b58 | |||
| c6af330b52 | |||
| 07d67961b8 | |||
| ae6074f3af | |||
| 5afef61125 | |||
| b5948fc750 | |||
| e6f79529a9 | |||
| c9e0742720 | |||
| b3d11ae86b | |||
| 21bea2bea7 | |||
| 46ee327fc6 | |||
| 5eda676d97 | |||
| 143635f90b | |||
| cc37a02844 | |||
| c30f743f85 | |||
| 8fb939bfed | |||
| 14d32a80c2 | |||
| 8e350df215 | |||
| 3d12ba9b88 | |||
| 3fa18e67d4 | |||
| bc05917012 | |||
| d2af0fbca1 | |||
| 431fc592f2 | |||
| 9f5857a96f | |||
| 0f0da1be77 | |||
| 1b4080c7af | |||
| e59b7ccf01 | |||
| 7b36dbfe02 | |||
| baec9199a9 | |||
| 1c2f686d48 | |||
| 24098f8bdc | |||
| 5398cd1dda | |||
| 7a3e579f7a | |||
| be4c42e229 | |||
| 0e3facf787 | |||
| 865db80e51 | |||
| 396a5f8666 | |||
| c34d0ea9c3 | |||
| 9057c563e2 | |||
| 0c962cf783 | |||
| 4104a2e7b8 | |||
| f031ff6b63 | |||
| b9d67a895d | |||
| 223da54ac5 | |||
| 1fb3fd0726 | |||
| 310efb3522 | |||
| 3a48a5c87e | |||
| 3ebffd4807 | |||
| 5e7eb963aa | |||
| 5b70b184b1 | |||
| 09decb6804 | |||
| 0fa6e99a3f | |||
| a37ff1aed0 |
@@ -94,4 +94,8 @@ keystore.ks
|
||||
/modules/JFreeChartWrapper/target/
|
||||
/modules/CommonsWrapper/target/
|
||||
/modules/CoreLibraryWrapper/target/
|
||||
/modules/UILibraryWrapper/target/
|
||||
/modules/UILibraryWrapper/target/
|
||||
/modules/AppearanceAPI/target/
|
||||
/modules/AppearancePlugin/target/
|
||||
/modules/AppearancePluginUI/target/
|
||||
/modules/DesktopAppearance/target/
|
||||
|
||||
@@ -71,7 +71,7 @@ Gephi is extensible and lets users create plug-ins to add new features, or to mo
|
||||
|
||||
- [**Plugins Portal**](http://wiki.gephi.org/index.php/Plugins_portal)
|
||||
|
||||
- [Plugins Quick Start (5 minutes)](http://wiki.gephi.org/index.php/Plugin_Quick_Start_(5_minutes\))
|
||||
- [Plugins Quick Start (5 minutes)](http://wiki.gephi.org/index.php/Plugin_Quick_Start_(5_minutes))
|
||||
|
||||
- Browse the [plugins](http://gephi.org/plugins) created by the community
|
||||
|
||||
|
||||
@@ -14,14 +14,6 @@
|
||||
<packaging>nbm</packaging>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>dynamic-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>data-attributes-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>graph-api</artifactId>
|
||||
|
||||
@@ -45,7 +45,6 @@ import java.awt.Color;
|
||||
import java.util.HashMap;
|
||||
import org.gephi.graph.api.Edge;
|
||||
import org.gephi.graph.api.Node;
|
||||
import org.gephi.graph.api.NodeData;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -53,27 +52,27 @@ import org.gephi.graph.api.NodeData;
|
||||
*/
|
||||
public abstract class AbstractShortestPathAlgorithm {
|
||||
|
||||
protected final HashMap<NodeData, Color> colors;
|
||||
protected final HashMap<NodeData, Double> distances;
|
||||
protected final HashMap<Node, Color> colors;
|
||||
protected final HashMap<Node, Double> distances;
|
||||
protected final Node sourceNode;
|
||||
protected double maxDistance = 0;
|
||||
|
||||
public AbstractShortestPathAlgorithm(Node sourceNode) {
|
||||
this.sourceNode = sourceNode;
|
||||
colors = new HashMap<NodeData, Color>();
|
||||
distances = new HashMap<NodeData, Double>();
|
||||
colors = new HashMap<Node, Color>();
|
||||
distances = new HashMap<Node, Double>();
|
||||
}
|
||||
|
||||
protected boolean relax(Edge edge) {
|
||||
Node source = edge.getSource();
|
||||
Node target = edge.getTarget();
|
||||
double distSource = distances.get(source.getNodeData());
|
||||
double distTarget = distances.get(target.getNodeData());
|
||||
double distSource = distances.get(source);
|
||||
double distTarget = distances.get(target);
|
||||
double weight = edgeWeight(edge);
|
||||
|
||||
double sourceWeight = distSource + weight;
|
||||
if (sourceWeight < distTarget) {
|
||||
distances.put(target.getNodeData(), sourceWeight);
|
||||
distances.put(target, sourceWeight);
|
||||
maxDistance = Math.max(maxDistance, sourceWeight);
|
||||
return true;
|
||||
} else {
|
||||
@@ -91,7 +90,7 @@ public abstract class AbstractShortestPathAlgorithm {
|
||||
|
||||
public abstract Edge getPredecessorIncoming(Node node);
|
||||
|
||||
public HashMap<NodeData, Double> getDistances() {
|
||||
public HashMap<Node, Double> getDistances() {
|
||||
return distances;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,55 +1,50 @@
|
||||
/*
|
||||
Copyright 2008-2010 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
Copyright 2008-2010 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2011 Gephi Consortium. All rights reserved.
|
||||
Copyright 2011 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2011 Gephi Consortium.
|
||||
Portions Copyrighted 2011 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.algorithms.shortestpath;
|
||||
|
||||
import java.util.HashMap;
|
||||
import org.gephi.data.attributes.type.TimeInterval;
|
||||
import org.gephi.dynamic.DynamicUtilities;
|
||||
import org.gephi.dynamic.api.DynamicController;
|
||||
import org.gephi.graph.api.DirectedGraph;
|
||||
import org.gephi.graph.api.Edge;
|
||||
import org.gephi.graph.api.Node;
|
||||
import org.gephi.graph.api.NodeData;
|
||||
import org.openide.util.Lookup;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -58,19 +53,15 @@ import org.openide.util.Lookup;
|
||||
public class BellmanFordShortestPathAlgorithm extends AbstractShortestPathAlgorithm {
|
||||
|
||||
protected final DirectedGraph graph;
|
||||
protected final HashMap<NodeData, Edge> predecessors;
|
||||
protected TimeInterval timeInterval;
|
||||
protected final HashMap<Node, Edge> predecessors;
|
||||
|
||||
public BellmanFordShortestPathAlgorithm(DirectedGraph graph, Node sourceNode) {
|
||||
super(sourceNode);
|
||||
this.graph = graph;
|
||||
predecessors = new HashMap<NodeData, Edge>();
|
||||
DynamicController dynamicController = Lookup.getDefault().lookup(DynamicController.class);
|
||||
if (dynamicController != null) {
|
||||
timeInterval = DynamicUtilities.getVisibleInterval(dynamicController.getModel(graph.getGraphModel().getWorkspace()));
|
||||
}
|
||||
predecessors = new HashMap<Node, Edge>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void compute() {
|
||||
|
||||
graph.readLock();
|
||||
@@ -78,10 +69,10 @@ public class BellmanFordShortestPathAlgorithm extends AbstractShortestPathAlgori
|
||||
//Initialize
|
||||
int nodeCount = 0;
|
||||
for (Node node : graph.getNodes()) {
|
||||
distances.put(node.getNodeData(), Double.POSITIVE_INFINITY);
|
||||
distances.put(node, Double.POSITIVE_INFINITY);
|
||||
nodeCount++;
|
||||
}
|
||||
distances.put(sourceNode.getNodeData(), 0d);
|
||||
distances.put(sourceNode, 0d);
|
||||
|
||||
|
||||
//Relax edges repeatedly
|
||||
@@ -92,7 +83,7 @@ public class BellmanFordShortestPathAlgorithm extends AbstractShortestPathAlgori
|
||||
Node target = edge.getTarget();
|
||||
if (relax(edge)) {
|
||||
relaxed = true;
|
||||
predecessors.put(target.getNodeData(), edge);
|
||||
predecessors.put(target, edge);
|
||||
}
|
||||
}
|
||||
if (!relaxed) {
|
||||
@@ -103,7 +94,7 @@ public class BellmanFordShortestPathAlgorithm extends AbstractShortestPathAlgori
|
||||
//Check for negative-weight cycles
|
||||
for (Edge edge : graph.getEdges()) {
|
||||
|
||||
if (distances.get(edge.getSource().getNodeData()) + edgeWeight(edge) < distances.get(edge.getTarget().getNodeData())) {
|
||||
if (distances.get(edge.getSource()) + edgeWeight(edge) < distances.get(edge.getTarget())) {
|
||||
graph.readUnlock();
|
||||
throw new RuntimeException("The Graph contains a negative-weighted cycle");
|
||||
}
|
||||
@@ -114,16 +105,14 @@ public class BellmanFordShortestPathAlgorithm extends AbstractShortestPathAlgori
|
||||
|
||||
@Override
|
||||
protected double edgeWeight(Edge edge) {
|
||||
if (timeInterval != null) {
|
||||
return edge.getWeight(timeInterval.getLow(), timeInterval.getHigh());
|
||||
}
|
||||
return edge.getWeight();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Node getPredecessor(Node node) {
|
||||
Edge edge = predecessors.get(node.getNodeData());
|
||||
Edge edge = predecessors.get(node);
|
||||
if (edge != null) {
|
||||
if (edge.getSource().getNodeData() != node.getNodeData()) {
|
||||
if (edge.getSource() != node) {
|
||||
return edge.getSource();
|
||||
} else {
|
||||
return edge.getTarget();
|
||||
@@ -132,7 +121,8 @@ public class BellmanFordShortestPathAlgorithm extends AbstractShortestPathAlgori
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Edge getPredecessorIncoming(Node node) {
|
||||
return predecessors.get(node.getNodeData());
|
||||
return predecessors.get(node);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,104 +44,93 @@ package org.gephi.algorithms.shortestpath;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import org.gephi.data.attributes.type.TimeInterval;
|
||||
import org.gephi.dynamic.DynamicUtilities;
|
||||
import org.gephi.dynamic.api.DynamicController;
|
||||
import org.gephi.graph.api.Edge;
|
||||
import org.gephi.graph.api.Graph;
|
||||
import org.gephi.graph.api.Node;
|
||||
import org.gephi.graph.api.NodeData;
|
||||
import org.openide.util.Lookup;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Mathieu Bastian
|
||||
*/
|
||||
public class DijkstraShortestPathAlgorithm extends AbstractShortestPathAlgorithm {
|
||||
|
||||
|
||||
protected final Graph graph;
|
||||
protected final HashMap<NodeData, Edge> predecessors;
|
||||
protected TimeInterval timeInterval;
|
||||
|
||||
protected final HashMap<Node, Edge> predecessors;
|
||||
|
||||
public DijkstraShortestPathAlgorithm(Graph graph, Node sourceNode) {
|
||||
super(sourceNode);
|
||||
this.graph = graph;
|
||||
predecessors = new HashMap<NodeData, Edge>();
|
||||
DynamicController dynamicController = Lookup.getDefault().lookup(DynamicController.class);
|
||||
if (dynamicController != null) {
|
||||
timeInterval = DynamicUtilities.getVisibleInterval(dynamicController.getModel(graph.getGraphModel().getWorkspace()));
|
||||
}
|
||||
predecessors = new HashMap<Node, Edge>();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void compute() {
|
||||
|
||||
|
||||
graph.readLock();
|
||||
Set<Node> unsettledNodes = new HashSet<Node>();
|
||||
Set<NodeData> settledNodes = new HashSet<NodeData>();
|
||||
Set<Node> settledNodes = new HashSet<Node>();
|
||||
|
||||
//Initialize
|
||||
for (Node node : graph.getNodes()) {
|
||||
distances.put(node.getNodeData(), Double.POSITIVE_INFINITY);
|
||||
distances.put(node, Double.POSITIVE_INFINITY);
|
||||
}
|
||||
distances.put(sourceNode.getNodeData(), 0d);
|
||||
distances.put(sourceNode, 0d);
|
||||
unsettledNodes.add(sourceNode);
|
||||
|
||||
|
||||
while (!unsettledNodes.isEmpty()) {
|
||||
|
||||
// find node with smallest distance value
|
||||
Double minDistance = Double.POSITIVE_INFINITY;
|
||||
Node minDistanceNode = null;
|
||||
for (Node k : unsettledNodes) {
|
||||
Double dist = distances.get(k.getNodeData());
|
||||
Double dist = distances.get(k);
|
||||
if (minDistanceNode == null) {
|
||||
minDistanceNode = k;
|
||||
}
|
||||
|
||||
|
||||
if (dist.compareTo(minDistance) < 0) {
|
||||
minDistance = dist;
|
||||
minDistanceNode = k;
|
||||
}
|
||||
}
|
||||
unsettledNodes.remove(minDistanceNode);
|
||||
settledNodes.add(minDistanceNode.getNodeData());
|
||||
|
||||
settledNodes.add(minDistanceNode);
|
||||
|
||||
for (Edge edge : graph.getEdges(minDistanceNode)) {
|
||||
Node neighbor = graph.getOpposite(minDistanceNode, edge);
|
||||
if (!settledNodes.contains(neighbor.getNodeData())) {
|
||||
if (!settledNodes.contains(neighbor)) {
|
||||
double dist = getShortestDistance(minDistanceNode) + edgeWeight(edge);
|
||||
if (getShortestDistance(neighbor) > dist) {
|
||||
|
||||
distances.put(neighbor.getNodeData(), dist);
|
||||
predecessors.put(neighbor.getNodeData(), edge);
|
||||
|
||||
distances.put(neighbor, dist);
|
||||
predecessors.put(neighbor, edge);
|
||||
unsettledNodes.add(neighbor);
|
||||
maxDistance = Math.max(maxDistance, dist);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
graph.readUnlock();
|
||||
}
|
||||
|
||||
|
||||
private double getShortestDistance(Node destination) {
|
||||
Double d = distances.get(destination.getNodeData());
|
||||
Double d = distances.get(destination);
|
||||
if (d == null) {
|
||||
return Double.POSITIVE_INFINITY;
|
||||
} else {
|
||||
return d;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected double edgeWeight(Edge edge) {
|
||||
if (timeInterval != null) {
|
||||
return edge.getWeight(timeInterval.getLow(), timeInterval.getHigh());
|
||||
}
|
||||
return edge.getWeight();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Node getPredecessor(Node node) {
|
||||
Edge edge = predecessors.get(node.getNodeData());
|
||||
Edge edge = predecessors.get(node);
|
||||
if (edge != null) {
|
||||
if (edge.getSource() != node) {
|
||||
return edge.getSource();
|
||||
@@ -151,8 +140,9 @@ public class DijkstraShortestPathAlgorithm extends AbstractShortestPathAlgorithm
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Edge getPredecessorIncoming(Node node) {
|
||||
return predecessors.get(node.getNodeData());
|
||||
return predecessors.get(node);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,25 +9,21 @@
|
||||
</parent>
|
||||
|
||||
<groupId>org.gephi</groupId>
|
||||
<artifactId>graph-dhns</artifactId>
|
||||
<artifactId>appearance-api</artifactId>
|
||||
<version>0.9-SNAPSHOT</version>
|
||||
<packaging>nbm</packaging>
|
||||
|
||||
<name>DHNSGraph</name>
|
||||
<name>AppearanceAPI</name>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>utils-collection</artifactId>
|
||||
<artifactId>dynamic-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>graph-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>data-attributes-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>project-api</artifactId>
|
||||
@@ -51,9 +47,10 @@
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>nbm-maven-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<publicPackages>
|
||||
<publicPackage>org.gephi.appearance.api</publicPackage>
|
||||
<publicPackage>org.gephi.appearance.spi</publicPackage>
|
||||
</publicPackages>
|
||||
</configuration>
|
||||
</plugin>
|
||||
@@ -0,0 +1,156 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance;
|
||||
|
||||
import org.gephi.appearance.api.AppearanceController;
|
||||
import org.gephi.appearance.api.Function;
|
||||
import org.gephi.appearance.spi.Transformer;
|
||||
import org.gephi.appearance.spi.TransformerUI;
|
||||
import org.gephi.graph.api.Element;
|
||||
import org.gephi.graph.api.ElementIterable;
|
||||
import org.gephi.graph.api.GraphModel;
|
||||
import org.gephi.project.api.ProjectController;
|
||||
import org.gephi.project.api.Workspace;
|
||||
import org.gephi.project.api.WorkspaceListener;
|
||||
import org.openide.util.Lookup;
|
||||
import org.openide.util.lookup.ServiceProvider;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
@ServiceProvider(service = AppearanceController.class)
|
||||
public class AppearanceControllerImpl implements AppearanceController {
|
||||
|
||||
private AppearanceModelImpl model;
|
||||
|
||||
public AppearanceControllerImpl() {
|
||||
//Workspace events
|
||||
ProjectController pc = Lookup.getDefault().lookup(ProjectController.class);
|
||||
pc.addWorkspaceListener(new WorkspaceListener() {
|
||||
@Override
|
||||
public void initialize(Workspace workspace) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void select(Workspace workspace) {
|
||||
model = workspace.getLookup().lookup(AppearanceModelImpl.class);
|
||||
if (model == null) {
|
||||
model = new AppearanceModelImpl(workspace);
|
||||
workspace.add(model);
|
||||
}
|
||||
// model.select();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unselect(Workspace workspace) {
|
||||
// model.unselect();
|
||||
model = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close(Workspace workspace) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disable() {
|
||||
model = null;
|
||||
}
|
||||
});
|
||||
|
||||
if (pc.getCurrentWorkspace() != null) {
|
||||
model = pc.getCurrentWorkspace().getLookup().lookup(AppearanceModelImpl.class);
|
||||
if (model == null) {
|
||||
model = new AppearanceModelImpl(pc.getCurrentWorkspace());
|
||||
pc.getCurrentWorkspace().add(model);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void transform(Function function) {
|
||||
if (model != null) {
|
||||
GraphModel graphModel = model.getGraphModel();
|
||||
ElementIterable<? extends Element> iterable;
|
||||
if (function.getTransformer().isNode()) {
|
||||
iterable = graphModel.getGraphVisible().getNodes();
|
||||
} else {
|
||||
iterable = graphModel.getGraphVisible().getEdges();
|
||||
}
|
||||
for (Element element : iterable) {
|
||||
function.transform(element);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public AppearanceModelImpl getModel() {
|
||||
return model;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AppearanceModelImpl getModel(Workspace workspace) {
|
||||
AppearanceModelImpl m = workspace.getLookup().lookup(AppearanceModelImpl.class);
|
||||
if (m == null) {
|
||||
m = new AppearanceModelImpl(workspace);
|
||||
workspace.add(m);
|
||||
}
|
||||
return m;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Transformer getTransformer(TransformerUI ui) {
|
||||
Class<? extends Transformer> transformerClass = ui.getTransformerClass();
|
||||
Transformer transformer = Lookup.getDefault().lookup(transformerClass);
|
||||
if (transformer != null) {
|
||||
return transformer;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUseLocalScale(boolean useLocalScale) {
|
||||
if (model != null) {
|
||||
model.setLocalScale(useLocalScale);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,271 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import org.gephi.appearance.api.AppearanceModel;
|
||||
import org.gephi.appearance.api.AttributeFunction;
|
||||
import org.gephi.appearance.api.Function;
|
||||
import org.gephi.appearance.api.Interpolator;
|
||||
import org.gephi.appearance.spi.PartitionTransformer;
|
||||
import org.gephi.appearance.spi.RankingTransformer;
|
||||
import org.gephi.appearance.spi.SimpleTransformer;
|
||||
import org.gephi.appearance.spi.Transformer;
|
||||
import org.gephi.appearance.spi.TransformerUI;
|
||||
import org.gephi.attribute.api.AttributeModel;
|
||||
import org.gephi.attribute.api.AttributeUtils;
|
||||
import org.gephi.attribute.api.Column;
|
||||
import org.gephi.attribute.api.Index;
|
||||
import org.gephi.graph.api.GraphController;
|
||||
import org.gephi.graph.api.GraphModel;
|
||||
import org.gephi.project.api.Workspace;
|
||||
import org.openide.util.Lookup;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public class AppearanceModelImpl implements AppearanceModel {
|
||||
|
||||
private final Workspace workspace;
|
||||
private final AttributeModel attributeModel;
|
||||
private final GraphModel graphModel;
|
||||
private final Interpolator defaultInterpolator;
|
||||
private boolean localScale = false;
|
||||
//Functions
|
||||
private final Object functionLock;
|
||||
private List<Function> nodeFunctions;
|
||||
private List<Function> edgeFunctions;
|
||||
|
||||
public AppearanceModelImpl(Workspace workspace) {
|
||||
this.workspace = workspace;
|
||||
this.graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace);
|
||||
this.attributeModel = Lookup.getDefault().lookup(GraphController.class).getAttributeModel(workspace);
|
||||
this.defaultInterpolator = Interpolator.LINEAR;
|
||||
this.functionLock = new Object();
|
||||
|
||||
//Functions
|
||||
refreshFunctions();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Workspace getWorkspace() {
|
||||
return workspace;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isLocalScale() {
|
||||
return localScale;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Function[] getNodeFunctions() {
|
||||
refreshFunctions();
|
||||
return nodeFunctions.toArray(new Function[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Function[] getEdgeFunctions() {
|
||||
refreshFunctions();
|
||||
return edgeFunctions.toArray(new Function[0]);
|
||||
}
|
||||
|
||||
private void refreshFunctions() {
|
||||
synchronized (functionLock) {
|
||||
//Index UIs
|
||||
Map<Class, TransformerUI> uis = new HashMap<Class, TransformerUI>();
|
||||
|
||||
for (TransformerUI ui : Lookup.getDefault().lookupAll(TransformerUI.class)) {
|
||||
Class transformerClass = ui.getTransformerClass();
|
||||
if (transformerClass == null) {
|
||||
throw new NullPointerException("Transformer class can' be null");
|
||||
}
|
||||
if (uis.containsKey(transformerClass)) {
|
||||
throw new RuntimeException("A Transformer can't be attach to multiple TransformerUI");
|
||||
}
|
||||
uis.put(transformerClass, ui);
|
||||
}
|
||||
|
||||
//Index existing funcs
|
||||
Set<Column> attributeNodeFunctions = new HashSet<Column>();
|
||||
Set<Column> attributeEdgeFunctions = new HashSet<Column>();
|
||||
if (nodeFunctions != null) {
|
||||
for (Function f : nodeFunctions) {
|
||||
if (f.isAttribute()) {
|
||||
attributeNodeFunctions.add(((AttributeFunction) f).getColumn());
|
||||
}
|
||||
}
|
||||
}
|
||||
if (edgeFunctions != null) {
|
||||
for (Function f : edgeFunctions) {
|
||||
if (f.isAttribute()) {
|
||||
attributeEdgeFunctions.add(((AttributeFunction) f).getColumn());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Simple transformers
|
||||
if (nodeFunctions == null) {
|
||||
nodeFunctions = new ArrayList<Function>();
|
||||
edgeFunctions = new ArrayList<Function>();
|
||||
|
||||
for (Transformer transformer : Lookup.getDefault().lookupAll(Transformer.class)) {
|
||||
if (transformer instanceof SimpleTransformer) {
|
||||
if (transformer.isNode()) {
|
||||
nodeFunctions.add(new FunctionImpl(this, null, transformer, uis.get(transformer.getClass())));
|
||||
}
|
||||
if (transformer.isEdge()) {
|
||||
edgeFunctions.add(new FunctionImpl(this, null, transformer, uis.get(transformer.getClass())));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//Atts
|
||||
Set<Column> foundNodeColumns = new HashSet<Column>();
|
||||
Set<Column> foundEdgeColumns = new HashSet<Column>();
|
||||
for (Transformer transformer : Lookup.getDefault().lookupAll(Transformer.class)) {
|
||||
if (transformer instanceof RankingTransformer || transformer instanceof PartitionTransformer) {
|
||||
if (transformer.isNode()) {
|
||||
for (Column col : attributeModel.getNodeTable()) {
|
||||
if (!col.isProperty()) {
|
||||
Index index = localScale ? graphModel.getNodeIndex(graphModel.getVisibleView()) : graphModel.getNodeIndex();
|
||||
if (transformer instanceof RankingTransformer && isRanking(col) && !attributeNodeFunctions.contains(col)) {
|
||||
nodeFunctions.add(new FunctionImpl(this, col, transformer, uis.get(transformer.getClass()), new RankingImpl(col, index, defaultInterpolator)));
|
||||
} else if (transformer instanceof PartitionTransformer && isPartition(col) && !attributeNodeFunctions.contains(col)) {
|
||||
nodeFunctions.add(new FunctionImpl(this, col, transformer, uis.get(transformer.getClass()), new PartitionImpl(col, index)));
|
||||
}
|
||||
foundNodeColumns.add(col);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (transformer.isEdge()) {
|
||||
for (Column col : attributeModel.getEdgeTable()) {
|
||||
if (!col.isProperty() && col.isNumber()) {
|
||||
Index index = localScale ? graphModel.getEdgeIndex(graphModel.getVisibleView()) : graphModel.getEdgeIndex();
|
||||
if (transformer instanceof RankingTransformer && isRanking(col) && !attributeEdgeFunctions.contains(col)) {
|
||||
edgeFunctions.add(new FunctionImpl(this, col, transformer, uis.get(transformer.getClass()), new RankingImpl(col, index, defaultInterpolator)));
|
||||
} else if (transformer instanceof PartitionTransformer && isPartition(col) && !attributeEdgeFunctions.contains(col)) {
|
||||
edgeFunctions.add(new FunctionImpl(this, col, transformer, uis.get(transformer.getClass()), new PartitionImpl(col, index)));
|
||||
}
|
||||
foundEdgeColumns.add(col);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
attributeNodeFunctions.removeAll(foundNodeColumns);
|
||||
attributeEdgeFunctions.removeAll(foundEdgeColumns);
|
||||
|
||||
//Remove
|
||||
for (Iterator<Function> nodeItr = nodeFunctions.iterator(); nodeItr.hasNext();) {
|
||||
Function f = nodeItr.next();
|
||||
if (f.isAttribute() && attributeNodeFunctions.contains(((AttributeFunction) f).getColumn())) {
|
||||
nodeItr.remove();
|
||||
}
|
||||
}
|
||||
for (Iterator<Function> edgeItr = edgeFunctions.iterator(); edgeItr.hasNext();) {
|
||||
Function f = edgeItr.next();
|
||||
if (f.isAttribute() && attributeEdgeFunctions.contains(((AttributeFunction) f).getColumn())) {
|
||||
edgeItr.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isPartition(Column column) {
|
||||
Index index;
|
||||
if (AttributeUtils.isNodeColumn(column)) {
|
||||
index = localScale ? graphModel.getNodeIndex(graphModel.getVisibleView()) : graphModel.getNodeIndex();
|
||||
} else {
|
||||
index = localScale ? graphModel.getEdgeIndex(graphModel.getVisibleView()) : graphModel.getEdgeIndex();
|
||||
}
|
||||
int valueCount = index.countValues(column);
|
||||
int elementCount = index.countElements(column);
|
||||
double ratio = valueCount / (double) elementCount;
|
||||
if (column.isNumber()) {
|
||||
Class columnTypeClass = column.getTypeClass();
|
||||
if (columnTypeClass.equals(Integer.class)) {
|
||||
if (ratio < 0.6) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if (ratio < 0.1) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (ratio < 0.8) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean isRanking(Column column) {
|
||||
if (column.isNumber()) {
|
||||
Index index;
|
||||
if (AttributeUtils.isNodeColumn(column)) {
|
||||
index = localScale ? graphModel.getNodeIndex(graphModel.getVisibleView()) : graphModel.getNodeIndex();
|
||||
} else {
|
||||
index = localScale ? graphModel.getEdgeIndex(graphModel.getVisibleView()) : graphModel.getEdgeIndex();
|
||||
}
|
||||
if (index.countValues(column) > 0 && !isPartition(column)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void setLocalScale(boolean localScale) {
|
||||
this.localScale = localScale;
|
||||
}
|
||||
|
||||
protected GraphModel getGraphModel() {
|
||||
return graphModel;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,202 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance;
|
||||
|
||||
import org.gephi.appearance.api.Partition;
|
||||
import org.gephi.appearance.api.PartitionFunction;
|
||||
import org.gephi.appearance.api.Ranking;
|
||||
import org.gephi.appearance.api.RankingFunction;
|
||||
import org.gephi.appearance.api.SimpleFunction;
|
||||
import org.gephi.appearance.spi.PartitionTransformer;
|
||||
import org.gephi.appearance.spi.RankingTransformer;
|
||||
import org.gephi.appearance.spi.SimpleTransformer;
|
||||
import org.gephi.appearance.spi.Transformer;
|
||||
import org.gephi.appearance.spi.TransformerUI;
|
||||
import org.gephi.attribute.api.Column;
|
||||
import org.gephi.graph.api.Element;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public class FunctionImpl implements RankingFunction, PartitionFunction, SimpleFunction {
|
||||
|
||||
protected final AppearanceModelImpl model;
|
||||
protected final Column column;
|
||||
protected final Transformer transformer;
|
||||
protected final TransformerUI transformerUI;
|
||||
protected final PartitionImpl partition;
|
||||
protected final RankingImpl ranking;
|
||||
|
||||
public FunctionImpl(AppearanceModelImpl model, Column column, Transformer transformer, TransformerUI transformerUI) {
|
||||
this(model, column, transformer, transformerUI, null, null);
|
||||
}
|
||||
|
||||
public FunctionImpl(AppearanceModelImpl model, Column column, Transformer transformer, TransformerUI transformerUI, RankingImpl ranking) {
|
||||
this(model, column, transformer, transformerUI, null, ranking);
|
||||
}
|
||||
|
||||
public FunctionImpl(AppearanceModelImpl model, Column column, Transformer transformer, TransformerUI transformerUI, PartitionImpl partition) {
|
||||
this(model, column, transformer, transformerUI, partition, null);
|
||||
}
|
||||
|
||||
public FunctionImpl(AppearanceModelImpl model, Column column, Transformer transformer, TransformerUI transformerUI, PartitionImpl partition, RankingImpl ranking) {
|
||||
this.model = model;
|
||||
this.column = column;
|
||||
try {
|
||||
this.transformer = transformer.getClass().newInstance();
|
||||
} catch (Exception ex) {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
this.transformerUI = transformerUI;
|
||||
this.partition = partition;
|
||||
this.ranking = ranking;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void transform(Element element) {
|
||||
if (isSimple()) {
|
||||
((SimpleTransformer) transformer).transform(element);
|
||||
} else if (isRanking()) {
|
||||
Number val = (Number) element.getAttribute(column);
|
||||
((RankingTransformer) transformer).transform(element, ranking, val);
|
||||
} else if (isPartition()) {
|
||||
Object val = element.getAttribute(column);
|
||||
((PartitionTransformer) transformer).transform(element, partition, val);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Column getColumn() {
|
||||
return column;
|
||||
}
|
||||
|
||||
public AppearanceModelImpl getModel() {
|
||||
return model;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Transformer getTransformer() {
|
||||
return transformer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TransformerUI getUI() {
|
||||
return transformerUI;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSimple() {
|
||||
return column == null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAttribute() {
|
||||
return column != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPartition() {
|
||||
return partition != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isRanking() {
|
||||
return ranking != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Partition getPartition() {
|
||||
return partition;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ranking getRanking() {
|
||||
return ranking;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
if (column != null) {
|
||||
if (column.getTitle() != null) {
|
||||
return column.getTitle();
|
||||
} else {
|
||||
return column.getId();
|
||||
}
|
||||
}
|
||||
return super.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 5;
|
||||
hash = 47 * hash + (this.column != null ? this.column.hashCode() : 0);
|
||||
hash = 47 * hash + (this.transformer != null ? this.transformer.hashCode() : 0);
|
||||
hash = 47 * hash + (this.partition != null ? this.partition.hashCode() : 0);
|
||||
hash = 47 * hash + (this.ranking != null ? this.ranking.hashCode() : 0);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
final FunctionImpl other = (FunctionImpl) obj;
|
||||
if (this.column != other.column && (this.column == null || !this.column.equals(other.column))) {
|
||||
return false;
|
||||
}
|
||||
if (this.transformer != other.transformer && (this.transformer == null || !this.transformer.equals(other.transformer))) {
|
||||
return false;
|
||||
}
|
||||
if (this.partition != other.partition && (this.partition == null || !this.partition.equals(other.partition))) {
|
||||
return false;
|
||||
}
|
||||
if (this.ranking != other.ranking && (this.ranking == null || !this.ranking.equals(other.ranking))) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import org.gephi.appearance.api.Partition;
|
||||
import org.gephi.attribute.api.Column;
|
||||
import org.gephi.attribute.api.Index;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public class PartitionImpl implements Partition {
|
||||
|
||||
private final Index index;
|
||||
private final Column column;
|
||||
private final Map<Object, Color> colorMap;
|
||||
|
||||
public PartitionImpl(Column column, Index index) {
|
||||
this.column = column;
|
||||
this.index = index;
|
||||
this.colorMap = new HashMap<Object, Color>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable getValues() {
|
||||
return index.values(column);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getElementCount() {
|
||||
return index.countElements(column);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int count(Object value) {
|
||||
return index.count(column, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Color getColor(Object value) {
|
||||
return colorMap.get(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setColor(Object value, Color color) {
|
||||
colorMap.put(value, color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float percentage(Object value) {
|
||||
int count = index.count(column, value);
|
||||
return (float) count / index.countElements(column);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int size() {
|
||||
return index.countValues(column);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Column getColumn() {
|
||||
return column;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 3;
|
||||
hash = 23 * hash + (this.column != null ? this.column.hashCode() : 0);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
final PartitionImpl other = (PartitionImpl) obj;
|
||||
if (this.column != other.column && (this.column == null || !this.column.equals(other.column))) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance;
|
||||
|
||||
import org.gephi.appearance.api.Interpolator;
|
||||
import org.gephi.appearance.api.Ranking;
|
||||
import org.gephi.attribute.api.Column;
|
||||
import org.gephi.attribute.api.Index;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public class RankingImpl implements Ranking {
|
||||
|
||||
private final Index index;
|
||||
private final Column column;
|
||||
private Interpolator interpolator;
|
||||
|
||||
public RankingImpl(Column column, Index index, Interpolator interpolator) {
|
||||
this.column = column;
|
||||
this.index = index;
|
||||
this.interpolator = interpolator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Number getMinValue() {
|
||||
return index.getMinValue(column);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Number getMaxValue() {
|
||||
return index.getMaxValue(column);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Interpolator getInterpolator() {
|
||||
return interpolator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInterpolator(Interpolator interpolator) {
|
||||
this.interpolator = interpolator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float normalize(Number value) {
|
||||
float normalizedValue = (float) (value.doubleValue() - getMinValue().doubleValue()) / (float) (getMaxValue().doubleValue() - getMinValue().doubleValue());
|
||||
return interpolator.interpolate(normalizedValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 3;
|
||||
hash = 67 * hash + (this.column != null ? this.column.hashCode() : 0);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
final RankingImpl other = (RankingImpl) obj;
|
||||
if (this.column != other.column && (this.column == null || !this.column.equals(other.column))) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.api;
|
||||
|
||||
import org.gephi.appearance.spi.Transformer;
|
||||
import org.gephi.appearance.spi.TransformerUI;
|
||||
import org.gephi.project.api.Workspace;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public interface AppearanceController {
|
||||
|
||||
/**
|
||||
* Sets whether rankings use a local or a global scale. When calculating the
|
||||
* minimum and maximum value (i.e. the scale) rankings can use the complete
|
||||
* graph or only the currently visible graph. When using the visible graph
|
||||
* it is called the <b>local</b> scale.
|
||||
*
|
||||
* @param useLocalScale <code>true</code> for local, <code>false</code> for
|
||||
* global
|
||||
*/
|
||||
public void setUseLocalScale(boolean useLocalScale);
|
||||
|
||||
public void transform(Function function);
|
||||
|
||||
public AppearanceModel getModel();
|
||||
|
||||
public AppearanceModel getModel(Workspace workspace);
|
||||
|
||||
public Transformer getTransformer(TransformerUI ui);
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.api;
|
||||
|
||||
import org.gephi.project.api.Workspace;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public interface AppearanceModel {
|
||||
|
||||
/**
|
||||
* Return the workspace this model is associated with
|
||||
*
|
||||
* @return the workspace of this model
|
||||
*/
|
||||
public Workspace getWorkspace();
|
||||
|
||||
/**
|
||||
* Returns
|
||||
* <code>true</code> if rankings are using the currently visible graph as a
|
||||
* scale. If
|
||||
* <code>false</code> the complete graph is used to determine minimum and
|
||||
* maximum values, the ranking scale.
|
||||
*
|
||||
* @return <code>true</code> if using a local scale, <code>false</code> if
|
||||
* global scale
|
||||
*/
|
||||
public boolean isLocalScale();
|
||||
|
||||
public Function[] getNodeFunctions();
|
||||
|
||||
public Function[] getEdgeFunctions();
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.api;
|
||||
|
||||
import org.gephi.attribute.api.Column;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public interface AttributeFunction extends Function {
|
||||
|
||||
public Column getColumn();
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.api;
|
||||
|
||||
import org.gephi.appearance.spi.Transformer;
|
||||
import org.gephi.appearance.spi.TransformerUI;
|
||||
import org.gephi.graph.api.Element;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public interface Function {
|
||||
|
||||
public void transform(Element element);
|
||||
|
||||
public Transformer getTransformer();
|
||||
|
||||
public TransformerUI getUI();
|
||||
|
||||
public boolean isSimple();
|
||||
|
||||
public boolean isAttribute();
|
||||
|
||||
public boolean isRanking();
|
||||
|
||||
public boolean isPartition();
|
||||
}
|
||||
@@ -0,0 +1,325 @@
|
||||
/*
|
||||
Copyright 2008-2010 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2011 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2011 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.api;
|
||||
|
||||
import java.awt.geom.Point2D;
|
||||
|
||||
/**
|
||||
* Abstract clas that defines the single {@link #interpolate(float)} method.
|
||||
* This abstract class is implemented by built-in interpolators.
|
||||
*
|
||||
* @author Mathieu Bastian
|
||||
*/
|
||||
public abstract class Interpolator {
|
||||
|
||||
/**
|
||||
* Linear interpolation
|
||||
* <code>x = interpolate(x)
|
||||
* <code>
|
||||
*/
|
||||
public static final Interpolator LINEAR = new Interpolator() {
|
||||
@Override
|
||||
public float interpolate(float x) {
|
||||
return x;
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Log2 interpolation
|
||||
* <code>Math.log(1 + x)/Math.log(2) = interpolate(x)</code>
|
||||
*/
|
||||
public static final Interpolator LOG2 = new Interpolator() {
|
||||
@Override
|
||||
public float interpolate(float x) {
|
||||
return (float) (Math.log(1 + x) / Math.log(2));
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Builds a bezier interpolator with two control points (px1, py1) and (px2,
|
||||
* py2). The points should all be in range [0, 1].
|
||||
*
|
||||
* @param px1 the x-coordinate of first control point, between [0, 1]
|
||||
* @param py1 the y-coordinate of first control point, between [0, 1]
|
||||
* @param px2 the x-coordinate of second control point, between [0, 1]
|
||||
* @param py2 the y-coordinate of second control point, between [0, 1]
|
||||
* @return new bezier interpolator
|
||||
*/
|
||||
public static Interpolator newBezierInterpolator(float px1, float py1, float px2, float py2) {
|
||||
return new BezierInterpolator(px1, py1, px2, py2);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function takes an input value between 0 and 1 and returns another
|
||||
* value, also between 0 and 1.
|
||||
*
|
||||
* @param x a value between 0 and 1
|
||||
* @return a value between 0 and 1. Values outside of this boundary may be
|
||||
* clamped to the interval [0,1] and cause undefined results.
|
||||
*/
|
||||
public abstract float interpolate(float x);
|
||||
|
||||
/**
|
||||
* Bezier curve interpolator.
|
||||
* <p>
|
||||
* Basically, a cubic Bezier curve is created with start point (0,0) and
|
||||
* endpoint (1,1). The other two control points (px1, py1) and (px2, py2)
|
||||
* are given by the user, where px1, py1, px1, and px2 are all in the range
|
||||
* [0,1].
|
||||
* </p>
|
||||
*/
|
||||
//Author David C. Browne
|
||||
public static class BezierInterpolator extends Interpolator {
|
||||
|
||||
/**
|
||||
* the coordinates of the 2 2D control points for a cubic Bezier curve,
|
||||
* with implicit start point (0,0) and end point (1,1) -- each
|
||||
* individual coordinate value must be in range [0,1]
|
||||
*/
|
||||
private final float x1, y1, x2, y2;
|
||||
/**
|
||||
* do the input control points form a line with (0,0) and (1,1), i.e.,
|
||||
* x1 == y1 and x2 == y2 -- if so, then all x(t) == y(t) for the curve
|
||||
*/
|
||||
private final boolean isCurveLinear;
|
||||
/**
|
||||
* power of 2 sample size for lookup table of x values
|
||||
*/
|
||||
private static final int SAMPLE_SIZE = 16;
|
||||
/**
|
||||
* difference in t used to calculate each of the xSamples values --
|
||||
* power of 2 sample size should provide exact representation of this
|
||||
* value and its integer multiples (integer in range of [0..SAMPLE_SIZE]
|
||||
*/
|
||||
private static final float SAMPLE_INCREMENT = 1f / SAMPLE_SIZE;
|
||||
/**
|
||||
* x values for the bezier curve, sampled at increments of 1/SAMPLE_SIZE
|
||||
* -- this is used to find the good initial guess for parameter t, given
|
||||
* an x
|
||||
*/
|
||||
private final float[] xSamples = new float[SAMPLE_SIZE + 1];
|
||||
|
||||
/**
|
||||
* constructor -- cubic bezier curve will be represented by control
|
||||
* points (0,0) (px1,py1) (px2,py2) (1,1) -- px1, py1, px2, py2 all in
|
||||
* range [0,1]
|
||||
*
|
||||
* @param px1 is x-coordinate of first control point, in range [0,1]
|
||||
* @param py1 is y-coordinate of first control point, in range [0,1]
|
||||
* @param px2 is x-coordinate of second control point, in range [0,1]
|
||||
* @param py2 is y-coordinate of second control point, in range [0,1]
|
||||
*/
|
||||
public BezierInterpolator(float px1, float py1, float px2, float py2) {
|
||||
// check user input for precondition
|
||||
if (px1 < 0 || px1 > 1 || py1 < 0 || py1 > 1
|
||||
|| px2 < 0 || px2 > 1 || py2 < 0 || py2 > 1) {
|
||||
throw new IllegalArgumentException("control point coordinates must "
|
||||
+ "all be in range [0,1]");
|
||||
}
|
||||
|
||||
// save control point data
|
||||
x1 = px1;
|
||||
y1 = py1;
|
||||
x2 = px2;
|
||||
y2 = py2;
|
||||
|
||||
// calc linearity/identity curve
|
||||
isCurveLinear = ((x1 == y1) && (x2 == y2));
|
||||
|
||||
// make the array of x value samples
|
||||
if (!isCurveLinear) {
|
||||
for (int i = 0; i < SAMPLE_SIZE + 1; ++i) {
|
||||
xSamples[i] = eval(i * SAMPLE_INCREMENT, x1, x2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Point2D getControl1() {
|
||||
return new Point2D.Float(x1, y1);
|
||||
}
|
||||
|
||||
public Point2D getControl2() {
|
||||
return new Point2D.Float(x2, y2);
|
||||
}
|
||||
|
||||
/**
|
||||
* get the y-value of the cubic bezier curve that corresponds to the x
|
||||
* input
|
||||
*
|
||||
* @param x is x-value of cubic bezier curve, in range [0,1]
|
||||
* @return corresponding y-value of cubic bezier curve -- in range [0,1]
|
||||
*/
|
||||
@Override
|
||||
public float interpolate(float x) {
|
||||
// check user input for precondition
|
||||
if (x < 0) {
|
||||
x = 0;
|
||||
} else if (x > 1) {
|
||||
x = 1;
|
||||
}
|
||||
|
||||
// check quick exit identity cases (linear curve or curve endpoints)
|
||||
if (isCurveLinear || x == 0 || x == 1) {
|
||||
return x;
|
||||
}
|
||||
|
||||
// find the t parameter for a given x value, and use this t to calculate
|
||||
// the corresponding y value
|
||||
return eval(findTForX(x), y1, y2);
|
||||
}
|
||||
|
||||
/**
|
||||
* use Bernstein basis to evaluate 1D cubic Bezier curve (quicker and
|
||||
* more numerically stable than power basis) -- 1D control coordinates
|
||||
* are (0, p1, p2, 1), where p1 and p2 are in range [0,1], and there is
|
||||
* no ordering constraint on p1 and p2, i.e., p1 <= p2 does not have to
|
||||
* be true @param t is the pa
|
||||
*
|
||||
* ramaterized value in range [0,1] @param p1 is 1st control point
|
||||
* coordinate in range [0,1] @param p2 is 2nd control point coor
|
||||
*
|
||||
* d
|
||||
* inate in range [0,1] @return the value of the Bezier curve at
|
||||
* parameter t
|
||||
*/
|
||||
private float eval(float t, float p1, float p2) {
|
||||
// Use optimzied version of the normal Bernstein basis form of Bezier:
|
||||
// (3*(1-t)*(1-t)*t*p1)+(3*(1-t)*t*t*p2)+(t*t*t), since p0=0, p3=1
|
||||
// The above unoptimized version is best using -server, but since we are
|
||||
// probably doing client-side animation, this is faster.
|
||||
float compT = 1 - t;
|
||||
return t * (3 * compT * (compT * p1 + t * p2) + (t * t));
|
||||
}
|
||||
|
||||
/**
|
||||
* evaluate Bernstein basis derivative of 1D cubic Bezier curve, where
|
||||
* 1D control points are (0, p1, p2, 1), where p1 and p2 are in range
|
||||
* [0,1], and there is no ordering constraint on p1 and p2, i.e., p1 <=
|
||||
* p2 does not have to be true @param t is the paramaterized
|
||||
*
|
||||
* value in range [0,1] @param p1 is 1st control point coordinate in
|
||||
* range [0,1] @param p2 is 2nd control point coo
|
||||
*
|
||||
* r
|
||||
* dinate in range [0,1] @return the value of the Bezier curve at
|
||||
* parameter t
|
||||
*/
|
||||
private float evalDerivative(float t, float p1, float p2) {
|
||||
// use optimzed version of Berstein basis Bezier derivative:
|
||||
// (3*(1-t)*(1-t)*p1)+(6*(1-t)*t*(p2-p1))+(3*t*t*(1-p2)), since p0=0, p3=1
|
||||
// The above unoptimized version is best using -server, but since we are
|
||||
// probably doing client-side animation, this is faster.
|
||||
float compT = 1 - t;
|
||||
return 3 * (compT * (compT * p1 + 2 * t * (p2 - p1)) + t * t * (1 - p2));
|
||||
}
|
||||
|
||||
/**
|
||||
* find an initial good guess for what parameter t might produce the
|
||||
* x-value on the Bezier curve -- uses linear interpolation on the
|
||||
* x-value sample array that was created on construction
|
||||
*
|
||||
* @param x is x-value of cubic bezier curve, in range [0,1]
|
||||
* @return a good initial guess for parameter t (in range [0,1]) that
|
||||
* gives x
|
||||
*/
|
||||
private float getInitialGuessForT(float x) {
|
||||
// find which places in the array that x would be sandwiched between,
|
||||
// and then linearly interpolate a reasonable value of t -- array values
|
||||
// are ascending (or at least never descending) -- binary search is
|
||||
// probably more trouble than it is worth here
|
||||
for (int i = 1; i < SAMPLE_SIZE + 1; ++i) {
|
||||
if (xSamples[i] >= x) {
|
||||
float xRange = xSamples[i] - xSamples[i - 1];
|
||||
if (xRange == 0) {
|
||||
// no change in value between samples, so use earlier time
|
||||
return (i - 1) * SAMPLE_INCREMENT;
|
||||
} else {
|
||||
// linearly interpolate the time value
|
||||
return ((i - 1) + ((x - xSamples[i - 1]) / xRange))
|
||||
* SAMPLE_INCREMENT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// shouldn't get here since 0 <= x <= 1, and xSamples[0] == 0 and
|
||||
// xSamples[SAMPLE_SIZE] == 1 (using power of 2 SAMPLE_SIZE for more
|
||||
// exact increment arithmetic)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* find the parameter t that produces the given x-value for the curve --
|
||||
* uses Newton-Raphson to refine the value as opposed to subdividing
|
||||
* until we are within some tolerance
|
||||
*
|
||||
* @param x is x-value of cubic bezier curve, in range [0,1]
|
||||
* @return the parameter t (in range [0,1]) that produces x
|
||||
*/
|
||||
private float findTForX(float x) {
|
||||
// get an initial good guess for t
|
||||
float t = getInitialGuessForT(x);
|
||||
|
||||
// use Newton-Raphson to refine the value for t -- for this constrained
|
||||
// Bezier with float accuracy (7 digits), any value not converged by 4
|
||||
// iterations is cycling between values, which can minutely affect the
|
||||
// accuracy of the last digit
|
||||
final int numIterations = 4;
|
||||
for (int i = 0; i < numIterations; ++i) {
|
||||
// stop if this value of t gives us exactly x
|
||||
float xT = (eval(t, x1, x2) - x);
|
||||
if (xT == 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
// stop if derivative is 0
|
||||
float dXdT = evalDerivative(t, x1, x2);
|
||||
if (dXdT == 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
// refine t
|
||||
t -= xT / dXdT;
|
||||
}
|
||||
|
||||
return t;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.api;
|
||||
|
||||
import java.awt.Color;
|
||||
import org.gephi.attribute.api.Column;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public interface Partition {
|
||||
|
||||
public Iterable getValues();
|
||||
|
||||
public int getElementCount();
|
||||
|
||||
public int count(Object value);
|
||||
|
||||
public Color getColor(Object value);
|
||||
|
||||
public void setColor(Object value, Color color);
|
||||
|
||||
public float percentage(Object value);
|
||||
|
||||
public int size();
|
||||
|
||||
public Column getColumn();
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.api;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public interface PartitionFunction extends AttributeFunction {
|
||||
|
||||
public Partition getPartition();
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.api;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public interface Ranking {
|
||||
|
||||
public Number getMinValue();
|
||||
|
||||
public Number getMaxValue();
|
||||
|
||||
public Interpolator getInterpolator();
|
||||
|
||||
public void setInterpolator(Interpolator interpolator);
|
||||
|
||||
public float normalize(Number value);
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.api;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public interface RankingFunction extends AttributeFunction {
|
||||
|
||||
public Ranking getRanking();
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.api;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public interface SimpleFunction extends Function {
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.spi;
|
||||
|
||||
import org.gephi.appearance.api.Partition;
|
||||
import org.gephi.graph.api.Element;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public interface PartitionTransformer<E extends Element> extends Transformer {
|
||||
|
||||
public void transform(E element, Partition partition, Object value);
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.spi;
|
||||
|
||||
import org.gephi.appearance.api.Ranking;
|
||||
import org.gephi.graph.api.Element;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public interface RankingTransformer<E extends Element> extends Transformer {
|
||||
|
||||
public void transform(E element, Ranking ranking, Number value);
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.spi;
|
||||
|
||||
import org.gephi.graph.api.Element;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public interface SimpleTransformer<E extends Element> extends Transformer {
|
||||
|
||||
public void transform(E element);
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.spi;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public interface Transformer {
|
||||
|
||||
public boolean isNode();
|
||||
|
||||
public boolean isEdge();
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.spi;
|
||||
|
||||
import javax.swing.Icon;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public interface TransformerCategory {
|
||||
|
||||
public String getDisplayName();
|
||||
|
||||
public Icon getIcon();
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.spi;
|
||||
|
||||
import javax.swing.AbstractButton;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JPanel;
|
||||
import org.gephi.appearance.api.Function;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public interface TransformerUI<T extends Transformer> {
|
||||
|
||||
public TransformerCategory getCategory();
|
||||
|
||||
public JPanel getPanel(Function function);
|
||||
|
||||
public String getDisplayName();
|
||||
|
||||
public String getDescription();
|
||||
|
||||
public Icon getIcon();
|
||||
|
||||
public AbstractButton[] getControlButton();
|
||||
|
||||
public Class<? extends T> getTransformerClass();
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
Manifest-Version: 1.0
|
||||
AutoUpdate-Essential-Module: true
|
||||
OpenIDE-Module-Localizing-Bundle: org/gephi/graph/dhns/Bundle.properties
|
||||
OpenIDE-Module-Localizing-Bundle: org/gephi/appearance/api/Bundle.properties
|
||||
OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version}
|
||||
@@ -2,7 +2,7 @@
|
||||
<nbm>
|
||||
<!--
|
||||
<moduleType>autoload</moduleType>
|
||||
<codeNameBase>org.gephi.graph.dhns/1</codeNameBase>
|
||||
<codeNameBase>org.gephi.appearance.api/1</codeNameBase>
|
||||
<licenseName>Apache License, Version 2.0</licenseName>
|
||||
<licenseFile>license.txt</licenseFile>
|
||||
-->
|
||||
@@ -0,0 +1,5 @@
|
||||
OpenIDE-Module-Display-Category=Gephi Core
|
||||
OpenIDE-Module-Long-Description=\
|
||||
API for the visual appearance of elements
|
||||
OpenIDE-Module-Name=Appearance API
|
||||
OpenIDE-Module-Short-Description=API for the visual appearance of elements
|
||||
@@ -5,20 +5,20 @@
|
||||
<artifactId>gephi-parent</artifactId>
|
||||
<groupId>org.gephi</groupId>
|
||||
<version>0.9-SNAPSHOT</version>
|
||||
<relativePath>../..</relativePath>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>org.gephi</groupId>
|
||||
<artifactId>partition-plugin</artifactId>
|
||||
<artifactId>appearance-plugin</artifactId>
|
||||
<version>0.9-SNAPSHOT</version>
|
||||
<packaging>nbm</packaging>
|
||||
|
||||
<name>PartitionPlugin</name>
|
||||
<name>AppearancePlugin</name>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>partition-api</artifactId>
|
||||
<artifactId>appearance-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
@@ -45,8 +45,8 @@
|
||||
<artifactId>nbm-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<publicPackages>
|
||||
<publicPackage>org.gephi.partition.plugin</publicPackage>
|
||||
<publicPackage>org.gephi.partition.plugin.spi</publicPackage>
|
||||
<publicPackage>org.gephi.appearance.plugin</publicPackage>
|
||||
<publicPackage>org.gephi.appearance.plugin.palette</publicPackage>
|
||||
</publicPackages>
|
||||
</configuration>
|
||||
</plugin>
|
||||
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.plugin;
|
||||
|
||||
import java.awt.Color;
|
||||
import org.gephi.appearance.api.Partition;
|
||||
import org.gephi.appearance.plugin.palette.PaletteManager;
|
||||
import org.gephi.appearance.spi.PartitionTransformer;
|
||||
import org.gephi.appearance.spi.Transformer;
|
||||
import org.gephi.graph.api.Element;
|
||||
import org.openide.util.lookup.ServiceProvider;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
@ServiceProvider(service = Transformer.class)
|
||||
public class PartitionElementColorTransformer implements PartitionTransformer<Element> {
|
||||
|
||||
@Override
|
||||
public void transform(Element element, Partition partition, Object value) {
|
||||
Color color = partition.getColor(value);
|
||||
if (color == null) {
|
||||
color = Color.BLACK;
|
||||
}
|
||||
element.setColor(color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNode() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEdge() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public PaletteManager getPaletteManager() {
|
||||
return PaletteManager.getInstance();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,189 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.plugin;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.io.Serializable;
|
||||
import java.util.Arrays;
|
||||
import org.gephi.appearance.api.Ranking;
|
||||
import org.gephi.appearance.spi.RankingTransformer;
|
||||
import org.gephi.appearance.spi.Transformer;
|
||||
import org.gephi.graph.api.Element;
|
||||
import org.openide.util.lookup.ServiceProvider;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
@ServiceProvider(service = Transformer.class)
|
||||
public class RankingElementColorTransformer implements RankingTransformer<Element> {
|
||||
|
||||
protected final LinearGradient linearGradient = new LinearGradient(new Color[]{Color.WHITE, Color.BLACK}, new float[]{0f, 1f});
|
||||
|
||||
@Override
|
||||
public void transform(Element element, Ranking ranking, Number value) {
|
||||
Color color = linearGradient.getValue(ranking.normalize(value));
|
||||
element.setColor(color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNode() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEdge() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public float[] getColorPositions() {
|
||||
return linearGradient.getPositions();
|
||||
}
|
||||
|
||||
public Color[] getColors() {
|
||||
return linearGradient.getColors();
|
||||
}
|
||||
|
||||
public void setColorPositions(float[] positions) {
|
||||
linearGradient.setPositions(positions);
|
||||
}
|
||||
|
||||
public void setColors(Color[] colors) {
|
||||
linearGradient.setColors(colors);
|
||||
}
|
||||
|
||||
public LinearGradient getLinearGradient() {
|
||||
return linearGradient;
|
||||
}
|
||||
|
||||
public static class LinearGradient implements Serializable, Cloneable {
|
||||
|
||||
private Color[] colors;
|
||||
private float[] positions;
|
||||
|
||||
public LinearGradient(Color colors[], float[] positions) {
|
||||
if (colors == null || positions == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
if (colors.length != positions.length) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
this.colors = colors;
|
||||
this.positions = positions;
|
||||
}
|
||||
|
||||
public Color getValue(float pos) {
|
||||
for (int a = 0; a < positions.length - 1; a++) {
|
||||
if (positions[a] == pos) {
|
||||
return colors[a];
|
||||
}
|
||||
if (positions[a] < pos && pos < positions[a + 1]) {
|
||||
float v = (pos - positions[a]) / (positions[a + 1] - positions[a]);
|
||||
return tween(colors[a], colors[a + 1], v);
|
||||
}
|
||||
}
|
||||
if (pos <= positions[0]) {
|
||||
return colors[0];
|
||||
}
|
||||
if (pos >= positions[positions.length - 1]) {
|
||||
return colors[colors.length - 1];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private Color tween(Color c1, Color c2, float p) {
|
||||
return new Color(
|
||||
(int) (c1.getRed() * (1 - p) + c2.getRed() * (p)),
|
||||
(int) (c1.getGreen() * (1 - p) + c2.getGreen() * (p)),
|
||||
(int) (c1.getBlue() * (1 - p) + c2.getBlue() * (p)),
|
||||
(int) (c1.getAlpha() * (1 - p) + c2.getAlpha() * (p)));
|
||||
}
|
||||
|
||||
public Color[] getColors() {
|
||||
return colors;
|
||||
}
|
||||
|
||||
public float[] getPositions() {
|
||||
return positions;
|
||||
}
|
||||
|
||||
public void setColors(Color[] colors) {
|
||||
this.colors = colors;
|
||||
}
|
||||
|
||||
public void setPositions(float[] positions) {
|
||||
this.positions = positions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
final LinearGradient other = (LinearGradient) obj;
|
||||
if (!Arrays.deepEquals(this.colors, other.colors)) {
|
||||
return false;
|
||||
}
|
||||
if (!Arrays.equals(this.positions, other.positions)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 3;
|
||||
hash = 17 * hash + Arrays.deepHashCode(this.colors);
|
||||
hash = 17 * hash + Arrays.hashCode(this.positions);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object clone() throws CloneNotSupportedException {
|
||||
LinearGradient cl = new LinearGradient(colors, positions);
|
||||
return cl;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.plugin;
|
||||
|
||||
import java.awt.Color;
|
||||
import org.gephi.appearance.api.Ranking;
|
||||
import org.gephi.appearance.spi.Transformer;
|
||||
import org.gephi.graph.api.Element;
|
||||
import org.openide.util.lookup.ServiceProvider;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
@ServiceProvider(service = Transformer.class)
|
||||
public class RankingLabelColorTransformer extends RankingElementColorTransformer {
|
||||
|
||||
@Override
|
||||
public void transform(Element element, Ranking ranking, Number value) {
|
||||
Color color = linearGradient.getValue(ranking.normalize(value));
|
||||
element.getTextProperties().setColor(color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNode() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEdge() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.plugin;
|
||||
|
||||
import org.gephi.appearance.api.Ranking;
|
||||
import org.gephi.appearance.spi.RankingTransformer;
|
||||
import org.gephi.appearance.spi.Transformer;
|
||||
import org.gephi.graph.api.Node;
|
||||
import org.openide.util.lookup.ServiceProvider;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
@ServiceProvider(service = Transformer.class)
|
||||
public class RankingNodeSizeTransformer implements RankingTransformer<Node> {
|
||||
|
||||
protected float minSize = 1f;
|
||||
protected float maxSize = 4f;
|
||||
|
||||
@Override
|
||||
public void transform(Node node, Ranking ranking, Number value) {
|
||||
float rankingValue = ranking.normalize(value);
|
||||
float size = rankingValue * (maxSize - minSize) + minSize;
|
||||
node.setSize(size);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNode() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEdge() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public float getMaxSize() {
|
||||
return maxSize;
|
||||
}
|
||||
|
||||
public float getMinSize() {
|
||||
return minSize;
|
||||
}
|
||||
|
||||
public void setMaxSize(float maxSize) {
|
||||
this.maxSize = maxSize;
|
||||
}
|
||||
|
||||
public void setMinSize(float minSize) {
|
||||
this.minSize = minSize;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.plugin;
|
||||
|
||||
import java.awt.Color;
|
||||
import org.gephi.appearance.spi.SimpleTransformer;
|
||||
import org.gephi.appearance.spi.Transformer;
|
||||
import org.gephi.graph.api.Element;
|
||||
import org.openide.util.lookup.ServiceProvider;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
@ServiceProvider(service = Transformer.class)
|
||||
public class UniqueElementColorTransformer implements SimpleTransformer<Element> {
|
||||
|
||||
private Color color = Color.BLACK;
|
||||
|
||||
@Override
|
||||
public void transform(Element element) {
|
||||
element.setColor(color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNode() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEdge() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public Color getColor() {
|
||||
return color;
|
||||
}
|
||||
|
||||
public void setColor(Color color) {
|
||||
this.color = color;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.plugin;
|
||||
|
||||
import org.gephi.appearance.spi.SimpleTransformer;
|
||||
import org.gephi.appearance.spi.Transformer;
|
||||
import org.gephi.graph.api.Node;
|
||||
import org.openide.util.lookup.ServiceProvider;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
@ServiceProvider(service = Transformer.class)
|
||||
public class UniqueNodeSizeTransformer implements SimpleTransformer<Node> {
|
||||
|
||||
private float size = 10f;
|
||||
|
||||
@Override
|
||||
public void transform(Node node) {
|
||||
node.setSize(size);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isNode() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEdge() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public float getSize() {
|
||||
return size;
|
||||
}
|
||||
|
||||
public void setSize(float size) {
|
||||
this.size = size;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.plugin.palette;
|
||||
|
||||
import java.awt.Color;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public class Palette {
|
||||
|
||||
private final String name;
|
||||
private final Color[] colors;
|
||||
|
||||
public Palette(Color[] colors) {
|
||||
this(null, colors);
|
||||
}
|
||||
|
||||
public Palette(String name, Color[] colors) {
|
||||
this.colors = colors;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Color[] getColors() {
|
||||
return colors;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public int size() {
|
||||
return colors.length;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,351 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.plugin.palette;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public class PaletteGenerator {
|
||||
|
||||
private static final float[] DEFAULT_FILTER = new float[]{0, 360, 0, 3, 0, 1.5f};
|
||||
|
||||
public static Color[] generatePalette(int colorsCount, int quality) {
|
||||
return generatePalette(colorsCount, quality, false, null, null);
|
||||
}
|
||||
|
||||
public static Color[] generatePalette(int colorsCount, int quality, float[] filter) {
|
||||
return generatePalette(colorsCount, quality, false, null, filter);
|
||||
}
|
||||
|
||||
public static Color[] generatePalette(int colorsCount, int quality, boolean ultraPrecision, Random random, float[] filter) {
|
||||
if (filter == null) {
|
||||
filter = DEFAULT_FILTER;
|
||||
}
|
||||
if (random == null) {
|
||||
random = new Random();
|
||||
}
|
||||
|
||||
double[][] kMeans = generateRandomKmeans(colorsCount, random, filter);
|
||||
|
||||
List<double[]> colorSamples = new ArrayList<double[]>();
|
||||
if (ultraPrecision) {
|
||||
for (double l = 0; l <= 1; l += 0.01) {
|
||||
for (double a = -1; a <= 1; a += 0.05) {
|
||||
for (double b = -1; b <= 1; b += 0.05) {
|
||||
if (checkColor2(l, a, b, filter)) {
|
||||
colorSamples.add(new double[]{l, a, b});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (double l = 0; l <= 1; l += 0.05) {
|
||||
for (double a = -1; a <= 1; a += 0.1) {
|
||||
for (double b = -1; b <= 1; b += 0.1) {
|
||||
if (checkColor2(l, a, b, filter)) {
|
||||
colorSamples.add(new double[]{l, a, b});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Steps
|
||||
int[] samplesClosest = new int[colorSamples.size()];
|
||||
int steps = quality;
|
||||
while (steps-- > 0) {
|
||||
// kMeans -> Samples Closest
|
||||
for (int i = 0; i < colorSamples.size(); i++) {
|
||||
double[] lab = colorSamples.get(i);
|
||||
double minDistance = 1000000;
|
||||
for (int j = 0; j < kMeans.length; j++) {
|
||||
double[] kMean = kMeans[j];
|
||||
double distance = Math.sqrt(Math.pow(lab[0] - kMean[0], 2) + Math.pow(lab[1] - kMean[1], 2) + Math.pow(lab[2] - kMean[2], 2));
|
||||
if (distance < minDistance) {
|
||||
minDistance = distance;
|
||||
samplesClosest[i] = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Samples -> kMeans
|
||||
List<double[]> freeColorSamples = colorSamples;
|
||||
for (int j = 0; j < kMeans.length; j++) {
|
||||
int count = 0;
|
||||
double[] candidateKMean = new double[]{0, 0, 0};
|
||||
for (int i = 0; i < colorSamples.size(); i++) {
|
||||
if (samplesClosest[i] == j) {
|
||||
count++;
|
||||
double[] colorSample = colorSamples.get(i);
|
||||
candidateKMean[0] += colorSample[0];
|
||||
candidateKMean[1] += colorSample[1];
|
||||
candidateKMean[2] += colorSample[2];
|
||||
}
|
||||
}
|
||||
if (count != 0) {
|
||||
candidateKMean[0] /= count;
|
||||
candidateKMean[1] /= count;
|
||||
candidateKMean[2] /= count;
|
||||
}
|
||||
|
||||
if (count != 0 && checkColor2(candidateKMean[0], candidateKMean[1], candidateKMean[2], filter)) {
|
||||
kMeans[j] = candidateKMean;
|
||||
} else {
|
||||
// The candidate kMean is out of the boundaries of the color space, or unfound.
|
||||
if (freeColorSamples.size() > 0) {
|
||||
// We just search for the closest FREE color of the candidate kMean
|
||||
double minDistance = 10000000000.0;
|
||||
int closest = -1;
|
||||
for (int i = 0; i < freeColorSamples.size(); i++) {
|
||||
double distance = Math.sqrt(Math.pow(freeColorSamples.get(i)[0] - candidateKMean[0], 2) + Math.pow(freeColorSamples.get(i)[1] - candidateKMean[1], 2) + Math.pow(freeColorSamples.get(i)[2] - candidateKMean[2], 2));
|
||||
if (distance < minDistance) {
|
||||
minDistance = distance;
|
||||
closest = i;
|
||||
}
|
||||
}
|
||||
kMeans[j] = colorSamples.get(closest);
|
||||
|
||||
} else {
|
||||
// Then we just search for the closest color of the candidate kMean
|
||||
double minDistance = 10000000000.0;
|
||||
int closest = -1;
|
||||
for (int i = 0; i < colorSamples.size(); i++) {
|
||||
double distance = Math.sqrt(Math.pow(colorSamples.get(i)[0] - candidateKMean[0], 2) + Math.pow(colorSamples.get(i)[1] - candidateKMean[1], 2) + Math.pow(colorSamples.get(i)[2] - candidateKMean[2], 2));
|
||||
if (distance < minDistance) {
|
||||
minDistance = distance;
|
||||
closest = i;
|
||||
}
|
||||
}
|
||||
kMeans[j] = colorSamples.get(closest);
|
||||
}
|
||||
}
|
||||
List<double[]> newFreeColorSamples = new ArrayList<double[]>();
|
||||
for (double[] color : freeColorSamples) {
|
||||
double[] kMean = kMeans[j];
|
||||
if (color[0] != kMean[0]
|
||||
|| color[1] != kMean[1]
|
||||
|| color[2] != kMean[2]) {
|
||||
newFreeColorSamples.add(color);
|
||||
}
|
||||
}
|
||||
freeColorSamples = newFreeColorSamples;
|
||||
}
|
||||
}
|
||||
kMeans = sortColors(kMeans);
|
||||
Color[] res = new Color[kMeans.length];
|
||||
for (int i = 0; i < kMeans.length; i++) {
|
||||
double[] kmean = kMeans[i];
|
||||
int[] rgb = lab2rgb(kmean[0], kmean[1], kmean[2]);
|
||||
res[i] = new Color(rgb[0], rgb[1], rgb[2]);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
private static double[][] generateRandomKmeans(int colorsCount, Random random, float[] filter) {
|
||||
double[][] kMeans = new double[colorsCount][];
|
||||
for (int i = 0; i < colorsCount; i++) {
|
||||
double[] lab = new double[]{random.nextDouble(), 2 * random.nextDouble() - 1, 2 * random.nextDouble() - 1};
|
||||
while (!checkColor2(lab, filter)) {
|
||||
lab = new double[]{random.nextDouble(), 2 * random.nextDouble() - 1, 2 * random.nextDouble() - 1};
|
||||
}
|
||||
kMeans[i] = lab;
|
||||
}
|
||||
return kMeans;
|
||||
}
|
||||
|
||||
private static double[][] sortColors(double[][] colors) {
|
||||
LinkedList<double[]> colorsToSort = new LinkedList<double[]>(Arrays.asList(colors));
|
||||
List<double[]> diffColors = new ArrayList<double[]>();
|
||||
diffColors.add(colorsToSort.pop());
|
||||
while (colorsToSort.size() > 0) {
|
||||
int index = -1;
|
||||
double maxDistance = -1;
|
||||
for (int candidate_index = 0; candidate_index < colorsToSort.size(); candidate_index++) {
|
||||
double d = 1000000000;
|
||||
for (int i = 0; i < diffColors.size(); i++) {
|
||||
double[] colorA = colorsToSort.get(candidate_index);
|
||||
double[] colorB = diffColors.get(i);
|
||||
double dl = colorA[0] - colorB[0];
|
||||
double da = colorA[1] - colorB[1];
|
||||
double db = colorA[2] - colorB[2];
|
||||
d = Math.min(d, Math.sqrt(Math.pow(dl, 2) + Math.pow(da, 2) + Math.pow(db, 2)));
|
||||
}
|
||||
if (d > maxDistance) {
|
||||
maxDistance = d;
|
||||
index = candidate_index;
|
||||
}
|
||||
}
|
||||
double[] color = colorsToSort.get(index);
|
||||
diffColors.add(color);
|
||||
colorsToSort.remove(index);
|
||||
}
|
||||
double[][] res = new double[diffColors.size()][];
|
||||
for (int i = 0; i < diffColors.size(); i++) {
|
||||
res[i] = diffColors.get(i);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
private static boolean checkColor2(double[] lab, float[] filter) {
|
||||
return checkColor2(lab[0], lab[1], lab[2], filter);
|
||||
}
|
||||
|
||||
private static boolean checkColor2(double l, double a, double b, float[] filter) {
|
||||
int[] rgb = lab2rgb(l, a, b);
|
||||
double[] hcl = lab2hcl(l, a, b);
|
||||
// Check that a color is valid: it must verify our checkColor condition, but also be in the color space
|
||||
return !Double.isNaN(rgb[0]) && rgb[0] >= 0 && rgb[1] >= 0
|
||||
&& rgb[2] >= 0 && rgb[0] < 256 && rgb[1] < 256 && rgb[2] < 256
|
||||
&& hcl[0] >= filter[0] && hcl[0] <= filter[1]
|
||||
&& hcl[1] >= filter[2] && hcl[1] <= filter[3]
|
||||
&& hcl[2] >= filter[4] && hcl[2] <= filter[5];
|
||||
}
|
||||
|
||||
private static int[] lab2rgb(double l, double a, double b) {
|
||||
double[] xyz = lab2xyz(l, a, b);
|
||||
return xyz2rgb(xyz[0], xyz[1], xyz[2]);
|
||||
}
|
||||
|
||||
private static double[] lab2xyz(double l, double a, double b) {
|
||||
double sl = (l + 0.16) / 1.16;
|
||||
double[] ill = new double[]{0.96421, 1.00000, 0.82519};
|
||||
double y = ill[1] * finv(sl);
|
||||
double x = ill[0] * finv(sl + (a / 5.0));
|
||||
double z = ill[2] * finv(sl - (b / 2.0));
|
||||
return new double[]{x, y, z};
|
||||
}
|
||||
|
||||
private static int[] xyz2rgb(double x, double y, double z) {
|
||||
double rl = 3.2406 * x - 1.5372 * y - 0.4986 * z;
|
||||
double gl = -0.9689 * x + 1.8758 * y + 0.0415 * z;
|
||||
double bl = 0.0557 * x - 0.2040 * y + 1.0570 * z;
|
||||
boolean clip = Math.min(rl, Math.min(gl, bl)) < -0.001 || Math.max(rl, Math.max(gl, bl)) > 1.001;
|
||||
if (clip) {
|
||||
rl = rl < 0.0 ? 0.0 : rl > 1.0 ? 1.0 : rl;
|
||||
gl = gl < 0.0 ? 0.0 : gl > 1.0 ? 1.0 : gl;
|
||||
bl = bl < 0.0 ? 0.0 : bl > 1.0 ? 1.0 : bl;
|
||||
}
|
||||
int r = (int) Math.round(255.0 * correct1(rl));
|
||||
int g = (int) Math.round(255.0 * correct1(gl));
|
||||
int b = (int) Math.round(255.0 * correct1(bl));
|
||||
return new int[]{r, g, b};
|
||||
}
|
||||
|
||||
private static double[] rgb2lab(int r, int g, int b) {
|
||||
double[] xyz = rgb2xyz(r, g, b);
|
||||
return xyz2lab(xyz[0], xyz[1], xyz[2]);
|
||||
}
|
||||
|
||||
private static double[] rgb2xyz(int r, int g, int b) {
|
||||
double rl = correct2(r / 255.0);
|
||||
double gl = correct2(g / 255.0);
|
||||
double bl = correct2(b / 255.0);
|
||||
double x = 0.4124 * rl + 0.3576 * gl + 0.1805 * bl;
|
||||
double y = 0.2126 * rl + 0.7152 * gl + 0.0722 * bl;
|
||||
double z = 0.0193 * rl + 0.1192 * gl + 0.9505 * bl;
|
||||
return new double[]{x, y, z};
|
||||
}
|
||||
|
||||
private static double[] xyz2lab(double x, double y, double z) {
|
||||
double[] ill = new double[]{0.96421, 1.00000, 0.82519};
|
||||
double l = 1.16 * flab(y / ill[1]) - 0.16;
|
||||
double a = 5 * (flab(x / ill[0]) - flab(y / ill[1]));
|
||||
double b = 2 * (flab(y / ill[1]) - flab(z / ill[2]));
|
||||
return new double[]{l, a, b};
|
||||
}
|
||||
|
||||
private static double[] lab2hcl(double l, double a, double b) {
|
||||
l = (l - 0.09) / 0.61;
|
||||
double r = Math.sqrt(a * a + b * b);
|
||||
double s = r / (l * 0.311 + 0.125);
|
||||
double TAU = 6.283185307179586476925287;
|
||||
double angle = Math.atan2(a, b);
|
||||
double c = (TAU / 6.0 - angle) / TAU;
|
||||
c *= 360;
|
||||
if (c < 0) {
|
||||
c += 360;
|
||||
}
|
||||
return new double[]{c, s, l};
|
||||
}
|
||||
|
||||
private static double finv(double t) {
|
||||
if (t > (6.0 / 29.0)) {
|
||||
return t * t * t;
|
||||
} else {
|
||||
return 3 * (6.0 / 29.0) * (6.0 / 29.0) * (t - 4.0 / 29.0);
|
||||
}
|
||||
}
|
||||
|
||||
private static double flab(double t) {
|
||||
if (t > Math.pow(6.0 / 29.0, 3)) {
|
||||
return Math.pow(t, 1.0 / 3.0);
|
||||
} else {
|
||||
return (1.0 / 3.0) * (29.0 / 6.0) * (29.0 / 6.0) * t + 4.0 / 29.0;
|
||||
}
|
||||
}
|
||||
|
||||
private static double correct1(double cl) {
|
||||
double a = 0.055;
|
||||
if (cl <= 0.0031308) {
|
||||
return 12.92 * cl;
|
||||
} else {
|
||||
return (1 + a) * Math.pow(cl, 1.0 / 2.4) - a;
|
||||
}
|
||||
}
|
||||
|
||||
private static double correct2(double c) {
|
||||
double a = 0.055;
|
||||
if (c <= 0.04045) {
|
||||
return c / 12.92;
|
||||
} else {
|
||||
return Math.pow((c + a) / (1.0 + a), 2.4);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,214 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.plugin.palette;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.LineNumberReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import org.openide.util.Exceptions;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public class PaletteManager {
|
||||
|
||||
private static PaletteManager instance;
|
||||
|
||||
public synchronized static PaletteManager getInstance() {
|
||||
if (instance == null) {
|
||||
instance = new PaletteManager();
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
private final static int RECENT_PALETTE_SIZE = 5;
|
||||
private final List<Preset> presets;
|
||||
private final Collection<Palette> whiteBackgroundPalette;
|
||||
private final Collection<Palette> blackBackgroundPalette;
|
||||
private final LinkedList<Palette> recentPalette;
|
||||
|
||||
public PaletteManager() {
|
||||
presets = loadPresets();
|
||||
whiteBackgroundPalette = loadWhiteBackgroundPalettes();
|
||||
blackBackgroundPalette = loadBlackBackgroundPalettes();
|
||||
recentPalette = new LinkedList<Palette>();
|
||||
}
|
||||
|
||||
public Palette generatePalette(int colorCount) {
|
||||
return generatePalette(colorCount, null);
|
||||
}
|
||||
|
||||
public Palette generatePalette(int colorCount, Preset preset) {
|
||||
int quality = 50;
|
||||
if (colorCount > 50) {
|
||||
quality = 25;
|
||||
} else if (colorCount > 100) {
|
||||
quality = 10;
|
||||
} else if (colorCount > 200) {
|
||||
quality = 5;
|
||||
} else if (colorCount > 300) {
|
||||
quality = 2;
|
||||
}
|
||||
Color[] cls = PaletteGenerator.generatePalette(colorCount, quality, preset.toArray());
|
||||
return new Palette(cls);
|
||||
}
|
||||
|
||||
public Collection<Preset> getPresets() {
|
||||
return presets;
|
||||
}
|
||||
|
||||
public Collection<Palette> getWhiteBackgroudPalette(int colorCount) {
|
||||
List<Palette> palettes = new ArrayList<Palette>();
|
||||
for (Palette p : whiteBackgroundPalette) {
|
||||
if (p.size() >= colorCount) {
|
||||
palettes.add(p);
|
||||
}
|
||||
}
|
||||
return palettes;
|
||||
}
|
||||
|
||||
public Collection<Palette> getBlackBackgroudPalette(int colorCount) {
|
||||
List<Palette> palettes = new ArrayList<Palette>();
|
||||
for (Palette p : blackBackgroundPalette) {
|
||||
if (p.size() >= colorCount) {
|
||||
palettes.add(p);
|
||||
}
|
||||
}
|
||||
return palettes;
|
||||
}
|
||||
|
||||
public void addRecentPalette(Palette palette) {
|
||||
if (recentPalette.size() == RECENT_PALETTE_SIZE) {
|
||||
recentPalette.removeLast();
|
||||
}
|
||||
recentPalette.addFirst(palette);
|
||||
}
|
||||
|
||||
public Collection<Palette> getRecentPalettes() {
|
||||
return recentPalette;
|
||||
}
|
||||
|
||||
private List<Preset> loadPresets() {
|
||||
List<Preset> presetList = new ArrayList<Preset>();
|
||||
try {
|
||||
LineNumberReader reader = new LineNumberReader(new InputStreamReader(PaletteManager.class.getResourceAsStream("palette_presets.csv")));
|
||||
reader.readLine();
|
||||
String line;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
String[] split = line.split(",");
|
||||
//name,dark,hmin,hmax,cmin,cmax,lmin,lmax
|
||||
String name = split[0];
|
||||
boolean dark = Boolean.parseBoolean(split[1]);
|
||||
int hMin = Integer.parseInt(split[2]);
|
||||
int hMax = Integer.parseInt(split[3]);
|
||||
float cMin = Float.parseFloat(split[4]);
|
||||
float cMax = Float.parseFloat(split[5]);
|
||||
float lMin = Float.parseFloat(split[6]);
|
||||
float lMax = Float.parseFloat(split[7]);
|
||||
presetList.add(new Preset(name, dark, hMin, hMax, cMin, cMax, lMin, lMax));
|
||||
}
|
||||
} catch (IOException ex) {
|
||||
Exceptions.printStackTrace(ex);
|
||||
}
|
||||
return presetList;
|
||||
}
|
||||
|
||||
private static Collection<Palette> loadWhiteBackgroundPalettes() {
|
||||
try {
|
||||
return loadPalettes("palette_white_background.csv");
|
||||
} catch (IOException ex) {
|
||||
Exceptions.printStackTrace(ex);
|
||||
}
|
||||
return Collections.EMPTY_LIST;
|
||||
}
|
||||
|
||||
private static Collection<Palette> loadBlackBackgroundPalettes() {
|
||||
try {
|
||||
return loadPalettes("palette_black_background.csv");
|
||||
} catch (IOException ex) {
|
||||
Exceptions.printStackTrace(ex);
|
||||
}
|
||||
return Collections.EMPTY_LIST;
|
||||
}
|
||||
|
||||
private static Collection<Palette> loadPalettes(String fileName) throws IOException {
|
||||
List<List<Color>> palettes = new ArrayList<List<Color>>();
|
||||
LineNumberReader reader = new LineNumberReader(new InputStreamReader(PaletteManager.class.getResourceAsStream(fileName)));
|
||||
reader.readLine();
|
||||
String line;
|
||||
int maxPalette = 32;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
String[] split = line.split(",");
|
||||
for (int i = 0; i < split.length && i < maxPalette; i++) {
|
||||
String colorStr = split[i];
|
||||
if (!colorStr.isEmpty()) {
|
||||
List<Color> palette;
|
||||
if (palettes.size() <= i) {
|
||||
palette = new ArrayList<Color>();
|
||||
palettes.add(palette);
|
||||
} else {
|
||||
palette = palettes.get(i);
|
||||
}
|
||||
palette.add(parseHexColor(colorStr.trim()));
|
||||
}
|
||||
}
|
||||
}
|
||||
List<Palette> result = new ArrayList<Palette>();
|
||||
for (List<Color> cls : palettes) {
|
||||
Collections.reverse(cls);
|
||||
Palette plt = new Palette(cls.toArray(new Color[0]));
|
||||
result.add(plt);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static Color parseHexColor(String hexColor) {
|
||||
int rgb = Integer.parseInt(hexColor.replaceFirst("#", ""), 16);
|
||||
return new Color(rgb);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.appearance.plugin.palette;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public class Preset {
|
||||
|
||||
private final String name;
|
||||
private final boolean dark;
|
||||
private final int hMin;
|
||||
private final int hMax;
|
||||
private final float cMin;
|
||||
private final float cMax;
|
||||
private final float lMin;
|
||||
private final float lMax;
|
||||
|
||||
public Preset(String name, boolean dark, int hMin, int hMax, float cMin, float cMax, float lMin, float lMax) {
|
||||
this.name = name;
|
||||
this.dark = dark;
|
||||
this.hMin = hMin;
|
||||
this.hMax = hMax;
|
||||
this.cMin = cMin;
|
||||
this.cMax = cMax;
|
||||
this.lMin = lMin;
|
||||
this.lMax = lMax;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public boolean isDark() {
|
||||
return dark;
|
||||
}
|
||||
|
||||
public int gethMin() {
|
||||
return hMin;
|
||||
}
|
||||
|
||||
public int gethMax() {
|
||||
return hMax;
|
||||
}
|
||||
|
||||
public float getcMin() {
|
||||
return cMin;
|
||||
}
|
||||
|
||||
public float getcMax() {
|
||||
return cMax;
|
||||
}
|
||||
|
||||
public float getlMin() {
|
||||
return lMin;
|
||||
}
|
||||
|
||||
public float getlMax() {
|
||||
return lMax;
|
||||
}
|
||||
|
||||
public float[] toArray() {
|
||||
return new float[]{hMin, hMax, cMin, cMax, lMin, lMax};
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
Manifest-Version: 1.0
|
||||
AutoUpdate-Essential-Module: true
|
||||
OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/partition/Bundle.properties
|
||||
Manifest-Version: 1.0
|
||||
AutoUpdate-Essential-Module: true
|
||||
OpenIDE-Module-Localizing-Bundle: org/gephi/appearance/plugin/Bundle.properties
|
||||
OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version}
|
||||
@@ -2,7 +2,7 @@
|
||||
<nbm>
|
||||
<!--
|
||||
<moduleType>autoload</moduleType>
|
||||
<codeNameBase>org.gephi.desktop.partition/1</codeNameBase>
|
||||
<codeNameBase>org.gephi.appearance.plugin/1</codeNameBase>
|
||||
<licenseName>Apache License, Version 2.0</licenseName>
|
||||
<licenseFile>license.txt</licenseFile>
|
||||
-->
|
||||
@@ -1,5 +1,5 @@
|
||||
OpenIDE-Module-Display-Category=Plugin
|
||||
OpenIDE-Module-Name=Partition Plugin
|
||||
OpenIDE-Module-Name=Appearance Plugin
|
||||
OpenIDE-Module-Short-Description=Partition transformers implementations with UI
|
||||
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100
|
||||
#82635C ,#597568,#56737C,#8B6685,#557849,#9C5F75,#A06074,#7779A3,#9C7095,#70833B,#AD7AAE,#908B36,#7D444B,#405863,#415F49,#A19A68,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A
|
||||
,#976253 ,#737339,#68753C,#8B6584,#678644,#518550,#A07434,#618B4A,#8D7199,#589A5A,#A37DAB,#6A9141,#BE7533,#AE81B9,#A890CC,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137
|
||||
,,#9E5E63 ,#9E5F48,#8C6835,#AB6C44,#554F39,#4B7F5C,#9F7536,#B3624F,#BA793E,#355E52,#528C9E,#569555,#CB8340,#C55B65,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C
|
||||
,,,#4C7473 ,#4F7480,#61718C,#6A7193,#BB645A,#C2666A,#475D5E,#565363,#D06B7C,#D26D54,#C46C96,#619EB2,#415E6B,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4
|
||||
,,,,#A55B5B ,#457768,#AB6247,#664F37,#5C849F,#488664,#5A9087,#C47846,#465A3E,#794638,#61A455,#5FAE62,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4
|
||||
,,,,,#5C5030 ,#867631,#925D73,#497E6F,#61532F,#764F38,#569959,#A18336,#8C8B2C,#704A58,#C69133,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A
|
||||
,,,,,,#4F7B77 ,#4D7078,#55505E,#BC6780,#465F3D,#5E8EAD,#8C84B7,#4A542D,#D16E68,#734B31,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4
|
||||
,,,,,,,#697C36 ,#525832,#A47535,#6E8AB0,#515266,#C96D92,#D26763,#A59B3B,#61A3CA,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67
|
||||
,,,,,,,,#804F43 ,#744C54,#8C8738,#785533,#504E64,#917EB4,#7F5637,#57A78F,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67
|
||||
,,,,,,,,,#59859F ,#D46C63,#8A585E,#579473,#A08187,#5BA184,#95A736,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434
|
||||
,,,,,,,,,,#B0697C ,#4B5E30,#744F27,#578FB3,#95908C,#DB7CAF,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C
|
||||
,,,,,,,,,,,#6D9682 ,#AE7D68,#598D7E,#606729,#465F32,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF
|
||||
,,,,,,,,,,,,#987F8B ,#A08054,#486078,#75506C,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E
|
||||
,,,,,,,,,,,,,#6C4861 ,#7897D0,#C9908C,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574
|
||||
,,,,,,,,,,,,,,#CB7599 ,#D17749,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484
|
||||
,,,,,,,,,,,,,,,#949EA4 ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE
|
||||
,,,,,,,,,,,,,,,,#4E3532 ,#4D3745,#423B4D,#29404C,#30321D,#553819,#28433F,#523A19,#6B2E31,#42211A,#66374F,#362837,#713753,#334632,#613C5E,#4D491A,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642
|
||||
,,,,,,,,,,,,,,,,,#444020 ,#2F4625,#603225,#593243,#34445A,#673620,#574163,#34491D,#414867,#3B4E17,#2A5120,#3A4C16,#773137,#30541F,#584569,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A
|
||||
,,,,,,,,,,,,,,,,,,#5C3423 ,#374220,#65391E,#364B1D,#6A374A,#2A4D43,#2E4961,#375022,#2F4A4F,#6C391E,#73371C,#5F430B,#833722,#703235,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A
|
||||
,,,,,,,,,,,,,,,,,,,#56354F ,#2D414F,#233B31,#2A4E22,#384F1F,#664019,#713A57,#603E1A,#222913,#304A48,#573D5F,#1F2C2C,#182726,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14
|
||||
,,,,,,,,,,,,,,,,,,,,#364F23 ,#57324A,#3D435F,#562D38,#2C4C42,#634017,#2E2B15,#71374F,#332B16,#3C1E21,#3F241B,#6F3B18,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C
|
||||
,,,,,,,,,,,,,,,,,,,,,#622E2F ,#372228,#713326,#222930,#7A2F34,#693030,#284347,#481A1F,#25313A,#4C4319,#5B4547,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42
|
||||
,,,,,,,,,,,,,,,,,,,,,,#403C18 ,#293947,#3C2C19,#273C42,#322536,#4B4A0C,#324A68,#73371C,#394669,#274D3E,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945
|
||||
,,,,,,,,,,,,,,,,,,,,,,,#252E17 ,#533E5F,#3F2639,#2C4B31,#404766,#5C4115,#424913,#793139,#3B1B23,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,#5C3445 ,#2E361F,#284968,#482220,#294A2E,#2F4B64,#1E2E0F,#24263B,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,#64403D ,#55456A,#2D4E39,#202A35,#513A1F,#322536,#2B4D1F,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,#2C282A ,#594233,#533E5A,#633A45,#2B4D41,#693550,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,#46441F ,#713938,#212712,#663C19,#2E280F,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,#3B222B ,#2A4E23,#633944,#304A66,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#26544D ,#314B59,#284A51,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#394C2D ,#573D25,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#3E3742 ,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#27564D,#27564D,#27564D,#27564D,#27564D,#27564D,#27564D,#27564D,#27564D,#27564D,#27564D
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1D2009,#1D2009,#1D2009,#1D2009,#1D2009,#1D2009,#1D2009,#1D2009,#1D2009,#1D2009
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#6D4053,#6D4053,#6D4053,#6D4053,#6D4053,#6D4053,#6D4053,#6D4053,#6D4053
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#3A223F,#3A223F,#3A223F,#3A223F,#3A223F,#3A223F,#3A223F,#3A223F
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#2D5834,#2D5834,#2D5834,#2D5834,#2D5834,#2D5834,#2D5834
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#0F3E4D,#0F3E4D,#0F3E4D,#0F3E4D,#0F3E4D,#0F3E4D
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#68334D,#68334D,#68334D,#68334D,#68334D
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#2E4A5F,#2E4A5F,#2E4A5F,#2E4A5F
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#43570A,#43570A,#43570A
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#2F1507,#2F1507
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#5D4913
|
||||
|
@@ -0,0 +1,18 @@
|
||||
name,dark,hmin,hmax,cmin,cmax,lmin,lmax
|
||||
Default,FALSE,0,360,0,3,0,1.5
|
||||
Fancy (light background),FALSE,0,360,0.4,1.2,1,1.5
|
||||
Fancy (dark background),TRUE,0,360,0.2,1.2,0.1,0.6
|
||||
Shades,FALSE,0,240,0,0.4,0,1.5
|
||||
Tarnish,FALSE,0,360,0,0.4,0.4,1.1
|
||||
Pastel,FALSE,0,360,0,0.9,1,1.5
|
||||
Pimp,FALSE,0,360,0.9,3,0.4,1
|
||||
Intense,FALSE,0,360,0.6,3,0.2,1.1
|
||||
Fluo,TRUE,0,300,1,3,1.1,1.5
|
||||
Red Roses,TRUE,330,20,0.3,3,0.5,1.5
|
||||
Ochre Sand,TRUE,20,60,0.3,1.6,0.5,1.5
|
||||
Yellow Lime,TRUE,60,90,0.3,3,0.5,1.5
|
||||
Green Mint,TRUE,90,150,0.3,3,0.5,1.5
|
||||
Ice Cube,TRUE,150,200,0,3,0.5,1.5
|
||||
Blue Ocean,TRUE,220,260,0.2,2.5,0,0.8
|
||||
Indigo Night,TRUE,260,290,1.2,3,0.5,1.5
|
||||
Purple Wine,TRUE,290,330,0,3,0,0.6
|
||||
|
@@ -0,0 +1,101 @@
|
||||
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100
|
||||
#AECFAB ,#B8C7D5,#CFD172,#80DCCB,#F0A399,#8CE0A2,#C9C6A3,#D9B965,#9CD580,#88DC95,#CE9D54,#D58876,#C4AB52,#D7A2CF,#D18664,#D3DBA3,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632
|
||||
,#BCD684 ,#D4B8D3,#DEC96A,#A4E18C,#ECACC6,#D1D062,#9ABCDA,#C1AED2,#D18C9D,#94B8D6,#6DDFC2,#A2ACD3,#D1DA60,#69D8E0,#D484B3,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC
|
||||
,,#83DEC0 ,#D6B6D3,#C5C0E1,#E2B86E,#DEA6C0,#90D897,#DA9762,#7EBFD2,#95DB8A,#D4DD68,#78E3AD,#64A797,#AEDE7C,#699BAB,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B
|
||||
,,,#A4E18C ,#7CDDC9,#7DDCD6,#76D9C1,#E59B81,#AECDB9,#D5D96A,#66E0C9,#B6ABD6,#D8897C,#DA8769,#D094BD,#D1953B,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766
|
||||
,,,,#DDCD69 ,#B1C5E4,#9CC2DA,#6DD7CD,#5BDBB3,#D4D1B1,#D296BC,#D6D8A9,#D5D4A5,#D7D5B5,#CBD7C8,#A6DC5C,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A
|
||||
,,,,,#CBDE70 ,#E19F6B,#C7CAB3,#DC939D,#D79064,#D6D864,#78C2D5,#81D6DA,#82A564,#709B65,#DC7468,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC
|
||||
,,,,,,#98D988 ,#DCA7C7,#D0C75E,#BAABCF,#CEDFC1,#D6A257,#AFE07C,#74E4AF,#7DE2AB,#5EDEA1,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C
|
||||
,,,,,,,#C1DA6A ,#73C2D2,#729F88,#D88473,#8DD98A,#D693B4,#C9A457,#8390A9,#899A49,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D
|
||||
,,,,,,,,#C3B98D ,#6AE0CF,#A3A96C,#71A188,#81A365,#89A2C9,#A1917F,#6D9E7C,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61
|
||||
,,,,,,,,,#A0A05B ,#69A390,#9B9E5A,#BFB0AE,#74D6DE,#D6CF93,#BA9092,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593
|
||||
,,,,,,,,,,#C2A39F ,#C4BDBA,#6CA493,#D48897,#BC984B,#989DD2,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95
|
||||
,,,,,,,,,,,#CE8EAA ,#E0DE61,#A59687,#DBD55C,#D1CED8,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40
|
||||
,,,,,,,,,,,,#CD925B ,#BDE290,#D2838A,#7ADAD5,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E
|
||||
,,,,,,,,,,,,,#C9C9D9 ,#54A29C,#C19366,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71
|
||||
,,,,,,,,,,,,,,#BAC1E5 ,#DCD44D,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F
|
||||
,,,,,,,,,,,,,,,#88D379 ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E
|
||||
,,,,,,,,,,,,,,,,#D0E6BE ,#D3E99E,#E0DBDE,#E1E881,#E0E981,#E4E2B6,#E6E688,#BFEEB8,#F3D5AD,#EAE08A,#E8E589,#DFE4DE,#F0DB7A,#EAE37E,#6AF7F6,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB
|
||||
,,,,,,,,,,,,,,,,,#C9E2E0 ,#DCE896,#DADBE6,#DFDBE6,#E2F07B,#EECEE8,#E7D6E7,#A1EBE3,#DFD2F5,#EDCEEC,#E0EB81,#DFD2F5,#E9CEF5,#ECE379,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A
|
||||
,,,,,,,,,,,,,,,,,,#A3EED2 ,#9DEFD1,#9CECE0,#D9DBEA,#9EEFD6,#EAE37E,#C2F192,#89F0D3,#89F1CA,#85F3C4,#85F2C7,#8DF3BA,#E5D1EF,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9
|
||||
,,,,,,,,,,,,,,,,,,,#DAE6AD ,#EDDDAD,#9EEFD6,#F6D4A8,#B8E8E5,#DCD4F0,#A3E4F3,#F3D4B0,#8CECE9,#E0E3C8,#E8E1C9,#A9F0A9,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5
|
||||
,,,,,,,,,,,,,,,,,,,,#BAEFB0 ,#BCEFA0,#B6F0A0,#EDDEB0,#9FF1BC,#EDDCB3,#D0E7E6,#EDCEEC,#B7F09A,#98ECE8,#C1E8EA,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9
|
||||
,,,,,,,,,,,,,,,,,,,,,#EBDF80 ,#C6E1EF,#87F1CE,#EAE37E,#BCEF9C,#91EAEE,#D9E8BA,#B8E6ED,#C2F192,#DEE7B8,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9
|
||||
,,,,,,,,,,,,,,,,,,,,,,#DEE5C3 ,#CAF289,#D5E9BD,#EDDADC,#C2F192,#B4EFA3,#EAE1A5,#C9EDB7,#E8DED2,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499
|
||||
,,,,,,,,,,,,,,,,,,,,,,,#C5ED9E ,#E0E2DC,#C9EADD,#BFEEB8,#F2D3B6,#C4EEBA,#BDDCF5,#85F2C7,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,#E4E7A6 ,#C4EEBA,#C4DCF5,#BDDCF5,#84EEE7,#F6D4A8,#D0EF93,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,#E5EE79 ,#E3E6BB,#EAE095,#EED8D9,#ECD2DB,#BCEDCA,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,#D8E6D5 ,#BEECDD,#DBEE84,#B6EBD2,#F2DA9F,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,#ADEEC7 ,#B6EBD2,#E4E7A6,#9DDEF6,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,#96F2AC ,#D9E8E0,#97EBDF,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#A3F0C7 ,#87EBF0,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#76EFDF ,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F7E37B,#F7E37B,#F7E37B,#F7E37B,#F7E37B,#F7E37B,#F7E37B,#F7E37B,#F7E37B,#F7E37B
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#99E3A7,#99E3A7,#99E3A7,#99E3A7,#99E3A7,#99E3A7,#99E3A7,#99E3A7,#99E3A7
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DECDA5,#DECDA5,#DECDA5,#DECDA5,#DECDA5,#DECDA5,#DECDA5,#DECDA5
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#EAD1AF,#EAD1AF,#EAD1AF,#EAD1AF,#EAD1AF,#EAD1AF,#EAD1AF
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F6F7EF,#F6F7EF,#F6F7EF,#F6F7EF,#F6F7EF,#F6F7EF
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C7D596,#C7D596,#C7D596,#C7D596,#C7D596
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DFCF81,#DFCF81,#DFCF81,#DFCF81
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DEDA77,#DEDA77,#DEDA77
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DEDACC,#DEDACC
|
||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F5C8F4
|
||||
|
@@ -5,15 +5,15 @@
|
||||
<artifactId>gephi-parent</artifactId>
|
||||
<groupId>org.gephi</groupId>
|
||||
<version>0.9-SNAPSHOT</version>
|
||||
<relativePath>../..</relativePath>
|
||||
<relativePath>../..</relativePath>
|
||||
</parent>
|
||||
|
||||
<groupId>org.gephi</groupId>
|
||||
<artifactId>partition-plugin-ui</artifactId>
|
||||
<artifactId>appearance-plugin-ui</artifactId>
|
||||
<version>0.9-SNAPSHOT</version>
|
||||
<packaging>nbm</packaging>
|
||||
|
||||
<name>PartitionPluginUI</name>
|
||||
<name>AppearancePluginUI</name>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
@@ -25,17 +25,25 @@
|
||||
<artifactId>org-openide-util</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>partition-api</artifactId>
|
||||
<artifactId>org-openide-dialogs</artifactId>
|
||||
<groupId>org.netbeans.api</groupId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>partition-plugin</artifactId>
|
||||
<artifactId>appearance-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>appearance-plugin</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>utils</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>ui-utils</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>${project.groupId}</groupId>
|
||||
<artifactId>ui-components</artifactId>
|
||||
@@ -53,6 +61,7 @@
|
||||
<artifactId>nbm-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<publicPackages>
|
||||
<publicPackage>org.gephi.ui.appearance.plugin.category</publicPackage>
|
||||
</publicPackages>
|
||||
</configuration>
|
||||
</plugin>
|
||||
@@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.6" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||
<Properties>
|
||||
<Property name="opaque" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,0,-52,0,0,1,28"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JScrollPane" name="centerScrollPane">
|
||||
<Properties>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="null" type="code"/>
|
||||
</Property>
|
||||
<Property name="opaque" type="boolean" value="false"/>
|
||||
<Property name="viewportView" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
|
||||
<ComponentRef name="null"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="4" insetsLeft="10" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="1.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JPanel" name="backPanel">
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JTable" name="table">
|
||||
<Properties>
|
||||
<Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor">
|
||||
<Table columnCount="0" rowCount="0"/>
|
||||
</Property>
|
||||
<Property name="opaque" type="boolean" value="false"/>
|
||||
<Property name="rowHeight" type="int" value="18"/>
|
||||
<Property name="rowMargin" type="int" value="4"/>
|
||||
<Property name="selectionModel" type="javax.swing.ListSelectionModel" editor="org.netbeans.modules.form.editors2.JTableSelectionModelEditor">
|
||||
<JTableSelectionModel selectionMode="0"/>
|
||||
</Property>
|
||||
<Property name="showHorizontalLines" type="boolean" value="false"/>
|
||||
<Property name="showVerticalLines" type="boolean" value="false"/>
|
||||
<Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="null" type="code"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="1.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Form>
|
||||
@@ -0,0 +1,428 @@
|
||||
/*
|
||||
Copyright 2008-2010 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2011 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2011 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.ui.appearance.plugin;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.text.NumberFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import javax.swing.AbstractCellEditor;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JMenu;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JPopupMenu;
|
||||
import javax.swing.JTable;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
import javax.swing.table.TableCellEditor;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
import javax.swing.table.TableColumn;
|
||||
import net.java.dev.colorchooser.ColorChooser;
|
||||
import org.gephi.appearance.api.PartitionFunction;
|
||||
import org.gephi.appearance.plugin.palette.Palette;
|
||||
import org.gephi.appearance.plugin.palette.PaletteManager;
|
||||
import org.gephi.ui.appearance.plugin.palette.PaletteGeneratorPanel;
|
||||
import org.gephi.ui.components.PaletteIcon;
|
||||
import org.gephi.ui.utils.UIUtils;
|
||||
import org.jdesktop.swingx.JXHyperlink;
|
||||
import org.jdesktop.swingx.JXTitledSeparator;
|
||||
import org.openide.DialogDisplayer;
|
||||
import org.openide.NotifyDescriptor;
|
||||
import org.openide.util.NbBundle;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Mathieu Bastian
|
||||
*/
|
||||
public class PartitionColorTransformerPanel extends javax.swing.JPanel {
|
||||
|
||||
private PalettePopupButton palettePopupButton;
|
||||
private PartitionFunction function;
|
||||
private List<Object> values;
|
||||
|
||||
public PartitionColorTransformerPanel() {
|
||||
initComponents();
|
||||
palettePopupButton = new PalettePopupButton();
|
||||
if (UIUtils.isAquaLookAndFeel()) {
|
||||
backPanel.setBackground(UIManager.getColor("NbExplorerView.background"));
|
||||
}
|
||||
}
|
||||
|
||||
public JButton getPaletteButton() {
|
||||
return palettePopupButton;
|
||||
}
|
||||
|
||||
public void setup(PartitionFunction function) {
|
||||
this.function = function;
|
||||
NumberFormat formatter = NumberFormat.getPercentInstance();
|
||||
formatter.setMaximumFractionDigits(2);
|
||||
|
||||
values = new ArrayList();
|
||||
for (Object value : function.getPartition().getValues()) {
|
||||
values.add(value);
|
||||
}
|
||||
Collections.sort(values, new Comparator() {
|
||||
@Override
|
||||
public int compare(Object o1, Object o2) {
|
||||
float p1 = PartitionColorTransformerPanel.this.function.getPartition().percentage(o1);
|
||||
float p2 = PartitionColorTransformerPanel.this.function.getPartition().percentage(o2);
|
||||
return p1 > p2 ? -1 : p1 < p2 ? 1 : 0;
|
||||
}
|
||||
});
|
||||
|
||||
//Model
|
||||
String[] columnNames = new String[]{"Color", "Partition", "Percentage"};
|
||||
DefaultTableModel model = new DefaultTableModel(columnNames, values.size()) {
|
||||
@Override
|
||||
public boolean isCellEditable(int row, int column) {
|
||||
return column == 0;
|
||||
}
|
||||
};
|
||||
table.setModel(model);
|
||||
|
||||
TableColumn partCol = table.getColumnModel().getColumn(1);
|
||||
partCol.setCellRenderer(new TextRenderer());
|
||||
|
||||
TableColumn percCol = table.getColumnModel().getColumn(2);
|
||||
percCol.setCellRenderer(new TextRenderer());
|
||||
percCol.setPreferredWidth(60);
|
||||
percCol.setMaxWidth(60);
|
||||
|
||||
TableColumn colorCol = table.getColumnModel().getColumn(0);
|
||||
colorCol.setCellEditor(new ColorChooserEditor());
|
||||
colorCol.setCellRenderer(new ColorChooserRenderer());
|
||||
colorCol.setPreferredWidth(16);
|
||||
colorCol.setMaxWidth(16);
|
||||
|
||||
for (int j = 0; j < values.size(); j++) {
|
||||
Object value = values.get(j);
|
||||
String displayName = value == null ? "null" : value.toString();
|
||||
float percentage = function.getPartition().percentage(value);
|
||||
model.setValueAt(value, j, 0);
|
||||
model.setValueAt(displayName, j, 1);
|
||||
String perc = "(" + formatter.format(percentage) + ")";
|
||||
model.setValueAt(perc, j, 2);
|
||||
}
|
||||
}
|
||||
|
||||
private void applyPalette(Palette palette) {
|
||||
PaletteManager.getInstance().addRecentPalette(palette);
|
||||
Color[] colors = palette.getColors();
|
||||
for (int i = 0; i < values.size(); i++) {
|
||||
Object val = values.get(i);
|
||||
Color col = colors[i];
|
||||
function.getPartition().setColor(val, col);
|
||||
}
|
||||
table.revalidate();
|
||||
table.repaint();
|
||||
}
|
||||
|
||||
private void applyColor(Color col) {
|
||||
for (int i = 0; i < values.size(); i++) {
|
||||
Object val = values.get(i);
|
||||
function.getPartition().setColor(val, col);
|
||||
}
|
||||
table.revalidate();
|
||||
table.repaint();
|
||||
}
|
||||
|
||||
class ColorChooserRenderer extends JLabel implements TableCellRenderer {
|
||||
|
||||
public ColorChooserRenderer() {
|
||||
setOpaque(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
|
||||
Color c = function.getPartition().getColor(value);
|
||||
setBackground(c);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
class TextRenderer extends JLabel implements TableCellRenderer {
|
||||
|
||||
private EmptyIcon emptyIcon;
|
||||
|
||||
public TextRenderer() {
|
||||
setFont(table.getFont());
|
||||
emptyIcon = new EmptyIcon();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
|
||||
setText((String) value);
|
||||
if (column == 1) {
|
||||
setIcon(emptyIcon);
|
||||
} else {
|
||||
setIcon(null);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
class EmptyIcon implements Icon {
|
||||
|
||||
@Override
|
||||
public void paintIcon(Component c, Graphics g, int x, int y) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIconWidth() {
|
||||
return 6;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIconHeight() {
|
||||
return 6;
|
||||
}
|
||||
}
|
||||
|
||||
class ColorChooserEditor extends AbstractCellEditor implements TableCellEditor {
|
||||
|
||||
private final ColorChooser delegate;
|
||||
Object currentValue;
|
||||
|
||||
public ColorChooserEditor() {
|
||||
delegate = new ColorChooser();
|
||||
delegate.addPropertyChangeListener(new PropertyChangeListener() {
|
||||
@Override
|
||||
public void propertyChange(PropertyChangeEvent evt) {
|
||||
if (evt.getPropertyName().equals(ColorChooser.PROP_COLOR)) {
|
||||
function.getPartition().setColor(currentValue, (Color) evt.getNewValue());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getCellEditorValue() {
|
||||
return currentValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
|
||||
int row, int column) {
|
||||
currentValue = value;
|
||||
return delegate;
|
||||
}
|
||||
}
|
||||
|
||||
class PalettePopupButton extends JXHyperlink {
|
||||
|
||||
private final PaletteManager paletteManager;
|
||||
|
||||
public PalettePopupButton() {
|
||||
setText(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PartitionColorTransformerPanel.paletteButton"));
|
||||
setClickedColor(new Color(0, 51, 255));
|
||||
setFocusPainted(false);
|
||||
setFocusable(false);
|
||||
paletteManager = PaletteManager.getInstance();
|
||||
|
||||
addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
int size = function.getPartition().size();
|
||||
JPopupMenu menu = createPopup(size);
|
||||
menu.show(PalettePopupButton.this, 0, getHeight());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private JPopupMenu createPopup(final int colorsCount) {
|
||||
JPopupMenu menu = new JPopupMenu();
|
||||
menu.add(new JXTitledSeparator(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.recent")));
|
||||
Collection<Palette> recentPalettes = paletteManager.getRecentPalettes();
|
||||
if (recentPalettes.isEmpty()) {
|
||||
menu.add("<html><i>" + NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.norecent") + "</i></html>");
|
||||
} else {
|
||||
for (Palette pl : recentPalettes) {
|
||||
menu.add(new PaletteMenuItem(pl, colorsCount));
|
||||
}
|
||||
}
|
||||
|
||||
menu.add(new JXTitledSeparator(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.standard")));
|
||||
JMenu lightPalette = new JMenu(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.light"));
|
||||
for (Palette pl : paletteManager.getWhiteBackgroudPalette(colorsCount)) {
|
||||
lightPalette.add(new PaletteMenuItem(pl, colorsCount));
|
||||
}
|
||||
menu.add(lightPalette);
|
||||
|
||||
JMenu darkPalette = new JMenu(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.dark"));
|
||||
for (Palette pl : paletteManager.getBlackBackgroudPalette(colorsCount)) {
|
||||
darkPalette.add(new PaletteMenuItem(pl, colorsCount));
|
||||
}
|
||||
menu.add(darkPalette);
|
||||
|
||||
JMenuItem allBlack = new JMenuItem(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.allblack"));
|
||||
allBlack.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
applyColor(Color.BLACK);
|
||||
}
|
||||
});
|
||||
menu.add(allBlack);
|
||||
|
||||
JMenuItem allWhite = new JMenuItem(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.allwhite"));
|
||||
allWhite.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
applyColor(Color.WHITE);
|
||||
}
|
||||
});
|
||||
menu.add(allWhite);
|
||||
|
||||
JMenuItem generate = new JMenuItem(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.generate"));
|
||||
generate.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
PaletteGeneratorPanel pgn = new PaletteGeneratorPanel();
|
||||
pgn.setup(colorsCount);
|
||||
NotifyDescriptor nd = new NotifyDescriptor(pgn,
|
||||
NbBundle.getMessage(PartitionColorTransformerPanel.class, "PartitionColorTransformerPanel.generatePalettePanel.title"),
|
||||
NotifyDescriptor.OK_CANCEL_OPTION,
|
||||
NotifyDescriptor.DEFAULT_OPTION, null, null);
|
||||
|
||||
if (DialogDisplayer.getDefault().notify(nd) == NotifyDescriptor.OK_OPTION) {
|
||||
Palette pl = pgn.getSelectedPalette();
|
||||
if (pl != null) {
|
||||
applyPalette(pl);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
menu.add(generate);
|
||||
|
||||
return menu;
|
||||
}
|
||||
}
|
||||
|
||||
class PaletteMenuItem extends JMenuItem implements ActionListener {
|
||||
|
||||
private final Palette palette;
|
||||
|
||||
public PaletteMenuItem(Palette palette, int max) {
|
||||
super(new PaletteIcon(palette.getColors(), max));
|
||||
this.palette = palette;
|
||||
addActionListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
applyPalette(palette);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called from within the constructor to initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is always
|
||||
* regenerated by the Form Editor.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents() {
|
||||
java.awt.GridBagConstraints gridBagConstraints;
|
||||
|
||||
centerScrollPane = new javax.swing.JScrollPane();
|
||||
backPanel = new javax.swing.JPanel();
|
||||
table = new javax.swing.JTable();
|
||||
|
||||
setOpaque(false);
|
||||
setLayout(new java.awt.GridBagLayout());
|
||||
|
||||
centerScrollPane.setBorder(null);
|
||||
centerScrollPane.setOpaque(false);
|
||||
centerScrollPane.setViewportView(null);
|
||||
|
||||
backPanel.setLayout(new java.awt.GridBagLayout());
|
||||
|
||||
table.setModel(new javax.swing.table.DefaultTableModel(
|
||||
new Object [][] {
|
||||
|
||||
},
|
||||
new String [] {
|
||||
|
||||
}
|
||||
));
|
||||
table.setOpaque(false);
|
||||
table.setRowHeight(18);
|
||||
table.setRowMargin(4);
|
||||
table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
|
||||
table.setShowHorizontalLines(false);
|
||||
table.setShowVerticalLines(false);
|
||||
table.setTableHeader(null);
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.gridx = 0;
|
||||
gridBagConstraints.gridy = 0;
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
gridBagConstraints.weightx = 1.0;
|
||||
gridBagConstraints.weighty = 1.0;
|
||||
backPanel.add(table, gridBagConstraints);
|
||||
|
||||
centerScrollPane.setViewportView(backPanel);
|
||||
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.gridx = 0;
|
||||
gridBagConstraints.gridy = 0;
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
gridBagConstraints.weightx = 1.0;
|
||||
gridBagConstraints.weighty = 1.0;
|
||||
gridBagConstraints.insets = new java.awt.Insets(4, 10, 0, 0);
|
||||
add(centerScrollPane, gridBagConstraints);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.JPanel backPanel;
|
||||
private javax.swing.JScrollPane centerScrollPane;
|
||||
private javax.swing.JTable table;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.ui.appearance.plugin;
|
||||
|
||||
import javax.swing.AbstractButton;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JPanel;
|
||||
import org.gephi.appearance.api.Function;
|
||||
import org.gephi.appearance.api.PartitionFunction;
|
||||
import org.gephi.appearance.plugin.PartitionElementColorTransformer;
|
||||
import org.gephi.appearance.spi.PartitionTransformer;
|
||||
import org.gephi.appearance.spi.TransformerCategory;
|
||||
import org.gephi.appearance.spi.TransformerUI;
|
||||
import org.gephi.ui.appearance.plugin.category.DefaultCategory;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.util.lookup.ServiceProvider;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
@ServiceProvider(service = TransformerUI.class, position = 200)
|
||||
public class PartitionElementColorTransformerUI implements TransformerUI {
|
||||
|
||||
private PartitionColorTransformerPanel panel;
|
||||
|
||||
@Override
|
||||
public TransformerCategory getCategory() {
|
||||
return DefaultCategory.COLOR;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return NbBundle.getMessage(UniqueElementColorTransformerUI.class, "Attribute.name");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Icon getIcon() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized JPanel getPanel(Function function) {
|
||||
if (panel == null) {
|
||||
panel = new PartitionColorTransformerPanel();
|
||||
}
|
||||
panel.setup((PartitionFunction) function);
|
||||
return panel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized AbstractButton[] getControlButton() {
|
||||
if (panel == null) {
|
||||
panel = new PartitionColorTransformerPanel();
|
||||
}
|
||||
return new AbstractButton[]{panel.getPaletteButton()};
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends PartitionTransformer> getTransformerClass() {
|
||||
return PartitionElementColorTransformer.class;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||
<Properties>
|
||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||
<Dimension value="[225, 114]"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="1" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="labelColor" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||
<Component id="gradientPanel" min="-2" pref="160" max="-2" attributes="0"/>
|
||||
<EmptySpace max="32767" attributes="0"/>
|
||||
<Component id="colorSwatchToolbar" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" attributes="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Component id="colorSwatchToolbar" alignment="0" min="-2" pref="22" max="-2" attributes="0"/>
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="1" attributes="0">
|
||||
<Component id="labelColor" min="-2" pref="20" max="-2" attributes="1"/>
|
||||
<Component id="gradientPanel" min="-2" pref="17" max="-2" attributes="1"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</Group>
|
||||
<EmptySpace pref="88" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JLabel" name="labelColor">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/gephi/ui/appearance/plugin/Bundle.properties" key="RankingColorTransformerPanel.labelColor.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Container class="javax.swing.JPanel" name="gradientPanel">
|
||||
<Properties>
|
||||
<Property name="opaque" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
|
||||
</Container>
|
||||
<Container class="javax.swing.JToolBar" name="colorSwatchToolbar">
|
||||
<Properties>
|
||||
<Property name="floatable" type="boolean" value="false"/>
|
||||
<Property name="rollover" type="boolean" value="true"/>
|
||||
<Property name="opaque" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBoxLayout"/>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JButton" name="colorSwatchButton">
|
||||
<Properties>
|
||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||
<Image iconType="3" name="/org/gephi/ui/appearance/plugin/resources/color-swatch.png"/>
|
||||
</Property>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
<Property name="horizontalTextPosition" type="int" value="0"/>
|
||||
<Property name="iconTextGap" type="int" value="0"/>
|
||||
<Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
|
||||
<Insets value="[0, 0, 0, 0]"/>
|
||||
</Property>
|
||||
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Form>
|
||||
@@ -0,0 +1,340 @@
|
||||
/*
|
||||
Copyright 2008-2010 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2011 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2011 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.ui.appearance.plugin;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.util.Arrays;
|
||||
import javax.swing.JMenu;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JPopupMenu;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import org.gephi.appearance.api.RankingFunction;
|
||||
import org.gephi.appearance.plugin.RankingElementColorTransformer;
|
||||
import org.gephi.ui.components.PaletteIcon;
|
||||
import org.gephi.ui.components.gradientslider.GradientSlider;
|
||||
import org.gephi.utils.PaletteUtils;
|
||||
import org.gephi.utils.PaletteUtils.Palette;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.util.NbPreferences;
|
||||
|
||||
/**
|
||||
* @author Mathieu Bastian
|
||||
*/
|
||||
public class RankingColorTransformerPanel extends javax.swing.JPanel {
|
||||
|
||||
private RankingElementColorTransformer colorTransformer;
|
||||
private GradientSlider gradientSlider;
|
||||
private final RecentPalettes recentPalettes;
|
||||
|
||||
public RankingColorTransformerPanel() {
|
||||
initComponents();
|
||||
this.recentPalettes = new RecentPalettes();
|
||||
}
|
||||
|
||||
public void setup(RankingFunction function) {
|
||||
colorTransformer = (RankingElementColorTransformer) function.getTransformer();
|
||||
|
||||
final String POSITIONS = "RankingColorTransformerPanel_" + colorTransformer.getClass().getSimpleName() + "_positions";
|
||||
final String COLORS = "RankingColorTransformerPanel_" + colorTransformer.getClass().getSimpleName() + "_colors";
|
||||
|
||||
float[] positionsStart = colorTransformer.getColorPositions();
|
||||
Color[] colorsStart = colorTransformer.getColors();
|
||||
|
||||
try {
|
||||
positionsStart = deserializePositions(NbPreferences.forModule(RankingColorTransformerPanel.class).getByteArray(POSITIONS, serializePositions(positionsStart)));
|
||||
colorsStart = deserializeColors(NbPreferences.forModule(RankingColorTransformerPanel.class).getByteArray(COLORS, serializeColors(colorsStart)));
|
||||
colorTransformer.setColorPositions(positionsStart);
|
||||
colorTransformer.setColors(colorsStart);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
//Gradient
|
||||
gradientSlider = new GradientSlider(GradientSlider.HORIZONTAL, positionsStart, colorsStart);
|
||||
gradientSlider.putClientProperty("GradientSlider.includeOpacity", "false");
|
||||
gradientSlider.addChangeListener(new ChangeListener() {
|
||||
@Override
|
||||
public void stateChanged(ChangeEvent e) {
|
||||
Color[] colors = gradientSlider.getColors();
|
||||
float[] positions = gradientSlider.getThumbPositions();
|
||||
colorTransformer.setColors(Arrays.copyOf(colors, colors.length));
|
||||
colorTransformer.setColorPositions(Arrays.copyOf(positions, positions.length));
|
||||
try {
|
||||
NbPreferences.forModule(RankingColorTransformerPanel.class).putByteArray(POSITIONS, serializePositions(positions));
|
||||
NbPreferences.forModule(RankingColorTransformerPanel.class).putByteArray(COLORS, serializeColors(colors));
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
// prepareGradientTooltip();
|
||||
}
|
||||
});
|
||||
gradientPanel.add(gradientSlider, BorderLayout.CENTER);
|
||||
|
||||
// prepareGradientTooltip();
|
||||
|
||||
//Context
|
||||
// setComponentPopupMenu(getPalettePopupMenu());
|
||||
addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mousePressed(MouseEvent evt) {
|
||||
if (evt.isPopupTrigger()) {
|
||||
JPopupMenu popupMenu = getPalettePopupMenu();
|
||||
popupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent evt) {
|
||||
if (evt.isPopupTrigger()) {
|
||||
JPopupMenu popupMenu = getPalettePopupMenu();
|
||||
popupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//Color Swatch
|
||||
colorSwatchButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent ae) {
|
||||
JPopupMenu popupMenu = getPalettePopupMenu();
|
||||
popupMenu.show(colorSwatchToolbar, -popupMenu.getPreferredSize().width, 0);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// private void prepareGradientTooltip() {
|
||||
// StringBuilder sb = new StringBuilder();
|
||||
// final double min = ((Number) ranking.unNormalize(colorTransformer.getLowerBound())).doubleValue();
|
||||
// final double max = ((Number) ranking.unNormalize(colorTransformer.getUpperBound())).doubleValue();
|
||||
// final double range = max - min;
|
||||
// float[] positions = gradientSlider.getThumbPositions();
|
||||
// for (int i = 0; i < positions.length - 1; i++) {
|
||||
// sb.append(min + range * positions[i]);
|
||||
// sb.append(", ");
|
||||
// }
|
||||
// sb.append(min + range * positions[positions.length - 1]);
|
||||
// gradientSlider.setToolTipText(sb.toString());
|
||||
// }
|
||||
private JPopupMenu getPalettePopupMenu() {
|
||||
JPopupMenu popupMenu = new JPopupMenu();
|
||||
JMenu defaultMenu = new JMenu(NbBundle.getMessage(RankingColorTransformerPanel.class, "PalettePopup.default"));
|
||||
for (Palette p : PaletteUtils.getSequencialPalettes()) {
|
||||
final Palette p3 = PaletteUtils.get3ClassPalette(p);
|
||||
JMenuItem item = new JMenuItem(new PaletteIcon(p3.getColors()));
|
||||
item.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
gradientSlider.setValues(p3.getPositions(), p3.getColors());
|
||||
}
|
||||
});
|
||||
defaultMenu.add(item);
|
||||
}
|
||||
for (Palette p : PaletteUtils.getDivergingPalettes()) {
|
||||
final Palette p3 = PaletteUtils.get3ClassPalette(p);
|
||||
JMenuItem item = new JMenuItem(new PaletteIcon(p3.getColors()));
|
||||
item.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
gradientSlider.setValues(p3.getPositions(), p3.getColors());
|
||||
}
|
||||
});
|
||||
defaultMenu.add(item);
|
||||
}
|
||||
popupMenu.add(defaultMenu);
|
||||
|
||||
//Invert
|
||||
JMenuItem invertItem = new JMenuItem(NbBundle.getMessage(RankingColorTransformerPanel.class, "PalettePopup.invert"));
|
||||
invertItem.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
gradientSlider.setValues(invert(gradientSlider.getThumbPositions()), invert(gradientSlider.getColors()));
|
||||
}
|
||||
});
|
||||
popupMenu.add(invertItem);
|
||||
|
||||
//Recent
|
||||
JMenu recentMenu = new JMenu(NbBundle.getMessage(RankingColorTransformerPanel.class, "PalettePopup.recent"));
|
||||
for (final RankingElementColorTransformer.LinearGradient gradient : recentPalettes.getPalettes()) {
|
||||
JMenuItem item = new JMenuItem(new PaletteIcon(gradient.getColors()));
|
||||
item.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
gradientSlider.setValues(gradient.getPositions(), gradient.getColors());
|
||||
}
|
||||
});
|
||||
recentMenu.add(item);
|
||||
}
|
||||
popupMenu.add(recentMenu);
|
||||
|
||||
return popupMenu;
|
||||
}
|
||||
|
||||
private void addRecentPalette() {
|
||||
RankingElementColorTransformer.LinearGradient gradient = colorTransformer.getLinearGradient();
|
||||
recentPalettes.add(gradient);
|
||||
}
|
||||
|
||||
private Color[] invert(Color[] source) {
|
||||
int len = source.length;
|
||||
Color[] res = new Color[len];
|
||||
for (int i = 0; i < len; i++) {
|
||||
res[i] = source[len - 1 - i];
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
private float[] invert(float[] source) {
|
||||
int len = source.length;
|
||||
float[] res = new float[len];
|
||||
for (int i = 0; i < len; i++) {
|
||||
res[i] = 1 - source[len - 1 - i];
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
private byte[] serializePositions(float[] positions) throws Exception {
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||
ObjectOutputStream out = new ObjectOutputStream(bos);
|
||||
out.writeObject(positions);
|
||||
out.close();
|
||||
return bos.toByteArray();
|
||||
}
|
||||
|
||||
private float[] deserializePositions(byte[] positions) throws Exception {
|
||||
ByteArrayInputStream bis = new ByteArrayInputStream(positions);
|
||||
ObjectInputStream in = new ObjectInputStream(bis);
|
||||
float[] array = (float[]) in.readObject();
|
||||
in.close();
|
||||
return array;
|
||||
}
|
||||
|
||||
private byte[] serializeColors(Color[] colors) throws Exception {
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||
ObjectOutputStream out = new ObjectOutputStream(bos);
|
||||
out.writeObject(colors);
|
||||
out.close();
|
||||
return bos.toByteArray();
|
||||
}
|
||||
|
||||
private Color[] deserializeColors(byte[] colors) throws Exception {
|
||||
ByteArrayInputStream bis = new ByteArrayInputStream(colors);
|
||||
ObjectInputStream in = new ObjectInputStream(bis);
|
||||
Color[] array = (Color[]) in.readObject();
|
||||
in.close();
|
||||
return array;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called from within the constructor to initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is always
|
||||
* regenerated by the Form Editor.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents() {
|
||||
|
||||
labelColor = new javax.swing.JLabel();
|
||||
gradientPanel = new javax.swing.JPanel();
|
||||
colorSwatchToolbar = new javax.swing.JToolBar();
|
||||
colorSwatchButton = new javax.swing.JButton();
|
||||
|
||||
setPreferredSize(new java.awt.Dimension(225, 114));
|
||||
|
||||
labelColor.setText(org.openide.util.NbBundle.getMessage(RankingColorTransformerPanel.class, "RankingColorTransformerPanel.labelColor.text")); // NOI18N
|
||||
|
||||
gradientPanel.setOpaque(false);
|
||||
gradientPanel.setLayout(new java.awt.BorderLayout());
|
||||
|
||||
colorSwatchToolbar.setFloatable(false);
|
||||
colorSwatchToolbar.setRollover(true);
|
||||
colorSwatchToolbar.setOpaque(false);
|
||||
|
||||
colorSwatchButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/appearance/plugin/resources/color-swatch.png"))); // NOI18N
|
||||
colorSwatchButton.setFocusable(false);
|
||||
colorSwatchButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
|
||||
colorSwatchButton.setIconTextGap(0);
|
||||
colorSwatchButton.setMargin(new java.awt.Insets(0, 0, 0, 0));
|
||||
colorSwatchButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
|
||||
colorSwatchToolbar.add(colorSwatchButton);
|
||||
|
||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||
this.setLayout(layout);
|
||||
layout.setHorizontalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addComponent(labelColor)
|
||||
.addGap(18, 18, 18)
|
||||
.addComponent(gradientPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||
.addComponent(colorSwatchToolbar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||
);
|
||||
layout.setVerticalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(colorSwatchToolbar, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
||||
.addComponent(labelColor, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(gradientPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 17, javax.swing.GroupLayout.PREFERRED_SIZE))))
|
||||
.addContainerGap(88, Short.MAX_VALUE))
|
||||
);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.JButton colorSwatchButton;
|
||||
private javax.swing.JToolBar colorSwatchToolbar;
|
||||
private javax.swing.JPanel gradientPanel;
|
||||
private javax.swing.JLabel labelColor;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.ui.appearance.plugin;
|
||||
|
||||
import javax.swing.AbstractButton;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JPanel;
|
||||
import org.gephi.appearance.api.Function;
|
||||
import org.gephi.appearance.api.RankingFunction;
|
||||
import org.gephi.appearance.plugin.RankingElementColorTransformer;
|
||||
import org.gephi.appearance.spi.RankingTransformer;
|
||||
import org.gephi.appearance.spi.TransformerCategory;
|
||||
import org.gephi.appearance.spi.TransformerUI;
|
||||
import org.gephi.ui.appearance.plugin.category.DefaultCategory;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.util.lookup.ServiceProvider;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
@ServiceProvider(service = TransformerUI.class, position = 200)
|
||||
public class RankingElementColorTransformerUI implements TransformerUI {
|
||||
|
||||
private RankingColorTransformerPanel panel;
|
||||
|
||||
@Override
|
||||
public TransformerCategory getCategory() {
|
||||
return DefaultCategory.COLOR;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Icon getIcon() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return NbBundle.getMessage(UniqueElementColorTransformerUI.class, "Attribute.name");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized JPanel getPanel(Function function) {
|
||||
if (panel == null) {
|
||||
panel = new RankingColorTransformerPanel();
|
||||
}
|
||||
panel.setup((RankingFunction) function);
|
||||
return panel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized AbstractButton[] getControlButton() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends RankingTransformer> getTransformerClass() {
|
||||
return RankingElementColorTransformer.class;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.ui.appearance.plugin;
|
||||
|
||||
import javax.swing.AbstractButton;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JPanel;
|
||||
import org.gephi.appearance.api.Function;
|
||||
import org.gephi.appearance.api.RankingFunction;
|
||||
import org.gephi.appearance.plugin.RankingNodeSizeTransformer;
|
||||
import org.gephi.appearance.spi.RankingTransformer;
|
||||
import org.gephi.appearance.spi.TransformerCategory;
|
||||
import org.gephi.appearance.spi.TransformerUI;
|
||||
import org.gephi.ui.appearance.plugin.category.DefaultCategory;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.util.lookup.ServiceProvider;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
@ServiceProvider(service = TransformerUI.class, position = 300)
|
||||
public class RankingElementSizeTransformerUI implements TransformerUI {
|
||||
|
||||
private RankingSizeTransformerPanel panel;
|
||||
|
||||
@Override
|
||||
public TransformerCategory getCategory() {
|
||||
return DefaultCategory.SIZE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Icon getIcon() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return NbBundle.getMessage(UniqueElementColorTransformerUI.class, "Attribute.name");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized JPanel getPanel(Function function) {
|
||||
if (panel == null) {
|
||||
panel = new RankingSizeTransformerPanel();
|
||||
}
|
||||
panel.setup((RankingFunction) function);
|
||||
return panel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized AbstractButton[] getControlButton() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends RankingTransformer> getTransformerClass() {
|
||||
return RankingNodeSizeTransformer.class;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||
<Properties>
|
||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||
<Dimension value="[225, 114]"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="labelMinSize" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace min="-2" pref="8" max="-2" attributes="0"/>
|
||||
<Component id="minSize" min="-2" pref="55" max="-2" attributes="1"/>
|
||||
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||
<Component id="labelMaxSize" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="maxSize" min="-2" pref="55" max="-2" attributes="1"/>
|
||||
<EmptySpace max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="3" attributes="0">
|
||||
<Component id="minSize" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="maxSize" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="labelMaxSize" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="labelMinSize" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace pref="80" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JLabel" name="labelMinSize">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/gephi/ui/appearance/plugin/Bundle.properties" key="RankingSizeTransformerPanel.labelMinSize.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JSpinner" name="minSize">
|
||||
<Properties>
|
||||
<Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor">
|
||||
<SpinnerModel initial="1.0" minimum="0.1" numberType="java.lang.Float" stepSize="0.5" type="number"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="labelMaxSize">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/gephi/ui/appearance/plugin/Bundle.properties" key="RankingSizeTransformerPanel.labelMaxSize.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JSpinner" name="maxSize">
|
||||
<Properties>
|
||||
<Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor">
|
||||
<SpinnerModel initial="4.0" minimum="0.5" numberType="java.lang.Float" stepSize="0.5" type="number"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Form>
|
||||
@@ -0,0 +1,148 @@
|
||||
/*
|
||||
Copyright 2008-2010 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2011 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2011 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.ui.appearance.plugin;
|
||||
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import org.gephi.appearance.api.RankingFunction;
|
||||
import org.gephi.appearance.plugin.RankingNodeSizeTransformer;
|
||||
import org.openide.util.NbPreferences;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Mathieu Bastian
|
||||
*/
|
||||
public class RankingSizeTransformerPanel extends javax.swing.JPanel {
|
||||
|
||||
private RankingNodeSizeTransformer sizeTransformer;
|
||||
|
||||
public RankingSizeTransformerPanel() {
|
||||
initComponents();
|
||||
}
|
||||
|
||||
public void setup(RankingFunction function) {
|
||||
sizeTransformer = (RankingNodeSizeTransformer) function.getTransformer();
|
||||
|
||||
final String MIN_SIZE = "RankingSizeTransformerPanel_" + sizeTransformer.getClass().getSimpleName() + "_min";
|
||||
final String MAX_SIZE = "RankingSizeTransformerPanel_" + sizeTransformer.getClass().getSimpleName() + "_max";
|
||||
|
||||
float minSizeStart = NbPreferences.forModule(RankingSizeTransformerPanel.class).getFloat(MIN_SIZE, sizeTransformer.getMinSize());
|
||||
float maxSizeStart = NbPreferences.forModule(RankingSizeTransformerPanel.class).getFloat(MAX_SIZE, sizeTransformer.getMaxSize());
|
||||
sizeTransformer.setMinSize(minSizeStart);
|
||||
sizeTransformer.setMaxSize(maxSizeStart);
|
||||
|
||||
minSize.setValue(minSizeStart);
|
||||
maxSize.setValue(maxSizeStart);
|
||||
minSize.addChangeListener(new ChangeListener() {
|
||||
@Override
|
||||
public void stateChanged(ChangeEvent e) {
|
||||
sizeTransformer.setMinSize((Float) minSize.getValue());
|
||||
NbPreferences.forModule(RankingSizeTransformerPanel.class).putFloat(MIN_SIZE, (Float) minSize.getValue());
|
||||
}
|
||||
});
|
||||
maxSize.addChangeListener(new ChangeListener() {
|
||||
@Override
|
||||
public void stateChanged(ChangeEvent e) {
|
||||
sizeTransformer.setMaxSize((Float) maxSize.getValue());
|
||||
NbPreferences.forModule(RankingSizeTransformerPanel.class).putFloat(MAX_SIZE, (Float) maxSize.getValue());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called from within the constructor to initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is always
|
||||
* regenerated by the Form Editor.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents() {
|
||||
|
||||
labelMinSize = new javax.swing.JLabel();
|
||||
minSize = new javax.swing.JSpinner();
|
||||
labelMaxSize = new javax.swing.JLabel();
|
||||
maxSize = new javax.swing.JSpinner();
|
||||
|
||||
setPreferredSize(new java.awt.Dimension(225, 114));
|
||||
|
||||
labelMinSize.setText(org.openide.util.NbBundle.getMessage(RankingSizeTransformerPanel.class, "RankingSizeTransformerPanel.labelMinSize.text")); // NOI18N
|
||||
|
||||
minSize.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(1.0f), Float.valueOf(0.1f), null, Float.valueOf(0.5f)));
|
||||
|
||||
labelMaxSize.setText(org.openide.util.NbBundle.getMessage(RankingSizeTransformerPanel.class, "RankingSizeTransformerPanel.labelMaxSize.text")); // NOI18N
|
||||
|
||||
maxSize.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(4.0f), Float.valueOf(0.5f), null, Float.valueOf(0.5f)));
|
||||
|
||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||
this.setLayout(layout);
|
||||
layout.setHorizontalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addComponent(labelMinSize)
|
||||
.addGap(8, 8, 8)
|
||||
.addComponent(minSize, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addGap(18, 18, 18)
|
||||
.addComponent(labelMaxSize)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(maxSize, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
||||
);
|
||||
layout.setVerticalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||
.addComponent(minSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(maxSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(labelMaxSize)
|
||||
.addComponent(labelMinSize))
|
||||
.addContainerGap(80, Short.MAX_VALUE))
|
||||
);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.JLabel labelMaxSize;
|
||||
private javax.swing.JLabel labelMinSize;
|
||||
private javax.swing.JSpinner maxSize;
|
||||
private javax.swing.JSpinner minSize;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
}
|
||||
@@ -0,0 +1,182 @@
|
||||
/*
|
||||
Copyright 2008-2010 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2011 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2011 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.ui.appearance.plugin;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.prefs.BackingStoreException;
|
||||
import java.util.prefs.Preferences;
|
||||
import org.gephi.appearance.plugin.RankingElementColorTransformer.LinearGradient;
|
||||
import org.openide.util.NbPreferences;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Mathieu Bastian
|
||||
*/
|
||||
public class RecentPalettes {
|
||||
|
||||
protected static String DEFAULT_NODE_NAME = "prefs";
|
||||
public static final String COLORS = "PaletteColors";
|
||||
public static final String POSITIONS = "PalettePositions";
|
||||
private List<LinearGradient> gradients;
|
||||
private int maxSize;
|
||||
protected String nodeName = null;
|
||||
|
||||
public RecentPalettes() {
|
||||
nodeName = "recentpalettes";
|
||||
maxSize = 14;
|
||||
gradients = new ArrayList<LinearGradient>(maxSize);
|
||||
retrieve();
|
||||
}
|
||||
|
||||
public void add(LinearGradient gradient) {
|
||||
//Remove the old
|
||||
gradients.remove(gradient);
|
||||
|
||||
// add to the top
|
||||
gradients.add(0, gradient);
|
||||
while (gradients.size() > maxSize) {
|
||||
gradients.remove(gradients.size() - 1);
|
||||
}
|
||||
|
||||
store();
|
||||
}
|
||||
|
||||
public LinearGradient[] getPalettes() {
|
||||
return gradients.toArray(new LinearGradient[0]);
|
||||
}
|
||||
|
||||
protected void store() {
|
||||
Preferences prefs = getPreferences();
|
||||
|
||||
// clear the backing store
|
||||
try {
|
||||
prefs.clear();
|
||||
} catch (BackingStoreException ex) {
|
||||
}
|
||||
|
||||
for (int i = 0; i < gradients.size(); i++) {
|
||||
LinearGradient gradient = gradients.get(i);
|
||||
try {
|
||||
prefs.putByteArray(COLORS + i, serializeColors(gradient.getColors()));
|
||||
prefs.putByteArray(POSITIONS + i, serializePositions(gradient.getPositions()));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void retrieve() {
|
||||
gradients.clear();
|
||||
Preferences prefs = getPreferences();
|
||||
|
||||
for (int i = 0; i < maxSize; i++) {
|
||||
byte[] cols = prefs.getByteArray(COLORS + i, null);
|
||||
byte[] poss = prefs.getByteArray(POSITIONS + i, null);
|
||||
if (cols != null && poss != null) {
|
||||
try {
|
||||
Color[] colors = deserializeColors(cols);
|
||||
float[] posisitons = deserializePositions(poss);
|
||||
LinearGradient linearGradient = new LinearGradient(colors, posisitons);
|
||||
gradients.add(linearGradient);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the backing store Preferences
|
||||
*
|
||||
* @return Preferences
|
||||
*/
|
||||
protected final Preferences getPreferences() {
|
||||
String name = DEFAULT_NODE_NAME;
|
||||
if (nodeName != null) {
|
||||
name = nodeName;
|
||||
}
|
||||
|
||||
Preferences prefs = NbPreferences.forModule(this.getClass()).node("options").node(name);
|
||||
|
||||
return prefs;
|
||||
}
|
||||
|
||||
private byte[] serializePositions(float[] positions) throws Exception {
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||
ObjectOutputStream out = new ObjectOutputStream(bos);
|
||||
out.writeObject(positions);
|
||||
out.close();
|
||||
return bos.toByteArray();
|
||||
}
|
||||
|
||||
private float[] deserializePositions(byte[] positions) throws Exception {
|
||||
ByteArrayInputStream bis = new ByteArrayInputStream(positions);
|
||||
ObjectInputStream in = new ObjectInputStream(bis);
|
||||
float[] array = (float[]) in.readObject();
|
||||
in.close();
|
||||
return array;
|
||||
}
|
||||
|
||||
private byte[] serializeColors(Color[] colors) throws Exception {
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||
ObjectOutputStream out = new ObjectOutputStream(bos);
|
||||
out.writeObject(colors);
|
||||
out.close();
|
||||
return bos.toByteArray();
|
||||
}
|
||||
|
||||
private Color[] deserializeColors(byte[] colors) throws Exception {
|
||||
ByteArrayInputStream bis = new ByteArrayInputStream(colors);
|
||||
ObjectInputStream in = new ObjectInputStream(bis);
|
||||
Color[] array = (Color[]) in.readObject();
|
||||
in.close();
|
||||
return array;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.4" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="colorChooser" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="colorLabel" min="-2" pref="380" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Component id="colorLabel" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="colorChooser" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace min="-2" pref="278" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Container class="net.java.dev.colorchooser.ColorChooser" name="colorChooser">
|
||||
<Properties>
|
||||
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||
<Dimension value="[14, 14]"/>
|
||||
</Property>
|
||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||
<Dimension value="[14, 14]"/>
|
||||
</Property>
|
||||
<Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/gephi/ui/appearance/plugin/Bundle.properties" key="UniqueColorTransformerPanel.colorChooser.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<EmptySpace min="0" pref="12" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<EmptySpace min="0" pref="12" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
</Layout>
|
||||
</Container>
|
||||
<Component class="javax.swing.JLabel" name="colorLabel">
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Form>
|
||||
@@ -0,0 +1,136 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.ui.appearance.plugin;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import org.gephi.appearance.api.SimpleFunction;
|
||||
import org.gephi.appearance.plugin.UniqueElementColorTransformer;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public class UniqueColorTransformerPanel extends javax.swing.JPanel {
|
||||
|
||||
private UniqueElementColorTransformer transformer;
|
||||
|
||||
/**
|
||||
* Creates new form UniqueNodeColorTransformerPanel
|
||||
*/
|
||||
public UniqueColorTransformerPanel() {
|
||||
initComponents();
|
||||
|
||||
colorChooser.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
transformer.setColor(colorChooser.getColor());
|
||||
colorLabel.setText(getHex(colorChooser.getColor()));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setup(SimpleFunction function) {
|
||||
transformer = (UniqueElementColorTransformer) function.getTransformer();
|
||||
colorChooser.setColor(transformer.getColor());
|
||||
colorLabel.setText(getHex(transformer.getColor()));
|
||||
}
|
||||
|
||||
private String getHex(Color color) {
|
||||
return "#" + String.format("%06x", color.getRGB() & 0x00FFFFFF);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called from within the constructor to initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is always
|
||||
* regenerated by the Form Editor.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents() {
|
||||
java.awt.GridBagConstraints gridBagConstraints;
|
||||
|
||||
colorChooser = new net.java.dev.colorchooser.ColorChooser();
|
||||
colorLabel = new javax.swing.JLabel();
|
||||
|
||||
colorChooser.setMinimumSize(new java.awt.Dimension(14, 14));
|
||||
colorChooser.setPreferredSize(new java.awt.Dimension(14, 14));
|
||||
colorChooser.setToolTipText(org.openide.util.NbBundle.getMessage(UniqueColorTransformerPanel.class, "UniqueColorTransformerPanel.colorChooser.toolTipText")); // NOI18N
|
||||
|
||||
javax.swing.GroupLayout colorChooserLayout = new javax.swing.GroupLayout(colorChooser);
|
||||
colorChooser.setLayout(colorChooserLayout);
|
||||
colorChooserLayout.setHorizontalGroup(
|
||||
colorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 12, Short.MAX_VALUE)
|
||||
);
|
||||
colorChooserLayout.setVerticalGroup(
|
||||
colorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 12, Short.MAX_VALUE)
|
||||
);
|
||||
|
||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||
this.setLayout(layout);
|
||||
layout.setHorizontalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addComponent(colorChooser, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(colorLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 380, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addContainerGap())
|
||||
);
|
||||
layout.setVerticalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(colorLabel)
|
||||
.addComponent(colorChooser, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||
.addGap(278, 278, 278))
|
||||
);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private net.java.dev.colorchooser.ColorChooser colorChooser;
|
||||
private javax.swing.JLabel colorLabel;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.ui.appearance.plugin;
|
||||
|
||||
import javax.swing.AbstractButton;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JPanel;
|
||||
import org.gephi.appearance.api.Function;
|
||||
import org.gephi.appearance.api.SimpleFunction;
|
||||
import org.gephi.appearance.plugin.UniqueElementColorTransformer;
|
||||
import org.gephi.appearance.spi.SimpleTransformer;
|
||||
import org.gephi.appearance.spi.TransformerCategory;
|
||||
import org.gephi.appearance.spi.TransformerUI;
|
||||
import org.gephi.ui.appearance.plugin.category.DefaultCategory;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.util.lookup.ServiceProvider;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
@ServiceProvider(service = TransformerUI.class, position = 100)
|
||||
public class UniqueElementColorTransformerUI implements TransformerUI {
|
||||
|
||||
private UniqueColorTransformerPanel panel;
|
||||
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return NbBundle.getMessage(UniqueElementColorTransformerUI.class, "Unique.name");
|
||||
}
|
||||
|
||||
@Override
|
||||
public TransformerCategory getCategory() {
|
||||
return DefaultCategory.COLOR;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Icon getIcon() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized JPanel getPanel(Function function) {
|
||||
if (panel == null) {
|
||||
panel = new UniqueColorTransformerPanel();
|
||||
}
|
||||
panel.setup((SimpleFunction) function);
|
||||
return panel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized AbstractButton[] getControlButton() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends SimpleTransformer> getTransformerClass() {
|
||||
return UniqueElementColorTransformer.class;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.ui.appearance.plugin;
|
||||
|
||||
import javax.swing.AbstractButton;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JPanel;
|
||||
import org.gephi.appearance.api.Function;
|
||||
import org.gephi.appearance.api.SimpleFunction;
|
||||
import org.gephi.appearance.plugin.UniqueNodeSizeTransformer;
|
||||
import org.gephi.appearance.spi.SimpleTransformer;
|
||||
import org.gephi.appearance.spi.TransformerCategory;
|
||||
import org.gephi.appearance.spi.TransformerUI;
|
||||
import org.gephi.ui.appearance.plugin.category.DefaultCategory;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.util.lookup.ServiceProvider;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
@ServiceProvider(service = TransformerUI.class, position = 100)
|
||||
public class UniqueNodeSizeTransformerUI implements TransformerUI {
|
||||
|
||||
private UniqueSizeTransformerPanel panel;
|
||||
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return NbBundle.getMessage(UniqueElementColorTransformerUI.class, "Unique.name");
|
||||
}
|
||||
|
||||
@Override
|
||||
public TransformerCategory getCategory() {
|
||||
return DefaultCategory.SIZE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Icon getIcon() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized JPanel getPanel(Function function) {
|
||||
if (panel == null) {
|
||||
panel = new UniqueSizeTransformerPanel();
|
||||
}
|
||||
panel.setup((SimpleFunction) function);
|
||||
return panel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized AbstractButton[] getControlButton() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<? extends SimpleTransformer> getTransformerClass() {
|
||||
return UniqueNodeSizeTransformer.class;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.5" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="sizeSpinner" min="-2" max="-2" attributes="1"/>
|
||||
<EmptySpace pref="294" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="3" attributes="0">
|
||||
<Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="sizeSpinner" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace pref="266" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JLabel" name="jLabel1">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/gephi/ui/appearance/plugin/Bundle.properties" key="UniqueSizeTransformerPanel.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JSpinner" name="sizeSpinner">
|
||||
<Properties>
|
||||
<Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor">
|
||||
<SpinnerModel initial="1.0" minimum="0.1" numberType="java.lang.Float" stepSize="0.5" type="number"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Form>
|
||||
@@ -0,0 +1,114 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.ui.appearance.plugin;
|
||||
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import org.gephi.appearance.api.SimpleFunction;
|
||||
import org.gephi.appearance.plugin.UniqueNodeSizeTransformer;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public class UniqueSizeTransformerPanel extends javax.swing.JPanel {
|
||||
|
||||
private UniqueNodeSizeTransformer transformer;
|
||||
|
||||
public UniqueSizeTransformerPanel() {
|
||||
initComponents();
|
||||
|
||||
sizeSpinner.addChangeListener(new ChangeListener() {
|
||||
@Override
|
||||
public void stateChanged(ChangeEvent e) {
|
||||
transformer.setSize((Float) sizeSpinner.getValue());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setup(SimpleFunction function) {
|
||||
transformer = (UniqueNodeSizeTransformer) function.getTransformer();
|
||||
sizeSpinner.setValue(transformer.getSize());
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called from within the constructor to initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is always
|
||||
* regenerated by the Form Editor.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents() {
|
||||
|
||||
jLabel1 = new javax.swing.JLabel();
|
||||
sizeSpinner = new javax.swing.JSpinner();
|
||||
|
||||
jLabel1.setText(org.openide.util.NbBundle.getMessage(UniqueSizeTransformerPanel.class, "UniqueSizeTransformerPanel.jLabel1.text")); // NOI18N
|
||||
|
||||
sizeSpinner.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(1.0f), Float.valueOf(0.1f), null, Float.valueOf(0.5f)));
|
||||
|
||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||
this.setLayout(layout);
|
||||
layout.setHorizontalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addComponent(jLabel1)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(sizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addContainerGap(294, Short.MAX_VALUE))
|
||||
);
|
||||
layout.setVerticalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||
.addComponent(jLabel1)
|
||||
.addComponent(sizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||
.addContainerGap(266, Short.MAX_VALUE))
|
||||
);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.JLabel jLabel1;
|
||||
private javax.swing.JSpinner sizeSpinner;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.ui.appearance.plugin.category;
|
||||
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.ImageIcon;
|
||||
import org.gephi.appearance.spi.TransformerCategory;
|
||||
import org.openide.util.NbBundle;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public class DefaultCategory {
|
||||
|
||||
public static TransformerCategory SIZE = new TransformerCategory() {
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return NbBundle.getMessage(DefaultCategory.class, "Category.Size.name");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Icon getIcon() {
|
||||
return new ImageIcon(getClass().getResource("/org/gephi/ui/appearance/plugin/resources/size.png"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SIZE";
|
||||
}
|
||||
};
|
||||
public static TransformerCategory COLOR = new TransformerCategory() {
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return NbBundle.getMessage(DefaultCategory.class, "Category.Color.name");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Icon getIcon() {
|
||||
return new ImageIcon(getClass().getResource("/org/gephi/ui/appearance/plugin/resources/color.png"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "COLOR";
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<Form version="1.6" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
|
||||
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||
</AuxValues>
|
||||
|
||||
<Layout>
|
||||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Component id="centerScrollPanel" max="32767" attributes="0"/>
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<Component id="presetCombo" min="-2" pref="216" max="-2" attributes="0"/>
|
||||
<EmptySpace pref="73" max="32767" attributes="0"/>
|
||||
<Component id="generateButton" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<Group type="102" attributes="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<Component id="labelColorCount" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||
<Component id="colorCountLabel" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<Component id="labelPreset" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Group type="102" alignment="0" attributes="0">
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="3" attributes="0">
|
||||
<Component id="labelColorCount" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="colorCountLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||
<Component id="labelPreset" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Group type="103" groupAlignment="3" attributes="0">
|
||||
<Component id="presetCombo" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
<Component id="generateButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="centerScrollPanel" pref="208" max="32767" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
</Layout>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JLabel" name="labelColorCount">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/gephi/ui/appearance/plugin/palette/Bundle.properties" key="PaletteGeneratorPanel.labelColorCount.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="colorCountLabel">
|
||||
</Component>
|
||||
<Component class="javax.swing.JLabel" name="labelPreset">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/gephi/ui/appearance/plugin/palette/Bundle.properties" key="PaletteGeneratorPanel.labelPreset.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JComboBox" name="presetCombo">
|
||||
<Properties>
|
||||
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
|
||||
<StringArray count="0"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component class="javax.swing.JButton" name="generateButton">
|
||||
<Properties>
|
||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||
<ResourceString bundle="org/gephi/ui/appearance/plugin/palette/Bundle.properties" key="PaletteGeneratorPanel.generateButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Container class="javax.swing.JScrollPane" name="centerScrollPanel">
|
||||
<Properties>
|
||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="null" type="code"/>
|
||||
</Property>
|
||||
<Property name="opaque" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||
<SubComponents>
|
||||
<Container class="javax.swing.JPanel" name="centerPanel">
|
||||
|
||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
|
||||
<SubComponents>
|
||||
<Component class="javax.swing.JTable" name="colorTable">
|
||||
<Properties>
|
||||
<Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor">
|
||||
<Table columnCount="0" rowCount="0"/>
|
||||
</Property>
|
||||
<Property name="opaque" type="boolean" value="false"/>
|
||||
<Property name="rowHeight" type="int" value="22"/>
|
||||
<Property name="selectionModel" type="javax.swing.ListSelectionModel" editor="org.netbeans.modules.form.editors2.JTableSelectionModelEditor">
|
||||
<JTableSelectionModel selectionMode="0"/>
|
||||
</Property>
|
||||
<Property name="showHorizontalLines" type="boolean" value="false"/>
|
||||
<Property name="showVerticalLines" type="boolean" value="false"/>
|
||||
<Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="null" type="code"/>
|
||||
</Property>
|
||||
</Properties>
|
||||
<Constraints>
|
||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="10" weightX="1.0" weightY="1.0"/>
|
||||
</Constraint>
|
||||
</Constraints>
|
||||
</Component>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Container>
|
||||
</SubComponents>
|
||||
</Form>
|
||||
@@ -0,0 +1,246 @@
|
||||
/*
|
||||
Copyright 2008-2013 Gephi
|
||||
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
|
||||
Website : http://www.gephi.org
|
||||
|
||||
This file is part of Gephi.
|
||||
|
||||
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
||||
|
||||
Copyright 2013 Gephi Consortium. All rights reserved.
|
||||
|
||||
The contents of this file are subject to the terms of either the GNU
|
||||
General Public License Version 3 only ("GPL") or the Common
|
||||
Development and Distribution License("CDDL") (collectively, the
|
||||
"License"). You may not use this file except in compliance with the
|
||||
License. You can obtain a copy of the License at
|
||||
http://gephi.org/about/legal/license-notice/
|
||||
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
|
||||
specific language governing permissions and limitations under the
|
||||
License. When distributing the software, include this License Header
|
||||
Notice in each file and include the License files at
|
||||
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
|
||||
License Header, with the fields enclosed by brackets [] replaced by
|
||||
your own identifying information:
|
||||
"Portions Copyrighted [year] [name of copyright owner]"
|
||||
|
||||
If you wish your version of this file to be governed by only the CDDL
|
||||
or only the GPL Version 3, indicate your decision by adding
|
||||
"[Contributor] elects to include this software in this distribution
|
||||
under the [CDDL or GPL Version 3] license." If you do not indicate a
|
||||
single choice of license, a recipient has the option to distribute
|
||||
your version of this file under either the CDDL, the GPL Version 3 or
|
||||
to extend the choice of license to its licensees as provided above.
|
||||
However, if you add GPL Version 3 code and therefore, elected the GPL
|
||||
Version 3 license, then the option applies only if the new code is
|
||||
made subject to such option by the copyright holder.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
Portions Copyrighted 2013 Gephi Consortium.
|
||||
*/
|
||||
package org.gephi.ui.appearance.plugin.palette;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.awt.event.ItemListener;
|
||||
import javax.swing.DefaultComboBoxModel;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JTable;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
import javax.swing.table.TableColumn;
|
||||
import org.gephi.appearance.plugin.palette.Palette;
|
||||
import org.gephi.appearance.plugin.palette.PaletteManager;
|
||||
import org.gephi.appearance.plugin.palette.Preset;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author mbastian
|
||||
*/
|
||||
public class PaletteGeneratorPanel extends javax.swing.JPanel {
|
||||
|
||||
private Preset selectedPreset;
|
||||
private Palette selectedPalette;
|
||||
|
||||
public PaletteGeneratorPanel() {
|
||||
initComponents();
|
||||
|
||||
//Preset Model
|
||||
DefaultComboBoxModel model = new DefaultComboBoxModel();
|
||||
for (Preset preset : PaletteManager.getInstance().getPresets()) {
|
||||
model.addElement(preset);
|
||||
}
|
||||
selectedPreset = (Preset) model.getElementAt(0);
|
||||
presetCombo.setModel(model);
|
||||
|
||||
presetCombo.addItemListener(new ItemListener() {
|
||||
@Override
|
||||
public void itemStateChanged(ItemEvent e) {
|
||||
if (presetCombo.getSelectedItem() != selectedPreset) {
|
||||
selectedPreset = (Preset) presetCombo.getSelectedItem();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//Generate
|
||||
generateButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
generate();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void generate() {
|
||||
int colorCount = Integer.parseInt(colorCountLabel.getText());
|
||||
selectedPalette = PaletteManager.getInstance().generatePalette(colorCount, selectedPreset);
|
||||
|
||||
String[] columnNames = new String[]{"Color"};
|
||||
DefaultTableModel model = new DefaultTableModel(columnNames, colorCount) {
|
||||
@Override
|
||||
public boolean isCellEditable(int row, int column) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
colorTable.setModel(model);
|
||||
|
||||
TableColumn colorCol = colorTable.getColumnModel().getColumn(0);
|
||||
colorCol.setCellRenderer(new ColorCellRenderer());
|
||||
|
||||
int row = 0;
|
||||
for (Color c : selectedPalette.getColors()) {
|
||||
model.setValueAt(c, row++, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public void setup(int colorsCount) {
|
||||
colorCountLabel.setText(String.valueOf(colorsCount));
|
||||
}
|
||||
|
||||
public Palette getSelectedPalette() {
|
||||
return selectedPalette;
|
||||
}
|
||||
|
||||
class ColorCellRenderer extends JLabel implements TableCellRenderer {
|
||||
|
||||
public ColorCellRenderer() {
|
||||
setOpaque(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
|
||||
Color c = (Color) value;
|
||||
setBackground(c);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called from within the constructor to initialize the form.
|
||||
* WARNING: Do NOT modify this code. The content of this method is always
|
||||
* regenerated by the Form Editor.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents() {
|
||||
java.awt.GridBagConstraints gridBagConstraints;
|
||||
|
||||
labelColorCount = new javax.swing.JLabel();
|
||||
colorCountLabel = new javax.swing.JLabel();
|
||||
labelPreset = new javax.swing.JLabel();
|
||||
presetCombo = new javax.swing.JComboBox();
|
||||
generateButton = new javax.swing.JButton();
|
||||
centerScrollPanel = new javax.swing.JScrollPane();
|
||||
centerPanel = new javax.swing.JPanel();
|
||||
colorTable = new javax.swing.JTable();
|
||||
|
||||
labelColorCount.setText(org.openide.util.NbBundle.getMessage(PaletteGeneratorPanel.class, "PaletteGeneratorPanel.labelColorCount.text")); // NOI18N
|
||||
|
||||
labelPreset.setText(org.openide.util.NbBundle.getMessage(PaletteGeneratorPanel.class, "PaletteGeneratorPanel.labelPreset.text")); // NOI18N
|
||||
|
||||
generateButton.setText(org.openide.util.NbBundle.getMessage(PaletteGeneratorPanel.class, "PaletteGeneratorPanel.generateButton.text")); // NOI18N
|
||||
|
||||
centerScrollPanel.setBorder(null);
|
||||
centerScrollPanel.setOpaque(false);
|
||||
|
||||
centerPanel.setLayout(new java.awt.GridBagLayout());
|
||||
|
||||
colorTable.setModel(new javax.swing.table.DefaultTableModel(
|
||||
new Object [][] {
|
||||
|
||||
},
|
||||
new String [] {
|
||||
|
||||
}
|
||||
));
|
||||
colorTable.setOpaque(false);
|
||||
colorTable.setRowHeight(22);
|
||||
colorTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
|
||||
colorTable.setShowHorizontalLines(false);
|
||||
colorTable.setShowVerticalLines(false);
|
||||
colorTable.setTableHeader(null);
|
||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||
gridBagConstraints.gridx = 0;
|
||||
gridBagConstraints.gridy = 0;
|
||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||
gridBagConstraints.weightx = 1.0;
|
||||
gridBagConstraints.weighty = 1.0;
|
||||
centerPanel.add(colorTable, gridBagConstraints);
|
||||
|
||||
centerScrollPanel.setViewportView(centerPanel);
|
||||
|
||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||
this.setLayout(layout);
|
||||
layout.setHorizontalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(centerScrollPanel)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addComponent(presetCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 216, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 73, Short.MAX_VALUE)
|
||||
.addComponent(generateButton))
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addComponent(labelColorCount)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||
.addComponent(colorCountLabel))
|
||||
.addComponent(labelPreset))
|
||||
.addGap(0, 0, Short.MAX_VALUE)))
|
||||
.addContainerGap())
|
||||
);
|
||||
layout.setVerticalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addContainerGap()
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||
.addComponent(labelColorCount)
|
||||
.addComponent(colorCountLabel))
|
||||
.addGap(18, 18, 18)
|
||||
.addComponent(labelPreset)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||
.addComponent(presetCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addComponent(generateButton))
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(centerScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 208, Short.MAX_VALUE)
|
||||
.addContainerGap())
|
||||
);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private javax.swing.JPanel centerPanel;
|
||||
private javax.swing.JScrollPane centerScrollPanel;
|
||||
private javax.swing.JLabel colorCountLabel;
|
||||
private javax.swing.JTable colorTable;
|
||||
private javax.swing.JButton generateButton;
|
||||
private javax.swing.JLabel labelColorCount;
|
||||
private javax.swing.JLabel labelPreset;
|
||||
private javax.swing.JComboBox presetCombo;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
Manifest-Version: 1.0
|
||||
AutoUpdate-Essential-Module: true
|
||||
OpenIDE-Module-Localizing-Bundle: org/gephi/partition/plugin/Bundle.properties
|
||||
OpenIDE-Module-Localizing-Bundle: org/gephi/ui/appearance/plugin/Bundle.properties
|
||||
OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version}
|
||||
@@ -2,7 +2,7 @@
|
||||
<nbm>
|
||||
<!--
|
||||
<moduleType>autoload</moduleType>
|
||||
<codeNameBase>org.gephi.partition.api/1</codeNameBase>
|
||||
<codeNameBase>org.gephi.ui.appearance.plugin/1</codeNameBase>
|
||||
<licenseName>Apache License, Version 2.0</licenseName>
|
||||
<licenseFile>license.txt</licenseFile>
|
||||
-->
|
||||
@@ -0,0 +1,28 @@
|
||||
|
||||
Unique.name = Unique
|
||||
Attribute.name = Attribute
|
||||
|
||||
|
||||
ColorTransformerUI.name = Color
|
||||
SizeTransformerUI.name = Size
|
||||
LabelColorTransformerUI.name = Label Color
|
||||
LabelSizeTransformerUI.name = Label Size
|
||||
|
||||
RankingColorTransformerPanel.labelColor.text=Color:
|
||||
RankingSizeTransformerPanel.labelMaxSize.text=Max size:
|
||||
RankingSizeTransformerPanel.labelMinSize.text=Min size:
|
||||
|
||||
PalettePopup.light=Light
|
||||
PalettePopup.dark=Dark
|
||||
PalettePopup.default=Default
|
||||
PalettePopup.generate=Generate...
|
||||
PalettePopup.invert=Invert
|
||||
PalettePopup.standard=Standard
|
||||
PalettePopup.recent=Recent
|
||||
PalettePopup.norecent=No recent palette
|
||||
PalettePopup.allblack=All black
|
||||
PalettePopup.allwhite=All white
|
||||
UniqueColorTransformerPanel.colorChooser.toolTipText=Set Color
|
||||
UniqueSizeTransformerPanel.jLabel1.text=Size:
|
||||
PartitionColorTransformerPanel.paletteButton=Palette...
|
||||
PartitionColorTransformerPanel.generatePalettePanel.title=Generate Palette
|
||||
@@ -0,0 +1,2 @@
|
||||
|
||||
UniqueColorTransformerPanel.colorChooser.toolTipText=Hrana dovnit\u0159<- Barva
|
||||
@@ -0,0 +1,2 @@
|
||||
|
||||
UniqueColorTransformerPanel.colorChooser.toolTipText=Color de arista Entrante <-
|
||||
@@ -0,0 +1,2 @@
|
||||
|
||||
UniqueColorTransformerPanel.colorChooser.toolTipText=Couleur de lien ENTRANT<-
|
||||
@@ -0,0 +1,2 @@
|
||||
|
||||
UniqueColorTransformerPanel.colorChooser.toolTipText=\u6d41\u5165\u8fba<-\u8272
|
||||
@@ -0,0 +1,2 @@
|
||||
|
||||
UniqueColorTransformerPanel.colorChooser.toolTipText=Cor da aresta de entrada <-
|
||||
@@ -0,0 +1,2 @@
|
||||
|
||||
UniqueColorTransformerPanel.colorChooser.toolTipText=\u0426\u0432\u0435\u0442 \u0432\u0445\u043e\u0434. \u0440\u0451\u0431\u0435\u0440
|
||||
@@ -0,0 +1,2 @@
|
||||
|
||||
UniqueColorTransformerPanel.colorChooser.toolTipText=\u8fb9 IN<- \u989c\u8272
|
||||
@@ -0,0 +1,2 @@
|
||||
Category.Size.name = Size
|
||||
Category.Color.name = Color
|
||||
@@ -0,0 +1,3 @@
|
||||
PaletteGeneratorPanel.labelColorCount.text=Colors count:
|
||||
PaletteGeneratorPanel.generateButton.text=Generate
|
||||
PaletteGeneratorPanel.labelPreset.text=Presets
|
||||
|
Depois Largura: | Altura: | Tamanho: 359 B |
|
Antes Largura: | Altura: | Tamanho: 892 B Depois Largura: | Altura: | Tamanho: 892 B |
|
Antes Largura: | Altura: | Tamanho: 824 B Depois Largura: | Altura: | Tamanho: 824 B |
|
Antes Largura: | Altura: | Tamanho: 809 B Depois Largura: | Altura: | Tamanho: 809 B |