Index: src/mlx/gui/flight.py
===================================================================
--- src/mlx/gui/flight.py	(revision 136)
+++ src/mlx/gui/flight.py	(revision 138)
@@ -1027,7 +1027,11 @@
                                else gtk.POLICY_AUTOMATIC)
 
+        self._uppercasingRoute = False
+
         self._route = gtk.TextView()
         self._route.set_tooltip_text(xstr("route_route_tooltip"))
+        self._route.set_wrap_mode(WRAP_WORD)
         self._route.get_buffer().connect("changed", self._routeChanged)
+        self._route.get_buffer().connect_after("insert-text", self._routeInserted)
         routeWindow.add(self._route)
 
@@ -1079,5 +1083,21 @@
     def _routeChanged(self, textBuffer):
         """Called when the route has changed."""
-        self._updateForwardButton()
+        if not self._uppercasingRoute:
+            self._updateForwardButton()
+
+    def _routeInserted(self, textBuffer, iter, text, length):
+        """Called when new characters are inserted into the route.
+
+        It uppercases all characters."""
+        if not self._uppercasingRoute:
+            self._uppercasingRoute = True
+
+            iter1 = iter.copy()
+            iter1.backward_chars(length)
+            textBuffer.delete(iter, iter1)
+
+            textBuffer.insert(iter, text.upper())
+
+            self._uppercasingRoute = False
 
     def _backClicked(self, button):
@@ -1188,8 +1208,12 @@
                                   gtk.PolicyType.AUTOMATIC if pygobject
                                   else gtk.POLICY_AUTOMATIC)
+
+        self._uppercasingMETAR = False
+
         self._metar = gtk.TextView()
         self._metar.set_accepts_tab(False)
         self._metar.set_wrap_mode(gtk.WrapMode.WORD if pygobject else gtk.WRAP_WORD)
         self._metar.get_buffer().connect("changed", self._metarChanged)
+        self._metar.get_buffer().connect_after("insert-text", self._metarInserted)
         scrolledWindow.add(self._metar)
         alignment = gtk.Alignment(xalign = 0.0, yalign = 0.0,
@@ -1284,8 +1308,24 @@
     def _metarChanged(self, buffer):
         """Called when the METAR has changed."""
-        self.metarEdited = True
-        self._button.set_sensitive(buffer.get_text(buffer.get_start_iter(),
-                                                   buffer.get_end_iter(),
-                                                   True)!="")
+        if not self._uppercasingMETAR:
+            self.metarEdited = True
+            self._button.set_sensitive(buffer.get_text(buffer.get_start_iter(),
+                                                       buffer.get_end_iter(),
+                                                       True)!="")
+
+    def _metarInserted(self, textBuffer, iter, text, length):
+        """Called when new characters are inserted into the METAR.
+
+        It uppercases all characters."""
+        if not self._uppercasingMETAR:
+            self._uppercasingMETAR = True
+
+            iter1 = iter.copy()
+            iter1.backward_chars(length)
+            textBuffer.delete(iter, iter1)
+
+            textBuffer.insert(iter, text.upper())
+
+            self._uppercasingMETAR = False
 
 #-----------------------------------------------------------------------------
@@ -1319,5 +1359,5 @@
         self._runway.set_width_chars(10)
         self._runway.set_tooltip_text(xstr("takeoff_runway_tooltip"))
-        self._runway.connect("changed", self._valueChanged)
+        self._runway.connect("changed", self._upperChanged)
         table.attach(self._runway, 1, 3, 0, 1)
         label.set_mnemonic_widget(self._runway)
@@ -1331,5 +1371,5 @@
         self._sid.set_width_chars(10)
         self._sid.set_tooltip_text(xstr("takeoff_sid_tooltip"))
-        self._sid.connect("changed", self._valueChanged)
+        self._sid.connect("changed", self._upperChanged)
         table.attach(self._sid, 1, 3, 1, 2)
         label.set_mnemonic_widget(self._sid)
@@ -1453,4 +1493,10 @@
         self._updateForwardButton()
         
+    def _upperChanged(self, entry, arg = None):
+        """Called when the value of some entry widget has changed and the value
+        should be converted to uppercase."""
+        entry.set_text(entry.get_text().upper())
+        self._valueChanged(entry, arg)
+        
     def _backClicked(self, button):
         """Called when the Back button is pressed."""
@@ -1495,5 +1541,5 @@
         self._star.set_width_chars(10)
         self._star.set_tooltip_text(xstr("landing_star_tooltip"))
-        self._star.connect("changed", self._updateForwardButton)
+        self._star.connect("changed", self._upperChanged)
         self._star.set_sensitive(False)
         table.attach(self._star, 2, 4, 0, 1)
@@ -1512,5 +1558,5 @@
         self._transition.set_width_chars(10)
         self._transition.set_tooltip_text(xstr("landing_transition_tooltip"))
-        self._transition.connect("changed", self._updateForwardButton)
+        self._transition.connect("changed", self._upperChanged)
         self._transition.set_sensitive(False)
         table.attach(self._transition, 2, 4, 1, 2)
@@ -1525,5 +1571,5 @@
         self._runway.set_width_chars(10)
         self._runway.set_tooltip_text(xstr("landing_runway_tooltip"))
-        self._runway.connect("changed", self._updateForwardButton)
+        self._runway.connect("changed", self._upperChanged)
         table.attach(self._runway, 2, 4, 2, 3)
         label.set_mnemonic_widget(self._runway)
@@ -1537,5 +1583,5 @@
         self._approachType.set_width_chars(10)
         self._approachType.set_tooltip_text(xstr("landing_approach_tooltip"))
-        self._approachType.connect("changed", self._updateForwardButton)
+        self._approachType.connect("changed", self._upperChanged)
         table.attach(self._approachType, 2, 4, 3, 4)
         label.set_mnemonic_widget(self._approachType)
@@ -1650,5 +1696,5 @@
         self._updateForwardButton()    
 
-    def _updateForwardButton(self, widget = None):
+    def _updateForwardButton(self):
         """Update the sensitivity of the forward button."""
         sensitive = self._flightEnded and \
@@ -1663,4 +1709,9 @@
                     self.vref is not None
         self._button.set_sensitive(sensitive)
+
+    def _upperChanged(self, entry):
+        """Called for entry widgets that must be converted to uppercase."""
+        entry.set_text(entry.get_text().upper())
+        self._updateForwardButton()
 
     def _vrefChanged(self, widget, value):
