/* * Copyright 2004-2005 Alexey Efimov * * Licensed 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.intellij.images.options.impl; import com.intellij.openapi.util.JDOMExternalizable; import com.intellij.openapi.util.JDOMExternalizer; import org.intellij.images.options.TransparencyChessboardOptions; import org.jdom.Element; import java.awt.*; import java.beans.PropertyChangeSupport; /** * Background options implementation. * * @author <a href="mailto:aefimov.box@gmail.com">Alexey Efimov</a> */ final class TransparencyChessboardOptionsImpl implements TransparencyChessboardOptions, JDOMExternalizable { private boolean showDefault = true; private int cellSize = DEFAULT_CELL_SIZE; private Color whiteColor = DEFAULT_WHITE_COLOR; private Color blackColor = DEFAULT_BLACK_COLOR; private final PropertyChangeSupport propertyChangeSupport; TransparencyChessboardOptionsImpl(PropertyChangeSupport propertyChangeSupport) { this.propertyChangeSupport = propertyChangeSupport; } public boolean isShowDefault() { return showDefault; } public int getCellSize() { return cellSize; } public Color getWhiteColor() { return whiteColor; } public Color getBlackColor() { return blackColor; } void setShowDefault(boolean showDefault) { boolean oldValue = this.showDefault; if (oldValue != showDefault) { this.showDefault = showDefault; propertyChangeSupport.firePropertyChange(ATTR_SHOW_DEFAULT, oldValue, this.showDefault); } } void setCellSize(int cellSize) { int oldValue = this.cellSize; if (oldValue != cellSize) { this.cellSize = cellSize; propertyChangeSupport.firePropertyChange(ATTR_CELL_SIZE, oldValue, this.cellSize); } } void setWhiteColor(Color whiteColor) { Color oldValue = this.whiteColor; if (whiteColor == null) { this.whiteColor = DEFAULT_WHITE_COLOR; } if (!oldValue.equals(whiteColor)) { this.whiteColor = whiteColor; propertyChangeSupport.firePropertyChange(ATTR_WHITE_COLOR, oldValue, this.whiteColor); } } void setBlackColor(Color blackColor) { Color oldValue = this.blackColor; if (blackColor == null) { blackColor = DEFAULT_BLACK_COLOR; } if (!oldValue.equals(blackColor)) { this.blackColor = blackColor; propertyChangeSupport.firePropertyChange(ATTR_BLACK_COLOR, oldValue, this.blackColor); } } public void inject(TransparencyChessboardOptions options) { setShowDefault(options.isShowDefault()); setCellSize(options.getCellSize()); setWhiteColor(options.getWhiteColor()); setBlackColor(options.getBlackColor()); } public boolean setOption(String name, Object value) { if (ATTR_SHOW_DEFAULT.equals(name)) { setShowDefault((Boolean)value); } else if (ATTR_CELL_SIZE.equals(name)) { setCellSize((Integer)value); } else if (ATTR_WHITE_COLOR.equals(name)) { setWhiteColor((Color)value); } else if (ATTR_BLACK_COLOR.equals(name)) { setBlackColor((Color)value); } else { return false; } return true; } public void readExternal(Element element) { setShowDefault(JDOMExternalizer.readBoolean(element, ATTR_SHOW_DEFAULT)); setCellSize(JDOMExternalizer.readInteger(element, ATTR_CELL_SIZE, DEFAULT_CELL_SIZE)); setWhiteColor(JDOMExternalizerEx.readColor(element, ATTR_WHITE_COLOR, DEFAULT_WHITE_COLOR)); setBlackColor(JDOMExternalizerEx.readColor(element, ATTR_BLACK_COLOR, DEFAULT_BLACK_COLOR)); } public void writeExternal(Element element) { JDOMExternalizer.write(element, ATTR_SHOW_DEFAULT, showDefault); JDOMExternalizer.write(element, ATTR_CELL_SIZE, cellSize); JDOMExternalizerEx.write(element, ATTR_WHITE_COLOR, whiteColor); JDOMExternalizerEx.write(element, ATTR_BLACK_COLOR, blackColor); } public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof TransparencyChessboardOptions)) { return false; } TransparencyChessboardOptions otherOptions = (TransparencyChessboardOptions)o; return cellSize == otherOptions.getCellSize() && showDefault == otherOptions.isShowDefault() && (blackColor != null ? blackColor.equals(otherOptions.getBlackColor()) : otherOptions.getBlackColor() == null) && (whiteColor != null ? whiteColor.equals(otherOptions.getWhiteColor()) : otherOptions.getWhiteColor() == null); } public int hashCode() { int result; result = (showDefault ? 1 : 0); result = 29 * result + cellSize; result = 29 * result + (whiteColor != null ? whiteColor.hashCode() : 0); result = 29 * result + (blackColor != null ? blackColor.hashCode() : 0); return result; } }