syncdir design improved
This commit is contained in:
parent
db8ae16f01
commit
3471f7ad68
@ -38,6 +38,7 @@ public class SyncDirectoriesDialog extends JDialog {
|
|||||||
initComponents(leftDir, rightDir);
|
initComponents(leftDir, rightDir);
|
||||||
config.restoreSyncDialogState(this);
|
config.restoreSyncDialogState(this);
|
||||||
if (getBounds().x == -1) setLocationRelativeTo(owner);
|
if (getBounds().x == -1) setLocationRelativeTo(owner);
|
||||||
|
applyAppearance();
|
||||||
|
|
||||||
addWindowListener(new WindowAdapter() {
|
addWindowListener(new WindowAdapter() {
|
||||||
@Override
|
@Override
|
||||||
@ -204,6 +205,49 @@ public class SyncDirectoriesDialog extends JDialog {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void applyAppearance() {
|
||||||
|
if (config == null) return;
|
||||||
|
Color bg = config.getBackgroundColor();
|
||||||
|
if (bg == null) return;
|
||||||
|
updateComponentBackground(getContentPane(), bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateComponentBackground(Container container, Color bg) {
|
||||||
|
if (container == null) return;
|
||||||
|
container.setBackground(bg);
|
||||||
|
boolean dark = isDark(bg);
|
||||||
|
Color selColor = config != null ? config.getSelectionColor() : null;
|
||||||
|
|
||||||
|
for (Component c : container.getComponents()) {
|
||||||
|
if (c instanceof JPanel || c instanceof JScrollPane || c instanceof JViewport || c instanceof JTabbedPane || c instanceof JButton || c instanceof JComboBox || c instanceof JTable) {
|
||||||
|
if (!(c instanceof JToggleButton)) {
|
||||||
|
c.setBackground(bg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (c instanceof JLabel || c instanceof JCheckBox || c instanceof JRadioButton || c instanceof JButton) {
|
||||||
|
c.setForeground(dark ? Color.WHITE : Color.BLACK);
|
||||||
|
}
|
||||||
|
if (c instanceof javax.swing.text.JTextComponent) {
|
||||||
|
javax.swing.text.JTextComponent tc = (javax.swing.text.JTextComponent) c;
|
||||||
|
tc.setBackground(bg);
|
||||||
|
tc.setForeground(dark ? Color.WHITE : Color.BLACK);
|
||||||
|
tc.setCaretColor(dark ? Color.WHITE : Color.BLACK);
|
||||||
|
if (selColor != null) {
|
||||||
|
tc.setSelectionColor(selColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (c instanceof Container) {
|
||||||
|
updateComponentBackground((Container) c, bg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isDark(Color c) {
|
||||||
|
if (c == null) return false;
|
||||||
|
double darkness = 1 - (0.299 * c.getRed() + 0.587 * c.getGreen() + 0.114 * c.getBlue()) / 255;
|
||||||
|
return darkness >= 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
private void browsePath(JTextField field) {
|
private void browsePath(JTextField field) {
|
||||||
JFileChooser chooser = new JFileChooser(field.getText());
|
JFileChooser chooser = new JFileChooser(field.getText());
|
||||||
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
|
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
|
||||||
@ -421,21 +465,30 @@ public class SyncDirectoriesDialog extends JDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static class SyncTableCellRenderer extends DefaultTableCellRenderer {
|
private static class SyncTableCellRenderer extends DefaultTableCellRenderer {
|
||||||
|
private boolean isDark(Color c) {
|
||||||
|
if (c == null) return false;
|
||||||
|
double darkness = 1 - (0.299 * c.getRed() + 0.587 * c.getGreen() + 0.114 * c.getBlue()) / 255;
|
||||||
|
return darkness >= 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSel, boolean hasFocus, int row, int col) {
|
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSel, boolean hasFocus, int row, int col) {
|
||||||
Component c = super.getTableCellRendererComponent(table, value, isSel, hasFocus, row, col);
|
Component c = super.getTableCellRendererComponent(table, value, isSel, hasFocus, row, col);
|
||||||
SyncTableModel model = (SyncTableModel) table.getModel();
|
SyncTableModel model = (SyncTableModel) table.getModel();
|
||||||
SyncEntry entry = model.entries.get(row);
|
SyncEntry entry = model.entries.get(row);
|
||||||
|
|
||||||
|
boolean dark = isDark(table.getBackground());
|
||||||
if (!isSel) {
|
if (!isSel) {
|
||||||
if ("=".equals(entry.relation)) {
|
if ("=".equals(entry.relation)) {
|
||||||
c.setForeground(Color.BLACK);
|
c.setForeground(dark ? Color.WHITE : Color.BLACK);
|
||||||
} else if ("!=".equals(entry.relation)) {
|
} else if ("!=".equals(entry.relation)) {
|
||||||
c.setForeground(Color.RED);
|
c.setForeground(dark ? new Color(255, 120, 120) : Color.RED);
|
||||||
} else if ("->".equals(entry.relation)) {
|
} else if ("->".equals(entry.relation)) {
|
||||||
c.setForeground(new Color(0, 100, 0)); // Dark green
|
// Left only / newer
|
||||||
|
c.setForeground(dark ? new Color(120, 255, 120) : new Color(0, 130, 0));
|
||||||
} else if ("<-".equals(entry.relation)) {
|
} else if ("<-".equals(entry.relation)) {
|
||||||
c.setForeground(Color.BLUE);
|
// Right only / newer
|
||||||
|
c.setForeground(dark ? new Color(130, 180, 255) : Color.BLUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -448,6 +501,10 @@ public class SyncDirectoriesDialog extends JDialog {
|
|||||||
setHorizontalAlignment(LEFT);
|
setHorizontalAlignment(LEFT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (c instanceof JComponent) {
|
||||||
|
((JComponent) c).setBorder(BorderFactory.createMatteBorder(0, 0, 1, 1, dark ? new Color(60, 60, 60) : new Color(220, 220, 220)));
|
||||||
|
}
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user