[Python-ogre-commit] SF.net SVN: python-ogre: [580] trunk/python-ogre
Brought to you by:
andy_miller,
roman_yakovenko
From: <and...@us...> - 2008-03-15 00:25:13
|
Revision: 580 http://python-ogre.svn.sourceforge.net/python-ogre/?rev=580&view=rev Author: andy_miller Date: 2008-03-14 17:25:20 -0700 (Fri, 14 Mar 2008) Log Message: ----------- Further 1.2 updates Modified Paths: -------------- trunk/python-ogre/ThirdParty/caelum/CaelumPrerequisites.h trunk/python-ogre/ThirdParty/caelum/GroundFog.cpp trunk/python-ogre/ThirdParty/caelum/LayeredClouds.cpp trunk/python-ogre/ThirdParty/caelum/SkyDome.cpp trunk/python-ogre/ThirdParty/caelum/SkyDome.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIExportDLL.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIPanel.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIRadioButtonGroup.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIRadioButtonGroup.h trunk/python-ogre/ThirdParty/quickgui/QuickGUISheet.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUISheet.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.h trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.cpp trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.h trunk/python-ogre/demos/caelum/media/GroundFog.program trunk/python-ogre/demos/caelum/media/Haze.program trunk/python-ogre/demos/caelum/media/LayeredClouds.material trunk/python-ogre/demos/nxogre/Demo_101.py Modified: trunk/python-ogre/ThirdParty/caelum/CaelumPrerequisites.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/CaelumPrerequisites.h 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/ThirdParty/caelum/CaelumPrerequisites.h 2008-03-15 00:25:20 UTC (rev 580) @@ -24,20 +24,20 @@ // Include external headers #include "Ogre.h" -// // Define the dll export qualifier if compiling for Windows -// #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 -// #ifdef CAELUM_LIB -// #define DllExport __declspec (dllexport) -// #else -// #ifdef __MINGW32__ -// #define DllExport -// #else -// #define DllExport __declspec (dllimport) -// #endif -// #endif -// #else +// Define the dll export qualifier if compiling for Windows +// // #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 +// // #ifdef CAELUM_LIB +// // #define DllExport __declspec (dllexport) +// // #else +// // #ifdef __MINGW32__ +// // #define DllExport +// // #else +// // #define DllExport __declspec (dllimport) +// // #endif +// // #endif +// // #else #define DllExport -// #endif +// // #endif // Define the version code #define CAELUM_VERSION_MAIN 0 Modified: trunk/python-ogre/ThirdParty/caelum/GroundFog.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/GroundFog.cpp 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/ThirdParty/caelum/GroundFog.cpp 2008-03-15 00:25:20 UTC (rev 580) @@ -64,6 +64,8 @@ } GroundFog::~GroundFog() { + // Disable passes. + setDensity(0); mDomeNode->detachObject(mDomeEntity); mScene->destroyEntity(mDomeEntity); mDomeEntity = 0; Modified: trunk/python-ogre/ThirdParty/caelum/LayeredClouds.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/LayeredClouds.cpp 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/ThirdParty/caelum/LayeredClouds.cpp 2008-03-15 00:25:20 UTC (rev 580) @@ -160,10 +160,10 @@ void LayeredClouds::setCloudBlendTime(const Ogre::Real cloudBlendTime) { static const Ogre::String animTextures1[4] = { - "Noise1.png", "Noise2.png", "Noise3.png", "Noise4.png" + "noise1.png", "noise2.png", "noise3.png", "noise4.png" }; static const Ogre::String animTextures2[4] = { - "Noise2.png", "Noise3.png", "Noise4.png", "Noise1.png" + "noise2.png", "noise3.png", "noise4.png", "noise1.png" }; Ogre::Pass* pass = mMaterial->getBestTechnique()->getPass(0); Modified: trunk/python-ogre/ThirdParty/caelum/SkyDome.cpp =================================================================== --- trunk/python-ogre/ThirdParty/caelum/SkyDome.cpp 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/ThirdParty/caelum/SkyDome.cpp 2008-03-15 00:25:20 UTC (rev 580) @@ -82,19 +82,21 @@ } void SkyDome::setLightAbsorption (float absorption) const { - if (absorption > 1) + if (absorption > 1) { absorption = 1; - else if (absorption < 0) + } else if (absorption < 0) { absorption = 0; + } - Ogre::GpuProgramParametersSharedPtr vpParams = - mMaterial->getBestTechnique()->getPass(0)->getVertexProgramParameters(); + Ogre::GpuProgramParametersSharedPtr vpParams = + mMaterial->getBestTechnique()->getPass(0)->getVertexProgramParameters(); vpParams->setNamedConstant ("lightAbsorption", absorption); } void SkyDome::setLightScattering (float scattering) const { - if (scattering <= 0) + if (scattering <= 0) { scattering = 0.00001; + } Ogre::GpuProgramParametersSharedPtr fpParams = mMaterial->getBestTechnique()->getPass(0)->getFragmentProgramParameters(); @@ -160,23 +162,42 @@ pass->setLightingEnabled (false); pass->setFog (true); - // Bind fragment program. + // Create fragment programs(s) if (Ogre::Root::getSingleton ().getRenderSystem ()->getCapabilities ()->hasCapability (Ogre::RSC_FRAGMENT_PROGRAM)) { - Ogre::HighLevelGpuProgramPtr fp = Ogre::HighLevelGpuProgramManager::getSingleton().createProgram ("SkyDomeFP", RESOURCE_GROUP_NAME, "cg", Ogre::GPT_FRAGMENT_PROGRAM); - fp->setSourceFile ("CaelumShaders.cg"); + Ogre::HighLevelGpuProgramPtr fp; + + fp = Ogre::HighLevelGpuProgramManager::getSingleton().createProgram ( + "SkyDomeFP", RESOURCE_GROUP_NAME, "cg", Ogre::GPT_FRAGMENT_PROGRAM); + fp->setSourceFile ("CaelumSkyDome.cg"); fp->setParameter ("entry_point", "SkyDome_fp"); + fp->setParameter("compile_arguments", "-DHAZE=1"); fp->setParameter ("profiles", "ps_2_0 arbfp1"); - pass->setFragmentProgram ("SkyDomeFP"); + + fp = Ogre::HighLevelGpuProgramManager::getSingleton().createProgram ( + "SkyDomeFP_NoHaze", RESOURCE_GROUP_NAME, "cg", Ogre::GPT_FRAGMENT_PROGRAM); + fp->setSourceFile ("CaelumSkyDome.cg"); + fp->setParameter ("entry_point", "SkyDome_fp"); + fp->setParameter ("compile_arguments", "-DHAZE=0"); + fp->setParameter ("profiles", "ps_2_0 arbfp1"); + } + + // Bind fragment program. + if (Ogre::Root::getSingleton ().getRenderSystem ()->getCapabilities ()->hasCapability (Ogre::RSC_FRAGMENT_PROGRAM)) { + // Haze enabled by default. + mHazeEnabled = true; + pass->setFragmentProgram ("SkyDomeFP"); Ogre::GpuProgramParametersSharedPtr parameters = pass->getFragmentProgramParameters(); parameters->setIgnoreMissingParams(true); parameters->setNamedConstant ("offset", 0.0f); parameters->setNamedAutoConstant ("hazeColour", Ogre::GpuProgramParameters::ACT_FOG_COLOUR); - } + } else { + mHazeEnabled = false; + } // Bind vertex program. if (Ogre::Root::getSingleton ().getRenderSystem ()->getCapabilities ()->hasCapability (Ogre::RSC_VERTEX_PROGRAM)) { Ogre::HighLevelGpuProgramPtr vp = Ogre::HighLevelGpuProgramManager::getSingleton().createProgram ("SkyDomeVP", RESOURCE_GROUP_NAME, "cg", Ogre::GPT_VERTEX_PROGRAM); - vp->setSourceFile ("CaelumShaders.cg"); + vp->setSourceFile ("CaelumSkyDome.cg"); vp->setParameter ("entry_point", "SkyDome_vp"); vp->setParameter ("profiles", "vs_2_0 arbvp1"); pass->setVertexProgram ("SkyDomeVP"); @@ -202,6 +223,7 @@ } else { mMaterial = static_cast<Ogre::MaterialPtr>(Ogre::MaterialManager::getSingleton ().getByName (SKY_DOME_MATERIAL_NAME)); } + LOG ("DONE"); } @@ -224,4 +246,26 @@ LOG ("DONE"); } +bool SkyDome::getHazeEnabled () const { + return mHazeEnabled; +} + +void SkyDome::setHazeEnabled (bool value) { + if (mHazeEnabled == value) { + return; + } + mHazeEnabled = value; + + Ogre::Pass *pass = mMaterial->getTechnique (0)->getPass (0); + if (value) { + pass->setFragmentProgram("SkyDomeFP"); + } else { + pass->setFragmentProgram("SkyDomeFP_NoHaze"); + } + Ogre::GpuProgramParametersSharedPtr params = pass->getFragmentProgramParameters(); + params->setIgnoreMissingParams(true); + params->setNamedConstant ("offset", 0.0f); + params->setNamedAutoConstant ("hazeColour", Ogre::GpuProgramParameters::ACT_FOG_COLOUR); +} + } // namespace caelum Modified: trunk/python-ogre/ThirdParty/caelum/SkyDome.h =================================================================== --- trunk/python-ogre/ThirdParty/caelum/SkyDome.h 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/ThirdParty/caelum/SkyDome.h 2008-03-15 00:25:20 UTC (rev 580) @@ -48,6 +48,9 @@ /// Reference to the sky dome material. Ogre::MaterialPtr mMaterial; + /// If haze is enabled. + bool mHazeEnabled; + // Methods -------------------------------------------------------------------- public: /** Constructor @@ -86,6 +89,12 @@ /// Set the atmosphere depthh gradient image. void setAtmosphereDepthImage (const Ogre::String& gradients); + /// If skydome haze is enabled. + bool getHazeEnabled () const; + + /// Enable or disable skydome haze. This makes the sky darker. + void setHazeEnabled (bool value); + private: /** Internal method to create the sky dome material. * @throws UnsupportedException if the material isn't supported. Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIExportDLL.h =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIExportDLL.h 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIExportDLL.h 2008-03-15 00:25:20 UTC (rev 580) @@ -3,7 +3,7 @@ #include "OgrePlatform.h" -// #ifndef _QuickGUIExport +#ifndef _QuickGUIExport // #if defined(OGRE_PLATFORM) // #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 && !defined ( __MINGW32__ ) // # if defined( QUICKGUI_EXPORTS ) @@ -18,5 +18,5 @@ #define _QuickGUIExport // #endif -// #endif #endif +#endif Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.cpp =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.cpp 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIList.cpp 2008-03-15 00:25:20 UTC (rev 580) @@ -51,7 +51,6 @@ Size s(mSize.width,mItemHeight); std::string name = mInstanceName + ".Item" + Ogre::StringConverter::toString(counter); - mGUIManager->notifyNameUsed(name); MenuLabel* newMenuLabel = dynamic_cast<MenuLabel*>(_createChild(mInstanceName+".ChildMenuLabel" + Ogre::StringConverter::toString(mItems.size()),TYPE_MENULABEL)); newMenuLabel->setSize(s); @@ -73,7 +72,6 @@ Size s(mSize.width,mItemHeight); std::string name = mInstanceName+".Item"+Ogre::StringConverter::toString(counter); - mGUIManager->notifyNameUsed(name); TextBox* newTextBox = dynamic_cast<TextBox*>(_createChild(mInstanceName+".ChildTextBox" + Ogre::StringConverter::toString(mItems.size()),TYPE_TEXTBOX)); newTextBox->setSize(s); Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.cpp =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.cpp 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.cpp 2008-03-15 00:25:20 UTC (rev 580) @@ -25,8 +25,6 @@ { mSkinSetManager = SkinSetManager::getSingletonPtr(); - mWidgetNames.clear(); - for(int i = 0; i < NUM_MOUSE_BUTTONS; ++i) { mMouseButtonDown[i] = NULL; @@ -106,7 +104,6 @@ void GUIManager::clearAll() { - mWidgetNames.clear(); mMouseButtonDown[0] = NULL; mMouseButtonDown[1] = NULL; @@ -148,16 +145,29 @@ Sheet* GUIManager::createSheet() { - return createSheet(generateName(Widget::TYPE_SHEET)); + return createSheet(generateSheetName(),Size(mViewport->getActualWidth(),mViewport->getActualHeight())); } + Sheet* GUIManager::createSheet(Size initialSize) + { + return createSheet(generateSheetName(),initialSize); + } + Sheet* GUIManager::createSheet(const std::string& name) { - if(!isNameUnique(name)) - throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"Name \"" + name + "\" is already used!","GUIManager::createSheet"); + return createSheet(name,Size(mViewport->getActualWidth(),mViewport->getActualHeight())); + } - notifyNameUsed(name); - Sheet* newSheet = new Sheet(name,mDefaultSkin,this); + Sheet* GUIManager::createSheet(const std::string& name, Size initialSize) + { + std::list<Sheet*>::const_iterator it; + for (it = mSheets.begin(); it != mSheets.end(); ++it) + { + if (name == (*it)->getInstanceName()) // if there is a sheet with the same name + throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"Name \"" + name + "\" is already used!","GUIManager::createSheet"); + } + + Sheet* newSheet = new Sheet(name,initialSize,mDefaultSkin,this); mSheets.push_back(newSheet); return newSheet; @@ -287,43 +297,30 @@ mActiveEffects.push_back(e); } - std::string GUIManager::generateName(Widget::Type t) + std::string GUIManager::generateSheetName() { - std::string s; - switch(t) + std::string name = "Sheet"; + + int counter = 1; + int beginCounter = 0; + + std::list<Sheet*>::const_iterator it; + while (beginCounter != counter) { - case Widget::TYPE_BORDER: s = "Border"; break; - case Widget::TYPE_BUTTON: s = "Button"; break; - case Widget::TYPE_CHECKBOX: s = "CheckBox"; break; - case Widget::TYPE_COMBOBOX: s = "ComboBox"; break; - case Widget::TYPE_CONSOLE: s = "Console"; break; - case Widget::TYPE_IMAGE: s = "Image"; break; - case Widget::TYPE_LABEL: s = "Label"; break; - case Widget::TYPE_LIST: s = "List"; break; - case Widget::TYPE_MENULABEL: s = "MenuLabel"; break; - case Widget::TYPE_LABELAREA: s = "LabelArea"; break; - case Widget::TYPE_TEXTAREA: s = "TextArea"; break; - case Widget::TYPE_NSTATEBUTTON: s = "NStateButton"; break; - case Widget::TYPE_PANEL: s = "Panel"; break; - case Widget::TYPE_PROGRESSBAR: s = "ProgressBar"; break; - case Widget::TYPE_RADIOBUTTON: s = "RadioButton"; break; - case Widget::TYPE_SCROLL_PANE: s = "ScrollPane"; break; - case Widget::TYPE_SCROLLBAR_HORIZONTAL: s = "HScrollBar"; break; - case Widget::TYPE_SCROLLBAR_VERTICAL: s = "VScrollBar"; break; - case Widget::TYPE_SHEET: s = "Sheet"; break; - case Widget::TYPE_TEXTBOX: s = "TextBox"; break; - case Widget::TYPE_TITLEBAR: s = "TitleBar"; break; - case Widget::TYPE_TRACKBAR_HORIZONTAL: s = "HTrackBar"; break; - case Widget::TYPE_TRACKBAR_VERTICAL: s = "VTrackBar"; break; - case Widget::TYPE_WINDOW: s = "Window"; break; - default: s = "Widget"; break; + beginCounter = counter; + for (it = mSheets.begin(); it != mSheets.end(); ++it) + { + if (name == (*it)->getInstanceName()) // if there is a sheet with the same name + { + name = name + Ogre::StringConverter::toString(counter); + counter++; + break; + } + } } - int counter = 1; - while( !isNameUnique(s + Ogre::StringConverter::toString(counter)) ) - ++counter; - return (s + Ogre::StringConverter::toString(counter)); + return name; } bool GUIManager::injectChar(Ogre::UTFString::unicode_char c) @@ -481,7 +478,13 @@ // If the MouseButton was not pressed on this widget, do not register the button being released on the widget if( mWidgetContainingMouse != mActiveWidget ) - return mActiveWidget->fireEvent(Widget::EVENT_LOSE_FOCUS,args); + { + // If it is a textbox, don't lose focus, just fire a mouse button up event + if( mActiveWidget->getWidgetType() == Widget::TYPE_TEXTBOX ) + return mActiveWidget->fireEvent(Widget::EVENT_MOUSE_BUTTON_UP,args); + else + return mActiveWidget->fireEvent(Widget::EVENT_LOSE_FOCUS,args); + } // after this point, we know that the user had mouse button down on this widget, and is now doing mouse button up @@ -675,31 +678,6 @@ return ((mKeyModifiers & k) > 0); } - bool GUIManager::isNameUnique(const std::string& name) - { - if(name.empty()) - return false; - - return (mWidgetNames.find(name) == mWidgetNames.end()); - } - - void GUIManager::notifyNameFree(const std::string& name) - { - std::set<std::string>::iterator it = mWidgetNames.find(name); - if( it == mWidgetNames.end() ) - return; - - mWidgetNames.erase(it); - } - - void GUIManager::notifyNameUsed(const std::string& name) - { - if(!isNameUnique(name)) - return; - - mWidgetNames.insert(name); - } - void GUIManager::registerTimeListener(Widget* w) { if(w == NULL) @@ -761,6 +739,7 @@ return; mActiveSheet = s; + mActiveSheet->setSize(mViewport->getActualWidth(),mViewport->getActualHeight()); MouseEventArgs args(mWidgetContainingMouse); args.position = mMouseCursor->getPosition(); Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.h =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.h 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIManager.h 2008-03-15 00:25:20 UTC (rev 580) @@ -63,7 +63,9 @@ void clearAll(); Sheet* createSheet(); + Sheet* createSheet(Size initialSize); Sheet* createSheet(const std::string& name); + Sheet* createSheet(const std::string& name, Size initialSize); /** Destroys a Window and all child widgets that exist @param @@ -121,8 +123,6 @@ */ Sheet* getSheet(const std::string& name); - std::string generateName(Widget::Type t); - /** * Useful for Text Input Widgets, like the TextBox */ @@ -145,15 +145,7 @@ void injectTime(float time); bool isKeyModifierDown(KeyModifier k); - /** - * Checks if the desired widget name already exists. If it already exists, - * false is returned. - */ - bool isNameUnique(const std::string& name); - void notifyNameFree(const std::string& name); - void notifyNameUsed(const std::string& name); - void registerTimeListener(Widget* w); virtual void renderQueueStarted(Ogre::uint8 id, const std::string& invocation, bool& skipThisQueue); @@ -197,6 +189,8 @@ void unregisterTimeListener(Widget* w); protected: + std::string generateSheetName(); + std::string mName; // Viewport which renders all widgets belonging to this manager. Ogre::Viewport* mViewport; @@ -210,8 +204,6 @@ MouseCursor* mMouseCursor; - std::set<std::string> mWidgetNames; - // range of supported codepoints used for injectChar function. std::set<Ogre::UTFString::code_point> mSupportedCodePoints; Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIPanel.cpp =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIPanel.cpp 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIPanel.cpp 2008-03-15 00:25:20 UTC (rev 580) @@ -34,13 +34,15 @@ mScrollPane->removeChild(mScrollPane->mRightBar); // store reference to the scroll bar mRightScrollBar = mScrollPane->mRightBar; - addChild(mRightScrollBar); + mComponents.push_back(mRightScrollBar); + mRightScrollBar->setParent(this); mRightScrollBar->setPosition(mSize.width - 20,0); mScrollPane->removeChild(mScrollPane->mBottomBar); // store reference to the scroll bar mBottomScrollBar = mScrollPane->mBottomBar; - addChild(mBottomScrollBar); + mComponents.push_back(mBottomScrollBar); + mBottomScrollBar->setParent(this); mBottomScrollBar->setPosition(0,mSize.height - 20); } @@ -104,6 +106,9 @@ if(w->getParentWidget() != NULL) return; + if(!isNameUnique(w->getInstanceName())) + throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + w->getInstanceName() + "\" already exists in " + getInstanceName(),"Panel::addChild"); + mChildWidgets.push_back(w); w->setParent(this); @@ -126,272 +131,253 @@ Tree* Panel::createTree(const std::string& name) { - if(mGUIManager->isNameUnique(name)) + if(isNameUnique(name)) { - mGUIManager->notifyNameUsed(name); return dynamic_cast<Tree*>(_createChild(name,TYPE_TREE)); } else { - std::string name = mGUIManager->generateName(TYPE_TREE); - mGUIManager->notifyNameUsed(name); + std::string name = generateName(TYPE_TREE); return dynamic_cast<Tree*>(_createChild(name,TYPE_TREE)); } } */ Button* Panel::createButton() { - return createButton(mGUIManager->generateName(TYPE_BUTTON)); + return createButton(generateName(TYPE_BUTTON)); } Button* Panel::createButton(const std::string& name) { - if(mGUIManager->isNameUnique(name)) + if(isNameUnique(name)) { - mGUIManager->notifyNameUsed(name); return dynamic_cast<Button*>(_createChild(name,TYPE_BUTTON)); } else { - throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists!","Panel::createButton"); - std::string name = mGUIManager->generateName(TYPE_BUTTON); - mGUIManager->notifyNameUsed(name); - return dynamic_cast<Button*>(_createChild(name,TYPE_BUTTON)); + throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists in " + getInstanceName(),"Panel::createButton"); } } CheckBox* Panel::createCheckBox() { - return createCheckBox(mGUIManager->generateName(TYPE_CHECKBOX)); + return createCheckBox(generateName(TYPE_CHECKBOX)); } CheckBox* Panel::createCheckBox(const std::string& name) { - if(mGUIManager->isNameUnique(name)) + if(isNameUnique(name)) { - mGUIManager->notifyNameUsed(name); return dynamic_cast<CheckBox*>(_createChild(name,TYPE_CHECKBOX)); } else { - throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists!","Panel::createCheckBox"); + throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists in " + getInstanceName(),"Panel::createCheckBox"); } } ComboBox* Panel::createComboBox() { - return createComboBox(mGUIManager->generateName(TYPE_COMBOBOX)); + return createComboBox(generateName(TYPE_COMBOBOX)); } ComboBox* Panel::createComboBox(const std::string& name) { - if(mGUIManager->isNameUnique(name)) + if(isNameUnique(name)) { - mGUIManager->notifyNameUsed(name); return dynamic_cast<ComboBox*>(_createChild(name,TYPE_COMBOBOX)); } else { - throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists!","Panel::createComboBox"); + throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists in " + getInstanceName(),"Panel::createComboBox"); } } Console* Panel::createConsole() { - return createConsole(mGUIManager->generateName(TYPE_CONSOLE)); + return createConsole(generateName(TYPE_CONSOLE)); } Console* Panel::createConsole(const std::string& name) { - if(mGUIManager->isNameUnique(name)) + if(isNameUnique(name)) { - mGUIManager->notifyNameUsed(name); return dynamic_cast<Console*>(_createChild(name,TYPE_CONSOLE)); } else { - throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists!","Panel::createConsole"); + throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists in " + getInstanceName(),"Panel::createConsole"); } } HorizontalScrollBar* Panel::createHorizontalScrollBar() { - return createHorizontalScrollBar(mGUIManager->generateName(TYPE_SCROLLBAR_HORIZONTAL)); + return createHorizontalScrollBar(generateName(TYPE_SCROLLBAR_HORIZONTAL)); } HorizontalScrollBar* Panel::createHorizontalScrollBar(const std::string& name) { - if(mGUIManager->isNameUnique(name)) + if(isNameUnique(name)) { - mGUIManager->notifyNameUsed(name); return dynamic_cast<HorizontalScrollBar*>(_createChild(name,TYPE_SCROLLBAR_HORIZONTAL)); } else { - throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists!","Panel::createHorizontalScrollBar"); + throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists in " + getInstanceName(),"Panel::createHorizontalScrollBar"); } } HorizontalTrackBar* Panel::createHorizontalTrackBar() { - return createHorizontalTrackBar(mGUIManager->generateName(TYPE_TRACKBAR_HORIZONTAL)); + return createHorizontalTrackBar(generateName(TYPE_TRACKBAR_HORIZONTAL)); } HorizontalTrackBar* Panel::createHorizontalTrackBar(const std::string& name) { - if(mGUIManager->isNameUnique(name)) + if(isNameUnique(name)) { - mGUIManager->notifyNameUsed(name); return dynamic_cast<HorizontalTrackBar*>(_createChild(name,TYPE_TRACKBAR_HORIZONTAL)); } else { - throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists!","Panel::createHorizontalTrackBar"); + throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists in " + getInstanceName(),"Panel::createHorizontalTrackBar"); } } Image* Panel::createImage() { - return createImage(mGUIManager->generateName(TYPE_IMAGE)); + return createImage(generateName(TYPE_IMAGE)); } Image* Panel::createImage(const std::string& name) { - if(mGUIManager->isNameUnique(name)) + if(isNameUnique(name)) { - mGUIManager->notifyNameUsed(name); return dynamic_cast<Image*>(_createChild(name,TYPE_IMAGE)); } else { - throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists!","Panel::createImage"); + throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists in " + getInstanceName(),"Panel::createImage"); } } Label* Panel::createLabel() { - return createLabel(mGUIManager->generateName(TYPE_LABEL)); + return createLabel(generateName(TYPE_LABEL)); } Label* Panel::createLabel(const std::string& name) { - if(mGUIManager->isNameUnique(name)) + if(isNameUnique(name)) { - mGUIManager->notifyNameUsed(name); return dynamic_cast<Label*>(_createChild(name,TYPE_LABEL)); } else { - throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists!","Panel::createLabel"); + throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists in " + getInstanceName(),"Panel::createLabel"); } } List* Panel::createList() { - return createList(mGUIManager->generateName(TYPE_LIST)); + return createList(generateName(TYPE_LIST)); } List* Panel::createList(const std::string& name) { - if(mGUIManager->isNameUnique(name)) + if(isNameUnique(name)) { - mGUIManager->notifyNameUsed(name); return dynamic_cast<List*>(_createChild(name,TYPE_LIST)); } else { - throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists!","Panel::createList"); + throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists in " + getInstanceName(),"Panel::createList"); } } LabelArea* Panel::createLabelArea() { - return createLabelArea(mGUIManager->generateName(TYPE_LABELAREA)); + return createLabelArea(generateName(TYPE_LABELAREA)); } LabelArea* Panel::createLabelArea(const std::string& name) { - if(mGUIManager->isNameUnique(name)) + if(isNameUnique(name)) { - mGUIManager->notifyNameUsed(name); return dynamic_cast<LabelArea*>(_createChild(name,TYPE_LABELAREA)); } else { - throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists!","Panel::createLabelArea"); + throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists in " + getInstanceName(),"Panel::createLabelArea"); } } NStateButton* Panel::createNStateButton() { - return createNStateButton(mGUIManager->generateName(TYPE_NSTATEBUTTON)); + return createNStateButton(generateName(TYPE_NSTATEBUTTON)); } NStateButton* Panel::createNStateButton(const std::string& name) { - if(mGUIManager->isNameUnique(name)) + if(isNameUnique(name)) { - mGUIManager->notifyNameUsed(name); return dynamic_cast<NStateButton*>(_createChild(name,TYPE_NSTATEBUTTON)); } else { - throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists!","Panel::createNStateButton"); + throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists in " + getInstanceName(),"Panel::createNStateButton"); } } Panel* Panel::createPanel() { - return createPanel(mGUIManager->generateName(TYPE_PANEL)); + return createPanel(generateName(TYPE_PANEL)); } Panel* Panel::createPanel(const std::string& name) { - if(mGUIManager->isNameUnique(name)) + if(isNameUnique(name)) { - mGUIManager->notifyNameUsed(name); return dynamic_cast<Panel*>(_createChild(name,TYPE_PANEL)); } else { - throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists!","Panel::createPanel"); + throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists in " + getInstanceName(),"Panel::createPanel"); } } ProgressBar* Panel::createProgressBar() { - return createProgressBar(mGUIManager->generateName(TYPE_PROGRESSBAR)); + return createProgressBar(generateName(TYPE_PROGRESSBAR)); } ProgressBar* Panel::createProgressBar(const std::string& name) { - if(mGUIManager->isNameUnique(name)) + if(isNameUnique(name)) { - mGUIManager->notifyNameUsed(name); return dynamic_cast<ProgressBar*>(_createChild(name,TYPE_PROGRESSBAR)); } else { - throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists!","Panel::createProgressBar"); + throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists in " + getInstanceName(),"Panel::createProgressBar"); } } TextBox* Panel::createTextBox() { - return createTextBox(mGUIManager->generateName(TYPE_TEXTBOX)); + return createTextBox(generateName(TYPE_TEXTBOX)); } TextBox* Panel::createTextBox(const std::string& name) { TextBox* tb; - if(mGUIManager->isNameUnique(name)) + if(isNameUnique(name)) { - mGUIManager->notifyNameUsed(name); tb = dynamic_cast<TextBox*>(_createChild(name,TYPE_TEXTBOX)); } else { - throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists!","Panel::createTextBox"); + throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists in " + getInstanceName(),"Panel::createTextBox"); } tb->setUseBorders(true); @@ -402,37 +388,35 @@ VerticalScrollBar* Panel::createVerticalScrollBar() { - return createVerticalScrollBar(mGUIManager->generateName(TYPE_SCROLLBAR_VERTICAL)); + return createVerticalScrollBar(generateName(TYPE_SCROLLBAR_VERTICAL)); } VerticalScrollBar* Panel::createVerticalScrollBar(const std::string& name) { - if(mGUIManager->isNameUnique(name)) + if(isNameUnique(name)) { - mGUIManager->notifyNameUsed(name); return dynamic_cast<VerticalScrollBar*>(_createChild(name,TYPE_SCROLLBAR_VERTICAL)); } else { - throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists!","Panel::createVerticalScrollBar"); + throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists in " + getInstanceName(),"Panel::createVerticalScrollBar"); } } VerticalTrackBar* Panel::createVerticalTrackBar() { - return createVerticalTrackBar(mGUIManager->generateName(TYPE_TRACKBAR_VERTICAL)); + return createVerticalTrackBar(generateName(TYPE_TRACKBAR_VERTICAL)); } VerticalTrackBar* Panel::createVerticalTrackBar(const std::string& name) { - if(mGUIManager->isNameUnique(name)) + if(isNameUnique(name)) { - mGUIManager->notifyNameUsed(name); return dynamic_cast<VerticalTrackBar*>(_createChild(name,TYPE_TRACKBAR_VERTICAL)); } else { - throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists!","Panel::createVerticalTrackBar"); + throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"A widget with name \"" + name + "\" already exists in " + getInstanceName(),"Panel::createVerticalTrackBar"); } } Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIRadioButtonGroup.cpp =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIRadioButtonGroup.cpp 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIRadioButtonGroup.cpp 2008-03-15 00:25:20 UTC (rev 580) @@ -16,21 +16,43 @@ RadioButton* RadioButtonGroup::createRadioButton() { - return createRadioButton(mOwner->getGUIManager()->generateName(Widget::TYPE_RADIOBUTTON)); + std::string name = "RadioButton"; + int counter = 1; + int beginCounter = 0; + while (beginCounter != counter ) + { + beginCounter = counter; + for(std::vector<RadioButton*>::iterator it = mRadioButtons.begin(); it != mRadioButtons.end(); ++it) + { + if((*it)->getInstanceName() == name) + { + name = name + Ogre::StringConverter::toString(counter); + counter++; + break; + } + } + } + return createRadioButton(name); } - RadioButton* RadioButtonGroup::createRadioButton(const std::string& name) + RadioButton* RadioButtonGroup::createRadioButton(std::string& name) { - GUIManager* gm = mOwner->getGUIManager(); - if(gm->isNameUnique(name)) + + int counter = 1; + int beginCounter = 0; + while (beginCounter != counter ) { - gm->notifyNameUsed(name); + beginCounter = counter; + for(std::vector<RadioButton*>::iterator it = mRadioButtons.begin(); it != mRadioButtons.end(); ++it) + { + if((*it)->getInstanceName() == name) + { + name = name + Ogre::StringConverter::toString(counter); + counter++; + break; + } + } } - else - { - std::string name = gm->generateName(Widget::TYPE_RADIOBUTTON); - gm->notifyNameUsed(name); - } RadioButton* rb = dynamic_cast<RadioButton*>(mOwner->_createChild(name,Widget::TYPE_RADIOBUTTON)); mRadioButtons.push_back(rb); Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIRadioButtonGroup.h =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIRadioButtonGroup.h 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIRadioButtonGroup.h 2008-03-15 00:25:20 UTC (rev 580) @@ -15,7 +15,7 @@ ~RadioButtonGroup(); RadioButton* createRadioButton(); - RadioButton* createRadioButton(const std::string& name); + RadioButton* createRadioButton(std::string& name); RadioButton* getSelectedRadioButton(); Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUISheet.cpp =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUISheet.cpp 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUISheet.cpp 2008-03-15 00:25:20 UTC (rev 580) @@ -8,7 +8,7 @@ namespace QuickGUI { - Sheet::Sheet(const std::string& name, const std::string& skinName, GUIManager* gm) : + Sheet::Sheet(const std::string& name, Size initialSize, const std::string& skinName, GUIManager* gm) : Panel(name,gm), mMaterialName("") { @@ -19,7 +19,7 @@ mSkinName = skinName; mSkinComponent = ".sheet"; mQuad->setClipMode(Quad::CLIPMODE_NONE); - setSize(gm->getViewportWidth(),gm->getViewportHeight()); + setSize(initialSize); Ogre::FontManager* fm = Ogre::FontManager::getSingletonPtr(); Ogre::ResourceManager::ResourceMapIterator rmi = fm->getResourceIterator(); @@ -39,20 +39,18 @@ Window* Sheet::createWindow() { - return createWindow(mGUIManager->generateName(TYPE_WINDOW)); + return createWindow(generateName(TYPE_WINDOW)); } Window* Sheet::createWindow(const std::string& name) { - if(mGUIManager->isNameUnique(name)) + if(isNameUnique(name)) { - mGUIManager->notifyNameUsed(name); return dynamic_cast<Window*>(_createChild(name,TYPE_WINDOW)); } else { - std::string name = mGUIManager->generateName(TYPE_WINDOW); - mGUIManager->notifyNameUsed(name); + std::string name = generateName(TYPE_WINDOW); return dynamic_cast<Window*>(_createChild(name,TYPE_WINDOW)); } } Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUISheet.h =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUISheet.h 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUISheet.h 2008-03-15 00:25:20 UTC (rev 580) @@ -60,7 +60,7 @@ @note If you want a transparent background, pass "" as the material. */ - Sheet(const std::string& name, const std::string &skinName, GUIManager* gm); + Sheet(const std::string& name, Size initialSize, const std::string &skinName, GUIManager* gm); virtual ~Sheet(); virtual void setHeight(float pixelHeight); Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.cpp =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.cpp 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.cpp 2008-03-15 00:25:20 UTC (rev 580) @@ -385,7 +385,7 @@ int Text::getTextIndex(const Point& pixelDimensions) { if(mCaption.length() <= 0) - return -1; + return -1; // check bounds if( pixelDimensions.x < mPixelDimensions.x ) @@ -407,7 +407,7 @@ return -1; } - int Text::getTextCursorIndex(const Point& pixelDimensions) + int Text::getTextCursorIndex(Point pixelDimensions) { if(mCaption.length() <= 0) return 0; @@ -418,6 +418,13 @@ else if( pixelDimensions.x > (mPixelDimensions.x + mPixelDimensions.width) ) return (static_cast<int>(mCharacters.size()) + 1); + // If mouse cursor is above text, select from top line + if( pixelDimensions.y < mPixelDimensions.y ) + pixelDimensions.y = mPixelDimensions.y + mCharacters[0]->getSize().height / 2; + // If mouse cursor is below text, select from bottom line + else if( pixelDimensions.y > mPixelDimensions.y + mPixelDimensions.height ) + pixelDimensions.y = mPixelDimensions.y + mPixelDimensions.height - mCharacters[0]->getSize().height / 2; + int textIndex = 0; QuadArray::iterator it; for( it = mCharacters.begin(); it != mCharacters.end(); ++it ) Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.h =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.h 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIText.h 2008-03-15 00:25:20 UTC (rev 580) @@ -115,7 +115,7 @@ * Each cursor location to the left and right of a character is a cursor index. * The cursor index to the left of character 0 is 0, for example. */ - int getTextCursorIndex(const Point& pixelPosition); + int getTextCursorIndex(Point pixelPosition); /* * Tests if the given rectangle intersects with any characters of the text caption. * Each cursor location to the left and right of a character is a cursor index. Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.cpp =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.cpp 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.cpp 2008-03-15 00:25:20 UTC (rev 580) @@ -85,8 +85,6 @@ ++index; } - // Remove name from GUIManager name list. (So another widget can be created with this name, if desired) - mGUIManager->notifyNameFree(mInstanceName); } void Widget::_applyAnchors() @@ -369,11 +367,65 @@ redraw(); } + bool Widget::isNameUnique(const std::string& name) const + { + WidgetArray::const_iterator it; + for (it = mChildWidgets.begin(); it != mChildWidgets.end(); ++it) + { + if ((*it)->getInstanceName() == name) + return false; + } + return true; + } + + std::string Widget::generateName(Widget::Type t) + { + std::string s; + switch(t) + { + case Widget::TYPE_BORDER: s = "Border"; break; + case Widget::TYPE_BUTTON: s = "Button"; break; + case Widget::TYPE_CHECKBOX: s = "CheckBox"; break; + case Widget::TYPE_COMBOBOX: s = "ComboBox"; break; + case Widget::TYPE_CONSOLE: s = "Console"; break; + case Widget::TYPE_IMAGE: s = "Image"; break; + case Widget::TYPE_LABEL: s = "Label"; break; + case Widget::TYPE_LIST: s = "List"; break; + case Widget::TYPE_MENULABEL: s = "MenuLabel"; break; + case Widget::TYPE_LABELAREA: s = "LabelArea"; break; + case Widget::TYPE_TEXTAREA: s = "TextArea"; break; + case Widget::TYPE_NSTATEBUTTON: s = "NStateButton"; break; + case Widget::TYPE_PANEL: s = "Panel"; break; + case Widget::TYPE_PROGRESSBAR: s = "ProgressBar"; break; + case Widget::TYPE_RADIOBUTTON: s = "RadioButton"; break; + case Widget::TYPE_SCROLL_PANE: s = "ScrollPane"; break; + case Widget::TYPE_SCROLLBAR_HORIZONTAL: s = "HScrollBar"; break; + case Widget::TYPE_SCROLLBAR_VERTICAL: s = "VScrollBar"; break; + case Widget::TYPE_TEXTBOX: s = "TextBox"; break; + case Widget::TYPE_TITLEBAR: s = "TitleBar"; break; + case Widget::TYPE_TRACKBAR_HORIZONTAL: s = "HTrackBar"; break; + case Widget::TYPE_TRACKBAR_VERTICAL: s = "VTrackBar"; break; + case Widget::TYPE_WINDOW: s = "Window"; break; + default: s = "Widget"; break; + } + + int counter = 1; + while( !isNameUnique(s + Ogre::StringConverter::toString(counter)) ) + ++counter; + + return (s + Ogre::StringConverter::toString(counter)); + } + void Widget::addChild(Widget* w) { if(w->getParentWidget() != NULL) return; + if (!isNameUnique(w->getInstanceName())) + { + throw Ogre::Exception(Ogre::Exception::ERR_DUPLICATE_ITEM,"Name \"" + w->getInstanceName() + "\" is already used in " + getInstanceName() ,"Widget::addChild"); + } + mChildWidgets.push_back(w); w->setParent(this); @@ -561,6 +613,40 @@ { if( name.empty() ) return NULL; + + WidgetArray::iterator it; + for ( it = mChildWidgets.begin(); it != mChildWidgets.end(); ++it ) + { + if (name == (*it)->getInstanceName()) + { + return (*it); + } + } + + return NULL; + } + + const Widget* Widget::getChildWidget(const std::string& name) const + { + if( name.empty() ) + return NULL; + + WidgetArray::const_iterator it; + for ( it = mChildWidgets.begin(); it != mChildWidgets.end(); ++it ) + { + if (name == (*it)->getInstanceName()) + { + return (*it); + } + } + + return NULL; + } + + Widget* Widget::findChildWidget(const std::string& name) + { + if( name.empty() ) + return NULL; if( mInstanceName == name ) return this; @@ -568,7 +654,7 @@ WidgetArray::iterator it; for( it = mChildWidgets.begin(); it != mChildWidgets.end(); ++it ) { - if( (w = (*it)->getChildWidget(name)) != NULL ) + if( (w = (*it)->findChildWidget(name)) != NULL ) { return w; } @@ -577,7 +663,7 @@ return NULL; } - const Widget* Widget::getChildWidget(const std::string& name) const + const Widget* Widget::findChildWidget(const std::string& name) const { if( name.empty() ) return NULL; @@ -588,7 +674,7 @@ WidgetArray::const_iterator it; for( it = mChildWidgets.begin(); it != mChildWidgets.end(); ++it ) { - if( (w = (*it)->getChildWidget(name)) != NULL ) + if( (w = (*it)->findChildWidget(name)) != NULL ) { return w; } Modified: trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.h =================================================================== --- trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.h 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/ThirdParty/quickgui/QuickGUIWidget.h 2008-03-15 00:25:20 UTC (rev 580) @@ -244,8 +244,22 @@ const WidgetArray* getChildWidgetList() const; Widget* getChildWidget(const std::string& name); const Widget* getChildWidget(const std::string& name) const; + /** + * Find child by name + */ Widget* getChildWidget(Type t, unsigned int index); + /** + * Find child by name + */ const Widget* getChildWidget(Type t, unsigned int index) const; + /** + * Find child recursively by name + */ + Widget* findChildWidget(const std::string& name); + /** + * Find child recursively by name + */ + const Widget* findChildWidget(const std::string& name) const; Rect getClippedDimensions(); Rect getDimensions() const; GUIManager* getGUIManager(); @@ -256,6 +270,7 @@ Point getPosition() const; Point getScrollOffset() const; Size getSize() const; + bool isNameUnique(const std::string& name) const; std::string getFontName() const; /** @@ -509,6 +524,8 @@ void setUnderEffect(bool val) { mUnderEffect = val; } protected: + std::string generateName(Widget::Type t); + virtual void setGUIManager(GUIManager* gm); virtual void setParent(Widget* parent); virtual void setQuadContainer(QuadContainer* container); Modified: trunk/python-ogre/demos/caelum/media/GroundFog.program =================================================================== --- trunk/python-ogre/demos/caelum/media/GroundFog.program 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/demos/caelum/media/GroundFog.program 2008-03-15 00:25:20 UTC (rev 580) @@ -20,7 +20,7 @@ vertex_program CaelumGroundFogVP cg { - source CaelumShaders.cg + source CaelumGroundFog.cg entry_point GroundFog_vp profiles vs_2_x arbvp1 vp30 compile_arguments -posinv @@ -34,7 +34,7 @@ fragment_program CaelumGroundFogFP cg { - source CaelumShaders.cg + source CaelumGroundFog.cg entry_point GroundFog_fp profiles ps_2_x arbfp1 fp30 @@ -53,7 +53,7 @@ vertex_program CaelumGroundFogDomeVP cg { - source CaelumShaders.cg + source CaelumGroundFog.cg entry_point GroundFogDome_vp profiles vs_2_0 arbvp1 compile_arguments -posinv @@ -66,7 +66,7 @@ fragment_program CaelumGroundFogDomeFP cg { - source CaelumShaders.cg + source CaelumGroundFog.cg entry_point GroundFogDome_fp profiles ps_2_0 arbfp1 Modified: trunk/python-ogre/demos/caelum/media/Haze.program =================================================================== --- trunk/python-ogre/demos/caelum/media/Haze.program 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/demos/caelum/media/Haze.program 2008-03-15 00:25:20 UTC (rev 580) @@ -20,7 +20,7 @@ vertex_program CaelumHazeVP cg { - source CaelumShaders.cg + source CaelumSkyDome.cg entry_point Haze_vp profiles vs_2_0 arbvp1 vp30 compile_arguments -posinv @@ -34,7 +34,7 @@ fragment_program CaelumHazeFP cg { - source CaelumShaders.cg + source CaelumSkyDome.cg entry_point Haze_fp profiles ps_2_0 arbfp1 fp30 compile_arguments -posinv Modified: trunk/python-ogre/demos/caelum/media/LayeredClouds.material =================================================================== --- trunk/python-ogre/demos/caelum/media/LayeredClouds.material 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/demos/caelum/media/LayeredClouds.material 2008-03-15 00:25:20 UTC (rev 580) @@ -20,7 +20,7 @@ vertex_program CaelumLayeredCloudsVP cg { - source CaelumShaders.cg + source CaelumLayeredClouds.cg entry_point LayeredClouds_vp profiles vs_2_0 arbvp1 compile_arguments -posinv @@ -34,7 +34,7 @@ fragment_program CaelumLayeredCloudsFP cg { - source CaelumShaders.cg + source CaelumLayeredClouds.cg entry_point LayeredClouds_fp profiles ps_2_0 arbfp1 Modified: trunk/python-ogre/demos/nxogre/Demo_101.py =================================================================== --- trunk/python-ogre/demos/nxogre/Demo_101.py 2008-03-09 11:11:30 UTC (rev 579) +++ trunk/python-ogre/demos/nxogre/Demo_101.py 2008-03-15 00:25:20 UTC (rev 580) @@ -1,74 +1,74 @@ -""" - -""" -import sys -sys.path.insert(0,'..') -import PythonOgreConfig - -import ogre.renderer.OGRE as ogre -import ogre.physics.PhysX as physx -import ogre.physics.NxOgre as nxogre -import CakeFramework as cf - -class NxTutorial ( cf.Cake ): - def __init__ ( self ): - cf.Cake.__init__(self) - - ##//////////////////////////////////////////////////////////////////////////////////////////////// - - def start(self ): - self.World = nxogre.World("Log: html") - - self.Scene = self.World.createScene("Main", self.SceneMgr,"gravity: yes, floor: yes") - - self.Scene.createBody('sphere.50cm.mesh',nxogre.SphereShape(0.5), - ogre.Vector3(3,1.5,0), "mass: 10" ) - - - ##//////////////////////////////////////////////////////////////////////////////////////////////// - def stop(self): - ## Time to go, better tell NxOgre we are leaving. - del self.World - - ##//////////////////////////////////////////////////////////////////////////////////////////////// - - def onFrame(self, _time) : - if not self.mTargetActor: - return - if self.InputHandler.isKeyDown(cf.Action.Z): - self.mTargetActor.addTorque(ogre.Vector3(0,0,150)) - if self.InputHandler.isKeyDown(cf.Action.NEG_Z): - self.mTargetActor.addTorque(ogre.Vector3(0,0,-150)) - if self.InputHandler.isKeyDown(cf.Action.X): - self.mTargetActor.addTorque(ogre.Vector3(150,0,0)) - if self.InputHandler.isKeyDown(cf.Action.NEG_X): - self.mTargetActor.addTorque(ogre.Vector3(-150,0,0)) - if self.InputHandler.isKeyDown(cf.Action.Y): - self.mTargetActor.addTorque(ogre.Vector3(0,150,0)) - if self.InputHandler.isKeyDown(cf.Action.NEG_Y): - self.mTargetActor.addTorque(ogre.Vector3(0,-150,0)) - - def getWorld(self): - return self.World - ##//////////////////////////////////////////////////////////////////////////////////////////////// - - def getTutorialSettings( self ): - self.TutorialName = "101" - self.TutorialDescription = "Cube on a plane" - - ##//////////////////////////////////////////////////////////////////////////////////////////////// - -if __name__ == '__main__': - import exceptions,sys - try: - application = NxTutorial () - application.pre() - application.start() - application.WorldInstance = application.getWorld() - application.startRendering(application) - application.stop() - application.post() - - except ogre.OgreException, e: - print e - +""" + +""" +import sys +sys.path.insert(0,'..') +import PythonOgreConfig + +import ogre.renderer.OGRE as ogre +import ogre.physics.PhysX as physx +import ogre.physics.NxOgre_09 as nxogre +import CakeFramework as cf + +class NxTutorial ( cf.Cake ): + def __init__ ( self ): + cf.Cake.__init__(self) + + ##//////////////////////////////////////////////////////////////////////////////////////////////// + + def start(self ): + self.World = nxogre.World("Log: html") + + self.Scene = self.World.createScene("Main", self.SceneMgr,"gravity: yes, floor: yes") + + self.Scene.createBody('sphere.50cm.mesh',nxogre.SphereShape(0.5), + ogre.Vector3(3,1.5,0), "mass: 10" ) + + + ##//////////////////////////////////////////////////////////////////////////////////////////////// + def stop(self): + ## Time to go, better tell NxOgre we are leaving. + del self.World + + ##//////////////////////////////////////////////////////////////////////////////////////////////// + + def onFrame(self, _time) : + if not self.mTargetActor: + return + if self.InputHandler.isKeyDown(cf.Action.Z): + self.mTargetActor.addTorque(ogre.Vector3(0,0,150)) + if self.InputHandler.isKeyDown(cf.Action.NEG_Z): + self.mTargetActor.addTorque(ogre.Vector3(0,0,-150)) + if self.InputHandler.isKeyDown(cf.Action.X): + self.mTargetActor.addTorque(ogre.Vector3(150,0,0)) + if self.InputHandler.isKeyDown(cf.Action.NEG_X): + self.mTargetActor.addTorque(ogre.Vector3(-150,0,0)) + if self.InputHandler.isKeyDown(cf.Action.Y): + self.mTargetActor.addTorque(ogre.Vector3(0,150,0)) + if self.InputHandler.isKeyDown(cf.Action.NEG_Y): + self.mTargetActor.addTorque(ogre.Vector3(0,-150,0)) + + def getWorld(self): + return self.World + ##//////////////////////////////////////////////////////////////////////////////////////////////// + + def getTutorialSettings( self ): + self.TutorialName = "101" + self.TutorialDescription = "Cube on a plane" + + ##//////////////////////////////////////////////////////////////////////////////////////////////// + +if __name__ == '__main__': + import exceptions,sys + try: + application = NxTutorial () + application.pre() + application.start() + application.WorldInstance = application.getWorld() + application.startRendering(application) + application.stop() + application.post() + + except ogre.OgreException, e: + print e + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |