From d7ef955fb49732fe4e6555e99af31b7f6b1bc0d2 Mon Sep 17 00:00:00 2001 From: gregw <> Date: Wed, 29 Nov 2000 22:23:37 +0000 Subject: [PATCH] *** empty log message *** --- direct/src/actor/Actor.py | 16 +++-- direct/src/gui/Frame.py | 30 +++++--- direct/src/gui/PickList.py | 5 +- direct/src/gui/ScrollingLabel.py | 117 ++++++++++++++++++++++++------- 4 files changed, 124 insertions(+), 44 deletions(-) diff --git a/direct/src/actor/Actor.py b/direct/src/actor/Actor.py index bba6af27bd..d46b3effe3 100644 --- a/direct/src/actor/Actor.py +++ b/direct/src/actor/Actor.py @@ -751,16 +751,22 @@ class Actor(PandaObject, NodePath): return None - def loadModel(self, modelPath, partName="modelRoot", lodName="lodRoot"): - """loadModel(self, string, string="modelRoot", string="base") + def loadModel(self, modelPath, partName="modelRoot", lodName="lodRoot", + copy = 1): + """loadModel(self, string, string="modelRoot", string="lodRoot", + bool = 0) Actor model loader. Takes a model name (ie file path), a part name(defaults to "modelRoot") and an lod name(defaults to "lodRoot"). + If copy is set to 0, do a lodModelOnce instead of a loadModelCopy. """ - Actor.notify.info("in loadModel: %s , part: %s, lod: %s" % \ - (modelPath, partName, lodName)) + Actor.notify.info("in loadModel: %s , part: %s, lod: %s, copy: %s" % \ + (modelPath, partName, lodName, copy)) # load the model and extract its part bundle - model = loader.loadModelCopy(modelPath) + if (copy): + model = loader.loadModelCopy(modelPath) + else: + model = loader.loadModelOnce(modelPath) bundle = NodePath(model, "**/+PartBundleNode") if (bundle.isEmpty()): Actor.notify.warning("%s is not a character!" % (modelPath)) diff --git a/direct/src/gui/Frame.py b/direct/src/gui/Frame.py index 4e0f04faba..877d0c3c16 100644 --- a/direct/src/gui/Frame.py +++ b/direct/src/gui/Frame.py @@ -22,7 +22,7 @@ class Frame: del(self.frame) def __str__(self): - return "Frame: %s = %s" % self.name, self.items + return "Frame: %s = %s" % (self.name, self.items) # accessing def getName(self): @@ -52,6 +52,9 @@ class Frame: def recompute(self): self.frame.recompute() + + def clearAllPacking(self): + self.frame.clearAllPacking() # content functions def addItem(self, item): @@ -68,18 +71,23 @@ class Frame: def printItems(self): print "frame items: %s" % (self.items) - def packItem(self, itemNum, relation, otherItemNum): - self.frame.packItem(self.items[itemNum].getGuiItem(), relation, - self.items[otherItemNum].getGuiItem(), self.offset) - + def packItem(self, item, relation, otherItem): + if (item in self.items) and (otherItem in self.items): + self.frame.packItem(item.getGuiItem(), relation, + otherItem.getGuiItem(), self.offset) + else: + print "warning: tried to pack item that aren't in frame" + # convenience functions def makeVertical(self): # remove any previous packing self.frame.clearAllPacking() # make each item (except first) align under the last - for itemNum in range(1, len(self.items)): - self.packItem(itemNum, GuiFrame.GuiFrame.UNDER, itemNum - 1) - self.packItem(itemNum, GuiFrame.GuiFrame.ALIGNLEFT, itemNum - 1) + for itemNum in range(1, len(self.items)): + self.packItem(self.items[itemNum], GuiFrame.GuiFrame.UNDER, + self.items[itemNum - 1]) + self.packItem(self.items[itemNum], GuiFrame.GuiFrame.ALIGNLEFT, + self.items[itemNum - 1]) self.frame.recompute() def makeHorizontal(self): @@ -87,8 +95,10 @@ class Frame: self.frame.clearAllPacking() # make each item (except first) align right of the last for itemNum in range(1, len(self.items)): - self.packItem(itemNum, GuiFrame.GuiFrame.RIGHT, itemNum - 1) - self.packItem(itemNum, GuiFrame.GuiFrame.ALIGNABOVE, itemNum - 1) + self.packItem(self.items[itemNum], GuiFrame.GuiFrame.RIGHT, + self.items[itemNum - 1]) + self.packItem(self.items[itemNum], GuiFrame.GuiFrame.ALIGNABOVE, + self.items[itemNum - 1]) self.frame.recompute() def makeWideAsWidest(self): diff --git a/direct/src/gui/PickList.py b/direct/src/gui/PickList.py index 7f56e10c0b..177999e9f3 100644 --- a/direct/src/gui/PickList.py +++ b/direct/src/gui/PickList.py @@ -126,8 +126,6 @@ class PickList(PandaObject.PandaObject): for choice in self.choiceList: if not (self.choiceList.index(choice) == self.choice): choice.getGuiItem().exit() - # throw a rollover event - messenger.send(self.name + "-rollover") def __exitChoice(self): # reset choice when mouse exits a button @@ -148,10 +146,11 @@ class PickList(PandaObject.PandaObject): task = Task.Task(buttonUp) task.choice = self.choiceList[self.choice] taskMgr.spawnTaskNamed(Task.doLater(.035, task, - "buttonUp-Later"), + "buttonUp-later"), "doLater-buttonUp-later") # let everyone know a choice was made messenger.send(self.eventName, [self.choice]) + diff --git a/direct/src/gui/ScrollingLabel.py b/direct/src/gui/ScrollingLabel.py index d490a08184..a7a85048f6 100644 --- a/direct/src/gui/ScrollingLabel.py +++ b/direct/src/gui/ScrollingLabel.py @@ -19,21 +19,21 @@ class ScrollingLabel(PandaObject.PandaObject): self.frame.setOffset(0.015) self.item = 0 self.items = [] - - # display the name of the scrolling label + self.keyFocus = 1 + + # create the new title label = GuiLabel.GuiLabel.makeSimpleTextLabel(self.name, font) label.setForegroundColor(1., 0., 0., 1.) label.setBackgroundColor(1., 1., 1., 0.) - name = Sign.Sign(self.name, label) - self.frame.addItem(name) + self.title = Sign.Sign(self.name, label) + self.frame.addItem(self.title) # create a sign for each item in itemList for item in itemList: - #thisLabel = GuiLabel.GuiLabel.makeSimpleTextLabel(item, font) - #thisLabel.setForegroundColor(0., 0., 0., 1.) - #thisLabel.setBackgroundColor(1., 1., 1., 1.) - #thisSign = Sign.Sign(item, thisLabel) - thisSign = Button.Button(item) + thisLabel = GuiLabel.GuiLabel.makeSimpleTextLabel(item, font) + thisLabel.setForegroundColor(0., 0., 0., 1.) + thisLabel.setBackgroundColor(1., 1., 1., 1.) + thisSign = Sign.Sign(item, thisLabel) self.items.append(thisSign) # add each item temporarily self.frame.addItem(thisSign) @@ -46,24 +46,34 @@ class ScrollingLabel(PandaObject.PandaObject): self.frame.removeItem(self.items[itemNum]) # pack the first label under the name - self.frame.packItem(1, GuiFrame.GuiFrame.UNDER, 0) + self.frame.packItem(self.items[self.item], GuiFrame.GuiFrame.UNDER, + self.title) + self.frame.packItem(self.items[self.item], GuiFrame.GuiFrame.ALIGNLEFT, + self.title) # create the scroll buttons - leftButton = Button.Button(self.name + "-left", " < ") - leftButton.getGuiItem().setDownRolloverEvent(self.name + "-left") - self.frame.addItem(leftButton) - self.frame.packItem(2, GuiFrame.GuiFrame.UNDER ,0) - self.frame.packItem(2, GuiFrame.GuiFrame.LEFT ,0) - rightButton = Button.Button(self.name + "-right", " > ") - rightButton.getGuiItem().setDownRolloverEvent(self.name + "-right") - self.frame.addItem(rightButton) - self.frame.packItem(3, GuiFrame.GuiFrame.UNDER ,0) - self.frame.packItem(3, GuiFrame.GuiFrame.RIGHT ,0) + self.leftButton = Button.Button(self.name + "-left", " < ") + self.leftButton.getGuiItem().setDownRolloverEvent(self.name + "-left") + self.frame.addItem(self.leftButton) + self.frame.packItem(self.leftButton, GuiFrame.GuiFrame.UNDER, + self.title) + self.frame.packItem(self.leftButton, GuiFrame.GuiFrame.LEFT, + self.title) + self.rightButton = Button.Button(self.name + "-right", " > ") + self.rightButton.getGuiItem().setDownRolloverEvent(self.name + + "-right") + self.frame.addItem(self.rightButton) + self.frame.packItem(self.rightButton, GuiFrame.GuiFrame.UNDER, + self.title) + self.frame.packItem(self.rightButton, GuiFrame.GuiFrame.RIGHT, + self.title) # listen for the scroll buttons self.accept(self.name + "-left", self.handleLeftButton) self.accept(self.name + "-right", self.handleRightButton) - + # listen for keyboard hits + self.setKeyFocus(1) + # refresh the frame self.frame.recompute() @@ -77,14 +87,25 @@ class ScrollingLabel(PandaObject.PandaObject): # ignore events self.ignore(self.name + "-left") self.ignore(self.name + "-right") - + self.setKeyFocus(0) + # accessing - def getName(self): + def getTitle(self): return self.name + def setTitle(self, name): + self.name = name + self.title.setText(name) + self.frame.recompute() + def getItem(self): - return self.item + return self.items[self.item] + def setItem(self, item): + self.frame.removeItem(self.items[self.item]) + self.item = item + self.addItem() + def getEventName(self): return self.eventName @@ -93,12 +114,30 @@ class ScrollingLabel(PandaObject.PandaObject): def setPos(self, x, y): self.frame.setPos(x, y) + self.frame.recompute() def setScale(self, scale): self.frame.setScale(scale) + self.frame.recompute() + def getKeyFocus(self): + return self.keyFocus + def setKeyFocus(self, focus): + self.keyFocus = focus + if (focus == 1): + # listen for keyboard hits + self.accept("left-up", self.handleLeftArrow) + self.accept("right-up", self.handleRightArrow) + else: + # ignore keyboard hits + self.ignore("left-up") + self.ignore("right-up") + # actions + def recompute(self): + self.frame.recompute() + def manage(self): self.frame.manage() @@ -121,12 +160,38 @@ class ScrollingLabel(PandaObject.PandaObject): self.item = 0 self.addItem() + def handleLeftArrow(self): + # make the button toggle + self.leftButton.getGuiItem().down() + self.spawnButtonUpTask(self.leftButton) + # then act like a mouse click + self.handleLeftButton() + + def handleRightArrow(self): + # make the button toggle + self.rightButton.getGuiItem().down() + self.spawnButtonUpTask(self.rightButton) + # then act like a mouse click + self.handleRightButton() + + def spawnButtonUpTask(self, button): + def buttonUp(state): + state.button.getGuiItem().up() + return Task.done + task = Task.Task(buttonUp) + task.button = button + taskMgr.spawnTaskNamed(Task.doLater(.035, task, "buttonUp-later"), + "doLater-buttonUp-later") + def addItem(self): self.frame.addItem(self.items[self.item]) - self.frame.packItem(3, GuiFrame.GuiFrame.UNDER, 0) + self.frame.packItem(self.items[self.item], GuiFrame.GuiFrame.UNDER, + self.title) + self.frame.packItem(self.items[self.item], GuiFrame.GuiFrame.ALIGNLEFT, + self.title) self.items[self.item].manage() self.frame.recompute() - messenger.send(self.eventName + str(self.item)) + messenger.send(self.eventName, [self.item])