source: src/mlx/gui/info.py

python3
Last change on this file was 999:e096a5638b87, checked in by István Váradi <ivaradi@…>, 5 years ago

Removed Gtk 2/3 constant definitions (re #347)

File size: 7.4 KB
Line 
1
2from .common import *
3
4from mlx.gui.delaycodes import DelayCodeTable
5from mlx.gui.faultexplain import FaultExplainWidget
6
7from mlx.i18n import xstr
8import mlx.const as const
9
10#------------------------------------------------------------------------------
11
12## @package mlx.gui.info
13#
14# The flight info tab.
15#
16# This module implements to \ref FlightInfo class, which is the widget for the
17# extra information related to the flight. It contains a text area for the
18# comments, the fault list widget, and the frame for the delay codes at the
19# bottom in the centre.
20
21#------------------------------------------------------------------------------
22
23class FlightInfo(Gtk.VBox):
24 """The flight info tab."""
25 @staticmethod
26 def _createCommentArea(label):
27 """Create a comment area.
28
29 Returns a tuple of two items:
30 - the top-level widget of the comment area, and
31 - the comment text editor."""
32
33 frame = Gtk.Frame(label = label)
34 label = frame.get_label_widget()
35 label.set_use_underline(True)
36
37 alignment = Gtk.Alignment(xalign = 0.5, yalign = 0.5,
38 xscale = 1.0, yscale = 1.0)
39 alignment.set_padding(padding_top = 4, padding_bottom = 4,
40 padding_left = 8, padding_right = 8)
41
42 scroller = Gtk.ScrolledWindow()
43 scroller.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
44 scroller.set_shadow_type(Gtk.ShadowType.IN)
45
46 comments = Gtk.TextView()
47 comments.set_wrap_mode(Gtk.WrapMode.WORD)
48 scroller.add(comments)
49 alignment.add(scroller)
50 frame.add(alignment)
51
52 label.set_mnemonic_widget(comments)
53
54 return (frame, comments)
55
56 def __init__(self, gui, callbackObject = None):
57 """Construct the flight info tab."""
58 super(FlightInfo, self).__init__()
59 self._gui = gui
60 self._callbackObject = callbackObject
61
62 self._commentsAlignment = Gtk.Alignment(xalign = 0.5, yalign = 0.5,
63 xscale = 1.0, yscale = 1.0)
64 commentsBox = Gtk.HBox()
65 commentsBox.set_homogeneous(True)
66
67 (frame, self._comments) = FlightInfo._createCommentArea(xstr("info_comments"))
68 commentsBox.pack_start(frame, True, True, 8)
69 self._comments.get_buffer().connect("changed", self._commentsChanged)
70
71 self._faultExplainWidget = FaultExplainWidget(gui)
72 self._faultExplainWidget.connect("explanations-changed",
73 self._faultExplanationsChanged)
74 commentsBox.pack_start(self._faultExplainWidget, True, True, 8)
75
76 self._commentsAlignment.add(commentsBox)
77 self.pack_start(self._commentsAlignment, True, True, 8)
78
79 frame = Gtk.Frame(label = xstr("info_delay"))
80 label = frame.get_label_widget()
81 label.set_use_underline(True)
82
83 alignment = Gtk.Alignment(xalign = 0.5, yalign = 0.5,
84 xscale = 1.0, yscale = 1.0)
85 alignment.set_padding(padding_top = 4, padding_bottom = 4,
86 padding_left = 8, padding_right = 8)
87
88 self._delayCodeTable = table = DelayCodeTable(self)
89 self._delayWindow = scrolledWindow = Gtk.ScrolledWindow()
90 scrolledWindow.add(table)
91 scrolledWindow.set_size_request(-1, 185)
92 scrolledWindow.set_policy(Gtk.PolicyType.AUTOMATIC,
93 Gtk.PolicyType.AUTOMATIC)
94 scrolledWindow.set_shadow_type(Gtk.ShadowType.IN)
95
96 alignment.add(scrolledWindow)
97 frame.add(alignment)
98
99 self._delayAlignment = Gtk.Alignment(xalign = 0.5, yalign = 0.5,
100 xscale = 1.0, yscale = 1.0)
101 self._delayAlignment.add(frame)
102 self._delayAlignment.set_padding(padding_top = 0, padding_bottom = 0,
103 padding_left = 8, padding_right = 8)
104
105 self.pack_start(self._delayAlignment, False, False, 8)
106
107 @property
108 def comments(self):
109 """Get the comments."""
110 buffer = self._comments.get_buffer()
111 return buffer.get_text(buffer.get_start_iter(),
112 buffer.get_end_iter(), True)
113
114 @comments.setter
115 def comments(self, comments):
116 """Set the comments."""
117 self._comments.get_buffer().set_text(comments)
118
119 @property
120 def hasComments(self):
121 """Get whether there is any text in comments field."""
122 return self._comments.get_buffer().get_char_count()>0
123
124 @property
125 def faultsAndExplanations(self):
126 """Get the faults and explanations as HTML."""
127 return self._faultExplainWidget.html
128
129 @property
130 def delayCodes(self):
131 """Get the list of delay codes checked by the user."""
132 return self._delayCodeTable.delayCodes
133
134 @property
135 def hasDelayCode(self):
136 """Determine if there is at least one delay code selected."""
137 return self._delayCodeTable.hasDelayCode
138
139 @property
140 def faultsFullyExplained(self):
141 """Determine if all the faults have been explained by the pilot."""
142 return self._faultExplainWidget.fullyExplained
143
144 def addFault(self, id, faultText):
145 """Add a fault to the list of faults."""
146 self._faultExplainWidget.addFault(id, faultText)
147
148 def updateFault(self, id, faultText):
149 """Update a fault to the list of faults."""
150 self._faultExplainWidget.updateFault(id, faultText)
151
152 def clearFault(self, id):
153 """Clear a fault to the list of faults."""
154 self._faultExplainWidget.clearFault(id)
155
156 def setExplanation(self, id, explanation):
157 """Set the explanation of the given fault."""
158 self._faultExplainWidget.setExplanation(id, explanation)
159
160 def enable(self, aircraftType):
161 """Enable the flight info tab."""
162 self._comments.set_sensitive(True)
163 self._faultExplainWidget.set_sensitive(True)
164 self._delayCodeTable.setType(aircraftType)
165 self._delayWindow.set_sensitive(True)
166 self._delayCodeTable.setStyle()
167
168 def disable(self):
169 """Enable the flight info tab."""
170 self._comments.set_sensitive(False)
171 self._faultExplainWidget.set_sensitive(False)
172 self._delayWindow.set_sensitive(False)
173 self._delayCodeTable.setStyle()
174
175 def reset(self):
176 """Reset the flight info tab."""
177 self._comments.get_buffer().set_text("")
178 self._faultExplainWidget.reset()
179 self._delayCodeTable.reset()
180
181 def activateDelayCode(self, code):
182 """Active the checkbox corresponding to the given code."""
183 self._delayCodeTable.activateCode(code)
184
185 def delayCodesChanged(self):
186 """Callewd when the delay codes have changed."""
187 if self._callbackObject is None:
188 self._gui.delayCodesChanged()
189 else:
190 self._callbackObject.delayCodesChanged()
191
192 def _commentsChanged(self, textbuffer):
193 """Called when the comments have changed."""
194 if self._callbackObject is None:
195 self._gui.commentsChanged()
196 else:
197 self._callbackObject.commentsChanged()
198
199 def _faultExplanationsChanged(self, faultExplainWidget, fullyExplained):
200 """Called when the status of the fault explanations has changed."""
201 if self._callbackObject is None:
202 self._gui.faultExplanationsChanged()
203 else:
204 self._callbackObject.faultExplanationsChanged()
Note: See TracBrowser for help on using the repository browser.