/* * 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.ZoomOptions; import org.jdom.Element; import java.awt.*; import java.beans.PropertyChangeSupport; /** * Zoom options implementation. * * @author <a href="mailto:aefimov.box@gmail.com">Alexey Efimov</a> */ final class ZoomOptionsImpl implements ZoomOptions, JDOMExternalizable { private boolean wheelZooming = true; private boolean smartZooming = true; private int prefferedWidth = DEFAULT_PREFFERED_SIZE.width; private int prefferedHeight = DEFAULT_PREFFERED_SIZE.height; private final PropertyChangeSupport propertyChangeSupport; ZoomOptionsImpl(PropertyChangeSupport propertyChangeSupport) { this.propertyChangeSupport = propertyChangeSupport; } public boolean isWheelZooming() { return wheelZooming; } public boolean isSmartZooming() { return smartZooming; } public Dimension getPrefferedSize() { return new Dimension(prefferedWidth, prefferedHeight); } void setWheelZooming(boolean wheelZooming) { boolean oldValue = this.wheelZooming; if (oldValue != wheelZooming) { this.wheelZooming = wheelZooming; propertyChangeSupport.firePropertyChange(ATTR_WHEEL_ZOOMING, oldValue, this.wheelZooming); } } void setSmartZooming(boolean smartZooming) { boolean oldValue = this.smartZooming; if (oldValue != smartZooming) { this.smartZooming = smartZooming; propertyChangeSupport.firePropertyChange(ATTR_SMART_ZOOMING, oldValue, this.smartZooming); } } void setPrefferedSize(Dimension prefferedSize) { if (prefferedSize == null) { prefferedSize = DEFAULT_PREFFERED_SIZE; } setPrefferedWidth(prefferedSize.width); setPrefferedHeight(prefferedSize.height); } void setPrefferedWidth(int prefferedWidth) { int oldValue = this.prefferedWidth; if (oldValue != prefferedWidth) { this.prefferedWidth = prefferedWidth; propertyChangeSupport.firePropertyChange(ATTR_PREFFERED_WIDTH, oldValue, this.prefferedWidth); } } void setPrefferedHeight(int prefferedHeight) { int oldValue = this.prefferedHeight; if (oldValue != prefferedHeight) { this.prefferedHeight = prefferedHeight; propertyChangeSupport.firePropertyChange(ATTR_PREFFERED_HEIGHT, oldValue, this.prefferedHeight); } } public void inject(ZoomOptions options) { setWheelZooming(options.isWheelZooming()); setSmartZooming(options.isSmartZooming()); setPrefferedSize(options.getPrefferedSize()); } public boolean setOption(String name, Object value) { if (ATTR_WHEEL_ZOOMING.equals(name)) { setWheelZooming((Boolean)value); } else if (ATTR_SMART_ZOOMING.equals(name)) { setSmartZooming((Boolean)value); } else if (ATTR_PREFFERED_WIDTH.equals(name)) { setPrefferedWidth((Integer)value); } else if (ATTR_PREFFERED_HEIGHT.equals(name)) { setPrefferedHeight((Integer)value); } else { return false; } return true; } public void readExternal(Element element) { setWheelZooming(JDOMExternalizer.readBoolean(element, ATTR_WHEEL_ZOOMING)); setSmartZooming(JDOMExternalizer.readBoolean(element, ATTR_SMART_ZOOMING)); setPrefferedWidth(JDOMExternalizer.readInteger(element, ATTR_PREFFERED_WIDTH, DEFAULT_PREFFERED_SIZE.width)); setPrefferedHeight(JDOMExternalizer.readInteger(element, ATTR_PREFFERED_HEIGHT, DEFAULT_PREFFERED_SIZE.height)); } public void writeExternal(Element element) { JDOMExternalizer.write(element, ATTR_WHEEL_ZOOMING, wheelZooming); JDOMExternalizer.write(element, ATTR_SMART_ZOOMING, smartZooming); JDOMExternalizer.write(element, ATTR_PREFFERED_WIDTH, prefferedWidth); JDOMExternalizer.write(element, ATTR_PREFFERED_HEIGHT, prefferedHeight); } public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof ZoomOptions)) { return false; } ZoomOptions otherOptions = (ZoomOptions)obj; Dimension prefferedSize = otherOptions.getPrefferedSize(); return prefferedSize != null && prefferedHeight == prefferedSize.height && prefferedWidth == prefferedSize.width && smartZooming == otherOptions.isSmartZooming() && wheelZooming == otherOptions.isWheelZooming(); } public int hashCode() { int result; result = (wheelZooming ? 1 : 0); result = 29 * result + (smartZooming ? 1 : 0); result = 29 * result + prefferedWidth; result = 29 * result + prefferedHeight; return result; } }