PGItem's setup

The problem is solved partialy (now i can change appearance, pre-initialization helps). TextNode.setText() changes text content but this text is not processed by the methods of PGEntry - until is not very actual, but there is a feeling of constraints.

bad places are commented - ‘— no effect!’(text is not rendered)

from panda3d.core import *
from ... import DirectObject

if __name__=='__main__':
   from direct.showbase.ShowBase import ShowBase
   app=ShowBase('test_app')

class guiEntry(PGEntry, DirectObject):
   def __init__(self):
      PGEntry.__init__(self, 'test_entry')
      DirectObject.__init__(self)
      for st in range(3):
         tn=TextNode(self.getName()+str(st))
         tn.setTextColor(0.9,0,0,1)
         tn.setGlyphScale (0.3)
         tn.setText('init txt') # --- no effect!
         self.setTextDef (st,tn)
      np=aspect2d.attachNewNode(self)
      np.setPos(0,0,0)

   def wsetup(self, twidth=0.5, num_lines=1, blink_rate=1.5, wactive=1,
                 wfocus=1, max_chars=100, wstate=PGEntry.SFocus,
                 wframe=VBase4(0.0,0.5,0.0,0.4)):
      PGEntry.setup (self, twidth, num_lines)
      self.setFrame(wframe)
      self.setBlinkRate (blink_rate)
      self.setActive (wactive)
      self.setFocus (wfocus) 
      self.setMaxChars (max_chars)
      self.setState(wstate)
      
   def frameStyle(self, wstate=0, ftype=1, fcolor=VBase4(0.2,0.7,0.7,1),
                        border=VBase2(0.05,0.05)):
      fs=self.getFrameStyle(wstate)
      fs.setType(ftype)
      fs.setColor(fcolor)
      fs.setWidth(border)
      self.setFrameStyle(0, fs) # обязательно

   def setupCusor(self, symb='<'):
      ncr=TextNode('cursor')
      ncr.setText(symb)
      ncr=NodePath(ncr.generate())
      ncr.setScale(0.2)
      cr_node=self.getCursorDef()
      cr_node.node().removeAllChildren()
      ncr.reparentTo(cr_node)

   def resetCusor(self):
      str_end=len(self.getPlainText())
      self.setCursorPosition (str_end)

class Marker(PandaNode):
   def __init__(self, name='dot', clr=(0.9,0,0,1)):
      PandaNode.__init__(self, name)      
      tmp=CardMaker(name)
      tmp.setColor(clr)
      tmp.setFrame(-0.01,0.01,-0.01,0.01)
      self.addChild(tmp.generate())
      mnp=aspect2d.attachNewNode(self)
      print 'marker initial position: ', mnp.getPos()
      
   def moveTo(self, obj=None):
      if obj is None: return
      if obj.isOfType(PandaNode.getClassType()) : obj=NodePath(obj)
      mnp=NodePath(self)
      mnp.setPos(obj.getPos())
      print 'new marker position: ', mnp.getPos()


         
if __name__=='__main__':
   en=guiEntry()
   en.wsetup()
   en.frameStyle()
   en.setupCusor()
   en.setText('ha-1') # +++ work
   tn=en.getTextDef (0) #PGEntry.SFocus)
   tn.setText('ha-2') # --- no effect
   tn.setGlyphScale (0.1)# +++ work

   en.resetCusor()
   
   mrk=Marker()
   mrk.moveTo(en)
   #mrk.moveTo(tn) # test
   
   app.run()

[size=59]12.06.2011[/size]