/* * Lilith - a log event viewer. * Copyright (C) 2007-2011 Joern Huxhorn * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package de.huxhorn.lilith.swing.preferences; import de.huxhorn.lilith.swing.preferences.table.ConditionPreviewRenderer; import de.huxhorn.lilith.swing.table.ColorScheme; import java.awt.Color; import java.awt.Component; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.GridLayout; import javax.swing.JColorChooser; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.border.EtchedBorder; import javax.swing.border.TitledBorder; import javax.swing.colorchooser.AbstractColorChooserPanel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ColorSchemeEditorPanel extends JPanel { private final Logger logger = LoggerFactory.getLogger(ColorSchemeEditorPanel.class); private ColorChangeListener colorChangeListener; private ConditionPreviewRenderer previewDummyRenderer; private ColorScheme colorScheme; private ColorChooserPanel textChooserPanel; private ColorChooserPanel backgroundChooserPanel; private ColorChooserPanel borderChooserPanel; public ColorSchemeEditorPanel() { createUI(); } private void createUI() { colorChangeListener = new ColorChangeListener(); textChooserPanel = new ColorChooserPanel(Color.BLACK); backgroundChooserPanel = new ColorChooserPanel(Color.WHITE); borderChooserPanel = new ColorChooserPanel(Color.WHITE); attachChangeListener(textChooserPanel.getColorChooser()); attachChangeListener(backgroundChooserPanel.getColorChooser()); attachChangeListener(borderChooserPanel.getColorChooser()); JTabbedPane tabbedPane = new JTabbedPane(); tabbedPane.add("Text", textChooserPanel); tabbedPane.add("Background", backgroundChooserPanel); tabbedPane.add("Border", borderChooserPanel); setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.gridwidth = 1; gbc.weightx = 1.0; gbc.weighty = 1.0; gbc.fill = GridBagConstraints.BOTH; add(tabbedPane, gbc); previewDummyRenderer = new ConditionPreviewRenderer(); Component previewComponent = previewDummyRenderer.getTableCellRendererComponent(null, null, false, false, 0, 0); JPanel previewPanel = new JPanel(new GridLayout(1, 1)); previewPanel.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED), "Preview")); previewPanel.add(previewComponent); gbc.gridx = 0; gbc.gridy = 1; gbc.weightx = 1.0; gbc.weighty = 0.0; gbc.fill = GridBagConstraints.HORIZONTAL; add(previewPanel, gbc); } /** * Saves the colors of the editors into the colorScheme property. */ public void saveColors() { this.colorScheme = new ColorScheme(textChooserPanel.getColor(), backgroundChooserPanel.getColor(), borderChooserPanel.getColor()); } /** * Initializes the editors with the colorScheme values. */ public void resetColors() { if(colorScheme == null) { colorScheme = new ColorScheme().initDefaults(); } textChooserPanel.setColor(colorScheme.getTextColor()); backgroundChooserPanel.setColor(colorScheme.getBackgroundColor()); borderChooserPanel.setColor(colorScheme.getBorderColor()); } public ColorScheme getColorScheme() { return colorScheme; } public void setColorScheme(ColorScheme colorScheme) { if(colorScheme == null) { throw new IllegalArgumentException("colorScheme must not be null!"); } this.colorScheme = colorScheme; resetColors(); } private void attachChangeListener(JColorChooser chooser) { AbstractColorChooserPanel[] panels = chooser.getChooserPanels(); if(panels != null) { for(AbstractColorChooserPanel current : panels) { current.getColorSelectionModel().addChangeListener(colorChangeListener); } } else { if(logger.isWarnEnabled()) logger.warn("No chooser panels!"); } } private class ColorChangeListener implements ChangeListener { private SavedCondition dummyCondition; private ColorChangeListener() { dummyCondition = new SavedCondition(); dummyCondition.setColorScheme(new ColorScheme().initDefaults()); } public void stateChanged(ChangeEvent e) { // update preview component... ColorScheme cs = dummyCondition.getColorScheme(); cs.setTextColor(textChooserPanel.getColor(true)); cs.setBackgroundColor(backgroundChooserPanel.getColor(true)); cs.setBorderColor(borderChooserPanel.getColor(true)); if(logger.isDebugEnabled()) logger.debug("initializing to {}...", dummyCondition); previewDummyRenderer.getTableCellRendererComponent(null, dummyCondition, false, false, 0, 0); } } }