From 7f35c53ae5cd31d256b7df706867d5df38885589 Mon Sep 17 00:00:00 2001 From: David Rose Date: Tue, 24 Jan 2006 17:23:03 +0000 Subject: [PATCH] transparently interpret Unicode strings --- direct/src/gui/DirectEntry.py | 25 +++++++++++++++++++++++-- direct/src/gui/OnscreenText.py | 21 ++++++++++++++++----- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/direct/src/gui/DirectEntry.py b/direct/src/gui/DirectEntry.py index 25239aa62b..b7a1b8d5b7 100644 --- a/direct/src/gui/DirectEntry.py +++ b/direct/src/gui/DirectEntry.py @@ -1,4 +1,5 @@ from DirectFrame import * +import types # DirectEntry States: ENTRY_FOCUS_STATE = PGEntry.SFocus # 0 @@ -96,6 +97,7 @@ class DirectEntry(DirectFrame): self.guiItem.setTextDef(i, self.onscreenText.textNode) # Update initial text + self.unicodeText = 0 if self['initialText']: self.set(self['initialText']) @@ -147,10 +149,29 @@ class DirectEntry(DirectFrame): apply(self['focusOutCommand'], self['focusOutExtraArgs']) 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): - 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): if (pos < 0): diff --git a/direct/src/gui/OnscreenText.py b/direct/src/gui/OnscreenText.py index 6f8dcb1e41..c8e2a0c5a9 100644 --- a/direct/src/gui/OnscreenText.py +++ b/direct/src/gui/OnscreenText.py @@ -191,8 +191,7 @@ class OnscreenText(DirectObject, NodePath): textNode.setBin('fixed') textNode.setDrawOrder(drawOrder) - textNode.setText(text) - + self.setText(text) if not text: # If we don't have any text, assume we'll be changing it later. self.mayChange = 1 @@ -243,13 +242,25 @@ class OnscreenText(DirectObject, NodePath): self.textNode.clearText() 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): - 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): - return self.textNode.getText() + if self.unicodeText: + return self.textNode.getWtext() + else: + return self.textNode.getText() def setX(self, x): self.setPos(x, self.pos[1])