/**********************************************************************
 *<
	FILE: shpsels.h

	DESCRIPTION:  Defines Shape Selection utility objects

	CREATED BY: Tom Hudson

	HISTORY: created 31 October 1995

 *>	Copyright (c) 1995, All Rights Reserved.
 **********************************************************************/

#ifndef __SHPSELS__ 

#define __SHPSELS__

class BezierShape;
class PolyShape;

class ShapeVSel {
	public:
	int polys;
	BitArray *sel;
	CoreExport ShapeVSel();
	CoreExport ShapeVSel(ShapeVSel& from);
	CoreExport ~ShapeVSel();
	CoreExport ShapeVSel& operator=(ShapeVSel& from);
	CoreExport BOOL operator==(ShapeVSel& s);
	CoreExport void Insert(int where,int count=0);
	CoreExport void Delete(int where);
	CoreExport void SetSize(ShapeVSel& selset, BOOL save=FALSE);
	CoreExport void SetSize(BezierShape& shape, BOOL save=FALSE);
	CoreExport void SetSize(PolyShape& shape, BOOL save=FALSE);
	CoreExport BitArray& operator[](int index);
	CoreExport void ClearAll();
	CoreExport void SetAll();
	CoreExport void Toggle();
	CoreExport void Empty();
	CoreExport BOOL IsCompatible(ShapeVSel& selset);
	CoreExport BOOL IsCompatible(BezierShape& shape);
	CoreExport BOOL IsCompatible(PolyShape& shape);
	CoreExport IOResult Save(ISave* isave);
	CoreExport IOResult Load(ILoad* iload);
	};

class ShapeSSel {
	public:
	int polys;
	BitArray *sel;
	CoreExport ShapeSSel();
	CoreExport ShapeSSel(ShapeSSel& from);
	CoreExport ~ShapeSSel();
	CoreExport ShapeSSel& operator=(ShapeSSel& from);
	CoreExport BOOL operator==(ShapeSSel& s);
	CoreExport void Insert(int where,int count=0);
	CoreExport void Delete(int where);
	CoreExport void SetSize(ShapeSSel& selset, BOOL save=FALSE);
	CoreExport void SetSize(BezierShape& shape, BOOL save=FALSE);
	CoreExport void SetSize(PolyShape& shape, BOOL save=FALSE);
	CoreExport BitArray& operator[](int index);
	CoreExport void ClearAll();
	CoreExport void SetAll();
	CoreExport void Toggle();
	CoreExport void Empty();
	CoreExport BOOL IsCompatible(ShapeSSel& selset);
	CoreExport BOOL IsCompatible(BezierShape& shape);
	CoreExport BOOL IsCompatible(PolyShape& shape);
	CoreExport IOResult Save(ISave* isave);
	CoreExport IOResult Load(ILoad* iload);
	};

class ShapePSel {
	public:
	int polys;
	BitArray sel;
	CoreExport ShapePSel();
	CoreExport ShapePSel(ShapePSel& from);
	CoreExport ~ShapePSel();
	CoreExport ShapePSel& operator=(ShapePSel& from);
	CoreExport BOOL operator==(ShapePSel& s);
	CoreExport void Insert(int where);
	CoreExport void Delete(int where);
	CoreExport void SetSize(ShapePSel& selset, BOOL save=FALSE);
	CoreExport void SetSize(BezierShape& shape, BOOL save=FALSE);
	CoreExport void SetSize(PolyShape& shape, BOOL save=FALSE);
	CoreExport void Set(int index);
	CoreExport void Set(int index, int value);
	CoreExport void Clear(int index);
	CoreExport int operator[](int index) const;
	CoreExport void ClearAll();
	CoreExport void SetAll();
	CoreExport void Toggle();
	CoreExport void Empty();
	CoreExport BOOL IsCompatible(ShapePSel& selset);
	CoreExport BOOL IsCompatible(BezierShape& shape);
	CoreExport BOOL IsCompatible(PolyShape& shape);
	CoreExport IOResult Save(ISave* isave);
	CoreExport IOResult Load(ILoad* iload);
	};


#endif __SHPSELS__