package com.opendoorlogistics.api.standardcomponents.map;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.geom.Point2D;
import javax.swing.JPanel;
import com.opendoorlogistics.api.ODLApi;
import com.opendoorlogistics.api.components.ComponentControlLauncherApi;
import com.opendoorlogistics.api.geometry.LatLong;
import com.opendoorlogistics.api.geometry.LatLongToScreen;
import com.opendoorlogistics.api.tables.ODLTableReadOnly;
import com.opendoorlogistics.api.ui.Disposable;
/**
* An API for the map to be used by the modes
*
* @author Phil
*
*/
public interface MapApi extends MapApiListeners {
enum PanelPosition {
// TOP,
BOTTOM, LEFT, RIGHT
}
void clearSelection();
/**
* Create a converter representing the current view which doesn't change if the view changes
*
* @return
*/
LatLongToScreen createImmutableConverter();
ODLApi getApi();
ComponentControlLauncherApi getControlLauncherApi();
MapMode getDefaultMapMode();
MapDataApi getMapDataApi();
MapMode getMapMode();
MapToolbar getMapToolbar();
Component getMapWindowComponent();
int getMaxZoom();
int getMinZoom();
long getRenderFlags();
long[] getSelectableIdsWithinPixelRectangle(Rectangle screenCoordinatesRectangle);
long[] getSelectedIds();
<T extends JPanel & Disposable> T getSidePanel(PanelPosition pos);
Point2D getWorldBitmapMapCentre();
Dimension getWorldBitmapMapSize(int zoom);
Point getWorldBitmapPosition(LatLong ll, int zoom);
Rectangle getWorldBitmapViewport();
int getZoom();
/**
* Has the api been disposed (and should no longer be used?)
*
* @return
*/
boolean isDisposed();
boolean isSelectedId(long rowId);
void repaint(boolean repaintPluginOverlapOnly);
void registerActionFactory(MapActionFactory factory, int priority,final String group, boolean needsSetPermission, boolean needsInsertPermission, boolean needsDeletePermission);
void setCursor(Cursor cursor);
void setDefaultMapMode(MapMode mode);
void setMapMode(MapMode mapMode);
void setRenderFlags(long flags);
void setSelectedIds(long... ids);
<T extends JPanel & Disposable> void setSidePanel(T panel, PanelPosition pos);
void setView(int zoom, Point2D worldBitmapMapCentre);
void setViewToBestFit(ODLTableReadOnly drawables);
/**
* Keep the same centre but change the zoom
*
* @param zoom
*/
void setZoom(int zoom);
/**
* The map api maintains a single worker thread which can have tasks added to it and executed in-order.
*
* @param runnable
*/
void submitWork(Runnable runnable);
void updateObjectFiltering();
}