WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   VizMenu still in focus after calling setVisible (https://forum.worldviz.com/showthread.php?t=1733)

Gladsomebeast 12-01-2008 09:22 PM

VizMenu still in focus after calling setVisible
 
Ive got this menu and when I click a button, the menu hides via setVisible. When I want to, I bring the menu back, but when I use the mouse and click the menu title to it is still in focus and does not pop out until i focus its nebore menu title.


To see issue:
Run script
Select Simulation->Next Excersize
Press spacebar
Try to select Simulation

Code:

# coding: UTF-8
import viz
import vizact
import vizinfo
import vizmenu

TITLE_COLOR = (.85, .85, .85)
BGCOLOR = (0.3,0.3,.5)
TITLEBGCOLOR = (0.3,0.3,.5)

class ParameterView:
        def __init__(self, menu, parameter):
                self.parameter = parameter
                self.line = menu.add(viz.TEXT3D, '_'*15)
                self.line.color(TITLE_COLOR)
                self.label = menu.add(viz.TEXT3D, parameter.name)
#                self.slider = menu.add(viz.PROGRESS_BAR, parameter.name)
                self.slider = menu.add(viz.SLIDER)
                self.textBox = menu.add(viz.TEXTBOX)
                self.textBox.length(.5)
                self.parameterName = parameter.name
                self.sliderScaleFactor = parameter.maxValue - parameter.minValue
               
                self.updateViewParameterChanged()
               
                vizact.ontextbox(self.textBox, self.textboxChanged)
                vizact.onslider(self.slider, self.sliderChanged)
               
                vizact.onevent(Parameter.PARAMETER_CHANGED_EVENT, lambda e: (e.obj==self.parameter, None), self.updateViewParameterChanged)

        def setVisible(self, isVisible):
                self.line.visible(isVisible)
                self.label.visible(isVisible)
                self.slider.visible(isVisible)
                self.textBox.visible(isVisible)

        def updateViewParameterChanged(self):
                try:                       
                        if self.parameter.value != float(self.textBox.get()):
                                self.textBox.message(str(self.parameter.value))
                except ValueError:
                        self.textBox.message(str(self.parameter.value))
                self.slider.set(self.parameter.value / self.sliderScaleFactor)

        def textboxChanged(self, e=None):
                if self.textBox.get() != '':
                        try:
                                value = float(self.textBox.get())
                                self.parameter.setValue(value)
                                self.updateViewParameterChanged()
                        except ValueError:
                                try:
                                        self.textBox.message("%1.2f" % (float(e.oldText)))
                                except:
                                        self.textBox.message('')
                                viz.message('Enter only numbers')
       
        def sliderChanged(self, e):
                value = self.slider.get() * self.sliderScaleFactor
                self.parameter.setValue(value)
                self.updateViewParameterChanged()
               
       
               
timeInfo = None               
simParametersInfo = None
graphInfo = None
paramHistory = None
messageGroup = None
simMenu = None
def setup():
        global simParametersInfo, timeInfo, graphInfo, paramHistory, messageGroup, simMenu
       
#        ALPHA = .5
#        messageGroup = viz.addGroup(viz.SCREEN, pos=(.5, .80, 0), scale=[1]*3)
#        messageGroup.alpha(ALPHA)
#        background = viz.addTexQuad(messageGroup, scale=(11, 2, 0), pos=[0,0,0])
#        background.zoffset(2)
#        background.alpha(ALPHA)
#        messageGroup.t = viz.addText('asdfasdfsad', parent=messageGroup, color=viz.BLACK, pos=(-.39,.028,0), scale=[.5]*3)
#        messageGroup.t.alpha(ALPHA)
       
        vizmenu.MENU_FONT_SIZE = 25
        vizmenu.HIDDEN_HANGOFF_AMOUNT = 0
        vizmenu.VISIBLE_ANIMATE_SPEED = 10000
        timeInfo = vizmenu.add()
        timeInfo.setAutoHide(viz.OFF)
        simMenu = timeInfo.add('Simulation')
        timeInfo.startSimulationButton = simMenu.add(viz.BUTTON, 'Start')
        timeInfo.resetSimulationButton = simMenu.add(viz.BUTTON, 'Reset')
        timeInfo.resetSimulationButton.visible(viz.OFF)
        timeInfo.nextExercise = simMenu.add(viz.BUTTON, 'Next Exercise')
        sysMenu = timeInfo.add('System')
        timeInfo.graphOnWallCheckbox = sysMenu.add(viz.CHECKBOX, 'Draw graphs on wall')
        timeInfo.parameterHistoryWindowCheckbox = sysMenu.add(viz.CHECKBOX, 'Parameter History Table')
        timeInfo.toggleParmeterWindowsButton = sysMenu.add(viz.BUTTON, 'Toggle Parameter Windows')
        timeInfo.parameterHistoryWindowCheckbox.set(1)
        timeInfo.clearTrialHistoryButton = sysMenu.add(viz.BUTTON, 'Clear History')
        timeInfo.resetViewButton = sysMenu.add(viz.BUTTON, 'Reset View Position')
        timeInfo.showForcesButton = sysMenu.add(viz.CHECKBOX, 'Show Forces')
       
       

def setMenuVisible(isVisable):
        timeInfo.setVisible(isVisable)
        timeInfo.dirty()
        if isVisable == 0:
                simMenu.setVisible(isVisable)
                simMenu.dirty()

parameterList = []
def addParameter(param, menu):
        parameterList.append(ParameterView(menu, param))       
       
def setParameterVisible(param, isVisible):
        for parameterView in parameterList:
                if parameterView.parameter == param:
                        parameterView.setVisible(isVisible)

def addOption(name, menu):
        button = menu.add(viz.CHECKBOX, name)
        return button

def addLabel(stringy, menu):
        t = menu.add(viz.TEXT3D, '_'*15)
        t.color(TITLE_COLOR)
        t = menu.add(viz.TEXT3D, stringy)
        t.color(TITLE_COLOR)
       
#def setMessageVisible(isViz):
#        messageGroup.visible(isViz)
#       
#def setMessage(stingy):
#        messageGroup.t.message(stingy)
       
if __name__ == '__main__':
        viz.go()
#        viz.add('gallery.ive')
        viz.clearcolor(viz.SKYBLUE)
        setup()
       
        setMenuVisible(1)
        setMenuVisible(0)
        vizact.onbuttondown(timeInfo.nextExercise, setMenuVisible, 0)
        vizact.onkeydown(' ' , setMenuVisible, 1)


farshizzo 12-02-2008 06:42 PM

Thanks for the bug report, this will be fixed in the next release. If you need the fix sooner, then modify your vizmenu.py by replacing the setVisible function of the MenuBar class with the following code:
Code:

        def setVisible(self,visible,animate=True):
                """Make the menu hidden or visible"""
                self.__hidden = not visible
                self.__root.clearActions()
                if self.__hidden:
                        if animate:
                                self.__root.runAction(vizact.moveTo(self.__inactivePos,speed=HIDING_ANIMATE_SPEED,p1=-0.5,p2=0.0))
                        else:
                                self.__root.translate(self.__inactivePos)
                        #Clear tracked item and click state
                        self.__clicked = False
                        self.__trackitem(None)
                else:
                        if animate:
                                self.__root.runAction(vizact.goto(self.__activePos,VISIBLE_ANIMATE_SPEED))
                        else:
                                self.__root.translate(self.__activePos)


Gladsomebeast 12-02-2008 07:47 PM

thanks for the speedy fix


All times are GMT -7. The time now is 10:20 AM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC