/*
* Licensed Materials - Property of Rogue Wave Software, Inc.
* © Copyright Rogue Wave Software, Inc. 2014, 2017
* © Copyright IBM Corp. 2009, 2014
* © Copyright ILOG 1996, 2009
* All Rights Reserved.
*
* Note to U.S. Government Users Restricted Rights:
* The Software and Documentation were developed at private expense and
* are "Commercial Items" as that term is defined at 48 CFR 2.101,
* consisting of "Commercial Computer Software" and
* "Commercial Computer Software Documentation", as such terms are
* used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4,
* as applicable.
*/
import ilog.views.dashboard.IlvDashboardContext;
import ilog.views.dashboard.IlvDashboardDiagram;
import ilog.views.diagrammer.IlvDiagrammerException;
import ilog.views.graphlayout.IlvGraphLayout;
import ilog.views.sdm.IlvSDMModel;
import ilog.views.sdm.event.SDMPropertyChangeEvent;
import ilog.views.sdm.event.SDMPropertyChangeListener;
import ilog.views.sdm.model.IlvDefaultSDMNode;
import ilog.views.sdm.renderer.IlvRendererUtil;
import ilog.views.sdm.renderer.graphlayout.IlvGraphLayoutRenderer;
import java.awt.Dimension;
import java.net.URL;
import java.util.Enumeration;
/**
* A control panel displays a dashboard containing symbols used to modify the parameters of a layout.
* It is associated to a diagrammer containing the graph and the layout to modify and also to a controller which will
* perform the real job.
*
*/
public class GraphLayoutControlPanel extends IlvDashboardDiagram {
GraphLayoutDiagrammer layoutDiagrammer = null;
GraphLayoutController controller = null;
/**
*
* @param dashboardURL
* @param ld
* @param c
*/
public GraphLayoutControlPanel(URL dashboardURL,GraphLayoutDiagrammer ld,GraphLayoutController c){
super(new IlvDashboardContext());
layoutDiagrammer = ld;
this.controller = c;
// ilog.views.graphlayout.internalutil.LogResUtil.logStackTrace = true;
// define a property listener in order to/ detect changes on symbols and to set layout properties
// on the associated layout diagrammer
SDMPropertyChangeListener lstnr= new SDMPropertyChangeListener(){
Override
public void propertyChanged(SDMPropertyChangeEvent event) {
// get data about the event
IlvDefaultSDMNode object = (IlvDefaultSDMNode)event.getObject();
String property = event.getPropertyName();
Object newValue = event.getNewValue();
if(property.startsWith("layout.") ){
String layoutProperty = property.substring(7);
//try to get a layout renderer
IlvGraphLayoutRenderer glr = null;
glr = (IlvGraphLayoutRenderer)IlvRendererUtil.getRenderer( layoutDiagrammer.getEngine(),IlvRendererUtil.GraphLayout);
//if it failed, then try to get a link layout
if(glr==null){
glr = (IlvGraphLayoutRenderer)IlvRendererUtil.getRenderer( layoutDiagrammer.getEngine(),IlvRendererUtil.LinkLayout);
}
IlvGraphLayout l = glr.getGraphLayout();
//delegate control of the layout to the associated controller
if(GraphLayoutControlPanel.this.controller!=null ){
GraphLayoutControlPanel.this.controller.apply(GraphLayoutControlPanel.this,object,layoutDiagrammer, l,layoutProperty,newValue);
}
glr.performLayout(layoutDiagrammer.getEngine());
layoutDiagrammer.fitToContents();
}
}
};
// load the dashboard representing the control panel.
if(dashboardURL!=null){
setPreferredSize(new Dimension(350,99));
setBackground(null);
setOpaque(false);
getView().setBackground(null);
getView().setTransparent(true);
setScrollable(false);
try {
readDashboard(dashboardURL);
} catch (IlvDiagrammerException e) {
e.printStackTrace();
}
//add the listener
getEngine().getModel().addSDMPropertyChangeListener(lstnr);
}
c.init(GraphLayoutControlPanel.this,layoutDiagrammer);
}
/**
* Returns the widget for a given id.
*/
Object getWidget(String id)
{
IlvSDMModel model = getEngine().getModel();
Enumeration e = model.getObjects();
while (e.hasMoreElements()) {
Object obj = e.nextElement();
String[] props = model.getObjectPropertyNames(obj);
for (int i = 0; i < props.length; i++) {
if (props[i].contains(id))
return obj;
}
}
return null;
}
}