diff --git a/direct/src/gui/DirectEntry.py b/direct/src/gui/DirectEntry.py index c33922461b..fd175e4896 100644 --- a/direct/src/gui/DirectEntry.py +++ b/direct/src/gui/DirectEntry.py @@ -64,6 +64,7 @@ class DirectEntry(DirectFrame): # Sounds to be used for button events ('rolloverSound', DGG.getDefaultRolloverSound(), self.setRolloverSound), ('clickSound', DGG.getDefaultClickSound(), self.setClickSound), + ('autoCapitalize', 0, self.autoCapitalizeFunc), ) # Merge keyword options with default options self.defineoptions(kw, optiondefs) @@ -119,8 +120,7 @@ class DirectEntry(DirectFrame): self.set(self['initialText']) def destroy(self): - self.ignore(self.guiItem.getFocusInEvent()) - self.ignore(self.guiItem.getFocusOutEvent()) + self.ignoreAll() DirectFrame.destroy(self) def setup(self): @@ -166,13 +166,47 @@ class DirectEntry(DirectFrame): # Pass any extra args apply(self['failedCommand'], [self.get()] + self['failedExtraArgs']) + def autoCapitalizeFunc(self): + if self['autoCapitalize']: + self.accept(self.guiItem.getTypeEvent(), self._handleTyping) + self.accept(self.guiItem.getEraseEvent(), self._handleErasing) + else: + self.ignore(self.guiItem.getTypeEvent()) + self.ignore(self.guiItem.getEraseEvent()) + def focusInCommandFunc(self): if self['focusInCommand']: apply(self['focusInCommand'], self['focusInExtraArgs']) + if self['autoCapitalize']: + self.accept(self.guiItem.getTypeEvent(), self._handleTyping) + self.accept(self.guiItem.getEraseEvent(), self._handleErasing) + + def _handleTyping(self, guiEvent): + self._autoCapitalize() + def _handleErasing(self, guiEvent): + self._autoCapitalize() + + def _autoCapitalize(self): + name = self.get().decode('utf-8') + # capitalize each word + capName = '' + for i in xrange(len(name)): + character = name[i] + # is it a letter? + # This assumes that string.lower and string.upper will return different + # values for all unicode letters. + if string.lower(character) != string.upper(character): + # if it's not preceded by a letter, capitalize it + if (i == 0) or string.lower(name[i-1]) == string.upper(name[i-1]): + character = string.upper(character) + capName += character + self.enterText(capName.encode('utf-8')) def focusOutCommandFunc(self): if self['focusOutCommand']: apply(self['focusOutCommand'], self['focusOutExtraArgs']) + self.ignore(self.guiItem.getTypeEvent()) + self.ignore(self.guiItem.getEraseEvent()) def set(self, text): """ Changes the text currently showing in the typable region;