// -*- C++ -*-
/**
 * \file FormGraphics.h
 * This file is part of LyX, the document processor.
 * Licence details can be found in the file COPYING.
 *
 * \author Baruch Even
 * \author Herbert Voß
 *
 * Full author contact details are available in file CREDITS.
 */

#ifndef FORMGRAPHICS_H
#define FORMGRAPHICS_H

#include "FormDialogView.h"
#include <boost/scoped_ptr.hpp>
#include <vector>

namespace lyx {
namespace frontend {

class CheckedPath;
class ControlGraphics;
struct FD_graphics;
struct FD_graphics_file;
struct FD_graphics_bbox;
struct FD_graphics_extra;

/** This class provides an XForms implementation of the Graphics Dialog.
 */
class FormGraphics
	: public FormController<ControlGraphics, FormView<FD_graphics> > {
public:
	///
	FormGraphics(Dialog &);
private:

	/** Redraw the form (on receipt of a Signal indicating, for example,
	    that the xforms colours have been re-mapped). */
	virtual void redraw();
	/// Set the Params variable for the Controller.
	virtual void apply();
	/// Build the dialog.
	virtual void build();
	/// Update dialog before/whilst showing it.
	virtual void update();
	/// Update the BoundingBox info.
	void updateBB(std::string const & filename, std::string const & bb_inset);
	/// Filter the inputs on callback from xforms
	virtual ButtonPolicy::SMInput input(FL_OBJECT *, long);

	// Accessor to checker owned by the button controller.
	CheckedPath * file_checker_;

	/// Real GUI implementation.
	boost::scoped_ptr<FD_graphics_file> file_;
	///
	boost::scoped_ptr<FD_graphics_bbox> bbox_;
	///
	boost::scoped_ptr<FD_graphics_extra> extra_;

	/// Store the LaTeX names for the rotation origins.
	std::vector<std::string> origins_;
};

} // namespace frontend
} // namespace lyx

#endif  // FORMGRAPHICS_H
