瀏覽代碼

transparently interpret Unicode strings

David Rose 20 年之前
父節點
當前提交
7f35c53ae5
共有 2 個文件被更改,包括 39 次插入7 次删除
  1. 23 2
      direct/src/gui/DirectEntry.py
  2. 16 5
      direct/src/gui/OnscreenText.py

+ 23 - 2
direct/src/gui/DirectEntry.py

@@ -1,4 +1,5 @@
 from DirectFrame import *
 from DirectFrame import *
+import types
 
 
 # DirectEntry States:
 # DirectEntry States:
 ENTRY_FOCUS_STATE    = PGEntry.SFocus      # 0
 ENTRY_FOCUS_STATE    = PGEntry.SFocus      # 0
@@ -96,6 +97,7 @@ class DirectEntry(DirectFrame):
             self.guiItem.setTextDef(i, self.onscreenText.textNode)
             self.guiItem.setTextDef(i, self.onscreenText.textNode)
 
 
         # Update initial text
         # Update initial text
+        self.unicodeText = 0
         if self['initialText']:
         if self['initialText']:
             self.set(self['initialText'])
             self.set(self['initialText'])
 
 
@@ -147,10 +149,29 @@ class DirectEntry(DirectFrame):
             apply(self['focusOutCommand'], self['focusOutExtraArgs'])
             apply(self['focusOutCommand'], self['focusOutExtraArgs'])
             
             
     def set(self, text):
     def set(self, text):
-        self.guiItem.setText(text)
+        self.unicodeText = isinstance(text, types.UnicodeType)
+        if self.unicodeText:
+            self.guiItem.setWtext(text)
+        else:
+            self.guiItem.setText(text)
 
 
     def get(self):
     def get(self):
-        return self.guiItem.getText()
+        if self.unicodeText:
+            return self.guiItem.getWtext()
+        else:
+            # Although we weren't expecting a wide character, the user
+            # might give us one.  If this happens, we have to return a
+            # wide string.
+            wtext = self.guiItem.getWtext()
+            text = self.guiItem.getText()
+            try:
+                matches = (wtext == unicode(text))
+            except:
+                return wtext
+            if matches:
+                return text
+            else:
+                return wtext
 
 
     def setCursorPosition(self, pos):
     def setCursorPosition(self, pos):
         if (pos < 0):
         if (pos < 0):

+ 16 - 5
direct/src/gui/OnscreenText.py

@@ -191,8 +191,7 @@ class OnscreenText(DirectObject, NodePath):
             textNode.setBin('fixed')
             textNode.setBin('fixed')
             textNode.setDrawOrder(drawOrder)
             textNode.setDrawOrder(drawOrder)
 
 
-        textNode.setText(text)
-
+        self.setText(text)
         if not text:
         if not text:
             # If we don't have any text, assume we'll be changing it later.
             # If we don't have any text, assume we'll be changing it later.
             self.mayChange = 1
             self.mayChange = 1
@@ -243,13 +242,25 @@ class OnscreenText(DirectObject, NodePath):
         self.textNode.clearText()
         self.textNode.clearText()
 
 
     def setText(self, text):
     def setText(self, text):
-        self.textNode.setText(text)
+        self.unicodeText = isinstance(text, types.UnicodeType)
+        if self.unicodeText:
+            self.textNode.setWtext(text)
+        else:
+            self.textNode.setText(text)
 
 
     def appendText(self, text):
     def appendText(self, text):
-        self.textNode.appendText(text)
+        if isinstance(text, types.UnicodeType):
+            self.unicodeText = 1
+        if self.unicodeText:
+            self.textNode.appendWtext(text)
+        else:
+            self.textNode.appendText(text)
 
 
     def getText(self):
     def getText(self):
-        return self.textNode.getText()
+        if self.unicodeText:
+            return self.textNode.getWtext()
+        else:
+            return self.textNode.getText()
 
 
     def setX(self, x):
     def setX(self, x):
         self.setPos(x, self.pos[1])
         self.setPos(x, self.pos[1])