qrailway 0.9
|
00001 #ifndef CINTELLIGENZ_H 00002 #define CINTELLIGENZ_H 00003 00004 #include "cConstants.h" 00005 #include <qdatetime.h> 00006 #include <qregexp.h> 00007 #include <QTimer> 00008 #include "cSektion.h" 00009 #include "cKonnektor.h" 00010 #include "cDescription.h" 00011 #include "cHardware.h" 00012 #include "cTrain.h" 00013 #include "cBahnhof.h" 00014 #include "cSignal.h" 00015 #include "cSignalRule.h" 00016 #include <QThread> 00017 00018 class cMainWindow; 00019 00021 class cRegler : public QObject { 00022 Q_OBJECT 00023 public: 00025 cRegler(void); 00027 void reset(int idtmp); 00029 int adresse; 00031 int subadresse; 00033 int richtung; 00035 int geschwindigkeit; 00037 int sollrichtung; 00039 int sollgeschwindigkeit; 00041 int id; 00043 int kurzschluss; 00045 int countWeichen; 00047 int countReedkontakte; 00049 int countSektionen; 00051 int countAnschluesse; 00053 int weiche[maxReglerWeichen]; 00055 int anschluss[maxReglerAnschluesse]; 00057 int reedkontakt[maxReglerReedkontakte]; 00059 int sektion[maxReglerSektionen]; 00061 void addWeiche(int weichetmp); 00063 void addReedkontakt(int reedkontakttmp); 00065 void addSektion(int sektiontmp); 00067 void addAnschluss(int anschlusstmp); 00069 void cDebug(int prioritaet, const QString & meldung); 00071 void info(void); 00073 bool relevant(void); 00075 void setTrain(int traintmp); 00077 int getTrain(void); 00079 void setBesetzt(int traintmp); 00081 int getBesetzt(void); 00083 void forceSignals(void); 00084 private: 00086 int train; 00088 int besetzt; 00089 signals: 00091 void SignalBesetzt(int,int); 00092 }; 00093 00095 00100 class cIntelligenz : public QObject { 00101 Q_OBJECT 00102 00103 public: 00105 void setLicht(int button,int einaus); 00107 void ReedkontakteGeaendert(int zaehler,int reedkontakte[24],int status[24]); 00109 cIntelligenz(QGraphicsScene *canvastmp,cMainWindow *MainWindowTmp); 00111 ~cIntelligenz(void); 00113 void cDebug(int prioritaet, const QString & meldung); 00115 void RereadRailroad(void); 00117 int ueberpruefeSpeicher(void); 00119 int StromAktualisieren(int ueberpruefenRegler,bool nurueberpruefen=FALSE); 00121 void WeichenStrassenAnalysieren(int reglernr); 00123 int getAusgangVonKonnektor(int sektionid,int konnektorid,int ausgang); 00125 int getAusgangVonSektion(int sektionid,int & konnektorid,int trainrichtung,int & trainrichtungneu,int lastAusgang=0,int beachteWeichen=0); 00127 int getZugPosition(int trainid); 00129 int findeZugBeiReedkontakt(int welcher,int richtung); 00131 int getNaechsteReedkontakte(int trainid,int richtung,int markieren,const int maxanzahlreedkontakte,int welche[]); 00133 int passtZug(int trainid,int konnektorid,int markieren=ccReedSuchen,int trainRichtung=-1); 00135 void setTrigger(int trainid,int vorneeinfuegen,int conid,bool aktivieren,int regler,int geschwindigkeit,int richtung,int beschleunigung,int geschwindigkeitkmh); 00137 int manuelleSteuerung(int trainid,int geschwindigkeitkmh,int richtung,bool emitsignal=FALSE); 00139 void setWeiche(int welche,const QString & richtung); 00141 void beschleunigeZugVorbereitung(int trainid,int geschwindigkeitkmh,int richtung); 00143 void schalteLeereReglerAb(int trainid); 00145 void beschleunigeZug(int trainid,bool erzwingen=FALSE); 00147 int entferneZug(int zug,bool force=TRUE); 00149 void automatischeSteuerungBahnhoefeStarten(void); 00151 void automatischeSteuerungBahnhoefeStoppen(void); 00153 bool automatischeSteuerungBahnhoefe(void); 00155 cKonnektor* getKonnektor(int welche,bool warnung=TRUE); 00157 cSektion* getSektion(int welche); 00159 cTrain* getTrain(int welche) { return(&(Train[welche])); }; 00161 00162 QString getZielRichtungvonWeiche(int welche); 00164 00171 QString getKonnektorTyp(int welche); 00173 cHardware* getHardware(void) { return(Hardware); }; 00175 void defineReglerVirtuell(int reglerid,int adresse,int subadresse); 00177 void setReglerVirtuellGeschwindigkeit(int reglerid,int geschwindigkeit,int richtung); 00179 int getReglerVirtuellAdresse(int reglerid); 00181 int getReglerVirtuellSubadresse(int reglerid); 00183 void setKonnektorxy(int welche,double x,double y); 00185 void setDescriptionxy(int welche,double x,double y); 00187 void setSignalxy(int welche,double x,double y); 00189 void saveKonnektor(int welche); 00191 void saveDescription(int welche); 00193 void saveSignal(int welche); 00195 void NeuerKonnektor(int secid,double xx,double yy); 00197 void KonnektorLoeschen(int conid); 00199 void UpdateLok(int trainidtmp); 00201 void setControlsDisabled(bool controlsDisabledtmp); 00202 // ist showinfo TRUE, so werden unter und ber (Reed/Stromverbinder/Weichen)Konnektoren Informationen angezeigt (wie z.b. hardware-adresse und angeschlossene sektionen) 00203 void setShowInfo(bool showinfo); 00205 int measureStarten(QObject* cfensterlokzeiger,int zugtmp,bool rueckwaertsvorsichtig); 00207 void measureAktion(int welcher); 00209 void measureCancel(void); 00211 int sucheWeg(int trainid,cListe* Befehle,int wo,int startkonnektor,int startrichtung,int fahrplanunganz,int *fahrplanung,int maxweg); 00213 cBahnhof* getBahnhof(int welcher); 00214 private: 00216 double speedmultiplier; 00218 cMainWindow *MainWindow; 00220 bool controlsDisabled; 00222 cRegler Regler[maxRegler]; 00224 cTrain Train[maxTrain]; 00226 int automatischeSteuerungQueue[maxTrain]; 00228 int lastreed[maxTrain]; 00230 int lastreedwarten[maxTrain]; 00232 cBahnhof *Bahnhof[maxBahnhof]; 00234 cHardware *Hardware; 00236 cKonnektor *Konnektor[maxKonnektoren]; 00238 cDescription *Description[maxDescriptions]; 00240 cSektion *Sektion[maxSektionen]; 00242 cSignal *Signal[maxSignale]; 00244 cSignalRule *SignalRegel[maxSignalRegeln]; 00246 bool existiertKonnektor[maxKonnektoren]; 00248 bool existiertSektion[maxSektionen]; 00250 int anzahlKonnektoren; 00252 int anzahlSektionen; 00254 int maxfahrendezuege; 00256 QTimer *timer; 00258 QGraphicsScene *canvas; 00260 bool measureAktiv; 00262 double measureLaenge; 00264 int measureMaxRueckwaertsVorsichtig; 00266 int measureMaxGeschwindigkeit; 00268 int measureGeschwindigkeit; 00270 int measureRichtung; 00272 int measureWert; 00274 int measureMax0; 00276 int measureMax1; 00278 int measureMaxZurueckErreicht; 00280 int measureMaxZurueck; 00282 int measureRegler; 00284 int measureZug; 00286 int measureStart; 00288 int measure1; 00290 int measure2; 00292 int measureStop; 00294 int sektionSpeichernZaehler; 00296 bool ProgrammLaeuft; 00297 public slots: 00299 void SlotLokPositionChanged(int trainid,int reedalt,int reed,int richtung,int geschw); 00301 void SlotSetSignal(int sigid,int status); 00303 void executeAutomatischeSteuerung(void); 00305 void insertAutomatischeSteuerung(int lok); 00307 int modifySpeed(int geschwindigkeit,int trainid,int reglerrichtung,int conid); 00309 void changeSpeedMultiplier(double speedmultipliertmp) { speedmultiplier=speedmultipliertmp; }; 00311 void SlotResetCounters(void); 00313 void SlotPruefeAufStehendeLoks(void); 00315 void SlotBahnhofsdurchsage(int bahnhofsnr,QString durchsage); 00317 void SlotUpdateBahnhofsfenster(int bahnhofsnr); 00319 void SlotWeicheGeaendert(int welche); 00321 void SlotReedkontaktGeaendert(int welcher,int status); 00323 void SlotReglerStatusGeaendert(int regler,int kurzschluss,int besetzt); 00325 void SlotReedkontaktAngeklickt(int welcher); 00327 void SlotSektionAngeklickt(int welche); 00329 int automatischeSteuerung(int trainid); 00331 int automatischeFahrplanung(int laufplanungzug,int laufplanunganz,int *laufplanung,int richtung=0); 00333 bool parseBefehl(int trainid, int positiondiff); 00334 signals: 00336 void SignalAlarm(int); 00338 void SignalUpdateBahnhofsFenster(int); 00340 void SignalBahnhofsdurchsage(int,const QString &); 00342 void SignalBefehlAusfuehren(int,int,int,int,int); 00344 void SignalCanvasUpdate(void); 00346 void SignalFensterWeicheUpdate(void); 00348 void message(const QString &); 00350 void SignalUpdateFensterLokSteuerung(int); 00352 void SignalReedkontaktAngeklickt(int); 00354 void SignalSektionAngeklickt(int); 00356 void SignalZugOrt(int,int); 00358 void SignalZugGeschwindigkeit(int,int,int); 00360 void SignalSollGeschwindigkeitAendern(int,int,int); 00362 void SignalGeschwindigkeitsmeldung(int,int,int,int,int); 00364 void SignalReedkontaktGeaendert(int,int); 00365 }; 00366 00367 #endif // CINTELLIGENZ_H 00368 00369 #include "cMainWindow.h"