提交 f89c39f2 编写于 作者: M Mathieu Bastian

Fix various ranking UI issues

上级 153bbde9
......@@ -47,6 +47,8 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
......@@ -61,6 +63,7 @@ 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.ui.components.gradientslider.MultiThumbSlider;
import org.gephi.utils.PaletteUtils;
import org.gephi.utils.PaletteUtils.Palette;
import org.openide.util.NbBundle;
......@@ -78,76 +81,67 @@ public class RankingColorTransformerPanel extends javax.swing.JPanel {
public RankingColorTransformerPanel() {
initComponents();
this.recentPalettes = new RecentPalettes();
//Init slider
gradientSlider = new GradientSlider(GradientSlider.HORIZONTAL);
gradientSlider.putClientProperty("GradientSlider.includeOpacity", "false");
gradientSlider.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (colorTransformer != null
&& ((!gradientSlider.isValueAdjusting() && evt.getPropertyName().equals(MultiThumbSlider.VALUES_PROPERTY))
|| (evt.getPropertyName().equals(MultiThumbSlider.ADJUST_PROPERTY) && evt.getNewValue().equals(Boolean.FALSE)))) {
Color[] colors = gradientSlider.getColors();
float[] positions = gradientSlider.getThumbPositions();
if (!Arrays.equals(positions, colorTransformer.getColorPositions()) || !Arrays.deepEquals(colors, colorTransformer.getColors())) {
colorTransformer.setColors(Arrays.copyOf(colors, colors.length));
colorTransformer.setColorPositions(Arrays.copyOf(positions, positions.length));
try {
NbPreferences.forModule(RankingColorTransformerPanel.class).putByteArray(getPositionKey(), serializePositions(positions));
NbPreferences.forModule(RankingColorTransformerPanel.class).putByteArray(getColorKey(), serializeColors(colors));
} catch (Exception ex) {
ex.printStackTrace();
}
addRecentPalette();
}
// prepareGradientTooltip();
}
}
});
gradientPanel.add(gradientSlider, BorderLayout.CENTER);
//Color Swatch
colorSwatchButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
JPopupMenu popupMenu = getPalettePopupMenu();
popupMenu.show(colorSwatchToolbar, -popupMenu.getPreferredSize().width, 0);
}
});
}
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)));
positionsStart = deserializePositions(NbPreferences.forModule(RankingColorTransformerPanel.class).getByteArray(getPositionKey(), serializePositions(positionsStart)));
colorsStart = deserializeColors(NbPreferences.forModule(RankingColorTransformerPanel.class).getByteArray(getColorKey(), 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);
gradientSlider.setValues(positionsStart, colorsStart);
// 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() {
......@@ -257,6 +251,14 @@ public class RankingColorTransformerPanel extends javax.swing.JPanel {
return array;
}
private String getPositionKey() {
return "RankingColorTransformerPanel_" + colorTransformer.getClass().getSimpleName() + "_positions";
}
private String getColorKey() {
return "RankingColorTransformerPanel_" + colorTransformer.getClass().getSimpleName() + "_colors";
}
private byte[] serializeColors(Color[] colors) throws Exception {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bos);
......
......@@ -46,8 +46,7 @@ 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.LinkedList;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;
import org.gephi.appearance.plugin.RankingElementColorTransformer.LinearGradient;
......@@ -62,14 +61,14 @@ 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;
private final LinkedList<LinearGradient> gradients;
private final int maxSize;
protected String nodeName = null;
public RecentPalettes() {
nodeName = "recentpalettes";
maxSize = 14;
gradients = new ArrayList<LinearGradient>(maxSize);
gradients = new LinkedList<LinearGradient>();
retrieve();
}
......@@ -78,9 +77,9 @@ public class RecentPalettes {
gradients.remove(gradient);
// add to the top
gradients.add(0, gradient);
gradients.push(new LinearGradient(gradient.getColors(), gradient.getPositions()));
while (gradients.size() > maxSize) {
gradients.remove(gradients.size() - 1);
gradients.removeLast();
}
store();
......@@ -90,7 +89,7 @@ public class RecentPalettes {
return gradients.toArray(new LinearGradient[0]);
}
protected void store() {
private void store() {
Preferences prefs = getPreferences();
// clear the backing store
......@@ -99,18 +98,19 @@ public class RecentPalettes {
} catch (BackingStoreException ex) {
}
for (int i = 0; i < gradients.size(); i++) {
LinearGradient gradient = gradients.get(i);
int i = 0;
for (LinearGradient gradient : gradients) {
try {
prefs.putByteArray(COLORS + i, serializeColors(gradient.getColors()));
prefs.putByteArray(POSITIONS + i, serializePositions(gradient.getPositions()));
} catch (Exception e) {
e.printStackTrace();
}
i++;
}
}
protected void retrieve() {
private void retrieve() {
gradients.clear();
Preferences prefs = getPreferences();
......@@ -122,7 +122,7 @@ public class RecentPalettes {
Color[] colors = deserializeColors(cols);
float[] posisitons = deserializePositions(poss);
LinearGradient linearGradient = new LinearGradient(colors, posisitons);
gradients.add(linearGradient);
gradients.addLast(linearGradient);
} catch (Exception e) {
e.printStackTrace();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册