diff --git a/src/main/java/net/nikr/eve/jeveasset/data/settings/Settings.java b/src/main/java/net/nikr/eve/jeveasset/data/settings/Settings.java index 2c2ec76e3..f13b4e365 100644 --- a/src/main/java/net/nikr/eve/jeveasset/data/settings/Settings.java +++ b/src/main/java/net/nikr/eve/jeveasset/data/settings/Settings.java @@ -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 { @@ -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; @@ -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); } diff --git a/src/main/java/net/nikr/eve/jeveasset/gui/dialogs/settings/ColorSettingsPanel.java b/src/main/java/net/nikr/eve/jeveasset/gui/dialogs/settings/ColorSettingsPanel.java index 5ad2748bb..8bd66dcc1 100644 --- a/src/main/java/net/nikr/eve/jeveasset/gui/dialogs/settings/ColorSettingsPanel.java +++ b/src/main/java/net/nikr/eve/jeveasset/gui/dialogs/settings/ColorSettingsPanel.java @@ -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; @@ -67,6 +68,7 @@ public class ColorSettingsPanel extends JSettingsPanel { + private final JCheckBoxMenuItem jChartColor; private final JTextField jFilter; //Table private final JColorTable jTable; @@ -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 @@ -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()) { @@ -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() { @@ -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); @@ -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) ); } @@ -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); @@ -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); diff --git a/src/main/java/net/nikr/eve/jeveasset/gui/tabs/prices/PriceHistoryTab.java b/src/main/java/net/nikr/eve/jeveasset/gui/tabs/prices/PriceHistoryTab.java index 8646939ca..eb02244e4 100644 --- a/src/main/java/net/nikr/eve/jeveasset/gui/tabs/prices/PriceHistoryTab.java +++ b/src/main/java/net/nikr/eve/jeveasset/gui/tabs/prices/PriceHistoryTab.java @@ -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; @@ -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; @@ -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; @@ -429,6 +433,11 @@ public void updateData() { updateSaved(); } + @Override + public void repaintTable() { + updateSeries(); + } + @Override public void updateCache() { } @@ -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 selected = jItems.getSelectedValuesList(); double max = 0; diff --git a/src/main/java/net/nikr/eve/jeveasset/gui/tabs/tracker/TrackerTab.java b/src/main/java/net/nikr/eve/jeveasset/gui/tabs/tracker/TrackerTab.java index 8333f454a..2817063a5 100644 --- a/src/main/java/net/nikr/eve/jeveasset/gui/tabs/tracker/TrackerTab.java +++ b/src/main/java/net/nikr/eve/jeveasset/gui/tabs/tracker/TrackerTab.java @@ -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; @@ -626,6 +627,11 @@ public void updateData() { updateFilterButtons(); } + @Override + public void repaintTable() { + updateShown(); + } + @Override public void clearData() { } @@ -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; @@ -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); @@ -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)); } diff --git a/src/main/java/net/nikr/eve/jeveasset/i18n/DialoguesSettings.java b/src/main/java/net/nikr/eve/jeveasset/i18n/DialoguesSettings.java index 7f7ca4e2e..29dd78693 100644 --- a/src/main/java/net/nikr/eve/jeveasset/i18n/DialoguesSettings.java +++ b/src/main/java/net/nikr/eve/jeveasset/i18n/DialoguesSettings.java @@ -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(); diff --git a/src/main/resources/net/nikr/eve/jeveasset/i18n/DialoguesSettings.properties b/src/main/resources/net/nikr/eve/jeveasset/i18n/DialoguesSettings.properties index 699fd08fe..02fff7ab7 100644 --- a/src/main/resources/net/nikr/eve/jeveasset/i18n/DialoguesSettings.properties +++ b/src/main/resources/net/nikr/eve/jeveasset/i18n/DialoguesSettings.properties @@ -92,6 +92,7 @@ mining=Mining miningSaveHistory=Save Mining history #Colors +chartColors=Easy to see chart colors colors=Colors collapse=Collapse expand=Expand