]> git.mxchange.org Git - flightgear.git/blob - src/ATC/ATCdisplay.hxx
Melchior FRANZ:
[flightgear.git] / src / ATC / ATCdisplay.hxx
1 // ATCdisplay.hxx - class to manage the graphical display of ATC messages.
2 //                - The idea is to separate the display of ATC messages from their
3 //                - generation so that the generation may come from any source.
4 //
5 // Written by David Luff, started October 2001.
6 //
7 // Copyright (C) 2001  David C Luff - david.luff@nottingham.ac.uk
8 //
9 // This program is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU General Public License as
11 // published by the Free Software Foundation; either version 2 of the
12 // License, or (at your option) any later version.
13 //
14 // This program is distributed in the hope that it will be useful, but
15 // WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17 // General Public License for more details.
18 //
19 // You should have received a copy of the GNU General Public License
20 // along with this program; if not, write to the Free Software
21 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22
23 #ifndef _FG_ATC_DISPLAY_HXX
24 #define _FG_ATC_DISPLAY_HXX
25
26 #ifdef HAVE_CONFIG_H
27 #  include <config.h>
28 #endif
29
30 #include <simgear/structure/subsystem_mgr.hxx>
31
32 #include <vector>
33 #include <string>
34
35 SG_USING_STD(vector);
36 SG_USING_STD(string);
37
38 struct atcMessage {
39     string msg;
40     bool repeating;
41     double counter;             // count of how many seconds since the message was registered
42     double start_count; // value of counter at which display should start (seconds)
43     double stop_count;  // value of counter at which display should stop (seconds)
44     int id;
45         double dsp_offset;
46 };
47
48 // ASSUMPTION - with two radios the list won't be long so we don't need to map the id's
49 typedef vector<atcMessage> atcMessageList;
50 typedef atcMessageList::iterator atcMessageListIterator;
51
52 class FGATCDisplay : public SGSubsystem 
53 {
54
55 private:
56     bool rep_msg;               // Flag to indicate there is a repeating transmission to display
57     bool change_msg_flag;       // Flag to indicate that the repeating message has changed
58     double dsp_offset1;         // Used to set the correct position of scrolling display
59     double dsp_offset2;
60     string rep_msg_str;         // The repeating transmission to play
61     atcMessageList msgList;
62     atcMessageListIterator msgList_itr;
63
64 public:
65     FGATCDisplay();
66     ~FGATCDisplay();
67
68     void init();
69
70     void bind();
71
72     void unbind();
73
74     // Display any registered messages
75     void update(double dt);
76
77     // Register a single message for display after a delay of delay seconds
78     // Will automatically stop displaying after a suitable interval.
79     void RegisterSingleMessage(string msg, double delay = 0.0); // OK - I know passing a string in and out is probably not good but it will have to do for now.
80
81     // For now we will assume only one repeating message at once
82     // This is not really robust
83
84     // Register a continuously repeating message
85     void RegisterRepeatingMessage(string msg);
86
87     // Change a repeating message - assume that the message changes after the string has finished for now
88     void ChangeRepeatingMessage(string newmsg); 
89
90     // Cancel the current repeating message
91     void CancelRepeatingMessage();
92 };
93
94 #endif // _FG_ATC_DISPLAY_HXX