| /* |
| * 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.GridOptions; |
| import org.jdom.Element; |
| |
| import java.awt.*; |
| import java.beans.PropertyChangeSupport; |
| |
| /** |
| * Grid options implementation. |
| * |
| * @author <a href="mailto:aefimov.box@gmail.com">Alexey Efimov</a> |
| */ |
| final class GridOptionsImpl implements GridOptions, JDOMExternalizable { |
| private boolean showDefault; |
| private int lineMinZoomFactor = DEFAULT_LINE_ZOOM_FACTOR; |
| private int lineSpan = DEFAULT_LINE_SPAN; |
| private Color lineColor = DEFAULT_LINE_COLOR; |
| private final PropertyChangeSupport propertyChangeSupport; |
| |
| GridOptionsImpl(PropertyChangeSupport propertyChangeSupport) { |
| this.propertyChangeSupport = propertyChangeSupport; |
| } |
| |
| public boolean isShowDefault() { |
| return showDefault; |
| } |
| |
| public int getLineZoomFactor() { |
| return lineMinZoomFactor; |
| } |
| |
| public int getLineSpan() { |
| return lineSpan; |
| } |
| |
| public Color getLineColor() { |
| return lineColor; |
| } |
| |
| void setShowDefault(boolean showDefault) { |
| boolean oldValue = this.showDefault; |
| if (oldValue != showDefault) { |
| this.showDefault = showDefault; |
| propertyChangeSupport.firePropertyChange(ATTR_SHOW_DEFAULT, oldValue, this.showDefault); |
| } |
| } |
| |
| void setLineMinZoomFactor(int lineMinZoomFactor) { |
| int oldValue = this.lineMinZoomFactor; |
| if (oldValue != lineMinZoomFactor) { |
| this.lineMinZoomFactor = lineMinZoomFactor; |
| propertyChangeSupport.firePropertyChange(ATTR_LINE_ZOOM_FACTOR, oldValue, this.lineMinZoomFactor); |
| } |
| } |
| |
| void setLineSpan(int lineSpan) { |
| int oldValue = this.lineSpan; |
| if (oldValue != lineSpan) { |
| this.lineSpan = lineSpan; |
| propertyChangeSupport.firePropertyChange(ATTR_LINE_SPAN, oldValue, this.lineSpan); |
| } |
| } |
| |
| void setLineColor(Color lineColor) { |
| Color oldColor = this.lineColor; |
| if (lineColor == null) { |
| this.lineColor = DEFAULT_LINE_COLOR; |
| } |
| if (!oldColor.equals(lineColor)) { |
| this.lineColor = lineColor; |
| propertyChangeSupport.firePropertyChange(ATTR_LINE_COLOR, oldColor, this.lineColor); |
| } |
| } |
| |
| public void inject(GridOptions options) { |
| setShowDefault(options.isShowDefault()); |
| setLineMinZoomFactor(options.getLineZoomFactor()); |
| setLineSpan(options.getLineSpan()); |
| setLineColor(options.getLineColor()); |
| } |
| |
| public boolean setOption(String name, Object value) { |
| if (ATTR_SHOW_DEFAULT.equals(name)) { |
| setShowDefault((Boolean) value); |
| } else if (ATTR_LINE_ZOOM_FACTOR.equals(name)) { |
| setLineMinZoomFactor((Integer) value); |
| } else if (ATTR_LINE_SPAN.equals(name)) { |
| setLineSpan((Integer) value); |
| } else if (ATTR_LINE_COLOR.equals(name)) { |
| setLineColor((Color) value); |
| } else { |
| return false; |
| } |
| return true; |
| } |
| |
| public void readExternal(Element element) { |
| showDefault = JDOMExternalizer.readBoolean(element, ATTR_SHOW_DEFAULT); |
| lineMinZoomFactor = JDOMExternalizer.readInteger(element, ATTR_LINE_ZOOM_FACTOR, DEFAULT_LINE_ZOOM_FACTOR); |
| lineSpan = JDOMExternalizer.readInteger(element, ATTR_LINE_SPAN, DEFAULT_LINE_SPAN); |
| lineColor = JDOMExternalizerEx.readColor(element, ATTR_LINE_COLOR, DEFAULT_LINE_COLOR); |
| } |
| |
| public void writeExternal(Element element) { |
| JDOMExternalizer.write(element, ATTR_SHOW_DEFAULT, showDefault); |
| JDOMExternalizer.write(element, ATTR_LINE_ZOOM_FACTOR, lineMinZoomFactor); |
| JDOMExternalizer.write(element, ATTR_LINE_SPAN, lineSpan); |
| JDOMExternalizerEx.write(element, ATTR_LINE_COLOR, lineColor); |
| } |
| |
| public boolean equals(Object obj) { |
| if (this == obj) { |
| return true; |
| } |
| if (!(obj instanceof GridOptions)) { |
| return false; |
| } |
| |
| GridOptions otherOptions = (GridOptions) obj; |
| return lineMinZoomFactor == otherOptions.getLineZoomFactor() && |
| lineSpan == otherOptions.getLineSpan() && |
| showDefault == otherOptions.isShowDefault() && |
| lineColor != null ? lineColor.equals(otherOptions.getLineColor()) : otherOptions.getLineColor() == null; |
| } |
| |
| public int hashCode() { |
| int result; |
| result = (showDefault ? 1 : 0); |
| result = 29 * result + lineMinZoomFactor; |
| result = 29 * result + lineSpan; |
| result = 29 * result + (lineColor != null ? lineColor.hashCode() : 0); |
| return result; |
| } |
| } |