<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<link rel="Stylesheet" type="text/css" href="../../CAADocStyleSheets.doc/src/caav5.css">
<title>CATGeometryType</title>
</head>

<body>

<pre>#ifndef CATDialogTransition_h
#define CATDialogTransition_h

// COPYRIGHT DASSAULT SYSTEMES 1999

/**
 * @CAA2Level L1
 * @CAA2Usage U1
 */

#include "DI0STATE.h"

class CATDiaAction;
class CATCommand;
class CATDialogState;
class CATCmdEvent;

#include "CATStateCondition.h"
#include "CATUnicodeString.h"
#include "CATListOfCATDialogState.h"
#include "CATListOfCATBaseUnknown.h"
#include "CATListOfInt.h"


/**
 * Class to create a command transition.
 * <b>Role</b>: A transition is one of the main elements of a state dialog 
 * command which is a state machine that uses states to let the end user 
 * input the requested parameters, and transitions between states to process 
 * these input parameters and progress in the statechart.
 * <br>Do not use the <tt>CATDialogTransition</tt> constructor to create a 
 * transition but the @href CATStateCommand#Addtransition method.
 * <br>A transition must have at least one source state, a target state which
 * may be NULL, and may be associated with a condition and an action.
 * <br>
 * Transitions must be created in the @href CATStateCommand#BuildGraph method.
 * @see CATDialogState, CATStateCondition, CATDiaAction
 */

class ExportedByDI0STATE CATDialogTransition:public CATBaseUnknown
{
public:

   /** @nodoc */
   CATDeclareClass;

   virtual ~CATDialogTransition ();
 
   // complete the construction of a transition

    /*-------------------------*/
    //     ACTIONS
    /*-------------------------*/     

 /**
  * Sets the transition action.
  * <br><b>Role</b>: This action is executed when a transition fires.
  * <br>Since a transition has only one action, successive calls to 
  * <tt>SetAction</tt> for the same transition successively overwrite the 
  * action.
  * @param iAction
  *   The action.
  *   <br><b>Cyclic reference</b>: A copy of <tt>iAction</tt> is kept and
  *   AddRef'ed. It is Released at the end of the command before the command 
  *   destructor call.
  *   <br><b>Legal values</b>: <tt>iAction</tt> may be set to NULL to cancel 
  *   an action inherited from the command base class. 
  */
   virtual void SetAction(CATDiaAction *iAction);

 /**
  * Returns the transition action.
  * <br><b>Role</b>: This action is executed when a transition fires.
  * @return
  *   The action.
  *   <br><b>Lifecycle rules deviation</b>: This method doesn't AddRef the 
  *   returned value.
  */
   virtual CATDiaAction * GetAction() const ;


    /*-------------------------*/
    //     CONDITIONS
    /*-------------------------*/     

 /**
  * Sets the transition condition.
  * <br><b>Role</b>: This condition must evaluate TRUE to make the transition
  * fire. 
  * <br>Since a transition has only one condition, successive calls to 
  * <tt>SetCondition</tt> for the same transition successively overwrite the 
  * condition.
  * @param iCond
  *   The condition.
  *   <br><b>Cyclic reference</b>: A copy of <tt>iCond</tt> is kept and 
  *   AddRef'ed. It is Released at the end of the command before the command 
  *   destructor call.
  *   <br><b>Legal values</b>: <tt>iCond</tt> may be set to NULL to cancel 
  *   a condition inherited from the command base class. 
  */
   virtual void SetCondition(CATStateCondition *iCond);

 /**
  * Returns the transition condition.
  * <br><b>Role</b>: This condition must evaluate TRUE to make the transition
  * fire. 
  * @return 
  *   The condition.
  *   <br><b>Lifecycle rules deviation</b>: This method doesn't AddRef the 
  *   returned value.
  */
    virtual CATStateCondition * GetCondition() const;


    /*-------------------------*/
    //     STATES
    /*-------------------------*/     

 /**
  * Adds a source state to the transition.
  * @param iState
  *   The state.
  *   <br><b>Cyclic reference</b>: A pointer to the state is kept, and 
  *   AddRef'ed. It is Released at the end of the command before the command
  *   destructor call or when the state is removed.
  */
   void  AddInitialState(CATDialogState *iState) ;

 /**
  * Removes a source state from the transition.
  * @param iState
  *   The state.
  */
   void RemoveInitialState(CATDialogState * iState);

 /**
  * Returns the count of source states.
  * <br><b>Role</b>: The count of source states ranges from 1 to n.
  * @return
  *   The source state count.
  */
   int GetInitialStateNumber() ;

 /**
  * Returns a source state using the source state index.
  * <br><b>Role</b>: This method returns the <tt>iIndex</tt>th source state.
  * @param iIndex
  *   The index.
  *   <br><b>Legal values</b>: <tt>iIndex</tt> range starts with 1, which is 
  *   the default.
  *   Use @href #GetInitialStateNumber to get the source state count.
  * @return
  *   The state.
  *   <br><b>Lifecycle rules deviation</b>: This method doesn't AddRef the
  *    returned value.
  */
   CATDialogState * GetInitialState(int iIndex = 1) ;

 /**
  * Sets the target state.
  * <br><b>Role</b>: Since a transition has only one target state, successive
  * calls to <tt>SetFinalState</tt> for the same transition successively 
  * overwrite the target state.
  * @param iState
  *   the state.
  *   <br><b>Cyclic reference</b>: A copy of <tt>iState</tt> is kept and
  *   AddRef'ed. It is Released at the end of the command before the command
  *   destructor call or when the state is removed.
  *   <br><b>Legal values</b>: <tt>iState</tt> may be set to NULL to cancel 
  *   a state inherited from the command base class. 
  */
   void SetFinalState(CATDialogState * iState);

 /**
  * Returns the target state.
  * @return
  *   The state.
  *   <br><b>Lifecycle rules deviation</b>: This method doesn't AddRef the 
  *   returned value.
  */
   CATDialogState        * GetFinalState() const;


    /*-------------------------*/
    //     RESOURCE ID
    /*-------------------------*/     

 /**
  * Sets the resource identifier.
  * <br><b>Role</b>: This identifier is used to retrieve the Undo/Redo titles 
  * in the command message file.
  * @param iId
  *   The resource identifier.
  */
   void SetResourceID( const CATString& iId );

 /**
  * Retrieves the resource identifier.
  * <br><b>Role</b>: This identifier is used to retrieve the Undo/Redo titles
  * in the command message file.
  * @return
  *   The resource identifier.
  */
   CATString& GetResourceID() ;



    /*-------------------------*/
    //     FOR INTERNAL USE 
    /*-------------------------*/     
   
   /* transition creation is hidden in the CATStateCommand::AddTransition method */ 
/** @nodoc */
   CATDialogTransition (CATDialogState *, CATDialogState *);
/** @nodoc */
   CATDialogTransition ();



   // get the elements which compose the transition

/** @nodoc */
   void SetCommand(CATCommand * ) ;
/** @nodoc */
   CATCommand       * GetCommand() const;

/** @nodoc */
   void InitInitialStateList();
/** @nodoc */
   CATDialogState * GetNextInitialState();

/** @nodoc */
   void ReleaseComponents();

    /* for CAA2 L2 */
/** @nodoc */
   CATCmdEvent * GetEvent(int num);
/** @nodoc */
   int GetEventNumber();
/** @nodoc */
   void AddEvent(CATCmdEvent * Event);
/** @nodoc */
   void RemoveEvent(CATCmdEvent * Event);
/** @nodoc */
   boolean IsTriggered(); 
/** @nodoc */
   void  InitEventStatus();
   
 
   /* execution of the condition and action associated with the transition */
/** @nodoc */
   boolean Precondition () ;
/** @nodoc */
   void ExecuteTransition  (int InitialStateNumber =1) ;
/** @nodoc */
   void BeforeUndo  (int InitialStateNumber =1) ;
/** @nodoc */
   void BeforeRedo  (int InitialStateNumber =1) ;
/** @nodoc */
   void AfterUndo  (int InitialStateNumber =1) ;
/** @nodoc */
   void AfterRedo  (int InitialStateNumber =1) ;

/** @nodoc */
   void Dump (int official=0) ;


   /* management of UndoTitle */
/** @nodoc */
   CATUnicodeString& GetUndoTitle();
/** @nodoc */
   CATUnicodeString& GetRedoTitle();
/** @nodoc */
   void SetUndoTitle(const CATUnicodeString &Text);
/** @nodoc */
   void SetRedoTitle(const CATUnicodeString &Text);

protected:

    /*------------------*/
    // internal data 
    /*------------------*/

   CATLISTP (CATDialogState)       _initialStateList; 
   CATLISTP (CATBaseUnknown)       _EventList; 
   CATListOfInt                    _StatusList; 

   CATDialogState      *_finalState ;   
   // state command which builds the graph
   CATCommand     *_command    ;  
   CATStateCondition   *_condition ;   
   CATDiaAction        *_action     ;   

   CATUnicodeString   _UndoTitle;
   CATUnicodeString   _RedoTitle;
   CATString          _resourceID;
   int _InitialStateListIndice;
   int _offTraces;
   
};
#endif