forked from teamnwah/openmw-tes3coop
Merge branch 'next' into minimap
Conflicts: files/mygui/openmw_map_window_layout.xml
This commit is contained in:
commit
ab9aa1ba74
394 changed files with 2903 additions and 50582 deletions
|
@ -18,7 +18,7 @@ include (OpenMWMacros)
|
|||
# Version
|
||||
|
||||
set (OPENMW_VERSION_MAJOR 0)
|
||||
set (OPENMW_VERSION_MINOR 12)
|
||||
set (OPENMW_VERSION_MINOR 13)
|
||||
set (OPENMW_VERSION_RELEASE 0)
|
||||
|
||||
set (OPENMW_VERSION "${OPENMW_VERSION_MAJOR}.${OPENMW_VERSION_MINOR}.${OPENMW_VERSION_RELEASE}")
|
||||
|
@ -27,6 +27,8 @@ set (OPENMW_VERSION "${OPENMW_VERSION_MAJOR}.${OPENMW_VERSION_MINOR}.${OPENMW_VE
|
|||
|
||||
configure_file ("${OpenMW_SOURCE_DIR}/Docs/mainpage.hpp.cmake" "${OpenMW_SOURCE_DIR}/Docs/mainpage.hpp")
|
||||
|
||||
option(OGRE_STATIC "Link static build of Ogre and Ogre Plugins into the binaries" FALSE)
|
||||
|
||||
# Sound source selection
|
||||
option(USE_AUDIERE "use Audiere for sound" OFF)
|
||||
option(USE_FFMPEG "use ffmpeg for sound" OFF)
|
||||
|
@ -175,7 +177,6 @@ include_directories(${UUID_INCLUDE_DIR})
|
|||
endif (WIN32)
|
||||
if (MSVC10)
|
||||
set(PLATFORM_INCLUDE_DIR "")
|
||||
add_definitions(-DMYGUI_DONT_REPLACE_NULLPTR)
|
||||
endif()
|
||||
|
||||
if (APPLE)
|
||||
|
@ -184,23 +185,37 @@ endif (APPLE)
|
|||
|
||||
# Dependencies
|
||||
|
||||
# Fix for not visible pthreads functions for linker with glibc 2.15
|
||||
if (UNIX AND NOT APPLE)
|
||||
find_package (Threads)
|
||||
endif()
|
||||
|
||||
find_package(OGRE REQUIRED)
|
||||
find_package(MyGUI REQUIRED)
|
||||
find_package(Boost REQUIRED COMPONENTS system filesystem program_options thread)
|
||||
find_package(OIS REQUIRED)
|
||||
find_package(OpenAL REQUIRED)
|
||||
find_package(Bullet REQUIRED)
|
||||
IF(OGRE_STATIC)
|
||||
find_package(Cg REQUIRED)
|
||||
IF(WIN32)
|
||||
set(OGRE_PLUGIN_INCLUDE_DIRS ${OGRE_Plugin_CgProgramManager_INCLUDE_DIRS} ${OGRE_Plugin_OctreeSceneManager_INCLUDE_DIRS} ${OGRE_Plugin_ParticleFX_INCLUDE_DIRS} ${OGRE_RenderSystem_Direct3D9_INCLUDE_DIRS} ${OGRE_RenderSystem_GL_INCLUDE_DIRS})
|
||||
ELSE(WIN32)
|
||||
set(OGRE_PLUGIN_INCLUDE_DIRS ${OGRE_Plugin_CgProgramManager_INCLUDE_DIRS} ${OGRE_Plugin_OctreeSceneManager_INCLUDE_DIRS} ${OGRE_Plugin_ParticleFX_INCLUDE_DIRS} ${OGRE_RenderSystem_GL_INCLUDE_DIRS})
|
||||
ENDIF(WIN32)
|
||||
ENDIF(OGRE_STATIC)
|
||||
include_directories("."
|
||||
${OGRE_INCLUDE_DIR} ${OGRE_INCLUDE_DIR}/Ogre ${OGRE_INCLUDE_DIR}/OGRE
|
||||
${OGRE_INCLUDE_DIR} ${OGRE_INCLUDE_DIR}/Ogre ${OGRE_INCLUDE_DIR}/OGRE ${OGRE_PLUGIN_INCLUDE_DIRS}
|
||||
${OIS_INCLUDE_DIRS} ${Boost_INCLUDE_DIR}
|
||||
${PLATFORM_INCLUDE_DIR}
|
||||
${CMAKE_HOME_DIRECTORY}/extern/mygui_3.0.1/MyGUIEngine/include
|
||||
${CMAKE_HOME_DIRECTORY}/extern/mygui_3.0.1/OgrePlatform/include
|
||||
${MYGUI_INCLUDE_DIRS}
|
||||
${MYGUI_PLATFORM_INCLUDE_DIRS}
|
||||
${OPENAL_INCLUDE_DIR}
|
||||
${UUID_INCLUDE_DIR}
|
||||
${LIBDIR}
|
||||
)
|
||||
|
||||
link_directories(${Boost_LIBRARY_DIRS} ${OGRE_LIB_DIR})
|
||||
link_directories(${Boost_LIBRARY_DIRS} ${OGRE_LIB_DIR} ${MYGUI_LIB_DIR})
|
||||
|
||||
if(APPLE)
|
||||
# List used Ogre plugins
|
||||
|
@ -210,14 +225,7 @@ if(APPLE)
|
|||
"Plugin_ParticleFX")
|
||||
endif(APPLE)
|
||||
|
||||
add_subdirectory( extern/mygui_3.0.1 )
|
||||
|
||||
# Make sure that certain libraries are used as static libraries
|
||||
# This is in effect turns off __declspec (dllexport) for windows
|
||||
# Each library will also need to be configured to build as a static lib
|
||||
|
||||
# MyGUI: extern/mygui_3.0.0/
|
||||
add_definitions(-DMYGUI_STATIC)
|
||||
add_subdirectory( files/mygui )
|
||||
|
||||
# Specify build paths
|
||||
|
||||
|
@ -312,7 +320,7 @@ if(DPKG_PROGRAM)
|
|||
SET(CPACK_DEBIAN_PACKAGE_NAME "openmw")
|
||||
SET(CPACK_DEBIAN_PACKAGE_VERSION "${VERSION_STRING}")
|
||||
SET(CPACK_PACKAGE_EXECUTABLES "openmw;OpenMW esmtool;Esmtool omwlauncher;OMWLauncher")
|
||||
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libogre-1.7.3 (>= 1.7.3), libbullet0 (>= 2.77), libboost-filesystem1.46.1 (>= 1.46.1), libboost-program-options1.46.1 (>= 1.46.1), libboost-system1.46.1 (>= 1.46.1), libboost-thread1.46.1 (>= 1.46.1), libc6 (>= 2.11.2), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:4.1.1), libmpg123-0 (>= 1.12.1), libois-1.3.0 (>= 1.3.0), libopenal1 (>= 1:1.12.854), libsndfile1 (>= 1.0.23), libstdc++6 (>= 4.4.5), libuuid1 (>= 2.17.2), libqtgui4 (>= 4.7.0)")
|
||||
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "nvidia-cg-toolkit (>= 2.1), libboost-filesystem1.46.1 (>= 1.46.1), libboost-program-options1.46.1 (>= 1.46.1), libboost-system1.46.1 (>= 1.46.1), libboost-thread1.46.1 (>= 1.46.1), libc6 (>= 2.11.2), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:4.1.1), libmpg123-0 (>= 1.12.1), libois-1.3.0 (>= 1.3.0), libopenal1 (>= 1:1.12.854), libsndfile1 (>= 1.0.23), libstdc++6 (>= 4.4.5), libuuid1 (>= 2.17.2), libqtgui4 (>= 4.7.0)")
|
||||
|
||||
SET(CPACK_DEBIAN_PACKAGE_SECTION "Games")
|
||||
|
||||
|
@ -448,7 +456,9 @@ if (WIN32)
|
|||
endforeach(d)
|
||||
|
||||
set_target_properties(components PROPERTIES COMPILE_FLAGS ${WARNINGS})
|
||||
if (BUILD_LAUNCHER)
|
||||
set_target_properties(omwlauncher PROPERTIES COMPILE_FLAGS ${WARNINGS})
|
||||
endif (BUILD_LAUNCHER)
|
||||
set_target_properties(openmw PROPERTIES COMPILE_FLAGS ${WARNINGS})
|
||||
endif(MSVC)
|
||||
|
||||
|
|
|
@ -53,6 +53,15 @@ QT4_WRAP_CPP(MOC_SRCS ${LAUNCHER_HEADER_MOC})
|
|||
include(${QT_USE_FILE})
|
||||
|
||||
# Main executable
|
||||
IF(OGRE_STATIC)
|
||||
IF(WIN32)
|
||||
ADD_DEFINITIONS(-DENABLE_PLUGIN_Direct3D9 -DENABLE_PLUGIN_GL)
|
||||
set(OGRE_STATIC_PLUGINS ${OGRE_RenderSystem_Direct3D9_LIBRARIES} ${OGRE_RenderSystem_GL_LIBRARIES})
|
||||
ELSE(WIN32)
|
||||
ADD_DEFINITIONS(-DENABLE_PLUGIN_GL)
|
||||
set(OGRE_STATIC_PLUGINS ${OGRE_RenderSystem_GL_LIBRARIES})
|
||||
ENDIF(WIN32)
|
||||
ENDIF(OGRE_STATIC)
|
||||
add_executable(omwlauncher
|
||||
${GUI_TYPE}
|
||||
${LAUNCHER}
|
||||
|
@ -63,6 +72,7 @@ add_executable(omwlauncher
|
|||
target_link_libraries(omwlauncher
|
||||
${Boost_LIBRARIES}
|
||||
${OGRE_LIBRARIES}
|
||||
${OGRE_STATIC_PLUGINS}
|
||||
${QT_LIBRARIES}
|
||||
components
|
||||
)
|
||||
|
|
|
@ -222,7 +222,7 @@ void DataFilesPage::setupDataFiles()
|
|||
|
||||
QMessageBox msgBox;
|
||||
msgBox.setWindowTitle("Error detecting Morrowind installation");
|
||||
msgBox.setIcon(QMessageBox::Critical);
|
||||
msgBox.setIcon(QMessageBox::Warning);
|
||||
msgBox.setStandardButtons(QMessageBox::Cancel);
|
||||
msgBox.setText(tr("<br><b>Could not find the Data Files location</b><br><br> \
|
||||
The directory containing the Data Files was not found.<br><br> \
|
||||
|
@ -279,6 +279,8 @@ void DataFilesPage::setupDataFiles()
|
|||
const Files::MultiDirCollection &esp = fileCollections.getCollection(".esp");
|
||||
|
||||
for (Files::MultiDirCollection::TIter iter(esp.begin()); iter!=esp.end(); ++iter) {
|
||||
|
||||
try {
|
||||
ESMReader fileReader;
|
||||
QStringList availableMasters; // Will contain all found masters
|
||||
|
||||
|
@ -346,6 +348,11 @@ void DataFilesPage::setupDataFiles()
|
|||
currentItem->appendRow(child);
|
||||
}
|
||||
}
|
||||
|
||||
} catch(std::runtime_error &e) {
|
||||
// An error occurred while reading the .esp
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
readConfig();
|
||||
|
|
|
@ -186,7 +186,11 @@ void GraphicsPage::setupOgre()
|
|||
|
||||
try
|
||||
{
|
||||
#if defined(ENABLE_PLUGIN_GL) || defined(ENABLE_PLUGIN_Direct3D9)
|
||||
mOgre = new Ogre::Root("", file.fileName().toStdString(), "./launcherOgre.log");
|
||||
#else
|
||||
mOgre = new Ogre::Root(pluginCfg.toStdString(), file.fileName().toStdString(), "./launcherOgre.log");
|
||||
#endif
|
||||
}
|
||||
catch(Ogre::Exception &ex)
|
||||
{
|
||||
|
@ -207,6 +211,15 @@ void GraphicsPage::setupOgre()
|
|||
return;
|
||||
}
|
||||
|
||||
#ifdef ENABLE_PLUGIN_GL
|
||||
mGLPlugin = new Ogre::GLPlugin();
|
||||
mOgre->installPlugin(mGLPlugin);
|
||||
#endif
|
||||
#ifdef ENABLE_PLUGIN_Direct3D9
|
||||
mD3D9Plugin = new Ogre::D3D9Plugin();
|
||||
mOgre->installPlugin(mD3D9Plugin);
|
||||
#endif
|
||||
|
||||
// Get the available renderers and put them in the combobox
|
||||
const Ogre::RenderSystemList &renderers = mOgre->getAvailableRenderers();
|
||||
|
||||
|
|
|
@ -8,6 +8,14 @@
|
|||
#include <OgreConfigFile.h>
|
||||
#include <OgreConfigDialog.h>
|
||||
|
||||
// Static plugin headers
|
||||
#ifdef ENABLE_PLUGIN_GL
|
||||
# include "OgreGLPlugin.h"
|
||||
#endif
|
||||
#ifdef ENABLE_PLUGIN_Direct3D9
|
||||
# include "OgreD3D9Plugin.h"
|
||||
#endif
|
||||
|
||||
class QComboBox;
|
||||
class QCheckBox;
|
||||
class QStackedWidget;
|
||||
|
@ -32,6 +40,12 @@ private:
|
|||
Ogre::RenderSystem *mSelectedRenderSystem;
|
||||
Ogre::RenderSystem *mOpenGLRenderSystem;
|
||||
Ogre::RenderSystem *mDirect3DRenderSystem;
|
||||
#ifdef ENABLE_PLUGIN_GL
|
||||
Ogre::GLPlugin* mGLPlugin;
|
||||
#endif
|
||||
#ifdef ENABLE_PLUGIN_Direct3D9
|
||||
Ogre::D3D9Plugin* mD3D9Plugin;
|
||||
#endif
|
||||
|
||||
QComboBox *mRendererComboBox;
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ add_openmw_dir (mwsound
|
|||
add_openmw_dir (mwworld
|
||||
refdata world physicssystem scene environment globals class action nullaction actionteleport
|
||||
containerstore actiontalk actiontake manualref player cellfunctors
|
||||
cells localscripts customdata weather inventorystore
|
||||
cells localscripts customdata weather inventorystore ptr
|
||||
)
|
||||
|
||||
add_openmw_dir (mwclass
|
||||
|
@ -58,6 +58,15 @@ add_openmw_dir (mwmechanics
|
|||
)
|
||||
|
||||
# Main executable
|
||||
IF(OGRE_STATIC)
|
||||
IF(WIN32)
|
||||
ADD_DEFINITIONS(-DENABLE_PLUGIN_CgProgramManager -DENABLE_PLUGIN_OctreeSceneManager -DENABLE_PLUGIN_ParticleFX -DENABLE_PLUGIN_-DENABLE_PLUGIN_Direct3D9 -DENABLE_PLUGIN_GL)
|
||||
set(OGRE_STATIC_PLUGINS ${OGRE_Plugin_CgProgramManager_LIBRARIES} ${OGRE_Plugin_OctreeSceneManager_LIBRARIES} ${OGRE_Plugin_ParticleFX_LIBRARIES} ${OGRE_RenderSystem_Direct3D9_LIBRARIES} ${OGRE_RenderSystem_GL_LIBRARIES})
|
||||
ELSE(WIN32)
|
||||
ADD_DEFINITIONS(-DENABLE_PLUGIN_CgProgramManager -DENABLE_PLUGIN_OctreeSceneManager -DENABLE_PLUGIN_ParticleFX -DENABLE_PLUGIN_GL)
|
||||
set(OGRE_STATIC_PLUGINS ${OGRE_Plugin_CgProgramManager_LIBRARIES} ${Cg_LIBRARIES} ${OGRE_Plugin_OctreeSceneManager_LIBRARIES} ${OGRE_Plugin_ParticleFX_LIBRARIES} ${OGRE_RenderSystem_GL_LIBRARIES})
|
||||
ENDIF(WIN32)
|
||||
ENDIF(OGRE_STATIC)
|
||||
add_executable(openmw
|
||||
${OPENMW_LIBS} ${OPENMW_LIBS_HEADER}
|
||||
${COMPONENT_FILES}
|
||||
|
@ -73,16 +82,22 @@ add_definitions(${SOUND_DEFINE})
|
|||
|
||||
target_link_libraries(openmw
|
||||
${OGRE_LIBRARIES}
|
||||
${OGRE_STATIC_PLUGINS}
|
||||
${OIS_LIBRARIES}
|
||||
${Boost_LIBRARIES}
|
||||
${OPENAL_LIBRARY}
|
||||
${SOUND_INPUT_LIBRARY}
|
||||
${BULLET_LIBRARIES}
|
||||
${MYGUI_LIBRARIES}
|
||||
MyGUI.OgrePlatform #TODO MyGUI ogre platform is not added by the find script
|
||||
components
|
||||
MyGUIEngine
|
||||
MyGUIOgrePlatform
|
||||
)
|
||||
|
||||
# Fix for not visible pthreads functions for linker with glibc 2.15
|
||||
if (UNIX AND NOT APPLE)
|
||||
target_link_libraries(openmw ${CMAKE_THREAD_LIBS_INIT})
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
find_library(CARBON_FRAMEWORK Carbon)
|
||||
target_link_libraries(openmw ${CARBON_FRAMEWORK})
|
||||
|
|
|
@ -60,7 +60,7 @@ void OMW::Engine::executeLocalScripts()
|
|||
|
||||
MWScript::InterpreterContext interpreterContext (mEnvironment,
|
||||
&script.second.getRefData().getLocals(), script.second);
|
||||
mScriptManager->run (script.first, interpreterContext);
|
||||
mEnvironment.mScriptManager->run (script.first, interpreterContext);
|
||||
|
||||
if (mEnvironment.mWorld->hasCellChanged())
|
||||
break;
|
||||
|
@ -182,7 +182,6 @@ OMW::Engine::Engine(Files::ConfigurationManager& configurationManager)
|
|||
, mCompileAll (false)
|
||||
, mReportFocus (false)
|
||||
, mFocusTDiff (0)
|
||||
, mScriptManager (0)
|
||||
, mScriptContext (0)
|
||||
, mFSStrict (false)
|
||||
, mCfgMgr(configurationManager)
|
||||
|
@ -199,7 +198,7 @@ OMW::Engine::~Engine()
|
|||
delete mEnvironment.mMechanicsManager;
|
||||
delete mEnvironment.mDialogueManager;
|
||||
delete mEnvironment.mJournal;
|
||||
delete mScriptManager;
|
||||
delete mEnvironment.mScriptManager;
|
||||
delete mScriptContext;
|
||||
delete mOgre;
|
||||
}
|
||||
|
@ -348,18 +347,18 @@ void OMW::Engine::go()
|
|||
mEnvironment);
|
||||
mScriptContext->setExtensions (&mExtensions);
|
||||
|
||||
mScriptManager = new MWScript::ScriptManager (mEnvironment.mWorld->getStore(), mVerboseScripts,
|
||||
*mScriptContext);
|
||||
mEnvironment.mScriptManager = new MWScript::ScriptManager (mEnvironment.mWorld->getStore(),
|
||||
mVerboseScripts, *mScriptContext);
|
||||
|
||||
mEnvironment.mGlobalScripts = new MWScript::GlobalScripts (mEnvironment.mWorld->getStore(),
|
||||
*mScriptManager);
|
||||
*mEnvironment.mScriptManager);
|
||||
|
||||
// Create game mechanics system
|
||||
mEnvironment.mMechanicsManager = new MWMechanics::MechanicsManager (mEnvironment);
|
||||
|
||||
// Create dialog system
|
||||
mEnvironment.mJournal = new MWDialogue::Journal (mEnvironment);
|
||||
mEnvironment.mDialogueManager = new MWDialogue::DialogueManager (mEnvironment);
|
||||
mEnvironment.mDialogueManager = new MWDialogue::DialogueManager (mEnvironment,mExtensions);
|
||||
|
||||
// load cell
|
||||
ESM::Position pos;
|
||||
|
@ -393,7 +392,7 @@ void OMW::Engine::go()
|
|||
// scripts
|
||||
if (mCompileAll)
|
||||
{
|
||||
std::pair<int, int> result = mScriptManager->compileAll();
|
||||
std::pair<int, int> result = mEnvironment.mScriptManager->compileAll();
|
||||
|
||||
if (result.first)
|
||||
std::cout
|
||||
|
@ -411,6 +410,9 @@ void OMW::Engine::go()
|
|||
|
||||
void OMW::Engine::activate()
|
||||
{
|
||||
if (mEnvironment.mWindowManager->getMode()!=MWGui::GM_Game)
|
||||
return;
|
||||
|
||||
std::string handle = mEnvironment.mWorld->getFacedHandle();
|
||||
|
||||
if (handle.empty())
|
||||
|
@ -435,7 +437,7 @@ void OMW::Engine::activate()
|
|||
if (!script.empty())
|
||||
{
|
||||
mEnvironment.mWorld->getLocalScripts().setIgnore (ptr);
|
||||
mScriptManager->run (script, interpreterContext);
|
||||
mEnvironment.mScriptManager->run (script, interpreterContext);
|
||||
}
|
||||
|
||||
if (!interpreterContext.hasActivationBeenHandled())
|
||||
|
|
|
@ -78,7 +78,6 @@ namespace OMW
|
|||
std::string mFocusName;
|
||||
|
||||
MWWorld::Environment mEnvironment;
|
||||
MWScript::ScriptManager *mScriptManager;
|
||||
Compiler::Extensions mExtensions;
|
||||
Compiler::Context *mScriptContext;
|
||||
|
||||
|
|
|
@ -9,16 +9,36 @@
|
|||
|
||||
#include <components/esm_store/store.hpp>
|
||||
|
||||
|
||||
#include "../mwworld/class.hpp"
|
||||
#include "../mwworld/environment.hpp"
|
||||
#include "../mwworld/world.hpp"
|
||||
#include "../mwworld/refdata.hpp"
|
||||
#include "../mwworld/player.hpp"
|
||||
#include "../mwworld/containerstore.hpp"
|
||||
|
||||
#include "../mwinput/inputmanager.hpp"
|
||||
#include "../mwgui/dialogue.hpp"
|
||||
#include "../mwgui/window_manager.hpp"
|
||||
|
||||
#include "journal.hpp"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#include "../mwscript/extensions.hpp"
|
||||
#include "../mwscript/scriptmanager.hpp"
|
||||
|
||||
#include <components/compiler/exception.hpp>
|
||||
#include <components/compiler/errorhandler.hpp>
|
||||
#include <components/compiler/scanner.hpp>
|
||||
#include <components/compiler/locals.hpp>
|
||||
#include <components/compiler/output.hpp>
|
||||
#include <components/interpreter/interpreter.hpp>
|
||||
|
||||
#include "../mwscript/compilercontext.hpp"
|
||||
#include "../mwscript/interpretercontext.hpp"
|
||||
#include <components/compiler/scriptparser.hpp>
|
||||
|
||||
namespace
|
||||
{
|
||||
std::string toLower (const std::string& name)
|
||||
|
@ -31,6 +51,7 @@ namespace
|
|||
return lowerCase;
|
||||
}
|
||||
|
||||
|
||||
template<typename T1, typename T2>
|
||||
bool selectCompare (char comp, T1 value1, T2 value2)
|
||||
{
|
||||
|
@ -115,6 +136,125 @@ namespace
|
|||
|
||||
namespace MWDialogue
|
||||
{
|
||||
|
||||
//helper function
|
||||
std::string::size_type find_str_ci(const std::string& str, const std::string& substr,size_t pos)
|
||||
{
|
||||
return toLower(str).find(toLower(substr),pos);
|
||||
}
|
||||
|
||||
bool DialogueManager::functionFilter(const MWWorld::Ptr& actor, const ESM::DialInfo& info,bool choice)
|
||||
{
|
||||
for (std::vector<ESM::DialInfo::SelectStruct>::const_iterator iter (info.selects.begin());
|
||||
iter != info.selects.end(); ++iter)
|
||||
{
|
||||
ESM::DialInfo::SelectStruct select = *iter;
|
||||
char type = select.selectRule[1];
|
||||
if(type == '1')
|
||||
{
|
||||
char comp = select.selectRule[4];
|
||||
std::string name = select.selectRule.substr (5);
|
||||
std::string function = select.selectRule.substr(2,2);
|
||||
|
||||
int ifunction;
|
||||
std::istringstream iss(function);
|
||||
iss >> ifunction;
|
||||
switch(ifunction)
|
||||
{
|
||||
case 39://PC Expelled
|
||||
if(!selectCompare<int,int>(comp,0,select.i)) return false;
|
||||
break;
|
||||
|
||||
case 40://PC Common Disease
|
||||
if(!selectCompare<int,int>(comp,0,select.i)) return false;
|
||||
break;
|
||||
|
||||
case 41://PC Blight Disease
|
||||
if(!selectCompare<int,int>(comp,0,select.i)) return false;
|
||||
break;
|
||||
|
||||
case 43://PC Crime level
|
||||
if(!selectCompare<int,int>(comp,0,select.i)) return false;
|
||||
break;
|
||||
|
||||
case 46://Same faction
|
||||
if(!selectCompare<int,int>(comp,0,select.i)) return false;
|
||||
break;
|
||||
|
||||
case 48://Detected
|
||||
if(!selectCompare<int,int>(comp,1,select.i)) return false;
|
||||
break;
|
||||
|
||||
case 49://Alarmed
|
||||
if(!selectCompare<int,int>(comp,0,select.i)) return false;
|
||||
break;
|
||||
|
||||
case 50://choice
|
||||
|
||||
if(choice)
|
||||
{
|
||||
if(!selectCompare<int,int>(comp,mChoice,select.i)) return false;
|
||||
}
|
||||
break;
|
||||
|
||||
case 60://PC Vampire
|
||||
if(!selectCompare<int,int>(comp,0,select.i)) return false;
|
||||
break;
|
||||
|
||||
case 61://Level
|
||||
if(!selectCompare<int,int>(comp,1,select.i)) return false;
|
||||
break;
|
||||
|
||||
case 62://Attacked
|
||||
if(!selectCompare<int,int>(comp,0,select.i)) return false;
|
||||
break;
|
||||
|
||||
case 63://Talked to PC
|
||||
if(!selectCompare<int,int>(comp,0,select.i)) return false;
|
||||
break;
|
||||
|
||||
case 64://PC Health
|
||||
if(!selectCompare<int,int>(comp,50,select.i)) return false;
|
||||
break;
|
||||
|
||||
case 65://Creature target
|
||||
if(!selectCompare<int,int>(comp,0,select.i)) return false;
|
||||
break;
|
||||
|
||||
case 66://Friend hit
|
||||
if(!selectCompare<int,int>(comp,0,select.i)) return false;
|
||||
break;
|
||||
|
||||
case 67://Fight
|
||||
if(!selectCompare<int,int>(comp,0,select.i)) return false;
|
||||
break;
|
||||
|
||||
case 68://Hello????
|
||||
if(!selectCompare<int,int>(comp,0,select.i)) return false;
|
||||
break;
|
||||
|
||||
case 69://Alarm
|
||||
if(!selectCompare<int,int>(comp,0,select.i)) return false;
|
||||
break;
|
||||
|
||||
case 70://Flee
|
||||
if(!selectCompare<int,int>(comp,0,select.i)) return false;
|
||||
break;
|
||||
|
||||
case 71://Should Attack
|
||||
if(!selectCompare<int,int>(comp,0,select.i)) return false;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DialogueManager::isMatching (const MWWorld::Ptr& actor,
|
||||
const ESM::DialInfo::SelectStruct& select) const
|
||||
{
|
||||
|
@ -124,14 +264,13 @@ namespace MWDialogue
|
|||
{
|
||||
char comp = select.selectRule[4];
|
||||
std::string name = select.selectRule.substr (5);
|
||||
|
||||
// TODO types 4, 5, 6, 7, 8, 9, A, B, C
|
||||
std::string function = select.selectRule.substr(1,2);
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case '1': // function
|
||||
|
||||
return false; // TODO implement functions
|
||||
return true; // TODO implement functions
|
||||
|
||||
case '2': // global
|
||||
|
||||
|
@ -173,6 +312,122 @@ namespace MWDialogue
|
|||
|
||||
return true;
|
||||
|
||||
case '4'://journal
|
||||
if(select.type==ESM::VT_Int)
|
||||
{
|
||||
if(!selectCompare<int,int>(comp,mEnvironment.mJournal->getJournalIndex(toLower(name)),select.i)) return false;
|
||||
}
|
||||
else
|
||||
throw std::runtime_error (
|
||||
"unsupported variable type in dialogue info select");
|
||||
|
||||
return true;
|
||||
|
||||
case '5'://item
|
||||
{
|
||||
MWWorld::Ptr player = mEnvironment.mWorld->getPlayer().getPlayer();
|
||||
MWWorld::ContainerStore& store = MWWorld::Class::get (player).getContainerStore (player);
|
||||
|
||||
int sum = 0;
|
||||
|
||||
for (MWWorld::ContainerStoreIterator iter (store.begin()); iter!=store.end(); ++iter)
|
||||
if (iter->getCellRef().refID==name)
|
||||
sum += iter->getRefData().getCount();
|
||||
if(!selectCompare<int,int>(comp,sum,select.i)) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
|
||||
case '6'://dead
|
||||
if(!selectCompare<int,int>(comp,0,select.i)) return false;
|
||||
|
||||
case '7':// not ID
|
||||
if(select.type==ESM::VT_String ||select.type==ESM::VT_Int)//bug in morrowind here? it's not a short, it's a string
|
||||
{
|
||||
int isID = int(toLower(name)==toLower(MWWorld::Class::get (actor).getId (actor)));
|
||||
if (selectCompare<int,int>(comp,!isID,select.i)) return false;
|
||||
}
|
||||
else
|
||||
throw std::runtime_error (
|
||||
"unsupported variable type in dialogue info select");
|
||||
|
||||
return true;
|
||||
|
||||
case '8':// not faction
|
||||
if(select.type==ESM::VT_Int)
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::NPC, MWWorld::RefData>* npc = actor.get<ESM::NPC>();
|
||||
int isFaction = int(toLower(npc->base->faction) == toLower(name));
|
||||
if(selectCompare<int,int>(comp,!isFaction,select.i))
|
||||
return false;
|
||||
}
|
||||
else
|
||||
throw std::runtime_error (
|
||||
"unsupported variable type in dialogue info select");
|
||||
|
||||
return true;
|
||||
|
||||
case '9':// not class
|
||||
if(select.type==ESM::VT_Int)
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::NPC, MWWorld::RefData>* npc = actor.get<ESM::NPC>();
|
||||
int isClass = int(toLower(npc->base->cls) == toLower(name));
|
||||
if(selectCompare<int,int>(comp,!isClass,select.i))
|
||||
return false;
|
||||
}
|
||||
else
|
||||
throw std::runtime_error (
|
||||
"unsupported variable type in dialogue info select");
|
||||
|
||||
return true;
|
||||
|
||||
case 'A'://not Race
|
||||
if(select.type==ESM::VT_Int)
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::NPC, MWWorld::RefData>* npc = actor.get<ESM::NPC>();
|
||||
int isRace = int(toLower(npc->base->race) == toLower(name));
|
||||
if(selectCompare<int,int>(comp,!isRace,select.i))
|
||||
return false;
|
||||
}
|
||||
else
|
||||
throw std::runtime_error (
|
||||
"unsupported variable type in dialogue info select");
|
||||
|
||||
return true;
|
||||
|
||||
case 'B'://not Cell
|
||||
if(select.type==ESM::VT_Int)
|
||||
{
|
||||
int isCell = int(toLower(actor.getCell()->cell->name) == toLower(name));
|
||||
if(selectCompare<int,int>(comp,!isCell,select.i))
|
||||
return false;
|
||||
}
|
||||
else
|
||||
throw std::runtime_error (
|
||||
"unsupported variable type in dialogue info select");
|
||||
return true;
|
||||
|
||||
case 'C'://not local
|
||||
if (select.type==ESM::VT_Short || select.type==ESM::VT_Int ||
|
||||
select.type==ESM::VT_Long)
|
||||
{
|
||||
if (checkLocal (comp, toLower (name), select.i, actor,
|
||||
mEnvironment.mWorld->getStore()))
|
||||
return false;
|
||||
}
|
||||
else if (select.type==ESM::VT_Float)
|
||||
{
|
||||
if (checkLocal (comp, toLower (name), select.f, actor,
|
||||
mEnvironment.mWorld->getStore()))
|
||||
return false;
|
||||
}
|
||||
else
|
||||
throw std::runtime_error (
|
||||
"unsupported variable type in dialogue info select");
|
||||
return true;
|
||||
|
||||
|
||||
default:
|
||||
|
||||
std::cout << "unchecked select: " << type << " " << comp << " " << name << std::endl;
|
||||
|
@ -189,6 +444,10 @@ namespace MWDialogue
|
|||
if (toLower (info.actor)!=MWWorld::Class::get (actor).getId (actor))
|
||||
return false;
|
||||
|
||||
//PC Faction
|
||||
if(!info.pcFaction.empty()) return false;
|
||||
|
||||
//NPC race
|
||||
if (!info.race.empty())
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::NPC, MWWorld::RefData> *cellRef = actor.get<ESM::NPC>();
|
||||
|
@ -200,6 +459,7 @@ namespace MWDialogue
|
|||
return false;
|
||||
}
|
||||
|
||||
//NPC class
|
||||
if (!info.clas.empty())
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::NPC, MWWorld::RefData> *cellRef = actor.get<ESM::NPC>();
|
||||
|
@ -211,6 +471,7 @@ namespace MWDialogue
|
|||
return false;
|
||||
}
|
||||
|
||||
//NPC faction
|
||||
if (!info.npcFaction.empty())
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::NPC, MWWorld::RefData> *cellRef = actor.get<ESM::NPC>();
|
||||
|
@ -220,66 +481,320 @@ namespace MWDialogue
|
|||
|
||||
if (toLower (info.npcFaction)!=toLower (cellRef->base->faction))
|
||||
return false;
|
||||
|
||||
//check NPC rank
|
||||
if(cellRef->base->npdt52.gold != -10)
|
||||
{
|
||||
if(cellRef->base->npdt52.rank < info.data.rank) return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(cellRef->base->npdt12.rank < info.data.rank) return false;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO check player faction
|
||||
|
||||
//check gender
|
||||
ESMS::LiveCellRef<ESM::NPC, MWWorld::RefData>* npc = actor.get<ESM::NPC>();
|
||||
if(npc->base->flags&npc->base->Female)
|
||||
{
|
||||
if(static_cast<int> (info.data.gender)==0) return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(static_cast<int> (info.data.gender)==1) return false;
|
||||
}
|
||||
|
||||
|
||||
// check cell
|
||||
if (!info.cell.empty())
|
||||
if (mEnvironment.mWorld->getPlayer().getPlayer().getCell()->cell->name != info.cell)
|
||||
return false;
|
||||
|
||||
// TODO check DATAstruct
|
||||
|
||||
for (std::vector<ESM::DialInfo::SelectStruct>::const_iterator iter (info.selects.begin());
|
||||
iter != info.selects.end(); ++iter)
|
||||
if (!isMatching (actor, *iter))
|
||||
return false;
|
||||
|
||||
std::cout
|
||||
<< "unchecked entries:" << std::endl
|
||||
<< " player faction: " << info.pcFaction << std::endl
|
||||
<< " disposition: " << info.data.disposition << std::endl
|
||||
<< " NPC rank: " << static_cast<int> (info.data.rank) << std::endl
|
||||
<< " gender: " << static_cast<int> (info.data.gender) << std::endl
|
||||
<< " PC rank: " << static_cast<int> (info.data.PCrank) << std::endl;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
DialogueManager::DialogueManager (MWWorld::Environment& environment) : mEnvironment (environment) {}
|
||||
DialogueManager::DialogueManager (MWWorld::Environment& environment,const Compiler::Extensions& extensions) :
|
||||
mEnvironment (environment),mCompilerContext (MWScript::CompilerContext::Type_Dialgoue, environment),
|
||||
mErrorStream(std::cout.rdbuf()),mErrorHandler(mErrorStream)
|
||||
{
|
||||
mChoice = -1;
|
||||
mIsInChoice = false;
|
||||
mCompilerContext.setExtensions (&extensions);
|
||||
}
|
||||
|
||||
void DialogueManager::addTopic(std::string topic)
|
||||
{
|
||||
knownTopics[toLower(topic)] = true;
|
||||
}
|
||||
|
||||
void DialogueManager::parseText(std::string text)
|
||||
{
|
||||
std::list<std::string>::iterator it;
|
||||
for(it = actorKnownTopics.begin();it != actorKnownTopics.end();it++)
|
||||
{
|
||||
size_t pos = find_str_ci(text,*it,0);
|
||||
if(pos !=std::string::npos)
|
||||
{
|
||||
if(pos==0)
|
||||
{
|
||||
knownTopics[*it] = true;
|
||||
}
|
||||
else if(text.substr(pos -1,1) == " ")
|
||||
{
|
||||
knownTopics[*it] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
updateTopics();
|
||||
}
|
||||
|
||||
void DialogueManager::startDialogue (const MWWorld::Ptr& actor)
|
||||
{
|
||||
std::cout << "talking with " << MWWorld::Class::get (actor).getName (actor) << std::endl;
|
||||
mChoice = -1;
|
||||
mIsInChoice = false;
|
||||
|
||||
const ESM::Dialogue *dialogue = mEnvironment.mWorld->getStore().dialogs.find ("hello");
|
||||
mActor = actor;
|
||||
|
||||
for (std::vector<ESM::DialInfo>::const_iterator iter (dialogue->mInfo.begin());
|
||||
iter!=dialogue->mInfo.end(); ++iter)
|
||||
mDialogueMap.clear();
|
||||
actorKnownTopics.clear();
|
||||
ESMS::RecListT<ESM::Dialogue>::MapType dialogueList = mEnvironment.mWorld->getStore().dialogs.list;
|
||||
for(ESMS::RecListT<ESM::Dialogue>::MapType::iterator it = dialogueList.begin(); it!=dialogueList.end();it++)
|
||||
{
|
||||
if (isMatching (actor, *iter))
|
||||
mDialogueMap[it->first] = it->second;
|
||||
}
|
||||
|
||||
//initialise the GUI
|
||||
mEnvironment.mInputManager->setGuiMode(MWGui::GM_Dialogue);
|
||||
MWGui::DialogueWindow* win = mEnvironment.mWindowManager->getDialogueWindow();
|
||||
win->startDialogue(MWWorld::Class::get (actor).getName (actor));
|
||||
|
||||
//setup the list of topics known by the actor. Topics who are also on the knownTopics list will be added to the GUI
|
||||
updateTopics();
|
||||
|
||||
//greeting
|
||||
bool greetingFound = false;
|
||||
//ESMS::RecListT<ESM::Dialogue>::MapType dialogueList = mEnvironment.mWorld->getStore().dialogs.list;
|
||||
for(ESMS::RecListT<ESM::Dialogue>::MapType::iterator it = dialogueList.begin(); it!=dialogueList.end();it++)
|
||||
{
|
||||
ESM::Dialogue ndialogue = it->second;
|
||||
if(ndialogue.type == ESM::Dialogue::Greeting)
|
||||
{
|
||||
if (greetingFound) break;
|
||||
for (std::vector<ESM::DialInfo>::const_iterator iter (it->second.mInfo.begin());
|
||||
iter!=it->second.mInfo.end(); ++iter)
|
||||
{
|
||||
if (isMatching (actor, *iter) && functionFilter(mActor,*iter,true))
|
||||
{
|
||||
// start dialogue
|
||||
std::cout << "found matching info record" << std::endl;
|
||||
|
||||
std::cout << "response: " << iter->response << std::endl;
|
||||
|
||||
if (!iter->sound.empty())
|
||||
{
|
||||
// TODO play sound
|
||||
}
|
||||
|
||||
if (!iter->resultScript.empty())
|
||||
{
|
||||
std::cout << "script: " << iter->resultScript << std::endl;
|
||||
// TODO execute script
|
||||
}
|
||||
|
||||
mEnvironment.mInputManager->setGuiMode(MWGui::GM_Dialogue);
|
||||
std::string text = iter->response;
|
||||
parseText(text);
|
||||
win->addText(iter->response);
|
||||
executeScript(iter->resultScript);
|
||||
greetingFound = true;
|
||||
mLastTopic = it->first;
|
||||
mLastDialogue = *iter;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool DialogueManager::compile (const std::string& cmd,std::vector<Interpreter::Type_Code>& code)
|
||||
{
|
||||
try
|
||||
{
|
||||
mErrorHandler.reset();
|
||||
|
||||
std::istringstream input (cmd + "\n");
|
||||
|
||||
Compiler::Scanner scanner (mErrorHandler, input, mCompilerContext.getExtensions());
|
||||
|
||||
Compiler::Locals locals;
|
||||
|
||||
std::string actorScript = MWWorld::Class::get (mActor).getScript (mActor);
|
||||
|
||||
if (!actorScript.empty())
|
||||
{
|
||||
// grab local variables from actor's script, if available.
|
||||
locals = mEnvironment.mScriptManager->getLocals (actorScript);
|
||||
}
|
||||
|
||||
Compiler::ScriptParser parser(mErrorHandler,mCompilerContext, locals, false);
|
||||
|
||||
scanner.scan (parser);
|
||||
if(mErrorHandler.isGood())
|
||||
{
|
||||
parser.getCode(code);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
catch (const Compiler::SourceException& error)
|
||||
{
|
||||
// error has already been reported via error handler
|
||||
}
|
||||
catch (const std::exception& error)
|
||||
{
|
||||
printError (std::string ("An exception has been thrown: ") + error.what());
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void DialogueManager::executeScript(std::string script)
|
||||
{
|
||||
std::vector<Interpreter::Type_Code> code;
|
||||
if(compile(script,code))
|
||||
{
|
||||
try
|
||||
{
|
||||
MWScript::InterpreterContext interpreterContext(mEnvironment,&mActor.getRefData().getLocals(),mActor);
|
||||
Interpreter::Interpreter interpreter;
|
||||
MWScript::installOpcodes (interpreter);
|
||||
interpreter.run (&code[0], code.size(), interpreterContext);
|
||||
}
|
||||
catch (const std::exception& error)
|
||||
{
|
||||
printError (std::string ("An exception has been thrown: ") + error.what());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DialogueManager::updateTopics()
|
||||
{
|
||||
std::list<std::string> keywordList;
|
||||
int choice = mChoice;
|
||||
mChoice = -1;
|
||||
actorKnownTopics.clear();
|
||||
MWGui::DialogueWindow* win = mEnvironment.mWindowManager->getDialogueWindow();
|
||||
ESMS::RecListT<ESM::Dialogue>::MapType dialogueList = mEnvironment.mWorld->getStore().dialogs.list;
|
||||
for(ESMS::RecListT<ESM::Dialogue>::MapType::iterator it = dialogueList.begin(); it!=dialogueList.end();it++)
|
||||
{
|
||||
ESM::Dialogue ndialogue = it->second;
|
||||
if(ndialogue.type == ESM::Dialogue::Topic)
|
||||
{
|
||||
for (std::vector<ESM::DialInfo>::const_iterator iter (it->second.mInfo.begin());
|
||||
iter!=it->second.mInfo.end(); ++iter)
|
||||
{
|
||||
if (isMatching (mActor, *iter) && functionFilter(mActor,*iter,true))
|
||||
{
|
||||
actorKnownTopics.push_back(it->first);
|
||||
//does the player know the topic?
|
||||
if(knownTopics.find(toLower(it->first)) != knownTopics.end())
|
||||
{
|
||||
keywordList.push_back(it->first);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
win->setKeywords(keywordList);
|
||||
mChoice = choice;
|
||||
}
|
||||
|
||||
void DialogueManager::keywordSelected(std::string keyword)
|
||||
{
|
||||
if(!mIsInChoice)
|
||||
{
|
||||
if(mDialogueMap.find(keyword) != mDialogueMap.end())
|
||||
{
|
||||
ESM::Dialogue ndialogue = mDialogueMap[keyword];
|
||||
if(ndialogue.type == ESM::Dialogue::Topic)
|
||||
{
|
||||
for (std::vector<ESM::DialInfo>::const_iterator iter = ndialogue.mInfo.begin();
|
||||
iter!=ndialogue.mInfo.end(); ++iter)
|
||||
{
|
||||
if (isMatching (mActor, *iter) && functionFilter(mActor,*iter,true))
|
||||
{
|
||||
std::string text = iter->response;
|
||||
std::string script = iter->resultScript;
|
||||
|
||||
parseText(text);
|
||||
|
||||
MWGui::DialogueWindow* win = mEnvironment.mWindowManager->getDialogueWindow();
|
||||
win->addTitle(keyword);
|
||||
win->addText(iter->response);
|
||||
|
||||
executeScript(script);
|
||||
|
||||
mLastTopic = keyword;
|
||||
mLastDialogue = *iter;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
updateTopics();
|
||||
}
|
||||
|
||||
void DialogueManager::goodbyeSelected()
|
||||
{
|
||||
mEnvironment.mInputManager->setGuiMode(MWGui::GM_Game);
|
||||
}
|
||||
|
||||
void DialogueManager::questionAnswered(std::string answere)
|
||||
{
|
||||
if(mChoiceMap.find(answere) != mChoiceMap.end())
|
||||
{
|
||||
mChoice = mChoiceMap[answere];
|
||||
|
||||
std::vector<ESM::DialInfo>::const_iterator iter;
|
||||
if(mDialogueMap.find(mLastTopic) != mDialogueMap.end())
|
||||
{
|
||||
ESM::Dialogue ndialogue = mDialogueMap[mLastTopic];
|
||||
if(ndialogue.type == ESM::Dialogue::Topic)
|
||||
{
|
||||
for (std::vector<ESM::DialInfo>::const_iterator iter = ndialogue.mInfo.begin();
|
||||
iter!=ndialogue.mInfo.end(); ++iter)
|
||||
{
|
||||
if (isMatching (mActor, *iter) && functionFilter(mActor,*iter,true))
|
||||
{
|
||||
mChoiceMap.clear();
|
||||
mChoice = -1;
|
||||
mIsInChoice = false;
|
||||
MWGui::DialogueWindow* win = mEnvironment.mWindowManager->getDialogueWindow();
|
||||
std::string text = iter->response;
|
||||
parseText(text);
|
||||
win->addText(text);
|
||||
executeScript(iter->resultScript);
|
||||
mLastTopic = mLastTopic;
|
||||
mLastDialogue = *iter;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
updateTopics();
|
||||
}
|
||||
}
|
||||
|
||||
void DialogueManager::printError(std::string error)
|
||||
{
|
||||
MWGui::DialogueWindow* win = mEnvironment.mWindowManager->getDialogueWindow();
|
||||
win->addText(error);
|
||||
}
|
||||
|
||||
void DialogueManager::askQuestion(std::string question, int choice)
|
||||
{
|
||||
MWGui::DialogueWindow* win = mEnvironment.mWindowManager->getDialogueWindow();
|
||||
win->askQuestion(question);
|
||||
mChoiceMap[question] = choice;
|
||||
mIsInChoice = true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,13 @@
|
|||
|
||||
#include <components/esm/loadinfo.hpp>
|
||||
|
||||
#include <components/compiler/streamerrorhandler.hpp>
|
||||
#include "../mwscript/compilercontext.hpp"
|
||||
#include "../mwscript/interpretercontext.hpp"
|
||||
#include <components/compiler/output.hpp>
|
||||
|
||||
#include "../mwworld/ptr.hpp"
|
||||
#include <map>
|
||||
|
||||
namespace MWWorld
|
||||
{
|
||||
|
@ -20,12 +26,48 @@ namespace MWDialogue
|
|||
|
||||
bool isMatching (const MWWorld::Ptr& actor, const ESM::DialInfo& info) const;
|
||||
|
||||
bool functionFilter(const MWWorld::Ptr& actor, const ESM::DialInfo& info,bool choice);
|
||||
|
||||
void parseText(std::string text);
|
||||
|
||||
void updateTopics();
|
||||
|
||||
std::map<std::string,ESM::Dialogue> mDialogueMap;
|
||||
std::map<std::string,bool> knownTopics;// Those are the topics the player knows.
|
||||
std::list<std::string> actorKnownTopics;
|
||||
|
||||
MWScript::CompilerContext mCompilerContext;
|
||||
std::ostream mErrorStream;
|
||||
Compiler::StreamErrorHandler mErrorHandler;
|
||||
|
||||
|
||||
bool compile (const std::string& cmd,std::vector<Interpreter::Type_Code>& code);
|
||||
void executeScript(std::string script);
|
||||
MWWorld::Ptr mActor;
|
||||
|
||||
void printError(std::string error);
|
||||
|
||||
int mChoice;
|
||||
std::map<std::string,int> mChoiceMap;
|
||||
std::string mLastTopic;
|
||||
ESM::DialInfo mLastDialogue;
|
||||
bool mIsInChoice;
|
||||
|
||||
public:
|
||||
|
||||
DialogueManager (MWWorld::Environment& environment);
|
||||
DialogueManager (MWWorld::Environment& environment,const Compiler::Extensions& extensions);
|
||||
|
||||
void startDialogue (const MWWorld::Ptr& actor);
|
||||
|
||||
void addTopic(std::string topic);
|
||||
|
||||
void askQuestion(std::string question,int choice);
|
||||
|
||||
//calbacks for the GUI
|
||||
void keywordSelected(std::string keyword);
|
||||
void goodbyeSelected();
|
||||
void questionAnswered(std::string answere);
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
|
||||
#include "../mwworld/environment.hpp"
|
||||
|
||||
#include "../mwgui/window_manager.hpp"
|
||||
#include "../mwgui/messagebox.hpp"
|
||||
|
||||
namespace MWDialogue
|
||||
{
|
||||
Quest& Journal::getQuest (const std::string& id)
|
||||
|
@ -34,6 +37,10 @@ namespace MWDialogue
|
|||
Quest& quest = getQuest (id);
|
||||
|
||||
quest.addEntry (entry, *mEnvironment.mWorld); // we are doing slicing on purpose here
|
||||
|
||||
std::vector<std::string> empty;
|
||||
std::string notification = "Your Journal has been updated.";
|
||||
mEnvironment.mWindowManager->messageBox (notification, empty);
|
||||
}
|
||||
|
||||
void Journal::setJournalIndex (const std::string& id, int index)
|
||||
|
@ -60,7 +67,12 @@ namespace MWDialogue
|
|||
|
||||
int Journal::getJournalIndex (const std::string& id) const
|
||||
{
|
||||
TQuestContainer::const_iterator iter = mQuests.find (id);
|
||||
|
||||
if (iter==mQuests.end())
|
||||
return 0;
|
||||
|
||||
return iter->second.getIndex();
|
||||
}
|
||||
|
||||
Journal::TEntryIter Journal::begin() const
|
||||
|
|
|
@ -21,18 +21,18 @@ BirthDialog::BirthDialog(WindowManager& parWindowManager)
|
|||
|
||||
getWidget(birthList, "BirthsignList");
|
||||
birthList->setScrollVisible(true);
|
||||
birthList->eventListSelectAccept = MyGUI::newDelegate(this, &BirthDialog::onSelectBirth);
|
||||
birthList->eventListMouseItemActivate = MyGUI::newDelegate(this, &BirthDialog::onSelectBirth);
|
||||
birthList->eventListChangePosition = MyGUI::newDelegate(this, &BirthDialog::onSelectBirth);
|
||||
birthList->eventListSelectAccept += MyGUI::newDelegate(this, &BirthDialog::onSelectBirth);
|
||||
birthList->eventListMouseItemActivate += MyGUI::newDelegate(this, &BirthDialog::onSelectBirth);
|
||||
birthList->eventListChangePosition += MyGUI::newDelegate(this, &BirthDialog::onSelectBirth);
|
||||
|
||||
// TODO: These buttons should be managed by a Dialog class
|
||||
MyGUI::ButtonPtr backButton;
|
||||
getWidget(backButton, "BackButton");
|
||||
backButton->eventMouseButtonClick = MyGUI::newDelegate(this, &BirthDialog::onBackClicked);
|
||||
backButton->eventMouseButtonClick += MyGUI::newDelegate(this, &BirthDialog::onBackClicked);
|
||||
|
||||
MyGUI::ButtonPtr okButton;
|
||||
getWidget(okButton, "OKButton");
|
||||
okButton->eventMouseButtonClick = MyGUI::newDelegate(this, &BirthDialog::onOkClicked);
|
||||
okButton->eventMouseButtonClick += MyGUI::newDelegate(this, &BirthDialog::onOkClicked);
|
||||
|
||||
updateBirths();
|
||||
updateSpells();
|
||||
|
@ -100,7 +100,7 @@ void BirthDialog::onBackClicked(MyGUI::Widget* _sender)
|
|||
eventBack();
|
||||
}
|
||||
|
||||
void BirthDialog::onSelectBirth(MyGUI::List* _sender, size_t _index)
|
||||
void BirthDialog::onSelectBirth(MyGUI::ListBox* _sender, size_t _index)
|
||||
{
|
||||
if (_index == MyGUI::ITEM_NONE)
|
||||
return;
|
||||
|
@ -188,7 +188,7 @@ void BirthDialog::updateSpells()
|
|||
{
|
||||
if (!categories[category].spells.empty())
|
||||
{
|
||||
MyGUI::StaticTextPtr label = spellArea->createWidget<MyGUI::StaticText>("SandBrightText", coord, MyGUI::Align::Default, std::string("Label"));
|
||||
MyGUI::TextBox* label = spellArea->createWidget<MyGUI::TextBox>("SandBrightText", coord, MyGUI::Align::Default, std::string("Label"));
|
||||
label->setCaption(mWindowManager.getGameSettingString(categories[category].label, ""));
|
||||
spellItems.push_back(label);
|
||||
coord.top += lineHeight;
|
||||
|
|
|
@ -32,7 +32,7 @@ namespace MWGui
|
|||
void open();
|
||||
|
||||
// Events
|
||||
typedef delegates::CDelegate0 EventHandle_Void;
|
||||
typedef delegates::CMultiDelegate0 EventHandle_Void;
|
||||
|
||||
/** Event : Back button clicked.\n
|
||||
signature : void method()\n
|
||||
|
@ -40,7 +40,7 @@ namespace MWGui
|
|||
EventHandle_Void eventBack;
|
||||
|
||||
protected:
|
||||
void onSelectBirth(MyGUI::List* _sender, size_t _index);
|
||||
void onSelectBirth(MyGUI::ListBox* _sender, size_t _index);
|
||||
|
||||
void onOkClicked(MyGUI::Widget* _sender);
|
||||
void onBackClicked(MyGUI::Widget* _sender);
|
||||
|
@ -49,9 +49,9 @@ namespace MWGui
|
|||
void updateBirths();
|
||||
void updateSpells();
|
||||
|
||||
MyGUI::ListPtr birthList;
|
||||
MyGUI::ListBox* birthList;
|
||||
MyGUI::WidgetPtr spellArea;
|
||||
MyGUI::StaticImagePtr birthImage;
|
||||
MyGUI::ImageBox* birthImage;
|
||||
std::vector<MyGUI::WidgetPtr> spellItems;
|
||||
|
||||
std::string currentBirthId;
|
||||
|
|
|
@ -121,7 +121,7 @@ void CharacterCreation::spawnDialog(const char id)
|
|||
mNameDialog->setTextLabel(mWM->getGameSettingString("sName", "Name"));
|
||||
mNameDialog->setTextInput(mPlayerName);
|
||||
mNameDialog->setNextButtonShow(mCreationStage >= CSE_NameChosen);
|
||||
mNameDialog->eventDone = MyGUI::newDelegate(this, &CharacterCreation::onNameDialogDone);
|
||||
mNameDialog->eventDone += MyGUI::newDelegate(this, &CharacterCreation::onNameDialogDone);
|
||||
mNameDialog->open();
|
||||
break;
|
||||
|
||||
|
@ -131,8 +131,8 @@ void CharacterCreation::spawnDialog(const char id)
|
|||
mRaceDialog = new RaceDialog(*mWM);
|
||||
mRaceDialog->setNextButtonShow(mCreationStage >= CSE_RaceChosen);
|
||||
mRaceDialog->setRaceId(mPlayerRaceId);
|
||||
mRaceDialog->eventDone = MyGUI::newDelegate(this, &CharacterCreation::onRaceDialogDone);
|
||||
mRaceDialog->eventBack = MyGUI::newDelegate(this, &CharacterCreation::onRaceDialogBack);
|
||||
mRaceDialog->eventDone += MyGUI::newDelegate(this, &CharacterCreation::onRaceDialogDone);
|
||||
mRaceDialog->eventBack += MyGUI::newDelegate(this, &CharacterCreation::onRaceDialogBack);
|
||||
mRaceDialog->open();
|
||||
break;
|
||||
|
||||
|
@ -140,7 +140,7 @@ void CharacterCreation::spawnDialog(const char id)
|
|||
if (mClassChoiceDialog)
|
||||
mWM->removeDialog(mClassChoiceDialog);
|
||||
mClassChoiceDialog = new ClassChoiceDialog(*mWM);
|
||||
mClassChoiceDialog->eventButtonSelected = MyGUI::newDelegate(this, &CharacterCreation::onClassChoice);
|
||||
mClassChoiceDialog->eventButtonSelected += MyGUI::newDelegate(this, &CharacterCreation::onClassChoice);
|
||||
mClassChoiceDialog->open();
|
||||
break;
|
||||
|
||||
|
@ -150,8 +150,8 @@ void CharacterCreation::spawnDialog(const char id)
|
|||
mPickClassDialog = new PickClassDialog(*mWM);
|
||||
mPickClassDialog->setNextButtonShow(mCreationStage >= CSE_ClassChosen);
|
||||
mPickClassDialog->setClassId(mPlayerClass.name);
|
||||
mPickClassDialog->eventDone = MyGUI::newDelegate(this, &CharacterCreation::onPickClassDialogDone);
|
||||
mPickClassDialog->eventBack = MyGUI::newDelegate(this, &CharacterCreation::onPickClassDialogBack);
|
||||
mPickClassDialog->eventDone += MyGUI::newDelegate(this, &CharacterCreation::onPickClassDialogDone);
|
||||
mPickClassDialog->eventBack += MyGUI::newDelegate(this, &CharacterCreation::onPickClassDialogBack);
|
||||
mPickClassDialog->open();
|
||||
break;
|
||||
|
||||
|
@ -161,8 +161,8 @@ void CharacterCreation::spawnDialog(const char id)
|
|||
mBirthSignDialog = new BirthDialog(*mWM);
|
||||
mBirthSignDialog->setNextButtonShow(mCreationStage >= CSE_BirthSignChosen);
|
||||
mBirthSignDialog->setBirthId(mPlayerBirthSignId);
|
||||
mBirthSignDialog->eventDone = MyGUI::newDelegate(this, &CharacterCreation::onBirthSignDialogDone);
|
||||
mBirthSignDialog->eventBack = MyGUI::newDelegate(this, &CharacterCreation::onBirthSignDialogBack);
|
||||
mBirthSignDialog->eventDone += MyGUI::newDelegate(this, &CharacterCreation::onBirthSignDialogDone);
|
||||
mBirthSignDialog->eventBack += MyGUI::newDelegate(this, &CharacterCreation::onBirthSignDialogBack);
|
||||
mBirthSignDialog->open();
|
||||
break;
|
||||
|
||||
|
@ -170,8 +170,8 @@ void CharacterCreation::spawnDialog(const char id)
|
|||
if (mCreateClassDialog)
|
||||
mWM->removeDialog(mCreateClassDialog);
|
||||
mCreateClassDialog = new CreateClassDialog(*mWM);
|
||||
mCreateClassDialog->eventDone = MyGUI::newDelegate(this, &CharacterCreation::onCreateClassDialogDone);
|
||||
mCreateClassDialog->eventBack = MyGUI::newDelegate(this, &CharacterCreation::onCreateClassDialogBack);
|
||||
mCreateClassDialog->eventDone += MyGUI::newDelegate(this, &CharacterCreation::onCreateClassDialogDone);
|
||||
mCreateClassDialog->eventBack += MyGUI::newDelegate(this, &CharacterCreation::onCreateClassDialogBack);
|
||||
mCreateClassDialog->open();
|
||||
break;
|
||||
case GM_ClassGenerate:
|
||||
|
@ -212,9 +212,9 @@ void CharacterCreation::spawnDialog(const char id)
|
|||
mReviewDialog->configureSkills(mPlayerMajorSkills, mPlayerMinorSkills);
|
||||
}
|
||||
|
||||
mReviewDialog->eventDone = MyGUI::newDelegate(this, &CharacterCreation::onReviewDialogDone);
|
||||
mReviewDialog->eventBack = MyGUI::newDelegate(this, &CharacterCreation::onReviewDialogBack);
|
||||
mReviewDialog->eventActivateDialog = MyGUI::newDelegate(this, &CharacterCreation::onReviewActivateDialog);
|
||||
mReviewDialog->eventDone += MyGUI::newDelegate(this, &CharacterCreation::onReviewDialogDone);
|
||||
mReviewDialog->eventBack += MyGUI::newDelegate(this, &CharacterCreation::onReviewDialogBack);
|
||||
mReviewDialog->eventActivateDialog += MyGUI::newDelegate(this, &CharacterCreation::onReviewActivateDialog);
|
||||
mReviewDialog->open();
|
||||
break;
|
||||
}
|
||||
|
@ -559,8 +559,8 @@ void CharacterCreation::showClassQuestionDialog()
|
|||
mWM->removeDialog(mGenerateClassResultDialog);
|
||||
mGenerateClassResultDialog = new GenerateClassResultDialog(*mWM);
|
||||
mGenerateClassResultDialog->setClassId(mGenerateClass);
|
||||
mGenerateClassResultDialog->eventBack = MyGUI::newDelegate(this, &CharacterCreation::onGenerateClassBack);
|
||||
mGenerateClassResultDialog->eventDone = MyGUI::newDelegate(this, &CharacterCreation::onGenerateClassDone);
|
||||
mGenerateClassResultDialog->eventBack += MyGUI::newDelegate(this, &CharacterCreation::onGenerateClassBack);
|
||||
mGenerateClassResultDialog->eventDone += MyGUI::newDelegate(this, &CharacterCreation::onGenerateClassDone);
|
||||
mGenerateClassResultDialog->open();
|
||||
return;
|
||||
}
|
||||
|
@ -581,7 +581,7 @@ void CharacterCreation::showClassQuestionDialog()
|
|||
buttons.push_back(sGenerateClassSteps[mGenerateClassStep].mButtons[1]);
|
||||
buttons.push_back(sGenerateClassSteps[mGenerateClassStep].mButtons[2]);
|
||||
mGenerateClassQuestionDialog->setButtons(buttons);
|
||||
mGenerateClassQuestionDialog->eventButtonSelected = MyGUI::newDelegate(this, &CharacterCreation::onClassQuestionChosen);
|
||||
mGenerateClassQuestionDialog->eventButtonSelected += MyGUI::newDelegate(this, &CharacterCreation::onClassQuestionChosen);
|
||||
mGenerateClassQuestionDialog->open();
|
||||
}
|
||||
|
||||
|
|
|
@ -29,11 +29,11 @@ GenerateClassResultDialog::GenerateClassResultDialog(WindowManager& parWindowMan
|
|||
// TODO: These buttons should be managed by a Dialog class
|
||||
MyGUI::ButtonPtr backButton;
|
||||
getWidget(backButton, "BackButton");
|
||||
backButton->eventMouseButtonClick = MyGUI::newDelegate(this, &GenerateClassResultDialog::onBackClicked);
|
||||
backButton->eventMouseButtonClick += MyGUI::newDelegate(this, &GenerateClassResultDialog::onBackClicked);
|
||||
|
||||
MyGUI::ButtonPtr okButton;
|
||||
getWidget(okButton, "OKButton");
|
||||
okButton->eventMouseButtonClick = MyGUI::newDelegate(this, &GenerateClassResultDialog::onOkClicked);
|
||||
okButton->eventMouseButtonClick += MyGUI::newDelegate(this, &GenerateClassResultDialog::onOkClicked);
|
||||
}
|
||||
|
||||
void GenerateClassResultDialog::open()
|
||||
|
@ -96,20 +96,20 @@ PickClassDialog::PickClassDialog(WindowManager& parWindowManager)
|
|||
|
||||
getWidget(classList, "ClassList");
|
||||
classList->setScrollVisible(true);
|
||||
classList->eventListSelectAccept = MyGUI::newDelegate(this, &PickClassDialog::onSelectClass);
|
||||
classList->eventListMouseItemActivate = MyGUI::newDelegate(this, &PickClassDialog::onSelectClass);
|
||||
classList->eventListChangePosition = MyGUI::newDelegate(this, &PickClassDialog::onSelectClass);
|
||||
classList->eventListSelectAccept += MyGUI::newDelegate(this, &PickClassDialog::onSelectClass);
|
||||
classList->eventListMouseItemActivate += MyGUI::newDelegate(this, &PickClassDialog::onSelectClass);
|
||||
classList->eventListChangePosition += MyGUI::newDelegate(this, &PickClassDialog::onSelectClass);
|
||||
|
||||
getWidget(classImage, "ClassImage");
|
||||
|
||||
// TODO: These buttons should be managed by a Dialog class
|
||||
MyGUI::ButtonPtr backButton;
|
||||
getWidget(backButton, "BackButton");
|
||||
backButton->eventMouseButtonClick = MyGUI::newDelegate(this, &PickClassDialog::onBackClicked);
|
||||
backButton->eventMouseButtonClick += MyGUI::newDelegate(this, &PickClassDialog::onBackClicked);
|
||||
|
||||
MyGUI::ButtonPtr okButton;
|
||||
getWidget(okButton, "OKButton");
|
||||
okButton->eventMouseButtonClick = MyGUI::newDelegate(this, &PickClassDialog::onOkClicked);
|
||||
okButton->eventMouseButtonClick += MyGUI::newDelegate(this, &PickClassDialog::onOkClicked);
|
||||
|
||||
updateClasses();
|
||||
updateStats();
|
||||
|
@ -177,7 +177,7 @@ void PickClassDialog::onBackClicked(MyGUI::Widget* _sender)
|
|||
eventBack();
|
||||
}
|
||||
|
||||
void PickClassDialog::onSelectClass(MyGUI::List* _sender, size_t _index)
|
||||
void PickClassDialog::onSelectClass(MyGUI::ListBox* _sender, size_t _index)
|
||||
{
|
||||
if (_index == MyGUI::ITEM_NONE)
|
||||
return;
|
||||
|
@ -248,7 +248,7 @@ void PickClassDialog::updateStats()
|
|||
|
||||
/* InfoBoxDialog */
|
||||
|
||||
void InfoBoxDialog::fitToText(MyGUI::StaticTextPtr widget)
|
||||
void InfoBoxDialog::fitToText(MyGUI::TextBox* widget)
|
||||
{
|
||||
MyGUI::IntCoord inner = widget->getTextRegion();
|
||||
MyGUI::IntCoord outer = widget->getCoord();
|
||||
|
@ -267,7 +267,7 @@ void InfoBoxDialog::layoutVertically(MyGUI::WidgetPtr widget, int margin)
|
|||
for (unsigned i = 0; i < count; ++i)
|
||||
{
|
||||
MyGUI::WidgetPtr child = widget->getChildAt(i);
|
||||
if (!child->isVisible())
|
||||
if (!child->getVisible())
|
||||
continue;
|
||||
|
||||
child->setPosition(child->getLeft(), pos);
|
||||
|
@ -322,7 +322,7 @@ void InfoBoxDialog::setButtons(ButtonList &buttons)
|
|||
button->getSubWidgetText()->setWordWrap(true);
|
||||
button->setCaption(text);
|
||||
fitToText(button);
|
||||
button->eventMouseButtonClick = MyGUI::newDelegate(this, &InfoBoxDialog::onButtonClicked);
|
||||
button->eventMouseButtonClick += MyGUI::newDelegate(this, &InfoBoxDialog::onButtonClicked);
|
||||
coord.top += button->getHeight();
|
||||
this->buttons.push_back(button);
|
||||
}
|
||||
|
@ -389,15 +389,15 @@ CreateClassDialog::CreateClassDialog(WindowManager& parWindowManager)
|
|||
setText("SpecializationT", mWindowManager.getGameSettingString("sChooseClassMenu1", "Specialization"));
|
||||
getWidget(specializationName, "SpecializationName");
|
||||
specializationName->setCaption(mWindowManager.getGameSettingString(ESM::Class::gmstSpecializationIds[ESM::Class::Combat], ""));
|
||||
specializationName->eventMouseButtonClick = MyGUI::newDelegate(this, &CreateClassDialog::onSpecializationClicked);
|
||||
specializationName->eventMouseButtonClick += MyGUI::newDelegate(this, &CreateClassDialog::onSpecializationClicked);
|
||||
|
||||
setText("FavoriteAttributesT", mWindowManager.getGameSettingString("sChooseClassMenu2", "Favorite Attributes:"));
|
||||
getWidget(favoriteAttribute0, "FavoriteAttribute0");
|
||||
getWidget(favoriteAttribute1, "FavoriteAttribute1");
|
||||
favoriteAttribute0->setWindowManager(&mWindowManager);
|
||||
favoriteAttribute1->setWindowManager(&mWindowManager);
|
||||
favoriteAttribute0->eventClicked = MyGUI::newDelegate(this, &CreateClassDialog::onAttributeClicked);
|
||||
favoriteAttribute1->eventClicked = MyGUI::newDelegate(this, &CreateClassDialog::onAttributeClicked);
|
||||
favoriteAttribute0->eventClicked += MyGUI::newDelegate(this, &CreateClassDialog::onAttributeClicked);
|
||||
favoriteAttribute1->eventClicked += MyGUI::newDelegate(this, &CreateClassDialog::onAttributeClicked);
|
||||
|
||||
setText("MajorSkillT", mWindowManager.getGameSettingString("sSkillClassMajor", ""));
|
||||
setText("MinorSkillT", mWindowManager.getGameSettingString("sSkillClassMinor", ""));
|
||||
|
@ -414,7 +414,7 @@ CreateClassDialog::CreateClassDialog(WindowManager& parWindowManager)
|
|||
for (std::vector<Widgets::MWSkillPtr>::const_iterator it = skills.begin(); it != end; ++it)
|
||||
{
|
||||
(*it)->setWindowManager(&mWindowManager);
|
||||
(*it)->eventClicked = MyGUI::newDelegate(this, &CreateClassDialog::onSkillClicked);
|
||||
(*it)->eventClicked += MyGUI::newDelegate(this, &CreateClassDialog::onSkillClicked);
|
||||
}
|
||||
|
||||
setText("LabelT", mWindowManager.getGameSettingString("sName", ""));
|
||||
|
@ -426,15 +426,15 @@ CreateClassDialog::CreateClassDialog(WindowManager& parWindowManager)
|
|||
// TODO: These buttons should be managed by a Dialog class
|
||||
MyGUI::ButtonPtr descriptionButton;
|
||||
getWidget(descriptionButton, "DescriptionButton");
|
||||
descriptionButton->eventMouseButtonClick = MyGUI::newDelegate(this, &CreateClassDialog::onDescriptionClicked);
|
||||
descriptionButton->eventMouseButtonClick += MyGUI::newDelegate(this, &CreateClassDialog::onDescriptionClicked);
|
||||
|
||||
MyGUI::ButtonPtr backButton;
|
||||
getWidget(backButton, "BackButton");
|
||||
backButton->eventMouseButtonClick = MyGUI::newDelegate(this, &CreateClassDialog::onBackClicked);
|
||||
backButton->eventMouseButtonClick += MyGUI::newDelegate(this, &CreateClassDialog::onBackClicked);
|
||||
|
||||
MyGUI::ButtonPtr okButton;
|
||||
getWidget(okButton, "OKButton");
|
||||
okButton->eventMouseButtonClick = MyGUI::newDelegate(this, &CreateClassDialog::onOkClicked);
|
||||
okButton->eventMouseButtonClick += MyGUI::newDelegate(this, &CreateClassDialog::onOkClicked);
|
||||
|
||||
// Set default skills, attributes
|
||||
|
||||
|
@ -560,8 +560,8 @@ void CreateClassDialog::onSpecializationClicked(MyGUI::WidgetPtr _sender)
|
|||
if (specDialog)
|
||||
delete specDialog;
|
||||
specDialog = new SelectSpecializationDialog(mWindowManager);
|
||||
specDialog->eventCancel = MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel);
|
||||
specDialog->eventItemSelected = MyGUI::newDelegate(this, &CreateClassDialog::onSpecializationSelected);
|
||||
specDialog->eventCancel += MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel);
|
||||
specDialog->eventItemSelected += MyGUI::newDelegate(this, &CreateClassDialog::onSpecializationSelected);
|
||||
specDialog->setVisible(true);
|
||||
}
|
||||
|
||||
|
@ -578,8 +578,8 @@ void CreateClassDialog::onAttributeClicked(Widgets::MWAttributePtr _sender)
|
|||
delete attribDialog;
|
||||
attribDialog = new SelectAttributeDialog(mWindowManager);
|
||||
attribDialog->setAffectedWidget(_sender);
|
||||
attribDialog->eventCancel = MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel);
|
||||
attribDialog->eventItemSelected = MyGUI::newDelegate(this, &CreateClassDialog::onAttributeSelected);
|
||||
attribDialog->eventCancel += MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel);
|
||||
attribDialog->eventItemSelected += MyGUI::newDelegate(this, &CreateClassDialog::onAttributeSelected);
|
||||
attribDialog->setVisible(true);
|
||||
}
|
||||
|
||||
|
@ -607,8 +607,8 @@ void CreateClassDialog::onSkillClicked(Widgets::MWSkillPtr _sender)
|
|||
delete skillDialog;
|
||||
skillDialog = new SelectSkillDialog(mWindowManager);
|
||||
skillDialog->setAffectedWidget(_sender);
|
||||
skillDialog->eventCancel = MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel);
|
||||
skillDialog->eventItemSelected = MyGUI::newDelegate(this, &CreateClassDialog::onSkillSelected);
|
||||
skillDialog->eventCancel += MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel);
|
||||
skillDialog->eventItemSelected += MyGUI::newDelegate(this, &CreateClassDialog::onSkillSelected);
|
||||
skillDialog->setVisible(true);
|
||||
}
|
||||
|
||||
|
@ -638,7 +638,7 @@ void CreateClassDialog::onDescriptionClicked(MyGUI::Widget* _sender)
|
|||
{
|
||||
descDialog = new DescriptionDialog(mWindowManager);
|
||||
descDialog->setTextInput(description);
|
||||
descDialog->eventDone = MyGUI::newDelegate(this, &CreateClassDialog::onDescriptionEntered);
|
||||
descDialog->eventDone += MyGUI::newDelegate(this, &CreateClassDialog::onDescriptionEntered);
|
||||
descDialog->setVisible(true);
|
||||
}
|
||||
|
||||
|
@ -672,18 +672,18 @@ SelectSpecializationDialog::SelectSpecializationDialog(WindowManager& parWindowM
|
|||
getWidget(specialization1, "Specialization1");
|
||||
getWidget(specialization2, "Specialization2");
|
||||
specialization0->setCaption(mWindowManager.getGameSettingString(ESM::Class::gmstSpecializationIds[ESM::Class::Combat], ""));
|
||||
specialization0->eventMouseButtonClick = MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked);
|
||||
specialization0->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked);
|
||||
specialization1->setCaption(mWindowManager.getGameSettingString(ESM::Class::gmstSpecializationIds[ESM::Class::Magic], ""));
|
||||
specialization1->eventMouseButtonClick = MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked);
|
||||
specialization1->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked);
|
||||
specialization2->setCaption(mWindowManager.getGameSettingString(ESM::Class::gmstSpecializationIds[ESM::Class::Stealth], ""));
|
||||
specialization2->eventMouseButtonClick = MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked);
|
||||
specialization2->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked);
|
||||
specializationId = ESM::Class::Combat;
|
||||
|
||||
// TODO: These buttons should be managed by a Dialog class
|
||||
MyGUI::ButtonPtr cancelButton;
|
||||
getWidget(cancelButton, "CancelButton");
|
||||
cancelButton->setCaption(mWindowManager.getGameSettingString("sCancel", ""));
|
||||
cancelButton->eventMouseButtonClick = MyGUI::newDelegate(this, &SelectSpecializationDialog::onCancelClicked);
|
||||
cancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSpecializationDialog::onCancelClicked);
|
||||
}
|
||||
|
||||
// widget controls
|
||||
|
@ -725,14 +725,14 @@ SelectAttributeDialog::SelectAttributeDialog(WindowManager& parWindowManager)
|
|||
getWidget(attribute, std::string("Attribute").append(1, theIndex));
|
||||
attribute->setWindowManager(&parWindowManager);
|
||||
attribute->setAttributeId(ESM::Attribute::attributeIds[i]);
|
||||
attribute->eventClicked = MyGUI::newDelegate(this, &SelectAttributeDialog::onAttributeClicked);
|
||||
attribute->eventClicked += MyGUI::newDelegate(this, &SelectAttributeDialog::onAttributeClicked);
|
||||
}
|
||||
|
||||
// TODO: These buttons should be managed by a Dialog class
|
||||
MyGUI::ButtonPtr cancelButton;
|
||||
getWidget(cancelButton, "CancelButton");
|
||||
cancelButton->setCaption(mWindowManager.getGameSettingString("sCancel", ""));
|
||||
cancelButton->eventMouseButtonClick = MyGUI::newDelegate(this, &SelectAttributeDialog::onCancelClicked);
|
||||
cancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectAttributeDialog::onCancelClicked);
|
||||
}
|
||||
|
||||
// widget controls
|
||||
|
@ -813,7 +813,7 @@ SelectSkillDialog::SelectSkillDialog(WindowManager& parWindowManager)
|
|||
{
|
||||
skills[spec][i].widget->setWindowManager(&mWindowManager);
|
||||
skills[spec][i].widget->setSkillId(skills[spec][i].skillId);
|
||||
skills[spec][i].widget->eventClicked = MyGUI::newDelegate(this, &SelectSkillDialog::onSkillClicked);
|
||||
skills[spec][i].widget->eventClicked += MyGUI::newDelegate(this, &SelectSkillDialog::onSkillClicked);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -821,7 +821,7 @@ SelectSkillDialog::SelectSkillDialog(WindowManager& parWindowManager)
|
|||
MyGUI::ButtonPtr cancelButton;
|
||||
getWidget(cancelButton, "CancelButton");
|
||||
cancelButton->setCaption(mWindowManager.getGameSettingString("sCancel", ""));
|
||||
cancelButton->eventMouseButtonClick = MyGUI::newDelegate(this, &SelectSkillDialog::onCancelClicked);
|
||||
cancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSkillDialog::onCancelClicked);
|
||||
}
|
||||
|
||||
// widget controls
|
||||
|
@ -850,7 +850,7 @@ DescriptionDialog::DescriptionDialog(WindowManager& parWindowManager)
|
|||
// TODO: These buttons should be managed by a Dialog class
|
||||
MyGUI::ButtonPtr okButton;
|
||||
getWidget(okButton, "OKButton");
|
||||
okButton->eventMouseButtonClick = MyGUI::newDelegate(this, &DescriptionDialog::onOkClicked);
|
||||
okButton->eventMouseButtonClick += MyGUI::newDelegate(this, &DescriptionDialog::onOkClicked);
|
||||
okButton->setCaption(mWindowManager.getGameSettingString("sInputMenu1", ""));
|
||||
|
||||
// Make sure the edit box has focus
|
||||
|
|
|
@ -31,7 +31,7 @@ namespace MWGui
|
|||
int getChosenButton() const;
|
||||
|
||||
// Events
|
||||
typedef delegates::CDelegate1<int> EventHandle_Int;
|
||||
typedef delegates::CMultiDelegate1<int> EventHandle_Int;
|
||||
|
||||
/** Event : Button was clicked.\n
|
||||
signature : void method(MyGUI::WidgetPtr widget, int index)\n
|
||||
|
@ -43,11 +43,11 @@ namespace MWGui
|
|||
|
||||
private:
|
||||
|
||||
void fitToText(MyGUI::StaticTextPtr widget);
|
||||
void fitToText(MyGUI::TextBox* widget);
|
||||
void layoutVertically(MyGUI::WidgetPtr widget, int margin);
|
||||
int currentButton;
|
||||
MyGUI::WidgetPtr textBox;
|
||||
MyGUI::StaticTextPtr text;
|
||||
MyGUI::TextBox* text;
|
||||
MyGUI::WidgetPtr buttonBar;
|
||||
std::vector<MyGUI::ButtonPtr> buttons;
|
||||
};
|
||||
|
@ -78,7 +78,7 @@ namespace MWGui
|
|||
void open();
|
||||
|
||||
// Events
|
||||
typedef delegates::CDelegate0 EventHandle_Void;
|
||||
typedef delegates::CMultiDelegate0 EventHandle_Void;
|
||||
|
||||
/** Event : Back button clicked.\n
|
||||
signature : void method()\n
|
||||
|
@ -90,8 +90,8 @@ namespace MWGui
|
|||
void onBackClicked(MyGUI::Widget* _sender);
|
||||
|
||||
private:
|
||||
MyGUI::StaticImagePtr classImage;
|
||||
MyGUI::StaticTextPtr className;
|
||||
MyGUI::ImageBox* classImage;
|
||||
MyGUI::TextBox* className;
|
||||
|
||||
std::string currentClassId;
|
||||
};
|
||||
|
@ -108,7 +108,7 @@ namespace MWGui
|
|||
void open();
|
||||
|
||||
// Events
|
||||
typedef delegates::CDelegate0 EventHandle_Void;
|
||||
typedef delegates::CMultiDelegate0 EventHandle_Void;
|
||||
|
||||
/** Event : Back button clicked.\n
|
||||
signature : void method()\n
|
||||
|
@ -116,7 +116,7 @@ namespace MWGui
|
|||
EventHandle_Void eventBack;
|
||||
|
||||
protected:
|
||||
void onSelectClass(MyGUI::List* _sender, size_t _index);
|
||||
void onSelectClass(MyGUI::ListBox* _sender, size_t _index);
|
||||
|
||||
void onOkClicked(MyGUI::Widget* _sender);
|
||||
void onBackClicked(MyGUI::Widget* _sender);
|
||||
|
@ -125,9 +125,9 @@ namespace MWGui
|
|||
void updateClasses();
|
||||
void updateStats();
|
||||
|
||||
MyGUI::StaticImagePtr classImage;
|
||||
MyGUI::ListPtr classList;
|
||||
MyGUI::StaticTextPtr specializationName;
|
||||
MyGUI::ImageBox* classImage;
|
||||
MyGUI::ListBox* classList;
|
||||
MyGUI::TextBox* specializationName;
|
||||
Widgets::MWAttributePtr favoriteAttribute[2];
|
||||
Widgets::MWSkillPtr majorSkill[5];
|
||||
Widgets::MWSkillPtr minorSkill[5];
|
||||
|
@ -143,7 +143,7 @@ namespace MWGui
|
|||
ESM::Class::Specialization getSpecializationId() const { return specializationId; }
|
||||
|
||||
// Events
|
||||
typedef delegates::CDelegate0 EventHandle_Void;
|
||||
typedef delegates::CMultiDelegate0 EventHandle_Void;
|
||||
|
||||
/** Event : Cancel button clicked.\n
|
||||
signature : void method()\n
|
||||
|
@ -160,7 +160,7 @@ namespace MWGui
|
|||
void onCancelClicked(MyGUI::Widget* _sender);
|
||||
|
||||
private:
|
||||
MyGUI::WidgetPtr specialization0, specialization1, specialization2;
|
||||
MyGUI::TextBox *specialization0, *specialization1, *specialization2;
|
||||
|
||||
ESM::Class::Specialization specializationId;
|
||||
};
|
||||
|
@ -175,7 +175,7 @@ namespace MWGui
|
|||
void setAffectedWidget(Widgets::MWAttributePtr widget) { affectedWidget = widget; }
|
||||
|
||||
// Events
|
||||
typedef delegates::CDelegate0 EventHandle_Void;
|
||||
typedef delegates::CMultiDelegate0 EventHandle_Void;
|
||||
|
||||
/** Event : Cancel button clicked.\n
|
||||
signature : void method()\n
|
||||
|
@ -207,7 +207,7 @@ namespace MWGui
|
|||
void setAffectedWidget(Widgets::MWSkillPtr widget) { affectedWidget = widget; }
|
||||
|
||||
// Events
|
||||
typedef delegates::CDelegate0 EventHandle_Void;
|
||||
typedef delegates::CMultiDelegate0 EventHandle_Void;
|
||||
|
||||
/** Event : Cancel button clicked.\n
|
||||
signature : void method()\n
|
||||
|
@ -264,7 +264,7 @@ namespace MWGui
|
|||
void open();
|
||||
|
||||
// Events
|
||||
typedef delegates::CDelegate0 EventHandle_Void;
|
||||
typedef delegates::CMultiDelegate0 EventHandle_Void;
|
||||
|
||||
/** Event : Back button clicked.\n
|
||||
signature : void method()\n
|
||||
|
@ -287,7 +287,7 @@ namespace MWGui
|
|||
|
||||
private:
|
||||
MyGUI::EditPtr editName;
|
||||
MyGUI::WidgetPtr specializationName;
|
||||
MyGUI::TextBox* specializationName;
|
||||
Widgets::MWAttributePtr favoriteAttribute0, favoriteAttribute1;
|
||||
Widgets::MWSkillPtr majorSkill[5];
|
||||
Widgets::MWSkillPtr minorSkill[5];
|
||||
|
|
|
@ -113,9 +113,9 @@ namespace MWGui
|
|||
getWidget(history, "list_History");
|
||||
|
||||
// Set up the command line box
|
||||
command->eventEditSelectAccept =
|
||||
command->eventEditSelectAccept +=
|
||||
newDelegate(this, &Console::acceptCommand);
|
||||
command->eventKeyButtonPressed =
|
||||
command->eventKeyButtonPressed +=
|
||||
newDelegate(this, &Console::keyPress);
|
||||
|
||||
// Set up the log window
|
||||
|
@ -139,6 +139,9 @@ namespace MWGui
|
|||
void Console::disable()
|
||||
{
|
||||
setVisible(false);
|
||||
// Remove keyboard focus from the console input whenever the
|
||||
// console is turned off
|
||||
MyGUI::InputManager::getInstance().setKeyFocusWidget(NULL);
|
||||
}
|
||||
|
||||
void Console::setFont(const std::string &fntName)
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
#include "window_manager.hpp"
|
||||
#include "widgets.hpp"
|
||||
#include "components/esm_store/store.hpp"
|
||||
#include "../mwworld/environment.hpp"
|
||||
#include "../mwdialogue/dialoguemanager.hpp"
|
||||
|
||||
#include <assert.h>
|
||||
#include <iostream>
|
||||
|
@ -14,8 +16,29 @@
|
|||
using namespace MWGui;
|
||||
using namespace Widgets;
|
||||
|
||||
DialogueWindow::DialogueWindow(WindowManager& parWindowManager)
|
||||
: WindowBase("openmw_dialogue_window_layout.xml", parWindowManager)
|
||||
/**
|
||||
*Copied from the internet.
|
||||
*/
|
||||
|
||||
std::string lower_string(const std::string& str)
|
||||
{
|
||||
std::string lowerCase;
|
||||
|
||||
std::transform (str.begin(), str.end(), std::back_inserter (lowerCase),
|
||||
(int(*)(int)) std::tolower);
|
||||
|
||||
return lowerCase;
|
||||
}
|
||||
|
||||
std::string::size_type find_str_ci(const std::string& str, const std::string& substr,size_t pos)
|
||||
{
|
||||
return lower_string(str).find(lower_string(substr),pos);
|
||||
}
|
||||
|
||||
|
||||
DialogueWindow::DialogueWindow(WindowManager& parWindowManager,MWWorld::Environment& environment)
|
||||
: WindowBase("openmw_dialogue_window_layout.xml", parWindowManager),
|
||||
mEnvironment(environment)
|
||||
{
|
||||
// Centre dialog
|
||||
center();
|
||||
|
@ -26,95 +49,159 @@ DialogueWindow::DialogueWindow(WindowManager& parWindowManager)
|
|||
//History view
|
||||
getWidget(history, "History");
|
||||
history->setOverflowToTheLeft(true);
|
||||
history->getClient()->eventMouseButtonClick = MyGUI::newDelegate(this, &DialogueWindow::onHistoryClicked);
|
||||
history->setMaxTextLength(1000000);
|
||||
Widget* eventbox;
|
||||
|
||||
//An EditBox cannot receive mouse click events, so we use an
|
||||
//invisible widget on top of the editbox to receive them
|
||||
/// \todo scrolling the dialogue history with the mouse wheel doesn't work using this solution
|
||||
getWidget(eventbox, "EventBox");
|
||||
eventbox->eventMouseButtonClick += MyGUI::newDelegate(this, &DialogueWindow::onHistoryClicked);
|
||||
|
||||
//Topics list
|
||||
getWidget(topicsList, "TopicsList");
|
||||
topicsList->setScrollVisible(true);
|
||||
topicsList->eventListSelectAccept = MyGUI::newDelegate(this, &DialogueWindow::onSelectTopic);
|
||||
topicsList->eventListMouseItemActivate = MyGUI::newDelegate(this, &DialogueWindow::onSelectTopic);
|
||||
topicsList->eventListChangePosition = MyGUI::newDelegate(this, &DialogueWindow::onSelectTopic);
|
||||
//topicsList->eventListSelectAccept += MyGUI::newDelegate(this, &DialogueWindow::onSelectTopic);
|
||||
topicsList->eventListMouseItemActivate += MyGUI::newDelegate(this, &DialogueWindow::onSelectTopic);
|
||||
//topicsList->eventListChangePosition += MyGUI::newDelegate(this, &DialogueWindow::onSelectTopic);
|
||||
|
||||
MyGUI::ButtonPtr byeButton;
|
||||
getWidget(byeButton, "ByeButton");
|
||||
byeButton->eventMouseButtonClick = MyGUI::newDelegate(this, &DialogueWindow::onByeClicked);
|
||||
byeButton->eventMouseButtonClick += MyGUI::newDelegate(this, &DialogueWindow::onByeClicked);
|
||||
|
||||
updateOptions();
|
||||
getWidget(pDispositionBar, "Disposition");
|
||||
getWidget(pDispositionText,"DispositionText");
|
||||
}
|
||||
|
||||
void DialogueWindow::onHistoryClicked(MyGUI::Widget* _sender)
|
||||
{
|
||||
ISubWidgetText* t = history->getSubWidgetText();
|
||||
ISubWidgetText* t = history->getClient()->getSubWidgetText();
|
||||
if(t == nullptr)
|
||||
return;
|
||||
|
||||
const IntPoint& lastPressed = InputManager::getInstance().getLastLeftPressed();
|
||||
const IntPoint& lastPressed = InputManager::getInstance().getLastPressedPosition(MyGUI::MouseButton::Left);
|
||||
|
||||
size_t cursorPosition = t->getCursorPosition(lastPressed);
|
||||
if(history->getColorAtPos(cursorPosition) != "#FFFFFF")
|
||||
MyGUI::UString color = history->getColorAtPos(cursorPosition);
|
||||
if(color != "#B29154")
|
||||
{
|
||||
UString key = history->getColorTextAt(cursorPosition);
|
||||
std::cout << "Clicked on key: " << key << std::endl;
|
||||
//eventTopicSelected(key);
|
||||
if(color == "#686EBA") mEnvironment.mDialogueManager->keywordSelected(lower_string(key));
|
||||
|
||||
if(color == "#572D21") mEnvironment.mDialogueManager->questionAnswered(key);
|
||||
}
|
||||
}
|
||||
|
||||
void DialogueWindow::open()
|
||||
{
|
||||
topicsList->removeAllItems();
|
||||
pTopicsText.clear();
|
||||
history->eraseText(0,history->getTextLength());
|
||||
updateOptions();
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
void DialogueWindow::onByeClicked(MyGUI::Widget* _sender)
|
||||
{
|
||||
eventBye();
|
||||
mEnvironment.mDialogueManager->goodbyeSelected();
|
||||
}
|
||||
|
||||
void DialogueWindow::onSelectTopic(MyGUI::List* _sender, size_t _index)
|
||||
void DialogueWindow::onSelectTopic(MyGUI::ListBox* _sender, size_t _index)
|
||||
{
|
||||
if (_index == MyGUI::ITEM_NONE)
|
||||
return;
|
||||
|
||||
//const std::string* theTopic = topicsList->getItemDataAt<std::string>(_index);
|
||||
//std::cout << "Selected: "<< theTopic << std::endl;
|
||||
//eventTopicSelected(key);
|
||||
std::string topic = _sender->getItemNameAt(_index);
|
||||
mEnvironment.mDialogueManager->keywordSelected(lower_string(topic));
|
||||
}
|
||||
|
||||
void DialogueWindow::startDialogue(std::string npcName)
|
||||
{
|
||||
setText("NpcName", npcName);
|
||||
}
|
||||
|
||||
void DialogueWindow::setKeywords(std::list<std::string> keyWords)
|
||||
{
|
||||
topicsList->removeAllItems();
|
||||
for(std::list<std::string>::iterator it = keyWords.begin(); it != keyWords.end(); it++)
|
||||
{
|
||||
topicsList->addItem(*it);
|
||||
}
|
||||
}
|
||||
|
||||
void DialogueWindow::removeKeyword(std::string keyWord)
|
||||
{
|
||||
if(topicsList->findItemIndexWith(keyWord) != MyGUI::ITEM_NONE)
|
||||
{
|
||||
topicsList->removeItemAt(topicsList->findItemIndexWith(keyWord));
|
||||
pTopicsText.erase(keyWord);
|
||||
}
|
||||
}
|
||||
|
||||
void addColorInString(std::string& str, const std::string& keyword,std::string color1, std::string color2)
|
||||
{
|
||||
size_t pos = 0;
|
||||
while((pos = find_str_ci(str,keyword, pos)) != std::string::npos)
|
||||
{
|
||||
if(pos==0)
|
||||
{
|
||||
str.insert(pos,color1);
|
||||
pos += color1.length();
|
||||
pos += keyword.length();
|
||||
str.insert(pos,color2);
|
||||
pos+= color2.length();
|
||||
}
|
||||
else
|
||||
{
|
||||
if(str.substr(pos -1,1) == " ")
|
||||
{
|
||||
str.insert(pos,color1);
|
||||
pos += color1.length();
|
||||
pos += keyword.length();
|
||||
str.insert(pos,color2);
|
||||
pos+= color2.length();
|
||||
}
|
||||
else
|
||||
{
|
||||
pos += keyword.length();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::string DialogueWindow::parseText(std::string text)
|
||||
{
|
||||
for(unsigned int i = 0;i<topicsList->getItemCount();i++)
|
||||
{
|
||||
std::string keyWord = topicsList->getItemNameAt(i);
|
||||
addColorInString(text,keyWord,"#686EBA","#B29154");
|
||||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
void DialogueWindow::addText(std::string text)
|
||||
{
|
||||
history->addDialogText("#B29154"+parseText(text)+"#B29154");
|
||||
}
|
||||
|
||||
void DialogueWindow::addTitle(std::string text)
|
||||
{
|
||||
history->addDialogHeading(text);
|
||||
}
|
||||
|
||||
void DialogueWindow::askQuestion(std::string question)
|
||||
{
|
||||
history->addDialogText("#572D21"+question+"#B29154"+" ");
|
||||
}
|
||||
|
||||
void DialogueWindow::updateOptions()
|
||||
{
|
||||
//FIXME Add this properly
|
||||
history->addDialogText("Through the translucent surface of the orb, you see shifting images of distant locations...");
|
||||
for(int z = 0; z < 10; z++)
|
||||
{
|
||||
history->addDialogHeading("Fort Frostmoth");
|
||||
history->addDialogText("The image in the orb flickers, and you see.... The cold courtyard of #FF0000Fort Frostmoth#FFFFFF, battered bu werewolf attack, but still standing, still projecting Imperial might even to this distant and cold corner of the world.");
|
||||
}
|
||||
|
||||
//Clear the list of topics
|
||||
topicsList->removeAllItems();
|
||||
int i = 0;
|
||||
topicsList->addItem("Ald'ruhn", i++);
|
||||
topicsList->addItem("Balmora", i++);
|
||||
topicsList->addItem("Sadrith Mora", i++);
|
||||
topicsList->addItem("Vivec", i++);
|
||||
topicsList->addItem("Ald Velothi", i++);
|
||||
topicsList->addItem("Caldera", i++);
|
||||
topicsList->addItem("Dagon Fel ", i++);
|
||||
topicsList->addItem("Gnaar Mok", i++);
|
||||
topicsList->addItem("Gnisis", i++);
|
||||
topicsList->addItem("Hla Oad", i++);
|
||||
topicsList->addItem("Khuul", i++);
|
||||
topicsList->addItem("Maar Gan", i++);
|
||||
topicsList->addItem("Molag Mar", i++);
|
||||
topicsList->addItem("Pelagiad", i++);
|
||||
topicsList->addItem("Seyda Neen", i++);
|
||||
topicsList->addItem("Suran", i++);
|
||||
topicsList->addItem("Tel Aruhn", i++);
|
||||
topicsList->addItem("Tel Branora", i++);
|
||||
topicsList->addItem("Tel Fyr", i++);
|
||||
topicsList->addItem("Tel Mora", i++);
|
||||
topicsList->addItem("Tel Vos", i++);
|
||||
topicsList->addItem("Vos", i++);
|
||||
}
|
||||
pTopicsText.clear();
|
||||
history->eraseText(0,history->getTextLength());
|
||||
|
||||
pDispositionBar->setProgressRange(100);
|
||||
pDispositionBar->setProgressPosition(40);
|
||||
pDispositionText->eraseText(0,pDispositionText->getTextLength());
|
||||
pDispositionText->addText("#B29154"+std::string("40/100")+"#B29154");
|
||||
}
|
||||
|
|
|
@ -9,6 +9,11 @@ namespace MWGui
|
|||
class WindowManager;
|
||||
}
|
||||
|
||||
namespace MWWorld
|
||||
{
|
||||
class Environment;
|
||||
}
|
||||
|
||||
/*
|
||||
This file contains the dialouge window
|
||||
Layout is defined by resources/mygui/openmw_dialogue_window_layout.xml.
|
||||
|
@ -16,35 +21,52 @@ namespace MWGui
|
|||
|
||||
namespace MWGui
|
||||
{
|
||||
class DialogeHistory;
|
||||
class DialogueHistory;
|
||||
|
||||
using namespace MyGUI;
|
||||
|
||||
class DialogueWindow: public WindowBase
|
||||
{
|
||||
public:
|
||||
DialogueWindow(WindowManager& parWindowManager);
|
||||
DialogueWindow(WindowManager& parWindowManager,MWWorld::Environment& environment);
|
||||
|
||||
void open();
|
||||
|
||||
// Events
|
||||
typedef delegates::CDelegate0 EventHandle_Void;
|
||||
typedef delegates::CMultiDelegate0 EventHandle_Void;
|
||||
|
||||
/** Event : Dialog finished, OK button clicked.\n
|
||||
signature : void method()\n
|
||||
*/
|
||||
EventHandle_Void eventBye;
|
||||
|
||||
void startDialogue(std::string npcName);
|
||||
void stopDialogue();
|
||||
void setKeywords(std::list<std::string> keyWord);
|
||||
void removeKeyword(std::string keyWord);
|
||||
void addText(std::string text);
|
||||
void addTitle(std::string text);
|
||||
void askQuestion(std::string question);
|
||||
|
||||
protected:
|
||||
void onSelectTopic(MyGUI::List* _sender, size_t _index);
|
||||
void onSelectTopic(MyGUI::ListBox* _sender, size_t _index);
|
||||
void onByeClicked(MyGUI::Widget* _sender);
|
||||
void onHistoryClicked(MyGUI::Widget* _sender);
|
||||
|
||||
private:
|
||||
void updateOptions();
|
||||
/**
|
||||
*Helper function that add topic keyword in blue in a text.
|
||||
*/
|
||||
std::string parseText(std::string text);
|
||||
|
||||
DialogeHistory* history;
|
||||
MyGUI::ListPtr topicsList;
|
||||
DialogueHistory* history;
|
||||
MyGUI::ListBox* topicsList;
|
||||
MyGUI::ProgressPtr pDispositionBar;
|
||||
MyGUI::EditPtr pDispositionText;
|
||||
std::map<std::string,std::string> pTopicsText;// this map links keyword and "real" text.
|
||||
|
||||
MWWorld::Environment& mEnvironment;
|
||||
};
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -13,10 +13,10 @@
|
|||
using namespace MWGui;
|
||||
using namespace Widgets;
|
||||
|
||||
UString DialogeHistory::getColorAtPos(size_t _pos)
|
||||
UString DialogueHistory::getColorAtPos(size_t _pos)
|
||||
{
|
||||
UString colour = TextIterator::convertTagColour(mText->getTextColour());
|
||||
TextIterator iterator(mText->getCaption());
|
||||
UString colour = TextIterator::convertTagColour(getTextColour());
|
||||
TextIterator iterator(getCaption());
|
||||
while(iterator.moveNext())
|
||||
{
|
||||
size_t pos = iterator.getPosition();
|
||||
|
@ -29,12 +29,12 @@ UString DialogeHistory::getColorAtPos(size_t _pos)
|
|||
return colour;
|
||||
}
|
||||
|
||||
UString DialogeHistory::getColorTextAt(size_t _pos)
|
||||
UString DialogueHistory::getColorTextAt(size_t _pos)
|
||||
{
|
||||
bool breakOnNext = false;
|
||||
UString colour = TextIterator::convertTagColour(mText->getTextColour());
|
||||
UString colour = TextIterator::convertTagColour(getTextColour());
|
||||
UString colour2 = colour;
|
||||
TextIterator iterator(mText->getCaption());
|
||||
TextIterator iterator(getCaption());
|
||||
TextIterator col_start = iterator;
|
||||
while(iterator.moveNext())
|
||||
{
|
||||
|
@ -59,15 +59,15 @@ UString DialogeHistory::getColorTextAt(size_t _pos)
|
|||
return "";
|
||||
}
|
||||
|
||||
void DialogeHistory::addDialogHeading(const UString& parText)
|
||||
void DialogueHistory::addDialogHeading(const UString& parText)
|
||||
{
|
||||
UString head("\n#00FF00");
|
||||
UString head("\n#D8C09A");
|
||||
head.append(parText);
|
||||
head.append("#FFFFFF\n");
|
||||
head.append("#B29154\n");
|
||||
addText(head);
|
||||
}
|
||||
|
||||
void DialogeHistory::addDialogText(const UString& parText)
|
||||
void DialogueHistory::addDialogText(const UString& parText)
|
||||
{
|
||||
addText(parText);
|
||||
addText("\n");
|
||||
|
|
|
@ -5,9 +5,9 @@
|
|||
namespace MWGui
|
||||
{
|
||||
using namespace MyGUI;
|
||||
class DialogeHistory : public MyGUI::Edit
|
||||
class DialogueHistory : public MyGUI::EditBox
|
||||
{
|
||||
MYGUI_RTTI_DERIVED( DialogeHistory )
|
||||
MYGUI_RTTI_DERIVED( DialogueHistory )
|
||||
public:
|
||||
Widget* getClient() { return mClient; }
|
||||
UString getColorAtPos(size_t _pos);
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
#include "../mwworld/environment.hpp"
|
||||
#include "../mwworld/world.hpp"
|
||||
|
||||
#include "../mwsound/soundmanager.hpp"
|
||||
|
||||
namespace
|
||||
{
|
||||
struct book
|
||||
|
@ -87,9 +89,9 @@ MWGui::JournalWindow::JournalWindow (WindowManager& parWindowManager)
|
|||
getWidget(mLeftTextWidget, "LeftText");
|
||||
getWidget(mRightTextWidget, "RightText");
|
||||
getWidget(mPrevBtn, "PrevPageBTN");
|
||||
mPrevBtn->eventMouseButtonClick = MyGUI::newDelegate(this,&MWGui::JournalWindow::notifyPrevPage);
|
||||
mPrevBtn->eventMouseButtonClick += MyGUI::newDelegate(this,&MWGui::JournalWindow::notifyPrevPage);
|
||||
getWidget(mNextBtn, "NextPageBTN");
|
||||
mNextBtn->eventMouseButtonClick = MyGUI::newDelegate(this,&MWGui::JournalWindow::notifyNextPage);
|
||||
mNextBtn->eventMouseButtonClick += MyGUI::newDelegate(this,&MWGui::JournalWindow::notifyNextPage);
|
||||
//MyGUI::ItemBox* list = new MyGUI::ItemBox();
|
||||
//list->addItem("qaq","aqzazaz");
|
||||
//mScrollerWidget->addChildItem(list);
|
||||
|
@ -109,12 +111,14 @@ MWGui::JournalWindow::JournalWindow (WindowManager& parWindowManager)
|
|||
//displayLeftText(list.front());
|
||||
|
||||
MyGUI::WindowPtr t = static_cast<MyGUI::WindowPtr>(mMainWidget);
|
||||
t->eventWindowChangeCoord = MyGUI::newDelegate(this, &JournalWindow::onWindowResize);
|
||||
t->eventWindowChangeCoord += MyGUI::newDelegate(this, &JournalWindow::onWindowResize);
|
||||
}
|
||||
|
||||
void MWGui::JournalWindow::open()
|
||||
{
|
||||
mPageNumber = 0;
|
||||
std::string journalOpenSound = "book open";
|
||||
mWindowManager.getEnvironment().mSoundManager->playSound (journalOpenSound, 1.0, 1.0);
|
||||
if(mWindowManager.getEnvironment().mJournal->begin()!=mWindowManager.getEnvironment().mJournal->end())
|
||||
{
|
||||
book journal;
|
||||
|
@ -176,6 +180,8 @@ void MWGui::JournalWindow::notifyNextPage(MyGUI::WidgetPtr _sender)
|
|||
{
|
||||
if(mPageNumber < int(leftPages.size())-1)
|
||||
{
|
||||
std::string nextSound = "book page2";
|
||||
mWindowManager.getEnvironment().mSoundManager->playSound (nextSound, 1.0, 1.0);
|
||||
mPageNumber = mPageNumber + 1;
|
||||
displayLeftText(leftPages[mPageNumber]);
|
||||
displayRightText(rightPages[mPageNumber]);
|
||||
|
@ -186,6 +192,8 @@ void MWGui::JournalWindow::notifyPrevPage(MyGUI::WidgetPtr _sender)
|
|||
{
|
||||
if(mPageNumber > 0)
|
||||
{
|
||||
std::string prevSound = "book page";
|
||||
mWindowManager.getEnvironment().mSoundManager->playSound (prevSound, 1.0, 1.0);
|
||||
mPageNumber = mPageNumber - 1;
|
||||
displayLeftText(leftPages[mPageNumber]);
|
||||
displayRightText(rightPages[mPageNumber]);
|
||||
|
|
|
@ -41,7 +41,7 @@ namespace MWGui
|
|||
static const int lineHeight;
|
||||
|
||||
MyGUI::WidgetPtr skillAreaWidget, skillClientWidget;
|
||||
MyGUI::VScrollPtr skillScrollerWidget;
|
||||
MyGUI::ScrollBar* skillScrollerWidget;
|
||||
int lastPos, clientHeight;
|
||||
MyGUI::EditPtr mLeftTextWidget;
|
||||
MyGUI::EditPtr mRightTextWidget;
|
||||
|
|
|
@ -45,18 +45,18 @@ namespace MWGui
|
|||
void setBatchCount(size_t count);
|
||||
|
||||
MyGUI::ProgressPtr health, magicka, stamina;
|
||||
MyGUI::StaticImagePtr weapImage, spellImage;
|
||||
MyGUI::ImageBox *weapImage, *spellImage;
|
||||
MyGUI::ProgressPtr weapStatus, spellStatus;
|
||||
MyGUI::WidgetPtr effectBox;
|
||||
MyGUI::StaticImagePtr effect1;
|
||||
MyGUI::StaticImagePtr minimap;
|
||||
MyGUI::StaticImagePtr compass;
|
||||
MyGUI::StaticImagePtr crosshair;
|
||||
MyGUI::ImageBox* effect1;
|
||||
MyGUI::ImageBox* minimap;
|
||||
MyGUI::ImageBox* compass;
|
||||
MyGUI::ImageBox* crosshair;
|
||||
|
||||
MyGUI::WidgetPtr fpsbox;
|
||||
MyGUI::StaticTextPtr fpscounter;
|
||||
MyGUI::StaticTextPtr trianglecounter;
|
||||
MyGUI::StaticTextPtr batchcounter;
|
||||
MyGUI::TextBox* fpscounter;
|
||||
MyGUI::TextBox* trianglecounter;
|
||||
MyGUI::TextBox* batchcounter;
|
||||
};
|
||||
|
||||
class MapWindow : public OEngine::GUI::Layout
|
||||
|
@ -75,7 +75,7 @@ namespace MWGui
|
|||
|
||||
void setCellName(const std::string& cellName)
|
||||
{
|
||||
mMainWidget->setCaption(cellName);
|
||||
static_cast<MyGUI::Window*>(mMainWidget)->setCaption(cellName);
|
||||
}
|
||||
|
||||
// for interiors: cell name, for exteriors: "Cell"
|
||||
|
@ -153,7 +153,7 @@ namespace MWGui
|
|||
getWidget(avatar, "Avatar");
|
||||
|
||||
// Adjust armor rating text to bottom of avatar widget
|
||||
MyGUI::StaticTextPtr armor_rating;
|
||||
MyGUI::TextBox* armor_rating;
|
||||
getWidget(armor_rating, "ArmorRating");
|
||||
armor_rating->setCaption("Armor: 11");
|
||||
MyGUI::IntCoord coord = armor_rating->getCoord();
|
||||
|
@ -191,7 +191,7 @@ namespace MWGui
|
|||
last_x += coord.width + margin;
|
||||
button_pt->setCoord(coord);
|
||||
|
||||
button_pt->eventMouseButtonClick = MyGUI::newDelegate(this, &InventoryWindow::onCategorySelected);
|
||||
button_pt->eventMouseButtonClick += MyGUI::newDelegate(this, &InventoryWindow::onCategorySelected);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -57,8 +57,6 @@ void MessageBoxManager::onFrame (float frameDuration)
|
|||
|
||||
void MessageBoxManager::createMessageBox (const std::string& message)
|
||||
{
|
||||
std::cout << "MessageBox: " << message << std::endl;
|
||||
|
||||
MessageBox *box = new MessageBox(*this, message);
|
||||
|
||||
removeMessageBox(message.length()*mMessageBoxSpeed, box);
|
||||
|
@ -168,7 +166,8 @@ MessageBox::MessageBox(MessageBoxManager& parMessageBoxManager, const std::strin
|
|||
|
||||
mMessageWidget->setSize(size);
|
||||
|
||||
MyGUI::IntSize textSize = mMessageWidget->_getTextSize();
|
||||
MyGUI::IntSize textSize = mMessageWidget->getTextSize();
|
||||
|
||||
size.height = mHeight = textSize.height + 20; // this is the padding between the text and the box
|
||||
|
||||
mMainWidget->setSize(size);
|
||||
|
@ -178,7 +177,7 @@ MessageBox::MessageBox(MessageBoxManager& parMessageBoxManager, const std::strin
|
|||
|
||||
void MessageBox::update (int height)
|
||||
{
|
||||
MyGUI::IntSize gameWindowSize = mMessageBoxManager.mWindowManager->getGui()->getViewSize();
|
||||
MyGUI::IntSize gameWindowSize = MyGUI::RenderManager::getInstance().getViewSize();
|
||||
MyGUI::IntCoord coord;
|
||||
coord.left = (gameWindowSize.width - mFixedWidth)/2;
|
||||
coord.top = (gameWindowSize.height - mHeight - height - mBottomPadding);
|
||||
|
@ -221,9 +220,9 @@ InteractiveMessageBox::InteractiveMessageBox(MessageBoxManager& parMessageBoxMan
|
|||
mMessageWidget->setOverflowToTheLeft(true);
|
||||
mMessageWidget->addText(message);
|
||||
|
||||
MyGUI::IntSize textSize = mMessageWidget->_getTextSize();
|
||||
MyGUI::IntSize textSize = mMessageWidget->getTextSize();
|
||||
|
||||
MyGUI::IntSize gameWindowSize = mMessageBoxManager.mWindowManager->getGui()->getViewSize();
|
||||
MyGUI::IntSize gameWindowSize = MyGUI::RenderManager::getInstance().getViewSize();
|
||||
|
||||
int biggestButtonWidth = 0;
|
||||
int buttonWidth = 0;
|
||||
|
@ -241,13 +240,13 @@ InteractiveMessageBox::InteractiveMessageBox(MessageBoxManager& parMessageBoxMan
|
|||
MyGUI::Align::Default);
|
||||
button->setCaption(*it);
|
||||
|
||||
button->eventMouseButtonClick = MyGUI::newDelegate(this, &InteractiveMessageBox::mousePressed);
|
||||
button->eventMouseButtonClick += MyGUI::newDelegate(this, &InteractiveMessageBox::mousePressed);
|
||||
|
||||
mButtons.push_back(button);
|
||||
|
||||
buttonWidth = button->_getTextSize().width + 2*buttonPadding + buttonLeftPadding;
|
||||
buttonWidth = button->getTextSize().width + 2*buttonPadding + buttonLeftPadding;
|
||||
buttonsWidth += buttonWidth;
|
||||
buttonHeight = button->_getTextSize().height + 2*buttonPadding + buttonTopPadding;
|
||||
buttonHeight = button->getTextSize().height + 2*buttonPadding + buttonTopPadding;
|
||||
|
||||
if(buttonWidth > biggestButtonWidth)
|
||||
{
|
||||
|
@ -301,8 +300,8 @@ InteractiveMessageBox::InteractiveMessageBox(MessageBoxManager& parMessageBoxMan
|
|||
buttonCord.left = left;
|
||||
buttonCord.top = textSize.height + textButtonPadding;
|
||||
|
||||
buttonSize.width = (*button)->_getTextSize().width + 2*buttonPadding;
|
||||
buttonSize.height = (*button)->_getTextSize().height + 2*buttonPadding;
|
||||
buttonSize.width = (*button)->getTextSize().width + 2*buttonPadding;
|
||||
buttonSize.height = (*button)->getTextSize().height + 2*buttonPadding;
|
||||
|
||||
(*button)->setCoord(buttonCord);
|
||||
(*button)->setSize(buttonSize);
|
||||
|
@ -349,8 +348,8 @@ InteractiveMessageBox::InteractiveMessageBox(MessageBoxManager& parMessageBoxMan
|
|||
std::vector<MyGUI::ButtonPtr>::const_iterator button;
|
||||
for(button = mButtons.begin(); button != mButtons.end(); ++button)
|
||||
{
|
||||
buttonSize.width = (*button)->_getTextSize().width + buttonPadding*2;
|
||||
buttonSize.height = (*button)->_getTextSize().height + buttonPadding*2;
|
||||
buttonSize.width = (*button)->getTextSize().width + buttonPadding*2;
|
||||
buttonSize.height = (*button)->getTextSize().height + buttonPadding*2;
|
||||
|
||||
buttonCord.top = top;
|
||||
buttonCord.left = (mainWidgetSize.width - buttonSize.width)/2 - 5; // FIXME: -5 is not so nice :/
|
||||
|
@ -387,8 +386,3 @@ int InteractiveMessageBox::readPressedButton ()
|
|||
mButtonPressed = -1;
|
||||
return pressed;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ RaceDialog::RaceDialog(WindowManager& parWindowManager)
|
|||
headRotate->setScrollRange(50);
|
||||
headRotate->setScrollPosition(20);
|
||||
headRotate->setScrollViewPage(10);
|
||||
headRotate->eventScrollChangePosition = MyGUI::newDelegate(this, &RaceDialog::onHeadRotate);
|
||||
headRotate->eventScrollChangePosition += MyGUI::newDelegate(this, &RaceDialog::onHeadRotate);
|
||||
|
||||
// Set up next/previous buttons
|
||||
MyGUI::ButtonPtr prevButton, nextButton;
|
||||
|
@ -42,27 +42,27 @@ RaceDialog::RaceDialog(WindowManager& parWindowManager)
|
|||
setText("GenderChoiceT", mWindowManager.getGameSettingString("sRaceMenu2", "Change Sex"));
|
||||
getWidget(prevButton, "PrevGenderButton");
|
||||
getWidget(nextButton, "NextGenderButton");
|
||||
prevButton->eventMouseButtonClick = MyGUI::newDelegate(this, &RaceDialog::onSelectPreviousGender);
|
||||
nextButton->eventMouseButtonClick = MyGUI::newDelegate(this, &RaceDialog::onSelectNextGender);
|
||||
prevButton->eventMouseButtonClick += MyGUI::newDelegate(this, &RaceDialog::onSelectPreviousGender);
|
||||
nextButton->eventMouseButtonClick += MyGUI::newDelegate(this, &RaceDialog::onSelectNextGender);
|
||||
|
||||
setText("FaceChoiceT", mWindowManager.getGameSettingString("sRaceMenu3", "Change Face"));
|
||||
getWidget(prevButton, "PrevFaceButton");
|
||||
getWidget(nextButton, "NextFaceButton");
|
||||
prevButton->eventMouseButtonClick = MyGUI::newDelegate(this, &RaceDialog::onSelectPreviousFace);
|
||||
nextButton->eventMouseButtonClick = MyGUI::newDelegate(this, &RaceDialog::onSelectNextFace);
|
||||
prevButton->eventMouseButtonClick += MyGUI::newDelegate(this, &RaceDialog::onSelectPreviousFace);
|
||||
nextButton->eventMouseButtonClick += MyGUI::newDelegate(this, &RaceDialog::onSelectNextFace);
|
||||
|
||||
setText("HairChoiceT", mWindowManager.getGameSettingString("sRaceMenu3", "Change Hair"));
|
||||
getWidget(prevButton, "PrevHairButton");
|
||||
getWidget(nextButton, "NextHairButton");
|
||||
prevButton->eventMouseButtonClick = MyGUI::newDelegate(this, &RaceDialog::onSelectPreviousHair);
|
||||
nextButton->eventMouseButtonClick = MyGUI::newDelegate(this, &RaceDialog::onSelectNextHair);
|
||||
prevButton->eventMouseButtonClick += MyGUI::newDelegate(this, &RaceDialog::onSelectPreviousHair);
|
||||
nextButton->eventMouseButtonClick += MyGUI::newDelegate(this, &RaceDialog::onSelectNextHair);
|
||||
|
||||
setText("RaceT", mWindowManager.getGameSettingString("sRaceMenu4", "Race"));
|
||||
getWidget(raceList, "RaceList");
|
||||
raceList->setScrollVisible(true);
|
||||
raceList->eventListSelectAccept = MyGUI::newDelegate(this, &RaceDialog::onSelectRace);
|
||||
raceList->eventListMouseItemActivate = MyGUI::newDelegate(this, &RaceDialog::onSelectRace);
|
||||
raceList->eventListChangePosition = MyGUI::newDelegate(this, &RaceDialog::onSelectRace);
|
||||
raceList->eventListSelectAccept += MyGUI::newDelegate(this, &RaceDialog::onSelectRace);
|
||||
raceList->eventListMouseItemActivate += MyGUI::newDelegate(this, &RaceDialog::onSelectRace);
|
||||
raceList->eventListChangePosition += MyGUI::newDelegate(this, &RaceDialog::onSelectRace);
|
||||
|
||||
setText("SkillsT", mWindowManager.getGameSettingString("sBonusSkillTitle", "Skill Bonus"));
|
||||
getWidget(skillList, "SkillList");
|
||||
|
@ -72,11 +72,11 @@ RaceDialog::RaceDialog(WindowManager& parWindowManager)
|
|||
// TODO: These buttons should be managed by a Dialog class
|
||||
MyGUI::ButtonPtr backButton;
|
||||
getWidget(backButton, "BackButton");
|
||||
backButton->eventMouseButtonClick = MyGUI::newDelegate(this, &RaceDialog::onBackClicked);
|
||||
backButton->eventMouseButtonClick += MyGUI::newDelegate(this, &RaceDialog::onBackClicked);
|
||||
|
||||
MyGUI::ButtonPtr okButton;
|
||||
getWidget(okButton, "OKButton");
|
||||
okButton->eventMouseButtonClick = MyGUI::newDelegate(this, &RaceDialog::onOkClicked);
|
||||
okButton->eventMouseButtonClick += MyGUI::newDelegate(this, &RaceDialog::onOkClicked);
|
||||
|
||||
updateRaces();
|
||||
updateSkills();
|
||||
|
@ -157,7 +157,7 @@ void RaceDialog::onBackClicked(MyGUI::Widget* _sender)
|
|||
eventBack();
|
||||
}
|
||||
|
||||
void RaceDialog::onHeadRotate(MyGUI::VScroll*, size_t _position)
|
||||
void RaceDialog::onHeadRotate(MyGUI::ScrollBar*, size_t _position)
|
||||
{
|
||||
// TODO: Rotate head
|
||||
}
|
||||
|
@ -192,7 +192,7 @@ void RaceDialog::onSelectNextHair(MyGUI::Widget*)
|
|||
hairIndex = wrap(hairIndex - 1, hairCount);
|
||||
}
|
||||
|
||||
void RaceDialog::onSelectRace(MyGUI::List* _sender, size_t _index)
|
||||
void RaceDialog::onSelectRace(MyGUI::ListBox* _sender, size_t _index)
|
||||
{
|
||||
if (_index == MyGUI::ITEM_NONE)
|
||||
return;
|
||||
|
|
|
@ -46,7 +46,7 @@ namespace MWGui
|
|||
void open();
|
||||
|
||||
// Events
|
||||
typedef delegates::CDelegate0 EventHandle_Void;
|
||||
typedef delegates::CMultiDelegate0 EventHandle_Void;
|
||||
|
||||
/** Event : Back button clicked.\n
|
||||
signature : void method()\n
|
||||
|
@ -54,7 +54,7 @@ namespace MWGui
|
|||
EventHandle_Void eventBack;
|
||||
|
||||
protected:
|
||||
void onHeadRotate(MyGUI::VScroll* _sender, size_t _position);
|
||||
void onHeadRotate(MyGUI::ScrollBar* _sender, size_t _position);
|
||||
|
||||
void onSelectPreviousGender(MyGUI::Widget* _sender);
|
||||
void onSelectNextGender(MyGUI::Widget* _sender);
|
||||
|
@ -65,7 +65,7 @@ namespace MWGui
|
|||
void onSelectPreviousHair(MyGUI::Widget* _sender);
|
||||
void onSelectNextHair(MyGUI::Widget* _sender);
|
||||
|
||||
void onSelectRace(MyGUI::List* _sender, size_t _index);
|
||||
void onSelectRace(MyGUI::ListBox* _sender, size_t _index);
|
||||
|
||||
void onOkClicked(MyGUI::Widget* _sender);
|
||||
void onBackClicked(MyGUI::Widget* _sender);
|
||||
|
@ -76,8 +76,8 @@ namespace MWGui
|
|||
void updateSpellPowers();
|
||||
|
||||
MyGUI::CanvasPtr appearanceBox;
|
||||
MyGUI::ListPtr raceList;
|
||||
MyGUI::HScrollPtr headRotate;
|
||||
MyGUI::ListBox* raceList;
|
||||
MyGUI::ScrollBar* headRotate;
|
||||
|
||||
MyGUI::WidgetPtr skillList;
|
||||
std::vector<MyGUI::WidgetPtr> skillItems;
|
||||
|
|
|
@ -28,22 +28,22 @@ ReviewDialog::ReviewDialog(WindowManager& parWindowManager)
|
|||
getWidget(nameWidget, "NameText");
|
||||
getWidget(button, "NameButton");
|
||||
button->setCaption(mWindowManager.getGameSettingString("sName", ""));
|
||||
button->eventMouseButtonClick = MyGUI::newDelegate(this, &ReviewDialog::onNameClicked);;
|
||||
button->eventMouseButtonClick += MyGUI::newDelegate(this, &ReviewDialog::onNameClicked);;
|
||||
|
||||
getWidget(raceWidget, "RaceText");
|
||||
getWidget(button, "RaceButton");
|
||||
button->setCaption(mWindowManager.getGameSettingString("sRace", ""));
|
||||
button->eventMouseButtonClick = MyGUI::newDelegate(this, &ReviewDialog::onRaceClicked);;
|
||||
button->eventMouseButtonClick += MyGUI::newDelegate(this, &ReviewDialog::onRaceClicked);;
|
||||
|
||||
getWidget(classWidget, "ClassText");
|
||||
getWidget(button, "ClassButton");
|
||||
button->setCaption(mWindowManager.getGameSettingString("sClass", ""));
|
||||
button->eventMouseButtonClick = MyGUI::newDelegate(this, &ReviewDialog::onClassClicked);;
|
||||
button->eventMouseButtonClick += MyGUI::newDelegate(this, &ReviewDialog::onClassClicked);;
|
||||
|
||||
getWidget(birthSignWidget, "SignText");
|
||||
getWidget(button, "SignButton");
|
||||
button->setCaption(mWindowManager.getGameSettingString("sBirthSign", ""));
|
||||
button->eventMouseButtonClick = MyGUI::newDelegate(this, &ReviewDialog::onBirthSignClicked);;
|
||||
button->eventMouseButtonClick += MyGUI::newDelegate(this, &ReviewDialog::onBirthSignClicked);;
|
||||
|
||||
// Setup dynamic stats
|
||||
getWidget(health, "Health");
|
||||
|
@ -75,25 +75,25 @@ ReviewDialog::ReviewDialog(WindowManager& parWindowManager)
|
|||
getWidget(skillClientWidget, "SkillClient");
|
||||
getWidget(skillScrollerWidget, "SkillScroller");
|
||||
|
||||
skillScrollerWidget->eventScrollChangePosition = MyGUI::newDelegate(this, &ReviewDialog::onScrollChangePosition);
|
||||
skillScrollerWidget->eventScrollChangePosition += MyGUI::newDelegate(this, &ReviewDialog::onScrollChangePosition);
|
||||
updateScroller();
|
||||
|
||||
for (int i = 0; i < ESM::Skill::Length; ++i)
|
||||
{
|
||||
skillValues.insert(std::make_pair(i, MWMechanics::Stat<float>()));
|
||||
skillWidgetMap.insert(std::make_pair(i, static_cast<MyGUI::StaticText*> (0)));
|
||||
skillWidgetMap.insert(std::make_pair(i, static_cast<MyGUI::TextBox*> (0)));
|
||||
}
|
||||
|
||||
static_cast<MyGUI::WindowPtr>(mMainWidget)->eventWindowChangeCoord = MyGUI::newDelegate(this, &ReviewDialog::onWindowResize);
|
||||
static_cast<MyGUI::WindowPtr>(mMainWidget)->eventWindowChangeCoord += MyGUI::newDelegate(this, &ReviewDialog::onWindowResize);
|
||||
|
||||
// TODO: These buttons should be managed by a Dialog class
|
||||
MyGUI::ButtonPtr backButton;
|
||||
getWidget(backButton, "BackButton");
|
||||
backButton->eventMouseButtonClick = MyGUI::newDelegate(this, &ReviewDialog::onBackClicked);
|
||||
backButton->eventMouseButtonClick += MyGUI::newDelegate(this, &ReviewDialog::onBackClicked);
|
||||
|
||||
MyGUI::ButtonPtr okButton;
|
||||
getWidget(okButton, "OKButton");
|
||||
okButton->eventMouseButtonClick = MyGUI::newDelegate(this, &ReviewDialog::onOkClicked);
|
||||
okButton->eventMouseButtonClick += MyGUI::newDelegate(this, &ReviewDialog::onOkClicked);
|
||||
}
|
||||
|
||||
void ReviewDialog::open()
|
||||
|
@ -102,7 +102,7 @@ void ReviewDialog::open()
|
|||
setVisible(true);
|
||||
}
|
||||
|
||||
void ReviewDialog::onScrollChangePosition(MyGUI::VScrollPtr scroller, size_t pos)
|
||||
void ReviewDialog::onScrollChangePosition(MyGUI::ScrollBar* scroller, size_t pos)
|
||||
{
|
||||
int diff = lastPos - pos;
|
||||
// Adjust position of all widget according to difference
|
||||
|
@ -176,7 +176,7 @@ void ReviewDialog::setAttribute(ESM::Attribute::AttributeID attributeId, const M
|
|||
void ReviewDialog::setSkillValue(ESM::Skill::SkillEnum skillId, const MWMechanics::Stat<float>& value)
|
||||
{
|
||||
skillValues[skillId] = value;
|
||||
MyGUI::StaticTextPtr widget = skillWidgetMap[skillId];
|
||||
MyGUI::TextBox* widget = skillWidgetMap[skillId];
|
||||
if (widget)
|
||||
{
|
||||
float modified = value.getModified(), base = value.getBase();
|
||||
|
@ -210,7 +210,7 @@ void ReviewDialog::configureSkills(const std::vector<int>& major, const std::vec
|
|||
}
|
||||
}
|
||||
|
||||
void ReviewDialog::setStyledText(MyGUI::StaticTextPtr widget, ColorStyle style, const std::string &value)
|
||||
void ReviewDialog::setStyledText(MyGUI::TextBox* widget, ColorStyle style, const std::string &value)
|
||||
{
|
||||
widget->setCaption(value);
|
||||
if (style == CS_Super)
|
||||
|
@ -223,7 +223,7 @@ void ReviewDialog::setStyledText(MyGUI::StaticTextPtr widget, ColorStyle style,
|
|||
|
||||
void ReviewDialog::addSeparator(MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
|
||||
{
|
||||
MyGUI::StaticImagePtr separator = skillClientWidget->createWidget<MyGUI::StaticImage>("MW_HLine", MyGUI::IntCoord(10, coord1.top, coord1.width + coord2.width - 4, 18), MyGUI::Align::Default);
|
||||
MyGUI::ImageBox* separator = skillClientWidget->createWidget<MyGUI::ImageBox>("MW_HLine", MyGUI::IntCoord(10, coord1.top, coord1.width + coord2.width - 4, 18), MyGUI::Align::Default);
|
||||
skillWidgets.push_back(separator);
|
||||
|
||||
coord1.top += separator->getHeight();
|
||||
|
@ -232,7 +232,7 @@ void ReviewDialog::addSeparator(MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2
|
|||
|
||||
void ReviewDialog::addGroup(const std::string &label, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
|
||||
{
|
||||
MyGUI::StaticTextPtr groupWidget = skillClientWidget->createWidget<MyGUI::StaticText>("SandBrightText", MyGUI::IntCoord(0, coord1.top, coord1.width + coord2.width, coord1.height), MyGUI::Align::Default);
|
||||
MyGUI::TextBox* groupWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandBrightText", MyGUI::IntCoord(0, coord1.top, coord1.width + coord2.width, coord1.height), MyGUI::Align::Default);
|
||||
groupWidget->setCaption(label);
|
||||
skillWidgets.push_back(groupWidget);
|
||||
|
||||
|
@ -240,14 +240,15 @@ void ReviewDialog::addGroup(const std::string &label, MyGUI::IntCoord &coord1, M
|
|||
coord2.top += lineHeight;
|
||||
}
|
||||
|
||||
MyGUI::StaticTextPtr ReviewDialog::addValueItem(const std::string text, const std::string &value, ColorStyle style, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
|
||||
MyGUI::TextBox* ReviewDialog::addValueItem(const std::string text, const std::string &value, ColorStyle style, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
|
||||
{
|
||||
MyGUI::StaticTextPtr skillNameWidget, skillValueWidget;
|
||||
MyGUI::TextBox* skillNameWidget;
|
||||
MyGUI::TextBox* skillValueWidget;
|
||||
|
||||
skillNameWidget = skillClientWidget->createWidget<MyGUI::StaticText>("SandText", coord1, MyGUI::Align::Default);
|
||||
skillNameWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1, MyGUI::Align::Default);
|
||||
skillNameWidget->setCaption(text);
|
||||
|
||||
skillValueWidget = skillClientWidget->createWidget<MyGUI::StaticText>("SandTextRight", coord2, MyGUI::Align::Default);
|
||||
skillValueWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandTextRight", coord2, MyGUI::Align::Default);
|
||||
setStyledText(skillValueWidget, style, value);
|
||||
|
||||
skillWidgets.push_back(skillNameWidget);
|
||||
|
@ -261,9 +262,9 @@ MyGUI::StaticTextPtr ReviewDialog::addValueItem(const std::string text, const st
|
|||
|
||||
void ReviewDialog::addItem(const std::string text, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
|
||||
{
|
||||
MyGUI::StaticTextPtr skillNameWidget;
|
||||
MyGUI::TextBox* skillNameWidget;
|
||||
|
||||
skillNameWidget = skillClientWidget->createWidget<MyGUI::StaticText>("SandText", coord1 + MyGUI::IntSize(coord2.width, 0), MyGUI::Align::Default);
|
||||
skillNameWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1 + MyGUI::IntSize(coord2.width, 0), MyGUI::Align::Default);
|
||||
skillNameWidget->setCaption(text);
|
||||
|
||||
skillWidgets.push_back(skillNameWidget);
|
||||
|
@ -299,7 +300,7 @@ void ReviewDialog::addSkills(const SkillList &skills, const std::string &titleId
|
|||
style = CS_Super;
|
||||
else if (modified < base)
|
||||
style = CS_Sub;
|
||||
MyGUI::StaticTextPtr widget = addValueItem(mWindowManager.getGameSettingString(skillNameId, skillNameId), boost::lexical_cast<std::string>(static_cast<int>(modified)), style, coord1, coord2);
|
||||
MyGUI::TextBox* widget = addValueItem(mWindowManager.getGameSettingString(skillNameId, skillNameId), boost::lexical_cast<std::string>(static_cast<int>(modified)), style, coord1, coord2);
|
||||
skillWidgetMap[skillId] = widget;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,8 +49,8 @@ namespace MWGui
|
|||
void open();
|
||||
|
||||
// Events
|
||||
typedef delegates::CDelegate0 EventHandle_Void;
|
||||
typedef delegates::CDelegate1<int> EventHandle_Int;
|
||||
typedef delegates::CMultiDelegate0 EventHandle_Void;
|
||||
typedef delegates::CMultiDelegate1<int> EventHandle_Int;
|
||||
|
||||
/** Event : Back button clicked.\n
|
||||
signature : void method()\n
|
||||
|
@ -75,23 +75,23 @@ namespace MWGui
|
|||
CS_Normal,
|
||||
CS_Super
|
||||
};
|
||||
void setStyledText(MyGUI::StaticTextPtr widget, ColorStyle style, const std::string &value);
|
||||
void setStyledText(MyGUI::TextBox* widget, ColorStyle style, const std::string &value);
|
||||
void addSkills(const SkillList &skills, const std::string &titleId, const std::string &titleDefault, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
|
||||
void addSeparator(MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
|
||||
void addGroup(const std::string &label, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
|
||||
MyGUI::StaticTextPtr addValueItem(const std::string text, const std::string &value, ColorStyle style, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
|
||||
MyGUI::TextBox* addValueItem(const std::string text, const std::string &value, ColorStyle style, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
|
||||
void addItem(const std::string text, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
|
||||
void updateScroller();
|
||||
void updateSkillArea();
|
||||
|
||||
void onScrollChangePosition(MyGUI::VScrollPtr scroller, size_t pos);
|
||||
void onScrollChangePosition(MyGUI::ScrollBar* scroller, size_t pos);
|
||||
void onWindowResize(MyGUI::Window* window);
|
||||
|
||||
static const int lineHeight;
|
||||
|
||||
MyGUI::StaticTextPtr nameWidget, raceWidget, classWidget, birthSignWidget;
|
||||
MyGUI::TextBox *nameWidget, *raceWidget, *classWidget, *birthSignWidget;
|
||||
MyGUI::WidgetPtr skillAreaWidget, skillClientWidget;
|
||||
MyGUI::VScrollPtr skillScrollerWidget;
|
||||
MyGUI::ScrollBar* skillScrollerWidget;
|
||||
int lastPos, clientHeight;
|
||||
|
||||
Widgets::MWDynamicStatPtr health, magicka, fatigue;
|
||||
|
@ -100,7 +100,7 @@ namespace MWGui
|
|||
|
||||
SkillList majorSkills, minorSkills, miscSkills;
|
||||
std::map<int, MWMechanics::Stat<float> > skillValues;
|
||||
std::map<int, MyGUI::StaticTextPtr> skillWidgetMap;
|
||||
std::map<int, MyGUI::TextBox*> skillWidgetMap;
|
||||
std::string name, raceId, birthSignId;
|
||||
ESM::Class klass;
|
||||
std::vector<MyGUI::WidgetPtr> skillWidgets; //< Skills and other information
|
||||
|
|
|
@ -48,20 +48,20 @@ StatsWindow::StatsWindow (WindowManager& parWindowManager)
|
|||
getWidget(skillClientWidget, "SkillClient");
|
||||
getWidget(skillScrollerWidget, "SkillScroller");
|
||||
|
||||
skillScrollerWidget->eventScrollChangePosition = MyGUI::newDelegate(this, &StatsWindow::onScrollChangePosition);
|
||||
skillScrollerWidget->eventScrollChangePosition += MyGUI::newDelegate(this, &StatsWindow::onScrollChangePosition);
|
||||
updateScroller();
|
||||
|
||||
for (int i = 0; i < ESM::Skill::Length; ++i)
|
||||
{
|
||||
skillValues.insert(std::pair<int, MWMechanics::Stat<float> >(i, MWMechanics::Stat<float>()));
|
||||
skillWidgetMap.insert(std::pair<int, MyGUI::StaticTextPtr>(i, nullptr));
|
||||
skillWidgetMap.insert(std::pair<int, MyGUI::TextBox*>(i, nullptr));
|
||||
}
|
||||
|
||||
MyGUI::WindowPtr t = static_cast<MyGUI::WindowPtr>(mMainWidget);
|
||||
t->eventWindowChangeCoord = MyGUI::newDelegate(this, &StatsWindow::onWindowResize);
|
||||
t->eventWindowChangeCoord += MyGUI::newDelegate(this, &StatsWindow::onWindowResize);
|
||||
}
|
||||
|
||||
void StatsWindow::onScrollChangePosition(MyGUI::VScrollPtr scroller, size_t pos)
|
||||
void StatsWindow::onScrollChangePosition(MyGUI::ScrollBar* scroller, size_t pos)
|
||||
{
|
||||
int diff = lastPos - pos;
|
||||
// Adjust position of all widget according to difference
|
||||
|
@ -95,10 +95,10 @@ void StatsWindow::setBar(const std::string& name, const std::string& tname, int
|
|||
|
||||
void StatsWindow::setPlayerName(const std::string& playerName)
|
||||
{
|
||||
mMainWidget->setCaption(playerName);
|
||||
static_cast<MyGUI::Window*>(mMainWidget)->setCaption(playerName);
|
||||
}
|
||||
|
||||
void StatsWindow::setStyledText(MyGUI::StaticTextPtr widget, ColorStyle style, const std::string &value)
|
||||
void StatsWindow::setStyledText(MyGUI::TextBox* widget, ColorStyle style, const std::string &value)
|
||||
{
|
||||
widget->setCaption(value);
|
||||
if (style == CS_Super)
|
||||
|
@ -175,7 +175,7 @@ void StatsWindow::setValue (const std::string& id, int value)
|
|||
void StatsWindow::setValue(const ESM::Skill::SkillEnum parSkill, const MWMechanics::Stat<float>& value)
|
||||
{
|
||||
skillValues[parSkill] = value;
|
||||
MyGUI::StaticTextPtr widget = skillWidgetMap[(int)parSkill];
|
||||
MyGUI::TextBox* widget = skillWidgetMap[(int)parSkill];
|
||||
if (widget)
|
||||
{
|
||||
float modified = value.getModified(), base = value.getBase();
|
||||
|
@ -221,7 +221,7 @@ void StatsWindow::setBirthSign (const std::string& signId)
|
|||
|
||||
void StatsWindow::addSeparator(MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
|
||||
{
|
||||
MyGUI::StaticImagePtr separator = skillClientWidget->createWidget<MyGUI::StaticImage>("MW_HLine", MyGUI::IntCoord(10, coord1.top, coord1.width + coord2.width - 4, 18), MyGUI::Align::Default);
|
||||
MyGUI::ImageBox* separator = skillClientWidget->createWidget<MyGUI::ImageBox>("MW_HLine", MyGUI::IntCoord(10, coord1.top, coord1.width + coord2.width - 4, 18), MyGUI::Align::Default);
|
||||
skillWidgets.push_back(separator);
|
||||
|
||||
coord1.top += separator->getHeight();
|
||||
|
@ -230,7 +230,7 @@ void StatsWindow::addSeparator(MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
|
|||
|
||||
void StatsWindow::addGroup(const std::string &label, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
|
||||
{
|
||||
MyGUI::StaticTextPtr groupWidget = skillClientWidget->createWidget<MyGUI::StaticText>("SandBrightText", MyGUI::IntCoord(0, coord1.top, coord1.width + coord2.width, coord1.height), MyGUI::Align::Default);
|
||||
MyGUI::TextBox* groupWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandBrightText", MyGUI::IntCoord(0, coord1.top, coord1.width + coord2.width, coord1.height), MyGUI::Align::Default);
|
||||
groupWidget->setCaption(label);
|
||||
skillWidgets.push_back(groupWidget);
|
||||
|
||||
|
@ -238,14 +238,14 @@ void StatsWindow::addGroup(const std::string &label, MyGUI::IntCoord &coord1, My
|
|||
coord2.top += lineHeight;
|
||||
}
|
||||
|
||||
MyGUI::StaticTextPtr StatsWindow::addValueItem(const std::string text, const std::string &value, ColorStyle style, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
|
||||
MyGUI::TextBox* StatsWindow::addValueItem(const std::string text, const std::string &value, ColorStyle style, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
|
||||
{
|
||||
MyGUI::StaticTextPtr skillNameWidget, skillValueWidget;
|
||||
MyGUI::TextBox *skillNameWidget, *skillValueWidget;
|
||||
|
||||
skillNameWidget = skillClientWidget->createWidget<MyGUI::StaticText>("SandText", coord1, MyGUI::Align::Default);
|
||||
skillNameWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1, MyGUI::Align::Default);
|
||||
skillNameWidget->setCaption(text);
|
||||
|
||||
skillValueWidget = skillClientWidget->createWidget<MyGUI::StaticText>("SandTextRight", coord2, MyGUI::Align::Default);
|
||||
skillValueWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandTextRight", coord2, MyGUI::Align::Default);
|
||||
setStyledText(skillValueWidget, style, value);
|
||||
|
||||
skillWidgets.push_back(skillNameWidget);
|
||||
|
@ -259,9 +259,9 @@ MyGUI::StaticTextPtr StatsWindow::addValueItem(const std::string text, const std
|
|||
|
||||
void StatsWindow::addItem(const std::string text, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
|
||||
{
|
||||
MyGUI::StaticTextPtr skillNameWidget;
|
||||
MyGUI::TextBox* skillNameWidget;
|
||||
|
||||
skillNameWidget = skillClientWidget->createWidget<MyGUI::StaticText>("SandText", coord1 + MyGUI::IntSize(coord2.width, 0), MyGUI::Align::Default);
|
||||
skillNameWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1 + MyGUI::IntSize(coord2.width, 0), MyGUI::Align::Default);
|
||||
skillNameWidget->setCaption(text);
|
||||
|
||||
skillWidgets.push_back(skillNameWidget);
|
||||
|
@ -297,7 +297,7 @@ void StatsWindow::addSkills(const SkillList &skills, const std::string &titleId,
|
|||
style = CS_Super;
|
||||
else if (modified < base)
|
||||
style = CS_Sub;
|
||||
MyGUI::StaticTextPtr widget = addValueItem(mWindowManager.getGameSettingString(skillNameId, skillNameId), boost::lexical_cast<std::string>(static_cast<int>(modified)), style, coord1, coord2);
|
||||
MyGUI::TextBox* widget = addValueItem(mWindowManager.getGameSettingString(skillNameId, skillNameId), boost::lexical_cast<std::string>(static_cast<int>(modified)), style, coord1, coord2);
|
||||
skillWidgetMap[skillId] = widget;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,26 +49,26 @@ namespace MWGui
|
|||
CS_Normal,
|
||||
CS_Super
|
||||
};
|
||||
void setStyledText(MyGUI::StaticTextPtr widget, ColorStyle style, const std::string &value);
|
||||
void setStyledText(MyGUI::TextBox* widget, ColorStyle style, const std::string &value);
|
||||
void addSkills(const SkillList &skills, const std::string &titleId, const std::string &titleDefault, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
|
||||
void addSeparator(MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
|
||||
void addGroup(const std::string &label, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
|
||||
MyGUI::StaticTextPtr addValueItem(const std::string text, const std::string &value, ColorStyle style, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
|
||||
MyGUI::TextBox* addValueItem(const std::string text, const std::string &value, ColorStyle style, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
|
||||
void addItem(const std::string text, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2);
|
||||
void updateScroller();
|
||||
|
||||
void onScrollChangePosition(MyGUI::VScrollPtr scroller, size_t pos);
|
||||
void onScrollChangePosition(MyGUI::ScrollBar* scroller, size_t pos);
|
||||
void onWindowResize(MyGUI::Window* window);
|
||||
|
||||
static const int lineHeight;
|
||||
|
||||
MyGUI::WidgetPtr skillAreaWidget, skillClientWidget;
|
||||
MyGUI::VScrollPtr skillScrollerWidget;
|
||||
MyGUI::ScrollBar* skillScrollerWidget;
|
||||
int lastPos, clientHeight;
|
||||
|
||||
SkillList majorSkills, minorSkills, miscSkills;
|
||||
std::map<int, MWMechanics::Stat<float> > skillValues;
|
||||
std::map<int, MyGUI::StaticTextPtr> skillWidgetMap;
|
||||
std::map<int, MyGUI::TextBox*> skillWidgetMap;
|
||||
std::map<std::string, MyGUI::WidgetPtr> factionWidgetMap;
|
||||
FactionList factions; ///< Stores a list of factions and the current rank
|
||||
std::string birthSignId;
|
||||
|
|
|
@ -10,12 +10,12 @@ TextInputDialog::TextInputDialog(WindowManager& parWindowManager)
|
|||
center();
|
||||
|
||||
getWidget(textEdit, "TextEdit");
|
||||
textEdit->eventEditSelectAccept = newDelegate(this, &TextInputDialog::onTextAccepted);
|
||||
textEdit->eventEditSelectAccept += newDelegate(this, &TextInputDialog::onTextAccepted);
|
||||
|
||||
// TODO: These buttons should be managed by a Dialog class
|
||||
MyGUI::ButtonPtr okButton;
|
||||
getWidget(okButton, "OKButton");
|
||||
okButton->eventMouseButtonClick = MyGUI::newDelegate(this, &TextInputDialog::onOkClicked);
|
||||
okButton->eventMouseButtonClick += MyGUI::newDelegate(this, &TextInputDialog::onOkClicked);
|
||||
|
||||
// Make sure the edit box has focus
|
||||
MyGUI::InputManager::getInstance().setKeyFocusWidget(textEdit);
|
||||
|
|
|
@ -62,24 +62,24 @@ void MWSkill::updateWidgets()
|
|||
{
|
||||
if (skillId == ESM::Skill::Length)
|
||||
{
|
||||
skillNameWidget->setCaption("");
|
||||
static_cast<MyGUI::TextBox*>(skillNameWidget)->setCaption("");
|
||||
}
|
||||
else
|
||||
{
|
||||
const std::string &name = manager->getGameSettingString(ESM::Skill::sSkillNameIds[skillId], "");
|
||||
skillNameWidget->setCaption(name);
|
||||
static_cast<MyGUI::TextBox*>(skillNameWidget)->setCaption(name);
|
||||
}
|
||||
}
|
||||
if (skillValueWidget)
|
||||
{
|
||||
SkillValue::Type modified = value.getModified(), base = value.getBase();
|
||||
skillValueWidget->setCaption(boost::lexical_cast<std::string>(modified));
|
||||
static_cast<MyGUI::TextBox*>(skillValueWidget)->setCaption(boost::lexical_cast<std::string>(modified));
|
||||
if (modified > base)
|
||||
skillValueWidget->setState("increased");
|
||||
skillValueWidget->_setWidgetState("increased");
|
||||
else if (modified < base)
|
||||
skillValueWidget->setState("decreased");
|
||||
skillValueWidget->_setWidgetState("decreased");
|
||||
else
|
||||
skillValueWidget->setState("normal");
|
||||
skillValueWidget->_setWidgetState("normal");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -88,59 +88,32 @@ void MWSkill::onClicked(MyGUI::Widget* _sender)
|
|||
eventClicked(this);
|
||||
}
|
||||
|
||||
void MWSkill::_initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, Widget* _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name)
|
||||
{
|
||||
Base::_initialise(_style, _coord, _align, _info, _parent, _croppedParent, _creator, _name);
|
||||
|
||||
initialiseWidgetSkin(_info);
|
||||
}
|
||||
|
||||
MWSkill::~MWSkill()
|
||||
{
|
||||
shutdownWidgetSkin();
|
||||
}
|
||||
|
||||
void MWSkill::baseChangeWidgetSkin(ResourceSkin* _info)
|
||||
void MWSkill::initialiseOverride()
|
||||
{
|
||||
shutdownWidgetSkin();
|
||||
Base::baseChangeWidgetSkin(_info);
|
||||
initialiseWidgetSkin(_info);
|
||||
}
|
||||
Base::initialiseOverride();
|
||||
|
||||
void MWSkill::initialiseWidgetSkin(ResourceSkin* _info)
|
||||
{
|
||||
for (VectorWidgetPtr::iterator iter=mWidgetChildSkin.begin(); iter!=mWidgetChildSkin.end(); ++iter)
|
||||
assignWidget(skillNameWidget, "StatName");
|
||||
assignWidget(skillValueWidget, "StatValue");
|
||||
|
||||
MyGUI::ButtonPtr button;
|
||||
assignWidget(button, "StatNameButton");
|
||||
if (button)
|
||||
{
|
||||
const std::string &name = *(*iter)->_getInternalData<std::string>();
|
||||
if (name == "StatName")
|
||||
{
|
||||
MYGUI_DEBUG_ASSERT( ! skillNameWidget, "widget already assigned");
|
||||
skillNameWidget = (*iter)->castType<StaticText>();
|
||||
}
|
||||
else if (name == "StatValue")
|
||||
{
|
||||
MYGUI_DEBUG_ASSERT( ! skillValueWidget, "widget already assigned");
|
||||
skillValueWidget = (*iter)->castType<StaticText>();
|
||||
}
|
||||
else if (name == "StatNameButton")
|
||||
{
|
||||
MYGUI_DEBUG_ASSERT( ! skillNameWidget, "widget already assigned");
|
||||
MyGUI::ButtonPtr button = (*iter)->castType<Button>();
|
||||
skillNameWidget = button;
|
||||
button->eventMouseButtonClick = MyGUI::newDelegate(this, &MWSkill::onClicked);
|
||||
button->eventMouseButtonClick += MyGUI::newDelegate(this, &MWSkill::onClicked);
|
||||
}
|
||||
else if (name == "StatValueButton")
|
||||
{
|
||||
MYGUI_DEBUG_ASSERT( ! skillValueWidget, "widget already assigned");
|
||||
MyGUI::ButtonPtr button = (*iter)->castType<Button>();
|
||||
skillNameWidget = button;
|
||||
button->eventMouseButtonClick = MyGUI::newDelegate(this, &MWSkill::onClicked);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MWSkill::shutdownWidgetSkin()
|
||||
{
|
||||
button = 0;
|
||||
assignWidget(button, "StatValueButton");
|
||||
if (button)
|
||||
{
|
||||
skillNameWidget = button;
|
||||
button->eventMouseButtonClick += MyGUI::newDelegate(this, &MWSkill::onClicked);
|
||||
}
|
||||
}
|
||||
|
||||
/* MWAttribute */
|
||||
|
@ -176,7 +149,7 @@ void MWAttribute::updateWidgets()
|
|||
{
|
||||
if (id < 0 || id >= 8)
|
||||
{
|
||||
attributeNameWidget->setCaption("");
|
||||
static_cast<MyGUI::TextBox*>(attributeNameWidget)->setCaption("");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -191,75 +164,48 @@ void MWAttribute::updateWidgets()
|
|||
"sAttributeLuck"
|
||||
};
|
||||
const std::string &name = manager->getGameSettingString(attributes[id], "");
|
||||
attributeNameWidget->setCaption(name);
|
||||
static_cast<MyGUI::TextBox*>(attributeNameWidget)->setCaption(name);
|
||||
}
|
||||
}
|
||||
if (attributeValueWidget)
|
||||
{
|
||||
AttributeValue::Type modified = value.getModified(), base = value.getBase();
|
||||
attributeValueWidget->setCaption(boost::lexical_cast<std::string>(modified));
|
||||
static_cast<MyGUI::TextBox*>(attributeValueWidget)->setCaption(boost::lexical_cast<std::string>(modified));
|
||||
if (modified > base)
|
||||
attributeValueWidget->setState("increased");
|
||||
attributeValueWidget->_setWidgetState("increased");
|
||||
else if (modified < base)
|
||||
attributeValueWidget->setState("decreased");
|
||||
attributeValueWidget->_setWidgetState("decreased");
|
||||
else
|
||||
attributeValueWidget->setState("normal");
|
||||
attributeValueWidget->_setWidgetState("normal");
|
||||
}
|
||||
}
|
||||
|
||||
void MWAttribute::_initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, Widget* _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name)
|
||||
{
|
||||
Base::_initialise(_style, _coord, _align, _info, _parent, _croppedParent, _creator, _name);
|
||||
|
||||
initialiseWidgetSkin(_info);
|
||||
}
|
||||
|
||||
MWAttribute::~MWAttribute()
|
||||
{
|
||||
shutdownWidgetSkin();
|
||||
}
|
||||
|
||||
void MWAttribute::baseChangeWidgetSkin(ResourceSkin* _info)
|
||||
void MWAttribute::initialiseOverride()
|
||||
{
|
||||
shutdownWidgetSkin();
|
||||
Base::baseChangeWidgetSkin(_info);
|
||||
initialiseWidgetSkin(_info);
|
||||
}
|
||||
Base::initialiseOverride();
|
||||
|
||||
void MWAttribute::initialiseWidgetSkin(ResourceSkin* _info)
|
||||
{
|
||||
for (VectorWidgetPtr::iterator iter=mWidgetChildSkin.begin(); iter!=mWidgetChildSkin.end(); ++iter)
|
||||
assignWidget(attributeNameWidget, "StatName");
|
||||
assignWidget(attributeValueWidget, "StatValue");
|
||||
|
||||
MyGUI::ButtonPtr button;
|
||||
assignWidget(button, "StatNameButton");
|
||||
if (button)
|
||||
{
|
||||
const std::string &name = *(*iter)->_getInternalData<std::string>();
|
||||
if (name == "StatName")
|
||||
{
|
||||
MYGUI_DEBUG_ASSERT( ! attributeNameWidget, "widget already assigned");
|
||||
attributeNameWidget = (*iter)->castType<StaticText>();
|
||||
}
|
||||
else if (name == "StatValue")
|
||||
{
|
||||
MYGUI_DEBUG_ASSERT( ! attributeValueWidget, "widget already assigned");
|
||||
attributeValueWidget = (*iter)->castType<StaticText>();
|
||||
}
|
||||
else if (name == "StatNameButton")
|
||||
{
|
||||
MYGUI_DEBUG_ASSERT( ! attributeNameWidget, "widget already assigned");
|
||||
MyGUI::ButtonPtr button = (*iter)->castType<Button>();
|
||||
attributeNameWidget = button;
|
||||
button->eventMouseButtonClick = MyGUI::newDelegate(this, &MWAttribute::onClicked);
|
||||
button->eventMouseButtonClick += MyGUI::newDelegate(this, &MWAttribute::onClicked);
|
||||
}
|
||||
else if (name == "StatValue")
|
||||
{
|
||||
MYGUI_DEBUG_ASSERT( ! attributeValueWidget, "widget already assigned");
|
||||
MyGUI::ButtonPtr button = (*iter)->castType<Button>();
|
||||
attributeNameWidget = button;
|
||||
button->eventMouseButtonClick = MyGUI::newDelegate(this, &MWAttribute::onClicked);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MWAttribute::shutdownWidgetSkin()
|
||||
{
|
||||
button = 0;
|
||||
assignWidget(button, "StatValueButton");
|
||||
if (button)
|
||||
{
|
||||
attributeValueWidget = button;
|
||||
button->eventMouseButtonClick += MyGUI::newDelegate(this, &MWAttribute::onClicked);
|
||||
}
|
||||
}
|
||||
|
||||
/* MWSpell */
|
||||
|
@ -301,45 +247,20 @@ void MWSpell::updateWidgets()
|
|||
const ESMS::ESMStore &store = mWindowManager->getStore();
|
||||
const ESM::Spell *spell = store.spells.search(id);
|
||||
if (spell)
|
||||
spellNameWidget->setCaption(spell->name);
|
||||
static_cast<MyGUI::TextBox*>(spellNameWidget)->setCaption(spell->name);
|
||||
else
|
||||
spellNameWidget->setCaption("");
|
||||
static_cast<MyGUI::TextBox*>(spellNameWidget)->setCaption("");
|
||||
}
|
||||
}
|
||||
|
||||
void MWSpell::_initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, Widget* _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name)
|
||||
void MWSpell::initialiseOverride()
|
||||
{
|
||||
Base::_initialise(_style, _coord, _align, _info, _parent, _croppedParent, _creator, _name);
|
||||
Base::initialiseOverride();
|
||||
|
||||
initialiseWidgetSkin(_info);
|
||||
assignWidget(spellNameWidget, "StatName");
|
||||
}
|
||||
|
||||
MWSpell::~MWSpell()
|
||||
{
|
||||
shutdownWidgetSkin();
|
||||
}
|
||||
|
||||
void MWSpell::baseChangeWidgetSkin(ResourceSkin* _info)
|
||||
{
|
||||
shutdownWidgetSkin();
|
||||
Base::baseChangeWidgetSkin(_info);
|
||||
initialiseWidgetSkin(_info);
|
||||
}
|
||||
|
||||
void MWSpell::initialiseWidgetSkin(ResourceSkin* _info)
|
||||
{
|
||||
for (VectorWidgetPtr::iterator iter=mWidgetChildSkin.begin(); iter!=mWidgetChildSkin.end(); ++iter)
|
||||
{
|
||||
const std::string &name = *(*iter)->_getInternalData<std::string>();
|
||||
if (name == "StatName")
|
||||
{
|
||||
MYGUI_DEBUG_ASSERT( ! spellNameWidget, "widget already assigned");
|
||||
spellNameWidget = (*iter)->castType<StaticText>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MWSpell::shutdownWidgetSkin()
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -408,10 +329,10 @@ void MWSpellEffect::updateWidgets()
|
|||
spellLine += " on Touch";
|
||||
else if (effect.range == ESM::RT_Target)
|
||||
spellLine += " on Target";
|
||||
textWidget->setCaption(spellLine);
|
||||
static_cast<MyGUI::TextBox*>(textWidget)->setCaption(spellLine);
|
||||
}
|
||||
else
|
||||
textWidget->setCaption("");
|
||||
static_cast<MyGUI::TextBox*>(textWidget)->setCaption("");
|
||||
}
|
||||
if (imageWidget)
|
||||
{
|
||||
|
@ -421,45 +342,16 @@ void MWSpellEffect::updateWidgets()
|
|||
}
|
||||
}
|
||||
|
||||
void MWSpellEffect::_initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, Widget* _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name)
|
||||
{
|
||||
Base::_initialise(_style, _coord, _align, _info, _parent, _croppedParent, _creator, _name);
|
||||
|
||||
initialiseWidgetSkin(_info);
|
||||
}
|
||||
|
||||
MWSpellEffect::~MWSpellEffect()
|
||||
{
|
||||
shutdownWidgetSkin();
|
||||
}
|
||||
|
||||
void MWSpellEffect::baseChangeWidgetSkin(ResourceSkin* _info)
|
||||
void MWSpellEffect::initialiseOverride()
|
||||
{
|
||||
shutdownWidgetSkin();
|
||||
Base::baseChangeWidgetSkin(_info);
|
||||
initialiseWidgetSkin(_info);
|
||||
}
|
||||
Base::initialiseOverride();
|
||||
|
||||
void MWSpellEffect::initialiseWidgetSkin(ResourceSkin* _info)
|
||||
{
|
||||
for (VectorWidgetPtr::iterator iter=mWidgetChildSkin.begin(); iter!=mWidgetChildSkin.end(); ++iter)
|
||||
{
|
||||
const std::string &name = *(*iter)->_getInternalData<std::string>();
|
||||
if (name == "Text")
|
||||
{
|
||||
MYGUI_DEBUG_ASSERT( ! textWidget, "widget already assigned");
|
||||
textWidget = (*iter)->castType<StaticText>();
|
||||
}
|
||||
else if (name == "Image")
|
||||
{
|
||||
MYGUI_DEBUG_ASSERT( ! imageWidget, "widget already assigned");
|
||||
imageWidget = (*iter)->castType<StaticImage>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MWSpellEffect::shutdownWidgetSkin()
|
||||
{
|
||||
assignWidget(textWidget, "Text");
|
||||
assignWidget(imageWidget, "Image");
|
||||
}
|
||||
|
||||
/* MWDynamicStat */
|
||||
|
@ -491,60 +383,27 @@ void MWDynamicStat::setValue(int cur, int max_)
|
|||
{
|
||||
std::stringstream out;
|
||||
out << value << "/" << max;
|
||||
barTextWidget->setCaption(out.str().c_str());
|
||||
static_cast<MyGUI::TextBox*>(barTextWidget)->setCaption(out.str().c_str());
|
||||
}
|
||||
else
|
||||
barTextWidget->setCaption("");
|
||||
static_cast<MyGUI::TextBox*>(barTextWidget)->setCaption("");
|
||||
}
|
||||
}
|
||||
void MWDynamicStat::setTitle(const std::string text)
|
||||
{
|
||||
if (textWidget)
|
||||
textWidget->setCaption(text);
|
||||
}
|
||||
|
||||
void MWDynamicStat::_initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, Widget* _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name)
|
||||
{
|
||||
Base::_initialise(_style, _coord, _align, _info, _parent, _croppedParent, _creator, _name);
|
||||
|
||||
initialiseWidgetSkin(_info);
|
||||
static_cast<MyGUI::TextBox*>(textWidget)->setCaption(text);
|
||||
}
|
||||
|
||||
MWDynamicStat::~MWDynamicStat()
|
||||
{
|
||||
shutdownWidgetSkin();
|
||||
}
|
||||
|
||||
void MWDynamicStat::baseChangeWidgetSkin(ResourceSkin* _info)
|
||||
void MWDynamicStat::initialiseOverride()
|
||||
{
|
||||
shutdownWidgetSkin();
|
||||
Base::baseChangeWidgetSkin(_info);
|
||||
initialiseWidgetSkin(_info);
|
||||
}
|
||||
Base::initialiseOverride();
|
||||
|
||||
void MWDynamicStat::initialiseWidgetSkin(ResourceSkin* _info)
|
||||
{
|
||||
for (VectorWidgetPtr::iterator iter=mWidgetChildSkin.begin(); iter!=mWidgetChildSkin.end(); ++iter)
|
||||
{
|
||||
const std::string &name = *(*iter)->_getInternalData<std::string>();
|
||||
if (name == "Text")
|
||||
{
|
||||
MYGUI_DEBUG_ASSERT( ! textWidget, "widget already assigned");
|
||||
textWidget = (*iter)->castType<StaticText>();
|
||||
}
|
||||
else if (name == "Bar")
|
||||
{
|
||||
MYGUI_DEBUG_ASSERT( ! barWidget, "widget already assigned");
|
||||
barWidget = (*iter)->castType<Progress>();
|
||||
}
|
||||
else if (name == "BarText")
|
||||
{
|
||||
MYGUI_DEBUG_ASSERT( ! barTextWidget, "widget already assigned");
|
||||
barTextWidget = (*iter)->castType<StaticText>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MWDynamicStat::shutdownWidgetSkin()
|
||||
{
|
||||
assignWidget(textWidget, "Text");
|
||||
assignWidget(barWidget, "Bar");
|
||||
assignWidget(barTextWidget, "BarText");
|
||||
}
|
||||
|
|
|
@ -38,26 +38,21 @@ namespace MWGui
|
|||
const SkillValue& getSkillValue() const { return value; }
|
||||
|
||||
// Events
|
||||
typedef delegates::CDelegate1<MWSkill*> EventHandle_SkillVoid;
|
||||
typedef delegates::CMultiDelegate1<MWSkill*> EventHandle_SkillVoid;
|
||||
|
||||
/** Event : Skill clicked.\n
|
||||
signature : void method(MWSkill* _sender)\n
|
||||
*/
|
||||
EventHandle_SkillVoid eventClicked;
|
||||
|
||||
/*internal:*/
|
||||
virtual void _initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, Widget* _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name);
|
||||
|
||||
protected:
|
||||
virtual ~MWSkill();
|
||||
|
||||
void baseChangeWidgetSkin(ResourceSkin* _info);
|
||||
virtual void initialiseOverride();
|
||||
|
||||
void onClicked(MyGUI::Widget* _sender);
|
||||
|
||||
private:
|
||||
void initialiseWidgetSkin(ResourceSkin* _info);
|
||||
void shutdownWidgetSkin();
|
||||
|
||||
void updateWidgets();
|
||||
|
||||
|
@ -85,26 +80,21 @@ namespace MWGui
|
|||
const AttributeValue& getAttributeValue() const { return value; }
|
||||
|
||||
// Events
|
||||
typedef delegates::CDelegate1<MWAttribute*> EventHandle_AttributeVoid;
|
||||
typedef delegates::CMultiDelegate1<MWAttribute*> EventHandle_AttributeVoid;
|
||||
|
||||
/** Event : Attribute clicked.\n
|
||||
signature : void method(MWAttribute* _sender)\n
|
||||
*/
|
||||
EventHandle_AttributeVoid eventClicked;
|
||||
|
||||
/*internal:*/
|
||||
virtual void _initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, Widget* _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name);
|
||||
|
||||
protected:
|
||||
virtual ~MWAttribute();
|
||||
|
||||
void baseChangeWidgetSkin(ResourceSkin* _info);
|
||||
virtual void initialiseOverride();
|
||||
|
||||
void onClicked(MyGUI::Widget* _sender);
|
||||
|
||||
private:
|
||||
void initialiseWidgetSkin(ResourceSkin* _info);
|
||||
void shutdownWidgetSkin();
|
||||
|
||||
void updateWidgets();
|
||||
|
||||
|
@ -130,23 +120,17 @@ namespace MWGui
|
|||
|
||||
const std::string &getSpellId() const { return id; }
|
||||
|
||||
/*internal:*/
|
||||
virtual void _initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, Widget* _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name);
|
||||
|
||||
protected:
|
||||
virtual ~MWSpell();
|
||||
|
||||
void baseChangeWidgetSkin(ResourceSkin* _info);
|
||||
virtual void initialiseOverride();
|
||||
|
||||
private:
|
||||
void initialiseWidgetSkin(ResourceSkin* _info);
|
||||
void shutdownWidgetSkin();
|
||||
|
||||
void updateWidgets();
|
||||
|
||||
WindowManager* mWindowManager;
|
||||
std::string id;
|
||||
MyGUI::StaticTextPtr spellNameWidget;
|
||||
MyGUI::TextBox* spellNameWidget;
|
||||
};
|
||||
typedef MWSpell* MWSpellPtr;
|
||||
|
||||
|
@ -163,24 +147,19 @@ namespace MWGui
|
|||
|
||||
const SpellEffectValue &getSpellEffect() const { return effect; }
|
||||
|
||||
/*internal:*/
|
||||
virtual void _initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, Widget* _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name);
|
||||
|
||||
protected:
|
||||
virtual ~MWSpellEffect();
|
||||
|
||||
void baseChangeWidgetSkin(ResourceSkin* _info);
|
||||
virtual void initialiseOverride();
|
||||
|
||||
private:
|
||||
void initialiseWidgetSkin(ResourceSkin* _info);
|
||||
void shutdownWidgetSkin();
|
||||
|
||||
void updateWidgets();
|
||||
|
||||
WindowManager* mWindowManager;
|
||||
SpellEffectValue effect;
|
||||
MyGUI::StaticImagePtr imageWidget;
|
||||
MyGUI::StaticTextPtr textWidget;
|
||||
MyGUI::ImageBox* imageWidget;
|
||||
MyGUI::TextBox* textWidget;
|
||||
};
|
||||
typedef MWSpellEffect* MWSpellEffectPtr;
|
||||
|
||||
|
@ -196,22 +175,17 @@ namespace MWGui
|
|||
int getValue() const { return value; }
|
||||
int getMax() const { return max; }
|
||||
|
||||
/*internal:*/
|
||||
virtual void _initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, Widget* _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name);
|
||||
|
||||
protected:
|
||||
virtual ~MWDynamicStat();
|
||||
|
||||
void baseChangeWidgetSkin(ResourceSkin* _info);
|
||||
virtual void initialiseOverride();
|
||||
|
||||
private:
|
||||
void initialiseWidgetSkin(ResourceSkin* _info);
|
||||
void shutdownWidgetSkin();
|
||||
|
||||
int value, max;
|
||||
MyGUI::StaticTextPtr textWidget;
|
||||
MyGUI::TextBox* textWidget;
|
||||
MyGUI::ProgressPtr barWidget;
|
||||
MyGUI::StaticTextPtr barTextWidget;
|
||||
MyGUI::TextBox* barTextWidget;
|
||||
};
|
||||
typedef MWDynamicStat* MWDynamicStatPtr;
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ void WindowBase::open()
|
|||
void WindowBase::center()
|
||||
{
|
||||
// Centre dialog
|
||||
MyGUI::IntSize gameWindowSize = mWindowManager.getGui()->getViewSize();
|
||||
MyGUI::IntSize gameWindowSize = MyGUI::RenderManager::getInstance().getViewSize();
|
||||
MyGUI::IntCoord coord = mMainWidget->getCoord();
|
||||
coord.left = (gameWindowSize.width - coord.width)/2;
|
||||
coord.top = (gameWindowSize.height - coord.height)/2;
|
||||
|
|
|
@ -13,7 +13,7 @@ namespace MWGui
|
|||
WindowBase(const std::string& parLayout, WindowManager& parWindowManager);
|
||||
|
||||
// Events
|
||||
typedef MyGUI::delegates::CDelegate1<WindowBase*> EventHandle_WindowBase;
|
||||
typedef MyGUI::delegates::CMultiDelegate1<WindowBase*> EventHandle_WindowBase;
|
||||
|
||||
virtual void open();
|
||||
void center();
|
||||
|
|
|
@ -37,12 +37,12 @@ WindowManager::WindowManager(MWWorld::Environment& environment,
|
|||
gui = mGuiManager->getGui();
|
||||
|
||||
//Register own widgets with MyGUI
|
||||
MyGUI::FactoryManager::getInstance().registerFactory<DialogeHistory>("Widget");
|
||||
MyGUI::FactoryManager::getInstance().registerFactory<DialogueHistory>("Widget");
|
||||
|
||||
// Get size info from the Gui object
|
||||
assert(gui);
|
||||
int w = gui->getViewSize().width;
|
||||
int h = gui->getViewSize().height;
|
||||
int w = MyGUI::RenderManager::getInstance().getViewSize().width;
|
||||
int h = MyGUI::RenderManager::getInstance().getViewSize().height;
|
||||
|
||||
hud = new HUD(w,h, showFPSLevel);
|
||||
menu = new MainMenu(w,h);
|
||||
|
@ -51,6 +51,7 @@ WindowManager::WindowManager(MWWorld::Environment& environment,
|
|||
console = new Console(w,h, environment, extensions);
|
||||
mJournal = new JournalWindow(*this);
|
||||
mMessageBoxManager = new MessageBoxManager(this);
|
||||
dialogueWindow = new DialogueWindow(*this,environment);
|
||||
|
||||
// The HUD is always on
|
||||
hud->setVisible(true);
|
||||
|
@ -149,9 +150,10 @@ void WindowManager::updateVisible()
|
|||
stats->setVisible(false);
|
||||
console->disable();
|
||||
mJournal->setVisible(false);
|
||||
dialogueWindow->setVisible(false);
|
||||
|
||||
// Mouse is visible whenever we're not in game mode
|
||||
gui->setVisiblePointer(isGuiMode());
|
||||
MyGUI::PointerManager::getInstance().setVisible(isGuiMode());
|
||||
|
||||
// If in game mode, don't show anything.
|
||||
if(mode == GM_Game) //Use a switch/case structure
|
||||
|
@ -195,11 +197,6 @@ void WindowManager::updateVisible()
|
|||
|
||||
if (mode == GM_Dialogue)
|
||||
{
|
||||
if (!dialogueWindow)
|
||||
{
|
||||
dialogueWindow = new DialogueWindow(*this);
|
||||
dialogueWindow->eventBye = MyGUI::newDelegate(this, &WindowManager::onDialogueWindowBye);
|
||||
}
|
||||
dialogueWindow->open();
|
||||
return;
|
||||
}
|
||||
|
@ -349,6 +346,7 @@ void WindowManager::updateSkillArea()
|
|||
|
||||
void WindowManager::removeDialog(OEngine::GUI::Layout*dialog)
|
||||
{
|
||||
std::cout << "dialogue a la poubelle";
|
||||
assert(dialog);
|
||||
if (!dialog)
|
||||
return;
|
||||
|
@ -387,7 +385,8 @@ void WindowManager::onDialogueWindowBye()
|
|||
if (dialogueWindow)
|
||||
{
|
||||
//FIXME set some state and stuff?
|
||||
removeDialog(dialogueWindow);
|
||||
//removeDialog(dialogueWindow);
|
||||
dialogueWindow->setVisible(false);
|
||||
}
|
||||
setGuiMode(GM_Game);
|
||||
}
|
||||
|
|
|
@ -125,6 +125,8 @@ namespace MWGui
|
|||
updateVisible();
|
||||
}
|
||||
|
||||
MWGui::DialogueWindow* getDialogueWindow() {return dialogueWindow;}
|
||||
|
||||
MyGUI::Gui* getGui() const { return gui; }
|
||||
|
||||
void wmUpdateFps(float fps, size_t triangleCount, size_t batchCount)
|
||||
|
|
|
@ -51,7 +51,7 @@ RenderingManager::RenderingManager (OEngine::Render::OgreRenderer& _rend, const
|
|||
cameraPitchNode->attachObject(mRendering.getCamera());
|
||||
|
||||
//mSkyManager = 0;
|
||||
mSkyManager = new SkyManager(mMwRoot, mRendering.getCamera());
|
||||
mSkyManager = new SkyManager(mMwRoot, mRendering.getCamera(), &environment);
|
||||
|
||||
mPlayer = new MWRender::Player (mRendering.getCamera(), playerNode);
|
||||
mSun = 0;
|
||||
|
|
|
@ -10,16 +10,12 @@
|
|||
|
||||
#include <components/nifogre/ogre_nif_loader.hpp>
|
||||
|
||||
#include "../mwworld/environment.hpp"
|
||||
#include "../mwworld/world.hpp"
|
||||
|
||||
using namespace MWRender;
|
||||
using namespace Ogre;
|
||||
|
||||
// the speed at which the clouds are animated
|
||||
#define CLOUD_SPEED 0.001
|
||||
|
||||
// this distance has to be set accordingly so that the
|
||||
// celestial bodies are behind the clouds, but in front of the atmosphere
|
||||
#define CELESTIAL_BODY_DISTANCE 1000.f
|
||||
|
||||
BillboardObject::BillboardObject( const String& textureName,
|
||||
const float initialSize,
|
||||
const Vector3& position,
|
||||
|
@ -50,7 +46,7 @@ void BillboardObject::setVisibility(const float visibility)
|
|||
void BillboardObject::setPosition(const Vector3& pPosition)
|
||||
{
|
||||
Vector3 normalised = pPosition.normalisedCopy();
|
||||
Vector3 finalPosition = normalised * CELESTIAL_BODY_DISTANCE;
|
||||
Vector3 finalPosition = normalised * 1000.f;
|
||||
|
||||
mBBSet->setCommonDirection( -normalised );
|
||||
|
||||
|
@ -85,7 +81,7 @@ void BillboardObject::init(const String& textureName,
|
|||
{
|
||||
SceneManager* sceneMgr = rootNode->getCreator();
|
||||
|
||||
Vector3 finalPosition = position.normalisedCopy() * CELESTIAL_BODY_DISTANCE;
|
||||
Vector3 finalPosition = position.normalisedCopy() * 1000.f;
|
||||
|
||||
static unsigned int bodyCount=0;
|
||||
|
||||
|
@ -296,9 +292,10 @@ void SkyManager::ModVertexAlpha(Entity* ent, unsigned int meshType)
|
|||
ent->getMesh()->getSubMesh(0)->vertexData->vertexBufferBinding->getBuffer(ves_diffuse->getSource())->unlock();
|
||||
}
|
||||
|
||||
SkyManager::SkyManager (SceneNode* pMwRoot, Camera* pCamera) :
|
||||
SkyManager::SkyManager (SceneNode* pMwRoot, Camera* pCamera, MWWorld::Environment* env) :
|
||||
mGlareFade(0), mGlareEnabled(false)
|
||||
{
|
||||
mEnvironment = env;
|
||||
mViewport = pCamera->getViewport();
|
||||
mSceneMgr = pMwRoot->getCreator();
|
||||
mRootNode = pCamera->getParentSceneNode()->createChildSceneNode();
|
||||
|
@ -312,7 +309,7 @@ SkyManager::SkyManager (SceneNode* pMwRoot, Camera* pCamera) :
|
|||
Pass* pass = material->getTechnique(0)->getPass(0);
|
||||
pass->setSceneBlending(SBT_TRANSPARENT_ALPHA);
|
||||
mThunderTextureUnit = pass->createTextureUnitState();
|
||||
mThunderTextureUnit->setColourOperationEx(LBX_SOURCE1, LBS_MANUAL, LBS_CURRENT, ColourValue(1.f, 1.f, 1.f)); // always black colour
|
||||
mThunderTextureUnit->setColourOperationEx(LBX_SOURCE1, LBS_MANUAL, LBS_CURRENT, ColourValue(1.f, 1.f, 1.f));
|
||||
mThunderTextureUnit->setAlphaOperation(LBX_SOURCE1, LBS_MANUAL, LBS_CURRENT, 0.5f);
|
||||
OverlayManager& ovm = OverlayManager::getSingleton();
|
||||
mThunderOverlay = ovm.create( "ThunderOverlay" );
|
||||
|
@ -504,7 +501,7 @@ SkyManager::SkyManager (SceneNode* pMwRoot, Camera* pCamera) :
|
|||
" uniform float4 emissive \n"
|
||||
") \n"
|
||||
"{ \n"
|
||||
" uv += float2(1,1) * time * speed * "<<CLOUD_SPEED<<"; \n" // Scroll in x,y direction
|
||||
" uv += float2(1,0) * time * speed * 0.003; \n" // Scroll in x direction
|
||||
" float4 tex = lerp(tex2D(texture, uv), tex2D(secondTexture, uv), transitionFactor); \n"
|
||||
" oColor = color * float4(emissive.xyz,1) * tex * float4(1,1,1,opacity); \n"
|
||||
"}";
|
||||
|
@ -558,7 +555,7 @@ void SkyManager::update(float duration)
|
|||
if (!mEnabled) return;
|
||||
|
||||
// UV Scroll the clouds
|
||||
mCloudMaterial->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstantFromTime("time", 1);
|
||||
mCloudMaterial->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstantFromTime("time", mEnvironment->mWorld->getTimeScaleFactor()/30.f);
|
||||
|
||||
/// \todo improve this
|
||||
mMasser->setPhase( static_cast<Moon::Phase>( (int) ((mDay % 32)/4.f)) );
|
||||
|
@ -594,8 +591,8 @@ void SkyManager::update(float duration)
|
|||
mMasser->setVisible(mMasserEnabled);
|
||||
mSecunda->setVisible(mSecundaEnabled);
|
||||
|
||||
// rotate the whole sky by 360 degrees every 4 days
|
||||
mRootNode->roll(Degree(mHourDiff*360/96.f));
|
||||
// rotate the stars by 360 degrees every 4 days
|
||||
mAtmosphereNight->roll(Degree(mEnvironment->mWorld->getTimeScaleFactor()*duration*360 / (3600*96.f)));
|
||||
}
|
||||
|
||||
void SkyManager::enable()
|
||||
|
@ -692,6 +689,7 @@ void SkyManager::setWeather(const MWWorld::WeatherResult& weather)
|
|||
strength = 1.f;
|
||||
|
||||
mSunGlare->setVisibility(weather.mGlareView * strength);
|
||||
mSun->setVisibility(strength);
|
||||
|
||||
mAtmosphereNight->setVisible(weather.mNight && mEnabled);
|
||||
}
|
||||
|
@ -775,9 +773,6 @@ void SkyManager::setSecundaFade(const float fade)
|
|||
|
||||
void SkyManager::setHour(double hour)
|
||||
{
|
||||
mHourDiff = mHour - hour;
|
||||
if (mHourDiff > 0) mHourDiff -= 24;
|
||||
|
||||
mHour = hour;
|
||||
}
|
||||
|
||||
|
|
|
@ -107,7 +107,7 @@ namespace MWRender
|
|||
class SkyManager
|
||||
{
|
||||
public:
|
||||
SkyManager(Ogre::SceneNode* pMwRoot, Ogre::Camera* pCamera);
|
||||
SkyManager(Ogre::SceneNode* pMwRoot, Ogre::Camera* pCamera, MWWorld::Environment* env);
|
||||
~SkyManager();
|
||||
|
||||
void update(float duration);
|
||||
|
@ -164,12 +164,11 @@ namespace MWRender
|
|||
Ogre::Vector3 getRealSunPos();
|
||||
|
||||
private:
|
||||
MWWorld::Environment* mEnvironment;
|
||||
float mHour;
|
||||
int mDay;
|
||||
int mMonth;
|
||||
|
||||
float mHourDiff;
|
||||
|
||||
BillboardObject* mSun;
|
||||
BillboardObject* mSunGlare;
|
||||
Moon* mMasser;
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include <components/interpreter/opcodes.hpp>
|
||||
|
||||
#include "../mwdialogue/journal.hpp"
|
||||
#include "../mwdialogue/dialoguemanager.hpp"
|
||||
|
||||
#include "interpretercontext.hpp"
|
||||
|
||||
|
@ -72,15 +73,62 @@ namespace MWScript
|
|||
}
|
||||
};
|
||||
|
||||
class OpAddTopic : public Interpreter::Opcode0
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void execute (Interpreter::Runtime& runtime)
|
||||
{
|
||||
MWScript::InterpreterContext& context
|
||||
= static_cast<MWScript::InterpreterContext&> (runtime.getContext());
|
||||
|
||||
std::string topic = runtime.getStringLiteral (runtime[0].mInteger);
|
||||
runtime.pop();
|
||||
|
||||
context.getEnvironment().mDialogueManager->addTopic(topic);
|
||||
}
|
||||
};
|
||||
|
||||
class OpChoice : public Interpreter::Opcode1
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void execute (Interpreter::Runtime& runtime, unsigned int arg0)
|
||||
{
|
||||
MWScript::InterpreterContext& context
|
||||
= static_cast<MWScript::InterpreterContext&> (runtime.getContext());
|
||||
MWDialogue::DialogueManager* dialogue = context.getEnvironment().mDialogueManager;
|
||||
while(arg0>0)
|
||||
{
|
||||
std::string question = runtime.getStringLiteral (runtime[0].mInteger);
|
||||
runtime.pop();
|
||||
arg0 = arg0 -1;
|
||||
Interpreter::Type_Integer choice = 1;
|
||||
if(arg0>0)
|
||||
{
|
||||
choice = runtime[0].mInteger;
|
||||
runtime.pop();
|
||||
arg0 = arg0 -1;
|
||||
}
|
||||
dialogue->askQuestion(question,choice);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
const int opcodeJournal = 0x2000133;
|
||||
const int opcodeSetJournalIndex = 0x2000134;
|
||||
const int opcodeGetJournalIndex = 0x2000135;
|
||||
const int opcodeAddTopic = 0x200013a;
|
||||
const int opcodeChoice = 0x2000a;
|
||||
|
||||
void registerExtensions (Compiler::Extensions& extensions)
|
||||
{
|
||||
extensions.registerInstruction ("journal", "cl", opcodeJournal);
|
||||
extensions.registerInstruction ("setjournalindex", "cl", opcodeSetJournalIndex);
|
||||
extensions.registerFunction ("getjournalindex", 'l', "c", opcodeGetJournalIndex);
|
||||
extensions.registerInstruction ("addtopic", "S" , opcodeAddTopic);
|
||||
extensions.registerInstruction ("choice", "/SlSlSlSlSlSlSlSlSlSlSlSlSlSlSlSl", opcodeChoice);
|
||||
}
|
||||
|
||||
void installOpcodes (Interpreter::Interpreter& interpreter)
|
||||
|
@ -88,6 +136,8 @@ namespace MWScript
|
|||
interpreter.installSegment5 (opcodeJournal, new OpJournal);
|
||||
interpreter.installSegment5 (opcodeSetJournalIndex, new OpSetJournalIndex);
|
||||
interpreter.installSegment5 (opcodeGetJournalIndex, new OpGetJournalIndex);
|
||||
interpreter.installSegment5 (opcodeAddTopic, new OpAddTopic);
|
||||
interpreter.installSegment3 (opcodeChoice,new OpChoice);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,8 @@ op 0x20006: PlayAnim
|
|||
op 0x20007: PlayAnim, explicit reference
|
||||
op 0x20008: LoopAnim
|
||||
op 0x20009: LoopAnim, explicit reference
|
||||
opcodes 0x2000a-0x3ffff unused
|
||||
op 0x2000a: Choice
|
||||
opcodes 0x2000b-0x3ffff unused
|
||||
|
||||
Segment 4:
|
||||
(not implemented yet)
|
||||
|
@ -115,6 +116,7 @@ op 0x2000136: GetPCCell
|
|||
op 0x2000137: GetButtonPressed
|
||||
op 0x2000138: SkipAnim
|
||||
op 0x2000139: SkipAnim, expplicit reference
|
||||
op 0x200013a: AddTopic
|
||||
op 0x200013b: twf
|
||||
op 0x200013c: FadeIn
|
||||
op 0x200013d: FadeOut
|
||||
|
|
|
@ -63,7 +63,7 @@ namespace MWScript
|
|||
{
|
||||
std::vector<Interpreter::Type_Code> code;
|
||||
mParser.getCode (code);
|
||||
mScripts.insert (std::make_pair (name, code));
|
||||
mScripts.insert (std::make_pair (name, std::make_pair (code, mParser.getLocals())));
|
||||
|
||||
// TODO sanity check on generated locals
|
||||
|
||||
|
@ -77,8 +77,7 @@ namespace MWScript
|
|||
void ScriptManager::run (const std::string& name, Interpreter::Context& interpreterContext)
|
||||
{
|
||||
// compile script
|
||||
std::map<std::string, std::vector<Interpreter::Type_Code> >::iterator iter =
|
||||
mScripts.find (name);
|
||||
ScriptCollection::iterator iter = mScripts.find (name);
|
||||
|
||||
if (iter==mScripts.end())
|
||||
{
|
||||
|
@ -86,7 +85,7 @@ namespace MWScript
|
|||
{
|
||||
// failed -> ignore script from now on.
|
||||
std::vector<Interpreter::Type_Code> empty;
|
||||
mScripts.insert (std::make_pair (name, empty));
|
||||
mScripts.insert (std::make_pair (name, std::make_pair (empty, Compiler::Locals())));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -95,7 +94,7 @@ namespace MWScript
|
|||
}
|
||||
|
||||
// execute script
|
||||
if (!iter->second.empty())
|
||||
if (!iter->second.first.empty())
|
||||
try
|
||||
{
|
||||
if (!mOpcodesInstalled)
|
||||
|
@ -104,7 +103,7 @@ namespace MWScript
|
|||
mOpcodesInstalled = true;
|
||||
}
|
||||
|
||||
mInterpreter.run (&iter->second[0], iter->second.size(), interpreterContext);
|
||||
mInterpreter.run (&iter->second.first[0], iter->second.first.size(), interpreterContext);
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
|
@ -113,7 +112,7 @@ namespace MWScript
|
|||
if (mVerbose)
|
||||
std::cerr << "(" << e.what() << ")" << std::endl;
|
||||
|
||||
iter->second.clear(); // don't execute again.
|
||||
iter->second.first.clear(); // don't execute again.
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -132,4 +131,24 @@ namespace MWScript
|
|||
|
||||
return std::make_pair (count, success);
|
||||
}
|
||||
|
||||
Compiler::Locals& ScriptManager::getLocals (const std::string& name)
|
||||
{
|
||||
ScriptCollection::iterator iter = mScripts.find (name);
|
||||
|
||||
if (iter==mScripts.end())
|
||||
{
|
||||
if (!compile (name))
|
||||
{
|
||||
// failed -> ignore script from now on.
|
||||
std::vector<Interpreter::Type_Code> empty;
|
||||
mScripts.insert (std::make_pair (name, std::make_pair (empty, Compiler::Locals())));
|
||||
throw std::runtime_error ("failed to compile script " + name);
|
||||
}
|
||||
|
||||
iter = mScripts.find (name);
|
||||
}
|
||||
|
||||
return iter->second.second;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,7 +39,11 @@ namespace MWScript
|
|||
Interpreter::Interpreter mInterpreter;
|
||||
bool mOpcodesInstalled;
|
||||
|
||||
std::map<std::string, std::vector<Interpreter::Type_Code> > mScripts;
|
||||
typedef std::pair<std::vector<Interpreter::Type_Code>, Compiler::Locals> CompiledScript;
|
||||
typedef std::map<std::string, CompiledScript> ScriptCollection;
|
||||
|
||||
|
||||
ScriptCollection mScripts;
|
||||
|
||||
public:
|
||||
|
||||
|
@ -56,6 +60,9 @@ namespace MWScript
|
|||
std::pair<int, int> compileAll();
|
||||
///< Compile all scripts
|
||||
/// \return count, success
|
||||
|
||||
Compiler::Locals& getLocals (const std::string& name);
|
||||
///< Return locals for script \a name.
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -67,6 +67,7 @@ namespace MWSound
|
|||
, updater(mgr)
|
||||
, cameraTracker(mgr)
|
||||
, mCurrentPlaylist(NULL)
|
||||
, mUsingSound(useSound)
|
||||
{
|
||||
if(useSound)
|
||||
{
|
||||
|
@ -104,10 +105,13 @@ namespace MWSound
|
|||
}
|
||||
|
||||
SoundManager::~SoundManager()
|
||||
{
|
||||
if(mUsingSound)
|
||||
{
|
||||
Ogre::Root::getSingleton().removeFrameListener(&updater);
|
||||
cameraTracker.unfollowCamera();
|
||||
}
|
||||
}
|
||||
|
||||
// Convert a soundId to file name, and modify the volume
|
||||
// according to the sounds local volume setting, minRange and
|
||||
|
@ -354,6 +358,9 @@ namespace MWSound
|
|||
|
||||
void SoundManager::playPlaylist(std::string playlist)
|
||||
{
|
||||
if (!mUsingSound)
|
||||
return;
|
||||
|
||||
if (playlist == "")
|
||||
{
|
||||
if(!isMusicPlaying())
|
||||
|
@ -375,6 +382,9 @@ namespace MWSound
|
|||
|
||||
void SoundManager::say (MWWorld::Ptr ptr, const std::string& filename)
|
||||
{
|
||||
if (!mUsingSound)
|
||||
return;
|
||||
|
||||
// The range values are not tested
|
||||
std::string filePath = Files::FileListLocator(mSoundFiles, filename, mFSStrict, true);
|
||||
if(!filePath.empty())
|
||||
|
|
|
@ -82,6 +82,8 @@ namespace MWSound
|
|||
|
||||
IDMap mLoopedSounds;
|
||||
|
||||
bool mUsingSound;
|
||||
|
||||
std::string lookup(const std::string &soundId,
|
||||
float &volume, float &min, float &max);
|
||||
void add(const std::string &file,
|
||||
|
|
|
@ -8,6 +8,29 @@
|
|||
#include <components/esm/loadcont.hpp>
|
||||
|
||||
#include "manualref.hpp"
|
||||
#include "refdata.hpp"
|
||||
|
||||
namespace
|
||||
{
|
||||
template<typename T>
|
||||
float getTotalWeight (const ESMS::CellRefList<T, MWWorld::RefData>& cellRefList)
|
||||
{
|
||||
float sum = 0;
|
||||
|
||||
for (typename ESMS::CellRefList<T, MWWorld::RefData>::List::const_iterator iter (
|
||||
cellRefList.list.begin());
|
||||
iter!=cellRefList.list.end();
|
||||
++iter)
|
||||
{
|
||||
if (iter->mData.getCount()>0)
|
||||
sum += iter->mData.getCount()*iter->base->data.weight;
|
||||
}
|
||||
|
||||
return sum;
|
||||
}
|
||||
}
|
||||
|
||||
MWWorld::ContainerStore::ContainerStore() : mStateId (0), mCachedWeight (0), mWeightUpToDate (false) {}
|
||||
|
||||
MWWorld::ContainerStore::~ContainerStore() {}
|
||||
|
||||
|
@ -40,6 +63,8 @@ void MWWorld::ContainerStore::add (const Ptr& ptr)
|
|||
case Type_Repair: repairs.list.push_back (*ptr.get<ESM::Repair>()); break;
|
||||
case Type_Weapon: weapons.list.push_back (*ptr.get<ESM::Weapon>()); break;
|
||||
}
|
||||
|
||||
flagAsModified();
|
||||
}
|
||||
|
||||
void MWWorld::ContainerStore::fill (const ESM::InventoryList& items, const ESMS::ESMStore& store)
|
||||
|
@ -58,6 +83,8 @@ void MWWorld::ContainerStore::fill (const ESM::InventoryList& items, const ESMS:
|
|||
ref.getPtr().getRefData().setCount (iter->count);
|
||||
add (ref.getPtr());
|
||||
}
|
||||
|
||||
flagAsModified();
|
||||
}
|
||||
|
||||
void MWWorld::ContainerStore::clear()
|
||||
|
@ -74,6 +101,44 @@ void MWWorld::ContainerStore::clear()
|
|||
probes.list.clear();
|
||||
repairs.list.clear();
|
||||
weapons.list.clear();
|
||||
|
||||
flagAsModified();
|
||||
}
|
||||
|
||||
void MWWorld::ContainerStore::flagAsModified()
|
||||
{
|
||||
++mStateId;
|
||||
mWeightUpToDate = false;
|
||||
}
|
||||
|
||||
int MWWorld::ContainerStore::getStateId() const
|
||||
{
|
||||
return mStateId;
|
||||
}
|
||||
|
||||
float MWWorld::ContainerStore::getWeight() const
|
||||
{
|
||||
if (!mWeightUpToDate)
|
||||
{
|
||||
mCachedWeight = 0;
|
||||
|
||||
mCachedWeight += getTotalWeight (potions);
|
||||
mCachedWeight += getTotalWeight (appas);
|
||||
mCachedWeight += getTotalWeight (armors);
|
||||
mCachedWeight += getTotalWeight (books);
|
||||
mCachedWeight += getTotalWeight (clothes);
|
||||
mCachedWeight += getTotalWeight (ingreds);
|
||||
mCachedWeight += getTotalWeight (lights);
|
||||
mCachedWeight += getTotalWeight (lockpicks);
|
||||
mCachedWeight += getTotalWeight (miscItems);
|
||||
mCachedWeight += getTotalWeight (probes);
|
||||
mCachedWeight += getTotalWeight (repairs);
|
||||
mCachedWeight += getTotalWeight (weapons);
|
||||
|
||||
mWeightUpToDate = true;
|
||||
}
|
||||
|
||||
return mCachedWeight;
|
||||
}
|
||||
|
||||
int MWWorld::ContainerStore::getType (const Ptr& ptr)
|
||||
|
@ -301,23 +366,30 @@ MWWorld::Ptr *MWWorld::ContainerStoreIterator::operator->() const
|
|||
|
||||
MWWorld::Ptr MWWorld::ContainerStoreIterator::operator*() const
|
||||
{
|
||||
Ptr ptr;
|
||||
|
||||
switch (mType)
|
||||
{
|
||||
case ContainerStore::Type_Potion: return MWWorld::Ptr (&*mPotion, 0);
|
||||
case ContainerStore::Type_Apparatus: return MWWorld::Ptr (&*mApparatus, 0);
|
||||
case ContainerStore::Type_Armor: return MWWorld::Ptr (&*mArmor, 0);
|
||||
case ContainerStore::Type_Book: return MWWorld::Ptr (&*mBook, 0);
|
||||
case ContainerStore::Type_Clothing: return MWWorld::Ptr (&*mClothing, 0);
|
||||
case ContainerStore::Type_Ingredient: return MWWorld::Ptr (&*mIngredient, 0);
|
||||
case ContainerStore::Type_Light: return MWWorld::Ptr (&*mLight, 0);
|
||||
case ContainerStore::Type_Lockpick: return MWWorld::Ptr (&*mLockpick, 0);
|
||||
case ContainerStore::Type_Miscellaneous: return MWWorld::Ptr (&*mMiscellaneous, 0);
|
||||
case ContainerStore::Type_Probe: return MWWorld::Ptr (&*mProbe, 0);
|
||||
case ContainerStore::Type_Repair: return MWWorld::Ptr (&*mRepair, 0);
|
||||
case ContainerStore::Type_Weapon: return MWWorld::Ptr (&*mWeapon, 0);
|
||||
case ContainerStore::Type_Potion: ptr = MWWorld::Ptr (&*mPotion, 0); break;
|
||||
case ContainerStore::Type_Apparatus: ptr = MWWorld::Ptr (&*mApparatus, 0); break;
|
||||
case ContainerStore::Type_Armor: ptr = MWWorld::Ptr (&*mArmor, 0); break;
|
||||
case ContainerStore::Type_Book: ptr = MWWorld::Ptr (&*mBook, 0); break;
|
||||
case ContainerStore::Type_Clothing: ptr = MWWorld::Ptr (&*mClothing, 0); break;
|
||||
case ContainerStore::Type_Ingredient: ptr = MWWorld::Ptr (&*mIngredient, 0); break;
|
||||
case ContainerStore::Type_Light: ptr = MWWorld::Ptr (&*mLight, 0); break;
|
||||
case ContainerStore::Type_Lockpick: ptr = MWWorld::Ptr (&*mLockpick, 0); break;
|
||||
case ContainerStore::Type_Miscellaneous: ptr = MWWorld::Ptr (&*mMiscellaneous, 0); break;
|
||||
case ContainerStore::Type_Probe: ptr = MWWorld::Ptr (&*mProbe, 0); break;
|
||||
case ContainerStore::Type_Repair: ptr = MWWorld::Ptr (&*mRepair, 0); break;
|
||||
case ContainerStore::Type_Weapon: ptr = MWWorld::Ptr (&*mWeapon, 0); break;
|
||||
}
|
||||
|
||||
throw std::runtime_error ("invalid pointer");
|
||||
if (ptr.isEmpty())
|
||||
throw std::runtime_error ("invalid iterator");
|
||||
|
||||
ptr.setContainerStore (mContainer);
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
MWWorld::ContainerStoreIterator& MWWorld::ContainerStoreIterator::operator++()
|
||||
|
|
|
@ -52,9 +52,14 @@ namespace MWWorld
|
|||
ESMS::CellRefList<ESM::Probe, RefData> probes;
|
||||
ESMS::CellRefList<ESM::Repair, RefData> repairs;
|
||||
ESMS::CellRefList<ESM::Weapon, RefData> weapons;
|
||||
int mStateId;
|
||||
mutable float mCachedWeight;
|
||||
mutable bool mWeightUpToDate;
|
||||
|
||||
public:
|
||||
|
||||
ContainerStore();
|
||||
|
||||
virtual ~ContainerStore();
|
||||
|
||||
ContainerStoreIterator begin (int mask = Type_All);
|
||||
|
@ -75,6 +80,18 @@ namespace MWWorld
|
|||
void clear();
|
||||
///< Empty container.
|
||||
|
||||
void flagAsModified();
|
||||
///< \attention This function is internal to the world model and should not be called from
|
||||
/// outside.
|
||||
|
||||
int getStateId() const;
|
||||
///< This ID is changed every time the container is modified or items in the container
|
||||
/// are accessed in a way that may be used to modify the item.
|
||||
/// \note This method of change-tracking will ocasionally yield false positives.
|
||||
|
||||
float getWeight() const;
|
||||
///< Return total weight of the items contained in *this.
|
||||
|
||||
static int getType (const Ptr& ptr);
|
||||
///< This function throws an exception, if ptr does not point to an object, that can be
|
||||
/// put into a container.
|
||||
|
|
|
@ -9,6 +9,7 @@ namespace MWSound
|
|||
namespace MWScript
|
||||
{
|
||||
class GlobalScripts;
|
||||
class ScriptManager;
|
||||
}
|
||||
|
||||
namespace MWGui
|
||||
|
@ -41,7 +42,7 @@ namespace MWWorld
|
|||
{
|
||||
public:
|
||||
Environment()
|
||||
: mWorld (0), mSoundManager (0), mGlobalScripts (0), mWindowManager (0),
|
||||
: mWorld (0), mSoundManager (0), mGlobalScripts (0), mScriptManager (0), mWindowManager (0),
|
||||
mMechanicsManager (0), mDialogueManager (0), mJournal (0), mFrameDuration (0),
|
||||
mInputManager (0)
|
||||
{}
|
||||
|
@ -49,6 +50,7 @@ namespace MWWorld
|
|||
World *mWorld;
|
||||
MWSound::SoundManager *mSoundManager;
|
||||
MWScript::GlobalScripts *mGlobalScripts;
|
||||
MWScript::ScriptManager *mScriptManager;
|
||||
MWGui::WindowManager *mWindowManager;
|
||||
MWMechanics::MechanicsManager *mMechanicsManager;
|
||||
MWDialogue::DialogueManager *mDialogueManager;
|
||||
|
|
|
@ -65,6 +65,8 @@ void MWWorld::InventoryStore::equip (int slot, const ContainerStoreIterator& ite
|
|||
/// \todo unstack item pointed to by iterator if required)
|
||||
|
||||
mSlots[slot] = iterator;
|
||||
|
||||
flagAsModified();
|
||||
}
|
||||
|
||||
MWWorld::ContainerStoreIterator MWWorld::InventoryStore::getSlot (int slot)
|
||||
|
|
39
apps/openmw/mwworld/ptr.cpp
Normal file
39
apps/openmw/mwworld/ptr.cpp
Normal file
|
@ -0,0 +1,39 @@
|
|||
|
||||
#include "ptr.hpp"
|
||||
|
||||
#include <cassert>
|
||||
|
||||
#include "containerstore.hpp"
|
||||
|
||||
ESM::CellRef& MWWorld::Ptr::getCellRef() const
|
||||
{
|
||||
assert (mCellRef);
|
||||
|
||||
if (mContainerStore)
|
||||
mContainerStore->flagAsModified();
|
||||
|
||||
return *mCellRef;
|
||||
}
|
||||
|
||||
MWWorld::RefData& MWWorld::Ptr::getRefData() const
|
||||
{
|
||||
assert (mRefData);
|
||||
|
||||
if (mContainerStore)
|
||||
mContainerStore->flagAsModified();
|
||||
|
||||
return *mRefData;
|
||||
}
|
||||
|
||||
void MWWorld::Ptr::setContainerStore (ContainerStore *store)
|
||||
{
|
||||
assert (store);
|
||||
assert (!mCell);
|
||||
|
||||
mContainerStore = store;
|
||||
}
|
||||
|
||||
MWWorld::ContainerStore *MWWorld::Ptr::getContainerStore() const
|
||||
{
|
||||
return mContainerStore;
|
||||
}
|
|
@ -13,6 +13,8 @@
|
|||
|
||||
namespace MWWorld
|
||||
{
|
||||
class ContainerStore;
|
||||
|
||||
/// \brief Pointer to a LiveCellRef
|
||||
|
||||
class Ptr
|
||||
|
@ -26,10 +28,11 @@ namespace MWWorld
|
|||
RefData *mRefData;
|
||||
CellStore *mCell;
|
||||
std::string mTypeName;
|
||||
ContainerStore *mContainerStore;
|
||||
|
||||
public:
|
||||
|
||||
Ptr() : mCellRef (0), mRefData (0), mCell (0) {}
|
||||
Ptr() : mCellRef (0), mRefData (0), mCell (0), mContainerStore (0) {}
|
||||
|
||||
bool isEmpty() const
|
||||
{
|
||||
|
@ -49,6 +52,7 @@ namespace MWWorld
|
|||
|
||||
template<typename T>
|
||||
Ptr (ESMS::LiveCellRef<T, RefData> *liveCellRef, CellStore *cell)
|
||||
: mContainerStore (0)
|
||||
{
|
||||
mPtr = liveCellRef;
|
||||
mCellRef = &liveCellRef->ref;
|
||||
|
@ -63,23 +67,21 @@ namespace MWWorld
|
|||
return boost::any_cast<ESMS::LiveCellRef<T, RefData>*> (mPtr);
|
||||
}
|
||||
|
||||
ESM::CellRef& getCellRef() const
|
||||
{
|
||||
assert (mCellRef);
|
||||
return *mCellRef;
|
||||
}
|
||||
ESM::CellRef& getCellRef() const;
|
||||
|
||||
RefData& getRefData() const
|
||||
{
|
||||
assert (mRefData);
|
||||
return *mRefData;
|
||||
}
|
||||
RefData& getRefData() const;
|
||||
|
||||
Ptr::CellStore *getCell() const
|
||||
{
|
||||
assert (mCell);
|
||||
return mCell;
|
||||
}
|
||||
|
||||
void setContainerStore (ContainerStore *store);
|
||||
///< Must not be called on references that are in a cell.
|
||||
|
||||
ContainerStore *getContainerStore() const;
|
||||
///< May return a 0-pointer, if reference is not in a container.
|
||||
};
|
||||
|
||||
inline bool operator== (const Ptr& left, const Ptr& right)
|
||||
|
|
|
@ -21,6 +21,18 @@ const std::string WeatherGlobals::mThunderSoundID0 = "Thunder0";
|
|||
const std::string WeatherGlobals::mThunderSoundID1 = "Thunder1";
|
||||
const std::string WeatherGlobals::mThunderSoundID2 = "Thunder2";
|
||||
const std::string WeatherGlobals::mThunderSoundID3 = "Thunder3";
|
||||
const float WeatherGlobals::mSunriseTime = 8;
|
||||
const float WeatherGlobals::mSunsetTime = 18;
|
||||
const float WeatherGlobals::mSunriseDuration = 2;
|
||||
const float WeatherGlobals::mSunsetDuration = 2;
|
||||
const float WeatherGlobals::mWeatherUpdateTime = 20.f;
|
||||
|
||||
|
||||
// morrowind sets these per-weather, but since they are only used by 'thunderstorm'
|
||||
// weather setting anyway, we can just as well set them globally
|
||||
const float WeatherGlobals::mThunderFrequency = .4;
|
||||
const float WeatherGlobals::mThunderThreshold = 0.6;
|
||||
const float WeatherGlobals::mThunderSoundDelay = 0.25;
|
||||
|
||||
WeatherManager::WeatherManager(MWRender::RenderingManager* rendering, Environment* env) :
|
||||
mHour(14), mCurrentWeather("clear"), mFirstUpdate(true), mWeatherUpdateTime(0),
|
||||
|
@ -260,6 +272,7 @@ WeatherManager::WeatherManager(MWRender::RenderingManager* rendering, Environmen
|
|||
blight.mAmbientLoopSoundID = "blight";
|
||||
mWeatherSettings["blight"] = blight;
|
||||
|
||||
/*
|
||||
Weather snow;
|
||||
snow.mCloudTexture = "tx_bm_sky_snow.dds";
|
||||
snow.mCloudsMaximumPercent = 1.0;
|
||||
|
@ -316,10 +329,14 @@ WeatherManager::WeatherManager(MWRender::RenderingManager* rendering, Environmen
|
|||
blizzard.mGlareView = 0;
|
||||
blizzard.mAmbientLoopSoundID = "BM Blizzard";
|
||||
mWeatherSettings["blizzard"] = blizzard;
|
||||
*/
|
||||
}
|
||||
|
||||
void WeatherManager::setWeather(const String& weather, bool instant)
|
||||
{
|
||||
if (weather == mCurrentWeather && mNextWeather == "")
|
||||
return;
|
||||
|
||||
if (instant || mFirstUpdate)
|
||||
{
|
||||
mNextWeather = "";
|
||||
|
@ -331,12 +348,12 @@ void WeatherManager::setWeather(const String& weather, bool instant)
|
|||
if (mNextWeather != "")
|
||||
{
|
||||
// transition more than 50% finished?
|
||||
if (mRemainingTransitionTime/(mWeatherSettings[mCurrentWeather].mTransitionDelta*24.f*60) <= 0.5)
|
||||
if (mRemainingTransitionTime/(mWeatherSettings[mCurrentWeather].mTransitionDelta*24.f*3600) <= 0.5)
|
||||
mCurrentWeather = mNextWeather;
|
||||
}
|
||||
|
||||
mNextWeather = weather;
|
||||
mRemainingTransitionTime = mWeatherSettings[mCurrentWeather].mTransitionDelta*24.f*60;
|
||||
mRemainingTransitionTime = mWeatherSettings[mCurrentWeather].mTransitionDelta*24.f*3600;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -354,15 +371,12 @@ WeatherResult WeatherManager::getResult(const String& weather)
|
|||
result.mAmbientLoopSoundID = current.mAmbientLoopSoundID;
|
||||
result.mSunColor = current.mSunDiscSunsetColor;
|
||||
|
||||
const float fade_duration = current.mTransitionDelta * 24.f;
|
||||
|
||||
result.mNight = (mHour < 6.f+fade_duration || mHour > 20.f-fade_duration);
|
||||
result.mNight = (mHour < 6 || mHour > 19);
|
||||
|
||||
result.mFogDepth = result.mNight ? current.mLandFogNightDepth : current.mLandFogDayDepth;
|
||||
|
||||
// night
|
||||
if (mHour <= (WeatherGlobals::mSunriseTime-WeatherGlobals::mSunriseDuration)
|
||||
|| mHour >= (WeatherGlobals::mSunsetTime+WeatherGlobals::mSunsetDuration))
|
||||
if (mHour <= 5.5f || mHour >= 21)
|
||||
{
|
||||
result.mFogColor = current.mFogNightColor;
|
||||
result.mAmbientColor = current.mAmbientNightColor;
|
||||
|
@ -372,40 +386,33 @@ WeatherResult WeatherManager::getResult(const String& weather)
|
|||
}
|
||||
|
||||
// sunrise
|
||||
else if (mHour >= (WeatherGlobals::mSunriseTime-WeatherGlobals::mSunriseDuration) && mHour <= WeatherGlobals::mSunriseTime)
|
||||
else if (mHour >= 5.5f && mHour <= 9)
|
||||
{
|
||||
if (mHour <= (WeatherGlobals::mSunriseTime-WeatherGlobals::mSunriseDuration+fade_duration))
|
||||
if (mHour <= 6)
|
||||
{
|
||||
// fade in
|
||||
float advance = (WeatherGlobals::mSunriseTime-WeatherGlobals::mSunriseDuration+fade_duration)-mHour;
|
||||
float factor = (advance / fade_duration);
|
||||
float advance = 6-mHour;
|
||||
float factor = advance / 0.5f;
|
||||
result.mFogColor = lerp(current.mFogSunriseColor, current.mFogNightColor);
|
||||
result.mAmbientColor = lerp(current.mAmbientSunriseColor, current.mAmbientNightColor);
|
||||
result.mSunColor = lerp(current.mSunSunriseColor, current.mSunNightColor);
|
||||
result.mSkyColor = lerp(current.mSkySunriseColor, current.mSkyNightColor);
|
||||
result.mNightFade = factor;
|
||||
}
|
||||
else if (mHour >= (WeatherGlobals::mSunriseTime-fade_duration))
|
||||
else //if (mHour >= 6)
|
||||
{
|
||||
// fade out
|
||||
float advance = mHour-(WeatherGlobals::mSunriseTime-fade_duration);
|
||||
float factor = advance / fade_duration;
|
||||
float advance = mHour-6;
|
||||
float factor = advance / 3.f;
|
||||
result.mFogColor = lerp(current.mFogSunriseColor, current.mFogDayColor);
|
||||
result.mAmbientColor = lerp(current.mAmbientSunriseColor, current.mAmbientDayColor);
|
||||
result.mSunColor = lerp(current.mSunSunriseColor, current.mSunDayColor);
|
||||
result.mSkyColor = lerp(current.mSkySunriseColor, current.mSkyDayColor);
|
||||
}
|
||||
else
|
||||
{
|
||||
result.mFogColor = current.mFogSunriseColor;
|
||||
result.mAmbientColor = current.mAmbientSunriseColor;
|
||||
result.mSunColor = current.mSunSunriseColor;
|
||||
result.mSkyColor = current.mSkySunriseColor;
|
||||
}
|
||||
}
|
||||
|
||||
// day
|
||||
else if (mHour >= (WeatherGlobals::mSunriseTime) && mHour <= (WeatherGlobals::mSunsetTime))
|
||||
else if (mHour >= 9 && mHour <= 17)
|
||||
{
|
||||
result.mFogColor = current.mFogDayColor;
|
||||
result.mAmbientColor = current.mAmbientDayColor;
|
||||
|
@ -414,36 +421,29 @@ WeatherResult WeatherManager::getResult(const String& weather)
|
|||
}
|
||||
|
||||
// sunset
|
||||
else if (mHour >= (WeatherGlobals::mSunsetTime) && mHour <= (WeatherGlobals::mSunsetTime+WeatherGlobals::mSunsetDuration))
|
||||
else if (mHour >= 17 && mHour <= 21)
|
||||
{
|
||||
if (mHour <= (WeatherGlobals::mSunsetTime+fade_duration))
|
||||
if (mHour <= 19)
|
||||
{
|
||||
// fade in
|
||||
float advance = (WeatherGlobals::mSunsetTime+fade_duration)-mHour;
|
||||
float factor = (advance / fade_duration);
|
||||
float advance = 19-mHour;
|
||||
float factor = (advance / 2);
|
||||
result.mFogColor = lerp(current.mFogSunsetColor, current.mFogDayColor);
|
||||
result.mAmbientColor = lerp(current.mAmbientSunsetColor, current.mAmbientDayColor);
|
||||
result.mSunColor = lerp(current.mSunSunsetColor, current.mSunDayColor);
|
||||
result.mSkyColor = lerp(current.mSkySunsetColor, current.mSkyDayColor);
|
||||
}
|
||||
else if (mHour >= (WeatherGlobals::mSunsetTime+WeatherGlobals::mSunsetDuration-fade_duration))
|
||||
else //if (mHour >= 19)
|
||||
{
|
||||
// fade out
|
||||
float advance = mHour-(WeatherGlobals::mSunsetTime+WeatherGlobals::mSunsetDuration-fade_duration);
|
||||
float factor = advance / fade_duration;
|
||||
float advance = mHour-19;
|
||||
float factor = advance / 2.f;
|
||||
result.mFogColor = lerp(current.mFogSunsetColor, current.mFogNightColor);
|
||||
result.mAmbientColor = lerp(current.mAmbientSunsetColor, current.mAmbientNightColor);
|
||||
result.mSunColor = lerp(current.mSunSunsetColor, current.mSunNightColor);
|
||||
result.mSkyColor = lerp(current.mSkySunsetColor, current.mSkyNightColor);
|
||||
result.mNightFade = factor;
|
||||
}
|
||||
else
|
||||
{
|
||||
result.mFogColor = current.mFogSunsetColor;
|
||||
result.mAmbientColor = current.mAmbientSunsetColor;
|
||||
result.mSunColor = current.mSunSunsetColor;
|
||||
result.mSkyColor = current.mSkySunsetColor;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -468,26 +468,19 @@ WeatherResult WeatherManager::transition(float factor)
|
|||
result.mSunDiscColor = lerp(current.mSunDiscColor, other.mSunDiscColor);
|
||||
result.mFogDepth = lerp(current.mFogDepth, other.mFogDepth);
|
||||
result.mWindSpeed = lerp(current.mWindSpeed, other.mWindSpeed);
|
||||
result.mCloudSpeed = lerp(current.mCloudSpeed, other.mCloudSpeed);
|
||||
//result.mCloudSpeed = lerp(current.mCloudSpeed, other.mCloudSpeed);
|
||||
result.mCloudSpeed = current.mCloudSpeed;
|
||||
result.mCloudOpacity = lerp(current.mCloudOpacity, other.mCloudOpacity);
|
||||
result.mGlareView = lerp(current.mGlareView, other.mGlareView);
|
||||
|
||||
result.mNight = current.mNight;
|
||||
|
||||
// sound change behaviour:
|
||||
// if 'other' has a new sound, switch to it after 1/2 of the transition length
|
||||
if (other.mAmbientLoopSoundID != "")
|
||||
result.mAmbientLoopSoundID = factor>0.5 ? other.mAmbientLoopSoundID : current.mAmbientLoopSoundID;
|
||||
// if 'current' has a sound and 'other' does not have a sound, turn off the sound immediately
|
||||
else if (current.mAmbientLoopSoundID != "")
|
||||
result.mAmbientLoopSoundID = "";
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void WeatherManager::update(float duration)
|
||||
{
|
||||
mWeatherUpdateTime -= duration;
|
||||
mWeatherUpdateTime -= duration * mEnvironment->mWorld->getTimeScaleFactor();
|
||||
|
||||
bool exterior = (mEnvironment->mWorld->isCellExterior() || mEnvironment->mWorld->isCellQuasiExterior());
|
||||
|
||||
|
@ -499,7 +492,7 @@ void WeatherManager::update(float duration)
|
|||
if (mWeatherUpdateTime <= 0 || regionstr != mCurrentRegion)
|
||||
{
|
||||
mCurrentRegion = regionstr;
|
||||
mWeatherUpdateTime = WeatherGlobals::mWeatherUpdateTime*60.f;
|
||||
mWeatherUpdateTime = WeatherGlobals::mWeatherUpdateTime*3600;
|
||||
|
||||
std::string weather;
|
||||
|
||||
|
@ -518,54 +511,45 @@ void WeatherManager::update(float duration)
|
|||
float thunder = region->data.thunder/255.f;
|
||||
float ash = region->data.ash/255.f;
|
||||
float blight = region->data.blight/255.f;
|
||||
float snow = region->data.a/255.f;
|
||||
float blizzard = region->data.b/255.f;
|
||||
//float snow = region->data.a/255.f;
|
||||
//float blizzard = region->data.b/255.f;
|
||||
|
||||
// re-scale to 100 percent
|
||||
const float total = clear+cloudy+foggy+overcast+rain+thunder+ash+blight+snow+blizzard;
|
||||
const float total = clear+cloudy+foggy+overcast+rain+thunder+ash+blight;//+snow+blizzard;
|
||||
|
||||
srand(time(NULL));
|
||||
float random = ((rand()%100)/100.f) * total;
|
||||
|
||||
if (random >= snow+blight+ash+thunder+rain+overcast+foggy+cloudy+clear)
|
||||
weather = "blizzard";
|
||||
else if (random >= blight+ash+thunder+rain+overcast+foggy+cloudy+clear)
|
||||
weather = "snow";
|
||||
else if (random >= ash+thunder+rain+overcast+foggy+cloudy+clear)
|
||||
//if (random > snow+blight+ash+thunder+rain+overcast+foggy+cloudy+clear)
|
||||
// weather = "blizzard";
|
||||
//else if (random > blight+ash+thunder+rain+overcast+foggy+cloudy+clear)
|
||||
// weather = "snow";
|
||||
/*else*/ if (random > ash+thunder+rain+overcast+foggy+cloudy+clear)
|
||||
weather = "blight";
|
||||
else if (random >= thunder+rain+overcast+foggy+cloudy+clear)
|
||||
else if (random > thunder+rain+overcast+foggy+cloudy+clear)
|
||||
weather = "ashstorm";
|
||||
else if (random >= rain+overcast+foggy+cloudy+clear)
|
||||
else if (random > rain+overcast+foggy+cloudy+clear)
|
||||
weather = "thunderstorm";
|
||||
else if (random >= overcast+foggy+cloudy+clear)
|
||||
else if (random > overcast+foggy+cloudy+clear)
|
||||
weather = "rain";
|
||||
else if (random >= foggy+cloudy+clear)
|
||||
else if (random > foggy+cloudy+clear)
|
||||
weather = "overcast";
|
||||
else if (random >= cloudy+clear)
|
||||
else if (random > cloudy+clear)
|
||||
weather = "foggy";
|
||||
else if (random >= clear)
|
||||
else if (random > clear)
|
||||
weather = "cloudy";
|
||||
else
|
||||
weather = "clear";
|
||||
}
|
||||
|
||||
setWeather(weather, false);
|
||||
/*
|
||||
std::cout << "roll result: " << random << std::endl;
|
||||
|
||||
std::cout << regionstr << " weather probabilities: " << clear << " " << cloudy << " " << foggy << " "
|
||||
<< overcast << " " << rain << " " << thunder << " " << ash << " " << blight << " " << snow << " "
|
||||
<< blizzard << std::endl;
|
||||
|
||||
std::cout << "New weather : " << weather << std::endl;
|
||||
*/
|
||||
}
|
||||
|
||||
WeatherResult result;
|
||||
|
||||
if (mNextWeather != "")
|
||||
{
|
||||
mRemainingTransitionTime -= duration;
|
||||
mRemainingTransitionTime -= duration * mEnvironment->mWorld->getTimeScaleFactor();
|
||||
if (mRemainingTransitionTime < 0)
|
||||
{
|
||||
mCurrentWeather = mNextWeather;
|
||||
|
@ -574,30 +558,37 @@ void WeatherManager::update(float duration)
|
|||
}
|
||||
|
||||
if (mNextWeather != "")
|
||||
result = transition(1-(mRemainingTransitionTime/(mWeatherSettings[mCurrentWeather].mTransitionDelta*24.f*60)));
|
||||
result = transition(1-(mRemainingTransitionTime/(mWeatherSettings[mCurrentWeather].mTransitionDelta*24.f*3600)));
|
||||
else
|
||||
result = getResult(mCurrentWeather);
|
||||
|
||||
mRendering->configureFog(result.mFogDepth, result.mFogColor);
|
||||
|
||||
// disable sun during night
|
||||
if (mHour >= WeatherGlobals::mSunsetTime+WeatherGlobals::mSunsetDuration
|
||||
|| mHour <= WeatherGlobals::mSunriseTime-WeatherGlobals::mSunriseDuration)
|
||||
if (mHour >= 20 || mHour <= 6.f)
|
||||
mRendering->getSkyManager()->sunDisable();
|
||||
else
|
||||
{
|
||||
// during day, calculate sun angle
|
||||
float height = 1-std::abs(((mHour-13)/7.f));
|
||||
int facing = mHour > 13.f ? 1 : -1;
|
||||
mRendering->getSkyManager()->sunEnable();
|
||||
|
||||
// sun angle
|
||||
float height;
|
||||
|
||||
// rise at 6, set at 20
|
||||
if (mHour >= 6 && mHour <= 20)
|
||||
height = 1-std::abs(((mHour-13)/7.f));
|
||||
else if (mHour > 20)
|
||||
height = (mHour-20.f)/4.f;
|
||||
else //if (mHour > 0 && mHour < 6)
|
||||
height = 1-(mHour/6.f);
|
||||
|
||||
int facing = (mHour > 13.f) ? 1 : -1;
|
||||
|
||||
Vector3 final(
|
||||
(1-height)*facing,
|
||||
(1-height)*facing,
|
||||
height);
|
||||
mRendering->setSunDirection(final);
|
||||
|
||||
mRendering->getSkyManager()->sunEnable();
|
||||
}
|
||||
|
||||
// moon calculations
|
||||
float night;
|
||||
if (mHour >= 14)
|
||||
|
@ -765,15 +756,6 @@ void WeatherManager::update(float duration)
|
|||
|
||||
void WeatherManager::setHour(const float hour)
|
||||
{
|
||||
// accelerate a bit for testing
|
||||
/*
|
||||
mHour += 0.005;
|
||||
|
||||
if (mHour >= 24.f) mHour = 0.f;
|
||||
|
||||
std::cout << "hour " << mHour << std::endl;
|
||||
*/
|
||||
|
||||
mHour = hour;
|
||||
}
|
||||
|
||||
|
|
|
@ -95,18 +95,18 @@ namespace MWWorld
|
|||
Script Color=255,20,20
|
||||
*/
|
||||
|
||||
static const float mSunriseTime = 8;
|
||||
static const float mSunsetTime = 18;
|
||||
static const float mSunriseDuration = 2;
|
||||
static const float mSunsetDuration = 2;
|
||||
static const float mSunriseTime;
|
||||
static const float mSunsetTime;
|
||||
static const float mSunriseDuration;
|
||||
static const float mSunsetDuration;
|
||||
|
||||
static const float mWeatherUpdateTime = 20.f;
|
||||
static const float mWeatherUpdateTime;
|
||||
|
||||
// morrowind sets these per-weather, but since they are only used by 'thunderstorm'
|
||||
// weather setting anyway, we can just as well set them globally
|
||||
static const float mThunderFrequency = .4;
|
||||
static const float mThunderThreshold = 0.6;
|
||||
static const float mThunderSoundDelay = 0.25;
|
||||
static const float mThunderFrequency;
|
||||
static const float mThunderThreshold;
|
||||
static const float mThunderSoundDelay;
|
||||
static const std::string mThunderSoundID0;
|
||||
static const std::string mThunderSoundID1;
|
||||
static const std::string mThunderSoundID2;
|
||||
|
|
|
@ -478,7 +478,7 @@ namespace MWWorld
|
|||
|
||||
float World::getTimeScaleFactor() const
|
||||
{
|
||||
return mGlobalVariables->getInt ("timescale");
|
||||
return mGlobalVariables->getFloat ("timescale");
|
||||
}
|
||||
|
||||
void World::changeToInteriorCell (const std::string& cellName, const ESM::Position& position)
|
||||
|
|
53
cmake/FindCg.cmake
Normal file
53
cmake/FindCg.cmake
Normal file
|
@ -0,0 +1,53 @@
|
|||
#-------------------------------------------------------------------
|
||||
# This file is part of the CMake build system for OGRE
|
||||
# (Object-oriented Graphics Rendering Engine)
|
||||
# For the latest info, see http://www.ogre3d.org/
|
||||
#
|
||||
# The contents of this file are placed in the public domain. Feel
|
||||
# free to make use of it in any way you like.
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
# - Try to find Cg
|
||||
# Once done, this will define
|
||||
#
|
||||
# Cg_FOUND - system has Cg
|
||||
# Cg_INCLUDE_DIRS - the Cg include directories
|
||||
# Cg_LIBRARIES - link these to use Cg
|
||||
|
||||
include(FindPkgMacros)
|
||||
findpkg_begin(Cg)
|
||||
|
||||
# Get path, convert backslashes as ${ENV_${var}}
|
||||
getenv_path(Cg_HOME)
|
||||
getenv_path(OGRE_SOURCE)
|
||||
getenv_path(OGRE_HOME)
|
||||
|
||||
# construct search paths
|
||||
set(Cg_PREFIX_PATH ${Cg_HOME} ${ENV_Cg_HOME}
|
||||
${OGRE_SOURCE}/Dependencies
|
||||
${ENV_OGRE_SOURCE}/Dependencies
|
||||
${OGRE_HOME} ${ENV_OGRE_HOME}
|
||||
/opt/nvidia-cg-toolkit)
|
||||
create_search_paths(Cg)
|
||||
# redo search if prefix path changed
|
||||
clear_if_changed(Cg_PREFIX_PATH
|
||||
Cg_LIBRARY_FWK
|
||||
Cg_LIBRARY_REL
|
||||
Cg_LIBRARY_DBG
|
||||
Cg_INCLUDE_DIR
|
||||
)
|
||||
|
||||
set(Cg_LIBRARY_NAMES Cg)
|
||||
get_debug_names(Cg_LIBRARY_NAMES)
|
||||
|
||||
use_pkgconfig(Cg_PKGC Cg)
|
||||
|
||||
findpkg_framework(Cg)
|
||||
|
||||
find_path(Cg_INCLUDE_DIR NAMES cg.h HINTS ${Cg_FRAMEWORK_INCLUDES} ${Cg_INC_SEARCH_PATH} ${Cg_PKGC_INCLUDE_DIRS} PATH_SUFFIXES Cg)
|
||||
find_library(Cg_LIBRARY_REL NAMES ${Cg_LIBRARY_NAMES} HINTS ${Cg_LIB_SEARCH_PATH} ${Cg_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" release relwithdebinfo minsizerel)
|
||||
find_library(Cg_LIBRARY_DBG NAMES ${Cg_LIBRARY_NAMES_DBG} HINTS ${Cg_LIB_SEARCH_PATH} ${Cg_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" debug)
|
||||
make_library_set(Cg_LIBRARY)
|
||||
|
||||
findpkg_finish(Cg)
|
||||
add_parent_dir(Cg_INCLUDE_DIRS Cg_INCLUDE_DIR)
|
47
cmake/FindFreeImage.cmake
Normal file
47
cmake/FindFreeImage.cmake
Normal file
|
@ -0,0 +1,47 @@
|
|||
#-------------------------------------------------------------------
|
||||
# This file is part of the CMake build system for OGRE
|
||||
# (Object-oriented Graphics Rendering Engine)
|
||||
# For the latest info, see http://www.ogre3d.org/
|
||||
#
|
||||
# The contents of this file are placed in the public domain. Feel
|
||||
# free to make use of it in any way you like.
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
# - Try to find FreeImage
|
||||
# Once done, this will define
|
||||
#
|
||||
# FreeImage_FOUND - system has FreeImage
|
||||
# FreeImage_INCLUDE_DIRS - the FreeImage include directories
|
||||
# FreeImage_LIBRARIES - link these to use FreeImage
|
||||
|
||||
include(FindPkgMacros)
|
||||
findpkg_begin(FreeImage)
|
||||
|
||||
# Get path, convert backslashes as ${ENV_${var}}
|
||||
getenv_path(FREEIMAGE_HOME)
|
||||
|
||||
# construct search paths
|
||||
set(FreeImage_PREFIX_PATH ${FREEIMAGE_HOME} ${ENV_FREEIMAGE_HOME})
|
||||
create_search_paths(FreeImage)
|
||||
# redo search if prefix path changed
|
||||
clear_if_changed(FreeImage_PREFIX_PATH
|
||||
FreeImage_LIBRARY_FWK
|
||||
FreeImage_LIBRARY_REL
|
||||
FreeImage_LIBRARY_DBG
|
||||
FreeImage_INCLUDE_DIR
|
||||
)
|
||||
|
||||
set(FreeImage_LIBRARY_NAMES freeimage)
|
||||
get_debug_names(FreeImage_LIBRARY_NAMES)
|
||||
|
||||
use_pkgconfig(FreeImage_PKGC freeimage)
|
||||
|
||||
findpkg_framework(FreeImage)
|
||||
|
||||
find_path(FreeImage_INCLUDE_DIR NAMES FreeImage.h HINTS ${FreeImage_INC_SEARCH_PATH} ${FreeImage_PKGC_INCLUDE_DIRS})
|
||||
find_library(FreeImage_LIBRARY_REL NAMES ${FreeImage_LIBRARY_NAMES} HINTS ${FreeImage_LIB_SEARCH_PATH} ${FreeImage_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" release relwithdebinfo minsizerel)
|
||||
find_library(FreeImage_LIBRARY_DBG NAMES ${FreeImage_LIBRARY_NAMES_DBG} HINTS ${FreeImage_LIB_SEARCH_PATH} ${FreeImage_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" debug)
|
||||
make_library_set(FreeImage_LIBRARY)
|
||||
|
||||
findpkg_finish(FreeImage)
|
||||
|
125
cmake/FindMyGUI.cmake
Normal file
125
cmake/FindMyGUI.cmake
Normal file
|
@ -0,0 +1,125 @@
|
|||
# - Find MyGUI includes and library
|
||||
#
|
||||
# This module defines
|
||||
# MYGUI_INCLUDE_DIRS
|
||||
# MYGUI_LIBRARIES, the libraries to link against to use MYGUI.
|
||||
# MYGUI_LIB_DIR, the location of the libraries
|
||||
# MYGUI_FOUND, If false, do not try to use MYGUI
|
||||
#
|
||||
# Copyright © 2007, Matt Williams
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
CMAKE_POLICY(PUSH)
|
||||
include(FindPkgMacros)
|
||||
|
||||
# IF (MYGUI_LIBRARIES AND MYGUI_INCLUDE_DIRS)
|
||||
# SET(MYGUI_FIND_QUIETLY TRUE)
|
||||
# ENDIF (MYGUI_LIBRARIES AND MYGUI_INCLUDE_DIRS)
|
||||
|
||||
IF (WIN32) #Windows
|
||||
MESSAGE(STATUS "Looking for MyGUI")
|
||||
SET(MYGUISDK $ENV{MYGUI_HOME})
|
||||
IF (MYGUISDK)
|
||||
findpkg_begin ( "MYGUI" )
|
||||
MESSAGE(STATUS "Using MyGUI in OGRE SDK")
|
||||
STRING(REGEX REPLACE "[\\]" "/" MYGUISDK "${MYGUISDK}" )
|
||||
|
||||
find_path ( MYGUI_INCLUDE_DIRS
|
||||
MyGUI.h
|
||||
"${MYGUISDK}/MyGUIEngine/include"
|
||||
NO_DEFAULT_PATH )
|
||||
|
||||
find_path ( MYGUI_PLATFORM_INCLUDE_DIRS
|
||||
MyGUI_OgrePlatform.h
|
||||
"${MYGUISDK}/Platforms/Ogre/OgrePlatform/include"
|
||||
NO_DEFAULT_PATH )
|
||||
|
||||
SET ( MYGUI_LIB_DIR ${MYGUISDK}/*/lib )
|
||||
|
||||
find_library ( MYGUI_LIBRARIES_REL NAMES
|
||||
MyGUIEngine.lib
|
||||
MyGUI.OgrePlatform.lib
|
||||
HINTS
|
||||
${MYGUI_LIB_DIR}
|
||||
PATH_SUFFIXES "" release relwithdebinfo minsizerel )
|
||||
|
||||
find_library ( MYGUI_LIBRARIES_DBG NAMES
|
||||
MyGUIEngine_d.lib
|
||||
MyGUI.OgrePlatform_d.lib
|
||||
HINTS
|
||||
${MYGUI_LIB_DIR}
|
||||
PATH_SUFFIXES "" debug )
|
||||
|
||||
find_library ( MYGUI_PLATFORM_LIBRARIES_REL NAMES
|
||||
MyGUI.OgrePlatform.lib
|
||||
HINTS
|
||||
${MYGUI_LIB_DIR}
|
||||
PATH_SUFFIXES "" release relwithdebinfo minsizerel )
|
||||
|
||||
find_library ( MYGUI_PLATFORM_LIBRARIES_DBG NAMES
|
||||
MyGUI.OgrePlatform_d.lib
|
||||
HINTS
|
||||
${MYGUI_LIB_DIR}
|
||||
PATH_SUFFIXES "" debug )
|
||||
|
||||
make_library_set ( MYGUI_LIBRARIES )
|
||||
make_library_set ( MYGUI_PLATFORM_LIBRARIES )
|
||||
|
||||
MESSAGE ("${MYGUI_LIBRARIES}")
|
||||
MESSAGE ("${MYGUI_PLATFORM_LIBRARIES}")
|
||||
|
||||
findpkg_finish ( "MYGUI" )
|
||||
|
||||
ENDIF (MYGUISDK)
|
||||
IF (OGRESOURCE)
|
||||
MESSAGE(STATUS "Using MyGUI in OGRE dependencies")
|
||||
STRING(REGEX REPLACE "[\\]" "/" OGRESDK "${OGRESOURCE}" )
|
||||
SET(MYGUI_INCLUDE_DIRS ${OGRESOURCE}/OgreMain/include/MYGUI)
|
||||
SET(MYGUI_LIB_DIR ${OGRESOURCE}/lib)
|
||||
SET(MYGUI_LIBRARIES debug Debug/MyGUIEngine_d optimized Release/MyGUIEngine)
|
||||
ENDIF (OGRESOURCE)
|
||||
ELSE (WIN32) #Unix
|
||||
CMAKE_MINIMUM_REQUIRED(VERSION 2.4.7 FATAL_ERROR)
|
||||
FIND_PACKAGE(PkgConfig)
|
||||
PKG_SEARCH_MODULE(MYGUI MYGUI MyGUI)
|
||||
IF (MYGUI_INCLUDE_DIRS)
|
||||
SET(MYGUI_INCLUDE_DIRS ${MYGUI_INCLUDE_DIRS})
|
||||
SET(MYGUI_LIB_DIR ${MYGUI_LIBDIR})
|
||||
SET(MYGUI_LIBRARIES ${MYGUI_LIBRARIES} CACHE STRING "")
|
||||
ELSE (MYGUI_INCLUDE_DIRS)
|
||||
FIND_PATH(MYGUI_INCLUDE_DIRS MyGUI.h PATHS /usr/local/include /usr/include PATH_SUFFIXES MyGUI MYGUI)
|
||||
FIND_LIBRARY(MYGUI_LIBRARIES mygui PATHS /usr/lib /usr/local/lib)
|
||||
SET(MYGUI_LIB_DIR ${MYGUI_LIBRARIES})
|
||||
STRING(REGEX REPLACE "(.*)/.*" "\\1" MYGUI_LIB_DIR "${MYGUI_LIB_DIR}")
|
||||
STRING(REGEX REPLACE ".*/" "" MYGUI_LIBRARIES "${MYGUI_LIBRARIES}")
|
||||
ENDIF (MYGUI_INCLUDE_DIRS)
|
||||
ENDIF (WIN32)
|
||||
|
||||
#Do some preparation
|
||||
SEPARATE_ARGUMENTS(MYGUI_INCLUDE_DIRS)
|
||||
SEPARATE_ARGUMENTS(MYGUI_LIBRARIES)
|
||||
SEPARATE_ARGUMENTS(MYGUI_PLATFORM_LIBRARIES)
|
||||
|
||||
SET(MYGUI_INCLUDE_DIRS ${MYGUI_INCLUDE_DIRS} CACHE PATH "")
|
||||
SET(MYGUI_LIBRARIES ${MYGUI_LIBRARIES} CACHE STRING "")
|
||||
SET(MYGUI_LIBRARIES ${MYGUI_PLATFORM_LIBRARIES} CACHE STRING "")
|
||||
SET(MYGUI_LIB_DIR ${MYGUI_LIB_DIR} CACHE PATH "")
|
||||
|
||||
IF (MYGUI_INCLUDE_DIRS AND MYGUI_LIBRARIES)
|
||||
SET(MYGUI_FOUND TRUE)
|
||||
ENDIF (MYGUI_INCLUDE_DIRS AND MYGUI_LIBRARIES)
|
||||
|
||||
IF (MYGUI_FOUND)
|
||||
MARK_AS_ADVANCED(MYGUI_LIB_DIR)
|
||||
IF (NOT MYGUI_FIND_QUIETLY)
|
||||
MESSAGE(STATUS " libraries : ${MYGUI_LIBRARIES} from ${MYGUI_LIB_DIR}")
|
||||
MESSAGE(STATUS " includes : ${MYGUI_INCLUDE_DIRS}")
|
||||
ENDIF (NOT MYGUI_FIND_QUIETLY)
|
||||
ELSE (MYGUI_FOUND)
|
||||
IF (MYGUI_FIND_REQUIRED)
|
||||
MESSAGE(FATAL_ERROR "Could not find MYGUI")
|
||||
ENDIF (MYGUI_FIND_REQUIRED)
|
||||
ENDIF (MYGUI_FOUND)
|
||||
|
||||
CMAKE_POLICY(POP)
|
|
@ -28,12 +28,11 @@
|
|||
# Plugin_BSPSceneManager, Plugin_CgProgramManager,
|
||||
# Plugin_OctreeSceneManager, Plugin_OctreeZone,
|
||||
# Plugin_ParticleFX, Plugin_PCZSceneManager,
|
||||
# RenderSystem_GL, RenderSystem_Direct3D9,
|
||||
# RenderSystem_GL, RenderSystem_Direct3D9, RenderSystem_Direct3D10,
|
||||
# Paging, Terrain
|
||||
#
|
||||
# For each of these components, the following variables are defined:
|
||||
#
|
||||
|
||||
# OGRE_${COMPONENT}_FOUND - ${COMPONENT} is available
|
||||
# OGRE_${COMPONENT}_INCLUDE_DIRS - additional include directories for ${COMPONENT}
|
||||
# OGRE_${COMPONENT}_LIBRARIES - link these to use ${COMPONENT}
|
||||
|
@ -128,7 +127,7 @@ endif ()
|
|||
set(OGRE_COMPONENTS Paging Terrain
|
||||
Plugin_BSPSceneManager Plugin_CgProgramManager Plugin_OctreeSceneManager
|
||||
Plugin_OctreeZone Plugin_PCZSceneManager Plugin_ParticleFX
|
||||
RenderSystem_Direct3D11 RenderSystem_Direct3D9 RenderSystem_GL RenderSystem_GLES RenderSystem_GLES2)
|
||||
RenderSystem_Direct3D10 RenderSystem_Direct3D9 RenderSystem_GL RenderSystem_GLES)
|
||||
set(OGRE_RESET_VARS
|
||||
OGRE_CONFIG_INCLUDE_DIR OGRE_INCLUDE_DIR
|
||||
OGRE_LIBRARY_FWK OGRE_LIBRARY_REL OGRE_LIBRARY_DBG
|
||||
|
@ -145,7 +144,7 @@ clear_if_changed(OGRE_PREFIX_WATCH ${OGRE_RESET_VARS})
|
|||
# try to locate Ogre via pkg-config
|
||||
use_pkgconfig(OGRE_PKGC "OGRE${OGRE_LIB_SUFFIX}")
|
||||
|
||||
if(NOT OGRE_BUILD_PLATFORM_APPLE_IOS)
|
||||
if(NOT OGRE_BUILD_PLATFORM_IPHONE AND APPLE)
|
||||
# try to find framework on OSX
|
||||
findpkg_framework(OGRE)
|
||||
else()
|
||||
|
@ -236,7 +235,6 @@ if (OGRE_STATIC)
|
|||
find_package(Freetype QUIET)
|
||||
find_package(OpenGL QUIET)
|
||||
find_package(OpenGLES QUIET)
|
||||
find_package(OpenGLES2 QUIET)
|
||||
find_package(ZLIB QUIET)
|
||||
find_package(ZZip QUIET)
|
||||
if (UNIX AND NOT APPLE)
|
||||
|
@ -246,26 +244,24 @@ if (OGRE_STATIC)
|
|||
set(X11_FOUND FALSE)
|
||||
endif ()
|
||||
endif ()
|
||||
if (APPLE AND NOT OGRE_BUILD_PLATFORM_APPLE_IOS)
|
||||
if (APPLE AND NOT OGRE_BUILD_PLATFORM_IPHONE)
|
||||
find_package(Cocoa QUIET)
|
||||
find_package(Carbon QUIET)
|
||||
find_package(CoreVideo QUIET)
|
||||
if (NOT Cocoa_FOUND OR NOT Carbon_FOUND OR NOT CoreVideo_FOUND)
|
||||
if (NOT Cocoa_FOUND OR NOT Carbon_FOUND)
|
||||
set(OGRE_DEPS_FOUND FALSE)
|
||||
endif ()
|
||||
endif ()
|
||||
if (APPLE AND OGRE_BUILD_PLATFORM_APPLE_IOS)
|
||||
if (APPLE AND OGRE_BUILD_PLATFORM_IPHONE)
|
||||
find_package(iPhoneSDK QUIET)
|
||||
if (NOT iPhoneSDK_FOUND)
|
||||
set(OGRE_DEPS_FOUND FALSE)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${ZZip_LIBRARIES} ${ZLIB_LIBRARIES} ${FreeImage_LIBRARIES} ${FREETYPE_LIBRARIES} )
|
||||
|
||||
if (APPLE AND NOT OGRE_BUILD_PLATFORM_APPLE_IOS)
|
||||
set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${X11_LIBRARIES} ${X11_Xt_LIBRARIES} ${XAW_LIBRARY} ${X11_Xrandr_LIB} ${Carbon_LIBRARIES} ${Cocoa_LIBRARIES})
|
||||
endif()
|
||||
set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${OGRE_LIBRARY_FWK} ${ZZip_LIBRARIES} ${ZLIB_LIBRARIES}
|
||||
${FreeImage_LIBRARIES} ${FREETYPE_LIBRARIES}
|
||||
${X11_LIBRARIES} ${X11_Xt_LIBRARIES} ${XAW_LIBRARY} ${X11_Xrandr_LIB}
|
||||
${Cocoa_LIBRARIES} ${Carbon_LIBRARIES})
|
||||
|
||||
if (NOT ZLIB_FOUND OR NOT ZZip_FOUND)
|
||||
set(OGRE_DEPS_FOUND FALSE)
|
||||
|
@ -409,10 +405,22 @@ macro(ogre_find_plugin PLUGIN HEADER)
|
|||
set(OGRE_${PLUGIN}_LIBRARY_NAMES "${PLUGIN}${OGRE_LIB_SUFFIX}")
|
||||
get_debug_names(OGRE_${PLUGIN}_LIBRARY_NAMES)
|
||||
set(OGRE_${PLUGIN}_LIBRARY_FWK ${OGRE_LIBRARY_FWK})
|
||||
# Search for release plugins in OGRE dir with version suffix
|
||||
find_library(OGRE_${PLUGIN}_LIBRARY_REL NAMES ${OGRE_${PLUGIN}_LIBRARY_NAMES}
|
||||
HINTS ${OGRE_LIBRARY_DIRS} PATH_SUFFIXES "" OGRE-${OGRE_VERSION} opt release release/opt relwithdebinfo relwithdebinfo/opt minsizerel minsizerel/opt)
|
||||
if(NOT EXISTS "${OGRE_${PLUGIN}_LIBRARY_REL}")
|
||||
# Search for release plugins in OGRE dir without version suffix
|
||||
find_library(OGRE_${PLUGIN}_LIBRARY_REL NAMES ${OGRE_${PLUGIN}_LIBRARY_NAMES}
|
||||
HINTS ${OGRE_LIBRARY_DIRS} PATH_SUFFIXES "" OGRE opt release release/opt relwithdebinfo relwithdebinfo/opt minsizerel minsizerel/opt)
|
||||
endif()
|
||||
# Search for debug plugins in OGRE dir with version suffix
|
||||
find_library(OGRE_${PLUGIN}_LIBRARY_DBG NAMES ${OGRE_${PLUGIN}_LIBRARY_NAMES_DBG}
|
||||
HINTS ${OGRE_LIBRARY_DIRS} PATH_SUFFIXES "" OGRE-${OGRE_VERSION} opt debug debug/opt)
|
||||
if(NOT EXISTS "${OGRE_${PLUGIN}_LIBRARY_DBG}")
|
||||
# Search for debug plugins in OGRE dir without version suffix
|
||||
find_library(OGRE_${PLUGIN}_LIBRARY_DBG NAMES ${OGRE_${PLUGIN}_LIBRARY_NAMES_DBG}
|
||||
HINTS ${OGRE_LIBRARY_DIRS} PATH_SUFFIXES "" OGRE opt debug debug/opt)
|
||||
endif()
|
||||
make_library_set(OGRE_${PLUGIN}_LIBRARY)
|
||||
|
||||
if (OGRE_${PLUGIN}_LIBRARY OR OGRE_${PLUGIN}_INCLUDE_DIR)
|
||||
|
@ -445,9 +453,13 @@ macro(ogre_find_plugin PLUGIN HEADER)
|
|||
PATH_SUFFIXES "" bin bin/debug debug)
|
||||
elseif (UNIX)
|
||||
get_filename_component(OGRE_PLUGIN_DIR_TMP ${OGRE_${PLUGIN}_LIBRARY_REL} PATH)
|
||||
set(OGRE_PLUGIN_DIR_REL ${OGRE_PLUGIN_DIR_TMP} CACHE STRING "Ogre plugin dir (release)" FORCE)
|
||||
# For some reason this fails
|
||||
#set(OGRE_PLUGIN_DIR_REL ${OGRE_PLUGIN_DIR_TMP} CACHE STRING "Ogre plugin dir (release)")
|
||||
set(OGRE_PLUGIN_DIR_REL ${OGRE_PLUGIN_DIR_TMP})
|
||||
get_filename_component(OGRE_PLUGIN_DIR_TMP ${OGRE_${PLUGIN}_LIBRARY_DBG} PATH)
|
||||
set(OGRE_PLUGIN_DIR_DBG ${OGRE_PLUGIN_DIR_TMP} CACHE STRING "Ogre plugin dir (debug)" FORCE)
|
||||
# Same here
|
||||
#set(OGRE_PLUGIN_DIR_DBG ${OGRE_PLUGIN_DIR_TMP} CACHE STRING "Ogre plugin dir (debug)")
|
||||
set(OGRE_PLUGIN_DIR_DBG ${OGRE_PLUGIN_DIR_TMP})
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
|
@ -475,8 +487,8 @@ ogre_find_plugin(Plugin_OctreeSceneManager OgreOctreeSceneManager.h PlugIns/Octr
|
|||
ogre_find_plugin(Plugin_ParticleFX OgreParticleFXPrerequisites.h PlugIns/ParticleFX/include)
|
||||
ogre_find_plugin(RenderSystem_GL OgreGLRenderSystem.h RenderSystems/GL/include)
|
||||
ogre_find_plugin(RenderSystem_GLES OgreGLESRenderSystem.h RenderSystems/GLES/include)
|
||||
ogre_find_plugin(RenderSystem_GLES2 OgreGLES2RenderSystem.h RenderSystems/GLES2/include)
|
||||
ogre_find_plugin(RenderSystem_Direct3D9 OgreD3D9RenderSystem.h RenderSystems/Direct3D9/include)
|
||||
ogre_find_plugin(RenderSystem_Direct3D10 OgreD3D10RenderSystem.h RenderSystems/Direct3D10/include)
|
||||
ogre_find_plugin(RenderSystem_Direct3D11 OgreD3D11RenderSystem.h RenderSystems/Direct3D11/include)
|
||||
|
||||
if (OGRE_STATIC)
|
||||
|
@ -484,18 +496,18 @@ if (OGRE_STATIC)
|
|||
if (NOT DirectX_FOUND)
|
||||
set(OGRE_RenderSystem_Direct3D9_FOUND FALSE)
|
||||
endif ()
|
||||
if (NOT DirectX_D3D10_FOUND)
|
||||
set(OGRE_RenderSystem_Direct3D10_FOUND FALSE)
|
||||
endif ()
|
||||
if (NOT DirectX_D3D11_FOUND)
|
||||
set(OGRE_RenderSystem_Direct3D11_FOUND FALSE)
|
||||
endif ()
|
||||
if (NOT OPENGL_FOUND)
|
||||
set(OGRE_RenderSystem_GL_FOUND FALSE)
|
||||
endif ()
|
||||
if (NOT OPENGLES_FOUND)
|
||||
if (NOT OPENGLES_FOUND AND NOT OPENGLES2_FOUND)
|
||||
set(OGRE_RenderSystem_GLES_FOUND FALSE)
|
||||
endif ()
|
||||
if (NOT OPENGLES2_FOUND)
|
||||
set(OGRE_RenderSystem_GLES2_FOUND FALSE)
|
||||
endif ()
|
||||
if (NOT Cg_FOUND)
|
||||
set(OGRE_Plugin_CgProgramManager_FOUND FALSE)
|
||||
endif ()
|
||||
|
@ -503,7 +515,9 @@ if (OGRE_STATIC)
|
|||
set(OGRE_RenderSystem_Direct3D9_LIBRARIES ${OGRE_RenderSystem_Direct3D9_LIBRARIES}
|
||||
${DirectX_LIBRARIES}
|
||||
)
|
||||
|
||||
set(OGRE_RenderSystem_Direct3D10_LIBRARIES ${OGRE_RenderSystem_Direct3D10_LIBRARIES}
|
||||
${DirectX_D3D10_LIBRARIES}
|
||||
)
|
||||
set(OGRE_RenderSystem_Direct3D11_LIBRARIES ${OGRE_RenderSystem_Direct3D11_LIBRARIES}
|
||||
${DirectX_D3D11_LIBRARIES}
|
||||
)
|
||||
|
@ -513,9 +527,6 @@ if (OGRE_STATIC)
|
|||
set(OGRE_RenderSystem_GLES_LIBRARIES ${OGRE_RenderSystem_GLES_LIBRARIES}
|
||||
${OPENGLES_LIBRARIES}
|
||||
)
|
||||
set(OGRE_RenderSystem_GLES2_LIBRARIES ${OGRE_RenderSystem_GLES2_LIBRARIES}
|
||||
${OPENGLES2_LIBRARIES}
|
||||
)
|
||||
set(OGRE_Plugin_CgProgramManager_LIBRARIES ${OGRE_Plugin_CgProgramManager_LIBRARIES}
|
||||
${Cg_LIBRARIES}
|
||||
)
|
||||
|
@ -540,3 +551,4 @@ set(OGRE_MEDIA_SEARCH_SUFFIX
|
|||
clear_if_changed(OGRE_PREFIX_WATCH OGRE_MEDIA_DIR)
|
||||
find_path(OGRE_MEDIA_DIR NAMES packs/cubemapsJS.zip HINTS ${OGRE_MEDIA_SEARCH_PATH}
|
||||
PATHS ${OGRE_PREFIX_PATH} PATH_SUFFIXES ${OGRE_MEDIA_SEARCH_SUFFIX})
|
||||
|
||||
|
|
48
cmake/FindZZip.cmake
Normal file
48
cmake/FindZZip.cmake
Normal file
|
@ -0,0 +1,48 @@
|
|||
#-------------------------------------------------------------------
|
||||
# This file is part of the CMake build system for OGRE
|
||||
# (Object-oriented Graphics Rendering Engine)
|
||||
# For the latest info, see http://www.ogre3d.org/
|
||||
#
|
||||
# The contents of this file are placed in the public domain. Feel
|
||||
# free to make use of it in any way you like.
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
# - Try to find zziplib
|
||||
# Once done, this will define
|
||||
#
|
||||
# ZZip_FOUND - system has ZZip
|
||||
# ZZip_INCLUDE_DIRS - the ZZip include directories
|
||||
# ZZip_LIBRARIES - link these to use ZZip
|
||||
|
||||
include(FindPkgMacros)
|
||||
findpkg_begin(ZZip)
|
||||
|
||||
# Get path, convert backslashes as ${ENV_${var}}
|
||||
getenv_path(ZZIP_HOME)
|
||||
|
||||
|
||||
# construct search paths
|
||||
set(ZZip_PREFIX_PATH ${ZZIP_HOME} ${ENV_ZZIP_HOME})
|
||||
create_search_paths(ZZip)
|
||||
# redo search if prefix path changed
|
||||
clear_if_changed(ZZip_PREFIX_PATH
|
||||
ZZip_LIBRARY_FWK
|
||||
ZZip_LIBRARY_REL
|
||||
ZZip_LIBRARY_DBG
|
||||
ZZip_INCLUDE_DIR
|
||||
)
|
||||
|
||||
set(ZZip_LIBRARY_NAMES zzip zziplib)
|
||||
get_debug_names(ZZip_LIBRARY_NAMES)
|
||||
|
||||
use_pkgconfig(ZZip_PKGC zziplib)
|
||||
|
||||
findpkg_framework(ZZip)
|
||||
|
||||
find_path(ZZip_INCLUDE_DIR NAMES zzip/zzip.h HINTS ${ZZip_INC_SEARCH_PATH} ${ZZip_PKGC_INCLUDE_DIRS})
|
||||
find_library(ZZip_LIBRARY_REL NAMES ${ZZip_LIBRARY_NAMES} HINTS ${ZZip_LIB_SEARCH_PATH} ${ZZip_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" release relwithdebinfo minsizerel)
|
||||
find_library(ZZip_LIBRARY_DBG NAMES ${ZZip_LIBRARY_NAMES_DBG} HINTS ${ZZip_LIB_SEARCH_PATH} ${ZZip_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" debug)
|
||||
make_library_set(ZZip_LIBRARY)
|
||||
|
||||
findpkg_finish(ZZip)
|
||||
|
|
@ -639,7 +639,7 @@ namespace Compiler
|
|||
std::vector<Interpreter::Type_Code>& code, bool invert)
|
||||
{
|
||||
bool optional = false;
|
||||
bool optionalCount = 0;
|
||||
int optionalCount = 0;
|
||||
|
||||
ExprParser parser (getErrorHandler(), getContext(), mLocals, mLiterals, true);
|
||||
StringParser stringParser (getErrorHandler(), getContext(), mLiterals);
|
||||
|
|
|
@ -77,4 +77,3 @@ namespace Compiler
|
|||
mOutput.clear();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -39,6 +39,11 @@ namespace Compiler
|
|||
mState = CommaState;
|
||||
return true;
|
||||
}
|
||||
else if (code==Scanner::S_newline && mState==StartState)
|
||||
{
|
||||
scanner.putbackSpecial (code, loc);
|
||||
return false;
|
||||
}
|
||||
|
||||
return Parser::parseSpecial (code, loc, scanner);
|
||||
}
|
||||
|
|
165
extern/mygui_3.0.1/COPYING.LESSER
vendored
165
extern/mygui_3.0.1/COPYING.LESSER
vendored
|
@ -1,165 +0,0 @@
|
|||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates
|
||||
the terms and conditions of version 3 of the GNU General Public
|
||||
License, supplemented by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||
General Public License.
|
||||
|
||||
"The Library" refers to a covered work governed by this License,
|
||||
other than an Application or a Combined Work as defined below.
|
||||
|
||||
An "Application" is any work that makes use of an interface provided
|
||||
by the Library, but which is not otherwise based on the Library.
|
||||
Defining a subclass of a class defined by the Library is deemed a mode
|
||||
of using an interface provided by the Library.
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an
|
||||
Application with the Library. The particular version of the Library
|
||||
with which the Combined Work was made is also called the "Linked
|
||||
Version".
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the
|
||||
Corresponding Source for the Combined Work, excluding any source code
|
||||
for portions of the Combined Work that, considered in isolation, are
|
||||
based on the Application, and not on the Linked Version.
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the
|
||||
object code and/or source code for the Application, including any data
|
||||
and utility programs needed for reproducing the Combined Work from the
|
||||
Application, but excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License
|
||||
without being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a
|
||||
facility refers to a function or data to be supplied by an Application
|
||||
that uses the facility (other than as an argument passed when the
|
||||
facility is invoked), then you may convey a copy of the modified
|
||||
version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to
|
||||
ensure that, in the event an Application does not supply the
|
||||
function or data, the facility still operates, and performs
|
||||
whatever part of its purpose remains meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of
|
||||
this License applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from
|
||||
a header file that is part of the Library. You may convey such object
|
||||
code under terms of your choice, provided that, if the incorporated
|
||||
material is not limited to numerical parameters, data structure
|
||||
layouts and accessors, or small macros, inline functions and templates
|
||||
(ten or fewer lines in length), you do both of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the
|
||||
Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that,
|
||||
taken together, effectively do not restrict modification of the
|
||||
portions of the Library contained in the Combined Work and reverse
|
||||
engineering for debugging such modifications, if you also do each of
|
||||
the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during
|
||||
execution, include the copyright notice for the Library among
|
||||
these notices, as well as a reference directing the user to the
|
||||
copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this
|
||||
License, and the Corresponding Application Code in a form
|
||||
suitable for, and under terms that permit, the user to
|
||||
recombine or relink the Application with a modified version of
|
||||
the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (a) uses at run time
|
||||
a copy of the Library already present on the user's computer
|
||||
system, and (b) will operate properly with a modified version
|
||||
of the Library that is interface-compatible with the Linked
|
||||
Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise
|
||||
be required to provide such information under section 6 of the
|
||||
GNU GPL, and only to the extent that such information is
|
||||
necessary to install and execute a modified version of the
|
||||
Combined Work produced by recombining or relinking the
|
||||
Application with a modified version of the Linked Version. (If
|
||||
you use option 4d0, the Installation Information must accompany
|
||||
the Minimal Corresponding Source and Corresponding Application
|
||||
Code. If you use option 4d1, you must provide the Installation
|
||||
Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the
|
||||
Library side by side in a single library together with other library
|
||||
facilities that are not Applications and are not covered by this
|
||||
License, and convey such a combined library under terms of your
|
||||
choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based
|
||||
on the Library, uncombined with any other library facilities,
|
||||
conveyed under the terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it
|
||||
is a work based on the Library, and explaining where to find the
|
||||
accompanying uncombined form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU Lesser General Public License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Library as you received it specifies that a certain numbered version
|
||||
of the GNU Lesser General Public License "or any later version"
|
||||
applies to it, you have the option of following the terms and
|
||||
conditions either of that published version or of any later version
|
||||
published by the Free Software Foundation. If the Library as you
|
||||
received it does not specify a version number of the GNU Lesser
|
||||
General Public License, you may choose any version of the GNU Lesser
|
||||
General Public License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
35
extern/mygui_3.0.1/MyGUIEngine/CMakeLists.txt
vendored
35
extern/mygui_3.0.1/MyGUIEngine/CMakeLists.txt
vendored
|
@ -1,35 +0,0 @@
|
|||
set (PROJECT_NAME MyGUIEngine)
|
||||
|
||||
project( ${PROJECT_NAME} )
|
||||
|
||||
include(${PROJECT_NAME}.list)
|
||||
|
||||
include_directories(include)
|
||||
if (MYGUI_USE_FREETYPE)
|
||||
include_directories(
|
||||
${FREETYPE_INCLUDE_DIRS}
|
||||
)
|
||||
add_definitions(-DMYGUI_USE_FREETYPE)
|
||||
endif ()
|
||||
|
||||
add_definitions(-DMYGUI_BUILD)
|
||||
|
||||
if (WIN32)
|
||||
add_definitions(-DNOMINMAX)
|
||||
endif ()
|
||||
|
||||
add_library(${PROJECT_NAME} ${MYGUI_LIB_TYPE} ${HEADER_FILES} ${SOURCE_FILES})
|
||||
if (MYGUI_USE_FREETYPE)
|
||||
target_link_libraries(${PROJECT_NAME}
|
||||
${FREETYPE_LIBRARIES}
|
||||
)
|
||||
endif()
|
||||
|
||||
# We don't need this lib in OS X. uuid functions is in libc here.
|
||||
if (NOT APPLE)
|
||||
target_link_libraries(${PROJECT_NAME} ${CMAKE_DL_LIBS} uuid)
|
||||
endif(NOT APPLE)
|
||||
|
||||
if (MINGW)
|
||||
target_link_libraries(${PROJECT_NAME} libwinmm.a)
|
||||
endif (MINGW)
|
561
extern/mygui_3.0.1/MyGUIEngine/MyGUIEngine.list
vendored
561
extern/mygui_3.0.1/MyGUIEngine/MyGUIEngine.list
vendored
|
@ -1,561 +0,0 @@
|
|||
set (HEADER_FILES
|
||||
include/MyGUI_Allocator.h
|
||||
include/MyGUI_CustomAllocator.h
|
||||
include/MyGUI_DDItemInfo.h
|
||||
include/MyGUI_IBItemInfo.h
|
||||
include/MyGUI_MenuItemType.h
|
||||
include/MyGUI_MessageStyle.h
|
||||
include/MyGUI_WidgetToolTip.h
|
||||
include/MyGUI_Button.h
|
||||
include/MyGUI_Canvas.h
|
||||
include/MyGUI_ComboBox.h
|
||||
include/MyGUI_DDContainer.h
|
||||
include/MyGUI_Edit.h
|
||||
include/MyGUI_HScroll.h
|
||||
include/MyGUI_ItemBox.h
|
||||
include/MyGUI_List.h
|
||||
include/MyGUI_ListBox.h
|
||||
include/MyGUI_ListCtrl.h
|
||||
include/MyGUI_MenuBar.h
|
||||
include/MyGUI_MenuCtrl.h
|
||||
include/MyGUI_MenuItem.h
|
||||
include/MyGUI_Message.h
|
||||
include/MyGUI_MultiList.h
|
||||
include/MyGUI_PopupMenu.h
|
||||
include/MyGUI_Progress.h
|
||||
include/MyGUI_ScrollView.h
|
||||
include/MyGUI_StaticImage.h
|
||||
include/MyGUI_StaticText.h
|
||||
include/MyGUI_Tab.h
|
||||
include/MyGUI_TabItem.h
|
||||
include/MyGUI_VScroll.h
|
||||
include/MyGUI_Widget.h
|
||||
include/MyGUI_Window.h
|
||||
include/MyGUI_IWidgetFactory.h
|
||||
include/MyGUI_Bitwise.h
|
||||
include/MyGUI_CoordConverter.h
|
||||
include/MyGUI_DataFileStream.h
|
||||
include/MyGUI_DataStream.h
|
||||
include/MyGUI_Delegate.h
|
||||
include/MyGUI_DelegateImplement.h
|
||||
include/MyGUI_DynLib.h
|
||||
include/MyGUI_Enumerator.h
|
||||
include/MyGUI_EventPair.h
|
||||
include/MyGUI_Guid.h
|
||||
include/MyGUI_RenderOut.h
|
||||
include/MyGUI_TextChangeHistory.h
|
||||
include/MyGUI_TextIterator.h
|
||||
include/MyGUI_TextureUtility.h
|
||||
include/MyGUI_TextView.h
|
||||
include/MyGUI_Timer.h
|
||||
include/MyGUI_UString.h
|
||||
include/MyGUI_Utility.h
|
||||
include/MyGUI_WidgetTranslate.h
|
||||
include/MyGUI_XmlDocument.h
|
||||
include/MyGUI_LogManager.h
|
||||
include/MyGUI_LogStream.h
|
||||
include/MyGUI.h
|
||||
include/MyGUI_CastWidget.h
|
||||
include/MyGUI_Common.h
|
||||
include/MyGUI_Diagnostic.h
|
||||
include/MyGUI_Exception.h
|
||||
include/MyGUI_GenericFactory.h
|
||||
include/MyGUI_Macros.h
|
||||
include/MyGUI_Platform.h
|
||||
include/MyGUI_Precompiled.h
|
||||
include/MyGUI_Prerequest.h
|
||||
include/MyGUI_RenderFormat.h
|
||||
include/MyGUI_ResourceHolder.h
|
||||
include/MyGUI_WidgetDefines.h
|
||||
include/MyGUI_ICroppedRectangle.h
|
||||
include/MyGUI_IDataStream.h
|
||||
include/MyGUI_Instance.h
|
||||
include/MyGUI_IObject.h
|
||||
include/MyGUI_ISerializable.h
|
||||
include/MyGUI_ITexture.h
|
||||
include/MyGUI_IUnlinkWidget.h
|
||||
include/MyGUI_IVertexBuffer.h
|
||||
include/MyGUI_IWidgetCreator.h
|
||||
include/MyGUI_Plugin.h
|
||||
include/MyGUI_RTTI.h
|
||||
include/MyGUI_BiIndexBase.h
|
||||
include/MyGUI_ScrollViewBase.h
|
||||
include/MyGUI_WidgetEvent.h
|
||||
include/MyGUI_WidgetUserData.h
|
||||
include/MyGUI_EditText.h
|
||||
include/MyGUI_MainSkin.h
|
||||
include/MyGUI_RawRect.h
|
||||
include/MyGUI_RotatingSkin.h
|
||||
include/MyGUI_SimpleText.h
|
||||
include/MyGUI_SubSkin.h
|
||||
include/MyGUI_TileRect.h
|
||||
include/MyGUI_IStateInfo.h
|
||||
include/MyGUI_ISubWidget.h
|
||||
include/MyGUI_ISubWidgetRect.h
|
||||
include/MyGUI_ISubWidgetText.h
|
||||
include/MyGUI_LayerItem.h
|
||||
include/MyGUI_LayerNode.h
|
||||
include/MyGUI_OverlappedLayer.h
|
||||
include/MyGUI_RenderItem.h
|
||||
include/MyGUI_SharedLayer.h
|
||||
include/MyGUI_SharedLayerNode.h
|
||||
include/MyGUI_ILayer.h
|
||||
include/MyGUI_ILayerItem.h
|
||||
include/MyGUI_ILayerNode.h
|
||||
include/MyGUI_IRenderTarget.h
|
||||
include/MyGUI_ActionController.h
|
||||
include/MyGUI_ControllerEdgeHide.h
|
||||
include/MyGUI_ControllerFadeAlpha.h
|
||||
include/MyGUI_ControllerItem.h
|
||||
include/MyGUI_ControllerPosition.h
|
||||
include/MyGUI_ResourceImageSet.h
|
||||
include/MyGUI_ResourceImageSetPointer.h
|
||||
include/MyGUI_ResourceManualFont.h
|
||||
include/MyGUI_ResourceManualPointer.h
|
||||
include/MyGUI_ResourceSkin.h
|
||||
include/MyGUI_ResourceTrueTypeFont.h
|
||||
include/MyGUI_IFont.h
|
||||
include/MyGUI_IPointer.h
|
||||
include/MyGUI_IResource.h
|
||||
include/MyGUI_ChildSkinInfo.h
|
||||
include/MyGUI_FontData.h
|
||||
include/MyGUI_MaskPickInfo.h
|
||||
include/MyGUI_SubWidgetBinding.h
|
||||
include/MyGUI_SubWidgetInfo.h
|
||||
include/MyGUI_Align.h
|
||||
include/MyGUI_Any.h
|
||||
include/MyGUI_Colour.h
|
||||
include/MyGUI_CommonStateInfo.h
|
||||
include/MyGUI_ImageInfo.h
|
||||
include/MyGUI_InputDefine.h
|
||||
include/MyGUI_RenderTargetInfo.h
|
||||
include/MyGUI_TCoord.h
|
||||
include/MyGUI_TPoint.h
|
||||
include/MyGUI_TRect.h
|
||||
include/MyGUI_TSize.h
|
||||
include/MyGUI_Types.h
|
||||
include/MyGUI_Version.h
|
||||
include/MyGUI_VertexData.h
|
||||
include/MyGUI_WidgetStyle.h
|
||||
include/MyGUI_ClipboardManager.h
|
||||
include/MyGUI_ControllerManager.h
|
||||
include/MyGUI_DataManager.h
|
||||
include/MyGUI_DynLibManager.h
|
||||
include/MyGUI_FactoryManager.h
|
||||
include/MyGUI_FontManager.h
|
||||
include/MyGUI_Gui.h
|
||||
include/MyGUI_InputManager.h
|
||||
include/MyGUI_LanguageManager.h
|
||||
include/MyGUI_LayerManager.h
|
||||
include/MyGUI_LayoutManager.h
|
||||
include/MyGUI_PluginManager.h
|
||||
include/MyGUI_PointerManager.h
|
||||
include/MyGUI_RenderManager.h
|
||||
include/MyGUI_ResourceManager.h
|
||||
include/MyGUI_SkinManager.h
|
||||
include/MyGUI_SubWidgetManager.h
|
||||
include/MyGUI_WidgetManager.h
|
||||
)
|
||||
set (SOURCE_FILES
|
||||
src/MyGUI_Button.cpp
|
||||
src/MyGUI_Canvas.cpp
|
||||
src/MyGUI_ComboBox.cpp
|
||||
src/MyGUI_DDContainer.cpp
|
||||
src/MyGUI_Edit.cpp
|
||||
src/MyGUI_HScroll.cpp
|
||||
src/MyGUI_ItemBox.cpp
|
||||
src/MyGUI_List.cpp
|
||||
src/MyGUI_ListBox.cpp
|
||||
src/MyGUI_ListCtrl.cpp
|
||||
src/MyGUI_MenuBar.cpp
|
||||
src/MyGUI_MenuCtrl.cpp
|
||||
src/MyGUI_MenuItem.cpp
|
||||
src/MyGUI_Message.cpp
|
||||
src/MyGUI_MultiList.cpp
|
||||
src/MyGUI_PopupMenu.cpp
|
||||
src/MyGUI_Progress.cpp
|
||||
src/MyGUI_ScrollView.cpp
|
||||
src/MyGUI_StaticImage.cpp
|
||||
src/MyGUI_StaticText.cpp
|
||||
src/MyGUI_Tab.cpp
|
||||
src/MyGUI_TabItem.cpp
|
||||
src/MyGUI_VScroll.cpp
|
||||
src/MyGUI_Widget.cpp
|
||||
src/MyGUI_Window.cpp
|
||||
src/MyGUI_EditText.cpp
|
||||
src/MyGUI_MainSkin.cpp
|
||||
src/MyGUI_RawRect.cpp
|
||||
src/MyGUI_RotatingSkin.cpp
|
||||
src/MyGUI_SimpleText.cpp
|
||||
src/MyGUI_SubSkin.cpp
|
||||
src/MyGUI_TileRect.cpp
|
||||
src/MyGUI_LayerItem.cpp
|
||||
src/MyGUI_LayerNode.cpp
|
||||
src/MyGUI_OverlappedLayer.cpp
|
||||
src/MyGUI_RenderItem.cpp
|
||||
src/MyGUI_SharedLayer.cpp
|
||||
src/MyGUI_SharedLayerNode.cpp
|
||||
src/MyGUI_ActionController.cpp
|
||||
src/MyGUI_ControllerEdgeHide.cpp
|
||||
src/MyGUI_ControllerFadeAlpha.cpp
|
||||
src/MyGUI_ControllerPosition.cpp
|
||||
src/MyGUI_Exception.cpp
|
||||
src/MyGUI_Precompiled.cpp
|
||||
src/MyGUI_IWidgetCreator.cpp
|
||||
src/MyGUI_ScrollViewBase.cpp
|
||||
src/MyGUI_ResourceImageSet.cpp
|
||||
src/MyGUI_ResourceImageSetPointer.cpp
|
||||
src/MyGUI_ResourceManualFont.cpp
|
||||
src/MyGUI_ResourceManualPointer.cpp
|
||||
src/MyGUI_ResourceSkin.cpp
|
||||
src/MyGUI_ResourceTrueTypeFont.cpp
|
||||
src/MyGUI_MaskPickInfo.cpp
|
||||
src/MyGUI_Any.cpp
|
||||
src/MyGUI_Colour.cpp
|
||||
src/MyGUI_ClipboardManager.cpp
|
||||
src/MyGUI_ControllerManager.cpp
|
||||
src/MyGUI_DataManager.cpp
|
||||
src/MyGUI_DynLibManager.cpp
|
||||
src/MyGUI_FactoryManager.cpp
|
||||
src/MyGUI_FontManager.cpp
|
||||
src/MyGUI_Gui.cpp
|
||||
src/MyGUI_InputManager.cpp
|
||||
src/MyGUI_LanguageManager.cpp
|
||||
src/MyGUI_LayerManager.cpp
|
||||
src/MyGUI_LayoutManager.cpp
|
||||
src/MyGUI_PluginManager.cpp
|
||||
src/MyGUI_PointerManager.cpp
|
||||
src/MyGUI_RenderManager.cpp
|
||||
src/MyGUI_ResourceManager.cpp
|
||||
src/MyGUI_SkinManager.cpp
|
||||
src/MyGUI_SubWidgetManager.cpp
|
||||
src/MyGUI_WidgetManager.cpp
|
||||
src/MyGUI_DataFileStream.cpp
|
||||
src/MyGUI_DataStream.cpp
|
||||
src/MyGUI_DynLib.cpp
|
||||
src/MyGUI_Guid.cpp
|
||||
src/MyGUI_RenderOut.cpp
|
||||
src/MyGUI_TextIterator.cpp
|
||||
src/MyGUI_TextureUtility.cpp
|
||||
src/MyGUI_Timer.cpp
|
||||
src/MyGUI_XmlDocument.cpp
|
||||
src/MyGUI_LogManager.cpp
|
||||
src/MyGUI_LogStream.cpp
|
||||
)
|
||||
SOURCE_GROUP("Source Files\\Widget\\Widget" FILES
|
||||
src/MyGUI_Button.cpp
|
||||
src/MyGUI_Canvas.cpp
|
||||
src/MyGUI_ComboBox.cpp
|
||||
src/MyGUI_DDContainer.cpp
|
||||
src/MyGUI_Edit.cpp
|
||||
src/MyGUI_HScroll.cpp
|
||||
src/MyGUI_ItemBox.cpp
|
||||
src/MyGUI_List.cpp
|
||||
src/MyGUI_ListBox.cpp
|
||||
src/MyGUI_ListCtrl.cpp
|
||||
src/MyGUI_MenuBar.cpp
|
||||
src/MyGUI_MenuCtrl.cpp
|
||||
src/MyGUI_MenuItem.cpp
|
||||
src/MyGUI_Message.cpp
|
||||
src/MyGUI_MultiList.cpp
|
||||
src/MyGUI_PopupMenu.cpp
|
||||
src/MyGUI_Progress.cpp
|
||||
src/MyGUI_ScrollView.cpp
|
||||
src/MyGUI_StaticImage.cpp
|
||||
src/MyGUI_StaticText.cpp
|
||||
src/MyGUI_Tab.cpp
|
||||
src/MyGUI_TabItem.cpp
|
||||
src/MyGUI_VScroll.cpp
|
||||
src/MyGUI_Widget.cpp
|
||||
src/MyGUI_Window.cpp
|
||||
)
|
||||
SOURCE_GROUP("Source Files\\Widget" FILES
|
||||
)
|
||||
SOURCE_GROUP("Source Files\\Core\\SubWidget" FILES
|
||||
src/MyGUI_EditText.cpp
|
||||
src/MyGUI_MainSkin.cpp
|
||||
src/MyGUI_RawRect.cpp
|
||||
src/MyGUI_RotatingSkin.cpp
|
||||
src/MyGUI_SimpleText.cpp
|
||||
src/MyGUI_SubSkin.cpp
|
||||
src/MyGUI_TileRect.cpp
|
||||
)
|
||||
SOURCE_GROUP("Source Files\\Core\\LayerItem" FILES
|
||||
src/MyGUI_LayerItem.cpp
|
||||
src/MyGUI_LayerNode.cpp
|
||||
src/MyGUI_OverlappedLayer.cpp
|
||||
src/MyGUI_RenderItem.cpp
|
||||
src/MyGUI_SharedLayer.cpp
|
||||
src/MyGUI_SharedLayerNode.cpp
|
||||
)
|
||||
SOURCE_GROUP("Source Files\\Core\\Controller" FILES
|
||||
src/MyGUI_ActionController.cpp
|
||||
src/MyGUI_ControllerEdgeHide.cpp
|
||||
src/MyGUI_ControllerFadeAlpha.cpp
|
||||
src/MyGUI_ControllerPosition.cpp
|
||||
)
|
||||
SOURCE_GROUP("Source Files\\Core\\Common\\Interfaces" FILES
|
||||
src/MyGUI_IWidgetCreator.cpp
|
||||
)
|
||||
SOURCE_GROUP("Source Files\\Core\\Common\\Base" FILES
|
||||
src/MyGUI_ScrollViewBase.cpp
|
||||
)
|
||||
SOURCE_GROUP("Source Files\\Core\\Common" FILES
|
||||
src/MyGUI_Exception.cpp
|
||||
src/MyGUI_Precompiled.cpp
|
||||
)
|
||||
SOURCE_GROUP("Source Files\\Core\\Resource\\Data" FILES
|
||||
src/MyGUI_MaskPickInfo.cpp
|
||||
)
|
||||
SOURCE_GROUP("Source Files\\Core\\Resource" FILES
|
||||
src/MyGUI_ResourceImageSet.cpp
|
||||
src/MyGUI_ResourceImageSetPointer.cpp
|
||||
src/MyGUI_ResourceManualFont.cpp
|
||||
src/MyGUI_ResourceManualPointer.cpp
|
||||
src/MyGUI_ResourceSkin.cpp
|
||||
src/MyGUI_ResourceTrueTypeFont.cpp
|
||||
)
|
||||
SOURCE_GROUP("Source Files\\Core\\Types" FILES
|
||||
src/MyGUI_Any.cpp
|
||||
src/MyGUI_Colour.cpp
|
||||
)
|
||||
SOURCE_GROUP("Source Files\\Core\\Manager" FILES
|
||||
src/MyGUI_ClipboardManager.cpp
|
||||
src/MyGUI_ControllerManager.cpp
|
||||
src/MyGUI_DataManager.cpp
|
||||
src/MyGUI_DynLibManager.cpp
|
||||
src/MyGUI_FactoryManager.cpp
|
||||
src/MyGUI_FontManager.cpp
|
||||
src/MyGUI_Gui.cpp
|
||||
src/MyGUI_InputManager.cpp
|
||||
src/MyGUI_LanguageManager.cpp
|
||||
src/MyGUI_LayerManager.cpp
|
||||
src/MyGUI_LayoutManager.cpp
|
||||
src/MyGUI_PluginManager.cpp
|
||||
src/MyGUI_PointerManager.cpp
|
||||
src/MyGUI_RenderManager.cpp
|
||||
src/MyGUI_ResourceManager.cpp
|
||||
src/MyGUI_SkinManager.cpp
|
||||
src/MyGUI_SubWidgetManager.cpp
|
||||
src/MyGUI_WidgetManager.cpp
|
||||
)
|
||||
SOURCE_GROUP("Source Files\\Core" FILES
|
||||
)
|
||||
SOURCE_GROUP("Source Files\\Utility\\Logging" FILES
|
||||
src/MyGUI_LogManager.cpp
|
||||
src/MyGUI_LogStream.cpp
|
||||
)
|
||||
SOURCE_GROUP("Source Files\\Utility" FILES
|
||||
src/MyGUI_DataFileStream.cpp
|
||||
src/MyGUI_DataStream.cpp
|
||||
src/MyGUI_DynLib.cpp
|
||||
src/MyGUI_Guid.cpp
|
||||
src/MyGUI_RenderOut.cpp
|
||||
src/MyGUI_TextIterator.cpp
|
||||
src/MyGUI_TextureUtility.cpp
|
||||
src/MyGUI_Timer.cpp
|
||||
src/MyGUI_XmlDocument.cpp
|
||||
)
|
||||
SOURCE_GROUP("Source Files" FILES
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Widget\\Types" FILES
|
||||
include/MyGUI_DDItemInfo.h
|
||||
include/MyGUI_IBItemInfo.h
|
||||
include/MyGUI_MenuItemType.h
|
||||
include/MyGUI_MessageStyle.h
|
||||
include/MyGUI_WidgetToolTip.h
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Widget\\Widget" FILES
|
||||
include/MyGUI_Button.h
|
||||
include/MyGUI_Canvas.h
|
||||
include/MyGUI_ComboBox.h
|
||||
include/MyGUI_DDContainer.h
|
||||
include/MyGUI_Edit.h
|
||||
include/MyGUI_HScroll.h
|
||||
include/MyGUI_ItemBox.h
|
||||
include/MyGUI_List.h
|
||||
include/MyGUI_ListBox.h
|
||||
include/MyGUI_ListCtrl.h
|
||||
include/MyGUI_MenuBar.h
|
||||
include/MyGUI_MenuCtrl.h
|
||||
include/MyGUI_MenuItem.h
|
||||
include/MyGUI_Message.h
|
||||
include/MyGUI_MultiList.h
|
||||
include/MyGUI_PopupMenu.h
|
||||
include/MyGUI_Progress.h
|
||||
include/MyGUI_ScrollView.h
|
||||
include/MyGUI_StaticImage.h
|
||||
include/MyGUI_StaticText.h
|
||||
include/MyGUI_Tab.h
|
||||
include/MyGUI_TabItem.h
|
||||
include/MyGUI_VScroll.h
|
||||
include/MyGUI_Widget.h
|
||||
include/MyGUI_Window.h
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Widget\\Interfaces" FILES
|
||||
include/MyGUI_IWidgetFactory.h
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Widget" FILES
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Utility\\Logging" FILES
|
||||
include/MyGUI_LogManager.h
|
||||
include/MyGUI_LogStream.h
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Utility" FILES
|
||||
include/MyGUI_Bitwise.h
|
||||
include/MyGUI_CoordConverter.h
|
||||
include/MyGUI_DataFileStream.h
|
||||
include/MyGUI_DataStream.h
|
||||
include/MyGUI_Delegate.h
|
||||
include/MyGUI_DelegateImplement.h
|
||||
include/MyGUI_DynLib.h
|
||||
include/MyGUI_Enumerator.h
|
||||
include/MyGUI_EventPair.h
|
||||
include/MyGUI_Guid.h
|
||||
include/MyGUI_RenderOut.h
|
||||
include/MyGUI_TextChangeHistory.h
|
||||
include/MyGUI_TextIterator.h
|
||||
include/MyGUI_TextureUtility.h
|
||||
include/MyGUI_TextView.h
|
||||
include/MyGUI_Timer.h
|
||||
include/MyGUI_UString.h
|
||||
include/MyGUI_Utility.h
|
||||
include/MyGUI_WidgetTranslate.h
|
||||
include/MyGUI_XmlDocument.h
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Core\\Common\\Interfaces" FILES
|
||||
include/MyGUI_ICroppedRectangle.h
|
||||
include/MyGUI_IDataStream.h
|
||||
include/MyGUI_Instance.h
|
||||
include/MyGUI_IObject.h
|
||||
include/MyGUI_ISerializable.h
|
||||
include/MyGUI_ITexture.h
|
||||
include/MyGUI_IUnlinkWidget.h
|
||||
include/MyGUI_IVertexBuffer.h
|
||||
include/MyGUI_IWidgetCreator.h
|
||||
include/MyGUI_Plugin.h
|
||||
include/MyGUI_RTTI.h
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Core\\Common\\Base" FILES
|
||||
include/MyGUI_BiIndexBase.h
|
||||
include/MyGUI_ScrollViewBase.h
|
||||
include/MyGUI_WidgetEvent.h
|
||||
include/MyGUI_WidgetUserData.h
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Core\\Common" FILES
|
||||
include/MyGUI.h
|
||||
include/MyGUI_CastWidget.h
|
||||
include/MyGUI_Common.h
|
||||
include/MyGUI_Diagnostic.h
|
||||
include/MyGUI_Exception.h
|
||||
include/MyGUI_GenericFactory.h
|
||||
include/MyGUI_Macros.h
|
||||
include/MyGUI_Platform.h
|
||||
include/MyGUI_Precompiled.h
|
||||
include/MyGUI_Prerequest.h
|
||||
include/MyGUI_RenderFormat.h
|
||||
include/MyGUI_ResourceHolder.h
|
||||
include/MyGUI_WidgetDefines.h
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Core\\SubWidget\\Interfaces" FILES
|
||||
include/MyGUI_IStateInfo.h
|
||||
include/MyGUI_ISubWidget.h
|
||||
include/MyGUI_ISubWidgetRect.h
|
||||
include/MyGUI_ISubWidgetText.h
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Core\\SubWidget" FILES
|
||||
include/MyGUI_EditText.h
|
||||
include/MyGUI_MainSkin.h
|
||||
include/MyGUI_RawRect.h
|
||||
include/MyGUI_RotatingSkin.h
|
||||
include/MyGUI_SimpleText.h
|
||||
include/MyGUI_SubSkin.h
|
||||
include/MyGUI_TileRect.h
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Core\\LayerItem\\Interfaces" FILES
|
||||
include/MyGUI_ILayer.h
|
||||
include/MyGUI_ILayerItem.h
|
||||
include/MyGUI_ILayerNode.h
|
||||
include/MyGUI_IRenderTarget.h
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Core\\LayerItem" FILES
|
||||
include/MyGUI_LayerItem.h
|
||||
include/MyGUI_LayerNode.h
|
||||
include/MyGUI_OverlappedLayer.h
|
||||
include/MyGUI_RenderItem.h
|
||||
include/MyGUI_SharedLayer.h
|
||||
include/MyGUI_SharedLayerNode.h
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Core\\Controller" FILES
|
||||
include/MyGUI_ActionController.h
|
||||
include/MyGUI_ControllerEdgeHide.h
|
||||
include/MyGUI_ControllerFadeAlpha.h
|
||||
include/MyGUI_ControllerItem.h
|
||||
include/MyGUI_ControllerPosition.h
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Core\\Resource\\Interface" FILES
|
||||
include/MyGUI_IFont.h
|
||||
include/MyGUI_IPointer.h
|
||||
include/MyGUI_IResource.h
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Core\\Resource\\Data" FILES
|
||||
include/MyGUI_ChildSkinInfo.h
|
||||
include/MyGUI_FontData.h
|
||||
include/MyGUI_MaskPickInfo.h
|
||||
include/MyGUI_SubWidgetBinding.h
|
||||
include/MyGUI_SubWidgetInfo.h
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Core\\Resource" FILES
|
||||
include/MyGUI_ResourceImageSet.h
|
||||
include/MyGUI_ResourceImageSetPointer.h
|
||||
include/MyGUI_ResourceManualFont.h
|
||||
include/MyGUI_ResourceManualPointer.h
|
||||
include/MyGUI_ResourceSkin.h
|
||||
include/MyGUI_ResourceTrueTypeFont.h
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Core\\Types" FILES
|
||||
include/MyGUI_Align.h
|
||||
include/MyGUI_Any.h
|
||||
include/MyGUI_Colour.h
|
||||
include/MyGUI_CommonStateInfo.h
|
||||
include/MyGUI_ImageInfo.h
|
||||
include/MyGUI_InputDefine.h
|
||||
include/MyGUI_RenderTargetInfo.h
|
||||
include/MyGUI_TCoord.h
|
||||
include/MyGUI_TPoint.h
|
||||
include/MyGUI_TRect.h
|
||||
include/MyGUI_TSize.h
|
||||
include/MyGUI_Types.h
|
||||
include/MyGUI_Version.h
|
||||
include/MyGUI_VertexData.h
|
||||
include/MyGUI_WidgetStyle.h
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Core\\Manager" FILES
|
||||
include/MyGUI_ClipboardManager.h
|
||||
include/MyGUI_ControllerManager.h
|
||||
include/MyGUI_DataManager.h
|
||||
include/MyGUI_DynLibManager.h
|
||||
include/MyGUI_FactoryManager.h
|
||||
include/MyGUI_FontManager.h
|
||||
include/MyGUI_Gui.h
|
||||
include/MyGUI_InputManager.h
|
||||
include/MyGUI_LanguageManager.h
|
||||
include/MyGUI_LayerManager.h
|
||||
include/MyGUI_LayoutManager.h
|
||||
include/MyGUI_PluginManager.h
|
||||
include/MyGUI_PointerManager.h
|
||||
include/MyGUI_RenderManager.h
|
||||
include/MyGUI_ResourceManager.h
|
||||
include/MyGUI_SkinManager.h
|
||||
include/MyGUI_SubWidgetManager.h
|
||||
include/MyGUI_WidgetManager.h
|
||||
)
|
||||
SOURCE_GROUP("Header Files\\Core" FILES
|
||||
)
|
||||
SOURCE_GROUP("Header Files" FILES
|
||||
include/MyGUI_Allocator.h
|
||||
include/MyGUI_CustomAllocator.h
|
||||
)
|
||||
SOURCE_GROUP("" FILES
|
||||
CMakeLists.txt
|
||||
)
|
92
extern/mygui_3.0.1/MyGUIEngine/include/MyGUI.h
vendored
92
extern/mygui_3.0.1/MyGUIEngine/include/MyGUI.h
vendored
|
@ -1,92 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Georgiy Evmenov
|
||||
@date 01/2008
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_H__
|
||||
#define __MYGUI_H__
|
||||
|
||||
#include "MyGUI_Gui.h"
|
||||
|
||||
#include "MyGUI_Button.h"
|
||||
#include "MyGUI_ComboBox.h"
|
||||
#include "MyGUI_Edit.h"
|
||||
#include "MyGUI_HScroll.h"
|
||||
#include "MyGUI_List.h"
|
||||
#include "MyGUI_StaticText.h"
|
||||
#include "MyGUI_StaticImage.h"
|
||||
#include "MyGUI_Tab.h"
|
||||
#include "MyGUI_TabItem.h"
|
||||
#include "MyGUI_VScroll.h"
|
||||
#include "MyGUI_Window.h"
|
||||
#include "MyGUI_Progress.h"
|
||||
#include "MyGUI_Message.h"
|
||||
#include "MyGUI_ItemBox.h"
|
||||
#include "MyGUI_MultiList.h"
|
||||
#include "MyGUI_MenuCtrl.h"
|
||||
#include "MyGUI_MenuItem.h"
|
||||
#include "MyGUI_PopupMenu.h"
|
||||
#include "MyGUI_MenuBar.h"
|
||||
#include "MyGUI_ScrollView.h"
|
||||
#include "MyGUI_DDContainer.h"
|
||||
#include "MyGUI_Canvas.h"
|
||||
#include "MyGUI_ListCtrl.h"
|
||||
#include "MyGUI_ListBox.h"
|
||||
|
||||
#include "MyGUI_InputManager.h"
|
||||
#include "MyGUI_SubWidgetManager.h"
|
||||
#include "MyGUI_ClipboardManager.h"
|
||||
#include "MyGUI_LayerManager.h"
|
||||
#include "MyGUI_LogManager.h"
|
||||
#include "MyGUI_SkinManager.h"
|
||||
#include "MyGUI_WidgetManager.h"
|
||||
#include "MyGUI_LayoutManager.h"
|
||||
#include "MyGUI_FontManager.h"
|
||||
#include "MyGUI_PointerManager.h"
|
||||
#include "MyGUI_PluginManager.h"
|
||||
#include "MyGUI_DynLibManager.h"
|
||||
#include "MyGUI_ControllerManager.h"
|
||||
#include "MyGUI_LanguageManager.h"
|
||||
#include "MyGUI_ResourceManager.h"
|
||||
#include "MyGUI_RenderManager.h"
|
||||
#include "MyGUI_DataManager.h"
|
||||
#include "MyGUI_FactoryManager.h"
|
||||
|
||||
#include "MyGUI_ActionController.h"
|
||||
#include "MyGUI_ControllerEdgeHide.h"
|
||||
#include "MyGUI_ControllerFadeAlpha.h"
|
||||
#include "MyGUI_ControllerPosition.h"
|
||||
#include "MyGUI_CoordConverter.h"
|
||||
#include "MyGUI_IResource.h"
|
||||
#include "MyGUI_CastWidget.h"
|
||||
#include "MyGUI_Any.h"
|
||||
#include "MyGUI_MenuItemType.h"
|
||||
#include "MyGUI_Version.h"
|
||||
#include "MyGUI_XmlDocument.h"
|
||||
#include "MyGUI_WidgetStyle.h"
|
||||
#include "MyGUI_IObject.h"
|
||||
#include "MyGUI_ISerializable.h"
|
||||
#include "MyGUI_RenderOut.h"
|
||||
|
||||
#include "MyGUI_RawRect.h"
|
||||
#include "MyGUI_RotatingSkin.h"
|
||||
#include "MyGUI_TextureUtility.h"
|
||||
|
||||
#endif // __MYGUI_H__
|
|
@ -1,75 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 01/2008
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_ACTION_CONTROLLER_H__
|
||||
#define __MYGUI_ACTION_CONTROLLER_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_Types.h"
|
||||
#include <math.h>
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
namespace action
|
||||
{
|
||||
|
||||
/** Function used for hiding widget with one of controller event */
|
||||
void MYGUI_EXPORT actionWidgetHide(Widget* _widget);
|
||||
|
||||
/** Function used for showing widget with one of controller event */
|
||||
void MYGUI_EXPORT actionWidgetShow(Widget* _widget);
|
||||
|
||||
/** Function used for destroying widget with one of controller event */
|
||||
void MYGUI_EXPORT actionWidgetDestroy(Widget* _widget);
|
||||
|
||||
/** Function for ControllerPosition per frame action : Move with constant speed */
|
||||
void MYGUI_EXPORT linearMoveFunction(const IntCoord& _startRect, const IntCoord& _destRect, IntCoord& _result, float _k);
|
||||
|
||||
/** Function for ControllerPosition per frame action : Move with accelerated speed
|
||||
if N == 10 then this function is same as linearMoveFunction
|
||||
if N > 10 speed will be increasing
|
||||
if N < 10 speed will be decreasing
|
||||
*/
|
||||
template <int N>
|
||||
inline void acceleratedMoveFunction(const IntCoord& _startRect, const IntCoord& _destRect, IntCoord& _result, float _current_time)
|
||||
{
|
||||
float k = (float)pow (_current_time, N/10.f /*3 by default as Accelerated and 0.4 by default as Slowed*/);
|
||||
linearMoveFunction(_startRect, _destRect, _result, k);
|
||||
}
|
||||
|
||||
/** Function for ControllerPosition per frame action : Move with accelerated speed a bit farther than necessary and then return it back */
|
||||
template <int N>
|
||||
inline void jumpMoveFunction(const IntCoord& _startRect, const IntCoord& _destRect, IntCoord& _result, float _current_time)
|
||||
{
|
||||
float k = pow (_current_time, 2) * (-2 - N/10.f) + _current_time * (3 + N/10.f);
|
||||
linearMoveFunction(_startRect, _destRect, _result, k);
|
||||
}
|
||||
|
||||
/** Function for ControllerPosition per frame action : Start with zero speed increasing half time and then decreasing to zero */
|
||||
void MYGUI_EXPORT inertionalMoveFunction(const IntCoord& _startRect, const IntCoord& _destRect, IntCoord& _result, float _current_time);
|
||||
|
||||
} // namespace action
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_ACTION_CONTROLLER_H__
|
202
extern/mygui_3.0.1/MyGUIEngine/include/MyGUI_Align.h
vendored
202
extern/mygui_3.0.1/MyGUIEngine/include/MyGUI_Align.h
vendored
|
@ -1,202 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 08/2008
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_ALIGN_H__
|
||||
#define __MYGUI_ALIGN_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_Macros.h"
|
||||
#include "MyGUI_Diagnostic.h"
|
||||
#include <map>
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
struct MYGUI_EXPORT Align
|
||||
{
|
||||
enum Enum
|
||||
{
|
||||
HCenter = MYGUI_FLAG_NONE, /**< center horizontally */
|
||||
VCenter = MYGUI_FLAG_NONE, /**< center vertically */
|
||||
Center = HCenter | VCenter, /**< center in the dead center */
|
||||
|
||||
Left = MYGUI_FLAG(1), /**< value from the left (and center vertically) */
|
||||
Right = MYGUI_FLAG(2), /**< value from the right (and center vertically) */
|
||||
HStretch = Left | Right, /**< stretch horizontally proportionate to parent window (and center vertically) */
|
||||
|
||||
Top = MYGUI_FLAG(3), /**< value from the top (and center horizontally) */
|
||||
Bottom = MYGUI_FLAG(4), /**< value from the bottom (and center horizontally) */
|
||||
VStretch = Top | Bottom, /**< stretch vertically proportionate to parent window (and center horizontally) */
|
||||
|
||||
Stretch = HStretch | VStretch, /**< stretch proportionate to parent window */
|
||||
Default = Left | Top, /**< default value (value from left and top) */
|
||||
|
||||
HRelative = MYGUI_FLAG(5),
|
||||
VRelative = MYGUI_FLAG(6),
|
||||
Relative = HRelative | VRelative
|
||||
};
|
||||
|
||||
Align(Enum _value = Default) : value(_value) { }
|
||||
|
||||
bool isHCenter() const { return HCenter == (value & ((int)HStretch | (int)HRelative)); }
|
||||
bool isVCenter() const { return VCenter == (value & ((int)VStretch | (int)VRelative)); }
|
||||
bool isCenter() const { return Center == (value & ((int)Stretch | (int)Relative)); }
|
||||
|
||||
bool isLeft() const { return Left == (value & ((int)HStretch | (int)HRelative)); }
|
||||
bool isRight() const { return Right == (value & ((int)HStretch | (int)HRelative)); }
|
||||
bool isHStretch() const { return HStretch == (value & ((int)HStretch | (int)HRelative)); }
|
||||
|
||||
bool isTop() const { return Top == (value & ((int)VStretch | (int)VRelative)); }
|
||||
bool isBottom() const { return (Bottom == (value & ((int)VStretch | (int)VRelative))); }
|
||||
bool isVStretch() const { return (VStretch == (value & ((int)VStretch | (int)VRelative))); }
|
||||
|
||||
bool isStretch() const { return (Stretch == (value & ((int)Stretch | (int)Relative))); }
|
||||
bool isDefault() const { return (Default == (value & ((int)Stretch | (int)Relative))); }
|
||||
|
||||
bool isHRelative() const { return HRelative == (value & (int)HRelative); }
|
||||
bool isVRelative() const { return VRelative == (value & (int)VRelative); }
|
||||
bool isRelative() const { return Relative == (value & (int)Relative); }
|
||||
|
||||
Align& operator |= (Align const& _other) { value = Enum(int(value) | int(_other.value)); return *this; }
|
||||
friend Align operator | (Enum const& a, Enum const& b) { return Align(Enum(int(a) | int(b))); }
|
||||
friend Align operator | (Align const& a, Align const& b) { return Align(Enum(int(a.value) | int(b.value))); }
|
||||
|
||||
friend bool operator == (Align const& a, Align const& b) { return a.value == b.value; }
|
||||
friend bool operator != (Align const& a, Align const& b) { return a.value != b.value; }
|
||||
|
||||
typedef std::map<std::string, int> MapAlign;
|
||||
|
||||
static Align parse(const std::string& _value)
|
||||
{
|
||||
Align result(Enum(0));
|
||||
const MapAlign& map_names = result.getValueNames();
|
||||
const std::vector<std::string>& vec = utility::split(_value);
|
||||
for (size_t pos=0; pos<vec.size(); pos++)
|
||||
{
|
||||
MapAlign::const_iterator iter = map_names.find(vec[pos]);
|
||||
if (iter != map_names.end())
|
||||
{
|
||||
result.value = Enum(int(result.value) | int(iter->second));
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string print() const
|
||||
{
|
||||
std::string result;
|
||||
|
||||
if (value & Left)
|
||||
{
|
||||
if (value & Right) result = "HStretch";
|
||||
else result = "Left";
|
||||
}
|
||||
else if (value & Right) result = "Right";
|
||||
else result = "HCenter";
|
||||
|
||||
if (value & Top)
|
||||
{
|
||||
if (value & Bottom) result += " VStretch";
|
||||
else result += " Top";
|
||||
}
|
||||
else if (value & Bottom) result += " Bottom";
|
||||
else result += " VCenter";
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
friend std::ostream& operator << ( std::ostream& _stream, const Align& _value )
|
||||
{
|
||||
_stream << _value.print();
|
||||
return _stream;
|
||||
}
|
||||
|
||||
friend std::istream& operator >> ( std::istream& _stream, Align& _value )
|
||||
{
|
||||
_value.value = Enum(0);
|
||||
std::string value;
|
||||
_stream >> value;
|
||||
|
||||
const MapAlign& map_names = _value.getValueNames();
|
||||
MapAlign::const_iterator iter = map_names.find(value);
|
||||
if (iter != map_names.end())
|
||||
_value.value = Enum(int(_value.value) | int(iter->second));
|
||||
|
||||
|
||||
if (!_stream.eof())
|
||||
{
|
||||
std::string value2;
|
||||
_stream >> value2;
|
||||
iter = map_names.find(value2);
|
||||
if (iter != map_names.end())
|
||||
_value.value = Enum(int(_value.value) | int(iter->second));
|
||||
}
|
||||
|
||||
return _stream;
|
||||
}
|
||||
|
||||
private:
|
||||
const MapAlign& getValueNames() const
|
||||
{
|
||||
static MapAlign map_names;
|
||||
|
||||
if (map_names.empty())
|
||||
{
|
||||
// OBSOLETE
|
||||
map_names["ALIGN_HCENTER"] = HCenter;
|
||||
map_names["ALIGN_VCENTER"] = VCenter;
|
||||
map_names["ALIGN_CENTER"] = Center;
|
||||
map_names["ALIGN_LEFT"] = Left;
|
||||
map_names["ALIGN_RIGHT"] = Right;
|
||||
map_names["ALIGN_HSTRETCH"] = HStretch;
|
||||
map_names["ALIGN_TOP"] = Top;
|
||||
map_names["ALIGN_BOTTOM"] = Bottom;
|
||||
map_names["ALIGN_VSTRETCH"] = VStretch;
|
||||
map_names["ALIGN_STRETCH"] = Stretch;
|
||||
map_names["ALIGN_DEFAULT"] = Default;
|
||||
|
||||
MYGUI_REGISTER_VALUE(map_names, HCenter);
|
||||
MYGUI_REGISTER_VALUE(map_names, VCenter);
|
||||
MYGUI_REGISTER_VALUE(map_names, Center);
|
||||
MYGUI_REGISTER_VALUE(map_names, Left);
|
||||
MYGUI_REGISTER_VALUE(map_names, Right);
|
||||
MYGUI_REGISTER_VALUE(map_names, HStretch);
|
||||
MYGUI_REGISTER_VALUE(map_names, Top);
|
||||
MYGUI_REGISTER_VALUE(map_names, Bottom);
|
||||
MYGUI_REGISTER_VALUE(map_names, VStretch);
|
||||
MYGUI_REGISTER_VALUE(map_names, Stretch);
|
||||
MYGUI_REGISTER_VALUE(map_names, Default);
|
||||
MYGUI_REGISTER_VALUE(map_names, HRelative);
|
||||
MYGUI_REGISTER_VALUE(map_names, VRelative);
|
||||
MYGUI_REGISTER_VALUE(map_names, Relative);
|
||||
}
|
||||
|
||||
return map_names;
|
||||
}
|
||||
|
||||
private:
|
||||
Enum value;
|
||||
};
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_ALIGN_H__
|
|
@ -1,89 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 05/2009
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_ALLOCATOR_H__
|
||||
#define __MYGUI_ALLOCATOR_H__
|
||||
|
||||
#include <memory>
|
||||
#include <limits>
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
template<typename T>
|
||||
class Allocator
|
||||
{
|
||||
public:
|
||||
// typedefs
|
||||
typedef T value_type;
|
||||
typedef value_type* pointer;
|
||||
typedef const value_type* const_pointer;
|
||||
typedef value_type& reference;
|
||||
typedef const value_type& const_reference;
|
||||
typedef std::size_t size_type;
|
||||
typedef std::ptrdiff_t difference_type;
|
||||
|
||||
public:
|
||||
// convert an allocator<T> to allocator<U>
|
||||
template<typename U>
|
||||
struct rebind
|
||||
{
|
||||
typedef Allocator<U> other;
|
||||
};
|
||||
|
||||
public:
|
||||
inline explicit Allocator() { }
|
||||
inline ~Allocator() { }
|
||||
template<typename U>
|
||||
inline explicit Allocator(Allocator<U> const&) { }
|
||||
|
||||
// address
|
||||
inline pointer address(reference r) { return &r; }
|
||||
inline const_pointer address(const_reference r) { return &r; }
|
||||
|
||||
// memory allocation
|
||||
inline pointer allocate(size_type cnt, typename std::allocator<void>::const_pointer = 0)
|
||||
{
|
||||
return reinterpret_cast<pointer>(::operator new (cnt * sizeof (T)));
|
||||
}
|
||||
inline void deallocate(pointer p, size_type)
|
||||
{
|
||||
::operator delete (p);
|
||||
}
|
||||
|
||||
// size
|
||||
inline size_type max_size() const
|
||||
{
|
||||
return std::numeric_limits<size_type>::max() / sizeof(T);
|
||||
}
|
||||
|
||||
// construction/destruction
|
||||
inline void construct(pointer p, const T& t) { new (p) T(t); }
|
||||
inline void destroy(pointer p) { p->~T(); }
|
||||
|
||||
inline bool operator==(Allocator const&) { return true; }
|
||||
inline bool operator!=(Allocator const& a) { return !operator==(a); }
|
||||
};
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_ALLOCATOR_H__
|
213
extern/mygui_3.0.1/MyGUIEngine/include/MyGUI_Any.h
vendored
213
extern/mygui_3.0.1/MyGUIEngine/include/MyGUI_Any.h
vendored
|
@ -1,213 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 10/2008
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
// -- Based on boost::any, original copyright information follows --
|
||||
// Copyright Kevlin Henney, 2000, 2001, 2002. All rights reserved.
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// (See at http://www.boost.org/LICENSE_1_0.txt)
|
||||
// -- End original copyright --
|
||||
|
||||
#ifndef __MYGUI_ANY_H__
|
||||
#define __MYGUI_ANY_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_Diagnostic.h"
|
||||
#include <algorithm>
|
||||
#include <typeinfo>
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
/** @example "Class Any usage"
|
||||
@code
|
||||
void f()
|
||||
{
|
||||
// RU: тестовый класс, с простыми типами все аналогично
|
||||
// EN: test class, with simple types all is similar
|
||||
struct Data { int value; };
|
||||
|
||||
// RU: экземпляр и инициализация
|
||||
// EN: instance and initialization
|
||||
Data data;
|
||||
data.value = 0xDEAD;
|
||||
|
||||
// RU: создастся копия класса Data
|
||||
// EN: copy of class Data will be created
|
||||
MyGUI::Any any = data;
|
||||
// RU: копия класса Data
|
||||
// EN: copy of class Data
|
||||
Data copy_data = *any.castType<Data>();
|
||||
// RU: теперь value == 0xDEAD
|
||||
// EN: now value == 0xDEAD
|
||||
int value = copy_data.value;
|
||||
|
||||
|
||||
// RU: создастся копия указателя на класс Data
|
||||
// EN: copy of pointer on class Data will be created
|
||||
any = &data;
|
||||
// RU: копия указателя на класс Data и конкретно на объект data
|
||||
// EN: copy of pointer on class Data and on object data
|
||||
Data * copy_ptr = *any.castType<Data*>();
|
||||
// RU: теперь data.value == 0
|
||||
// EN: now value == 0
|
||||
copy_ptr->value = 0;
|
||||
|
||||
}
|
||||
@endcode
|
||||
*/
|
||||
|
||||
class MYGUI_EXPORT Any
|
||||
{
|
||||
|
||||
private:
|
||||
struct AnyEmpty { };
|
||||
|
||||
public:
|
||||
static AnyEmpty Null;
|
||||
|
||||
public:
|
||||
Any() :
|
||||
mContent(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
template<typename ValueType> Any(const ValueType& value) :
|
||||
mContent(new Holder<ValueType>(value))
|
||||
{
|
||||
}
|
||||
|
||||
Any(const Any::AnyEmpty& value) :
|
||||
mContent(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
Any(const Any& other) :
|
||||
mContent(other.mContent ? other.mContent->clone() : nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
~Any()
|
||||
{
|
||||
delete mContent;
|
||||
}
|
||||
|
||||
Any& swap(Any& rhs)
|
||||
{
|
||||
std::swap(mContent, rhs.mContent);
|
||||
return *this;
|
||||
}
|
||||
|
||||
template<typename ValueType> Any& operator = (const ValueType& rhs)
|
||||
{
|
||||
Any(rhs).swap(*this);
|
||||
return *this;
|
||||
}
|
||||
|
||||
Any& operator = (const Any::AnyEmpty& rhs)
|
||||
{
|
||||
delete mContent;
|
||||
mContent = nullptr;
|
||||
return *this;
|
||||
}
|
||||
|
||||
Any& operator = (const Any& rhs)
|
||||
{
|
||||
Any(rhs).swap(*this);
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool empty() const
|
||||
{
|
||||
return !mContent;
|
||||
}
|
||||
|
||||
const std::type_info& getType() const
|
||||
{
|
||||
return mContent ? mContent->getType() : typeid(void);
|
||||
}
|
||||
|
||||
template<typename ValueType>
|
||||
ValueType * castType(bool _throw = true) const
|
||||
{
|
||||
if (this->getType() == typeid(ValueType))
|
||||
{
|
||||
return &static_cast<Any::Holder<ValueType> *>(this->mContent)->held;
|
||||
}
|
||||
MYGUI_ASSERT(!_throw, "Bad cast from type '" << getType().name() << "' to '" << typeid(ValueType).name() << "'");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void * castUnsafe() const
|
||||
{
|
||||
return mContent ? static_cast<Any::Holder<void *> *>(this->mContent)->held : nullptr;
|
||||
}
|
||||
|
||||
private:
|
||||
class Placeholder
|
||||
{
|
||||
public:
|
||||
virtual ~Placeholder() { }
|
||||
|
||||
public:
|
||||
virtual const std::type_info& getType() const = 0;
|
||||
virtual Placeholder * clone() const = 0;
|
||||
|
||||
};
|
||||
|
||||
template<typename ValueType> class Holder : public Placeholder
|
||||
{
|
||||
public:
|
||||
Holder(const ValueType& value) :
|
||||
held(value)
|
||||
{
|
||||
}
|
||||
|
||||
public:
|
||||
virtual const std::type_info& getType() const
|
||||
{
|
||||
return typeid(ValueType);
|
||||
}
|
||||
|
||||
virtual Placeholder * clone() const
|
||||
{
|
||||
return new Holder(held);
|
||||
}
|
||||
|
||||
public:
|
||||
ValueType held;
|
||||
|
||||
private:
|
||||
Holder& operator=(const Holder &);
|
||||
|
||||
};
|
||||
|
||||
|
||||
private: // representation
|
||||
Placeholder * mContent;
|
||||
|
||||
};
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_ANY_H__
|
|
@ -1,216 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 10/2008
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_BIINDEX_BASE_H__
|
||||
#define __MYGUI_BIINDEX_BASE_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
class BiIndexBase
|
||||
{
|
||||
public:
|
||||
virtual ~BiIndexBase() { }
|
||||
protected:
|
||||
|
||||
size_t getIndexCount() { return mIndexFace.size(); }
|
||||
|
||||
size_t insertItemAt(size_t _index)
|
||||
{
|
||||
#if MYGUI_DEBUG_MODE == 1
|
||||
MYGUI_ASSERT_RANGE_INSERT(_index, mIndexFace.size(), "BiIndexBase::insertItemAt");
|
||||
checkIndexes();
|
||||
#endif
|
||||
|
||||
if (_index == MyGUI::ITEM_NONE) _index = mIndexFace.size();
|
||||
|
||||
size_t index;
|
||||
|
||||
if (_index == mIndexFace.size())
|
||||
{
|
||||
// для вставки айтема
|
||||
index = mIndexFace.size();
|
||||
|
||||
mIndexFace.push_back(_index);
|
||||
mIndexBack.push_back(_index);
|
||||
}
|
||||
else
|
||||
{
|
||||
// для вставки айтема
|
||||
index = mIndexFace[_index];
|
||||
|
||||
size_t count = mIndexFace.size();
|
||||
for (size_t pos=0; pos<count; ++pos)
|
||||
{
|
||||
if (mIndexFace[pos] >= index) mIndexFace[pos]++;
|
||||
}
|
||||
mIndexFace.insert(mIndexFace.begin() + _index, index);
|
||||
|
||||
count ++;
|
||||
mIndexBack.push_back(0);
|
||||
for (size_t pos=0; pos<count; ++pos)
|
||||
{
|
||||
mIndexBack[mIndexFace[pos]] = pos;
|
||||
}
|
||||
}
|
||||
|
||||
#if MYGUI_DEBUG_MODE == 1
|
||||
checkIndexes();
|
||||
#endif
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
size_t removeItemAt(size_t _index)
|
||||
{
|
||||
#if MYGUI_DEBUG_MODE == 1
|
||||
MYGUI_ASSERT_RANGE(_index, mIndexFace.size(), "BiIndexBase::removeItemAt");
|
||||
checkIndexes();
|
||||
#endif
|
||||
|
||||
// для удаления айтема
|
||||
size_t index = mIndexFace[_index];
|
||||
|
||||
mIndexFace.erase(mIndexFace.begin() + _index);
|
||||
mIndexBack.pop_back();
|
||||
|
||||
size_t count = mIndexFace.size();
|
||||
for (size_t pos=0; pos<count; ++pos)
|
||||
{
|
||||
if (mIndexFace[pos] > index) mIndexFace[pos]--;
|
||||
mIndexBack[mIndexFace[pos]] = pos;
|
||||
}
|
||||
|
||||
#if MYGUI_DEBUG_MODE == 1
|
||||
checkIndexes();
|
||||
#endif
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
void removeAllItems()
|
||||
{
|
||||
mIndexFace.clear();
|
||||
mIndexBack.clear();
|
||||
}
|
||||
|
||||
// на входе индексы пользователя, на выходе реальные индексы
|
||||
size_t convertToBack(size_t _index) const
|
||||
{
|
||||
#if MYGUI_DEBUG_MODE == 1
|
||||
MYGUI_ASSERT_RANGE_AND_NONE(_index, mIndexFace.size(), "BiIndexBase::convertToBack");
|
||||
#endif
|
||||
return _index == ITEM_NONE ? ITEM_NONE : mIndexFace[_index];
|
||||
}
|
||||
|
||||
// на входе индексы реальные, на выходе, то что видит пользователь
|
||||
size_t convertToFace(size_t _index) const
|
||||
{
|
||||
#if MYGUI_DEBUG_MODE == 1
|
||||
MYGUI_ASSERT_RANGE_AND_NONE(_index, mIndexFace.size(), "BiIndexBase::convertToFace");
|
||||
#endif
|
||||
return _index == ITEM_NONE ? ITEM_NONE : mIndexBack[_index];
|
||||
}
|
||||
|
||||
// меняет местами два индекса, индексы со стороны пользователя
|
||||
void swapItemsFaceAt(size_t _index1, size_t _index2)
|
||||
{
|
||||
#if MYGUI_DEBUG_MODE == 1
|
||||
MYGUI_ASSERT_RANGE(_index1, mIndexFace.size(), "BiIndexBase::swapItemsFaceAt");
|
||||
MYGUI_ASSERT_RANGE(_index2, mIndexFace.size(), "BiIndexBase::swapItemsFaceAt");
|
||||
#endif
|
||||
|
||||
std::swap(mIndexFace[_index1], mIndexFace[_index2]);
|
||||
std::swap(mIndexBack[mIndexFace[_index1]], mIndexBack[mIndexFace[_index2]]);
|
||||
}
|
||||
|
||||
// меняет местами два индекса, индексы со сторонны данных
|
||||
void swapItemsBackAt(size_t _index1, size_t _index2)
|
||||
{
|
||||
#if MYGUI_DEBUG_MODE == 1
|
||||
MYGUI_ASSERT_RANGE(_index1, mIndexFace.size(), "BiIndexBase::swapItemsBackAt");
|
||||
MYGUI_ASSERT_RANGE(_index2, mIndexFace.size(), "BiIndexBase::swapItemsBackAt");
|
||||
#endif
|
||||
|
||||
std::swap(mIndexBack[_index1], mIndexBack[_index2]);
|
||||
std::swap(mIndexFace[mIndexBack[_index1]], mIndexFace[mIndexBack[_index2]]);
|
||||
}
|
||||
|
||||
#if MYGUI_DEBUG_MODE == 1
|
||||
|
||||
void checkIndexes()
|
||||
{
|
||||
assert(mIndexFace.size() == mIndexBack.size());
|
||||
|
||||
// проверяем на уникальность каждого индекса в маппинге
|
||||
std::vector<bool> vec;
|
||||
size_t count = mIndexFace.size();
|
||||
|
||||
vec.reserve(count);
|
||||
for (size_t pos=0; pos<count; ++pos) vec.push_back(false);
|
||||
|
||||
for (size_t pos=0; pos<count; ++pos)
|
||||
{
|
||||
// максимум
|
||||
size_t index = mIndexBack[pos];
|
||||
if (index >= count) throw new std::exception();
|
||||
|
||||
// максимум
|
||||
index = mIndexFace[pos];
|
||||
if (index >= count) throw new std::exception();
|
||||
|
||||
if (vec[index]) throw new std::exception();
|
||||
vec[index] = true;
|
||||
}
|
||||
|
||||
for (size_t pos=0; pos<count; ++pos)
|
||||
{
|
||||
if (!vec[pos]) throw new std::exception();
|
||||
}
|
||||
|
||||
// проверяем на взаимоссылаемость индексов
|
||||
for (size_t pos=0; pos<count; ++pos)
|
||||
{
|
||||
size_t index = mIndexFace[pos];
|
||||
if (mIndexBack[index] != pos) throw new std::exception();
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
private:
|
||||
typedef std::vector<size_t> VectorSizeT;
|
||||
|
||||
// маппинг с индексов, которые видны наружу
|
||||
// на индексы которые реально используются данными
|
||||
VectorSizeT mIndexFace;
|
||||
|
||||
// маппинг с индексов, которые используют данные
|
||||
// на индексы которые виндны наружу
|
||||
VectorSizeT mIndexBack;
|
||||
};
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_BIINDEX_BASE_H__
|
|
@ -1,78 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 06/2009
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_BITWISE_H__
|
||||
#define __MYGUI_BITWISE_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
class Bitwise
|
||||
{
|
||||
public:
|
||||
/** Returns the closest power-of-two number greater or equal to value.
|
||||
*/
|
||||
template<typename Type>
|
||||
static MYGUI_FORCEINLINE Type firstPO2From(Type _value)
|
||||
{
|
||||
--_value;
|
||||
_value |= _value >> 16;
|
||||
_value |= _value >> 8;
|
||||
_value |= _value >> 4;
|
||||
_value |= _value >> 2;
|
||||
_value |= _value >> 1;
|
||||
++_value;
|
||||
return _value;
|
||||
}
|
||||
|
||||
/** Determines whether the number is power-of-two or not. */
|
||||
template<typename Type>
|
||||
static MYGUI_FORCEINLINE bool isPO2(Type _value)
|
||||
{
|
||||
return (_value & (_value-1)) == 0;
|
||||
}
|
||||
|
||||
/** Returns the number of bits a pattern must be shifted right by to
|
||||
remove right-hand zeros.
|
||||
*/
|
||||
template<typename Type>
|
||||
static MYGUI_FORCEINLINE size_t getBitShift(Type _mask)
|
||||
{
|
||||
if (_mask == 0)
|
||||
return 0;
|
||||
|
||||
size_t result = 0;
|
||||
while ((_mask & 1) == 0)
|
||||
{
|
||||
++result;
|
||||
_mask >>= 1;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_BITWISE_H__
|
|
@ -1,111 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 11/2007
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_BUTTON_H__
|
||||
#define __MYGUI_BUTTON_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_StaticText.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
class MYGUI_EXPORT Button :
|
||||
public StaticText
|
||||
{
|
||||
MYGUI_RTTI_DERIVED( Button )
|
||||
|
||||
public:
|
||||
Button();
|
||||
|
||||
//! OLD Set button check state
|
||||
void setButtonPressed(bool _value) { setStateCheck(_value); }
|
||||
//! OLD Get buton check
|
||||
bool getButtonPressed() { return getStateCheck(); }
|
||||
|
||||
//! Set button check state
|
||||
void setStateCheck(bool _value);
|
||||
|
||||
//! Get buton check
|
||||
bool getStateCheck() { return mIsStateCheck; }
|
||||
|
||||
//! Set image index (image should be defined in skin)
|
||||
void setImageIndex(size_t _value);
|
||||
//! Get image index
|
||||
size_t getImageIndex();
|
||||
|
||||
/** Enable or disable Image mode\n
|
||||
Image mode: when button state changed Image on button also change it's picture.\n
|
||||
Disabled (false) by default.
|
||||
*/
|
||||
void setModeImage(bool _value);
|
||||
/** Get Image mode flag */
|
||||
bool getModeImage() { return mModeImage; }
|
||||
|
||||
/** Get pointer to glyph image for this button (if it exist in button skin) */
|
||||
StaticImage* getStaticImage() { return mImage; }
|
||||
|
||||
/** @copydoc Widget::setProperty(const std::string& _key, const std::string& _value) */
|
||||
virtual void setProperty(const std::string& _key, const std::string& _value);
|
||||
|
||||
/*internal:*/
|
||||
virtual void _initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, Widget* _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name);
|
||||
|
||||
void _setMouseFocus(bool _focus);
|
||||
|
||||
protected:
|
||||
virtual ~Button();
|
||||
|
||||
virtual void baseChangeWidgetSkin(ResourceSkin* _info);
|
||||
|
||||
virtual void onMouseLostFocus(Widget* _new);
|
||||
virtual void onMouseSetFocus(Widget* _old);
|
||||
virtual void onMouseButtonPressed(int _left, int _top, MouseButton _id);
|
||||
virtual void onMouseButtonReleased(int _left, int _top, MouseButton _id);
|
||||
|
||||
virtual void baseUpdateEnable();
|
||||
|
||||
bool _setState(const std::string& _value);
|
||||
void setImageResource(const std::string& _name);
|
||||
|
||||
private:
|
||||
void updateButtonState();
|
||||
|
||||
void shutdownWidgetSkin();
|
||||
void initialiseWidgetSkin(ResourceSkin* _info);
|
||||
|
||||
private:
|
||||
// нажата ли кнопка
|
||||
bool mIsMousePressed;
|
||||
// в фокусе ли кнопка
|
||||
bool mIsMouseFocus;
|
||||
// статус кнопки нажата или нет
|
||||
bool mIsStateCheck;
|
||||
|
||||
StaticImage* mImage;
|
||||
bool mModeImage;
|
||||
|
||||
};
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_BUTTON_H__
|
|
@ -1,246 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Alexander Ptakhin
|
||||
@date 01/2009
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_CANVAS_H__
|
||||
#define __MYGUI_CANVAS_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_Widget.h"
|
||||
#include "MyGUI_ITexture.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
/**
|
||||
* Widget wrapper over Texture - shows the texture.
|
||||
* Implemented: resizing of texture (see TextureResizeMode); recovery after lossing device;
|
||||
*/
|
||||
class MYGUI_EXPORT Canvas :
|
||||
public Widget,
|
||||
public ITextureInvalidateListener
|
||||
{
|
||||
MYGUI_RTTI_DERIVED( Canvas )
|
||||
|
||||
public:
|
||||
Canvas();
|
||||
|
||||
struct Event
|
||||
{
|
||||
Event( bool _textureChanged, bool _widgetResized, bool _requested ) :
|
||||
textureChanged( _textureChanged ),
|
||||
widgetResized( _widgetResized ),
|
||||
requested( _requested )
|
||||
{
|
||||
}
|
||||
|
||||
bool textureChanged;
|
||||
bool widgetResized;
|
||||
|
||||
/// This update was caused by calling updateTexture();
|
||||
bool requested;
|
||||
};
|
||||
|
||||
typedef delegates::CDelegate1<Canvas*> EventInfo_Canvas;
|
||||
typedef delegates::CDelegate2<Canvas*, Event> EventInfo_CanvasEvent;
|
||||
|
||||
//FIXME
|
||||
/**
|
||||
Available resize and view modes of texture
|
||||
@remarks PT - Power of Two (size)
|
||||
*/
|
||||
enum TextureResizeMode
|
||||
{
|
||||
//
|
||||
TRM_PT_CONST_SIZE, /// Texture doesn't resizes and fills all widget space
|
||||
TRM_PT_VIEW_REQUESTED, /// You can view all pixels of texture, texture cropped by sizes of widget
|
||||
TRM_PT_VIEW_ALL /// Texture resizes and fills all widget space
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
/// Creates texture
|
||||
void createTexture( TextureResizeMode _resizeMode, TextureUsage _usage = getDefaultTextureUsage(), PixelFormat _format = getDefaultTextureFormat() );
|
||||
|
||||
/// Creates texture
|
||||
void createTexture( int _width, int _height, TextureResizeMode _resizeMode, TextureUsage _usage = getDefaultTextureUsage(), PixelFormat _format = getDefaultTextureFormat() );
|
||||
|
||||
/// Creates texture
|
||||
void createTexture( const IntSize& _size, TextureResizeMode _resizeMode, TextureUsage _usage = getDefaultTextureUsage(), PixelFormat _format = getDefaultTextureFormat() );
|
||||
|
||||
/// Destroys texture
|
||||
void destroyTexture();
|
||||
|
||||
/// Call user delegate update and removes old texture if it isn't original.
|
||||
void updateTexture();
|
||||
|
||||
/// Locks hardware pixel buffer.
|
||||
void* lock(TextureUsage _usage = TextureUsage::Write);
|
||||
|
||||
/// Unlocks hardware pixel buffer.
|
||||
void unlock();
|
||||
|
||||
/// Checks lockness of hardware _pixel buffer.
|
||||
bool isLocked() const { return mTexture->isLocked(); }
|
||||
|
||||
/// Returns real width of texture.
|
||||
int getTextureRealWidth() const { return (int) mTexture->getWidth(); }
|
||||
|
||||
/// Returns real height of texture.
|
||||
int getTextureRealHeight() const { return (int) mTexture->getHeight(); }
|
||||
|
||||
/// Returns real _size of texture.
|
||||
IntSize getTextureRealSize() const { return IntSize( getTextureRealWidth(), getTextureRealHeight() ); }
|
||||
|
||||
/// Returns needed width while creating texture.
|
||||
int getTextureSrcWidth() const { return mReqTexSize.width; }
|
||||
|
||||
/// Returns needed height while creating texture.
|
||||
int getTextureSrcHeight() const { return mReqTexSize.height; }
|
||||
|
||||
/// Returns needed sizes while creating texture.
|
||||
IntSize getTextureSrcSize() const { return mReqTexSize; }
|
||||
|
||||
/// Returns needed sizes while creating texture.
|
||||
PixelFormat getTextureFormat() const { return mTexture->getFormat(); }
|
||||
|
||||
/// Returns name of the current texture.
|
||||
const std::string& getTextureName() const { return mTexture->getName(); }
|
||||
|
||||
//! @copydoc Widget::setSize(const IntSize& _value)
|
||||
virtual void setSize(const IntSize& _value);
|
||||
//! @copydoc Widget::setCoord(const IntCoord& _value)
|
||||
virtual void setCoord(const IntCoord& _value);
|
||||
|
||||
/** @copydoc Widget::setSize(int _width, int _height) */
|
||||
void setSize(int _width, int _height) { setSize(IntSize(_width, _height)); }
|
||||
/** @copydoc Widget::setCoord(int _left, int _top, int _width, int _height) */
|
||||
void setCoord(int _left, int _top, int _width, int _height) { setCoord(IntCoord(_left, _top, _width, _height)); }
|
||||
|
||||
/// Returns resize mode
|
||||
TextureResizeMode getResizeMode() const { return mTexResizeMode; }
|
||||
|
||||
/// Sets resize mode of texture \sa TextureResizeMode
|
||||
void setResizeMode( TextureResizeMode _set ) { mTexResizeMode = _set; }
|
||||
|
||||
/// Checks if the texture has the source (required by user) size, otherwise real texture size are bigger.
|
||||
bool isTextureSrcSize() const;
|
||||
|
||||
/// Returns true if the texture was created (and exists), otherwise false
|
||||
bool isTextureCreated() const { return mTexture != nullptr; }
|
||||
|
||||
/// Returns true if we own the texture, otherwise false. \sa mManaged
|
||||
bool isTextureManaged() const { return mTexManaged; }
|
||||
|
||||
/// Reurns interface texture.
|
||||
ITexture* getTexture() { return mTexture; }
|
||||
|
||||
/// Sets the texture managed @remarks Be careful with assigning managed status to texture, which wasn't created in Canvas! \sa mManaged
|
||||
void setTextureManaged( bool _value ) { mTexManaged = _value; }
|
||||
|
||||
/// Returns default GUI texture usage
|
||||
static TextureUsage getDefaultTextureUsage() { return TextureUsage::Stream | TextureUsage::Write; }
|
||||
|
||||
/// Returns default GUI texture format
|
||||
static PixelFormat getDefaultTextureFormat() { return PixelFormat::R8G8B8A8; }
|
||||
|
||||
/*event:*/
|
||||
/** Event : Notify user texture instance will be changed \sa requestUpdateCanvas\n
|
||||
signature : void method(MyGUI::Canvas* _canvas)\n
|
||||
@param _canvas, which will be updated
|
||||
*/
|
||||
EventInfo_Canvas eventPreTextureChanges;
|
||||
|
||||
/** Event : Texture instance was changed (May be caused by resizing texture or lossing device). User have to update all references to new instance of texture.\n
|
||||
signature : void method(MyGUI::Canvas* _canvas, MyGUI::Canvas::Event _event)\n
|
||||
@param _canvas, which needs to update
|
||||
@param _event
|
||||
*/
|
||||
EventInfo_CanvasEvent requestUpdateCanvas;
|
||||
|
||||
/*internal:*/
|
||||
virtual void _initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, Widget* _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name);
|
||||
|
||||
protected:
|
||||
virtual ~Canvas();
|
||||
|
||||
/// Destroys texture
|
||||
void _destroyTexture( bool _sendEvent );
|
||||
|
||||
/// Update entered parameters according to current texture resize mode(size) and restore (if can) parameters of usage and format from texture
|
||||
void validate( int& _width, int& _height, TextureUsage& _usage, PixelFormat& _format ) const;
|
||||
|
||||
/// Creates the texture itself
|
||||
void createExactTexture( int _width, int _height, TextureUsage _usage, PixelFormat _format );
|
||||
|
||||
/// Checks if we need to create a texture with such sizes.
|
||||
bool checkCreate( int _width, int _height ) const;
|
||||
|
||||
/// Calls when resize widget
|
||||
void resize( const IntSize& _size );
|
||||
|
||||
/// Correct texture uv-coordinates
|
||||
void correctUV();
|
||||
|
||||
//! @copydoc Widget::baseChangeWidgetSkin(ResourceSkin* _info)
|
||||
void baseChangeWidgetSkin( ResourceSkin* _info );
|
||||
|
||||
//! @copydoc Widget::initialiseWidgetSkin(ResourceSkin* _info)
|
||||
void initialiseWidgetSkin( ResourceSkin* _info );
|
||||
|
||||
//! @copydoc Widget::shutdownWidgetSkin()
|
||||
void shutdownWidgetSkin();
|
||||
|
||||
/// For updating once per frame.
|
||||
void frameAdvise( bool _advise );
|
||||
|
||||
/// For updating once per frame.
|
||||
void frameEntered( float _time );
|
||||
|
||||
virtual void textureInvalidate(ITexture* _texture);
|
||||
|
||||
protected:
|
||||
/// Current texture
|
||||
ITexture* mTexture;
|
||||
|
||||
/// Requested bu user sizes
|
||||
IntSize mReqTexSize;
|
||||
|
||||
/// Generated texture name
|
||||
std::string mGenTexName;
|
||||
|
||||
/// Texture resize mode \sa TextureResizeMode
|
||||
TextureResizeMode mTexResizeMode;
|
||||
|
||||
/// Saved pointer from last calling lock. \sa lock
|
||||
uint8* mTexData;
|
||||
|
||||
/// true if we own the texture (can delete it or replace by another instance), otherwise false
|
||||
bool mTexManaged;
|
||||
|
||||
/// For updating once per frame. True state means updating before next frame starts.
|
||||
bool mFrameAdvise;
|
||||
|
||||
};
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_CANVAS_H__
|
|
@ -1,47 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 12/2007
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_CAST_WIDGET_H__
|
||||
#define __MYGUI_CAST_WIDGET_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_Widget.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
#ifndef MYGUI_DONT_USE_OBSOLETE
|
||||
|
||||
// шаблонный класс для проверки типа виджета
|
||||
template <typename T>
|
||||
MYGUI_OBSOLETE("use : template<typename Type> Type* Widget::castType(bool _throw)")
|
||||
T* castWidget(Widget * _widget)
|
||||
{
|
||||
MYGUI_DEBUG_ASSERT(nullptr != _widget, "Error static cast, widget == nullptr");
|
||||
return _widget->castType<T>();
|
||||
}
|
||||
|
||||
#endif // MYGUI_DONT_USE_OBSOLETE
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_CAST_WIDGET_H__
|
|
@ -1,73 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 12/2007
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_CHILD_SKIN_INFO_H__
|
||||
#define __MYGUI_CHILD_SKIN_INFO_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_WidgetStyle.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
struct MYGUI_EXPORT ChildSkinInfo
|
||||
{
|
||||
ChildSkinInfo() : style(WidgetStyle::Child), align(Align::Default) { }
|
||||
|
||||
ChildSkinInfo(const std::string& _type, const WidgetStyle& _style, const std::string& _skin, const IntCoord& _coord, const Align& _align, const std::string& _layer, const std::string& _name) :
|
||||
type(_type),
|
||||
skin(_skin),
|
||||
name(_name),
|
||||
layer(_layer),
|
||||
style(_style),
|
||||
coord(_coord),
|
||||
align(_align)
|
||||
{
|
||||
// set Child style by default
|
||||
if (style == WidgetStyle::MAX) style = WidgetStyle::Child;
|
||||
}
|
||||
|
||||
void addParam(const std::string& _key, const std::string& _value)
|
||||
{
|
||||
params[_key] = _value;
|
||||
}
|
||||
|
||||
std::string findValue(const std::string& _key) const
|
||||
{
|
||||
MapString::const_iterator iter = params.find(_key);
|
||||
if (iter != params.end()) return iter->second;
|
||||
return "";
|
||||
}
|
||||
|
||||
std::string type, skin, name, layer;
|
||||
WidgetStyle style;
|
||||
IntCoord coord;
|
||||
Align align;
|
||||
MapString params;
|
||||
};
|
||||
|
||||
typedef std::vector<ChildSkinInfo> VectorChildSkinInfo;
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
|
||||
#endif // __MYGUI_CHILD_SKIN_INFO_H__
|
|
@ -1,70 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 11/2007
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_CLIPBOARD_MANAGER_H__
|
||||
#define __MYGUI_CLIPBOARD_MANAGER_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_Instance.h"
|
||||
#include "MyGUI_Types.h"
|
||||
#include "MyGUI_UString.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
class MYGUI_EXPORT ClipboardManager
|
||||
{
|
||||
MYGUI_INSTANCE_HEADER( ClipboardManager )
|
||||
|
||||
public:
|
||||
void initialise();
|
||||
void shutdown();
|
||||
|
||||
/** Set current data in clipboard
|
||||
@param _type of data (for example "Text")
|
||||
@param _data
|
||||
*/
|
||||
void setClipboardData(const std::string& _type, const std::string& _data);
|
||||
/** Clear specific type data
|
||||
@param _type of data to delete (for example "Text")
|
||||
*/
|
||||
void clearClipboardData(const std::string& _type);
|
||||
/** Get specific type data
|
||||
@param _type of data to get (for example "Text")
|
||||
*/
|
||||
std::string getClipboardData(const std::string& _type);
|
||||
|
||||
private:
|
||||
MapString mClipboardData;
|
||||
|
||||
#if MYGUI_PLATFORM == MYGUI_PLATFORM_WIN32
|
||||
// дискриптор нашего главного окна
|
||||
size_t mHwnd;
|
||||
// строка, которую мы положили в буфер обмена винды
|
||||
UString mPutTextInClipboard;
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // __MYGUI_CLIPBOARD_MANAGER_H__
|
|
@ -1,163 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 12/2008
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_COLOUR_H__
|
||||
#define __MYGUI_COLOUR_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_Types.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
struct MYGUI_EXPORT Colour
|
||||
{
|
||||
float red, green, blue, alpha;
|
||||
|
||||
static const Colour Zero;
|
||||
static const Colour Black;
|
||||
static const Colour White;
|
||||
static const Colour Red;
|
||||
static const Colour Green;
|
||||
static const Colour Blue;
|
||||
|
||||
Colour() : red( 1 ), green( 1 ), blue( 1 ), alpha( 1 ) { }
|
||||
Colour( float _red, float _green, float _blue, float _alpha = 1 ) : red( _red ), green( _green ), blue( _blue ), alpha( _alpha ) { }
|
||||
explicit Colour(const std::string& _value) { *this = parse(_value); }
|
||||
|
||||
|
||||
Colour& operator=( Colour const& _value )
|
||||
{
|
||||
red = _value.red;
|
||||
green = _value.green;
|
||||
blue = _value.blue;
|
||||
alpha = _value.alpha;
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool operator==( Colour const& _value ) const
|
||||
{
|
||||
return ((red == _value.red) && (green == _value.green) && (blue == _value.blue) && (alpha == _value.alpha));
|
||||
}
|
||||
|
||||
bool operator!=( Colour const& _value ) const
|
||||
{
|
||||
return ! (*this == _value);
|
||||
}
|
||||
|
||||
void set( float _red, float _green, float _blue, float _alpha = 1 )
|
||||
{
|
||||
red = _red;
|
||||
green = _green;
|
||||
blue = _blue;
|
||||
alpha = _alpha;
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
red = green = blue = alpha = 0;
|
||||
}
|
||||
|
||||
std::string print() const
|
||||
{
|
||||
std::ostringstream stream;
|
||||
stream << *this;
|
||||
return stream.str();
|
||||
}
|
||||
|
||||
static Colour parse(const std::string& _value)
|
||||
{
|
||||
if (!_value.empty())
|
||||
{
|
||||
if (_value[0] == '#')
|
||||
{
|
||||
std::istringstream stream(_value.substr(1));
|
||||
int result = 0;
|
||||
stream >> std::hex >> result;
|
||||
if (!stream.fail())
|
||||
{
|
||||
return Colour( (unsigned char)( result >> 16 ) / 256.0f, (unsigned char)( result >> 8 ) / 256.0f, (unsigned char)( result ) / 256.0f );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
float red, green, blue, alpha = 1;
|
||||
std::istringstream stream(_value);
|
||||
stream >> red >> green >> blue;
|
||||
if (!stream.fail())
|
||||
{
|
||||
if (!stream.eof())
|
||||
stream >> alpha;
|
||||
return Colour(red, green, blue, alpha);
|
||||
}
|
||||
}
|
||||
}
|
||||
return Colour::Zero;
|
||||
}
|
||||
|
||||
friend std::ostream& operator << ( std::ostream& _stream, const Colour& _value )
|
||||
{
|
||||
_stream << _value.red << " " << _value.green << " " << _value.blue << " " << _value.alpha;
|
||||
return _stream;
|
||||
}
|
||||
|
||||
friend std::istream& operator >> ( std::istream& _stream, Colour& _value )
|
||||
{
|
||||
_value.clear();
|
||||
|
||||
std::string value;
|
||||
_stream >> value;
|
||||
|
||||
if (value.empty())
|
||||
return _stream;
|
||||
|
||||
if (value[0] == '#')
|
||||
{
|
||||
_value = Colour::parse(value);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::istringstream stream(value);
|
||||
stream >> _value.red;
|
||||
if (stream.fail())
|
||||
_value.clear();
|
||||
else
|
||||
{
|
||||
_stream >> _value.green >> _value.blue;
|
||||
if (!_stream.eof())
|
||||
_stream >> _value.alpha;
|
||||
else
|
||||
_value.alpha = 1;
|
||||
|
||||
if (_stream.fail())
|
||||
_value.clear();
|
||||
}
|
||||
}
|
||||
|
||||
return _stream;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_COLOUR_H__
|
|
@ -1,237 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 12/2007
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_COMBO_BOX_H__
|
||||
#define __MYGUI_COMBO_BOX_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_Edit.h"
|
||||
#include "MyGUI_List.h"
|
||||
#include "MyGUI_Any.h"
|
||||
#include "MyGUI_EventPair.h"
|
||||
#include "MyGUI_ControllerFadeAlpha.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
typedef delegates::CDelegate2<ComboBox*, size_t> EventHandle_ComboBoxPtrSizeT;
|
||||
|
||||
class MYGUI_EXPORT ComboBox :
|
||||
public Edit
|
||||
{
|
||||
MYGUI_RTTI_DERIVED( ComboBox )
|
||||
|
||||
public:
|
||||
ComboBox();
|
||||
|
||||
//------------------------------------------------------------------------------//
|
||||
// манипуляции айтемами
|
||||
|
||||
//! Get number of items
|
||||
size_t getItemCount() const { return mList->getItemCount(); }
|
||||
|
||||
//! Insert an item into a array at a specified position
|
||||
void insertItemAt(size_t _index, const UString& _name, Any _data = Any::Null);
|
||||
|
||||
//! Add an item to the end of a array
|
||||
void addItem(const UString& _name, Any _data = Any::Null) { return insertItemAt(ITEM_NONE, _name, _data); }
|
||||
|
||||
//! Remove item at a specified position
|
||||
void removeItemAt(size_t _index);
|
||||
|
||||
//! Remove all items
|
||||
void removeAllItems();
|
||||
|
||||
|
||||
//! Search item, returns the position of the first occurrence in array or ITEM_NONE if item not found
|
||||
size_t findItemIndexWith(const UString& _name);
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------//
|
||||
// манипуляции выделениями
|
||||
|
||||
//! Get index of selected item (ITEM_NONE if none selected)
|
||||
size_t getIndexSelected() { return mItemIndex; }
|
||||
|
||||
//! Select specified _index
|
||||
void setIndexSelected(size_t _index);
|
||||
|
||||
//! Clear item selection
|
||||
void clearIndexSelected() { setIndexSelected(ITEM_NONE); }
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------//
|
||||
// манипуляции данными
|
||||
|
||||
//! Replace an item data at a specified position
|
||||
void setItemDataAt(size_t _index, Any _data);
|
||||
|
||||
//! Clear an item data at a specified position
|
||||
void clearItemDataAt(size_t _index) { setItemDataAt(_index, Any::Null); }
|
||||
|
||||
//! Get item data from specified position
|
||||
template <typename ValueType>
|
||||
ValueType * getItemDataAt(size_t _index, bool _throw = true)
|
||||
{
|
||||
return mList->getItemDataAt<ValueType>(_index, _throw);
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------//
|
||||
// манипуляции отображением
|
||||
|
||||
//! Replace an item name at a specified position
|
||||
void setItemNameAt(size_t _index, const UString& _name);
|
||||
|
||||
//! Get item name from specified position
|
||||
const UString& getItemNameAt(size_t _index) { return mList->getItemNameAt(_index); }
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------//
|
||||
// манипуляции выдимостью
|
||||
|
||||
//! Move all elements so specified becomes visible
|
||||
void beginToItemAt(size_t _index) { mList->beginToItemAt(_index); }
|
||||
|
||||
//! Move all elements so first becomes visible
|
||||
void beginToItemFirst() { if (getItemCount()) beginToItemAt(0); }
|
||||
|
||||
//! Move all elements so last becomes visible
|
||||
void beginToItemLast() { if (getItemCount()) beginToItemAt(getItemCount() - 1); }
|
||||
|
||||
//! Move all elements so selected becomes visible
|
||||
void beginToItemSelected() { if (getIndexSelected() != ITEM_NONE) beginToItemAt(getIndexSelected()); }
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------------//
|
||||
// методы для управления отображением
|
||||
|
||||
//! Set drop list mode (text can not be edited)
|
||||
void setComboModeDrop(bool _value);
|
||||
//! Get drop list mode flag
|
||||
bool getComboModeDrop() { return mModeDrop; }
|
||||
|
||||
//! Set smooth show of list
|
||||
void setSmoothShow(bool _value) { mShowSmooth = _value; }
|
||||
//! Get smooth show of list flag
|
||||
bool getSmoothShow() { return mShowSmooth; }
|
||||
|
||||
//! Get max list height
|
||||
void setMaxListHeight(int _value) { mMaxHeight = _value; }
|
||||
//! Set max list height
|
||||
int getMaxListHeight() { return mMaxHeight; }
|
||||
|
||||
/** @copydoc Widget::setProperty(const std::string& _key, const std::string& _value) */
|
||||
virtual void setProperty(const std::string& _key, const std::string& _value);
|
||||
|
||||
/*event:*/
|
||||
/** Event : Enter pressed in combo mode or item selected in drop.\n
|
||||
signature : void method(MyGUI::ComboBox* _sender, size_t _index)
|
||||
@param _sender widget that called this event
|
||||
@param _index item
|
||||
*/
|
||||
EventPair<EventHandle_WidgetVoid, EventHandle_ComboBoxPtrSizeT> eventComboAccept;
|
||||
|
||||
/** Event : Position changed.\n
|
||||
signature : void method(MyGUI::ComboBox* _sender, size_t _index)
|
||||
@param _sender widget that called this event
|
||||
@param _index of new position
|
||||
*/
|
||||
EventPair<EventHandle_WidgetSizeT, EventHandle_ComboBoxPtrSizeT> eventComboChangePosition;
|
||||
|
||||
|
||||
/*internal:*/
|
||||
virtual void _initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, Widget* _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name);
|
||||
|
||||
/*obsolete:*/
|
||||
#ifndef MYGUI_DONT_USE_OBSOLETE
|
||||
|
||||
MYGUI_OBSOLETE("use : size_t ComboBox::getIndexSelected()")
|
||||
size_t getItemIndexSelected() { return getIndexSelected(); }
|
||||
MYGUI_OBSOLETE("use : void ComboBox::setIndexSelected(size_t _index)")
|
||||
void setItemSelectedAt(size_t _index) { setIndexSelected(_index); }
|
||||
MYGUI_OBSOLETE("use : void ComboBox::clearIndexSelected()")
|
||||
void clearItemSelected() { clearIndexSelected(); }
|
||||
|
||||
MYGUI_OBSOLETE("use : void ComboBox::insertItemAt(size_t _index, const UString& _name)")
|
||||
void insertItem(size_t _index, const UString& _name) { insertItemAt(_index, _name); }
|
||||
MYGUI_OBSOLETE("use : void ComboBox::setItemNameAt(size_t _index, const UString& _name)")
|
||||
void setItem(size_t _index, const UString& _item) { setItemNameAt(_index, _item); }
|
||||
MYGUI_OBSOLETE("use : const UString& ComboBox::getItemNameAt(size_t _index)")
|
||||
const UString& getItem(size_t _index) { return getItemNameAt(_index); }
|
||||
MYGUI_OBSOLETE("use : void ComboBox::removeItemAt(size_t _index)")
|
||||
void deleteItem(size_t _index) { removeItemAt(_index); }
|
||||
MYGUI_OBSOLETE("use : void ComboBox::removeAllItems()")
|
||||
void deleteAllItems() { removeAllItems(); }
|
||||
MYGUI_OBSOLETE("use : size_t ComboBox::getIndexSelected()")
|
||||
size_t getItemSelect() { return getIndexSelected(); }
|
||||
MYGUI_OBSOLETE("use : void void ComboBox::clearIndexSelected()")
|
||||
void resetItemSelect() { clearIndexSelected(); }
|
||||
MYGUI_OBSOLETE("use : void ComboBox::setIndexSelected(size_t _index)")
|
||||
void setItemSelect(size_t _index) { setIndexSelected(_index); }
|
||||
|
||||
#endif // MYGUI_DONT_USE_OBSOLETE
|
||||
|
||||
protected:
|
||||
virtual ~ComboBox();
|
||||
|
||||
virtual void onKeyButtonPressed(KeyCode _key, Char _char);
|
||||
|
||||
virtual void baseChangeWidgetSkin(ResourceSkin* _info);
|
||||
|
||||
private:
|
||||
void notifyButtonPressed(Widget* _sender, int _left, int _top, MouseButton _id);
|
||||
void notifyListLostFocus(Widget* _sender, MyGUI::Widget* _new);
|
||||
void notifyListSelectAccept(List* _widget, size_t _position);
|
||||
void notifyListMouseItemActivate(List* _widget, size_t _position);
|
||||
void notifyListChangePosition(List* _widget, size_t _position);
|
||||
void notifyMouseWheel(Widget* _sender, int _rel);
|
||||
void notifyMousePressed(Widget* _sender, int _left, int _top, MouseButton _id);
|
||||
void notifyEditTextChange(Edit* _sender);
|
||||
|
||||
void showList();
|
||||
void hideList();
|
||||
|
||||
void initialiseWidgetSkin(ResourceSkin* _info);
|
||||
void shutdownWidgetSkin();
|
||||
|
||||
void actionWidgetHide(Widget* _widget);
|
||||
|
||||
ControllerFadeAlpha* createControllerFadeAlpha(float _alpha, float _coef, bool _enable);
|
||||
|
||||
private:
|
||||
Button* mButton;
|
||||
List* mList;
|
||||
|
||||
bool mListShow;
|
||||
int mMaxHeight;
|
||||
size_t mItemIndex;
|
||||
bool mModeDrop;
|
||||
bool mDropMouse;
|
||||
bool mShowSmooth;
|
||||
bool mManualList;
|
||||
|
||||
};
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_COMBO_BOX_H__
|
|
@ -1,57 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@author baho_is
|
||||
@date 11/2007
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_COMMON_H__
|
||||
#define __MYGUI_COMMON_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
|
||||
#include <string>
|
||||
#include <list>
|
||||
#include <set>
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <deque>
|
||||
#include <exception>
|
||||
#include <math.h>
|
||||
|
||||
#ifdef MYGUI_CUSTOM_ALLOCATOR
|
||||
# include "MyGUI_CustomAllocator.h"
|
||||
#else // MYGUI_CUSTOM_ALLOCATOR
|
||||
# include "MyGUI_Allocator.h"
|
||||
#endif // MYGUI_CUSTOM_ALLOCATOR
|
||||
|
||||
#include "MyGUI_Macros.h"
|
||||
#include "MyGUI_Diagnostic.h"
|
||||
#include "MyGUI_LogManager.h"
|
||||
#include "MyGUI_Instance.h"
|
||||
#include "MyGUI_Types.h"
|
||||
#include "MyGUI_RenderOut.h"
|
||||
#include "MyGUI_Utility.h"
|
||||
#include "MyGUI_InputDefine.h"
|
||||
#include "MyGUI_Version.h"
|
||||
#include "MyGUI_WidgetStyle.h"
|
||||
#include "MyGUI_UString.h"
|
||||
#include "MyGUI_Delegate.h"
|
||||
|
||||
#endif // __MYGUI_COMMON_H__
|
|
@ -1,145 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 06/2009
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_COMMON_STATE_INFO_H__
|
||||
#define __MYGUI_COMMON_STATE_INFO_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_IStateInfo.h"
|
||||
#include "MyGUI_CoordConverter.h"
|
||||
#include "MyGUI_LanguageManager.h"
|
||||
#include "MyGUI_TextureUtility.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
class MYGUI_EXPORT SubSkinStateInfo :
|
||||
public IStateInfo
|
||||
{
|
||||
MYGUI_RTTI_DERIVED( SubSkinStateInfo )
|
||||
|
||||
public:
|
||||
virtual ~SubSkinStateInfo() { }
|
||||
|
||||
const FloatRect& getRect() { return mRect; }
|
||||
|
||||
private:
|
||||
virtual void deserialization(xml::ElementPtr _node, Version _version)
|
||||
{
|
||||
std::string texture = _node->getParent()->getParent()->findAttribute("texture");
|
||||
|
||||
// ïîääåðæêà çàìåíû òåãîâ â ñêèíàõ
|
||||
if (_version >= Version(1, 1))
|
||||
{
|
||||
texture = LanguageManager::getInstance().replaceTags(texture);
|
||||
}
|
||||
|
||||
const IntSize& size = texture_utility::getTextureSize(texture);
|
||||
const IntCoord& coord = IntCoord::parse(_node->findAttribute("offset"));
|
||||
mRect = CoordConverter::convertTextureCoord(coord, size);
|
||||
}
|
||||
|
||||
private:
|
||||
FloatRect mRect;
|
||||
};
|
||||
|
||||
class MYGUI_EXPORT TileRectStateInfo :
|
||||
public IStateInfo
|
||||
{
|
||||
MYGUI_RTTI_DERIVED( TileRectStateInfo )
|
||||
|
||||
public:
|
||||
TileRectStateInfo() : mTileH(true), mTileV(true) { }
|
||||
virtual ~TileRectStateInfo() { }
|
||||
|
||||
const FloatRect& getRect() { return mRect; }
|
||||
const IntSize& getTileSize() { return mTileSize; }
|
||||
bool getTileH() { return mTileH; }
|
||||
bool getTileV() { return mTileV; }
|
||||
|
||||
private:
|
||||
virtual void deserialization(xml::ElementPtr _node, Version _version)
|
||||
{
|
||||
std::string texture = _node->getParent()->getParent()->findAttribute("texture");
|
||||
|
||||
// ïîääåðæêà çàìåíû òåãîâ â ñêèíàõ
|
||||
if (_version >= Version(1, 1))
|
||||
{
|
||||
texture = LanguageManager::getInstance().replaceTags(texture);
|
||||
}
|
||||
|
||||
const IntSize& size = texture_utility::getTextureSize(texture);
|
||||
const IntCoord& coord = IntCoord::parse(_node->findAttribute("offset"));
|
||||
mRect = CoordConverter::convertTextureCoord(coord, size);
|
||||
|
||||
xml::ElementEnumerator prop = _node->getElementEnumerator();
|
||||
while (prop.next("Property"))
|
||||
{
|
||||
const std::string& key = prop->findAttribute("key");
|
||||
const std::string& value = prop->findAttribute("value");
|
||||
if (key == "TileH") mTileH = utility::parseBool(value);
|
||||
else if (key == "TileV") mTileV = utility::parseBool(value);
|
||||
else if (key == "TileSize") mTileSize = IntSize::parse(value);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
FloatRect mRect;
|
||||
IntSize mTileSize;
|
||||
bool mTileH;
|
||||
bool mTileV;
|
||||
};
|
||||
|
||||
class MYGUI_EXPORT EditTextStateInfo :
|
||||
public IStateInfo
|
||||
{
|
||||
MYGUI_RTTI_DERIVED( EditTextStateInfo )
|
||||
|
||||
public:
|
||||
EditTextStateInfo() : mColour(Colour::White), mShift(false) { }
|
||||
virtual ~EditTextStateInfo() { }
|
||||
|
||||
const Colour& getColour() { return mColour; }
|
||||
bool getShift() { return mShift; }
|
||||
|
||||
private:
|
||||
virtual void deserialization(xml::ElementPtr _node, Version _version)
|
||||
{
|
||||
mShift = utility::parseBool(_node->findAttribute("shift"));
|
||||
|
||||
std::string colour = _node->findAttribute("colour");
|
||||
if (_version >= Version(1, 1))
|
||||
{
|
||||
colour = LanguageManager::getInstance().replaceTags(colour);
|
||||
}
|
||||
|
||||
mColour = Colour::parse(colour);
|
||||
}
|
||||
|
||||
private:
|
||||
Colour mColour;
|
||||
bool mShift;
|
||||
};
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_COMMON_STATE_INFO_H__
|
|
@ -1,84 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Evmenov Georgiy
|
||||
@date 04/2008
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_CONTROLLER_EDGE_HIDE_H__
|
||||
#define __MYGUI_CONTROLLER_EDGE_HIDE_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_WidgetDefines.h"
|
||||
#include "MyGUI_ControllerItem.h"
|
||||
#include "MyGUI_Types.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
/** This controller used for hiding widgets near screen edges.
|
||||
Widget will start hiding(move out of screen) if it's near
|
||||
border and it and it's childrens don't have any focus. Hiding
|
||||
till only small part of widget be visible. Widget will move
|
||||
inside screen if it have any focus.
|
||||
*/
|
||||
class MYGUI_EXPORT ControllerEdgeHide :
|
||||
public ControllerItem
|
||||
{
|
||||
MYGUI_RTTI_DERIVED( ControllerEdgeHide )
|
||||
|
||||
public:
|
||||
ControllerEdgeHide();
|
||||
virtual ~ControllerEdgeHide() { }
|
||||
|
||||
/**
|
||||
@param _value in which widget will be hidden or shown
|
||||
*/
|
||||
void setTime(float _value) { mTime = _value; }
|
||||
|
||||
/**
|
||||
@param _remainPixels how many pixels you will see afterr full hide
|
||||
*/
|
||||
void setRemainPixels(int _value) { mRemainPixels = _value; }
|
||||
|
||||
/**
|
||||
@param _shadowSize adds to _remainPixels when hiding left or top (for example used for windows with shadows)
|
||||
*/
|
||||
void setShadowSize(int _value) { mShadowSize = _value; }
|
||||
|
||||
virtual void setProperty(const std::string& _key, const std::string& _value);
|
||||
|
||||
private:
|
||||
bool addTime(Widget* _widget, float _time);
|
||||
void prepareItem(Widget* _widget);
|
||||
|
||||
void recalculateTime(Widget* _widget);
|
||||
|
||||
delegates::CDelegate1<Widget*> eventPostAction;
|
||||
|
||||
float mTime;
|
||||
int mRemainPixels;
|
||||
int mShadowSize;
|
||||
float mElapsedTime;
|
||||
// for checking if widget was moved
|
||||
MyGUI::IntCoord mLastCoord;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // __MYGUI_CONTROLLER_EDGE_HIDE_H__
|
|
@ -1,78 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 01/2008
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_CONTROLLER_FADE_ALPHA_H__
|
||||
#define __MYGUI_CONTROLLER_FADE_ALPHA_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_WidgetDefines.h"
|
||||
#include "MyGUI_ControllerItem.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
/** This controller used for smooth changing alpha of widget in time */
|
||||
class MYGUI_EXPORT ControllerFadeAlpha :
|
||||
public ControllerItem
|
||||
{
|
||||
MYGUI_RTTI_DERIVED( ControllerFadeAlpha )
|
||||
|
||||
public:
|
||||
ControllerFadeAlpha();
|
||||
virtual ~ControllerFadeAlpha() { }
|
||||
|
||||
/**
|
||||
@param _alpha that will be as result of changing
|
||||
*/
|
||||
void setAlpha(float _value) { mAlpha = _value; }
|
||||
|
||||
/**
|
||||
@param _coef of alpha changing speed (1. mean that alpha will change from 0 to 1 at 1 second)
|
||||
*/
|
||||
void setCoef(float _value) { mCoef = _value; }
|
||||
|
||||
/**
|
||||
@param _enabled if true then widget will be inactive after start of alpha changing
|
||||
*/
|
||||
void setEnabled(bool _value) { mEnabled = _value; }
|
||||
|
||||
|
||||
virtual void setProperty(const std::string& _key, const std::string& _value);
|
||||
|
||||
private:
|
||||
bool addTime(Widget* _widget, float _time);
|
||||
void prepareItem(Widget* _widget);
|
||||
|
||||
bool getEnabled() { return mEnabled; }
|
||||
float getAlpha() { return mAlpha; }
|
||||
float getCoef() { return mCoef; }
|
||||
|
||||
private:
|
||||
float mAlpha;
|
||||
float mCoef;
|
||||
bool mEnabled;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // __MYGUI_CONTROLLER_FADE_ALPHA_H__
|
|
@ -1,73 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 01/2008
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_CONTROLLER_ITEM_H__
|
||||
#define __MYGUI_CONTROLLER_ITEM_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_WidgetDefines.h"
|
||||
#include "MyGUI_IObject.h"
|
||||
#include "MyGUI_Delegate.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
/** Base interface for controllers */
|
||||
class MYGUI_EXPORT ControllerItem :
|
||||
public IObject
|
||||
{
|
||||
MYGUI_RTTI_DERIVED( ControllerItem )
|
||||
|
||||
public:
|
||||
virtual ~ControllerItem() { }
|
||||
|
||||
virtual void prepareItem(Widget* _widget) = 0;
|
||||
virtual bool addTime(Widget* _widget, float _time) = 0;
|
||||
|
||||
virtual void setProperty(const std::string& _key, const std::string& _value) { }
|
||||
|
||||
/** Event : Before controller started working.\n
|
||||
signature : void method(MyGUI::Widget* _sender)\n
|
||||
@param _sender widget under control
|
||||
*/
|
||||
delegates::CDelegate1<Widget*>
|
||||
eventPreAction;
|
||||
|
||||
/** Event : Controller updated (called every frame).\n
|
||||
signature : void method(MyGUI::Widget* _sender)\n
|
||||
@param _sender widget under control
|
||||
*/
|
||||
delegates::CDelegate1<Widget*>
|
||||
eventUpdateAction;
|
||||
|
||||
/** Event : After controller finished working.\n
|
||||
signature : void method(MyGUI::Widget* _sender)\n
|
||||
@param _sender widget under control
|
||||
*/
|
||||
delegates::CDelegate1<Widget*>
|
||||
eventPostAction;
|
||||
|
||||
};
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_CONTROLLER_ITEM_H__
|
|
@ -1,74 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 01/2008
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_CONTROLLER_MANAGER_H__
|
||||
#define __MYGUI_CONTROLLER_MANAGER_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_Instance.h"
|
||||
#include "MyGUI_ControllerItem.h"
|
||||
#include "MyGUI_IUnlinkWidget.h"
|
||||
#include "MyGUI_WidgetDefines.h"
|
||||
#include "MyGUI_ActionController.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
class MYGUI_EXPORT ControllerManager : public IUnlinkWidget
|
||||
{
|
||||
MYGUI_INSTANCE_HEADER( ControllerManager )
|
||||
|
||||
public:
|
||||
void initialise();
|
||||
void shutdown();
|
||||
|
||||
// ñîçäàåò êîíòðîëëåð
|
||||
ControllerItem* createItem(const std::string& _type);
|
||||
|
||||
/** Add controlled widget
|
||||
@param _widget to be controlled
|
||||
@param _item controller with some actions (for example ControllerFadeAlpha or your own)
|
||||
@note _item will be deleted automatically at end of controller lifetime
|
||||
(if not removed by removeItem(Widget* _widget) before)
|
||||
*/
|
||||
void addItem(Widget* _widget, ControllerItem * _item);
|
||||
|
||||
/** Stop the control over a widget
|
||||
@param _widget to be removed
|
||||
*/
|
||||
void removeItem(Widget* _widget);
|
||||
|
||||
private:
|
||||
void _unlinkWidget(Widget* _widget);
|
||||
void frameEntered(float _time);
|
||||
void clear();
|
||||
|
||||
private:
|
||||
typedef std::pair<Widget*, ControllerItem *> PairControllerItem;
|
||||
typedef std::list<PairControllerItem> ListControllerItem;
|
||||
ListControllerItem mListItem;
|
||||
|
||||
};
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_CONTROLLER_MANAGER_H__
|
|
@ -1,95 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Evmenov Georgiy
|
||||
@date 03/2008
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_CONTROLLER_POSITION_H__
|
||||
#define __MYGUI_CONTROLLER_POSITION_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_Delegate.h"
|
||||
#include "MyGUI_Types.h"
|
||||
#include "MyGUI_WidgetDefines.h"
|
||||
#include "MyGUI_ControllerItem.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
/** This controller used for smooth changing position of widget in time */
|
||||
class MYGUI_EXPORT ControllerPosition :
|
||||
public ControllerItem
|
||||
{
|
||||
MYGUI_RTTI_DERIVED( ControllerPosition )
|
||||
|
||||
public:
|
||||
typedef delegates::CDelegate4<const IntCoord&, const IntCoord&, IntCoord&, float> FrameAction;
|
||||
|
||||
ControllerPosition();
|
||||
virtual ~ControllerPosition() { }
|
||||
|
||||
void setCoord(const IntCoord& _value);
|
||||
|
||||
void setSize(const IntSize& _value);
|
||||
|
||||
void setPosition(const IntPoint& _value);
|
||||
|
||||
void setFunction(const std::string& _value);
|
||||
|
||||
/**
|
||||
@param _value seconds in which widget planned to reach destination coordinate
|
||||
*/
|
||||
void setTime(float _value) { mTime = _value; }
|
||||
|
||||
/**
|
||||
@param _action applied to widget every frame (see ControllerPosition::eventFrameAction)
|
||||
*/
|
||||
void setAction(FrameAction::IDelegate* _value) { eventFrameAction = _value; }
|
||||
|
||||
virtual void setProperty(const std::string& _key, const std::string& _value);
|
||||
|
||||
private:
|
||||
bool addTime(Widget* _widget, float _time);
|
||||
void prepareItem(Widget* _widget);
|
||||
|
||||
float getElapsedTime() { return mElapsedTime; }
|
||||
|
||||
IntCoord mStartCoord;
|
||||
IntCoord mDestCoord;
|
||||
float mTime;
|
||||
float mElapsedTime;
|
||||
|
||||
// controller changing position
|
||||
bool mCalcPosition;
|
||||
// controller changing size
|
||||
bool mCalcSize;
|
||||
|
||||
/** Event : Every frame action while controller exist.\n
|
||||
signature : void method(const IntRect& _startRect, const IntRect& _destRect, IntRect& _result, float _current_time)\n
|
||||
@param _startRect start coordinate of widget
|
||||
@param _destRect destination coordinate
|
||||
@param _result resultRect
|
||||
@param _current_time elapsed time (_current_time is real elapsed time divided by _time(see constructor) so _current_time == 1 mean that _time seconds elapsed)
|
||||
*/
|
||||
FrameAction eventFrameAction;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // __MYGUI_CONTROLLER_POSITION_H__
|
|
@ -1,92 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 06/2009
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_COORD_CONVERTER_H__
|
||||
#define __MYGUI_COORD_CONVERTER_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_Types.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
class MYGUI_EXPORT CoordConverter
|
||||
{
|
||||
public:
|
||||
/** Convert pixel coordinates to texture UV coordinates */
|
||||
static FloatRect convertTextureCoord(const IntCoord& _coord, const IntSize& _textureSize)
|
||||
{
|
||||
if (!_textureSize.width || !_textureSize.height) return FloatRect();
|
||||
return FloatRect(
|
||||
(float)_coord.left / (float)_textureSize.width,
|
||||
(float)_coord.top / (float)_textureSize.height,
|
||||
(float)_coord.right() / (float)_textureSize.width,
|
||||
(float)_coord.bottom() / (float)_textureSize.height);
|
||||
}
|
||||
|
||||
/* Convert from relative to pixel coordinates.
|
||||
@param _coord relative coordinates.
|
||||
*/
|
||||
static IntCoord convertFromRelative(const FloatCoord& _coord, const IntSize& _view)
|
||||
{
|
||||
return IntCoord(int(_coord.left * _view.width), int(_coord.top * _view.height), int(_coord.width * _view.width), int(_coord.height * _view.height));
|
||||
}
|
||||
|
||||
/* Convert from relative to pixel coordinates.
|
||||
@param _coord relative coordinates.
|
||||
*/
|
||||
static IntSize convertFromRelative(const FloatSize& _size, const IntSize& _view)
|
||||
{
|
||||
return IntSize(int(_size.width * _view.width), int(_size.height * _view.height));
|
||||
}
|
||||
|
||||
/* Convert from relative to pixel coordinates.
|
||||
@param _coord relative coordinates.
|
||||
*/
|
||||
static IntPoint convertFromRelative(const FloatPoint& _point, const IntSize& _view)
|
||||
{
|
||||
return IntPoint(int(_point.left * _view.width), int(_point.top * _view.height));
|
||||
}
|
||||
|
||||
/* Convert from pixel to relative coordinates.
|
||||
@param _coord pixel coordinates.
|
||||
*/
|
||||
static FloatCoord convertToRelative(const IntCoord& _coord, const IntSize& _view)
|
||||
{
|
||||
return FloatCoord(_coord.left / (float)_view.width, _coord.top / (float)_view.height, _coord.width / (float)_view.width, _coord.height / (float)_view.height);
|
||||
}
|
||||
|
||||
static FloatSize convertToRelative(const IntSize& _size, const IntSize& _view)
|
||||
{
|
||||
return FloatSize(_size.width / (float)_view.width, _size.height / (float)_view.height);
|
||||
}
|
||||
|
||||
static FloatPoint convertToRelative(const IntPoint& _point, const IntSize& _view)
|
||||
{
|
||||
return FloatPoint(_point.left / (float)_view.width, _point.top / (float)_view.height);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_COORD_CONVERTER_H__
|
|
@ -1,101 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 05/2009
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_CUSTOM_ALLOCATOR_H__
|
||||
#define __MYGUI_CUSTOM_ALLOCATOR_H__
|
||||
|
||||
#include <memory>
|
||||
#include <limits>
|
||||
|
||||
// for Ogre version
|
||||
#include <OgrePrerequisites.h>
|
||||
|
||||
#if OGRE_VERSION < MYGUI_DEFINE_VERSION(1, 6, 0)
|
||||
#include <OgreMemoryManager.h>
|
||||
#include <OgreNoMemoryMacros.h>
|
||||
#endif
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
template<typename T>
|
||||
class Allocator
|
||||
{
|
||||
public:
|
||||
// typedefs
|
||||
typedef T value_type;
|
||||
typedef value_type* pointer;
|
||||
typedef const value_type* const_pointer;
|
||||
typedef value_type& reference;
|
||||
typedef const value_type& const_reference;
|
||||
typedef std::size_t size_type;
|
||||
typedef std::ptrdiff_t difference_type;
|
||||
|
||||
public:
|
||||
// convert an allocator<T> to allocator<U>
|
||||
template<typename U>
|
||||
struct rebind
|
||||
{
|
||||
typedef Allocator<U> other;
|
||||
};
|
||||
|
||||
public:
|
||||
inline explicit Allocator() { }
|
||||
inline ~Allocator() { }
|
||||
template<typename U>
|
||||
inline explicit Allocator(Allocator<U> const&) { }
|
||||
|
||||
// address
|
||||
inline pointer address(reference r) { return &r; }
|
||||
inline const_pointer address(const_reference r) { return &r; }
|
||||
|
||||
// memory allocation
|
||||
inline pointer allocate(size_type cnt, typename std::allocator<void>::const_pointer = 0)
|
||||
{
|
||||
return reinterpret_cast<pointer>(::operator new (cnt * sizeof (T)));
|
||||
}
|
||||
inline void deallocate(pointer p, size_type)
|
||||
{
|
||||
::operator delete (p);
|
||||
}
|
||||
|
||||
// size
|
||||
inline size_type max_size() const
|
||||
{
|
||||
return std::numeric_limits<size_type>::max() / sizeof(T);
|
||||
}
|
||||
|
||||
// construction/destruction
|
||||
inline void construct(pointer p, const T& t) { new (p) T(t); }
|
||||
inline void destroy(pointer p) { p->~T(); }
|
||||
|
||||
inline bool operator==(Allocator const&) { return true; }
|
||||
inline bool operator!=(Allocator const& a) { return !operator==(a); }
|
||||
};
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#if OGRE_VERSION < MYGUI_DEFINE_VERSION(1, 6, 0)
|
||||
#include <OgreMemoryMacros.h>
|
||||
#endif
|
||||
|
||||
#endif // __MYGUI_CUSTOM_ALLOCATOR_H__
|
|
@ -1,175 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 10/2008
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_DDCONTAINER_H__
|
||||
#define __MYGUI_DDCONTAINER_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_Widget.h"
|
||||
#include "MyGUI_DDItemInfo.h"
|
||||
#include "MyGUI_EventPair.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
typedef delegates::CDelegate3<DDContainer*, const DDItemInfo&, bool&> EventHandle_DDContainerPtrCDDItemInfoRefBoolRef;
|
||||
typedef delegates::CDelegate3<DDContainer*, const DDItemInfo&, bool> EventHandle_DDContainerPtrCDDItemInfoRefBool;
|
||||
typedef delegates::CDelegate2<DDContainer*, DDItemState> EventHandle_EventHandle_DDContainerPtrDDItemState;
|
||||
typedef delegates::CDelegate3<DDContainer*, WidgetPtr&, IntCoord&> EventHandle_EventHandle_DDContainerPtrWidgetPtrRefIntCoordRef;
|
||||
|
||||
|
||||
class MYGUI_EXPORT DDContainer :
|
||||
public Widget
|
||||
{
|
||||
MYGUI_RTTI_DERIVED( DDContainer )
|
||||
|
||||
public:
|
||||
DDContainer();
|
||||
|
||||
/** Set drag'n'drop mode flag.
|
||||
Disabled (false) by default.
|
||||
*/
|
||||
void setNeedDragDrop(bool _value) { mNeedDragDrop = _value; }
|
||||
/** Get drag'n'drop mode flag */
|
||||
bool getNeedDragDrop() { return mNeedDragDrop; }
|
||||
|
||||
/** @copydoc Widget::setProperty(const std::string& _key, const std::string& _value) */
|
||||
virtual void setProperty(const std::string& _key, const std::string& _value);
|
||||
|
||||
/*event:*/
|
||||
/** Event : request for start drag
|
||||
signature : void method(MyGUI::DDContainer* _sender, const MyGUI::DDItemInfo& _info, bool& _result)
|
||||
@param _sender widget that called this event
|
||||
@param _info information about DDContainers
|
||||
@param _result write here true if container can be draggedor false if it can't
|
||||
*/
|
||||
EventHandle_DDContainerPtrCDDItemInfoRefBoolRef eventStartDrag;
|
||||
|
||||
/** Event : request for start drag (moving mouse over container, but not dropped yet)
|
||||
signature : void method(MyGUI::DDContainer* _sender, const MyGUI::DDItemInfo& _info, bool& _result)
|
||||
@param _sender widget that called this event
|
||||
@param _info information about DDContainers
|
||||
@param _result write here true if container accept dragged widget or false if it isn't
|
||||
*/
|
||||
EventHandle_DDContainerPtrCDDItemInfoRefBoolRef eventRequestDrop;
|
||||
|
||||
/** Event : end drag (drop)
|
||||
signature : void method(MyGUI::DDContainer* _sender, const MyGUI::DDItemInfo& _info, bool _result)
|
||||
@param _sender widget that called this event
|
||||
@param _info information about DDContainers
|
||||
@param _result if true then drop was successfull
|
||||
*/
|
||||
EventHandle_DDContainerPtrCDDItemInfoRefBool eventDropResult;
|
||||
|
||||
/** Event : drag'n'drop state changed
|
||||
signature : void method(MyGUI::DDContainer* _sender, MyGUI::DDItemState _state)
|
||||
@param _sender widget that called this event
|
||||
@param _state new state
|
||||
*/
|
||||
EventHandle_EventHandle_DDContainerPtrDDItemState eventChangeDDState;
|
||||
|
||||
/** Event : [not used] request widget for dragging
|
||||
signature : void method(MyGUI::DDContainer* _sender, MyGUI::Widget*& _item, MyGUI::IntCoord& _dimension)
|
||||
@param _sender widget that called this event
|
||||
@param _item write widget pointer here
|
||||
@param _dimension write widget coordinate here
|
||||
*/
|
||||
EventHandle_EventHandle_DDContainerPtrWidgetPtrRefIntCoordRef requestDragWidgetInfo;
|
||||
|
||||
|
||||
/*internal:*/
|
||||
// метод для установления стейта айтема
|
||||
virtual void _setContainerItemInfo(size_t _index, bool _set, bool _accept) { }
|
||||
|
||||
virtual void _initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, Widget* _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name);
|
||||
|
||||
/** Event : внутреннее событие, невалидна информация для контейнера
|
||||
signature : void method(MyGUI::DDContainer* _sender)
|
||||
@param _sender widget that called this event
|
||||
*/
|
||||
EventPair<EventHandle_WidgetVoid, delegates::CDelegate1<DDContainer*> >
|
||||
_eventInvalideContainer;
|
||||
|
||||
/** Event : !!обновить виджеты дропа DD_FIXME наверное internal
|
||||
signature : void method(MyGUI::DDContainer* _sender, MyGUI::Widget* _item, const MyGUI::DDWidgetState& _state)
|
||||
@param _sender widget that called this event
|
||||
@param _items
|
||||
@param _state
|
||||
*/
|
||||
delegates::CDelegate3<DDContainer*, Widget*, const DDWidgetState&>
|
||||
eventUpdateDropState;
|
||||
|
||||
protected:
|
||||
virtual ~DDContainer();
|
||||
|
||||
void baseChangeWidgetSkin(ResourceSkin* _info);
|
||||
|
||||
virtual void onMouseButtonPressed(int _left, int _top, MouseButton _id);
|
||||
virtual void onMouseButtonReleased(int _left, int _top, MouseButton _id);
|
||||
virtual void onMouseDrag(int _left, int _top);
|
||||
|
||||
virtual void notifyInvalideDrop(DDContainer* _sender);
|
||||
|
||||
virtual void _getContainer(Widget*& _container, size_t& _index);
|
||||
|
||||
virtual void removeDropItems();
|
||||
virtual void updateDropItems();
|
||||
virtual void updateDropItemsState(const DDWidgetState& _state);
|
||||
|
||||
void mouseDrag();
|
||||
void mouseButtonReleased(MouseButton _id);
|
||||
void mouseButtonPressed(MouseButton _id);
|
||||
|
||||
void endDrop(bool _reset);
|
||||
|
||||
private:
|
||||
void initialiseWidgetSkin(ResourceSkin* _info);
|
||||
void shutdownWidgetSkin();
|
||||
|
||||
|
||||
protected:
|
||||
bool mDropResult;
|
||||
bool mNeedDrop;
|
||||
bool mStartDrop;
|
||||
|
||||
Widget* mOldDrop;
|
||||
Widget* mCurrentSender;
|
||||
|
||||
DDItemInfo mDropInfo;
|
||||
|
||||
size_t mDropSenderIndex;
|
||||
|
||||
// список виджетов для дропа
|
||||
Widget* mDropItem;
|
||||
IntCoord mDropDimension;
|
||||
|
||||
IntPoint mClickInWidget;
|
||||
|
||||
// нужно и виджету поддержка драг энд дропа
|
||||
bool mNeedDragDrop;
|
||||
|
||||
DDContainer* mReseiverContainer;
|
||||
};
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_DDCONTAINER_H__
|
|
@ -1,120 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 01/2008
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_ITEM_DROP_INFO_H__
|
||||
#define __MYGUI_ITEM_DROP_INFO_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
struct MYGUI_EXPORT DDItemState
|
||||
{
|
||||
enum Enum
|
||||
{
|
||||
None,
|
||||
Start, /**< start drag */
|
||||
End, /**< end drag (drop) */
|
||||
Miss, /**< drag DDContainer over empty space or widgets that don't have drag'n'drop */
|
||||
Accept, /**< drag DDContainer over another DDContainer that accept dropping on it */
|
||||
Refuse /**< drag DDContainer over another DDContainer that refuse dropping on it */
|
||||
};
|
||||
|
||||
DDItemState(Enum _value = None) : value(_value) { }
|
||||
|
||||
friend bool operator == (DDItemState const& a, DDItemState const& b) { return a.value == b.value; }
|
||||
friend bool operator != (DDItemState const& a, DDItemState const& b) { return a.value != b.value; }
|
||||
|
||||
private:
|
||||
Enum value;
|
||||
};
|
||||
|
||||
// структура информации об индексах дропа
|
||||
/** Inormation about drag'n'drop indexes */
|
||||
struct MYGUI_EXPORT DDItemInfo
|
||||
{
|
||||
DDItemInfo() :
|
||||
sender(nullptr),
|
||||
sender_index(ITEM_NONE),
|
||||
receiver(nullptr),
|
||||
receiver_index(ITEM_NONE)
|
||||
{
|
||||
}
|
||||
|
||||
DDItemInfo(DDContainer* _sender, size_t _sender_index, DDContainer* _receiver, size_t _receiver_index) :
|
||||
sender(_sender),
|
||||
sender_index(_sender_index),
|
||||
receiver(_receiver),
|
||||
receiver_index(_receiver_index)
|
||||
{
|
||||
}
|
||||
|
||||
void set(DDContainer* _sender, size_t _sender_index, DDContainer* _receiver, size_t _receiver_index)
|
||||
{
|
||||
sender = _sender;
|
||||
sender_index = _sender_index;
|
||||
receiver = _receiver;
|
||||
receiver_index = _receiver_index;
|
||||
}
|
||||
|
||||
void reset()
|
||||
{
|
||||
sender = nullptr;
|
||||
sender_index = ITEM_NONE;
|
||||
receiver = nullptr;
|
||||
receiver_index = ITEM_NONE;
|
||||
}
|
||||
|
||||
/** DDContainer that send this event (container from which we started drag) */
|
||||
DDContainer* sender;
|
||||
/** Index of sender container */
|
||||
size_t sender_index;
|
||||
|
||||
/** DDContainer that receive dragged widget (container to which we want to drop) */
|
||||
DDContainer* receiver;
|
||||
/** Index of receiver container */
|
||||
size_t receiver_index;
|
||||
};
|
||||
|
||||
struct MYGUI_EXPORT DDWidgetState
|
||||
{
|
||||
DDWidgetState(size_t _index) :
|
||||
index(_index),
|
||||
update(true),
|
||||
accept(false),
|
||||
refuse(false)
|
||||
{ }
|
||||
|
||||
/** Index of element */
|
||||
size_t index;
|
||||
/** State and internal data changed */
|
||||
bool update;
|
||||
/** Is widget accept drop */
|
||||
bool accept;
|
||||
/** Is widget refuse drop */
|
||||
bool refuse;
|
||||
};
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_ITEM_DROP_INFO_H__
|
|
@ -1,45 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 05/2009
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_DATA_FILE_STREAM_H__
|
||||
#define __MYGUI_DATA_FILE_STREAM_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_DataStream.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
class MYGUI_EXPORT DataFileStream : public DataStream
|
||||
{
|
||||
public:
|
||||
DataFileStream();
|
||||
DataFileStream(std::ifstream* _stream);
|
||||
~DataFileStream();
|
||||
|
||||
private:
|
||||
std::ifstream* mFileStream;
|
||||
};
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_DATA_STREAM_H__
|
|
@ -1,56 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 05/2009
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_DATA_MANAGER_H__
|
||||
#define __MYGUI_DATA_MANAGER_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_IDataStream.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
class MYGUI_EXPORT DataManager
|
||||
{
|
||||
public:
|
||||
DataManager();
|
||||
virtual ~DataManager() = 0;
|
||||
|
||||
static DataManager& getInstance();
|
||||
static DataManager* getInstancePtr();
|
||||
|
||||
virtual IDataStream* getData(const std::string& _name) = 0;
|
||||
|
||||
virtual bool isDataExist(const std::string& _name) = 0;
|
||||
|
||||
virtual const VectorString& getDataListNames(const std::string& _pattern) = 0;
|
||||
|
||||
virtual const std::string& getDataPath(const std::string& _name) = 0;
|
||||
|
||||
private:
|
||||
static DataManager* msInstance;
|
||||
bool mIsInitialise;
|
||||
};
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_DATA_MANAGER_H__
|
|
@ -1,51 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 05/2009
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_DATA_STREAM_H__
|
||||
#define __MYGUI_DATA_STREAM_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_IDataStream.h"
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
class MYGUI_EXPORT DataStream : public IDataStream
|
||||
{
|
||||
public:
|
||||
DataStream();
|
||||
DataStream(std::istream* _stream);
|
||||
virtual ~DataStream();
|
||||
|
||||
virtual bool eof();
|
||||
virtual size_t size();
|
||||
virtual void readline(std::string& _source, Char _delim);
|
||||
virtual size_t read(void* _buf, size_t _count);
|
||||
|
||||
protected:
|
||||
std::istream* mStream;
|
||||
size_t mSize;
|
||||
};
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_DATA_STREAM_H__
|
|
@ -1,137 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 11/2007
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_DELEGATE_H__
|
||||
#define __MYGUI_DELEGATE_H__
|
||||
|
||||
#include "MyGUI_Diagnostic.h"
|
||||
#include <typeinfo>
|
||||
#include <list>
|
||||
|
||||
// source
|
||||
// http://rsdn.ru/article/cpp/delegates.xml
|
||||
|
||||
// генерация делегатов для различного колличества параметров
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
namespace delegates
|
||||
{
|
||||
// базовый класс для тех классов, что хотят себя отвязывать от мульти делегатов
|
||||
class MYGUI_EXPORT IDelegateUnlink
|
||||
{
|
||||
public:
|
||||
virtual ~IDelegateUnlink() { }
|
||||
|
||||
IDelegateUnlink() { m_baseDelegateUnlink = this; }
|
||||
bool compare(IDelegateUnlink * _unlink) const { return m_baseDelegateUnlink == _unlink->m_baseDelegateUnlink; }
|
||||
|
||||
private:
|
||||
IDelegateUnlink * m_baseDelegateUnlink;
|
||||
};
|
||||
|
||||
inline IDelegateUnlink * GetDelegateUnlink(void * _base) { return 0; }
|
||||
inline IDelegateUnlink * GetDelegateUnlink(IDelegateUnlink * _base) { return _base; }
|
||||
}
|
||||
|
||||
// без параметров
|
||||
#define MYGUI_SUFFIX 0
|
||||
#define MYGUI_TEMPLATE
|
||||
#define MYGUI_TEMPLATE_PARAMS
|
||||
#define MYGUI_TEMPLATE_ARGS
|
||||
#define MYGUI_T_TEMPLATE_PARAMS <typename T>
|
||||
#define MYGUI_T_TEMPLATE_ARGS <T>
|
||||
#define MYGUI_PARAMS
|
||||
#define MYGUI_ARGS
|
||||
#define MYGUI_TYPENAME
|
||||
|
||||
#include "MyGUI_DelegateImplement.h"
|
||||
|
||||
// один параметр
|
||||
#define MYGUI_SUFFIX 1
|
||||
#define MYGUI_TEMPLATE template
|
||||
#define MYGUI_TEMPLATE_PARAMS <typename TP1>
|
||||
#define MYGUI_TEMPLATE_ARGS <TP1>
|
||||
#define MYGUI_T_TEMPLATE_PARAMS <typename T, typename TP1>
|
||||
#define MYGUI_T_TEMPLATE_ARGS <T, TP1>
|
||||
#define MYGUI_PARAMS TP1 p1
|
||||
#define MYGUI_ARGS p1
|
||||
#define MYGUI_TYPENAME typename
|
||||
|
||||
#include "MyGUI_DelegateImplement.h"
|
||||
|
||||
// два параметра
|
||||
#define MYGUI_SUFFIX 2
|
||||
#define MYGUI_TEMPLATE template
|
||||
#define MYGUI_TEMPLATE_PARAMS <typename TP1, typename TP2>
|
||||
#define MYGUI_TEMPLATE_ARGS <TP1, TP2>
|
||||
#define MYGUI_T_TEMPLATE_PARAMS <typename T, typename TP1, typename TP2>
|
||||
#define MYGUI_T_TEMPLATE_ARGS <T, TP1, TP2>
|
||||
#define MYGUI_PARAMS TP1 p1, TP2 p2
|
||||
#define MYGUI_ARGS p1, p2
|
||||
#define MYGUI_TYPENAME typename
|
||||
|
||||
#include "MyGUI_DelegateImplement.h"
|
||||
|
||||
// три параметра
|
||||
#define MYGUI_SUFFIX 3
|
||||
#define MYGUI_TEMPLATE template
|
||||
#define MYGUI_TEMPLATE_PARAMS <typename TP1, typename TP2, typename TP3>
|
||||
#define MYGUI_TEMPLATE_ARGS <TP1, TP2, TP3>
|
||||
#define MYGUI_T_TEMPLATE_PARAMS <typename T, typename TP1, typename TP2, typename TP3>
|
||||
#define MYGUI_T_TEMPLATE_ARGS <T, TP1, TP2, TP3>
|
||||
#define MYGUI_PARAMS TP1 p1, TP2 p2, TP3 p3
|
||||
#define MYGUI_ARGS p1, p2, p3
|
||||
#define MYGUI_TYPENAME typename
|
||||
|
||||
#include "MyGUI_DelegateImplement.h"
|
||||
|
||||
// четыре параметра
|
||||
#define MYGUI_SUFFIX 4
|
||||
#define MYGUI_TEMPLATE template
|
||||
#define MYGUI_TEMPLATE_PARAMS <typename TP1, typename TP2, typename TP3, typename TP4>
|
||||
#define MYGUI_TEMPLATE_ARGS <TP1, TP2, TP3, TP4>
|
||||
#define MYGUI_T_TEMPLATE_PARAMS <typename T, typename TP1, typename TP2, typename TP3, typename TP4>
|
||||
#define MYGUI_T_TEMPLATE_ARGS <T, TP1, TP2, TP3, TP4>
|
||||
#define MYGUI_PARAMS TP1 p1, TP2 p2, TP3 p3, TP4 p4
|
||||
#define MYGUI_ARGS p1, p2, p3, p4
|
||||
#define MYGUI_TYPENAME typename
|
||||
|
||||
#include "MyGUI_DelegateImplement.h"
|
||||
|
||||
// пять параметров
|
||||
#define MYGUI_SUFFIX 5
|
||||
#define MYGUI_TEMPLATE template
|
||||
#define MYGUI_TEMPLATE_PARAMS <typename TP1, typename TP2, typename TP3, typename TP4, typename TP5>
|
||||
#define MYGUI_TEMPLATE_ARGS <TP1, TP2, TP3, TP4, TP5>
|
||||
#define MYGUI_T_TEMPLATE_PARAMS <typename T, typename TP1, typename TP2, typename TP3, typename TP4, typename TP5>
|
||||
#define MYGUI_T_TEMPLATE_ARGS <T, TP1, TP2, TP3, TP4, TP5>
|
||||
#define MYGUI_PARAMS TP1 p1, TP2 p2, TP3 p3, TP4 p4, TP5 p5
|
||||
#define MYGUI_ARGS p1, p2, p3, p4, p5
|
||||
#define MYGUI_TYPENAME typename
|
||||
|
||||
#include "MyGUI_DelegateImplement.h"
|
||||
|
||||
|
||||
} // namespace MyGUI
|
||||
|
||||
#endif // __MYGUI_DELEGATE_H__
|
|
@ -1,319 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@date 11/2007
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
namespace delegates
|
||||
{
|
||||
|
||||
#define MYGUI_COMBINE(a, b) MYGUI_COMBINE1(a, b)
|
||||
#define MYGUI_COMBINE1(a, b) a##b
|
||||
|
||||
#define MYGUI_I_DELEGATE MYGUI_COMBINE(IDelegate, MYGUI_SUFFIX)
|
||||
|
||||
#define MYGUI_C_STATIC_DELEGATE MYGUI_COMBINE(CStaticDelegate, MYGUI_SUFFIX)
|
||||
#define MYGUI_C_METHOD_DELEGATE MYGUI_COMBINE(CMethodDelegate, MYGUI_SUFFIX)
|
||||
|
||||
#define MYGUI_C_DELEGATE MYGUI_COMBINE(CDelegate, MYGUI_SUFFIX)
|
||||
#define MYGUI_C_MULTI_DELEGATE MYGUI_COMBINE(CMultiDelegate, MYGUI_SUFFIX)
|
||||
|
||||
|
||||
// базовый класс всех делегатов
|
||||
MYGUI_TEMPLATE MYGUI_TEMPLATE_PARAMS
|
||||
class MYGUI_I_DELEGATE
|
||||
{
|
||||
public:
|
||||
virtual ~MYGUI_I_DELEGATE() { }
|
||||
virtual bool isType( const std::type_info& _type) = 0;
|
||||
virtual void invoke( MYGUI_PARAMS ) = 0;
|
||||
virtual bool compare( MYGUI_I_DELEGATE MYGUI_TEMPLATE_ARGS * _delegate) const = 0;
|
||||
virtual bool compare(IDelegateUnlink * _unlink) const { return false; }
|
||||
};
|
||||
|
||||
|
||||
// делегат для статической функции
|
||||
MYGUI_TEMPLATE MYGUI_TEMPLATE_PARAMS
|
||||
class MYGUI_C_STATIC_DELEGATE : public MYGUI_I_DELEGATE MYGUI_TEMPLATE_ARGS
|
||||
{
|
||||
public:
|
||||
typedef void (*Func)( MYGUI_PARAMS );
|
||||
|
||||
MYGUI_C_STATIC_DELEGATE (Func _func) : mFunc(_func) { }
|
||||
|
||||
virtual bool isType( const std::type_info& _type) { return typeid( MYGUI_C_STATIC_DELEGATE MYGUI_TEMPLATE_ARGS ) == _type; }
|
||||
|
||||
virtual void invoke( MYGUI_PARAMS )
|
||||
{
|
||||
mFunc( MYGUI_ARGS );
|
||||
}
|
||||
|
||||
virtual bool compare( MYGUI_I_DELEGATE MYGUI_TEMPLATE_ARGS * _delegate) const
|
||||
{
|
||||
if (nullptr == _delegate || !_delegate->isType(typeid(MYGUI_C_STATIC_DELEGATE MYGUI_TEMPLATE_ARGS)) ) return false;
|
||||
MYGUI_C_STATIC_DELEGATE MYGUI_TEMPLATE_ARGS * cast = static_cast<MYGUI_C_STATIC_DELEGATE MYGUI_TEMPLATE_ARGS *>(_delegate);
|
||||
return cast->mFunc == mFunc;
|
||||
}
|
||||
virtual bool compare(IDelegateUnlink * _unlink) const { return false; }
|
||||
|
||||
private:
|
||||
Func mFunc;
|
||||
};
|
||||
|
||||
|
||||
// делегат для метода класса
|
||||
template MYGUI_T_TEMPLATE_PARAMS
|
||||
class MYGUI_C_METHOD_DELEGATE : public MYGUI_I_DELEGATE MYGUI_TEMPLATE_ARGS
|
||||
{
|
||||
public:
|
||||
typedef void (T::*Method)( MYGUI_PARAMS );
|
||||
|
||||
MYGUI_C_METHOD_DELEGATE(IDelegateUnlink * _unlink, T * _object, Method _method) : mUnlink(_unlink), mObject(_object), mMethod(_method) { }
|
||||
|
||||
virtual bool isType( const std::type_info& _type) { return typeid( MYGUI_C_METHOD_DELEGATE MYGUI_T_TEMPLATE_ARGS ) == _type; }
|
||||
|
||||
virtual void invoke( MYGUI_PARAMS )
|
||||
{
|
||||
(mObject->*mMethod)( MYGUI_ARGS );
|
||||
}
|
||||
|
||||
virtual bool compare( MYGUI_I_DELEGATE MYGUI_TEMPLATE_ARGS * _delegate) const
|
||||
{
|
||||
if (nullptr == _delegate || !_delegate->isType(typeid(MYGUI_C_METHOD_DELEGATE MYGUI_T_TEMPLATE_ARGS)) ) return false;
|
||||
MYGUI_C_METHOD_DELEGATE MYGUI_T_TEMPLATE_ARGS * cast = static_cast< MYGUI_C_METHOD_DELEGATE MYGUI_T_TEMPLATE_ARGS * >(_delegate);
|
||||
return cast->mObject == mObject && cast->mMethod == mMethod;
|
||||
}
|
||||
|
||||
virtual bool compare(IDelegateUnlink * _unlink) const
|
||||
{
|
||||
return mUnlink == _unlink;
|
||||
}
|
||||
|
||||
private:
|
||||
IDelegateUnlink *mUnlink;
|
||||
T * mObject;
|
||||
Method mMethod;
|
||||
};
|
||||
|
||||
} // namespace delegates
|
||||
|
||||
// шаблон для создания делегата статической функции
|
||||
// параметры : указатель на функцию
|
||||
// пример : newDelegate(funk_name);
|
||||
// пример : newDelegate(class_name::static_method_name);
|
||||
MYGUI_TEMPLATE MYGUI_TEMPLATE_PARAMS
|
||||
inline delegates::MYGUI_I_DELEGATE MYGUI_TEMPLATE_ARGS * newDelegate( void (*_func)( MYGUI_PARAMS ) )
|
||||
{
|
||||
return new delegates::MYGUI_C_STATIC_DELEGATE MYGUI_TEMPLATE_ARGS (_func);
|
||||
}
|
||||
|
||||
|
||||
// шаблон для создания делегата метода класса
|
||||
// параметры : указатель на объект класса и указатель на метод класса
|
||||
// пример : newDelegate(&object_name, &class_name::method_name);
|
||||
template MYGUI_T_TEMPLATE_PARAMS
|
||||
inline delegates::MYGUI_I_DELEGATE MYGUI_TEMPLATE_ARGS * newDelegate( T * _object, void (T::*_method)( MYGUI_PARAMS ) )
|
||||
{
|
||||
return new delegates::MYGUI_C_METHOD_DELEGATE MYGUI_T_TEMPLATE_ARGS (delegates::GetDelegateUnlink(_object), _object, _method);
|
||||
}
|
||||
|
||||
namespace delegates
|
||||
{
|
||||
// шаблон класса делегата
|
||||
MYGUI_TEMPLATE MYGUI_TEMPLATE_PARAMS
|
||||
class MYGUI_C_DELEGATE
|
||||
{
|
||||
public:
|
||||
typedef MYGUI_I_DELEGATE MYGUI_TEMPLATE_ARGS IDelegate;
|
||||
|
||||
MYGUI_C_DELEGATE () : mDelegate(nullptr) { }
|
||||
MYGUI_C_DELEGATE (const MYGUI_C_DELEGATE MYGUI_TEMPLATE_ARGS& _event)
|
||||
{
|
||||
// забираем себе владение
|
||||
mDelegate = _event.mDelegate;
|
||||
const_cast< MYGUI_C_DELEGATE MYGUI_TEMPLATE_ARGS& >(_event).mDelegate = nullptr;
|
||||
}
|
||||
~MYGUI_C_DELEGATE () { clear(); }
|
||||
|
||||
bool empty() const { return mDelegate == nullptr; }
|
||||
|
||||
void clear()
|
||||
{
|
||||
if (mDelegate)
|
||||
{
|
||||
delete mDelegate;
|
||||
mDelegate = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
MYGUI_C_DELEGATE MYGUI_TEMPLATE_ARGS & operator=(IDelegate* _delegate)
|
||||
{
|
||||
delete mDelegate;
|
||||
mDelegate = _delegate;
|
||||
return *this;
|
||||
}
|
||||
|
||||
MYGUI_C_DELEGATE MYGUI_TEMPLATE_ARGS & operator=(const MYGUI_C_DELEGATE MYGUI_TEMPLATE_ARGS& _event)
|
||||
{
|
||||
// забираем себе владение
|
||||
delete mDelegate;
|
||||
mDelegate = _event.mDelegate;
|
||||
const_cast< MYGUI_C_DELEGATE MYGUI_TEMPLATE_ARGS& >(_event).mDelegate = nullptr;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
void operator()( MYGUI_PARAMS )
|
||||
{
|
||||
if (mDelegate == nullptr) return;
|
||||
mDelegate->invoke( MYGUI_ARGS );
|
||||
}
|
||||
|
||||
private:
|
||||
IDelegate * mDelegate;
|
||||
};
|
||||
|
||||
|
||||
// шаблон класса мульти делегата
|
||||
MYGUI_TEMPLATE MYGUI_TEMPLATE_PARAMS
|
||||
class MYGUI_C_MULTI_DELEGATE
|
||||
{
|
||||
public:
|
||||
typedef MYGUI_I_DELEGATE MYGUI_TEMPLATE_ARGS IDelegate;
|
||||
typedef MYGUI_TYPENAME std::list<IDelegate* /*, Allocator<IDelegate*>*/ > ListDelegate;
|
||||
typedef MYGUI_TYPENAME ListDelegate::iterator ListDelegateIterator;
|
||||
typedef MYGUI_TYPENAME ListDelegate::const_iterator ConstListDelegateIterator;
|
||||
|
||||
MYGUI_C_MULTI_DELEGATE () { }
|
||||
~MYGUI_C_MULTI_DELEGATE () { clear(); }
|
||||
|
||||
bool empty() const
|
||||
{
|
||||
for (ConstListDelegateIterator iter = mListDelegates.begin(); iter!=mListDelegates.end(); ++iter)
|
||||
{
|
||||
if (*iter) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
for (ListDelegateIterator iter=mListDelegates.begin(); iter!=mListDelegates.end(); ++iter)
|
||||
{
|
||||
if (*iter)
|
||||
{
|
||||
delete (*iter);
|
||||
(*iter) = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void clear(IDelegateUnlink * _unlink)
|
||||
{
|
||||
for (ListDelegateIterator iter=mListDelegates.begin(); iter!=mListDelegates.end(); ++iter)
|
||||
{
|
||||
if ((*iter) && (*iter)->compare(_unlink))
|
||||
{
|
||||
delete (*iter);
|
||||
(*iter) = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MYGUI_C_MULTI_DELEGATE MYGUI_TEMPLATE_ARGS & operator+=(IDelegate* _delegate)
|
||||
{
|
||||
for (ListDelegateIterator iter=mListDelegates.begin(); iter!=mListDelegates.end(); ++iter)
|
||||
{
|
||||
if ((*iter) && (*iter)->compare(_delegate))
|
||||
{
|
||||
MYGUI_ASSERT(false, "dublicate delegate");
|
||||
}
|
||||
}
|
||||
mListDelegates.push_back(_delegate);
|
||||
return *this;
|
||||
}
|
||||
|
||||
MYGUI_C_MULTI_DELEGATE MYGUI_TEMPLATE_ARGS & operator-=(IDelegate* _delegate)
|
||||
{
|
||||
for (ListDelegateIterator iter=mListDelegates.begin(); iter!=mListDelegates.end(); ++iter)
|
||||
{
|
||||
if ((*iter) && (*iter)->compare(_delegate))
|
||||
{
|
||||
// проверяем на идентичность делегатов
|
||||
if ((*iter) != _delegate) delete (*iter);
|
||||
(*iter) = nullptr;
|
||||
break;
|
||||
}
|
||||
}
|
||||
delete _delegate;
|
||||
return *this;
|
||||
}
|
||||
|
||||
void operator()( MYGUI_PARAMS )
|
||||
{
|
||||
ListDelegateIterator iter = mListDelegates.begin();
|
||||
while (iter != mListDelegates.end())
|
||||
{
|
||||
if (nullptr == (*iter))
|
||||
{
|
||||
iter = mListDelegates.erase(iter);
|
||||
}
|
||||
else
|
||||
{
|
||||
(*iter)->invoke( MYGUI_ARGS );
|
||||
++iter;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
// constructor and operator =, without implementation, just for private
|
||||
MYGUI_C_MULTI_DELEGATE (const MYGUI_C_MULTI_DELEGATE MYGUI_TEMPLATE_ARGS & _event);
|
||||
MYGUI_C_MULTI_DELEGATE MYGUI_TEMPLATE_ARGS & operator=(const MYGUI_C_MULTI_DELEGATE MYGUI_TEMPLATE_ARGS & _event);
|
||||
|
||||
|
||||
private:
|
||||
ListDelegate mListDelegates;
|
||||
|
||||
};
|
||||
|
||||
|
||||
#undef MYGUI_COMBINE
|
||||
#undef MYGUI_COMBINE1
|
||||
|
||||
#undef MYGUI_I_DELEGATE
|
||||
|
||||
#undef MYGUI_C_STATIC_DELEGATE
|
||||
#undef MYGUI_C_METHOD_DELEGATE
|
||||
|
||||
#undef MYGUI_C_DELEGATE
|
||||
#undef MYGUI_C_MULTI_DELEGATE
|
||||
|
||||
#undef MYGUI_SUFFIX
|
||||
#undef MYGUI_TEMPLATE
|
||||
#undef MYGUI_TEMPLATE_PARAMS
|
||||
#undef MYGUI_TEMPLATE_ARGS
|
||||
#undef MYGUI_T_TEMPLATE_PARAMS
|
||||
#undef MYGUI_T_TEMPLATE_ARGS
|
||||
#undef MYGUI_PARAMS
|
||||
#undef MYGUI_ARGS
|
||||
#undef MYGUI_TYPENAME
|
||||
|
||||
} // namespace delegates
|
|
@ -1,115 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Albert Semenov
|
||||
@author baho_is
|
||||
@date 11/2007
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_DIAGNOSTIC_H__
|
||||
#define __MYGUI_DIAGNOSTIC_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_Exception.h"
|
||||
#include "MyGUI_LogManager.h"
|
||||
#include <sstream>
|
||||
|
||||
// for debugging
|
||||
#if MYGUI_COMPILER == MYGUI_COMPILER_MSVC
|
||||
#include <crtdbg.h>
|
||||
#endif
|
||||
|
||||
#define MYGUI_LOG_SECTION "Core"
|
||||
#define MYGUI_LOG_FILENAME "MyGUI.log"
|
||||
#define MYGUI_LOG(level, text) MYGUI_LOGGING(MYGUI_LOG_SECTION, level, text)
|
||||
|
||||
#define MYGUI_BASE_EXCEPT(desc, src) throw MyGUI::Exception(desc, src, __FILE__, __LINE__);
|
||||
|
||||
// MSVC specific: sets the breakpoint
|
||||
#if MYGUI_COMPILER == MYGUI_COMPILER_MSVC
|
||||
#define MYGUI_DBG_BREAK _CrtDbgBreak();
|
||||
#else
|
||||
#define MYGUI_DBG_BREAK
|
||||
#endif
|
||||
|
||||
#define MYGUI_EXCEPT(dest) \
|
||||
{ \
|
||||
MYGUI_LOG(Critical, dest); \
|
||||
MYGUI_DBG_BREAK;\
|
||||
std::ostringstream stream; \
|
||||
stream << dest << "\n"; \
|
||||
MYGUI_BASE_EXCEPT(stream.str().c_str(), "MyGUI"); \
|
||||
}
|
||||
|
||||
#define MYGUI_ASSERT(exp, dest) \
|
||||
{ \
|
||||
if ( ! (exp) ) \
|
||||
{ \
|
||||
MYGUI_LOG(Critical, dest); \
|
||||
MYGUI_DBG_BREAK;\
|
||||
std::ostringstream stream; \
|
||||
stream << dest << "\n"; \
|
||||
MYGUI_BASE_EXCEPT(stream.str().c_str(), "MyGUI"); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define MYGUI_ASSERT_RANGE(index, size, owner) MYGUI_ASSERT(index < size, owner << " : index number " << index << " out of range [" << size << "]");
|
||||
#define MYGUI_ASSERT_RANGE_AND_NONE(index, size, owner) MYGUI_ASSERT(index < size || index == ITEM_NONE, owner << " : index number " << index << " out of range [" << size << "]");
|
||||
#define MYGUI_ASSERT_RANGE_INSERT(index, size, owner) MYGUI_ASSERT((index <= size) || (index == MyGUI::ITEM_NONE), owner << " : insert index number " << index << " out of range [" << size << "] or not ITEM_NONE");
|
||||
|
||||
#if MYGUI_DEBUG_MODE == 1
|
||||
#define MYGUI_REGISTER_VALUE(map, value) \
|
||||
{ \
|
||||
MYGUI_LOG(Info, "Register value : '" << #value << "' = " << (int)value); \
|
||||
map[#value] = value; \
|
||||
}
|
||||
#define MYGUI_DEBUG_ASSERT(exp, dest) MYGUI_ASSERT(exp, dest)
|
||||
#else
|
||||
#define MYGUI_REGISTER_VALUE(map, value) map[#value] = value;
|
||||
#define MYGUI_DEBUG_ASSERT(exp, dest) ((void)0)
|
||||
#endif
|
||||
|
||||
|
||||
// for more info see: http://mdf-i.blogspot.com/2008/09/deprecated-gcc-vs-vs-vs-vs.html
|
||||
#if MYGUI_COMPILER == MYGUI_COMPILER_MSVC
|
||||
#if MYGUI_COMP_VER == 1310 // VC++ 7.1
|
||||
#define MYGUI_OBSOLETE_START(text)
|
||||
#define MYGUI_OBSOLETE_END
|
||||
#else
|
||||
#define MYGUI_OBSOLETE_START(text) __declspec(deprecated(text))
|
||||
#define MYGUI_OBSOLETE_END
|
||||
#endif
|
||||
|
||||
#elif MYGUI_COMPILER == MYGUI_COMPILER_GNUC
|
||||
#if MYGUI_PLATFORM == MYGUI_PLATFORM_LINUX && MYGUI_COMP_VER == 412
|
||||
#define MYGUI_OBSOLETE_START(text)
|
||||
#define MYGUI_OBSOLETE_END
|
||||
#else
|
||||
#define MYGUI_OBSOLETE_START(text)
|
||||
#define MYGUI_OBSOLETE_END __attribute__((deprecated))
|
||||
#endif
|
||||
|
||||
#else
|
||||
#define MYGUI_OBSOLETE_START(text)
|
||||
#define MYGUI_OBSOLETE_END
|
||||
|
||||
#endif
|
||||
|
||||
#define MYGUI_OBSOLETE(text) /*! \deprecated text */ MYGUI_OBSOLETE_START(text)MYGUI_OBSOLETE_END
|
||||
|
||||
#endif // __MYGUI_DIAGNOSTIC_H__
|
|
@ -1,111 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Denis Koronchik
|
||||
@author Georgiy Evmenov
|
||||
@date 09/2007
|
||||
@module
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __MYGUI_DYNLIB_H__
|
||||
#define __MYGUI_DYNLIB_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include <string>
|
||||
|
||||
|
||||
#if MYGUI_PLATFORM == MYGUI_PLATFORM_WIN32
|
||||
# define MYGUI_DYNLIB_HANDLE hInstance
|
||||
# define MYGUI_DYNLIB_LOAD( a ) LoadLibrary( a )
|
||||
# define MYGUI_DYNLIB_GETSYM( a, b ) GetProcAddress( a, b )
|
||||
# define MYGUI_DYNLIB_UNLOAD( a ) !FreeLibrary( a )
|
||||
|
||||
struct HINSTANCE__;
|
||||
typedef struct HINSTANCE__* hInstance;
|
||||
|
||||
#elif MYGUI_PLATFORM == MYGUI_PLATFORM_LINUX
|
||||
# define MYGUI_DYNLIB_HANDLE void*
|
||||
# define MYGUI_DYNLIB_LOAD( a ) dlopen( a, RTLD_LAZY | RTLD_GLOBAL)
|
||||
# define MYGUI_DYNLIB_GETSYM( a, b ) dlsym( a, b )
|
||||
# define MYGUI_DYNLIB_UNLOAD( a ) dlclose( a )
|
||||
|
||||
#elif MYGUI_PLATFORM == MYGUI_PLATFORM_APPLE
|
||||
# include <CoreFoundation/CFBundle.h>
|
||||
# define MYGUI_DYNLIB_HANDLE CFBundleRef
|
||||
# define MYGUI_DYNLIB_LOAD( a ) mac_loadExeBundle( a )
|
||||
# define MYGUI_DYNLIB_GETSYM( a, b ) mac_getBundleSym( a, b )
|
||||
# define MYGUI_DYNLIB_UNLOAD( a ) mac_unloadExeBundle( a )
|
||||
#endif
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
/*! @brief Resource holding data about a dynamic library.
|
||||
|
||||
@remarks
|
||||
This class holds the data required to get symbols from
|
||||
libraries loaded at run-time (i.e. from DLL's for so's)
|
||||
*/
|
||||
class MYGUI_EXPORT DynLib
|
||||
{
|
||||
friend class DynLibManager;
|
||||
|
||||
protected:
|
||||
DynLib(const std::string &name);
|
||||
|
||||
~DynLib();
|
||||
|
||||
public:
|
||||
|
||||
/*! Load the library
|
||||
*/
|
||||
bool load();
|
||||
|
||||
/*! Unload the library
|
||||
*/
|
||||
void unload();
|
||||
|
||||
//! Get the name of the library
|
||||
std::string getName(void) const { return mName; }
|
||||
|
||||
/**
|
||||
Returns the address of the given symbol from the loaded library.
|
||||
@param
|
||||
strName The name of the symbol to search for
|
||||
@returns
|
||||
If the function succeeds, the returned value is a handle to the symbol.
|
||||
If the function fails, the returned value is <b>nullptr</b>.
|
||||
*/
|
||||
void* getSymbol( const std::string& strName ) const throw();
|
||||
|
||||
protected:
|
||||
//! Gets the last loading error
|
||||
std::string dynlibError(void);
|
||||
|
||||
|
||||
protected:
|
||||
//! Name of library
|
||||
std::string mName;
|
||||
|
||||
//! Handle to the loaded library.
|
||||
MYGUI_DYNLIB_HANDLE mInstance;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // __MYGUI_DYNLIB_H__
|
|
@ -1,58 +0,0 @@
|
|||
/*!
|
||||
@file
|
||||
@author Denis Koronchik
|
||||
@date 08/2007
|
||||
@module libEngine
|
||||
*/
|
||||
/*
|
||||
This file is part of MyGUI.
|
||||
|
||||
MyGUI is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
MyGUI is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with MyGUI. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef __MYGUI_DYN_LIB_MANAGER_H__
|
||||
#define __MYGUI_DYN_LIB_MANAGER_H__
|
||||
|
||||
#include "MyGUI_Prerequest.h"
|
||||
#include "MyGUI_Instance.h"
|
||||
#include "MyGUI_DynLib.h"
|
||||
#include <map>
|
||||
|
||||
namespace MyGUI
|
||||
{
|
||||
|
||||
/*! \brief Manager of dynamic libraries
|
||||
*/
|
||||
class MYGUI_EXPORT DynLibManager
|
||||
{
|
||||
MYGUI_INSTANCE_HEADER( DynLibManager )
|
||||
|
||||
public:
|
||||
void initialise();
|
||||
void shutdown();
|
||||
|
||||
//! Load library
|
||||
DynLib* load(const std::string &fileName);
|
||||
//! Unload library
|
||||
void unload(DynLib *library);
|
||||
|
||||
private:
|
||||
//! Dynamic libraries map
|
||||
typedef std::map <std::string, DynLib*> StringDynLibMap;
|
||||
//! Loaded libraries
|
||||
StringDynLibMap mLibsMap;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // __MYGUI_DYN_LIB_MANAGER_H__
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue