/*
* Copyright 2000-2015 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.openapi.util;
import com.intellij.openapi.components.*;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import java.awt.*;
/**
* @author Sergey.Malenkov
*/
public abstract class WindowStateService {
/**
* @return an instance of the service for the application
*/
public static WindowStateService getInstance() {
return ServiceManager.getService(WindowStateService.class);
}
/**
* @param project the project to use by the service
* @return an instance of the service for the specified project
*/
public static WindowStateService getInstance(@NotNull Project project) {
return ServiceManager.getService(project, WindowStateService.class);
}
/**
* Loads a state of the specified component by the specified key.
*
* @param key an unique string key
* @param component a component which state should be changed
* @return {@code true} if a state is loaded successfully, {@code false} otherwise
*/
public final boolean loadState(@NotNull String key, @NotNull Component component) {
return loadStateFor(null, key, component);
}
/**
* Loads a state of the specified component by the given screen and the specified key.
* A screen can be specified by {@link Project}, {@link Window}, or {@link GraphicsDevice}.
*
* @param object an object that specifies a screen to which a component state belongs
* @param key an unique string key
* @param component a component which state should be changed
* @return {@code true} if a state is loaded successfully, {@code false} otherwise
*/
public abstract boolean loadStateFor(Object object, @NotNull String key, @NotNull Component component);
/**
* Stores the specified location that corresponds to the specified key.
* If it is {@code null} the stored location will be removed.
*
* @param key an unique string key
* @param component a component which state should be saved
*/
public final void saveState(@NotNull String key, @NotNull Component component) {
saveStateFor(null, key, component);
}
/**
* Stores the specified location that corresponds to the given screen and the specified key.
* If it is {@code null} the stored location will be removed.
* A screen can be specified by {@link Project}, {@link Window}, or {@link GraphicsDevice}.
* Do not use a screen which is calculated from the specified component.
*
* @param object an object that specifies a screen to which a component state belongs
* @param key an unique string key
* @param component a component which state should be saved
*/
public abstract void saveStateFor(Object object, @NotNull String key, @NotNull Component component);
/**
* Returns a location that corresponds to the specified key or {@code null}
* if a location does not exist or it is outside of visible area.
*
* @param key an unique string key
* @return a corresponding location
*/
public final Point getLocation(@NotNull String key) {
return getLocationFor(null, key);
}
/**
* Returns a location that corresponds to the given screen and the specified key or {@code null}
* if a location does not exist or it is outside of visible area.
* A screen can be specified by {@link Project}, {@link Window}, or {@link GraphicsDevice}.
*
* @param object an object that specifies a screen to which a location belongs
* @param key an unique string key
* @return a corresponding location
*/
public abstract Point getLocationFor(Object object, @NotNull String key);
/**
* Stores the specified location that corresponds to the specified key.
* If it is {@code null} the stored location will be removed.
*
* @param key an unique string key
*/
public final void putLocation(@NotNull String key, Point location) {
putLocationFor(null, key, location);
}
/**
* Stores the specified location that corresponds to the given screen and the specified key.
* If it is {@code null} the stored location will be removed.
* A screen can be specified by {@link Project}, {@link Window}, or {@link GraphicsDevice}.
* Do not use a screen which is calculated from the specified location.
*
* @param object an object that specifies a screen to which a location belongs
* @param key an unique string key
*/
public abstract void putLocationFor(Object object, @NotNull String key, Point location);
/**
* Returns a size that corresponds to the specified key or {@code null}
* if a size does not exist.
*
* @param key an unique string key
* @return a corresponding size
*/
public final Dimension getSize(@NotNull String key) {
return getSizeFor(null, key);
}
/**
* Returns a size that corresponds to the given screen and the specified key or {@code null}
* if a size does not exist.
* A screen can be specified by {@link Project}, {@link Window}, or {@link GraphicsDevice}.
*
* @param object an object that specifies a screen to which a size belongs
* @param key an unique string key
* @return a corresponding size
*/
public abstract Dimension getSizeFor(Object object, @NotNull String key);
/**
* Stores the specified size that corresponds to the specified key.
* If it is {@code null} the stored size will be removed.
*
* @param key an unique string key
*/
public final void putSize(@NotNull String key, Dimension size) {
putSizeFor(null, key, size);
}
/**
* Stores the specified size that corresponds to the given screen and the specified key.
* If it is {@code null} the stored size will be removed.
* A screen can be specified by {@link Project}, {@link Window}, or {@link GraphicsDevice}.
* Do not use a screen which is calculated from the specified size.
*
* @param object an object that specifies a screen to which a size belongs
* @param key an unique string key
*/
public abstract void putSizeFor(Object object, @NotNull String key, Dimension size);
/**
* Returns a bounds that corresponds to the specified key or {@code null}
* if a bounds does not exist or it is outside of visible area.
*
* @param key an unique string key
* @return a corresponding bounds
*/
public final Rectangle getBounds(@NotNull String key) {
return getBoundsFor(null, key);
}
/**
* Returns a bounds that corresponds to the given screen and the specified key or {@code null}
* if a bounds does not exist or it is outside of visible area.
* A screen can be specified by {@link Project}, {@link Window}, or {@link GraphicsDevice}.
*
* @param object an object that specifies a screen to which a bounds belongs
* @param key an unique string key
* @return a corresponding bounds
*/
public abstract Rectangle getBoundsFor(Object object, @NotNull String key);
/**
* Stores the specified bounds that corresponds to the specified key.
* If it is {@code null} the stored bounds will be removed.
*
* @param key an unique string key
*/
public final void putBounds(@NotNull String key, Rectangle bounds) {
putBoundsFor(null, key, bounds);
}
/**
* Stores the specified bounds that corresponds to the given screen and the specified key.
* If it is {@code null} the stored bounds will be removed.
* A screen can be specified by {@link Project}, {@link Window}, or {@link GraphicsDevice}.
* Do not use a screen which is calculated from the specified bounds.
*
* @param object an object that specifies a screen to which a bounds belongs
* @param key an unique string key
*/
public abstract void putBoundsFor(Object object, @NotNull String key, Rectangle bounds);
}