// $Source: /usr/local/SimSoft/Sfx3D/src/gts/gtstas.h,v $
// $Revision: 1.2 $
// $Author: baum $
// $Date: 2001/11/29 15:18:10 $
//
// Login name of the user who locked the revision
// $Locker:  $
// Tag name used to checkout the file
// $Name: Release-14 $
// State assigned to revision
// $State: Exp $
//
//
// $Log: gtstas.h,v $
// Revision 1.2  2001/11/29 15:18:10  baum
// -Realzeitsteuerung eingebaut
// -Handsteuerung eingebaut
//

#ifndef _GTSTAS_H
#define _GTSTAS_H     1

#include "Strings.h"
#include "List.h"

#include "XGraph/Select.h"
#include "XGraph/Parent.h"
#include "XGraph/GeoObj.h"
#include "XGraph/Space.h"

#include "gtsbst.h"
#include "gtstlm.h"

//==================================================================
//		Definition
//		for baseclass StlElement
//==================================================================

class StlElement  {
  public:
     StlElement ();
    ~StlElement ();
    void setNr               (const int unsigned nr);
    void setArtikel          (const int unsigned artikel);
    void setAnzahl           (const int unsigned anzahl);
    void setVariante         (const int unsigned variante);
    void setMenge            (const double menge);
    void setZeit             (const double zeit);
    unsigned int getNr       () const;
    unsigned int getArtikel  () const;
    unsigned int getAnzahl   () const;
    unsigned int getVariante () const;
    double       getMenge    () const;
    double       getZeit     () const;

    void read   (InputFile& fin);
    void write  (ostream& ostrm) const;

  protected:
    StlElement  (const StlElement& copy);

    unsigned int ObjNr;
    unsigned int ObjAnzahl;
    unsigned int ObjArtikel;
    unsigned int ObjVariante;
    double ObjMenge;
    double ObjZeit;
};  // ENDE StlElement

//==================================================================
//		Definition
//		for class Eingang
//==================================================================
class Eingang : public StlElement  {
  public:
    Eingang  ();
    ~Eingang ();
    Ustring getInfo (const unsigned art = 0) const;
    void setEingang (Ustring str);

  protected:
    Eingang  (const Eingang& copy);
};  // ENDE Eingang

//==================================================================
//		Definition
//		for class Ausgang
//==================================================================
class Ausgang : public StlElement  {
  public:
    Ausgang  ();
    ~Ausgang ();
    void         setAusgang     (Ustring str);
    void         setPalVariante (unsigned int pvar);
    unsigned int getPalVariante () const;
    Ustring      getInfo        (const unsigned art = 0) const;
    void         read           (InputFile& fin);
    void         write          (ostream& ostrm) const;

  protected:
    Ausgang  (const Ausgang& copy);
    unsigned int ObjPalvariante;
};  // ENDE Ausgang

//==================================================================
//		Definition
//		for class Vorgang
//==================================================================

class Vorgang {
  public:
    Vorgang ();
    Vorgang  (const Vorgang& copy);
    void operator = (const Vorgang& copy);
   ~Vorgang ();
    typBaustein*  AufBaustein () const;
    void          setNr       (int nr);
    unsigned  int getNr       () const;
    Ustring       getInfo     (const unsigned art = 0) const;
    void          setVorgang  (Ustring str);
    bool          read        (InputFile& fin);
    void          write       (ostream& ostrm) const;

  protected:
    unsigned     ObjNr;
    typBaustein *ObjZiel;
    double       ObjZeit;
    int          ObjProgramm;
    Ustring      ObjName;
};  // ENDE Vorgang

//==================================================================
//		Definition
//		for class Arbeitsplan
//==================================================================

class Arbeitsplan : public ArbeitsplanMesswert
{
  public:
    Arbeitsplan  ();
    ~Arbeitsplan ();
    void         setNr                (unsigned int nr);
    unsigned int getNr                () const;
    void         setName              (Ustring name);
    Ustring      getName              () const;
    Ustring      getInfoArbeitsplan   () const;
    Ustring      getInfoAusgangListe  () const;
    Ausgang*     sucheAusgang         (const unsigned int artikel,
                                       const unsigned int variante = 0) const;
    bool         ErzeugeAusgang       (const unsigned int nr, Ustring str);
    bool         AendereAusgang       (const unsigned int nr, Ustring str);
    Ustring      getInfoEingangListe  () const;
    Eingang*     SucheEingang         (const unsigned int nr) const;
    bool         ErzeugeEingang       (const unsigned int nr, Ustring str);
    bool         AendereEingang       (const unsigned int nr, Ustring str);
    void         LoescheEingang       (const unsigned int nr);
    void         EingangnachOben      (const unsigned int nr);
    void         EingangnachUnten     (const unsigned int nr);
    Ustring      getInfoVorgangListe  () const;
    Vorgang*     SucheVorgang         (const unsigned int nr) const;
    Vorgang*     FirstVorgang         () const;
    bool         ErzeugeVorgang       (const unsigned int nr, const Ustring str);
    bool         AendereVorgang       (const unsigned int nr, const Ustring str);
    void         LoescheVorgang       (const unsigned int nr);
    void         VorgangnachOben      (const unsigned int nr);
    void         VorgangnachUnten     (const unsigned int nr);
    bool         isEmptyVorgangsListe () const;
    void         BausteinInVorgangLoeschen (const typBaustein* zbaustein);
    bool         pruefeEingangsListe  () const;
    bool         pruefeAusgangsListe  () const;
    bool         pruefeVorgangsListe  () const;
    bool         pruefeFahrkurse      () const;
    void         erzeugeFahrkurse     () const;
    bool         read                 (InputFile& fin);
    void         write                (ostream& ostrm) const;

  protected:
    void operator = (const Arbeitsplan& copy); // nicht implementiert
    Vorgang* SucheVorgang (const typBaustein* zbst) const;
    unsigned int  ObjNr;
    Ustring       ObjName;
    List<Eingang> EingangsListe;
    List<Ausgang> AusgangsListe;
    List<Vorgang> VorgangsListe;

};  // ENDE Arbeitsplan

//==================================================================
//		Definition
//		for class ArbeitsplanVerwaltung
//==================================================================

class ArbeitsplanVerwaltung {
 public:
    ArbeitsplanVerwaltung  ();
   ~ArbeitsplanVerwaltung  ();
    Arbeitsplan* Letztes          () const;
    void AusGliedern              (Arbeitsplan* zaplan);
    void EinGliedern              (Arbeitsplan &zaplan);
    bool read                     (Ustring datname);
    void write                    (Ustring datname) const;
    void MWSchreiben              (ostream& ostrm, int& satznr);
    Arbeitsplan* sucheArbeitsplan (const unsigned int nr) const;
    Arbeitsplan* sucheArtikel     (const unsigned int artikel,
                                   const unsigned int variante = 0) const;
    void Erzeugen                 (const unsigned int afnr, const Ustring afname);
    void Loeschen                 (const unsigned int afnr);
    void TASmitBausteinLoeschen   (const typBaustein* zbstein);
    Ustring AlleArbeitsplaene     () const;
    bool pruefeArbeitsPlaene      () const;
    void erzeugeAlleFahrkurse     () const;

  protected:
    void operator = (const ArbeitsplanVerwaltung& copy); // nicht implementiert
    List<Arbeitsplan> ArbeitsplanListe;
}; // ArbeitsplanVerwaltung

#endif /* _GTSTAS */
