Skip to content

Commit

Permalink
New Feature: Better chart colors (Issue #387 & #404)
Browse files Browse the repository at this point in the history
  • Loading branch information
GoldenGnu committed Aug 4, 2023
1 parent b9debf0 commit 5889689
Show file tree
Hide file tree
Showing 6 changed files with 108 additions and 26 deletions.
12 changes: 11 additions & 1 deletion src/main/java/net/nikr/eve/jeveasset/data/settings/Settings.java
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,8 @@ public static enum SettingFlag {
FLAG_SAVE_TOOLS_ON_EXIT,
FLAG_SAVE_CONTRACT_HISTORY,
FLAG_SAVE_MINING_HISTORY,
FLAG_MANUFACTURING_DEFAULT
FLAG_MANUFACTURING_DEFAULT,
FLAG_EASY_CHART_COLORS
}

public static enum TransactionProfitPrice {
Expand Down Expand Up @@ -292,6 +293,7 @@ protected Settings() {
flags.put(SettingFlag.FLAG_SAVE_CONTRACT_HISTORY, true);
flags.put(SettingFlag.FLAG_SAVE_MINING_HISTORY, true);
flags.put(SettingFlag.FLAG_MANUFACTURING_DEFAULT, true);
flags.put(SettingFlag.FLAG_EASY_CHART_COLORS, false);
cacheFlags();
//Default Filters
List<Filter> filter;
Expand Down Expand Up @@ -842,6 +844,14 @@ public void setManufacturingDefault(final boolean manufacturingDefault) {
flags.put(SettingFlag.FLAG_MANUFACTURING_DEFAULT, manufacturingDefault);
}

public boolean isEasyChartColors() {
return flags.get(SettingFlag.FLAG_EASY_CHART_COLORS);
}

public void setEasyChartColors(final boolean easyChartColors) {
flags.put(SettingFlag.FLAG_EASY_CHART_COLORS, easyChartColors);
}

public boolean isTransactionHistory() {
return flags.get(SettingFlag.FLAG_TRANSACTION_HISTORY);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import javax.swing.ButtonGroup;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JScrollPane;
Expand All @@ -67,6 +68,7 @@

public class ColorSettingsPanel extends JSettingsPanel {

private final JCheckBoxMenuItem jChartColor;
private final JTextField jFilter;
//Table
private final JColorTable jTable;
Expand Down Expand Up @@ -204,10 +206,18 @@ public void run() {

JScrollPane jTableScroll = new JScrollPane(jTable);

JFixedToolBar jToolBarTop = new JFixedToolBar();
JFixedToolBar jToolBar = new JFixedToolBar();

JDropDownButton jSetting = new JDropDownButton(Images.DIALOG_SETTINGS.getIcon());
jToolBar.addButtonIcon(jSetting);

jChartColor = new JCheckBoxMenuItem (DialoguesSettings.get().chartColors());
jSetting.add(jChartColor);

jToolBar.addSeparator();

JDropDownButton jLookAndFeel = new JDropDownButton(DialoguesSettings.get().lookAndFeel(), Images.FILTER_LOAD.getIcon());
jToolBarTop.addButton(jLookAndFeel);
jToolBar.addButton(jLookAndFeel);

ButtonGroup lafButtonGroup = new ButtonGroup();
//Predefined LookAndFeels
Expand All @@ -230,7 +240,7 @@ public void run() {
}

JDropDownButton jTheme = new JDropDownButton(DialoguesSettings.get().theme(), Images.FILTER_LOAD.getIcon());
jToolBarTop.addButton(jTheme);
jToolBar.addButton(jTheme);

ButtonGroup buttonGroup = new ButtonGroup();
for (ColorThemeTypes theme : ColorThemeTypes.values()) {
Expand All @@ -247,7 +257,7 @@ public void actionPerformed(ActionEvent e) {
jTable.expandSeparators(false);
}
});
jToolBarTop.addButton(jCollapse);
jToolBar.addButton(jCollapse);

JButton jExpand = new JButton(DialoguesSettings.get().expand(), Images.MISC_EXPANDED.getIcon());
jExpand.addActionListener(new ActionListener() {
Expand All @@ -256,11 +266,11 @@ public void actionPerformed(ActionEvent e) {
jTable.expandSeparators(true);
}
});
jToolBarTop.addButton(jExpand);
jToolBar.addButton(jExpand);

JFixedToolBar jToolBarBottom = new JFixedToolBar();
JFixedToolBar jToolBarSearch = new JFixedToolBar();

jToolBarBottom.add(jFilter);
jToolBarSearch.add(jFilter);

JButton jClear = new JButton(Images.TAB_CLOSE.getIcon());
jClear.setContentAreaFilled(false);
Expand All @@ -272,18 +282,18 @@ public void actionPerformed(ActionEvent e) {
jFilter.setText("");
}
});
jToolBarBottom.add(jClear);
jToolBarSearch.add(jClear);

layout.setHorizontalGroup(
layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
.addComponent(jToolBarTop, jToolBarTop.getMinimumSize().width, GroupLayout.PREFERRED_SIZE, Integer.MAX_VALUE)
.addComponent(jToolBarBottom, jToolBarBottom.getMinimumSize().width, GroupLayout.PREFERRED_SIZE, Integer.MAX_VALUE)
.addComponent(jToolBar, jToolBar.getMinimumSize().width, GroupLayout.PREFERRED_SIZE, Integer.MAX_VALUE)
.addComponent(jToolBarSearch, jToolBarSearch.getMinimumSize().width, GroupLayout.PREFERRED_SIZE, Integer.MAX_VALUE)
.addComponent(jTableScroll, 375, 375, Integer.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createSequentialGroup()
.addComponent(jToolBarTop ,GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(jToolBarBottom, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(jToolBar ,GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(jToolBarSearch, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(jTableScroll, 250, 250, Integer.MAX_VALUE)
);
}
Expand All @@ -301,7 +311,10 @@ public UpdateType save() {
} finally {
eventList.getReadWriteLock().readLock().unlock();
}
boolean repaint = !Settings.get().getColorSettings().get().equals(colors);
boolean easyChartColors = jChartColor.isSelected();
boolean repaint = !Settings.get().getColorSettings().get().equals(colors)
|| Settings.get().isEasyChartColors() != easyChartColors;
Settings.get().setEasyChartColors(easyChartColors);
colors = Settings.get().getColorSettings().get(); //Copy to check for changes on save
if (lookAndfeelChanged && !UIManager.getLookAndFeel().getClass().getName().equals(lookAndFeelClass)) {
JOptionPane.showMessageDialog(parent, DialoguesSettings.get().lookAndFeelMsg(), DialoguesSettings.get().lookAndFeelTitle(), JOptionPane.PLAIN_MESSAGE);
Expand All @@ -315,6 +328,7 @@ public void load() {
colors = Settings.get().getColorSettings().get(); //Copy to check for changes on save
updateTable(Settings.get().getColorSettings().get()); //This copy will be edited
colorThemeTypes = Settings.get().getColorSettings().getColorTheme().getType();
jChartColor.setSelected(Settings.get().isEasyChartColors());
select(colorThemeTypes);
lookAndFeelClass = Settings.get().getColorSettings().getLookAndFeelClass();
select(lookAndFeelClass);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
import ca.odell.glazedlists.TextFilterator;
import com.github.lgooddatepicker.optionalusertools.DateChangeListener;
import com.github.lgooddatepicker.zinternaltools.DateChangeEvent;
import java.awt.Color;
import java.awt.Paint;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
Expand Down Expand Up @@ -74,6 +76,7 @@
import net.nikr.eve.jeveasset.gui.frame.StatusPanel.UpdateType;
import net.nikr.eve.jeveasset.gui.images.Images;
import net.nikr.eve.jeveasset.gui.shared.CaseInsensitiveComparator;
import net.nikr.eve.jeveasset.gui.shared.ColorUtil;
import net.nikr.eve.jeveasset.gui.shared.Formatter;
import net.nikr.eve.jeveasset.gui.shared.JFreeChartUtil;
import net.nikr.eve.jeveasset.gui.shared.components.JAutoCompleteDialog;
Expand All @@ -93,6 +96,7 @@
import org.jfree.chart.axis.LogarithmicAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.XYToolTipGenerator;
import org.jfree.chart.plot.DefaultDrawingSupplier;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.time.SimpleTimePeriod;
Expand Down Expand Up @@ -429,6 +433,11 @@ public void updateData() {
updateSaved();
}

@Override
public void repaintTable() {
updateSeries();
}

@Override
public void updateCache() { }

Expand Down Expand Up @@ -659,12 +668,40 @@ private void updateSeries() {
dataset.removeSeries(0);
}
//Add all
boolean bright = ColorUtil.isBrightColor(jPanel.getBackground());
DefaultDrawingSupplier drawingSupplier = new DefaultDrawingSupplier();
for (Item item : shownOrder) {
dataset.addSeries(series.get(item));
Paint paint = getColor(bright, drawingSupplier);
if (paint != null) {
renderer.setSeriesPaint(dataset.getSeriesCount() - 1, paint);
}
}
updateShown();
}

private Paint getColor(boolean bright, DefaultDrawingSupplier drawingSupplier) {
Paint paint = drawingSupplier.getNextPaint();
if (Settings.get().isEasyChartColors() && paint instanceof Color) {
Color color = (Color) paint;
if (bright) {
if (ColorUtil.luminance(color) > 0.8) { //Skip color > get next color
return getColor(bright, drawingSupplier);
} else { //OK: return color
return color;
}
} else {
if (ColorUtil.luminance(color) < 0.2) { //Skip color > get next color
return getColor(bright, drawingSupplier);
} else { //OK: return color
return color;
}
}

}
return paint;
}

private void updateShown() {
List<Item> selected = jItems.getSelectedValuesList();
double max = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@
import net.nikr.eve.jeveasset.gui.shared.JFreeChartUtil;
import net.nikr.eve.jeveasset.gui.shared.JFreeChartUtil.SimpleRenderer;
import net.nikr.eve.jeveasset.gui.shared.ColorIcon;
import net.nikr.eve.jeveasset.gui.shared.ColorUtil;
import net.nikr.eve.jeveasset.gui.shared.Formatter;
import net.nikr.eve.jeveasset.gui.shared.JOptionInput;
import net.nikr.eve.jeveasset.gui.shared.components.CheckBoxNode;
Expand Down Expand Up @@ -626,6 +627,11 @@ public void updateData() {
updateFilterButtons();
}

@Override
public void repaintTable() {
updateShown();
}

@Override
public void clearData() { }

Expand Down Expand Up @@ -1184,6 +1190,8 @@ private void updateShown() {
} else {
jSkillPointsStatus.setNumber(0.0);
}
//Update Shown
boolean bright = ColorUtil.isBrightColor(jPanel.getBackground());
if (jTotal.isSelected()) { //Update total
dataset.addSeries(total);
Integer minColumn = null;
Expand All @@ -1198,52 +1206,52 @@ private void updateShown() {
}
}
renderer.add(dataset.getSeriesCount() - 1, minColumn);
updateRender(dataset.getSeriesCount() - 1, Color.RED.darker());
updateRender(bright, dataset.getSeriesCount() - 1, Color.RED.darker());
}
if (jWalletBalance.isSelected() && walletBalance != null) {
dataset.addSeries(walletBalance);
renderer.add(dataset.getSeriesCount() - 1, walletColumn);
updateRender(dataset.getSeriesCount() - 1, Color.BLUE.darker());
updateRender(bright, dataset.getSeriesCount() - 1, Color.BLUE.darker());

}
if (jAssets.isSelected() && assets != null) {
dataset.addSeries(assets);
renderer.add(dataset.getSeriesCount() - 1, assetColumn);
updateRender(dataset.getSeriesCount() - 1, Color.GREEN.darker().darker());
updateRender(bright, dataset.getSeriesCount() - 1, Color.GREEN.darker().darker());
}
if (jSellOrders.isSelected() && sellOrders != null) {
dataset.addSeries(sellOrders);
updateRender(dataset.getSeriesCount() - 1, Color.CYAN.darker());
updateRender(bright, dataset.getSeriesCount() - 1, Color.CYAN.darker());
}
if (jEscrows.isSelected() && escrows != null) {
dataset.addSeries(escrows);
updateRender(dataset.getSeriesCount() - 1, Color.BLACK);
updateRender(bright, dataset.getSeriesCount() - 1, Color.BLACK);
}
if (jEscrowsToCover.isSelected() && escrowsToCover != null) {
dataset.addSeries(escrowsToCover);
updateRender(dataset.getSeriesCount() - 1, Color.GRAY);
updateRender(bright, dataset.getSeriesCount() - 1, Color.GRAY);
}
if (jManufacturing.isSelected() && manufacturing != null) {
dataset.addSeries(manufacturing);
updateRender(dataset.getSeriesCount() - 1, Color.MAGENTA);
updateRender(bright, dataset.getSeriesCount() - 1, Color.MAGENTA);
}
if (jContractCollateral.isSelected() && contractCollateral != null) {
dataset.addSeries(contractCollateral);
updateRender(dataset.getSeriesCount() - 1, Color.PINK);
updateRender(bright, dataset.getSeriesCount() - 1, Color.PINK);
}
if (jContractValue.isSelected() && contractValue != null) {
dataset.addSeries(contractValue);
updateRender(dataset.getSeriesCount() - 1, Color.ORANGE);
updateRender(bright, dataset.getSeriesCount() - 1, Color.ORANGE);
}
if (jSkillPointsValue.isSelected() && skillPointsValue != null) {
dataset.addSeries(skillPointsValue);
updateRender(dataset.getSeriesCount() - 1, Color.YELLOW);
updateRender(bright, dataset.getSeriesCount() - 1, Color.YELLOW);
}
//Add empty dataset
if (dataset.getSeriesCount() == 0) {
TimePeriodValues timePeriodValues = new TimePeriodValues(TabsTracker.get().empty());
dataset.addSeries(timePeriodValues);
updateRender(dataset.getSeriesCount() - 1, Color.BLACK);
updateRender(bright, dataset.getSeriesCount() - 1, Color.BLACK);
}
rangeLogarithmicAxis.setAutoRange(true);
rangeLinearAxis.setAutoRange(true);
Expand All @@ -1252,7 +1260,18 @@ private void updateShown() {
JFreeChartUtil.updateTickScale(domainAxis, rangeLinearAxis, dataset);
}

private void updateRender(int index, Color color) {
private void updateRender(boolean bright, int index, Color color) {
if (Settings.get().isEasyChartColors()) {
if (bright) {
if (ColorUtil.luminance(color) > 0.8) {
color = color.darker();
}
} else {
if (ColorUtil.luminance(color) < 0.2) {
color = color.brighter();
}
}
}
renderer.setSeriesPaint(index, color);
renderer.setSeriesStroke(index, new BasicStroke(1));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ public DialoguesSettings(final Locale locale) {
public abstract String miningSaveHistory();

// used in ColorSettingsPanel
public abstract String chartColors();
public abstract String colors();
public abstract String collapse();
public abstract String expand();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ mining=Mining
miningSaveHistory=Save Mining history

#Colors
chartColors=Easy to see chart colors
colors=Colors
collapse=Collapse
expand=Expand
Expand Down

0 comments on commit 5889689

Please # to comment.