source: src/mlx/gui/common.py@ 149:aab353620d1c

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

Added the handling of the PIREP directory preference

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