package org.geogebra.desktop.geogebra3D;
import java.awt.Rectangle;
import java.util.ArrayList;
import org.geogebra.common.geogebra3D.euclidianForPlane.EuclidianViewForPlaneCompanion;
import org.geogebra.common.geogebra3D.main.App3DCompanion;
import org.geogebra.common.kernel.geos.GeoElement;
import org.geogebra.common.kernel.kernelND.ViewCreator;
import org.geogebra.common.main.App;
import org.geogebra.common.main.settings.EuclidianSettings;
import org.geogebra.desktop.geogebra3D.euclidianForPlane.EuclidianControllerForPlaneD;
import org.geogebra.desktop.geogebra3D.euclidianForPlane.EuclidianViewForPlaneD;
import org.geogebra.desktop.geogebra3D.gui.layout.panels.EuclidianDockPanelForPlaneD;
import org.geogebra.desktop.gui.layout.DockPanelD;
import org.geogebra.desktop.gui.layout.LayoutD;
import org.geogebra.desktop.main.AppD;
/**
*
* @author mathieu
*
* Companion for 3D application in desktop
*/
public class App3DCompanionD extends App3DCompanion {
/**
* constructor
*
* @param app
* application
*/
public App3DCompanionD(App app) {
super(app);
}
@Override
protected EuclidianViewForPlaneCompanion createEuclidianViewForPlane(
ViewCreator plane, EuclidianSettings evSettings,
boolean panelSettings) {
EuclidianViewForPlaneD view = new EuclidianViewForPlaneD(
new EuclidianControllerForPlaneD(app.getKernel()), plane,
evSettings);
// create dock panel
panel = new EuclidianDockPanelForPlaneD((AppD) app, view, incViewID());
view.setPanelID(panel.getViewId());
((LayoutD) app.getGuiManager().getLayout()).registerPanel(panel);
if (panelSettings) {
panel.setFrameBounds(new Rectangle(600, 400));
panel.setVisible(true);
panel.toggleStyleBar();
((LayoutD) app.getGuiManager().getLayout()).getDockManager()
.show(panel);
}
return view.getCompanion();
}
private EuclidianDockPanelForPlaneD panel;
@Override
public DockPanelD getPanelForPlane() {
return panel;
}
private ArrayList<EuclidianDockPanelForPlaneD> panelForPlaneList;
@Override
public void storeViewCreators() {
if (panelForPlaneList == null) {
panelForPlaneList = new ArrayList<EuclidianDockPanelForPlaneD>();
} else {
panelForPlaneList.clear();
}
if (app.getGuiManager() != null) {
DockPanelD[] panels = ((LayoutD) app.getGuiManager().getLayout())
.getDockManager().getPanels();
for (int i = 0; i < panels.length; i++) {
if (panels[i] instanceof EuclidianDockPanelForPlaneD) {
panelForPlaneList
.add((EuclidianDockPanelForPlaneD) panels[i]);
}
}
}
}
@Override
public void recallViewCreators() {
for (EuclidianDockPanelForPlaneD p : panelForPlaneList) {
EuclidianViewForPlaneD view = p.getView();
GeoElement geo = app.getKernel()
.lookupLabel(((GeoElement) view.getCompanion().getPlane())
.getLabelSimple());
if (geo != null && (geo instanceof ViewCreator)) {
ViewCreator plane = (ViewCreator) geo;
view.getCompanion().setPlane(plane);
plane.setEuclidianViewForPlane(view.getCompanion());
view.getCompanion().updateForPlane();
} else {
// no more creator : remove
p.getView().getCompanion().doRemove();
}
}
}
}