/*******************************************************************************
* Copyright (C) 2003-2007, 2013, Guillaume Brocker
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Guillaume Brocker - Initial API and implementation
*
******************************************************************************/
package eclox.ui.editor.basic;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import eclox.core.doxyfiles.Doxyfile;
import eclox.ui.editor.editors.CheckBoxEditor;
import eclox.ui.editor.editors.IEditor;
import eclox.ui.editor.editors.IEditorListener;
/**
* Implements a art that provides editors for diagram generation controlling.
*
* @author Guillaume Brocker
*/
public class DiagramsPart extends Part {
/**
* Implements an editor listener that will trigger enabled state updates.
*/
private class MyEditorListener implements IEditorListener {
/**
* @see eclox.ui.editor.editors.IEditorListener#editorChanged(eclox.ui.editor.editors.IEditor)
*/
public void editorChanged(IEditor editor) {
// Pre-condition
assert editor == diagrams;
final String selection = diagrams.getSelection();
final boolean enabled = selection != null && selection.equals(DIAGRAM_DOT_TOOL);
classGraph .setEnabled(enabled && classGraph.hasInput());
collaborationGraph.setEnabled(enabled && collaborationGraph.hasInput());
includeGraph .setEnabled(enabled && includeGraph.hasInput());
includedByGraph .setEnabled(enabled && includedByGraph.hasInput());
graphicalHierarcy .setEnabled(enabled && graphicalHierarcy.hasInput());
callGraph .setEnabled(enabled && callGraph.hasInput());
}
}
/**
* symbolic constant for diagram activation's state
*/
private static final String DIAGRAM_NONE = "No diagrams";
/**
* symbolic constant for diagram activation's state
*/
private static final String DIAGRAM_BUILT_IN = "Use built-in diagram generator";
/**
* symbolic constant for diagram activation's state
*/
private static final String DIAGRAM_DOT_TOOL = "Use dot tool from the GraphViz package to generate:";
/**
* the editor for diagram activation
*/
private MultiEditor diagrams = new RadioMultiEditor( new String[] {DIAGRAM_NONE, DIAGRAM_BUILT_IN, DIAGRAM_DOT_TOOL} );
/**
* the editor for the dot class graph generation
*/
private CheckBoxEditor classGraph = new CheckBoxEditor("class diagrams");
/**
* the editor for the dot collaboration graph generation
*/
private CheckBoxEditor collaborationGraph = new CheckBoxEditor("collaboration diagrams");
/**
* the editor for the dot include graph generation
*/
private CheckBoxEditor includeGraph = new CheckBoxEditor("include dependency graph");
/**
* the editor for the dot included by graph generation
*/
private CheckBoxEditor includedByGraph = new CheckBoxEditor("included by dependency graph");
/**
* the editor for the dot hierarchy graph generation
*/
private CheckBoxEditor graphicalHierarcy = new CheckBoxEditor("overall class hierarchy");
/**
* the editor for the dot call graph generation
*/
private CheckBoxEditor callGraph = new CheckBoxEditor("call graphs");
/**
* Constructor
*
* @param parent the parent composite
* @param toolkit the toolkit to use for control creations
* @param doxyfile the doxyfile being edited
*/
DiagramsPart( Composite parent, FormToolkit toolkit, Doxyfile doxyfile ) {
super( parent, toolkit, "Diagrams to Generate", doxyfile );
// Creates all editors.
addEditor( diagrams );
addEditor( classGraph, 16 );
addEditor( collaborationGraph, 16 );
addEditor( includeGraph, 16 );
addEditor( includedByGraph, 16 );
addEditor( graphicalHierarcy, 16 );
addEditor( callGraph, 16 );
// Setup all editors.
if( doxyfile.hasSetting("CLASS_DIAGRAMS")
&& doxyfile.hasSetting("HAVE_DOT") ) {
diagrams.addListener(new MyEditorListener());
diagrams.addSetting(DIAGRAM_BUILT_IN, doxyfile.getSetting("CLASS_DIAGRAMS"));
diagrams.addSetting(DIAGRAM_DOT_TOOL, doxyfile.getSetting("HAVE_DOT"));
classGraph .setInput(doxyfile.getSetting("CLASS_GRAPH"));
collaborationGraph.setInput(doxyfile.getSetting("COLLABORATION_GRAPH"));
includeGraph .setInput(doxyfile.getSetting("INCLUDE_GRAPH"));
includedByGraph .setInput(doxyfile.getSetting("INCLUDED_BY_GRAPH"));
graphicalHierarcy .setInput(doxyfile.getSetting("GRAPHICAL_HIERARCHY"));
callGraph .setInput(doxyfile.getSetting("CALL_GRAPH"));
classGraph .setEnabled(classGraph.hasInput());
collaborationGraph.setEnabled(collaborationGraph.hasInput());
includeGraph .setEnabled(includeGraph.hasInput());
includedByGraph .setEnabled(includedByGraph.hasInput());
graphicalHierarcy .setEnabled(graphicalHierarcy.hasInput());
callGraph .setEnabled(callGraph.hasInput());
}
else {
diagrams .setEnabled(false);
classGraph .setEnabled(false);
collaborationGraph.setEnabled(false);
includeGraph .setEnabled(false);
includedByGraph .setEnabled(false);
graphicalHierarcy .setEnabled(false);
callGraph .setEnabled(false);
}
}
}