source: src/mlx/gui/common.py@ 276:b7b25febba1a

Last change on this file since 276:b7b25febba1a was 276:b7b25febba1a, checked in by István Váradi <ivaradi@…>, 12 years ago

Using gettext to translate strings

File size: 9.5 KB
Line 
1# Common things for the GUI
2
3import mlx.const as _const
4from mlx.i18n import xstr
5
6import os
7
8appIndicator = False
9
10if os.name=="nt" or "FORCE_PYGTK" in os.environ:
11 print "Using PyGTK"
12 pygobject = False
13 import pygtk
14 import gtk.gdk as gdk
15 import gtk
16 import gobject
17 import pango
18 try:
19 import appindicator
20 appIndicator = True
21 except Exception, e:
22 pass
23
24 MESSAGETYPE_ERROR = gtk.MESSAGE_ERROR
25 MESSAGETYPE_QUESTION = gtk.MESSAGE_QUESTION
26 MESSAGETYPE_INFO = gtk.MESSAGE_INFO
27
28 RESPONSETYPE_OK = gtk.RESPONSE_OK
29 RESPONSETYPE_YES = gtk.RESPONSE_YES
30 RESPONSETYPE_NO = gtk.RESPONSE_NO
31 RESPONSETYPE_ACCEPT = gtk.RESPONSE_ACCEPT
32 RESPONSETYPE_REJECT = gtk.RESPONSE_REJECT
33 RESPONSETYPE_CANCEL = gtk.RESPONSE_CANCEL
34
35 ACCEL_VISIBLE = gtk.ACCEL_VISIBLE
36 CONTROL_MASK = gdk.CONTROL_MASK
37 DIALOG_MODAL = gtk.DIALOG_MODAL
38 WRAP_WORD = gtk.WRAP_WORD
39 JUSTIFY_CENTER = gtk.JUSTIFY_CENTER
40
41 CONTROL_MASK = gdk.CONTROL_MASK
42 SHIFT_MASK = gdk.SHIFT_MASK
43 BUTTON1_MASK = gdk.BUTTON1_MASK
44
45 SCROLL_UP = gdk.SCROLL_UP
46 SCROLL_DOWN = gdk.SCROLL_DOWN
47
48 SPIN_USER_DEFINED = gtk.SPIN_USER_DEFINED
49
50 FILE_CHOOSER_ACTION_SELECT_FOLDER = gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER
51 FILE_CHOOSER_ACTION_OPEN = gtk.FILE_CHOOSER_ACTION_OPEN
52 FILE_CHOOSER_ACTION_SAVE = gtk.FILE_CHOOSER_ACTION_SAVE
53
54 SELECTION_MULTIPLE = gtk.SELECTION_MULTIPLE
55
56 SHADOW_IN = gtk.SHADOW_IN
57
58 POLICY_AUTOMATIC = gtk.POLICY_AUTOMATIC
59
60 WEIGHT_BOLD = pango.WEIGHT_BOLD
61
62 WINDOW_STATE_ICONIFIED = gdk.WINDOW_STATE_ICONIFIED
63 WINDOW_STATE_WITHDRAWN = gdk.WINDOW_STATE_WITHDRAWN
64
65 SORT_ASCENDING = gtk.SORT_ASCENDING
66 SORT_DESCENDING = gtk.SORT_DESCENDING
67
68 pixbuf_new_from_file = gdk.pixbuf_new_from_file
69
70 def text2unicode(text):
71 """Convert the given text, returned by a Gtk widget, to Unicode."""
72 return unicode(text)
73
74 def text2str(text):
75 """Convert the given text, returned by xstr to a string."""
76 return str(text)
77else:
78 print "Using PyGObject"
79 pygobject = True
80 from gi.repository import Gdk as gdk
81 from gi.repository import GdkPixbuf as gdkPixbuf
82 from gi.repository import Gtk as gtk
83 from gi.repository import GObject as gobject
84 from gi.repository import AppIndicator3 as appindicator
85 from gi.repository import Pango as pango
86 appIndicator = True
87
88 MESSAGETYPE_ERROR = gtk.MessageType.ERROR
89 MESSAGETYPE_QUESTION = gtk.MessageType.QUESTION
90 MESSAGETYPE_INFO = gtk.MessageType.INFO
91 RESPONSETYPE_OK = gtk.ResponseType.OK
92 RESPONSETYPE_YES = gtk.ResponseType.YES
93 RESPONSETYPE_NO = gtk.ResponseType.NO
94 RESPONSETYPE_ACCEPT = gtk.ResponseType.ACCEPT
95 RESPONSETYPE_REJECT = gtk.ResponseType.REJECT
96 RESPONSETYPE_CANCEL = gtk.ResponseType.CANCEL
97 ACCEL_VISIBLE = gtk.AccelFlags.VISIBLE
98 CONTROL_MASK = gdk.ModifierType.CONTROL_MASK
99 DIALOG_MODAL = gtk.DialogFlags.MODAL
100 WRAP_WORD = gtk.WrapMode.WORD
101 JUSTIFY_CENTER = gtk.Justification.CENTER
102
103 CONTROL_MASK = gdk.ModifierType.CONTROL_MASK
104 SHIFT_MASK = gdk.ModifierType.SHIFT_MASK
105 BUTTON1_MASK = gdk.ModifierType.BUTTON1_MASK
106
107 SCROLL_UP = gdk.ScrollDirection.UP
108 SCROLL_DOWN = gdk.ScrollDirection.DOWN
109
110 SPIN_USER_DEFINED = gtk.SpinType.USER_DEFINED
111
112 FILE_CHOOSER_ACTION_SELECT_FOLDER = gtk.FileChooserAction.SELECT_FOLDER
113 FILE_CHOOSER_ACTION_OPEN = gtk.FileChooserAction.OPEN
114 FILE_CHOOSER_ACTION_SAVE = gtk.FileChooserAction.SAVE
115
116 SELECTION_MULTIPLE = gtk.SelectionMode.MULTIPLE
117
118 SHADOW_IN = gtk.ShadowType.IN
119
120 POLICY_AUTOMATIC = gtk.PolicyType.AUTOMATIC
121
122 WEIGHT_BOLD = pango.Weight.BOLD
123
124 WINDOW_STATE_ICONIFIED = gdk.WindowState.ICONIFIED
125 WINDOW_STATE_WITHDRAWN = gdk.WindowState.WITHDRAWN
126
127 SORT_ASCENDING = gtk.SortType.ASCENDING
128 SORT_DESCENDING = gtk.SortType.DESCENDING
129
130 pixbuf_new_from_file = gdkPixbuf.Pixbuf.new_from_file
131
132 import codecs
133 _utf8Decoder = codecs.getdecoder("utf-8")
134
135 def text2unicode(str):
136 """Convert the given text, returned by a Gtk widget, to Unicode."""
137 return _utf8Decoder(str)[0]
138
139 def text2str(text):
140 """Convert the given text, returned by xstr to a string."""
141 return _utf8Decoder(text)[0]
142
143import cairo
144
145#------------------------------------------------------------------------------
146
147class FlightStatusHandler(object):
148 """Base class for objects that handle the flight status in some way."""
149 def __init__(self):
150 self._stage = None
151 self._rating = 100
152 self._noGoReason = None
153
154 def resetFlightStatus(self):
155 """Reset the flight status."""
156 self._stage = None
157 self._rating = 100
158 self._noGoReason = None
159 self._updateFlightStatus()
160
161 def setStage(self, stage):
162 """Set the stage of the flight."""
163 if stage!=self._stage:
164 self._stage = stage
165 self._updateFlightStatus()
166
167 def setRating(self, rating):
168 """Set the rating to the given value."""
169 if rating!=self._rating:
170 self._rating = rating
171 if self._noGoReason is None:
172 self._updateFlightStatus()
173
174 def setNoGo(self, reason):
175 """Set a No-Go condition with the given reason."""
176 if self._noGoReason is None:
177 self._noGoReason = reason
178 self._updateFlightStatus()
179
180#------------------------------------------------------------------------------
181
182class IntegerEntry(gtk.Entry):
183 """An entry that allows only either an empty value, or an integer."""
184 def __init__(self, defaultValue = None):
185 """Construct the entry."""
186 gtk.Entry.__init__(self)
187
188 self.set_alignment(1.0)
189
190 self._defaultValue = defaultValue
191 self._currentInteger = defaultValue
192 self._selfSetting = False
193 self._set_text()
194
195 self.connect("changed", self._handle_changed)
196
197 def get_int(self):
198 """Get the integer."""
199 return self._currentInteger
200
201 def reset(self):
202 """Reset the integer."""
203 self.set_int(None)
204
205 def set_int(self, value):
206 """Set the integer."""
207 if value!=self._currentInteger:
208 self._currentInteger = value
209 self.emit("integer-changed", self._currentInteger)
210 self._set_text()
211
212 def _handle_changed(self, widget):
213 """Handle the changed signal."""
214 if self._selfSetting:
215 return
216 text = self.get_text()
217 if text=="":
218 self.set_int(self._defaultValue)
219 else:
220 try:
221 self.set_int(int(text))
222 except:
223 self._set_text()
224
225 def _set_text(self):
226 """Set the text value from the current integer."""
227 self._selfSetting = True
228 self.set_text("" if self._currentInteger is None
229 else str(self._currentInteger))
230 self._selfSetting = False
231
232#------------------------------------------------------------------------------
233
234gobject.signal_new("integer-changed", IntegerEntry, gobject.SIGNAL_RUN_FIRST,
235 None, (object,))
236
237#------------------------------------------------------------------------------
238
239PROGRAM_NAME = "MAVA Logger X"
240
241WINDOW_TITLE_BASE = PROGRAM_NAME + " " + _const.VERSION
242
243#------------------------------------------------------------------------------
244
245# A mapping of aircraft types to their screen names
246aircraftNames = { _const.AIRCRAFT_B736 : xstr("aircraft_b736"),
247 _const.AIRCRAFT_B737 : xstr("aircraft_b737"),
248 _const.AIRCRAFT_B738 : xstr("aircraft_b738"),
249 _const.AIRCRAFT_B738C : xstr("aircraft_b738c"),
250 _const.AIRCRAFT_B733 : xstr("aircraft_b733"),
251 _const.AIRCRAFT_B734 : xstr("aircraft_b734"),
252 _const.AIRCRAFT_B735 : xstr("aircraft_b735"),
253 _const.AIRCRAFT_DH8D : xstr("aircraft_dh8d"),
254 _const.AIRCRAFT_B762 : xstr("aircraft_b762"),
255 _const.AIRCRAFT_B763 : xstr("aircraft_b763"),
256 _const.AIRCRAFT_CRJ2 : xstr("aircraft_crj2"),
257 _const.AIRCRAFT_F70 : xstr("aircraft_f70"),
258 _const.AIRCRAFT_DC3 : xstr("aircraft_dc3"),
259 _const.AIRCRAFT_T134 : xstr("aircraft_t134"),
260 _const.AIRCRAFT_T154 : xstr("aircraft_t154"),
261 _const.AIRCRAFT_YK40 : xstr("aircraft_yk40") }
262
263#------------------------------------------------------------------------------
264
265def formatFlightLogLine(timeStr, line):
266 """Format the given flight log line."""
267 """Format the given line for flight logging."""
268 if timeStr is not None:
269 line = timeStr + ": " + line
270 return line + "\n"
271
272#------------------------------------------------------------------------------
273
274def addFaultTag(buffer):
275 """Add a tag named 'fault' to the given buffer."""
276 faultTag = gtk.TextTag(name = "fault")
277 faultTag.set_property("foreground", "red")
278 faultTag.set_property("weight", WEIGHT_BOLD)
279 buffer.get_tag_table().add(faultTag)
280
281#------------------------------------------------------------------------------
282
283def appendTextBuffer(buffer, text, isFault = False):
284 """Append the given line at the end of the given text buffer.
285
286 If isFault is set, use the tag named 'fault'."""
287 if isFault:
288 buffer.insert_with_tags_by_name(buffer.get_end_iter(), text,
289 "fault")
290 else:
291 buffer.insert(buffer.get_end_iter(), text)
292
293#------------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.