/////////////////////////////////////////////////////////////////////
// (C) Copyright 1993-1998 by Autodesk, Inc. 
//
// Permission to use, copy, modify, and distribute this software in
// object code form for any purpose and without fee is hereby granted, 
// provided that the above copyright notice appears in all copies and 
// that both that copyright notice and the limited warranty and
// restricted rights notice below appear in all supporting 
// documentation.
//
// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS. 
// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE.  AUTODESK, INC. 
// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
// UNINTERRUPTED OR ERROR FREE.
//
// Use, duplication, or disclosure by the U.S. Government is subject to 
// restrictions set forth in FAR 52.227-19 (Commercial Computer
// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
// (Rights in Technical Data and Computer Software), as applicable.
//
/////////////////////////////////////////////////////////////////////

#ifndef __WATCHER__H
#define __WATCHER__H

class AmdtWatcher : public AcmBomReactor
{
public:

  virtual void onNewBOMTable(const AcDbObjectId &newTableId, const AcDbObjectId &compId);
  virtual void onRenameBOMTable(const AcDbObjectId &tableId, const LPCTSTR newName);
  virtual void onEraseBOMTable(const AcDbObjectId &tableId, const AcDbObjectId &compId);

  virtual void onNewPartList(const AcDbObjectId &partList, const AcDbObjectId &bomId);
  virtual void onRenamePartList(const AcDbObjectId &partListId,const LPCTSTR &newname);
  virtual void onErasePartList(const AcDbObjectId &partListId, const AcDbObjectId &bomId);

	///////////////////////////////////////////////////////////////////////////
	//	MRP Management methods:
	///////////////////////////////////////////////////////////////////////////
  //partlist update???
  //
  virtual void aboutToUpdatePartList(const AcDbObjectId& partListId);
  //entry operations
  //
  virtual void entryCreated(const AcDbObjectId& entryId);
  virtual void entryModified(const AcDbObjectId& entryid);
  virtual void aboutToModifyEntry(const AcDbObjectId& entryId,LPCTSTR tag,LPCTSTR value);
  virtual void entryEdit(const AcDbObjectId& entryId,CMapStringToString& dataMapList);
  //item operations
  //
  virtual void itemCreated(const AcDbObjectId& itemId);
  virtual void itemModified(const AcDbObjectId& itemId);
  virtual void aboutToModifyItem(const AcDbObjectId& itemId,LPCTSTR tag,LPCTSTR value);
  //part dlg operations
  //
  virtual void onPartDlgStarted(const AcDbObjectId& entryId);
  virtual void onPartDlgCanceled(const AcDbObjectId& entryId);
  virtual void onPartDlgFinished(const AcDbObjectId& entryId);
  //bom dlg operations
  //
  virtual void onBomDlgStarted(const AcDbObjectId& bomId);
  virtual void onBomDlgCanceled(const AcDbObjectId& bomId);
  virtual void onBomDlgFinished(const AcDbObjectId& bomId);
  virtual void onBomDlgBomIdChanged(const AcDbObjectId& newBomId);
  //partlist dlg operations
  //
  virtual void onPartListDlgStarted(const AcDbObjectId& partListId);
  virtual void onPartListDlgCanceled(const AcDbObjectId& partListId);
  virtual void onPartListDlgFinished(const AcDbObjectId& partListId);
  //balloon dlg operations
  //
  virtual void onBalloonDlgStarted(const AcDbObjectId& balloonId);
  virtual void onBalloonDlgCanceled(const AcDbObjectId& balloonId);
  virtual void onBalloonDlgFinished(const AcDbObjectId& balloonId);

private:
  void printId( LPCTSTR label, const AcDbObjectId& balloonId) const;
};

#endif