package org.geogebra.desktop.geogebra3D.gui.view.algebra;
import java.util.HashMap;
import java.util.Map.Entry;
import javax.swing.tree.DefaultMutableTreeNode;
import org.geogebra.common.euclidian.EuclidianViewInterfaceCommon;
import org.geogebra.common.kernel.geos.GeoElement;
import org.geogebra.desktop.geogebra3D.App3D;
import org.geogebra.desktop.gui.view.algebra.AlgebraControllerD;
import org.geogebra.desktop.gui.view.algebra.AlgebraViewD;
/**
* Algebra view for 3D : change display regarding graphic view selected
*
* @author mathieu
*
*/
public class AlgebraView3D extends AlgebraViewD {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* Nodes for tree mode MODE_VIEW
*/
private HashMap<String, DefaultMutableTreeNode> viewNodesMap;
/**
* Root node for tree mode MODE_VIEW.
*/
private DefaultMutableTreeNode rootView;
/**
* @param algCtrl
* algebra controller
*/
public AlgebraView3D(AlgebraControllerD algCtrl) {
super(algCtrl);
}
@Override
protected DefaultMutableTreeNode getParentNode(GeoElement geo,
int forceLayer) {
if (!treeMode.equals(SortMode.VIEW)) {
return super.getParentNode(geo, forceLayer);
}
DefaultMutableTreeNode parent;
// get view node
EuclidianViewInterfaceCommon view = (EuclidianViewInterfaceCommon) geo
.getViewForValueString();
if (view == null) {
if (geo.isGeoElement3D()) {
view = ((App3D) app).getEuclidianView3D();
} else {
view = app.getActiveEuclidianView();
}
}
String viewString = view.getFromPlaneString();
parent = viewNodesMap.get(viewString);
// do we have to create the parent node?
if (parent == null) {
String transTypeString = view.getTranslatedFromPlaneString();
parent = new DefaultMutableTreeNode(transTypeString);
viewNodesMap.put(viewString, parent);
// find insert pos
int pos = rootView.getChildCount();
for (int i = 0; i < pos; i++) {
DefaultMutableTreeNode child = (DefaultMutableTreeNode) rootView
.getChildAt(i);
if (transTypeString.compareTo(child.toString()) < 0) {
pos = i;
break;
}
}
model.insertNodeInto(parent, rootView, pos);
}
return parent;
}
@Override
protected void clearTree() {
if (!treeMode.equals(SortMode.VIEW)) {
super.clearTree();
return;
}
rootView.removeAllChildren();
viewNodesMap.clear();
}
@Override
protected void initModel() {
if (!treeMode.equals(SortMode.VIEW)) {
super.initModel();
return;
}
// don't re-init anything
if (rootView == null) {
rootView = new DefaultMutableTreeNode();
viewNodesMap = new HashMap<String, DefaultMutableTreeNode>(5);
}
// always try to remove the auxiliary node
if (app.showAuxiliaryObjects && auxiliaryNode != null) {
removeAuxiliaryNode();
}
// set the root
model.setRoot(rootView);
}
@Override
protected void removeAuxiliaryNode() {
if (auxiliaryNode.isNodeChild(rootDependency)) {
super.removeAuxiliaryNode();
}
}
@Override
protected void setTreeLabels() {
if (!treeMode.equals(SortMode.VIEW)) {
super.setTreeLabels();
return;
}
DefaultMutableTreeNode node;
for (Entry<String, DefaultMutableTreeNode> entry : viewNodesMap
.entrySet()) {
String key = entry.getKey();
node = entry.getValue();
node.setUserObject(app.getLocalization().getMenu(key));
model.nodeChanged(node);
}
}
}