/*******************************************************************************
* Copyright 2013 Geoscience Australia
*
* 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 au.gov.ga.earthsci.worldwind.common;
import gov.nasa.worldwind.View;
import gov.nasa.worldwind.WorldWindow;
import gov.nasa.worldwind.event.PositionListener;
import gov.nasa.worldwind.event.RenderingExceptionListener;
import gov.nasa.worldwind.event.RenderingListener;
import gov.nasa.worldwind.event.SelectListener;
import java.util.Collection;
/**
* Helper that keeps track of open {@link WorldWindow}s, and allows for
* listening to events on them.
*
* @author Michael de Hoog (michael.dehoog@ga.gov.au)
*/
public interface WorldWindowRegistry
{
public final WorldWindowRegistry INSTANCE = new WorldWindowRegistryImpl();
/**
* Register a new world window. Should be called when a new world window is
* created.
*
* @param worldWindow
*/
void register(WorldWindow worldWindow);
/**
* Unregister a registered world window. Should be called when a world
* window is hidden and will not be used again.
*
* @param worldWindow
*/
void unregister(WorldWindow worldWindow);
/**
* @return A readonly collection of the registered world windows.
*/
Collection<WorldWindow> getAll();
/**
* Get the last world window that was activated (ie received focus) by the
* user.
* <p/>
* Returns null if no world windows are registered, otherwise always returns
* the last active window (or the last registered).
*
* @return The last active world window.
*/
WorldWindow getActive();
/**
* Mark the given world window as activated. Should be called when the user
* gives a world window input focus.
* <p/>
* Calling this on an unregistered world window will register the window.
*
* @param active
* World window that was activated
*/
void setActive(WorldWindow active);
/**
* Get the first world window that was registered. This should be used
* whenever creating new world windows to share the OpenGL context with.
*
* @return The first world window that was registered
*/
WorldWindow getFirstRegistered();
/**
* @return The view of the last active world window.
*/
View getActiveView();
/**
* Get the world window that is currently being rendered, or the last to be
* rendered. When a world window is registered, a {@link RenderingListener}
* is added to it, which listens for render events and sets the last
* rendering world window.
*
* @return The world window being rendered, or the last to be rendered.
*/
WorldWindow getRendering();
/**
* @return The view of the currently rendering or last rendered world
* window.
*/
View getRenderingView();
/**
* Adds a rendering listener to all registered world windows.
*
* @see WorldWindow#addRenderingListener(RenderingListener)
*/
void addRenderingListener(RenderingListener listener);
/**
* Removes a rendering listener.
*
* @see WorldWindow#removeRenderingListener(RenderingListener)
*/
void removeRenderingListener(RenderingListener listener);
/**
* Adds a select listener to all registered world windows.
*
* @see WorldWindow#addSelectListener(SelectListener)
*/
void addSelectListener(SelectListener listener);
/**
* Removes a select listener.
*
* @see WorldWindow#removeSelectListener(SelectListener)
*/
void removeSelectListener(SelectListener listener);
/**
* Adds a position listener to all registered world windows.
*
* @see WorldWindow#addPositionListener(PositionListener)
*/
void addPositionListener(PositionListener listener);
/**
* Removes a position listener.
*
* @see WorldWindow#removePositionListener(PositionListener)
*/
void removePositionListener(PositionListener listener);
/**
* Adds an exception listener to all registered world windows.
*
* @see WorldWindow#addRenderingExceptionListener(RenderingExceptionListener)
*/
void addRenderingExceptionListener(RenderingExceptionListener listener);
/**
* Removes a rendering exception listener.
*
* @see WorldWindow#removeRenderingExceptionListener(RenderingExceptionListener)
*/
void removeRenderingExceptionListener(RenderingExceptionListener listener);
/**
* Call {@link WorldWindow#redraw()} on all registered world windows.
*/
void redraw();
/**
* Call {@link WorldWindow#redrawNow()} on all registered world windows.
*/
void redrawNow();
}