From 1e4f7df0aea7ce70e2051877b9b29f7253cab703 Mon Sep 17 00:00:00 2001 From: Mike Goslin Date: Thu, 30 Nov 2000 02:42:38 +0000 Subject: [PATCH] *** empty log message *** --- direct/src/gui/ScrollingLabel.py | 404 ++++++++++++++++--------------- direct/src/showbase/Loader.py | 15 +- 2 files changed, 217 insertions(+), 202 deletions(-) diff --git a/direct/src/gui/ScrollingLabel.py b/direct/src/gui/ScrollingLabel.py index a7a85048f6..808edecc1e 100644 --- a/direct/src/gui/ScrollingLabel.py +++ b/direct/src/gui/ScrollingLabel.py @@ -1,201 +1,203 @@ -from ShowBaseGlobal import * -import PandaObject -import Frame -import GuiFrame -import Button -import GuiLabel -import Sign - -font = (loader.loadModelOnce("phase_3/models/fonts/ttf-comic")).node() - -class ScrollingLabel(PandaObject.PandaObject): - - # special methods - def __init__(self, name, itemList): - - self.name = name - self.eventName = self.name - self.frame = Frame.Frame(name) - self.frame.setOffset(0.015) - self.item = 0 - self.items = [] - 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.) - 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) - self.items.append(thisSign) - # add each item temporarily - self.frame.addItem(thisSign) - - # make all labels the same width - self.frame.makeWideAsWidest() - - # remove all labels except the first - for itemNum in range(1, len(self.items)): - self.frame.removeItem(self.items[itemNum]) - - # pack the first label under the name - 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 - 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() - - - def cleanup(self): - # remove gui items - del(self.frame) - for item in self.items: - del(item) - - # ignore events - self.ignore(self.name + "-left") - self.ignore(self.name + "-right") - self.setKeyFocus(0) - - # accessing - 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.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 - - def setEventName(self, eventName): - self.eventName = eventName - - 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() - - def unmanage(self): - self.frame.unmanage() - - def handleLeftButton(self): - # update the current item and the scroll label - self.frame.removeItem(self.items[self.item]) - self.item = self.item - 1 - if (self.item < 0): - self.item = len(self.items) - 1 - self.addItem() - - def handleRightButton(self): - # update the current item and the scroll label - self.frame.removeItem(self.items[self.item]) - self.item = self.item + 1 - if (self.item >= len(self.items)): - 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(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, [self.item]) - - - - - - - +from ShowBaseGlobal import * +import PandaObject +import Frame +import GuiFrame +import Button +import GuiLabel +import Sign + +font = (loader.loadModelOnce("phase_3/models/fonts/ttf-comic")).node() + +class ScrollingLabel(PandaObject.PandaObject): + + # special methods + def __init__(self, name, itemList): + + self.name = name + self.eventName = self.name + self.frame = Frame.Frame(name) + self.frame.setOffset(0.015) + self.item = 0 + self.items = [] + 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.) + 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) + self.items.append(thisSign) + # add each item temporarily + self.frame.addItem(thisSign) + + # make all labels the same width + self.frame.makeWideAsWidest() + + # remove all labels except the first + for itemNum in range(1, len(self.items)): + self.frame.removeItem(self.items[itemNum]) + + # pack the first label under the name + 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 + self.leftButton = Button.Button(self.name + "-left", " < ") + self.leftButton.getGuiItem().setDownRolloverEvent(self.name + "-left") + self.leftButton.getGuiItem().setUpRolloverEvent(self.name + "-rollover") + 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.rightButton.getGuiItem().setUpRolloverEvent(self.name + "-rollover") + 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() + + + def cleanup(self): + # remove gui items + del(self.frame) + for item in self.items: + del(item) + + # ignore events + self.ignore(self.name + "-left") + self.ignore(self.name + "-right") + self.setKeyFocus(0) + + # accessing + 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.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 + + def setEventName(self, eventName): + self.eventName = eventName + + 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() + + def unmanage(self): + self.frame.unmanage() + + def handleLeftButton(self): + # update the current item and the scroll label + self.frame.removeItem(self.items[self.item]) + self.item = self.item - 1 + if (self.item < 0): + self.item = len(self.items) - 1 + self.addItem() + + def handleRightButton(self): + # update the current item and the scroll label + self.frame.removeItem(self.items[self.item]) + self.item = self.item + 1 + if (self.item >= len(self.items)): + 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(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, [self.item]) + + + + + + + diff --git a/direct/src/showbase/Loader.py b/direct/src/showbase/Loader.py index 7d49ce0501..5e33f64ac6 100644 --- a/direct/src/showbase/Loader.py +++ b/direct/src/showbase/Loader.py @@ -32,7 +32,7 @@ class Loader: else: nodePath = None return nodePath - + def loadModelOnce(self, modelPath): """loadModelOnce(self, string) Attempt to load a model from modelPool, if not present @@ -58,6 +58,11 @@ class Loader: return (nodePath.copyTo(self.__base.hidden)) else: return None + + def unloadModel(self, modelPath): + """unloadModel(self, string) + Loader.notify.info("Unloading model: %s" % (modelPath)) + ModelPool.releaseModel(modelPath) # texture loading funcs def loadTexture(self, texturePath): @@ -68,6 +73,10 @@ class Loader: texture = TexturePool.loadTexture(texturePath) return texture + def unloadTexture(self, texture): + """unloadTexture(self, texture) + TexturePool.releaseTexture(texture) + # sound loading funcs def loadSound(self, soundPath): """loadSound(self, string) @@ -77,6 +86,10 @@ class Loader: sound = AudioPool.loadSound(soundPath) return sound + def unloadSound(self, sound): + """unloadSound(self, sound) + AudioPool.releaseSound(sound) +