source: src/mlx/gui/common.py@ 151:a2584357ff6c

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

Added support for saving and loading PIREPs

File size: 6.0 KB
RevLine 
[28]1# Common things for the GUI
2
[105]3import mlx.const as _const
4
[28]5import os
6
7appIndicator = False
8
9if os.name=="nt" or "FORCE_PYGTK" in os.environ:
10 print "Using PyGTK"
11 pygobject = False
12 import pygtk
[29]13 import gtk.gdk as gdk
[28]14 import gtk
15 import gobject
[44]16 import pango
[28]17 try:
18 import appindicator
19 appIndicator = True
20 except Exception, e:
21 pass
[42]22
23 MESSAGETYPE_ERROR = gtk.MESSAGE_ERROR
[76]24 MESSAGETYPE_QUESTION = gtk.MESSAGE_QUESTION
[97]25 MESSAGETYPE_INFO = gtk.MESSAGE_INFO
[124]26 RESPONSETYPE_OK = gtk.RESPONSE_OK
[76]27 RESPONSETYPE_YES = gtk.RESPONSE_YES
[124]28 RESPONSETYPE_NO = gtk.RESPONSE_NO
[123]29 RESPONSETYPE_ACCEPT = gtk.RESPONSE_ACCEPT
30 RESPONSETYPE_REJECT = gtk.RESPONSE_REJECT
[149]31 RESPONSETYPE_CANCEL = gtk.RESPONSE_CANCEL
[93]32 ACCEL_VISIBLE = gtk.ACCEL_VISIBLE
33 CONTROL_MASK = gdk.CONTROL_MASK
[123]34 DIALOG_MODAL = gtk.DIALOG_MODAL
[127]35 WRAP_WORD = gtk.WRAP_WORD
[132]36 JUSTIFY_CENTER = gtk.JUSTIFY_CENTER
[97]37
[144]38 CONTROL_MASK = gdk.CONTROL_MASK
39 SHIFT_MASK = gdk.SHIFT_MASK
40 BUTTON1_MASK = gdk.BUTTON1_MASK
41
42 SCROLL_UP = gdk.SCROLL_UP
43 SCROLL_DOWN = gdk.SCROLL_DOWN
44
45 SPIN_USER_DEFINED = gtk.SPIN_USER_DEFINED
46
[149]47 FILE_CHOOSER_ACTION_SELECT_FOLDER = gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER
[151]48 FILE_CHOOSER_ACTION_OPEN = gtk.FILE_CHOOSER_ACTION_OPEN
49 FILE_CHOOSER_ACTION_SAVE = gtk.FILE_CHOOSER_ACTION_SAVE
[149]50
[97]51 def text2unicode(text):
52 """Convert the given text, returned by a Gtk widget, to Unicode."""
53 return unicode(text)
[28]54else:
55 print "Using PyGObject"
56 pygobject = True
[29]57 from gi.repository import Gdk as gdk
[28]58 from gi.repository import Gtk as gtk
59 from gi.repository import GObject as gobject
60 from gi.repository import AppIndicator3 as appindicator
[44]61 from gi.repository import Pango as pango
[28]62 appIndicator = True
[76]63
[42]64 MESSAGETYPE_ERROR = gtk.MessageType.ERROR
[76]65 MESSAGETYPE_QUESTION = gtk.MessageType.QUESTION
[97]66 MESSAGETYPE_INFO = gtk.MessageType.INFO
[124]67 RESPONSETYPE_OK = gtk.ResponseType.OK
[76]68 RESPONSETYPE_YES = gtk.ResponseType.YES
[124]69 RESPONSETYPE_NO = gtk.ResponseType.NO
[123]70 RESPONSETYPE_ACCEPT = gtk.ResponseType.ACCEPT
71 RESPONSETYPE_REJECT = gtk.ResponseType.REJECT
[149]72 RESPONSETYPE_CANCEL = gtk.ResponseType.CANCEL
[93]73 ACCEL_VISIBLE = gtk.AccelFlags.VISIBLE
74 CONTROL_MASK = gdk.ModifierType.CONTROL_MASK
[123]75 DIALOG_MODAL = gtk.DialogFlags.MODAL
[127]76 WRAP_WORD = gtk.WrapMode.WORD
[132]77 JUSTIFY_CENTER = gtk.Justification.CENTER
[42]78
[144]79 CONTROL_MASK = gdk.ModifierType.CONTROL_MASK
80 SHIFT_MASK = gdk.ModifierType.SHIFT_MASK
81 BUTTON1_MASK = gdk.ModifierType.BUTTON1_MASK
82
83 SCROLL_UP = gdk.ScrollDirection.UP
84 SCROLL_DOWN = gdk.ScrollDirection.DOWN
85
86 SPIN_USER_DEFINED = gtk.SpinType.USER_DEFINED
87
[149]88 FILE_CHOOSER_ACTION_SELECT_FOLDER = gtk.FileChooserAction.SELECT_FOLDER
[151]89 FILE_CHOOSER_ACTION_OPEN = gtk.FileChooserAction.OPEN
90 FILE_CHOOSER_ACTION_SAVE = gtk.FileChooserAction.SAVE
[149]91
[97]92 import codecs
93 _utf8Decoder = codecs.getdecoder("utf-8")
94
95 def text2unicode(str):
96 """Convert the given text, returned by a Gtk widget, to Unicode."""
97 return _utf8Decoder(str)[0]
98
[28]99import cairo
100
[32]101#------------------------------------------------------------------------------
102
103class FlightStatusHandler(object):
104 """Base class for objects that handle the flight status in some way."""
105 def __init__(self):
106 self._stage = None
107 self._rating = 100
108 self._noGoReason = None
109
110 def resetFlightStatus(self):
111 """Reset the flight status."""
112 self._stage = None
113 self._rating = 100
114 self._noGoReason = None
115 self._updateFlightStatus()
116
117 def setStage(self, stage):
118 """Set the stage of the flight."""
119 if stage!=self._stage:
120 self._stage = stage
121 self._updateFlightStatus()
122
123 def setRating(self, rating):
124 """Set the rating to the given value."""
125 if rating!=self._rating:
126 self._rating = rating
127 if self._noGoReason is None:
128 self._updateFlightStatus()
129
130 def setNoGo(self, reason):
131 """Set a No-Go condition with the given reason."""
132 if self._noGoReason is None:
133 self._noGoReason = reason
134 self._updateFlightStatus()
135
136#------------------------------------------------------------------------------
[84]137
138class IntegerEntry(gtk.Entry):
139 """An entry that allows only either an empty value, or an integer."""
140 def __init__(self, defaultValue = None):
141 """Construct the entry."""
142 gtk.Entry.__init__(self)
143
[86]144 self.set_alignment(1.0)
145
[84]146 self._defaultValue = defaultValue
147 self._currentInteger = defaultValue
148 self._selfSetting = False
149 self._set_text()
150
151 self.connect("changed", self._handle_changed)
152
153 def get_int(self):
154 """Get the integer."""
155 return self._currentInteger
156
157 def set_int(self, value):
158 """Set the integer."""
159 if value!=self._currentInteger:
160 self._currentInteger = value
161 self.emit("integer-changed", self._currentInteger)
162 self._set_text()
163
164 def _handle_changed(self, widget):
165 """Handle the changed signal."""
166 if self._selfSetting:
167 return
168 text = self.get_text()
169 if text=="":
170 self.set_int(self._defaultValue)
171 else:
172 try:
173 self.set_int(int(text))
174 except:
175 self._set_text()
176
177 def _set_text(self):
178 """Set the text value from the current integer."""
179 self._selfSetting = True
180 self.set_text("" if self._currentInteger is None
181 else str(self._currentInteger))
182 self._selfSetting = False
183
184#------------------------------------------------------------------------------
185
186gobject.signal_new("integer-changed", IntegerEntry, gobject.SIGNAL_RUN_FIRST,
187 None, (object,))
188
189#------------------------------------------------------------------------------
[105]190
191WINDOW_TITLE_BASE = "MAVA Logger X " + _const.VERSION
192
193#------------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.