/* * Copyright 2000-2012 JetBrains s.r.o. * * 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 com.intellij.designer; import com.intellij.openapi.editor.Document; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileEditor.FileEditorState; import com.intellij.openapi.fileEditor.FileEditorStateLevel; import com.intellij.openapi.vfs.VirtualFile; import org.jdom.Element; import org.jetbrains.annotations.NotNull; /** * @author Alexander Lobas */ public class DesignerEditorState implements FileEditorState { private static final String DESIGNER_ZOOM = "ui-designer-zoom"; private final long myModificationStamp; private final double myZoom; public DesignerEditorState(VirtualFile file, double zoom) { Document document = FileDocumentManager.getInstance().getCachedDocument(file); myModificationStamp = document != null ? document.getModificationStamp() : file.getModificationStamp(); myZoom = zoom; } public double getZoom() { return myZoom; } @Override public int hashCode() { int A = (int)(myModificationStamp ^ (myModificationStamp >>> 32)); long B = Double.doubleToLongBits(myZoom); return 31 * A + (int)(B ^ (B >>> 32)); } @Override public boolean equals(Object object) { if (this == object) { return true; } if (object instanceof DesignerEditorState) { DesignerEditorState state = (DesignerEditorState)object; return myModificationStamp == state.myModificationStamp && myZoom == state.myZoom; } return false; } @Override public boolean canBeMergedWith(FileEditorState otherState, FileEditorStateLevel level) { return otherState instanceof DesignerEditorState; } /** * @see com.intellij.openapi.fileEditor.FileEditorProvider#readState(org.jdom.Element, com.intellij.openapi.project.Project, com.intellij.openapi.vfs.VirtualFile) */ @NotNull public static FileEditorState readState(@NotNull Element sourceElement, @NotNull VirtualFile file, double defaultZoom) { double zoom = defaultZoom; try { zoom = Double.parseDouble(sourceElement.getAttributeValue(DESIGNER_ZOOM)); } catch (Throwable e) { // ignore } return new DesignerEditorState(file, zoom); } /** * @see com.intellij.openapi.fileEditor.FileEditorProvider#writeState(com.intellij.openapi.fileEditor.FileEditorState, com.intellij.openapi.project.Project, org.jdom.Element) */ public static void writeState(@NotNull FileEditorState state, @NotNull Element targetElement) { targetElement.setAttribute(DESIGNER_ZOOM, Double.toString(((DesignerEditorState)state).getZoom())); } }