blob: f0503d7c82e0b7c000351213ce067d8a136401b7 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.properties;
import java.awt.Color;
import java.awt.Event;
import java.awt.Font;
import java.awt.SystemColor;
import java.awt.event.KeyEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import org.openide.util.Lookup;
import org.openide.util.LookupEvent;
import org.openide.util.LookupListener;
/**
* Template for table editor setting registered in Lookup.
*
* @author Petr Kuzel
*/
public abstract class TableViewSettings {
/** Default key color. */
public static final Color KEY_DEFAULT_COLOR = new Color(0, 0, 153);
/** Default key background. */
public static final Color KEY_DEFAULT_BACKGROUND = Color.white;
/** Default value color. */
public static final Color VALUE_DEFAULT_COLOR = new Color(153, 0, 107);
/** Default value background. */
public static final Color VALUE_DEFAULT_BACKGROUND = Color.white;
/** Default highlight color. */
public static final Color HIGHLIGHT_DEFAULT_COLOR = Color.black;
/** Default highlight background. */
public static final Color HIGHLIGHT_DEFAULT_BACKGROUND = Color.yellow;
/** Default shadow color. */
public static final Color SHADOW_DEFAULT_COLOR = new Color(SystemColor.controlHighlight.getRGB());
/** Default keystrokes for find next action. */
public static final KeyStroke[] FIND_NEXT_DEFAULT_KEYSTROKES = new KeyStroke[] {KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0)};
/** Default keystrokes for find previous action. */
public static final KeyStroke[] FIND_PREVIOUS_DEFAULT_KEYSTROKES = new KeyStroke[] {KeyStroke.getKeyStroke(KeyEvent.VK_F3, Event.SHIFT_MASK)};
/** Default keystrokes for toggle highliht action. */
public static final KeyStroke[] TOGGLE_HIGHLIGHT_DEFAULT_KEYSTROKES = new KeyStroke[] {KeyStroke.getKeyStroke(KeyEvent.VK_H, Event.SHIFT_MASK | Event.ALT_MASK)};
// the only instance
private static DelegatingSettings delegatingSettings;
// active registrations
private static Lookup.Result<TableViewSettings> registrations;
/**
* Reserved for subclasses
*/
protected TableViewSettings() {
}
/**
* Query lookup for settings and watch them translating
* registration changes to firing PCEs on returned
* instance.
*/
public synchronized static TableViewSettings getDefault() {
if (delegatingSettings == null) {
Lookup lookup = Lookup.getDefault();
Lookup.Template<TableViewSettings> template = new Lookup.Template<TableViewSettings>(TableViewSettings.class);
registrations = lookup.lookup(template);
registrations.addLookupListener(new LookupListener() {
public void resultChanged(LookupEvent e) {
TableViewSettings peer = null;
if (registrations.allInstances().isEmpty()) {
peer = new HardcodedSettings();
} else {
peer = registrations.allInstances().iterator().next();
}
delegatingSettings.setPeer(peer);
}
});
TableViewSettings peer = null;
if (registrations.allInstances().isEmpty()) {
peer = new HardcodedSettings();
} else {
peer = registrations.allInstances().iterator().next();
}
delegatingSettings = new DelegatingSettings(peer);
}
return delegatingSettings;
}
// Settings accessors ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public abstract Color getKeyColor();
public abstract Color getKeyBackground();
public abstract Color getValueColor();
public abstract Color getValueBackground();
public abstract Color getHighlightColor();
public abstract Color getHighlightBackground();
public abstract Color getShadowColor();
public abstract Font getFont();
public abstract KeyStroke[] getKeyStrokesFindNext();
public abstract KeyStroke[] getKeyStrokesFindPrevious();
public abstract KeyStroke[] getKeyStrokesToggleHighlight();
public abstract void addPropertyChangeListener(PropertyChangeListener listener);
public abstract void removePropertyChangeListener(PropertyChangeListener listener);
/**
* Returned by getDefault, allows to change impl as
* reaction to registration changes.
*/
private static class DelegatingSettings extends TableViewSettings implements PropertyChangeListener {
private PropertyChangeSupport events = new PropertyChangeSupport(this);
private TableViewSettings peer;
DelegatingSettings(TableViewSettings peer) {
this.peer = peer;
peer.addPropertyChangeListener(this);
}
void setPeer(TableViewSettings peer) {
this.peer.removePropertyChangeListener(this);
this.peer = peer;
this.peer.addPropertyChangeListener(this);
// everything has possibly changed
events.firePropertyChange(null, null, null);
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
events.addPropertyChangeListener(listener);
}
public Color getHighlightBackground() {
return peer.getHighlightBackground();
}
public Color getHighlightColor() {
return peer.getHighlightColor();
}
public Color getKeyBackground() {
return peer.getKeyBackground();
}
public Color getKeyColor() {
return peer.getKeyColor();
}
public Font getFont() {
return peer.getFont();
}
public KeyStroke[] getKeyStrokesFindNext() {
return peer.getKeyStrokesFindNext();
}
public KeyStroke[] getKeyStrokesFindPrevious() {
return peer.getKeyStrokesFindPrevious();
}
public KeyStroke[] getKeyStrokesToggleHighlight() {
return peer.getKeyStrokesToggleHighlight();
}
public Color getShadowColor() {
return peer.getShadowColor();
}
public Color getValueBackground() {
return peer.getValueBackground();
}
public Color getValueColor() {
return peer.getValueColor();
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
events.removePropertyChangeListener(listener);
}
public void propertyChange(java.beans.PropertyChangeEvent evt) {
events.firePropertyChange(evt.getPropertyName(), evt.getOldValue(), evt.getNewValue());
}
}
/**
* If no setting is registered return following one.
*/
private static class HardcodedSettings extends TableViewSettings {
public Color getKeyColor() {return KEY_DEFAULT_COLOR;}
public Color getKeyBackground() {return KEY_DEFAULT_BACKGROUND;}
public Color getValueColor() {return VALUE_DEFAULT_COLOR;}
public Color getValueBackground() {return VALUE_DEFAULT_BACKGROUND;}
public Color getHighlightColor() {return HIGHLIGHT_DEFAULT_COLOR;}
public Color getHighlightBackground() {return HIGHLIGHT_DEFAULT_BACKGROUND;}
public Color getShadowColor() { return SHADOW_DEFAULT_COLOR;}
public Font getFont() { return UIManager.getFont("TextField.font"); }
public KeyStroke[] getKeyStrokesFindNext() {return FIND_NEXT_DEFAULT_KEYSTROKES;}
public KeyStroke[] getKeyStrokesFindPrevious() {return FIND_PREVIOUS_DEFAULT_KEYSTROKES;}
public KeyStroke[] getKeyStrokesToggleHighlight() {return TOGGLE_HIGHLIGHT_DEFAULT_KEYSTROKES;}
public void addPropertyChangeListener(PropertyChangeListener listener) {}
public void removePropertyChangeListener(PropertyChangeListener listener) {}
}
}