mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 02:15:43 -04:00
auto sync; removed button sync
This commit is contained in:
parent
0fd177564e
commit
50d8cb9244
@ -16,6 +16,7 @@ import os
|
||||
import __builtin__
|
||||
import whrandom
|
||||
import Floater
|
||||
import EntryScale
|
||||
|
||||
# Colors used by all color menus
|
||||
DEFAULT_COLORS = [
|
||||
@ -196,6 +197,16 @@ def DNARemoveAllChildrenOfClass(dnaNode, classType):
|
||||
dnaNode.remove(child)
|
||||
#skyler? DNASTORE.removeDNAGroup(child)
|
||||
|
||||
def DNAGetChildren(dnaNode, classType=None):
|
||||
""" Return the objects of that type """
|
||||
children = []
|
||||
for i in range(dnaNode.getNumChildren()):
|
||||
child=dnaNode.at(i)
|
||||
if ((not classType)
|
||||
or DNAClassEqual(child, classType)):
|
||||
children.append(child)
|
||||
return children
|
||||
|
||||
def DNAGetChild(dnaObject, type = DNA_NODE, childNum = 0):
|
||||
childCount = 0
|
||||
for i in range(dnaObject.getNumChildren()):
|
||||
@ -207,6 +218,22 @@ def DNAGetChild(dnaObject, type = DNA_NODE, childNum = 0):
|
||||
# Not found
|
||||
return None
|
||||
|
||||
def DNAGetChildRecursive(dnaObject, type = DNA_NODE, childNum = 0):
|
||||
childCount = 0
|
||||
for i in range(dnaObject.getNumChildren()):
|
||||
child = dnaObject.at(i)
|
||||
if DNAClassEqual(child, type):
|
||||
if childCount == childNum:
|
||||
return child
|
||||
childCount = childCount + 1
|
||||
else:
|
||||
child = DNAGetChildRecursive(child, type, childNum-childCount)
|
||||
if child:
|
||||
return child
|
||||
|
||||
# Not found
|
||||
return None
|
||||
|
||||
def DNAGetChildOfClass(dnaNode, classType):
|
||||
for i in range(dnaNode.getNumChildren()):
|
||||
child = dnaNode.at(i)
|
||||
@ -3089,6 +3116,8 @@ class LevelEditorPanel(Pmw.MegaToplevel):
|
||||
signPage = self.notebook.add('Signs')
|
||||
propsPage = self.notebook.add('Props')
|
||||
sceneGraphPage = self.notebook.add('SceneGraph')
|
||||
self.notebook['raisecommand'] = self.updateInfo
|
||||
|
||||
|
||||
self.fPaths = IntVar()
|
||||
self.fPaths.set(0)
|
||||
@ -3212,6 +3241,8 @@ class LevelEditorPanel(Pmw.MegaToplevel):
|
||||
self.landmarkBuildingSelector.pack(expand = 1, fill = 'both')
|
||||
|
||||
# Signs:
|
||||
self.currentSignDNA=None
|
||||
self.currentBaselineDNA=None
|
||||
self.levelEditor.selectedNodePathHookHooks.append(self.updateSignPage)
|
||||
gridFrame = Frame(signPage)
|
||||
|
||||
@ -3230,9 +3261,10 @@ class LevelEditorPanel(Pmw.MegaToplevel):
|
||||
history = 0,
|
||||
scrolledlist_items = ['<the sign>'])
|
||||
self.baselineMenu.selectitem(self.currentBaselineIndex)
|
||||
self.baselineMenu.grid(row=0, column=0)
|
||||
self.baselineMenu.grid(row=0, column=0, columnspan=3)
|
||||
|
||||
self.baselineAddButton = Button(
|
||||
gridFrame, text="Add", command=self.addBaseline)
|
||||
gridFrame, text="Add Baseline", command=self.addBaseline)
|
||||
self.baselineAddButton.grid(row=1, column=0, columnspan=3)
|
||||
|
||||
fontList = [""]+self.styleManager.getCatalogCodes('font')
|
||||
@ -3268,41 +3300,42 @@ class LevelEditorPanel(Pmw.MegaToplevel):
|
||||
maxVelocity=1.0,
|
||||
command=self.setSignBaselineStomp)
|
||||
self.addStompFloater.grid(row=8, column=0, rowspan=2, columnspan=3)
|
||||
self.addCurveFloater = Floater.Floater(
|
||||
self.addCurveFloater = EntryScale.EntryScale(
|
||||
gridFrame,
|
||||
text='Curve',
|
||||
maxVelocity=1.0,
|
||||
min = -1.0, max = 1.0,
|
||||
resolution = .01,
|
||||
command=self.setSignBaselineCurve)
|
||||
self.addCurveFloater.grid(row=10, column=0, rowspan=2, columnspan=3)
|
||||
self.addXFloater = Floater.Floater(
|
||||
gridFrame,
|
||||
text='X',
|
||||
maxVelocity=1.0,
|
||||
command=self.setSignBaselineX)
|
||||
command=self.setDNATargetX)
|
||||
self.addXFloater.grid(row=2, column=3, rowspan=2, columnspan=3)
|
||||
self.addZFloater = Floater.Floater(
|
||||
gridFrame,
|
||||
text='Z',
|
||||
maxVelocity=1.0,
|
||||
command=self.setSignBaselineZ)
|
||||
command=self.setDNATargetZ)
|
||||
self.addZFloater.grid(row=4, column=3, rowspan=2, columnspan=3)
|
||||
self.addScaleXFloater = Floater.Floater(
|
||||
gridFrame,
|
||||
text='Scale X',
|
||||
maxVelocity=1.0,
|
||||
command=self.setSignBaselineScaleX)
|
||||
command=self.setDNATargetScaleX)
|
||||
self.addScaleXFloater.grid(row=6, column=3, rowspan=2, columnspan=3)
|
||||
self.addScaleZFloater = Floater.Floater(
|
||||
gridFrame,
|
||||
text='Scale Z',
|
||||
maxVelocity=1.0,
|
||||
command=self.setSignBaselineScaleZ)
|
||||
command=self.setDNATargetScaleZ)
|
||||
self.addScaleZFloater.grid(row=8, column=3, rowspan=2, columnspan=3)
|
||||
self.addRollFloater = Floater.Floater(
|
||||
gridFrame,
|
||||
text='Roll',
|
||||
maxVelocity=10.0,
|
||||
command=self.setSignBaselineRoll)
|
||||
command=self.setDNATargetRoll)
|
||||
self.addRollFloater.grid(row=10, column=3, rowspan=2, columnspan=3)
|
||||
|
||||
gridFrame.pack(fill='both')
|
||||
@ -3461,6 +3494,10 @@ class LevelEditorPanel(Pmw.MegaToplevel):
|
||||
# Make sure input variables processed
|
||||
self.initialiseoptions(LevelEditorPanel)
|
||||
|
||||
def updateInfo(self, page):
|
||||
if page == 'Signs':
|
||||
self.updateSignPage()
|
||||
|
||||
def toggleGrid(self):
|
||||
if self.fGrid.get():
|
||||
direct.grid.enable()
|
||||
@ -3512,67 +3549,44 @@ class LevelEditorPanel(Pmw.MegaToplevel):
|
||||
self.landmarkType = 'toon_landmark_' + name
|
||||
self.levelEditor.setCurrent('toon_landmark_texture', self.landmarkType)
|
||||
|
||||
def signPanelSync(self):
|
||||
self.baselineMenu.delete(0, END)
|
||||
sign=self.findSignFromDNARoot()
|
||||
if not sign:
|
||||
return
|
||||
baselineList = DNAGetChildren(sign, DNA_SIGN_BASELINE)
|
||||
for baseline in baselineList:
|
||||
s=DNAGetBaselineString(baseline)
|
||||
self.baselineMenu.insert(END, s)
|
||||
self.baselineMenu.selectitem(0)
|
||||
self.selectSignBaseline(0)
|
||||
|
||||
def updateSignPage(self):
|
||||
#if (self.notebook.getcurselection() == 'Signs'):
|
||||
# self.baselineMenu.selectitem(0)
|
||||
# self.selectSignBaseline(0)
|
||||
pass
|
||||
if (self.notebook.getcurselection() == 'Signs'):
|
||||
sign=self.findSignFromDNARoot()
|
||||
# Only update if it's not the current sign:
|
||||
if (self.currentSignDNA != sign):
|
||||
self.currentSignDNA = sign
|
||||
self.signPanelSync()
|
||||
|
||||
def findSign(self):
|
||||
target=self.levelEditor.DNATarget
|
||||
if not target:
|
||||
def findSignFromDNARoot(self):
|
||||
dnaRoot=self.levelEditor.selectedDNARoot
|
||||
if not dnaRoot:
|
||||
return
|
||||
if DNAGetClassType(target).eq(DNA_SIGN):
|
||||
return target
|
||||
elif DNAGetClassType(target).eq(DNA_SIGN_BASELINE):
|
||||
return target.getParent()
|
||||
elif (DNAGetClassType(target).eq(DNA_SIGN_TEXT) or
|
||||
DNAGetClassType(target).eq(DNA_SIGN_GRAPHIC)):
|
||||
return (target.getParent()).getParent()
|
||||
else:
|
||||
print "findSign: That's not a DNA_SIGN* object"
|
||||
|
||||
def findAnySignTarget(self):
|
||||
target=self.levelEditor.DNATarget
|
||||
if target and (DNAGetClassType(target).eq(DNA_SIGN)
|
||||
or DNAGetClassType(target).eq(DNA_SIGN_BASELINE)
|
||||
or DNAGetClassType(target).eq(DNA_SIGN_TEXT)
|
||||
or DNAGetClassType(target).eq(DNA_SIGN_GRAPHIC)):
|
||||
return target
|
||||
return None
|
||||
|
||||
def findBaseline(self):
|
||||
parent=target=self.levelEditor.DNATarget
|
||||
#childNum=int((self.baselineMenu.curselection())[0]) #skyler
|
||||
childNum=self.currentBaselineIndex
|
||||
if not target:
|
||||
return
|
||||
# Make parent point to the sign:
|
||||
if DNAGetClassType(target).eq(DNA_SIGN):
|
||||
pass
|
||||
elif DNAGetClassType(target).eq(DNA_SIGN_BASELINE):
|
||||
parent=target.getParent()
|
||||
elif (DNAGetClassType(target).eq(DNA_SIGN_TEXT)
|
||||
or DNAGetClassType(target).eq(DNA_SIGN_GRAPHIC)):
|
||||
parent=(target.getParent()).getParent()
|
||||
else:
|
||||
print "findBaseline: That's not a DNA_SIGN* object"
|
||||
return
|
||||
# Ask the sign for the baseline:
|
||||
target=DNAGetChild(parent, DNA_SIGN_BASELINE, childNum)
|
||||
self.levelEditor.DNATarget=target
|
||||
if (DNAGetClassType(dnaRoot).eq(DNA_LANDMARK_BUILDING)):
|
||||
target=DNAGetChildRecursive(dnaRoot, DNA_SIGN)
|
||||
return target
|
||||
|
||||
def selectSignBaseline(self, val):
|
||||
self.currentBaselineIndex=int((self.baselineMenu.curselection())[0])
|
||||
print "selectSignBaseline() self.currentBaselineIndex",self.currentBaselineIndex
|
||||
target=self.findBaseline()
|
||||
target=DNAGetChild(self.currentSignDNA, DNA_SIGN_BASELINE, self.currentBaselineIndex)
|
||||
if target:
|
||||
# Temporarily undefine DNATarget (this will speed
|
||||
# up setting the values, because the callbacks won't
|
||||
# call self.levelEditor.replaceSelected() with each
|
||||
# setting):
|
||||
self.levelEditor.DNATarget=None
|
||||
self.currentBaselineDNA=None
|
||||
# Update panel info:
|
||||
self.baselineString.set(DNAGetBaselineString(target))
|
||||
self.fontMenu.selectitem(target.getCode())
|
||||
@ -3589,14 +3603,11 @@ class LevelEditorPanel(Pmw.MegaToplevel):
|
||||
self.addScaleZFloater.set(scale[2])
|
||||
hpr=target.getHpr()
|
||||
self.addRollFloater.set(hpr[2])
|
||||
# Set the DNATarget:
|
||||
self.levelEditor.DNATarget=target
|
||||
else:
|
||||
print "\n\n selectSignBaseline(), no target"
|
||||
self.currentBaselineDNA=self.levelEditor.DNATarget=target
|
||||
|
||||
def signBaselineTrace(self, a, b, mode):
|
||||
#print self, a, b, mode, self.baselineString.get()
|
||||
baseline=self.findBaseline()
|
||||
baseline=self.currentBaselineDNA
|
||||
if baseline:
|
||||
s=self.baselineString.get()
|
||||
DNASetBaselineString(baseline, s);
|
||||
@ -3606,7 +3617,7 @@ class LevelEditorPanel(Pmw.MegaToplevel):
|
||||
self.levelEditor.replaceSelected()
|
||||
|
||||
def addBaseline(self):
|
||||
sign=self.findSign()
|
||||
sign=self.findSignFromDNARoot()
|
||||
if sign:
|
||||
baseline=DNASignBaseline()
|
||||
text="Zoo"
|
||||
@ -3617,7 +3628,6 @@ class LevelEditorPanel(Pmw.MegaToplevel):
|
||||
self.baselineMenu.insert(END, text)
|
||||
current=self.baselineMenu.size()-1
|
||||
self.baselineMenu.selectitem(current)
|
||||
self.baselineMenu.activate(current)
|
||||
self.selectSignBaseline(current)
|
||||
self.levelEditor.replaceSelected()
|
||||
|
||||
@ -3625,7 +3635,7 @@ class LevelEditorPanel(Pmw.MegaToplevel):
|
||||
pass
|
||||
|
||||
def selectSignBaselineItem(self, val):
|
||||
baseline=self.findBaseline()
|
||||
baseline=self.currentBaselineDNA
|
||||
if baseline:
|
||||
baseline.setCode(val)
|
||||
self.levelEditor.replaceSelected()
|
||||
@ -3638,70 +3648,74 @@ class LevelEditorPanel(Pmw.MegaToplevel):
|
||||
self.levelEditor.replaceSelected()
|
||||
|
||||
def setSignBaselineCurve(self, val):
|
||||
baseline=self.findBaseline()
|
||||
baseline=self.currentBaselineDNA
|
||||
if baseline:
|
||||
try:
|
||||
val=1.0/val
|
||||
except ZeroDivisionError:
|
||||
val=0
|
||||
baseline.setWidth(val)
|
||||
baseline.setHeight(val)
|
||||
self.levelEditor.replaceSelected()
|
||||
|
||||
def setSignBaselineKern(self, val):
|
||||
baseline=self.findBaseline()
|
||||
baseline=self.currentBaselineDNA
|
||||
if baseline:
|
||||
baseline.setKern(val)
|
||||
self.levelEditor.replaceSelected()
|
||||
|
||||
def setSignBaselineWiggle(self, val):
|
||||
baseline=self.findBaseline()
|
||||
baseline=self.currentBaselineDNA
|
||||
if baseline:
|
||||
baseline.setWiggle(val)
|
||||
self.levelEditor.replaceSelected()
|
||||
|
||||
def setSignBaselineStumble(self, val):
|
||||
baseline=self.findBaseline()
|
||||
baseline=self.currentBaselineDNA
|
||||
if baseline:
|
||||
baseline.setStumble(val)
|
||||
self.levelEditor.replaceSelected()
|
||||
|
||||
def setSignBaselineStomp(self, val):
|
||||
baseline=self.findBaseline()
|
||||
baseline=self.currentBaselineDNA
|
||||
if baseline:
|
||||
baseline.setStomp(val)
|
||||
self.levelEditor.replaceSelected()
|
||||
|
||||
def setSignBaselineX(self, val):
|
||||
target=self.findAnySignTarget()
|
||||
def setDNATargetX(self, val):
|
||||
target=self.levelEditor.DNATarget
|
||||
if target:
|
||||
pos=target.getPos()
|
||||
pos=VBase3(val, pos[1], pos[2])
|
||||
target.setPos(pos)
|
||||
self.levelEditor.replaceSelected()
|
||||
|
||||
def setSignBaselineZ(self, val):
|
||||
target=self.findAnySignTarget()
|
||||
def setDNATargetZ(self, val):
|
||||
target=self.levelEditor.DNATarget
|
||||
if target:
|
||||
pos=target.getPos()
|
||||
pos=VBase3(pos[0], pos[1], val)
|
||||
target.setPos(pos)
|
||||
self.levelEditor.replaceSelected()
|
||||
|
||||
def setSignBaselineScaleX(self, val):
|
||||
target=self.findAnySignTarget()
|
||||
def setDNATargetScaleX(self, val):
|
||||
target=self.levelEditor.DNATarget
|
||||
if target:
|
||||
scale=target.getScale()
|
||||
scale=VBase3(val, scale[1], scale[2])
|
||||
target.setScale(scale)
|
||||
self.levelEditor.replaceSelected()
|
||||
|
||||
def setSignBaselineScaleZ(self, val):
|
||||
target=self.findAnySignTarget()
|
||||
def setDNATargetScaleZ(self, val):
|
||||
target=self.levelEditor.DNATarget
|
||||
if target:
|
||||
scale=target.getScale()
|
||||
scale=VBase3(scale[0], scale[1], val)
|
||||
target.setScale(scale)
|
||||
self.levelEditor.replaceSelected()
|
||||
|
||||
def setSignBaselineRoll(self, val):
|
||||
target=self.findAnySignTarget()
|
||||
def setDNATargetRoll(self, val):
|
||||
target=self.levelEditor.DNATarget
|
||||
if target:
|
||||
hpr=target.getHpr()
|
||||
hpr=VBase3(hpr[0], hpr[1], val)
|
||||
|
Loading…
x
Reference in New Issue
Block a user