AbstractPanelPlotNode.hh 1.32 KB
/*
 * AbstractPanelPlotNode.hh
 *
 *  Created on: Dec 6, 2013
 *      Author: amdadev
 */

#ifndef ABSTRACTPANELPLOTNODE_HH_
#define ABSTRACTPANELPLOTNODE_HH_

#include <boost/smart_ptr/shared_ptr.hpp>
#include <libxml/tree.h>

#include "NodeCfg.hh"
#include "PanelPlotOutput.hh"
#include "PlotOutput.hh"

namespace plot {
/**
 * Base class for creating a PanelPlotOutput object and add it to its PlotOutput parent.
 * Subclasses must register themselves into PanelPlotNodeRegistry.
 * (@see plot::TimePlotNode for an example of subclass implementation).
 * Using a registry allows to add new plugins (using AMDA plugins mechanism) to handle new kind of
 * plot.
 */
class AbstractPanelPlotNode: public AMDA::XMLConfigurator::NodeGrpCfg {
public:
	AbstractPanelPlotNode();
	virtual ~AbstractPanelPlotNode();
	/**
	 * @overload AMDA::XMLConfigurator::NodeCfg method.
	 * Subclasses should not overload that method (that's why we mark it as final),
	 * specific behaviour must be handled in the protected
	 * boost::shared_ptr<PanelPlotOutput> proceed(xmlNodePtr, PlotOutput*, Panel*) method instead.
	 */
	void proceed(xmlNodePtr pNode, const AMDA::Parameters::CfgContext& pCtx) final;
protected:
	virtual boost::shared_ptr<PanelPlotOutput> proceed(xmlNodePtr, PlotOutput*, Panel*)=0;

};

} /* namespace plot */

#endif /* ABSTRACTPANELPLOTNODE_HH_ */