/*
* This file is part or JMathLib
*
* Check it out at http://www.jmathlib.de
*
* Author: stefan@held-mueller.de and others
* (c) 2008-2009
*/
package jmathlib.core.graphics;
import java.util.Vector;
import jmathlib.core.interpreter.ErrorLogger;
import jmathlib.core.graphics.properties.*;
public class GraphicsManager extends HandleObject
{
/**A list of all figures*/
Vector figures = new Vector();
/** current figure that is used for plot()... commands*/
private int currentFigure = -1;
/** properties */
//CallbackObjectP
//DoubleStructProperty CommandWindowSizeP;
//CurrentFigureP
//BooleanProperty DiaryP = new BooleanProperty(this, "Diary", true);
//DiaryFileP
//BooleanProperty EchoP = new BooleanProperty(this, "Echo", true);
//FixedWithFontNameP
//FormatP
//FormatSpacingP
//LanguageP
//DoubleStructProperty MonitorPositionsP
//BooleanProperty MoreP
//PointerLocationP
//PointerWindowP
//RecursionLimitP
//ScreenDepthP
//ScreenPicxelsPerInchP
//ScreenSizeP
//BooleanProperty ShowHiddenHandlesP
UnitsProperty UnitsP = new UnitsProperty(this, "Units", "pixels");
//BooleanProperty BeeingDeletedP
//ButtonDownFcnP
//ChildrenP
//BooleanProperty ClippingP
//CreateFcnP
//DeleteFcnP
//BusyActionP
//BooleanProperty HandleVisibilityP
//BooleanProperty HitTestP
//BooleanProperty InterruptibleP = new BooleanProperty(this, "Interruptible", true);
//ParentP
BooleanProperty SelectedP = new BooleanProperty(this, "Selected", false);
BooleanProperty SelectionHighlightP = new BooleanProperty(this, "SelectionHighlight", true);
//TagP
//TypeP
//UIContextMenuP
//UserDataP
BooleanProperty VisibileP = new BooleanProperty(this, "Visible", true);
public GraphicsManager()
{
}
public FigureObject getCurrentFigure()
{
// If no figure was created before, create one.
//if (currentFigure == -1) createNewFigure();
// find current figure
for(int n = 0; n < figures.size(); n++)
{
if ( ((FigureObject)figures.elementAt(n)).getFigureNumber() == currentFigure )
return (FigureObject)figures.elementAt(n);
}
// If this point is reached the figure number does not exist any more
// If no figure was created before, create one.
createNewFigure();
return getCurrentFigure();
}
public void createNewFigure()
{
createNewFigure( getUnusedFigureNumber() );
ErrorLogger.debugLine("GraphicsManager: createNewFigure: "+currentFigure);
}
public void createNewFigure(int _figureNo)
{
if (_figureNo < 1 ) return;
// The current figure is switch to this number anyway, so that all
// subsequent graphics-commands go to this figure
currentFigure = _figureNo;
// check if the figure with number _figureNo is already created
if (findFigureNumber(_figureNo)) return;
FigureObject fig = new FigureObject(currentFigure);
fig.setGraphicsManager(this);
figures.addElement( fig );
ErrorLogger.debugLine("GraphicsManager: addFigure: "+currentFigure);
}
/**check the figures vector if a figure with the number _figureNo exists*/
private boolean findFigureNumber(int _figureNo)
{
FigureObject fig = findFigure(_figureNo);
return (fig != null);
}
private FigureObject findFigure(int _figureNo)
{
for(int n = 0; n < figures.size(); n++)
{
if ( ((FigureObject)figures.elementAt(n)).getFigureNumber() == _figureNo )
return (FigureObject)figures.elementAt(n);
}
return null;
}
/**return a figure number that is not already used*/
private int getUnusedFigureNumber()
{
int number = 1;
while (true)
{
if (findFigureNumber( number ) == false) return number;
number++;
}
}
public int getCurrentFigureNumber()
{
return currentFigure;
}
public void setCurrentFigure(int _currentFigure)
{
if (!findFigureNumber(_currentFigure)) return;
currentFigure = _currentFigure;
}
// public FigureObject getFigure(int index)
//{
// if(index > -1)
// return (FigureObject)figures.elementAt(index);
// else
// return null;
//}
public void removeFigure(int _figureNo)
{
// check if this figure is the "current figure"
if (_figureNo == currentFigure) currentFigure = -1;
// find figure
for(int n = 0; n < figures.size(); n++)
{
if ( ((FigureObject)figures.elementAt(n)).getFigureNumber() == _figureNo )
{
figures.removeElementAt(n);
}
}
if (currentFigure < 1 && figures.size() > 0)
currentFigure = ((FigureObject)figures.elementAt(0)).getFigureNumber();
}
public void findProperty(String property)
{
}
public void setProperty(String property, double value)
{
}
public void setProperty(String property, String value)
{
}
public void closeAll()
{
for(int n = 0; n < figures.size(); n++)
((FigureObject)figures.elementAt(n)).close(false);
figures.clear();
currentFigure = -1;
}
public void closeFigure(int figureNo)
{
if (figureNo < 1)
{
if (currentFigure >= 1)
closeFigure (currentFigure);
}
else
{
FigureObject fig = findFigure(figureNo);
if (fig != null)
fig.close();
}
}
/*public HandleObject getHandleObject(int handle)
{
try { return HandleObject.getHandleObject(handle); }
catch (Exception e) {
ErrorLogger.debugLine("GraphicalManager: handle not found");
}
return null;
}*/
}