mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
ui: allow to pass custom color description panel
This commit is contained in:
committed by
Aleksey Pivovarov
parent
eec2cdef6e
commit
49a102d859
+58
-44
@@ -26,6 +26,7 @@ import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.ui.*;
|
||||
import com.intellij.ui.components.JBCheckBox;
|
||||
import com.intellij.util.BitUtil;
|
||||
import com.intellij.util.EventDispatcher;
|
||||
import com.intellij.util.FontUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
@@ -44,7 +45,8 @@ import java.util.Map;
|
||||
/**
|
||||
* @author cdr
|
||||
*/
|
||||
public class ColorAndFontDescriptionPanel extends JPanel {
|
||||
public class ColorAndFontDescriptionPanel extends JPanel implements OptionsPanelImpl.ColorDescriptionPanel {
|
||||
private final EventDispatcher<Listener> myDispatcher = EventDispatcher.create(Listener.class);
|
||||
|
||||
private JPanel myPanel;
|
||||
|
||||
@@ -119,15 +121,24 @@ public class ColorAndFontDescriptionPanel extends JPanel {
|
||||
myLabelFont.setVisible(false); // hide for now as it doesn't look that good
|
||||
}
|
||||
|
||||
protected void onHyperLinkClicked(HyperlinkEvent e) {
|
||||
@NotNull
|
||||
@Override
|
||||
public JComponent getPanel() {
|
||||
return this;
|
||||
}
|
||||
|
||||
protected void onSettingsChanged(ActionEvent e) {
|
||||
private void onHyperLinkClicked(HyperlinkEvent e) {
|
||||
myDispatcher.getMulticaster().onHyperLinkClicked(e);
|
||||
}
|
||||
|
||||
private void onSettingsChanged(ActionEvent e) {
|
||||
myErrorStripeColorChooser.setEnabled(myCbErrorStripe.isSelected());
|
||||
myForegroundChooser.setEnabled(myCbForeground.isSelected());
|
||||
myBackgroundChooser.setEnabled(myCbBackground.isSelected());
|
||||
myEffectsColorChooser.setEnabled(myCbEffects.isSelected());
|
||||
myEffectsCombo.setEnabled(myCbEffects.isSelected());
|
||||
|
||||
myDispatcher.getMulticaster().onSettingsChanged(e);
|
||||
}
|
||||
|
||||
public void resetDefault() {
|
||||
@@ -161,7 +172,7 @@ public class ColorAndFontDescriptionPanel extends JPanel {
|
||||
colorPanel.setEnabled(isChecked);
|
||||
}
|
||||
|
||||
public void reset(ColorAndFontDescription description) {
|
||||
public void reset(@NotNull ColorAndFontDescription description) {
|
||||
if (description.isFontEnabled()) {
|
||||
myLabelFont.setEnabled(true);
|
||||
myCbBold.setEnabled(true);
|
||||
@@ -252,50 +263,53 @@ public class ColorAndFontDescriptionPanel extends JPanel {
|
||||
myBackgroundChooser.setEditable(isEditEnabled);
|
||||
}
|
||||
|
||||
public void apply(ColorAndFontDescription description, EditorColorsScheme scheme) {
|
||||
if (description != null) {
|
||||
description.setInherited(myInheritAttributesBox.isSelected());
|
||||
if (description.isInherited()) {
|
||||
TextAttributes baseAttributes = description.getBaseAttributes();
|
||||
if (baseAttributes != null) {
|
||||
description.setFontType(baseAttributes.getFontType());
|
||||
description.setForegroundChecked(baseAttributes.getForegroundColor() != null);
|
||||
description.setForegroundColor(baseAttributes.getForegroundColor());
|
||||
description.setBackgroundChecked(baseAttributes.getBackgroundColor() != null);
|
||||
description.setBackgroundColor(baseAttributes.getBackgroundColor());
|
||||
description.setErrorStripeChecked(baseAttributes.getErrorStripeColor() != null);
|
||||
description.setErrorStripeColor(baseAttributes.getErrorStripeColor());
|
||||
description.setEffectColor(baseAttributes.getEffectColor());
|
||||
description.setEffectType(baseAttributes.getEffectType());
|
||||
description.setEffectsColorChecked(baseAttributes.getEffectColor() != null);
|
||||
}
|
||||
else {
|
||||
description.setInherited(false);
|
||||
}
|
||||
reset(description);
|
||||
public void apply(@NotNull ColorAndFontDescription description, EditorColorsScheme scheme) {
|
||||
description.setInherited(myInheritAttributesBox.isSelected());
|
||||
if (description.isInherited()) {
|
||||
TextAttributes baseAttributes = description.getBaseAttributes();
|
||||
if (baseAttributes != null) {
|
||||
description.setFontType(baseAttributes.getFontType());
|
||||
description.setForegroundChecked(baseAttributes.getForegroundColor() != null);
|
||||
description.setForegroundColor(baseAttributes.getForegroundColor());
|
||||
description.setBackgroundChecked(baseAttributes.getBackgroundColor() != null);
|
||||
description.setBackgroundColor(baseAttributes.getBackgroundColor());
|
||||
description.setErrorStripeChecked(baseAttributes.getErrorStripeColor() != null);
|
||||
description.setErrorStripeColor(baseAttributes.getErrorStripeColor());
|
||||
description.setEffectColor(baseAttributes.getEffectColor());
|
||||
description.setEffectType(baseAttributes.getEffectType());
|
||||
description.setEffectsColorChecked(baseAttributes.getEffectColor() != null);
|
||||
}
|
||||
else {
|
||||
setInheritanceInfo(description);
|
||||
int fontType = Font.PLAIN;
|
||||
if (myCbBold.isSelected()) fontType |= Font.BOLD;
|
||||
if (myCbItalic.isSelected()) fontType |= Font.ITALIC;
|
||||
description.setFontType(fontType);
|
||||
description.setForegroundChecked(myCbForeground.isSelected());
|
||||
description.setForegroundColor(myForegroundChooser.getSelectedColor());
|
||||
description.setBackgroundChecked(myCbBackground.isSelected());
|
||||
description.setBackgroundColor(myBackgroundChooser.getSelectedColor());
|
||||
description.setErrorStripeChecked(myCbErrorStripe.isSelected());
|
||||
description.setErrorStripeColor(myErrorStripeColorChooser.getSelectedColor());
|
||||
description.setEffectsColorChecked(myCbEffects.isSelected());
|
||||
description.setEffectColor(myEffectsColorChooser.getSelectedColor());
|
||||
|
||||
if (myEffectsCombo.isEnabled()) {
|
||||
String effectType = (String)myEffectsCombo.getModel().getSelectedItem();
|
||||
description.setEffectType(myEffectsMap.get(effectType));
|
||||
}
|
||||
description.setInherited(false);
|
||||
}
|
||||
description.apply(scheme);
|
||||
reset(description);
|
||||
}
|
||||
else {
|
||||
setInheritanceInfo(description);
|
||||
int fontType = Font.PLAIN;
|
||||
if (myCbBold.isSelected()) fontType |= Font.BOLD;
|
||||
if (myCbItalic.isSelected()) fontType |= Font.ITALIC;
|
||||
description.setFontType(fontType);
|
||||
description.setForegroundChecked(myCbForeground.isSelected());
|
||||
description.setForegroundColor(myForegroundChooser.getSelectedColor());
|
||||
description.setBackgroundChecked(myCbBackground.isSelected());
|
||||
description.setBackgroundColor(myBackgroundChooser.getSelectedColor());
|
||||
description.setErrorStripeChecked(myCbErrorStripe.isSelected());
|
||||
description.setErrorStripeColor(myErrorStripeColorChooser.getSelectedColor());
|
||||
description.setEffectsColorChecked(myCbEffects.isSelected());
|
||||
description.setEffectColor(myEffectsColorChooser.getSelectedColor());
|
||||
|
||||
if (myEffectsCombo.isEnabled()) {
|
||||
String effectType = (String)myEffectsCombo.getModel().getSelectedItem();
|
||||
description.setEffectType(myEffectsMap.get(effectType));
|
||||
}
|
||||
}
|
||||
description.apply(scheme);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addListener(@NotNull Listener listener) {
|
||||
myDispatcher.addListener(listener);
|
||||
}
|
||||
|
||||
private static class EffectsComboModel extends CollectionComboBoxModel<String> {
|
||||
|
||||
+36
-7
@@ -18,12 +18,14 @@ package com.intellij.application.options.colors;
|
||||
|
||||
import com.intellij.ide.DataManager;
|
||||
import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.openapi.editor.colors.EditorColorsScheme;
|
||||
import com.intellij.openapi.options.SearchableConfigurable;
|
||||
import com.intellij.openapi.options.ex.Settings;
|
||||
import com.intellij.openapi.util.ActionCallback;
|
||||
import com.intellij.ui.ScrollPaneFactory;
|
||||
import com.intellij.util.EventDispatcher;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.HyperlinkEvent;
|
||||
@@ -33,6 +35,7 @@ import javax.swing.text.BadLocationException;
|
||||
import javax.swing.text.Element;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.util.EventListener;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -40,7 +43,7 @@ public class OptionsPanelImpl extends JPanel implements OptionsPanel {
|
||||
public static final String SELECTED_COLOR_OPTION_PROPERTY = "selected.color.option.type";
|
||||
|
||||
private final ColorOptionsTree myOptionsTree;
|
||||
private final ColorAndFontDescriptionPanel myOptionsPanel;
|
||||
private final ColorDescriptionPanel myOptionsPanel;
|
||||
|
||||
private final ColorAndFontOptions myOptions;
|
||||
private final SchemesPanel mySchemesProvider;
|
||||
@@ -53,21 +56,28 @@ public class OptionsPanelImpl extends JPanel implements OptionsPanel {
|
||||
public OptionsPanelImpl(ColorAndFontOptions options,
|
||||
SchemesPanel schemesProvider,
|
||||
String categoryName) {
|
||||
this(options, schemesProvider, categoryName, new ColorAndFontDescriptionPanel());
|
||||
}
|
||||
|
||||
public OptionsPanelImpl(ColorAndFontOptions options,
|
||||
SchemesPanel schemesProvider,
|
||||
String categoryName,
|
||||
ColorDescriptionPanel optionsPanel) {
|
||||
super(new BorderLayout());
|
||||
myOptions = options;
|
||||
mySchemesProvider = schemesProvider;
|
||||
myCategoryName = categoryName;
|
||||
myProperties = PropertiesComponent.getInstance();
|
||||
|
||||
myOptionsPanel = new ColorAndFontDescriptionPanel() {
|
||||
myOptionsPanel = optionsPanel;
|
||||
myOptionsPanel.addListener(new ColorDescriptionPanel.Listener() {
|
||||
@Override
|
||||
protected void onSettingsChanged(ActionEvent e) {
|
||||
super.onSettingsChanged(e);
|
||||
public void onSettingsChanged(ActionEvent e) {
|
||||
myDispatcher.getMulticaster().settingsChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onHyperLinkClicked(HyperlinkEvent e) {
|
||||
public void onHyperLinkClicked(HyperlinkEvent e) {
|
||||
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
|
||||
Settings settings = Settings.KEY.getData(DataManager.getInstance().getDataContext(OptionsPanelImpl.this));
|
||||
String attrName = e.getDescription();
|
||||
@@ -87,7 +97,7 @@ public class OptionsPanelImpl extends JPanel implements OptionsPanel {
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
myOptionsTree = new ColorOptionsTree(myCategoryName);
|
||||
|
||||
@@ -101,7 +111,7 @@ public class OptionsPanelImpl extends JPanel implements OptionsPanel {
|
||||
|
||||
JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myOptionsTree);
|
||||
add(scrollPane, BorderLayout.CENTER);
|
||||
add(myOptionsPanel, BorderLayout.EAST);
|
||||
add(myOptionsPanel.getPanel(), BorderLayout.EAST);
|
||||
|
||||
}
|
||||
|
||||
@@ -181,4 +191,23 @@ public class OptionsPanelImpl extends JPanel implements OptionsPanel {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public interface ColorDescriptionPanel {
|
||||
@NotNull
|
||||
JComponent getPanel();
|
||||
|
||||
void resetDefault();
|
||||
|
||||
void reset(@NotNull ColorAndFontDescription description);
|
||||
|
||||
void apply(@NotNull ColorAndFontDescription descriptor, EditorColorsScheme scheme);
|
||||
|
||||
void addListener(@NotNull Listener listener);
|
||||
|
||||
interface Listener extends EventListener {
|
||||
void onSettingsChanged(ActionEvent e);
|
||||
|
||||
void onHyperLinkClicked(HyperlinkEvent e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user