[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.
|