/**
 * The interfaces Gnumeric uses to communicate with graphing components
 *
 * Author:
 *   Jody Goldberg <jgoldberg@home.com>
 */
#include <Bonobo.idl>

module GNOME {
	module Gnumeric {
		interface VectorNotify {
			oneway void remove ();
			oneway void nameChanged (in string name);
		};

		typedef sequence<double> SeqScalar;
		interface VectorScalarNotify : VectorNotify {
			oneway void valueChanged (in short start, in SeqScalar new_values);
		};
		interface VectorScalar : VectorScalarNotify {
			void value (out SeqScalar values, out string name);
		};

		typedef sequence<long> SeqDate;
		interface VectorDateNotify : VectorNotify {
			oneway void valueChanged (in short start, in SeqDate new_values);
		};
		interface VectorDate : VectorDateNotify {
			void value (out SeqDate values, out string name);
		};

		typedef sequence<string> SeqString;
		interface VectorStringNotify : VectorNotify {
			oneway void valueChanged (in short start, in SeqString new_values);
		};
		interface VectorString : VectorStringNotify {
			void value (out SeqString values, out string name);
		};

		module Graph {
			interface Manager : Bonobo::Unknown {
				Bonobo::Control getTypeSelectControl ();
				Bonobo::Control getLayoutControl ();

				VectorScalarNotify addVectorScalar (in VectorScalar vec);
				VectorDateNotify   addVectorDate   (in VectorDate   vec);
				VectorStringNotify addVectorString (in VectorString vec);

				oneway void freeze ();
				oneway void thaw ();
			};
		};
	};
};
