From 1721bc51d2f1d21da12cb5b24ca01134dcb7b491 Mon Sep 17 00:00:00 2001 From: dnk-88 Date: Wed, 25 May 2011 21:22:10 +0300 Subject: [PATCH 01/16] Added: #1301 Added initial basic shell of Landscape editor plugin. --- .../src/plugins/CMakeLists.txt | 1 + .../plugins/landscape_editor/CMakeLists.txt | 48 +++++++ .../icons/ic_nel_landscape_item.png | Bin 0 -> 56924 bytes .../icons/ic_nel_landscape_settings.png | Bin 0 -> 30656 bytes .../icons/ic_nel_world_editor.png | Bin 0 -> 44031 bytes .../landscape_editor/icons/ic_nel_zone.png | Bin 0 -> 47312 bytes .../landscape_editor/icons/ic_nel_zonel.png | Bin 0 -> 57867 bytes .../landscape_editor/landscape_editor.qrc | 9 ++ .../landscape_editor_constants.h | 37 ++++++ .../landscape_editor_global.h | 30 +++++ .../landscape_editor_plugin.cpp | 118 ++++++++++++++++++ .../landscape_editor_plugin.h | 103 +++++++++++++++ .../landscape_editor_window.cpp | 65 ++++++++++ .../landscape_editor_window.h | 49 ++++++++ .../landscape_editor_window.ui | 43 +++++++ 15 files changed, 503 insertions(+) create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/CMakeLists.txt create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/icons/ic_nel_landscape_item.png create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/icons/ic_nel_landscape_settings.png create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/icons/ic_nel_world_editor.png create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/icons/ic_nel_zone.png create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/icons/ic_nel_zonel.png create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor.qrc create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_constants.h create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_global.h create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.cpp create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.h create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.cpp create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.h create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.ui diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/CMakeLists.txt b/code/nel/tools/3d/object_viewer_qt/src/plugins/CMakeLists.txt index d5a792acd..7da567023 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/CMakeLists.txt +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/CMakeLists.txt @@ -1,6 +1,7 @@ ADD_SUBDIRECTORY(core) ADD_SUBDIRECTORY(example) ADD_SUBDIRECTORY(ovqt_sheet_builder) +ADD_SUBDIRECTORY(landscape_editor) ADD_SUBDIRECTORY(log) ADD_SUBDIRECTORY(disp_sheet_id) ADD_SUBDIRECTORY(object_viewer) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/CMakeLists.txt b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/CMakeLists.txt new file mode 100644 index 000000000..3b6a61c5e --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/CMakeLists.txt @@ -0,0 +1,48 @@ +INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${LIBXML2_INCLUDE_DIR} + ${QT_INCLUDES}) + +FILE(GLOB SRC *.cpp *.h) + +SET(OVQT_EXT_SYS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin.h + ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_manager.h + ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_spec.h) + +SET(OVQT_PLUGIN_LANDSCAPE_EDITOR_HDR landscape_editor_plugin.h + landscape_editor_window.h +) + +SET(OVQT_PLUGIN_LANDSCAPE_EDITOR_UIS landscape_editor_window.ui +) + +SET(OVQT_PLUGIN_LANDSCAPE_EDITOR_RCS landscape_editor.qrc) + +SET(QT_USE_QTGUI TRUE) +SET(QT_USE_QTOPENGL TRUE) + +QT4_ADD_RESOURCES(OVQT_PLUGIN_LANDSCAPE_EDITOR_RC_SRCS ${OVQT_PLUGIN_LANDSCAPE_EDITOR_RCS}) +QT4_WRAP_CPP(OVQT_PLUGIN_LANDSCAPE_EDITOR_MOC_SRC ${OVQT_PLUGIN_LANDSCAPE_EDITOR_HDR}) +QT4_WRAP_UI(OVQT_PLUGIN_LANDSCAPE_EDITOR_UI_HDRS ${OVQT_PLUGIN_LANDSCAPE_EDITOR_UIS}) + +SOURCE_GROUP(QtResources FILES ${OVQT_PLUGIN_LANDSCAPE_EDITOR_UIS}) +SOURCE_GROUP(QtGeneratedUiHdr FILES ${OVQT_PLUGIN_LANDSCAPE_EDITOR_UI_HDRS}) +SOURCE_GROUP(QtGeneratedMocQrcSrc FILES ${OVQT_PLUGIN_LANDSCAPE_EDITOR_MOC_SRC} OVQT_PLUGIN_LANDSCAPE_EDITOR_RC_SRCS) +SOURCE_GROUP("Landscape Editor Plugin" FILES ${SRC}) +SOURCE_GROUP("OVQT Extension System" FILES ${OVQT_EXT_SYS_SRC}) + +ADD_LIBRARY(ovqt_plugin_landscape_editor MODULE ${SRC} + ${OVQT_PLUGIN_LANDSCAPE_EDITOR_MOC_SRC} + ${OVQT_EXT_SYS_SRC} + ${OVQT_PLUGIN_LANDSCAPE_EDITOR_UI_HDRS} + ${OVQT_PLUGIN_LANDSCAPE_EDITOR_RC_SRCS}) + +TARGET_LINK_LIBRARIES(ovqt_plugin_landscape_editor ovqt_plugin_core nelmisc nel3d ${QT_LIBRARIES} ${QT_QTOPENGL_LIBRARY}) + +NL_DEFAULT_PROPS(ovqt_plugin_landscape_editor "NeL, Tools, 3D: Object Viewer Qt Plugin: Landscape Editor") +NL_ADD_RUNTIME_FLAGS(ovqt_plugin_landscape_editor) +NL_ADD_LIB_SUFFIX(ovqt_plugin_landscape_editor) + +ADD_DEFINITIONS(-DLANDSCAPE_EDITOR_LIBRARY ${LIBXML2_DEFINITIONS} -DQT_PLUGIN -DQT_SHARED ${QT_DEFINITIONS}) + +INSTALL(TARGETS ovqt_plugin_landscape_editor LIBRARY DESTINATION lib RUNTIME DESTINATION bin ARCHIVE DESTINATION lib COMPONENT tools3d) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/icons/ic_nel_landscape_item.png b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/icons/ic_nel_landscape_item.png new file mode 100644 index 0000000000000000000000000000000000000000..7a51400b39aec9a48b23f573cd091693466b80ce GIT binary patch literal 56924 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 literal 0 HcmV?d00001 diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/icons/ic_nel_landscape_settings.png b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/icons/ic_nel_landscape_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..4197f7f974481968f968fd3e9267a5fd7b84d4db GIT binary patch literal 30656 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 literal 0 HcmV?d00001 diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/icons/ic_nel_world_editor.png b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/icons/ic_nel_world_editor.png new file mode 100644 index 0000000000000000000000000000000000000000..d41f64e2fa43da9d64f9b528cc173593d4a94c59 GIT binary patch literal 44031 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 GHST}F+s82g literal 0 HcmV?d00001 diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/icons/ic_nel_zone.png b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/icons/ic_nel_zone.png new file mode 100644 index 0000000000000000000000000000000000000000..73be2752843040e6e3c0736b03eb3990210a9dc8 GIT binary patch literal 47312 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 b!8cqqH?6*Ah8^bs;iq%o@Lq*FD)RpT^Q{UA literal 0 HcmV?d00001 diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/icons/ic_nel_zonel.png b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/icons/ic_nel_zonel.png new file mode 100644 index 0000000000000000000000000000000000000000..40f75828b8f40646b66b9bb2e0fc8e831b629b64 GIT binary patch literal 57867 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 ZK*BeDhjmq-TLANCc+FJ5;;K{B{{a=o&Qt&Z literal 0 HcmV?d00001 diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor.qrc b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor.qrc new file mode 100644 index 000000000..5dba9074b --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor.qrc @@ -0,0 +1,9 @@ + + + icons/ic_nel_landscape_item.png + icons/ic_nel_landscape_settings.png + icons/ic_nel_world_editor.png + icons/ic_nel_zone.png + icons/ic_nel_zonel.png + + diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_constants.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_constants.h new file mode 100644 index 000000000..52775f4c4 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_constants.h @@ -0,0 +1,37 @@ +// Object Viewer Qt - MMORPG Framework +// Copyright (C) 2010 Winch Gate Property Limited +// Copyright (C) 2011 Dzmitry Kamiahin +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +#ifndef LANDSCAPE_EDITOR_CONSTANTS_H +#define LANDSCAPE_EDITOR_CONSTANTS_H + +namespace LandscapeEditor +{ +namespace Constants +{ +const char * const LANDSCAPE_EDITOR_PLUGIN = "LandscapeEditor"; + +//settings +const char * const LANDSCAPE_EDITOR_SECTION = "LandscapeEditor"; + +//resources +const char * const ICON_LANDSCAPE_ITEM = ":/icons/ic_nel_landscape_item.png"; + + +} // namespace Constants +} // namespace LandscapeEditor + +#endif // LANDSCAPE_EDITOR_CONSTANTS_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_global.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_global.h new file mode 100644 index 000000000..167c8e24f --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_global.h @@ -0,0 +1,30 @@ +// Object Viewer Qt - MMORPG Framework +// Copyright (C) 2010 Winch Gate Property Limited +// Copyright (C) 2011 Dzmitry Kamiahin +// Parts by Nokia Corporation (qt-info@nokia.com) Copyright (C) 2009. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +#ifndef LANDSCAPE_EDITOR_GLOBAL_H +#define LANDSCAPE_EDITOR_GLOBAL_H + +#include + +#if defined(LANDSCAPE_EDITOR_LIBRARY) +# define LANDSCAPE_EDITOR_EXPORT Q_DECL_EXPORT +#else +# define LANDSCAPE_EDITOR_EXPORT Q_DECL_IMPORT +#endif + +#endif // LANDSCAPE_EDITOR_GLOBAL_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.cpp new file mode 100644 index 000000000..2c51a5d68 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.cpp @@ -0,0 +1,118 @@ +// Object Viewer Qt - MMORPG Framework +// Copyright (C) 2010 Winch Gate Property Limited +// Copyright (C) 2011 Dzmitry Kamiahin +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Project includes +#include "landscape_editor_plugin.h" +#include "landscape_editor_window.h" + +#include "../core/icore.h" +#include "../core/core_constants.h" + +// NeL includes +#include "nel/misc/debug.h" + +// Qt includes +#include + +namespace LandscapeEditor +{ + +LandscapeEditorPlugin::~LandscapeEditorPlugin() +{ + Q_FOREACH(QObject *obj, m_autoReleaseObjects) + { + m_plugMan->removeObject(obj); + } + qDeleteAll(m_autoReleaseObjects); + m_autoReleaseObjects.clear(); +} + +bool LandscapeEditorPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString) +{ + Q_UNUSED(errorString); + m_plugMan = pluginManager; + + addAutoReleasedObject(new LandscapeEditorContext(this)); + return true; +} + +void LandscapeEditorPlugin::extensionsInitialized() +{ +} + +void LandscapeEditorPlugin::shutdown() +{ +} + +void LandscapeEditorPlugin::setNelContext(NLMISC::INelContext *nelContext) +{ +#ifdef NL_OS_WINDOWS + // Ensure that a context doesn't exist yet. + // This only applies to platforms without PIC, e.g. Windows. + nlassert(!NLMISC::INelContext::isContextInitialised()); +#endif // NL_OS_WINDOWS + m_libContext = new NLMISC::CLibraryContext(*nelContext); +} + +QString LandscapeEditorPlugin::name() const +{ + return tr("LandscapeEditor"); +} + +QString LandscapeEditorPlugin::version() const +{ + return "0.0.1"; +} + +QString LandscapeEditorPlugin::vendor() const +{ + return "GSoC2011_dnk-88"; +} + +QString LandscapeEditorPlugin::description() const +{ + return "Landscape editor ovqt plugin."; +} + +QStringList LandscapeEditorPlugin::dependencies() const +{ + QStringList list; + list.append(Core::Constants::OVQT_CORE_PLUGIN); + return list; +} + +void LandscapeEditorPlugin::addAutoReleasedObject(QObject *obj) +{ + m_plugMan->addObject(obj); + m_autoReleaseObjects.prepend(obj); +} + +LandscapeEditorContext::LandscapeEditorContext(QObject *parent) + : IContext(parent), + m_landEditorWindow(0) +{ + m_landEditorWindow = new LandscapeEditorWindow(); +} + +QWidget *LandscapeEditorContext::widget() +{ + return m_landEditorWindow; +} + +} + +Q_EXPORT_PLUGIN(LandscapeEditor::LandscapeEditorPlugin) \ No newline at end of file diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.h new file mode 100644 index 000000000..3b7df3777 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.h @@ -0,0 +1,103 @@ +// Object Viewer Qt - MMORPG Framework +// Copyright (C) 2010 Winch Gate Property Limited +// Copyright (C) 2011 Dzmitry Kamiahin +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +#ifndef LANDSCAPE_EDITOR_PLUGIN_H +#define LANDSCAPE_EDITOR_PLUGIN_H + +// Project includes +#include "landscape_editor_constants.h" +#include "../../extension_system/iplugin.h" +#include "../core/icontext.h" + +// NeL includes +#include "nel/misc/app_context.h" + +// Qt includes +#include +#include + +namespace NLMISC +{ +class CLibraryContext; +} + +namespace ExtensionSystem +{ +class IPluginSpec; +} + +namespace LandscapeEditor +{ +class LandscapeEditorWindow; + +class LandscapeEditorPlugin : public QObject, public ExtensionSystem::IPlugin +{ + Q_OBJECT + Q_INTERFACES(ExtensionSystem::IPlugin) +public: + + virtual ~LandscapeEditorPlugin(); + + bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString); + void extensionsInitialized(); + void shutdown(); + + void setNelContext(NLMISC::INelContext *nelContext); + + QString name() const; + QString version() const; + QString vendor() const; + QString description() const; + QStringList dependencies() const; + + void addAutoReleasedObject(QObject *obj); + +protected: + NLMISC::CLibraryContext *m_libContext; + +private: + ExtensionSystem::IPluginManager *m_plugMan; + QList m_autoReleaseObjects; +}; + +class LandscapeEditorContext: public Core::IContext +{ + Q_OBJECT +public: + LandscapeEditorContext(QObject *parent = 0); + virtual ~LandscapeEditorContext() {} + + virtual QString id() const + { + return QLatin1String("LandscapeEditorContext"); + } + virtual QString trName() const + { + return tr("LandscapeEditor"); + } + virtual QIcon icon() const + { + return QIcon(); + } + virtual QWidget *widget(); + + LandscapeEditorWindow *m_landEditorWindow; +}; + +} // namespace LandscapeEditor + +#endif // LANDSCAPE_EDITOR_PLUGIN_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.cpp new file mode 100644 index 000000000..1588f6252 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.cpp @@ -0,0 +1,65 @@ +// Object Viewer Qt - MMORPG Framework +// Copyright (C) 2010 Winch Gate Property Limited +// Copyright (C) 2011 Dzmitry Kamiahin +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Project includes +#include "landscape_editor_window.h" +#include "landscape_editor_constants.h" + +#include "../core/icore.h" +#include "../core/imenu_manager.h" +#include "../core/core_constants.h" + +// Qt includes +#include + +namespace LandscapeEditor +{ + +LandscapeEditorWindow::LandscapeEditorWindow(QWidget *parent) + : QMainWindow(parent) +{ + m_ui.setupUi(this); + createMenus(); +// readSettings(); +} + +LandscapeEditorWindow::~LandscapeEditorWindow() +{ +// writeSettings(); +} + +void LandscapeEditorWindow::createMenus() +{ + Core::IMenuManager *menuManager = Core::ICore::instance()->menuManager(); +} + +void LandscapeEditorWindow::readSettings() +{ + QSettings *settings = Core::ICore::instance()->settings(); + settings->beginGroup(Constants::LANDSCAPE_EDITOR_SECTION); + settings->endGroup(); +} + +void LandscapeEditorWindow::writeSettings() +{ + QSettings *settings = Core::ICore::instance()->settings(); + settings->beginGroup(Constants::LANDSCAPE_EDITOR_SECTION); + settings->endGroup(); + settings->sync(); +} + +} /* namespace LandscapeEditor */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.h new file mode 100644 index 000000000..0af41961f --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.h @@ -0,0 +1,49 @@ +// Object Viewer Qt - MMORPG Framework +// Copyright (C) 2010 Winch Gate Property Limited +// Copyright (C) 2011 Dzmitry Kamiahin +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +#ifndef LANDSCAPE_EDITOR_WINDOW_H +#define LANDSCAPE_EDITOR_WINDOW_H + +#include "ui_landscape_editor_window.h" + +// Qt includes + +namespace LandscapeEditor +{ + +class LandscapeEditorWindow: public QMainWindow +{ + Q_OBJECT + +public: + LandscapeEditorWindow(QWidget *parent = 0); + ~LandscapeEditorWindow(); + +Q_SIGNALS: +public Q_SLOTS: +private Q_SLOTS: +private: + void createMenus(); + void readSettings(); + void writeSettings(); + + Ui::LandscapeEditorWindow m_ui; +}; /* class LandscapeEditorWindow */ + +} /* namespace LandscapeEditor */ + +#endif // LANDSCAPE_EDITOR_WINDOW_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.ui b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.ui new file mode 100644 index 000000000..5d9606ddf --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.ui @@ -0,0 +1,43 @@ + + + LandscapeEditorWindow + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + :/icons/ic_nel_landscape_item.png:/icons/ic_nel_landscape_item.png + + + + + + + + + + + toolBar + + + TopToolBarArea + + + false + + + + + + + + From 1f52dfb05aa783ac30f3798e35d8ce98c012d656 Mon Sep 17 00:00:00 2001 From: dnk-88 Date: Thu, 26 May 2011 15:35:04 +0300 Subject: [PATCH 02/16] Added: #1303 Added initial context manager. --- .../src/plugins/core/CMakeLists.txt | 7 +- .../src/plugins/core/context_manager.cpp | 101 ++++++++++++++++++ .../src/plugins/core/context_manager.h | 67 ++++++++++++ .../src/plugins/core/core.cpp | 6 ++ .../object_viewer_qt/src/plugins/core/core.h | 1 + .../src/plugins/core/icontext.h | 10 ++ .../object_viewer_qt/src/plugins/core/icore.h | 2 + .../src/plugins/core/main_window.cpp | 11 +- .../src/plugins/core/main_window.h | 3 + 9 files changed, 205 insertions(+), 3 deletions(-) create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.h diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/CMakeLists.txt b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/CMakeLists.txt index 06095790b..3140f02fb 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/CMakeLists.txt +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/CMakeLists.txt @@ -18,15 +18,18 @@ SET(OVQT_CORE_PLUGIN_HDR core.h main_window.h menu_manager.h + context_manager.h settings_dialog.h search_paths_settings_page.h general_settings_page.h - plugin_view_dialog.h) + plugin_view_dialog.h +) SET(OVQT_CORE_PLUGIN_UIS settings_dialog.ui plugin_view_dialog.ui general_settings_page.ui - search_paths_settings_page.ui) + search_paths_settings_page.ui +) SET(OVQT_CORE_PLUGIN_RCS core.qrc) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp new file mode 100644 index 000000000..5e3d2864c --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp @@ -0,0 +1,101 @@ +// Object Viewer Qt - MMORPG Framework +// Copyright (C) 2010 Winch Gate Property Limited +// Copyright (C) 2011 Dzmitry Kamiahin +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Project includes +#include "context_manager.h" +#include "icontext.h" + +// NeL includes +#include + +// Qt includes +#include + +namespace Core +{ + +struct ContextManagerPrivate +{ + explicit ContextManagerPrivate(QTabWidget *tabWidget); + QTabWidget *m_tabWidget; + QVector m_contexts; + int m_oldCurrent; +}; + +ContextManagerPrivate::ContextManagerPrivate(QTabWidget *tabWidget) + : m_tabWidget(tabWidget), + m_oldCurrent(-1) +{ +} + +ContextManager::ContextManager(QTabWidget *tabWidget) + : d(new ContextManagerPrivate(tabWidget)) +{ +} + +ContextManager::~ContextManager() +{ + delete d; +} + +Core::IContext* ContextManager::currentContext() const +{ + int currentIndex = d->m_tabWidget->currentIndex(); + if (currentIndex < 0) + return 0; + return d->m_contexts.at(currentIndex); +} + +Core::IContext* ContextManager::context(const QString &id) const +{ + const int index = indexOf(id); + if (index >= 0) + return d->m_contexts.at(index); + return 0; +} + +void ContextManager::activateContext(const QString &id) +{ + const int index = indexOf(id); + if (index >= 0) + d->m_tabWidget->setCurrentIndex(index); +} + +void ContextManager::addContextObject(IContext *context) +{ +} + +void ContextManager::removeContextObject(IContext *context) +{ +} + +void ContextManager::currentTabChanged(int index) +{ +} + +int ContextManager::indexOf(const QString &id) const +{ + for (int i = 0; i < d->m_contexts.count(); ++i) + { + if (d->m_contexts.at(i)->id() == id) + return i; + } + nlwarning(QString("Warning, no such context: %1").arg(id).toStdString().c_str()); + return -1; +} + +} /* namespace Core */ \ No newline at end of file diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.h new file mode 100644 index 000000000..c0d4a2209 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.h @@ -0,0 +1,67 @@ +// Object Viewer Qt - MMORPG Framework +// Copyright (C) 2010 Winch Gate Property Limited +// Copyright (C) 2011 Dzmitry Kamiahin +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +#ifndef CONTEXT_MANAGER_H +#define CONTEXT_MANAGER_H + +// Project includes +#include "core_global.h" + +// Qt includes +#include + +QT_BEGIN_NAMESPACE +class QTabWidget; +QT_END_NAMESPACE + +namespace Core +{ +class IContext; +struct ContextManagerPrivate; + +class CORE_EXPORT ContextManager : public QObject +{ + Q_OBJECT + +public: + explicit ContextManager(QTabWidget *tabWidget); + virtual ~ContextManager(); + + Core::IContext* currentContext() const; + Core::IContext* context(const QString &id) const; + +Q_SIGNALS: + // the default argument '=0' is important for connects without the oldContext argument. + void currentContextChanged(Core::IContext *context, Core::IContext *oldContext = 0); + +public Q_SLOTS: + void activateContext(const QString &id); + +private Q_SLOTS: + void addContextObject(IContext *context); + void removeContextObject(IContext *context); + void currentTabChanged(int index); + +private: + int indexOf(const QString &id) const; + + ContextManagerPrivate *d; +}; + +} // namespace Core + +#endif // CONTEXT_MANAGER_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core.cpp index 6c681f15a..fa61b5700 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core.cpp @@ -18,6 +18,7 @@ #include "core.h" #include "imenu_manager.h" +#include "context_manager.h" #include "main_window.h" #include "../../extension_system/iplugin_manager.h" @@ -54,6 +55,11 @@ IMenuManager *CoreImpl::menuManager() const return m_mainWindow->menuManager(); } +ContextManager *CoreImpl::contextManager() const +{ + return m_mainWindow->contextManager(); +} + QSettings *CoreImpl::settings() const { return m_mainWindow->settings(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core.h index d3b25b918..2613a06a5 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core.h @@ -38,6 +38,7 @@ public: QWidget *parent = 0); virtual IMenuManager *menuManager() const; + virtual ContextManager *contextManager() const; virtual QSettings *settings() const; virtual QMainWindow *mainWindow() const; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icontext.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icontext.h index 776246d8d..c012b5a0c 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icontext.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icontext.h @@ -56,6 +56,16 @@ public: /// The widget will be destroyed by the widget hierarchy when the main window closes virtual QWidget *widget() = 0; + + virtual bool open() + { + return false; + } + + virtual bool help() + { + return false; + } }; } // namespace Core diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icore.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icore.h index 71f075973..13b22bfa5 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icore.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icore.h @@ -36,6 +36,7 @@ class IPluginManager; namespace Core { class IMenuManager; +class ContextManager; class CORE_EXPORT ICore : public QObject { @@ -52,6 +53,7 @@ public: QWidget *parent = 0) = 0; virtual IMenuManager *menuManager() const = 0; + virtual ContextManager *contextManager() const = 0; virtual QSettings *settings() const = 0; virtual QMainWindow *mainWindow() const = 0; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp index e048aa80b..4d7ffc35e 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp @@ -20,6 +20,7 @@ #include "icontext.h" #include "icore_listener.h" #include "menu_manager.h" +#include "context_manager.h" #include "core.h" #include "core_constants.h" #include "settings_dialog.h" @@ -38,6 +39,7 @@ MainWindow::MainWindow(ExtensionSystem::IPluginManager *pluginManager, QWidget * : QMainWindow(parent), m_pluginManager(0), m_menuManager(0), + m_contextManager(0), m_coreImpl(0), m_lastDir("."), m_settings(0) @@ -59,10 +61,12 @@ MainWindow::MainWindow(ExtensionSystem::IPluginManager *pluginManager, QWidget * m_tabWidget = new QTabWidget(this); m_tabWidget->setTabPosition(QTabWidget::South); - m_tabWidget->setMovable(true); + m_tabWidget->setMovable(false); m_tabWidget->setDocumentMode(true); setCentralWidget(m_tabWidget); + m_contextManager = new ContextManager(m_tabWidget); + setDockNestingEnabled(true); m_originalPalette = QApplication::palette(); @@ -109,6 +113,11 @@ IMenuManager *MainWindow::menuManager() const return m_menuManager; } +ContextManager *MainWindow::contextManager() const +{ + return m_contextManager; +} + QSettings *MainWindow::settings() const { return m_settings; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h index 4cc24e5eb..61ebddf30 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h @@ -35,6 +35,7 @@ class CorePlugin; class IContext; class IMenuManager; class MenuManager; +class ContextManager; class CoreImpl; class MainWindow : public QMainWindow @@ -49,6 +50,7 @@ public: void extensionsInitialized(); IMenuManager *menuManager() const; + ContextManager *contextManager() const; QSettings *settings() const; ExtensionSystem::IPluginManager *pluginManager() const; @@ -80,6 +82,7 @@ private: ExtensionSystem::IPluginManager *m_pluginManager; ExtensionSystem::CPluginView *m_pluginView; MenuManager *m_menuManager; + ContextManager *m_contextManager; CoreImpl *m_coreImpl; QPalette m_originalPalette; From 03475c59b202029492a266dc7f84d5d9892fe7f5 Mon Sep 17 00:00:00 2001 From: dnk-88 Date: Thu, 26 May 2011 17:03:49 +0300 Subject: [PATCH 03/16] Changed: #1303 Completed work on the context manager. --- .../src/plugins/core/context_manager.cpp | 55 +++++++++++++++++-- .../src/plugins/core/context_manager.h | 6 +- .../src/plugins/core/main_window.cpp | 27 +-------- .../src/plugins/core/main_window.h | 3 - .../landscape_editor_plugin.h | 2 +- .../landscape_editor_window.cpp | 7 ++- 6 files changed, 62 insertions(+), 38 deletions(-) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp index 5e3d2864c..b0a13aee6 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp @@ -24,27 +24,36 @@ // Qt includes #include +#include namespace Core { struct ContextManagerPrivate { - explicit ContextManagerPrivate(QTabWidget *tabWidget); + explicit ContextManagerPrivate(ExtensionSystem::IPluginManager *pluginManager, QTabWidget *tabWidget); + ExtensionSystem::IPluginManager *m_pluginManager; QTabWidget *m_tabWidget; QVector m_contexts; int m_oldCurrent; }; -ContextManagerPrivate::ContextManagerPrivate(QTabWidget *tabWidget) - : m_tabWidget(tabWidget), +ContextManagerPrivate::ContextManagerPrivate(ExtensionSystem::IPluginManager *pluginManager, QTabWidget *tabWidget) + : m_pluginManager(pluginManager), + m_tabWidget(tabWidget), m_oldCurrent(-1) { } -ContextManager::ContextManager(QTabWidget *tabWidget) - : d(new ContextManagerPrivate(tabWidget)) +ContextManager::ContextManager(ExtensionSystem::IPluginManager *pluginManager, QTabWidget *tabWidget) + : d(new ContextManagerPrivate(pluginManager, tabWidget)) { + QObject::connect(d->m_pluginManager, SIGNAL(objectAdded(QObject *)), + this, SLOT(objectAdded(QObject *))); + QObject::connect(d->m_pluginManager, SIGNAL(aboutToRemoveObject(QObject *)), + this, SLOT(aboutToRemoveObject(QObject *))); + + QObject::connect(d->m_tabWidget, SIGNAL(currentChanged(int)), this, SLOT(currentTabChanged(int))); } ContextManager::~ContextManager() @@ -75,16 +84,52 @@ void ContextManager::activateContext(const QString &id) d->m_tabWidget->setCurrentIndex(index); } +void ContextManager::objectAdded(QObject *obj) +{ + IContext *context = qobject_cast(obj); + if (context) + addContextObject(context); +} + +void ContextManager::aboutToRemoveObject(QObject *obj) +{ + IContext *context = qobject_cast(obj); + if (context) + removeContextObject(context); +} + void ContextManager::addContextObject(IContext *context) { + d->m_contexts.push_back(context); + + QWidget *tabWidget = new QWidget(d->m_tabWidget); + d->m_tabWidget->addTab(tabWidget, context->icon(), context->trName()); + QGridLayout *gridLayout = new QGridLayout(tabWidget); + gridLayout->setObjectName(QString::fromUtf8("gridLayout_") + context->id()); + gridLayout->setContentsMargins(0, 0, 0, 0); + gridLayout->addWidget(context->widget(), 0, 0, 1, 1); } void ContextManager::removeContextObject(IContext *context) { + const int index = indexOf(context->id()); + QWidget *widget = d->m_tabWidget->widget(index); + d->m_tabWidget->removeTab(index); + d->m_contexts.remove(index); + delete widget; } void ContextManager::currentTabChanged(int index) { + if (index >= 0) + { + IContext *context = d->m_contexts.at(index); + IContext *oldContext = 0; + if (d->m_oldCurrent >= 0) + oldContext = d->m_contexts.at(d->m_oldCurrent); + d->m_oldCurrent = index; + Q_EMIT currentContextChanged(context, oldContext); + } } int ContextManager::indexOf(const QString &id) const diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.h index c0d4a2209..5264617a3 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.h @@ -21,6 +21,8 @@ // Project includes #include "core_global.h" +#include "../../extension_system/iplugin_manager.h" + // Qt includes #include @@ -38,7 +40,7 @@ class CORE_EXPORT ContextManager : public QObject Q_OBJECT public: - explicit ContextManager(QTabWidget *tabWidget); + explicit ContextManager(ExtensionSystem::IPluginManager *pluginManager, QTabWidget *tabWidget); virtual ~ContextManager(); Core::IContext* currentContext() const; @@ -52,6 +54,8 @@ public Q_SLOTS: void activateContext(const QString &id); private Q_SLOTS: + void objectAdded(QObject *obj); + void aboutToRemoveObject(QObject *obj); void addContextObject(IContext *context); void removeContextObject(IContext *context); void currentTabChanged(int index); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp index 4d7ffc35e..a4bc542b2 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp @@ -65,7 +65,7 @@ MainWindow::MainWindow(ExtensionSystem::IPluginManager *pluginManager, QWidget * m_tabWidget->setDocumentMode(true); setCentralWidget(m_tabWidget); - m_contextManager = new ContextManager(m_tabWidget); + m_contextManager = new ContextManager(m_pluginManager, m_tabWidget); setDockNestingEnabled(true); m_originalPalette = QApplication::palette(); @@ -96,14 +96,6 @@ bool MainWindow::initialize(QString *errorString) void MainWindow::extensionsInitialized() { - QList listContexts = m_pluginManager->getObjects(); - - Q_FOREACH(IContext *context, listContexts) - { - addContextObject(context); - } - - connect(m_pluginManager, SIGNAL(objectAdded(QObject *)), this, SLOT(checkObject(QObject *))); readSettings(); show(); } @@ -132,13 +124,6 @@ void MainWindow::open() { } -void MainWindow::checkObject(QObject *obj) -{ - IContext *context = qobject_cast(obj); - if (context) - addContextObject(context); -} - bool MainWindow::showOptionsDialog(const QString &group, const QString &page, QWidget *parent) @@ -177,16 +162,6 @@ void MainWindow::closeEvent(QCloseEvent *event) event->accept(); } -void MainWindow::addContextObject(IContext *context) -{ - QWidget *tabWidget = new QWidget(m_tabWidget); - m_tabWidget->addTab(tabWidget, context->icon(), context->trName()); - QGridLayout *gridLayout = new QGridLayout(tabWidget); - gridLayout->setObjectName(QString::fromUtf8("gridLayout_") + context->id()); - gridLayout->setContentsMargins(0, 0, 0, 0); - gridLayout->addWidget(context->widget(), 0, 0, 1, 1); -} - void MainWindow::createActions() { m_openAction = new QAction(tr("&Open..."), this); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h index 61ebddf30..8c4a4aafe 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h @@ -62,15 +62,12 @@ public Q_SLOTS: private Q_SLOTS: void open(); - void checkObject(QObject *obj); void about(); protected: virtual void closeEvent(QCloseEvent *event); private: - void addContextObject(IContext *appPage); - void createActions(); void createMenus(); void createStatusBar(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.h index 3b7df3777..bd5040843 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.h @@ -87,7 +87,7 @@ public: } virtual QString trName() const { - return tr("LandscapeEditor"); + return tr("Landscape Editor"); } virtual QIcon icon() const { diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.cpp index 1588f6252..ef4f81a1c 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.cpp @@ -23,6 +23,9 @@ #include "../core/imenu_manager.h" #include "../core/core_constants.h" +// NeL includes +#include + // Qt includes #include @@ -34,12 +37,12 @@ LandscapeEditorWindow::LandscapeEditorWindow(QWidget *parent) { m_ui.setupUi(this); createMenus(); -// readSettings(); + readSettings(); } LandscapeEditorWindow::~LandscapeEditorWindow() { -// writeSettings(); + writeSettings(); } void LandscapeEditorWindow::createMenus() From 9f204828e767c275ce5b9a654a63c4b50c7b4b90 Mon Sep 17 00:00:00 2001 From: dnk-88 Date: Thu, 26 May 2011 17:28:10 +0300 Subject: [PATCH 04/16] Changed: #1303 Fix typos in comments/code --- .../src/plugins/core/context_manager.cpp | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp index b0a13aee6..23d544593 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp @@ -49,9 +49,9 @@ ContextManager::ContextManager(ExtensionSystem::IPluginManager *pluginManager, Q : d(new ContextManagerPrivate(pluginManager, tabWidget)) { QObject::connect(d->m_pluginManager, SIGNAL(objectAdded(QObject *)), - this, SLOT(objectAdded(QObject *))); + this, SLOT(objectAdded(QObject *))); QObject::connect(d->m_pluginManager, SIGNAL(aboutToRemoveObject(QObject *)), - this, SLOT(aboutToRemoveObject(QObject *))); + this, SLOT(aboutToRemoveObject(QObject *))); QObject::connect(d->m_tabWidget, SIGNAL(currentChanged(int)), this, SLOT(currentTabChanged(int))); } @@ -86,15 +86,15 @@ void ContextManager::activateContext(const QString &id) void ContextManager::objectAdded(QObject *obj) { - IContext *context = qobject_cast(obj); - if (context) + IContext *context = qobject_cast(obj); + if (context) addContextObject(context); } void ContextManager::aboutToRemoveObject(QObject *obj) { - IContext *context = qobject_cast(obj); - if (context) + IContext *context = qobject_cast(obj); + if (context) removeContextObject(context); } @@ -102,11 +102,11 @@ void ContextManager::addContextObject(IContext *context) { d->m_contexts.push_back(context); - QWidget *tabWidget = new QWidget(d->m_tabWidget); - d->m_tabWidget->addTab(tabWidget, context->icon(), context->trName()); - QGridLayout *gridLayout = new QGridLayout(tabWidget); - gridLayout->setObjectName(QString::fromUtf8("gridLayout_") + context->id()); - gridLayout->setContentsMargins(0, 0, 0, 0); + QWidget *tabWidget = new QWidget(d->m_tabWidget); + d->m_tabWidget->addTab(tabWidget, context->icon(), context->trName()); + QGridLayout *gridLayout = new QGridLayout(tabWidget); + gridLayout->setObjectName(QString::fromUtf8("gridLayout_") + context->id()); + gridLayout->setContentsMargins(0, 0, 0, 0); gridLayout->addWidget(context->widget(), 0, 0, 1, 1); } @@ -121,15 +121,15 @@ void ContextManager::removeContextObject(IContext *context) void ContextManager::currentTabChanged(int index) { - if (index >= 0) + if (index >= 0) { IContext *context = d->m_contexts.at(index); - IContext *oldContext = 0; - if (d->m_oldCurrent >= 0) - oldContext = d->m_contexts.at(d->m_oldCurrent); - d->m_oldCurrent = index; - Q_EMIT currentContextChanged(context, oldContext); - } + IContext *oldContext = 0; + if (d->m_oldCurrent >= 0) + oldContext = d->m_contexts.at(d->m_oldCurrent); + d->m_oldCurrent = index; + Q_EMIT currentContextChanged(context, oldContext); + } } int ContextManager::indexOf(const QString &id) const From fbbdb15ad2a10b2cf2d027efa7d3ebc416033c3b Mon Sep 17 00:00:00 2001 From: dnk-88 Date: Fri, 27 May 2011 17:06:30 +0300 Subject: [PATCH 05/16] Changed: #1303 Each context must have its own file open dialog, which will be called when the context is active. The beginning of work on adding undo/redo. --- .../src/plugins/core/context_manager.cpp | 21 ++++++++++--------- .../src/plugins/core/context_manager.h | 9 ++++---- .../plugins/core/general_settings_page.cpp | 5 +++++ .../src/plugins/core/general_settings_page.h | 1 + .../src/plugins/core/icontext.h | 10 +-------- .../src/plugins/core/ioptions_page.h | 3 +++ .../src/plugins/core/main_window.cpp | 10 +++++++-- .../src/plugins/core/main_window.h | 2 ++ .../core/search_paths_settings_page.cpp | 5 +++++ .../plugins/core/search_paths_settings_page.h | 1 + .../plugins/example/example_settings_page.cpp | 5 +++++ .../plugins/example/example_settings_page.h | 1 + .../src/plugins/example/plugin1.h | 4 ++++ .../landscape_editor_plugin.h | 5 +++++ .../object_viewer/graphics_settings_page.cpp | 5 +++++ .../object_viewer/graphics_settings_page.h | 1 + .../src/plugins/object_viewer/main_window.cpp | 4 ++-- .../src/plugins/object_viewer/main_window.h | 4 +++- .../object_viewer/object_viewer_plugin.cpp | 5 +++++ .../object_viewer/object_viewer_plugin.h | 5 +++++ .../object_viewer/sound_settings_page.cpp | 5 +++++ .../object_viewer/sound_settings_page.h | 1 + .../object_viewer/vegetable_settings_page.cpp | 5 +++++ .../object_viewer/vegetable_settings_page.h | 1 + 24 files changed, 89 insertions(+), 29 deletions(-) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp index 23d544593..23dbe02f4 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp @@ -18,6 +18,7 @@ // Project includes #include "context_manager.h" #include "icontext.h" +#include "main_window.h" // NeL includes #include @@ -31,26 +32,26 @@ namespace Core struct ContextManagerPrivate { - explicit ContextManagerPrivate(ExtensionSystem::IPluginManager *pluginManager, QTabWidget *tabWidget); - ExtensionSystem::IPluginManager *m_pluginManager; + explicit ContextManagerPrivate(Core::MainWindow *mainWindow, QTabWidget *tabWidget); + Core::MainWindow *m_mainWindow; QTabWidget *m_tabWidget; QVector m_contexts; int m_oldCurrent; }; -ContextManagerPrivate::ContextManagerPrivate(ExtensionSystem::IPluginManager *pluginManager, QTabWidget *tabWidget) - : m_pluginManager(pluginManager), +ContextManagerPrivate::ContextManagerPrivate(Core::MainWindow *mainWindow, QTabWidget *tabWidget) + : m_mainWindow(mainWindow), m_tabWidget(tabWidget), m_oldCurrent(-1) { } -ContextManager::ContextManager(ExtensionSystem::IPluginManager *pluginManager, QTabWidget *tabWidget) - : d(new ContextManagerPrivate(pluginManager, tabWidget)) +ContextManager::ContextManager(Core::MainWindow *mainWindow, QTabWidget *tabWidget) + : d(new ContextManagerPrivate(mainWindow, tabWidget)) { - QObject::connect(d->m_pluginManager, SIGNAL(objectAdded(QObject *)), + QObject::connect(d->m_mainWindow->pluginManager(), SIGNAL(objectAdded(QObject *)), this, SLOT(objectAdded(QObject *))); - QObject::connect(d->m_pluginManager, SIGNAL(aboutToRemoveObject(QObject *)), + QObject::connect(d->m_mainWindow->pluginManager(), SIGNAL(aboutToRemoveObject(QObject *)), this, SLOT(aboutToRemoveObject(QObject *))); QObject::connect(d->m_tabWidget, SIGNAL(currentChanged(int)), this, SLOT(currentTabChanged(int))); @@ -61,7 +62,7 @@ ContextManager::~ContextManager() delete d; } -Core::IContext* ContextManager::currentContext() const +Core::IContext *ContextManager::currentContext() const { int currentIndex = d->m_tabWidget->currentIndex(); if (currentIndex < 0) @@ -69,7 +70,7 @@ Core::IContext* ContextManager::currentContext() const return d->m_contexts.at(currentIndex); } -Core::IContext* ContextManager::context(const QString &id) const +Core::IContext *ContextManager::context(const QString &id) const { const int index = indexOf(id); if (index >= 0) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.h index 5264617a3..7a3658fff 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.h @@ -21,8 +21,6 @@ // Project includes #include "core_global.h" -#include "../../extension_system/iplugin_manager.h" - // Qt includes #include @@ -33,6 +31,7 @@ QT_END_NAMESPACE namespace Core { class IContext; +class MainWindow; struct ContextManagerPrivate; class CORE_EXPORT ContextManager : public QObject @@ -40,11 +39,11 @@ class CORE_EXPORT ContextManager : public QObject Q_OBJECT public: - explicit ContextManager(ExtensionSystem::IPluginManager *pluginManager, QTabWidget *tabWidget); + explicit ContextManager(Core::MainWindow *mainWindow, QTabWidget *tabWidget); virtual ~ContextManager(); - Core::IContext* currentContext() const; - Core::IContext* context(const QString &id) const; + Core::IContext *currentContext() const; + Core::IContext *context(const QString &id) const; Q_SIGNALS: // the default argument '=0' is important for connects without the oldContext argument. diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/general_settings_page.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/general_settings_page.cpp index 47bf4026a..51da80f67 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/general_settings_page.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/general_settings_page.cpp @@ -65,6 +65,11 @@ QString GeneralSettingsPage::trCategory() const return tr(Constants::SETTINGS_TR_CATEGORY_GENERAL); } +QIcon GeneralSettingsPage::categoryIcon() const +{ + return QIcon(); +} + void GeneralSettingsPage::applyGeneralSettings() { QSettings *settings = Core::ICore::instance()->settings(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/general_settings_page.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/general_settings_page.h index 2f73f8715..2fbcb842a 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/general_settings_page.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/general_settings_page.h @@ -44,6 +44,7 @@ public: QString trName() const; QString category() const; QString trCategory() const; + QIcon categoryIcon() const; QWidget *createPage(QWidget *parent); void apply(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icontext.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icontext.h index c012b5a0c..c6784dafe 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icontext.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icontext.h @@ -57,15 +57,7 @@ public: /// The widget will be destroyed by the widget hierarchy when the main window closes virtual QWidget *widget() = 0; - virtual bool open() - { - return false; - } - - virtual bool help() - { - return false; - } + virtual void open() = 0; }; } // namespace Core diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/ioptions_page.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/ioptions_page.h index 74692833a..4d9ed6fda 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/ioptions_page.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/ioptions_page.h @@ -27,6 +27,7 @@ QT_BEGIN_NAMESPACE class QWidget; +class QIcon; QT_END_NAMESPACE namespace Core @@ -56,6 +57,8 @@ public: /// trCategory() is the translated category virtual QString trCategory() const = 0; + virtual QIcon categoryIcon() const = 0; + /// createPage() is called to retrieve the widget to show in the preferences dialog /// The widget will be destroyed by the widget hierarchy when the dialog closes virtual QWidget *createPage(QWidget *parent) = 0; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp index a4bc542b2..1c8850508 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp @@ -42,6 +42,7 @@ MainWindow::MainWindow(ExtensionSystem::IPluginManager *pluginManager, QWidget * m_contextManager(0), m_coreImpl(0), m_lastDir("."), + m_undoGroup(0), m_settings(0) { QCoreApplication::setApplicationName(QLatin1String("ObjectViewerQt")); @@ -65,10 +66,11 @@ MainWindow::MainWindow(ExtensionSystem::IPluginManager *pluginManager, QWidget * m_tabWidget->setDocumentMode(true); setCentralWidget(m_tabWidget); - m_contextManager = new ContextManager(m_pluginManager, m_tabWidget); + m_contextManager = new ContextManager(this, m_tabWidget); setDockNestingEnabled(true); m_originalPalette = QApplication::palette(); + m_undoGroup = new QUndoGroup(this); createDialogs(); createActions(); @@ -122,6 +124,7 @@ ExtensionSystem::IPluginManager *MainWindow::pluginManager() const void MainWindow::open() { + m_contextManager->currentContext()->open(); } bool MainWindow::showOptionsDialog(const QString &group, @@ -212,11 +215,14 @@ void MainWindow::createMenus() { m_fileMenu = menuBar()->addMenu(tr("&File")); menuManager()->registerMenu(m_fileMenu, Constants::M_FILE); -// m_fileMenu->addAction(m_openAction); + m_fileMenu->addAction(m_openAction); m_fileMenu->addSeparator(); m_fileMenu->addAction(m_exitAction); m_editMenu = menuBar()->addMenu(tr("&Edit")); + m_editMenu->addAction(m_undoGroup->createUndoAction(this)); + m_editMenu->addAction(m_undoGroup->createRedoAction(this)); + m_editMenu->addSeparator(); menuManager()->registerMenu(m_editMenu, Constants::M_EDIT); m_viewMenu = menuBar()->addMenu(tr("&View")); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h index 8c4a4aafe..cd34098a7 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h @@ -26,6 +26,7 @@ // Qt includes #include +#include #include namespace Core @@ -85,6 +86,7 @@ private: QPalette m_originalPalette; QString m_lastDir; + QUndoGroup *m_undoGroup; QSettings *m_settings; QTimer *m_mainTimer; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/search_paths_settings_page.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/search_paths_settings_page.cpp index 94ebec8d1..336f5ad48 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/search_paths_settings_page.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/search_paths_settings_page.cpp @@ -63,6 +63,11 @@ QString CSearchPathsSettingsPage::trCategory() const return tr(Constants::SETTINGS_TR_CATEGORY_GENERAL); } +QIcon CSearchPathsSettingsPage::categoryIcon() const +{ + return QIcon(); +} + QWidget *CSearchPathsSettingsPage::createPage(QWidget *parent) { m_page = new QWidget(parent); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/search_paths_settings_page.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/search_paths_settings_page.h index 90eab513a..6ceaf88bf 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/search_paths_settings_page.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/search_paths_settings_page.h @@ -44,6 +44,7 @@ public: QString trName() const; QString category() const; QString trCategory() const; + QIcon categoryIcon() const; QWidget *createPage(QWidget *parent); void apply(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/example/example_settings_page.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/example/example_settings_page.cpp index 0cb885163..50e7c9db5 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/example/example_settings_page.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/example/example_settings_page.cpp @@ -53,6 +53,11 @@ QString CExampleSettingsPage::trCategory() const return tr("General"); } +QIcon CExampleSettingsPage::categoryIcon() const +{ + return QIcon(); +} + QWidget *CExampleSettingsPage::createPage(QWidget *parent) { _currentPage = new QWidget(parent); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/example/example_settings_page.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/example/example_settings_page.h index 64dd940f8..3475f843f 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/example/example_settings_page.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/example/example_settings_page.h @@ -43,6 +43,7 @@ public: virtual QString trName() const; virtual QString category() const; virtual QString trCategory() const; + QIcon categoryIcon() const; virtual QWidget *createPage(QWidget *parent); virtual void apply(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/example/plugin1.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/example/plugin1.h index d3be3bc38..f9d5c2d9d 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/example/plugin1.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/example/plugin1.h @@ -86,6 +86,10 @@ public: return m_simpleViewer; } + virtual void open() + { + } + CSimpleViewer *m_simpleViewer; }; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.h index bd5040843..20db2eb15 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.h @@ -93,6 +93,11 @@ public: { return QIcon(); } + + virtual void open() + { + } + virtual QWidget *widget(); LandscapeEditorWindow *m_landEditorWindow; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/graphics_settings_page.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/graphics_settings_page.cpp index eabb67f3d..6c2736895 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/graphics_settings_page.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/graphics_settings_page.cpp @@ -58,6 +58,11 @@ QString GraphicsSettingsPage::trCategory() const return tr("Object Viewer"); } +QIcon GraphicsSettingsPage::categoryIcon() const +{ + return QIcon(); +} + QWidget *GraphicsSettingsPage::createPage(QWidget *parent) { m_page = new QWidget(parent); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/graphics_settings_page.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/graphics_settings_page.h index e1402939f..74df1b140 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/graphics_settings_page.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/graphics_settings_page.h @@ -42,6 +42,7 @@ public: virtual QString trName() const; virtual QString category() const; virtual QString trCategory() const; + QIcon categoryIcon() const; virtual QWidget *createPage(QWidget *parent); virtual void apply(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/main_window.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/main_window.cpp index 6e183d913..d9b732521 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/main_window.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/main_window.cpp @@ -272,8 +272,8 @@ void CMainWindow::createMenus() // add actions in file menu QMenu *fileMenu = menuManager->menu(Core::Constants::M_FILE); QAction *exitAction = menuManager->action(Core::Constants::EXIT); - fileMenu->insertAction(exitAction, _openAction); - fileMenu->insertSeparator(exitAction); + //fileMenu->insertAction(exitAction, _openAction); + //fileMenu->insertSeparator(exitAction); // register actions for view menu menuManager->registerAction(_setBackColorAction, "ObjectViewer.View.SetBackgroundColor"); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/main_window.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/main_window.h index 52b3dc8d5..6da360901 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/main_window.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/main_window.h @@ -72,10 +72,12 @@ public: return _SkeletonTreeModel; } -private Q_SLOTS: +public Q_SLOTS: void open(); void resetScene(); void reloadTextures(); + +private Q_SLOTS: void updateStatusBar(); void updateRender(); void setInterval(int value); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.cpp index b48eb82cc..193ad8fac 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.cpp @@ -89,6 +89,11 @@ void ObjectViewerPlugin::addAutoReleasedObject(QObject *obj) _autoReleaseObjects.prepend(obj); } +void CObjectViewerContext::open() +{ + Modules::mainWin().open(); +} + QWidget *CObjectViewerContext::widget() { return &Modules::mainWin(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.h index dae298fce..e7f9b8197 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.h @@ -66,14 +66,19 @@ public: { return QLatin1String("ObjectViewer"); } + virtual QString trName() const { return tr("Object Viewer"); } + virtual QIcon icon() const { return QIcon(); } + + virtual void open(); + virtual QWidget *widget(); }; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/sound_settings_page.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/sound_settings_page.cpp index 4c677f4bf..1bceeb80b 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/sound_settings_page.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/sound_settings_page.cpp @@ -56,6 +56,11 @@ QString SoundSettingsPage::trCategory() const return tr("Object Viewer"); } +QIcon SoundSettingsPage::categoryIcon() const +{ + return QIcon(); +} + QWidget *SoundSettingsPage::createPage(QWidget *parent) { m_page = new QWidget(parent); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/sound_settings_page.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/sound_settings_page.h index c27a82e1f..0e5361f54 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/sound_settings_page.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/sound_settings_page.h @@ -44,6 +44,7 @@ public: virtual QString trName() const; virtual QString category() const; virtual QString trCategory() const; + QIcon categoryIcon() const; virtual QWidget *createPage(QWidget *parent); virtual void apply(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/vegetable_settings_page.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/vegetable_settings_page.cpp index f794e0b73..aa15b312f 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/vegetable_settings_page.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/vegetable_settings_page.cpp @@ -59,6 +59,11 @@ QString VegetableSettingsPage::trCategory() const return tr("Object Viewer"); } +QIcon VegetableSettingsPage::categoryIcon() const +{ + return QIcon(); +} + QWidget *VegetableSettingsPage::createPage(QWidget *parent) { m_page = new QWidget(parent); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/vegetable_settings_page.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/vegetable_settings_page.h index bf49e2d2c..b66d070ba 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/vegetable_settings_page.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/vegetable_settings_page.h @@ -43,6 +43,7 @@ public: virtual QString trName() const; virtual QString category() const; virtual QString trCategory() const; + QIcon categoryIcon() const; virtual QWidget *createPage(QWidget *parent); virtual void apply(); From d7ce82b4bf4ecfb60b42289c4f8a3040cdde8431 Mon Sep 17 00:00:00 2001 From: dnk-88 Date: Fri, 27 May 2011 19:21:16 +0300 Subject: [PATCH 06/16] Changed: #1303 Added undo/redo framework in core plugin. --- .../src/plugins/core/context_manager.cpp | 3 +++ .../src/plugins/core/icontext.h | 3 +++ .../src/plugins/core/main_window.cpp | 18 +++++++++++++ .../src/plugins/core/main_window.h | 4 +++ .../src/plugins/example/plugin1.h | 5 ++++ .../src/plugins/example/simple_viewer.cpp | 2 ++ .../src/plugins/example/simple_viewer.h | 4 ++- .../landscape_editor_plugin.cpp | 10 ++++++++ .../landscape_editor_plugin.h | 6 ++--- .../landscape_editor_window.cpp | 25 +++++++++++++++++++ .../landscape_editor_window.h | 7 ++++++ .../src/plugins/object_viewer/main_window.cpp | 1 + .../src/plugins/object_viewer/main_window.h | 7 ++++++ .../src/plugins/object_viewer/modules.cpp | 2 +- .../object_viewer/object_viewer_plugin.cpp | 9 +++++-- .../object_viewer/object_viewer_plugin.h | 2 ++ 16 files changed, 101 insertions(+), 7 deletions(-) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp index 23dbe02f4..68e28429d 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/context_manager.cpp @@ -102,6 +102,7 @@ void ContextManager::aboutToRemoveObject(QObject *obj) void ContextManager::addContextObject(IContext *context) { d->m_contexts.push_back(context); + d->m_mainWindow->addContextObject(context); QWidget *tabWidget = new QWidget(d->m_tabWidget); d->m_tabWidget->addTab(tabWidget, context->icon(), context->trName()); @@ -113,6 +114,8 @@ void ContextManager::addContextObject(IContext *context) void ContextManager::removeContextObject(IContext *context) { + d->m_mainWindow->removeContextObject(context); + const int index = indexOf(context->id()); QWidget *widget = d->m_tabWidget->widget(index); d->m_tabWidget->removeTab(index); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icontext.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icontext.h index c6784dafe..8af601418 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icontext.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icontext.h @@ -28,6 +28,7 @@ QT_BEGIN_NAMESPACE class QWidget; +class QUndoStack; QT_END_NAMESPACE namespace Core @@ -57,6 +58,8 @@ public: /// The widget will be destroyed by the widget hierarchy when the main window closes virtual QWidget *widget() = 0; + virtual QUndoStack *undoStack() = 0; + virtual void open() = 0; }; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp index 1c8850508..55d6d4579 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp @@ -99,6 +99,9 @@ bool MainWindow::initialize(QString *errorString) void MainWindow::extensionsInitialized() { readSettings(); + connect(m_contextManager, SIGNAL(currentContextChanged(Core::IContext*)), + this, SLOT(updateContext(Core::IContext*))); + updateContext(m_contextManager->currentContext()); show(); } @@ -122,6 +125,16 @@ ExtensionSystem::IPluginManager *MainWindow::pluginManager() const return m_pluginManager; } +void MainWindow::addContextObject(IContext *context) +{ + m_undoGroup->addStack(context->undoStack()); +} + +void MainWindow::removeContextObject(IContext *context) +{ + m_undoGroup->removeStack(context->undoStack()); +} + void MainWindow::open() { m_contextManager->currentContext()->open(); @@ -148,6 +161,11 @@ void MainWindow::about() "

Ryzom Core team

Compiled on %1 %2").arg(__DATE__).arg(__TIME__)); } +void MainWindow::updateContext(Core::IContext *context) +{ + m_undoGroup->setActiveStack(context->undoStack()); +} + void MainWindow::closeEvent(QCloseEvent *event) { QList listeners = m_pluginManager->getObjects(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h index cd34098a7..74ec08957 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.h @@ -56,6 +56,9 @@ public: ExtensionSystem::IPluginManager *pluginManager() const; + void addContextObject(IContext *context); + void removeContextObject(IContext *context); + public Q_SLOTS: bool showOptionsDialog(const QString &group = QString(), const QString &page = QString(), @@ -64,6 +67,7 @@ public Q_SLOTS: private Q_SLOTS: void open(); void about(); + void updateContext(Core::IContext *context); protected: virtual void closeEvent(QCloseEvent *event); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/example/plugin1.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/example/plugin1.h index f9d5c2d9d..5077ff59e 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/example/plugin1.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/example/plugin1.h @@ -86,6 +86,11 @@ public: return m_simpleViewer; } + virtual QUndoStack *undoStack() + { + return m_simpleViewer->m_undoStack; + } + virtual void open() { } diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/example/simple_viewer.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/example/simple_viewer.cpp index e128710c4..1f6df9117 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/example/simple_viewer.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/example/simple_viewer.cpp @@ -37,6 +37,8 @@ CSimpleViewer::CSimpleViewer(QWidget *parent) gridLayout->setContentsMargins(0, 0, 0, 0); NLQT::QNLWidget *_nelWidget = new NLQT::QNLWidget(this); gridLayout->addWidget(_nelWidget, 0, 0, 1, 1); + + m_undoStack = new QUndoStack(this); } bool CCoreListener::closeMainWindow() const diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/example/simple_viewer.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/example/simple_viewer.h index bbff7e9e0..14b782c22 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/example/simple_viewer.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/example/simple_viewer.h @@ -25,7 +25,7 @@ // Qt includes #include - +#include class QWidget; namespace Plugin @@ -37,6 +37,8 @@ class CSimpleViewer : public QWidget public: CSimpleViewer(QWidget *parent = 0); virtual ~CSimpleViewer() {} + + QUndoStack *m_undoStack; }; class CCoreListener : public Core::ICoreListener diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.cpp index 2c51a5d68..ac7782343 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.cpp @@ -108,6 +108,16 @@ LandscapeEditorContext::LandscapeEditorContext(QObject *parent) m_landEditorWindow = new LandscapeEditorWindow(); } +QUndoStack *LandscapeEditorContext::undoStack() +{ + return m_landEditorWindow->undoStack(); +} + +void LandscapeEditorContext::open() +{ + m_landEditorWindow->open(); +} + QWidget *LandscapeEditorContext::widget() { return m_landEditorWindow; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.h index 20db2eb15..67a3172ee 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_plugin.h @@ -94,9 +94,9 @@ public: return QIcon(); } - virtual void open() - { - } + virtual void open(); + + virtual QUndoStack *undoStack(); virtual QWidget *widget(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.cpp index ef4f81a1c..4b075adfc 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.cpp @@ -28,14 +28,19 @@ // Qt includes #include +#include namespace LandscapeEditor { +QString _lastDir; LandscapeEditorWindow::LandscapeEditorWindow(QWidget *parent) : QMainWindow(parent) { m_ui.setupUi(this); + + m_undoStack = new QUndoStack(this); + createMenus(); readSettings(); } @@ -45,6 +50,26 @@ LandscapeEditorWindow::~LandscapeEditorWindow() writeSettings(); } +QUndoStack *LandscapeEditorWindow::undoStack() const +{ + return m_undoStack; +} + +void LandscapeEditorWindow::open() +{ + QStringList fileNames = QFileDialog::getOpenFileNames(this, + tr("Open NeL Ligo land file"), _lastDir, + tr("All NeL Ligo land files (*.land)")); + + setCursor(Qt::WaitCursor); + if (!fileNames.isEmpty()) + { + QStringList list = fileNames; + _lastDir = QFileInfo(list.front()).absolutePath(); + } + setCursor(Qt::ArrowCursor); +} + void LandscapeEditorWindow::createMenus() { Core::IMenuManager *menuManager = Core::ICore::instance()->menuManager(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.h index 0af41961f..cc17e6cbc 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/landscape_editor/landscape_editor_window.h @@ -18,9 +18,11 @@ #ifndef LANDSCAPE_EDITOR_WINDOW_H #define LANDSCAPE_EDITOR_WINDOW_H +// Project includes #include "ui_landscape_editor_window.h" // Qt includes +#include namespace LandscapeEditor { @@ -33,14 +35,19 @@ public: LandscapeEditorWindow(QWidget *parent = 0); ~LandscapeEditorWindow(); + QUndoStack *undoStack() const; + Q_SIGNALS: public Q_SLOTS: + void open(); + private Q_SLOTS: private: void createMenus(); void readSettings(); void writeSettings(); + QUndoStack *m_undoStack; Ui::LandscapeEditorWindow m_ui; }; /* class LandscapeEditorWindow */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/main_window.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/main_window.cpp index d9b732521..dd8a4bb1e 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/main_window.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/main_window.cpp @@ -89,6 +89,7 @@ CMainWindow::CMainWindow(QWidget *parent) _isSoundInitialized = true; } + _undoStack = new QUndoStack(this); _SkeletonTreeModel = new CSkeletonTreeModel(this); createDialogs(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/main_window.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/main_window.h index 6da360901..5a392c191 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/main_window.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/main_window.h @@ -25,6 +25,7 @@ // Qt includes #include #include +#include // NeL includes #include @@ -72,6 +73,11 @@ public: return _SkeletonTreeModel; } + QUndoStack *getUndoStack() const + { + return _undoStack; + } + public Q_SLOTS: void open(); void resetScene(); @@ -132,6 +138,7 @@ private: QAction *_resetSceneAction; QAction *_saveScreenshotAction; QLabel *_statusInfo; + QUndoStack *_undoStack; float _fps; uint _numTri; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/modules.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/modules.cpp index 76afed779..605f484f7 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/modules.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/modules.cpp @@ -37,7 +37,7 @@ void Modules::init() void Modules::release() { - delete _mainWindow; +// delete _mainWindow; _mainWindow = NULL; delete _particleEditor; _particleEditor = NULL; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.cpp index 193ad8fac..f82789e66 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.cpp @@ -22,7 +22,7 @@ ObjectViewerPlugin::~ObjectViewerPlugin() } qDeleteAll(_autoReleaseObjects); _autoReleaseObjects.clear(); - //Modules::release(); + Modules::release(); } bool ObjectViewerPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString) @@ -43,7 +43,7 @@ void ObjectViewerPlugin::extensionsInitialized() void ObjectViewerPlugin::shutdown() { - Modules::release(); +// Modules::release(); } void ObjectViewerPlugin::setNelContext(NLMISC::INelContext *nelContext) @@ -94,6 +94,11 @@ void CObjectViewerContext::open() Modules::mainWin().open(); } +QUndoStack *CObjectViewerContext::undoStack() +{ + return Modules::mainWin().getUndoStack(); +} + QWidget *CObjectViewerContext::widget() { return &Modules::mainWin(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.h index e7f9b8197..b5f9c2881 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/object_viewer_plugin.h @@ -77,6 +77,8 @@ public: return QIcon(); } + virtual QUndoStack *undoStack(); + virtual void open(); virtual QWidget *widget(); From fbec2565e9b73fa4ccec4e218fbfea18861f7116 Mon Sep 17 00:00:00 2001 From: kervala Date: Sat, 28 May 2011 15:52:48 +0200 Subject: [PATCH 07/16] Changed: Compilation with VC++ 2010 without STLport --- .../nel/src/3d/driver/direct3d/driver_direct3d_material.cpp | 2 +- code/nel/src/3d/driver/direct3d/driver_direct3d_shader.cpp | 2 +- code/nel/src/3d/driver/direct3d/driver_direct3d_texture.cpp | 2 +- code/nel/src/3d/driver/opengl/driver_opengl_material.cpp | 2 +- code/nel/src/3d/driver/opengl/driver_opengl_texture.cpp | 2 +- code/nel/src/3d/driver/opengl/driver_opengl_vertex.cpp | 2 +- .../src/3d/driver/opengl/driver_opengl_vertex_program.cpp | 6 +++--- code/nel/src/3d/packed_zone.cpp | 1 + code/nel/src/sound/audio_mixer_user.cpp | 2 +- code/nel/src/sound/simple_sound.cpp | 2 +- code/nel/src/sound/stdsound.h | 1 + code/ryzom/client/src/interface_v3/group_menu.cpp | 4 ++-- code/ryzom/client/src/interface_v3/group_tab.cpp | 6 +++--- code/ryzom/client/src/r2/displayer_visual_entity.cpp | 2 +- code/ryzom/client/src/stdpch.h | 1 + code/ryzom/server/src/ai_service/stdpch.h | 1 + code/ryzom/server/src/logger_service/log_query.h | 1 + code/ryzom/tools/leveldesign/mp_generator/main.cpp | 2 +- code/ryzom/tools/translation_tools/main.cpp | 1 + 19 files changed, 24 insertions(+), 18 deletions(-) diff --git a/code/nel/src/3d/driver/direct3d/driver_direct3d_material.cpp b/code/nel/src/3d/driver/direct3d/driver_direct3d_material.cpp index 8a9e864cc..a4ccb437a 100644 --- a/code/nel/src/3d/driver/direct3d/driver_direct3d_material.cpp +++ b/code/nel/src/3d/driver/direct3d/driver_direct3d_material.cpp @@ -318,7 +318,7 @@ bool CDriverD3D::setupMaterial(CMaterial &mat) if (!mat._MatDrvInfo) { // Insert into driver list. (so it is deleted when driver is deleted). - ItMatDrvInfoPtrList it= _MatDrvInfos.insert(_MatDrvInfos.end(), NULL); + ItMatDrvInfoPtrList it= _MatDrvInfos.insert(_MatDrvInfos.end(), (NL3D::IMaterialDrvInfos*)NULL); *it = mat._MatDrvInfo = new CMaterialDrvInfosD3D(this, it); diff --git a/code/nel/src/3d/driver/direct3d/driver_direct3d_shader.cpp b/code/nel/src/3d/driver/direct3d/driver_direct3d_shader.cpp index 445b52451..5f1c1bc43 100644 --- a/code/nel/src/3d/driver/direct3d/driver_direct3d_shader.cpp +++ b/code/nel/src/3d/driver/direct3d/driver_direct3d_shader.cpp @@ -347,7 +347,7 @@ bool CDriverD3D::activeShader(CShader *shd) if ( !shd->_DrvInfo ) { // insert into driver list. (so it is deleted when driver is deleted). - ItShaderDrvInfoPtrList it= _ShaderDrvInfos.insert(_ShaderDrvInfos.end(), NULL); + ItShaderDrvInfoPtrList it= _ShaderDrvInfos.insert(_ShaderDrvInfos.end(), (NL3D::IShaderDrvInfos*)NULL); // create and set iterator, for future deletion. shaderInfo = new CShaderDrvInfosD3D(this, it); *it= shd->_DrvInfo = shaderInfo; diff --git a/code/nel/src/3d/driver/direct3d/driver_direct3d_texture.cpp b/code/nel/src/3d/driver/direct3d/driver_direct3d_texture.cpp index 0c10a3eb8..94615628b 100644 --- a/code/nel/src/3d/driver/direct3d/driver_direct3d_texture.cpp +++ b/code/nel/src/3d/driver/direct3d/driver_direct3d_texture.cpp @@ -514,7 +514,7 @@ bool CDriverD3D::setupTextureEx (ITexture& tex, bool bUpload, bool &bAllUploaded if ( !tex.TextureDrvShare ) { // insert into driver list. (so it is deleted when driver is deleted). - ItTexDrvSharePtrList it= _TexDrvShares.insert(_TexDrvShares.end(), NULL); + ItTexDrvSharePtrList it= _TexDrvShares.insert(_TexDrvShares.end(), (NL3D::CTextureDrvShare*)NULL); // create and set iterator, for future deletion. *it= tex.TextureDrvShare= new CTextureDrvShare(this, it, &tex); diff --git a/code/nel/src/3d/driver/opengl/driver_opengl_material.cpp b/code/nel/src/3d/driver/opengl/driver_opengl_material.cpp index c7bc0d35d..9a2d6c596 100644 --- a/code/nel/src/3d/driver/opengl/driver_opengl_material.cpp +++ b/code/nel/src/3d/driver/opengl/driver_opengl_material.cpp @@ -276,7 +276,7 @@ bool CDriverGL::setupMaterial(CMaterial& mat) if (!mat._MatDrvInfo) { // insert into driver list. (so it is deleted when driver is deleted). - ItMatDrvInfoPtrList it= _MatDrvInfos.insert(_MatDrvInfos.end(), NULL); + ItMatDrvInfoPtrList it= _MatDrvInfos.insert(_MatDrvInfos.end(), (NL3D::IMaterialDrvInfos*)NULL); // create and set iterator, for future deletion. *it= mat._MatDrvInfo= new CShaderGL(this, it); diff --git a/code/nel/src/3d/driver/opengl/driver_opengl_texture.cpp b/code/nel/src/3d/driver/opengl/driver_opengl_texture.cpp index f3e59c65e..43c2441d4 100644 --- a/code/nel/src/3d/driver/opengl/driver_opengl_texture.cpp +++ b/code/nel/src/3d/driver/opengl/driver_opengl_texture.cpp @@ -626,7 +626,7 @@ bool CDriverGL::setupTextureEx (ITexture& tex, bool bUpload, bool &bAllUploaded, { //nldebug("3D: creating CTextureDrvShare()"); // insert into driver list. (so it is deleted when driver is deleted). - ItTexDrvSharePtrList it= _TexDrvShares.insert(_TexDrvShares.end(), NULL); + ItTexDrvSharePtrList it= _TexDrvShares.insert(_TexDrvShares.end(), (NL3D::CTextureDrvShare*)NULL); // create and set iterator, for future deletion. *it= tex.TextureDrvShare= new CTextureDrvShare(this, it, &tex); diff --git a/code/nel/src/3d/driver/opengl/driver_opengl_vertex.cpp b/code/nel/src/3d/driver/opengl/driver_opengl_vertex.cpp index 09ff88748..502c971f1 100644 --- a/code/nel/src/3d/driver/opengl/driver_opengl_vertex.cpp +++ b/code/nel/src/3d/driver/opengl/driver_opengl_vertex.cpp @@ -140,7 +140,7 @@ bool CDriverGL::setupVertexBuffer(CVertexBuffer& VB) // 1. Retrieve/Create driver shader. //================================== // insert into driver list. (so it is deleted when driver is deleted). - ItVBDrvInfoPtrList it= _VBDrvInfos.insert(_VBDrvInfos.end(), NULL); + ItVBDrvInfoPtrList it= _VBDrvInfos.insert(_VBDrvInfos.end(), (NL3D::IVBDrvInfos*)NULL); // create and set iterator, for future deletion. CVBDrvInfosGL *info = new CVBDrvInfosGL(this, it, &VB); *it= VB.DrvInfos = info; diff --git a/code/nel/src/3d/driver/opengl/driver_opengl_vertex_program.cpp b/code/nel/src/3d/driver/opengl/driver_opengl_vertex_program.cpp index 4c255e1d9..45da4d218 100644 --- a/code/nel/src/3d/driver/opengl/driver_opengl_vertex_program.cpp +++ b/code/nel/src/3d/driver/opengl/driver_opengl_vertex_program.cpp @@ -111,7 +111,7 @@ bool CDriverGL::activeNVVertexProgram (CVertexProgram *program) } // Insert into driver list. (so it is deleted when driver is deleted). - ItVtxPrgDrvInfoPtrList it= _VtxPrgDrvInfos.insert(_VtxPrgDrvInfos.end(), NULL); + ItVtxPrgDrvInfoPtrList it= _VtxPrgDrvInfos.insert(_VtxPrgDrvInfos.end(), (NL3D::IVertexProgramDrvInfos*)NULL); // Create a driver info *it = drvInfo = new CVertexProgamDrvInfosGL (this, it); @@ -1472,7 +1472,7 @@ bool CDriverGL::activeARBVertexProgram (CVertexProgram *program) return false; } // Insert into driver list. (so it is deleted when driver is deleted). - ItVtxPrgDrvInfoPtrList it= _VtxPrgDrvInfos.insert(_VtxPrgDrvInfos.end(), NULL); + ItVtxPrgDrvInfoPtrList it= _VtxPrgDrvInfos.insert(_VtxPrgDrvInfos.end(), (NL3D::IVertexProgramDrvInfos*)NULL); // Create a driver info *it = drvInfo = new CVertexProgamDrvInfosGL (this, it); @@ -1554,7 +1554,7 @@ bool CDriverGL::activeEXTVertexShader (CVertexProgram *program) */ // Insert into driver list. (so it is deleted when driver is deleted). - ItVtxPrgDrvInfoPtrList it= _VtxPrgDrvInfos.insert(_VtxPrgDrvInfos.end(), NULL); + ItVtxPrgDrvInfoPtrList it= _VtxPrgDrvInfos.insert(_VtxPrgDrvInfos.end(), (NL3D::IVertexProgramDrvInfos*)NULL); // Create a driver info *it = drvInfo = new CVertexProgamDrvInfosGL (this, it); diff --git a/code/nel/src/3d/packed_zone.cpp b/code/nel/src/3d/packed_zone.cpp index d56f34400..78d559f7d 100644 --- a/code/nel/src/3d/packed_zone.cpp +++ b/code/nel/src/3d/packed_zone.cpp @@ -29,6 +29,7 @@ #include "nel/misc/bit_mem_stream.h" // #include +#include // diff --git a/code/nel/src/sound/audio_mixer_user.cpp b/code/nel/src/sound/audio_mixer_user.cpp index 7f17f9d35..a80592727 100644 --- a/code/nel/src/sound/audio_mixer_user.cpp +++ b/code/nel/src/sound/audio_mixer_user.cpp @@ -836,7 +836,7 @@ void CAudioMixerUser::buildSampleBankList() nlinfo("Compiling sample bank [%s]", bankname.c_str()); std::string filename = buildSampleBank(bankDir[i], sbp, bankname); if (bankFile.size() < i + 1) bankFile.resize(i + 1); - else bankFile.insert(bankFile.begin() + i, NULL); + else bankFile.insert(bankFile.begin() + i, std::string()); bankFile[i] = filename; } else if (bankname < CFile::getFilenameWithoutExtension(bankDir[i])) diff --git a/code/nel/src/sound/simple_sound.cpp b/code/nel/src/sound/simple_sound.cpp index dd69a19bb..405b25264 100644 --- a/code/nel/src/sound/simple_sound.cpp +++ b/code/nel/src/sound/simple_sound.cpp @@ -77,7 +77,7 @@ void CSimpleSound::getSubSoundList(std::vector(this)->getBuffer() == 0) - subsounds.push_back(pair(CStringMapper::unmap(_Buffername)+" (sample)", 0)); + subsounds.push_back(pair(CStringMapper::unmap(_Buffername)+" (sample)", (CSound*)NULL)); } diff --git a/code/nel/src/sound/stdsound.h b/code/nel/src/sound/stdsound.h index a4cc08094..a656fa387 100644 --- a/code/nel/src/sound/stdsound.h +++ b/code/nel/src/sound/stdsound.h @@ -36,6 +36,7 @@ #include #include #include +#include #include "nel/misc/vector.h" #include "nel/misc/path.h" diff --git a/code/ryzom/client/src/interface_v3/group_menu.cpp b/code/ryzom/client/src/interface_v3/group_menu.cpp index 93d2ee4bb..22ff2b07c 100644 --- a/code/ryzom/client/src/interface_v3/group_menu.cpp +++ b/code/ryzom/client/src/interface_v3/group_menu.cpp @@ -1156,7 +1156,7 @@ void CGroupSubMenu::addSeparatorAtIndex(uint index, const std::string &id) tmp.CheckBox = NULL; tmp.RightArrow = NULL; _Lines.insert(_Lines.begin() + index, tmp); - _SubMenus.insert(_SubMenus.begin() + index, NULL); + _SubMenus.insert(_SubMenus.begin() + index, (CGroupSubMenu*)NULL); _GroupMenu->invalidateCoords(); } @@ -1304,7 +1304,7 @@ CViewTextMenu* CGroupSubMenu::addLineAtIndex(uint index, const ucstring &name, _Lines.insert(_Lines.begin() + index, tmp); // Add an empty sub menu by default - _SubMenus.insert(_SubMenus.begin() + index, NULL); + _SubMenus.insert(_SubMenus.begin() + index, (CGroupSubMenu*)NULL); _GroupMenu->invalidateCoords(); diff --git a/code/ryzom/client/src/interface_v3/group_tab.cpp b/code/ryzom/client/src/interface_v3/group_tab.cpp index 33588cbb9..27e6aa3a4 100644 --- a/code/ryzom/client/src/interface_v3/group_tab.cpp +++ b/code/ryzom/client/src/interface_v3/group_tab.cpp @@ -155,7 +155,7 @@ void CGroupTab::addTab(CCtrlTabButton * tabB, sint index) { if(i==index) { - tabB->setId(string("tab") + count); + tabB->setId("tab" + NLMISC::toString(count)); tabB->setParentPos(lastTab); if(i==0) tabB->setParentPosRef(Hotspot_TL); @@ -168,7 +168,7 @@ void CGroupTab::addTab(CCtrlTabButton * tabB, sint index) count++; } - buttons[i]->setId(string("tab") + count); + buttons[i]->setId("tab" + NLMISC::toString(count)); buttons[i]->setParentPos(lastTab); if(i==0 && index!=0) buttons[i]->setParentPosRef(Hotspot_TL); @@ -297,7 +297,7 @@ void CGroupTab::removeTab(sint index) { if(i!=index) { - buttons[i]->setId(string("tab")+count); + buttons[i]->setId("tab"+NLMISC::toString(count)); buttons[i]->setParentPos(lastTab); if((i==0) || (index==0 && i==1)) buttons[i]->setParentPosRef(Hotspot_TL); diff --git a/code/ryzom/client/src/r2/displayer_visual_entity.cpp b/code/ryzom/client/src/r2/displayer_visual_entity.cpp index f8f6bfd9d..20f84c90f 100644 --- a/code/ryzom/client/src/r2/displayer_visual_entity.cpp +++ b/code/ryzom/client/src/r2/displayer_visual_entity.cpp @@ -986,7 +986,7 @@ void CDisplayerVisualEntity::updateName() } std::string firstPart = ""; if(actNb>0) - firstPart = CI18N::get("uiR2EDDefaultActTitle").toString() + " " + actNb; + firstPart = CI18N::get("uiR2EDDefaultActTitle").toString() + " " + NLMISC::toString(actNb); if (act->isString("Name")) actName = act->toString("Name"); diff --git a/code/ryzom/client/src/stdpch.h b/code/ryzom/client/src/stdpch.h index fdb16ef93..48c1a3c06 100644 --- a/code/ryzom/client/src/stdpch.h +++ b/code/ryzom/client/src/stdpch.h @@ -37,6 +37,7 @@ #include #include #include +#include #include #include diff --git a/code/ryzom/server/src/ai_service/stdpch.h b/code/ryzom/server/src/ai_service/stdpch.h index c94346568..0ff2ba7ea 100644 --- a/code/ryzom/server/src/ai_service/stdpch.h +++ b/code/ryzom/server/src/ai_service/stdpch.h @@ -52,6 +52,7 @@ #include #include #include +#include //---------------------------------------------------------------- diff --git a/code/ryzom/server/src/logger_service/log_query.h b/code/ryzom/server/src/logger_service/log_query.h index 8fab1be35..60d6206fb 100644 --- a/code/ryzom/server/src/logger_service/log_query.h +++ b/code/ryzom/server/src/logger_service/log_query.h @@ -21,6 +21,7 @@ #include "nel/misc/types_nl.h" #include +#include #include "nel/misc/common.h" diff --git a/code/ryzom/tools/leveldesign/mp_generator/main.cpp b/code/ryzom/tools/leveldesign/mp_generator/main.cpp index bbd7102b8..68e18172e 100644 --- a/code/ryzom/tools/leveldesign/mp_generator/main.cpp +++ b/code/ryzom/tools/leveldesign/mp_generator/main.cpp @@ -1305,7 +1305,7 @@ void ItemNamesSave() output = "i"; output += data.splitTo( "prospector", true ); - set::iterator it = itemNames.begin(); + CSortedStringSet::const_iterator it = itemNames.begin(); while ( it != itemNames.end() ) { diff --git a/code/ryzom/tools/translation_tools/main.cpp b/code/ryzom/tools/translation_tools/main.cpp index 5655442e9..0a664a137 100644 --- a/code/ryzom/tools/translation_tools/main.cpp +++ b/code/ryzom/tools/translation_tools/main.cpp @@ -78,6 +78,7 @@ #include #include #include +#include using namespace std; using namespace NLMISC; From 56cf892b9c8830d9f8ee72e4babe369a7aed6e14 Mon Sep 17 00:00:00 2001 From: aquiles Date: Sat, 28 May 2011 19:23:00 +0200 Subject: [PATCH 08/16] Changed: #1206 fixed bug on context update when only core plugin is loaded --- .../3d/object_viewer_qt/src/plugins/core/main_window.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp index 55d6d4579..79316424a 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/main_window.cpp @@ -98,10 +98,11 @@ bool MainWindow::initialize(QString *errorString) void MainWindow::extensionsInitialized() { - readSettings(); - connect(m_contextManager, SIGNAL(currentContextChanged(Core::IContext*)), - this, SLOT(updateContext(Core::IContext*))); - updateContext(m_contextManager->currentContext()); + readSettings(); + connect(m_contextManager, SIGNAL(currentContextChanged(Core::IContext*)), + this, SLOT(updateContext(Core::IContext*))); + if (m_contextManager->currentContext() != NULL) + updateContext(m_contextManager->currentContext()); show(); } From 2d12ef943d9ecc6fce51591c2686e6bac36c5526 Mon Sep 17 00:00:00 2001 From: aquiles Date: Sat, 28 May 2011 22:06:01 +0200 Subject: [PATCH 09/16] Changed: #1206 log plugin saves changes now and loads/unloads displayer on the fly --- .../src/plugins/core/core_constants.h | 193 ++++++------- .../src/plugins/log/CMakeLists.txt | 6 +- .../src/plugins/log/log_plugin.cpp | 261 +++++++++++------- .../src/plugins/log/log_plugin.h | 27 +- .../src/plugins/log/log_settings_page.cpp | 102 +++++-- .../src/plugins/log/log_settings_page.h | 50 ++-- .../src/plugins/log/qt_displayer.cpp | 35 ++- 7 files changed, 403 insertions(+), 271 deletions(-) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core_constants.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core_constants.h index b902b6c0f..1f75eb81e 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core_constants.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core_constants.h @@ -1,93 +1,100 @@ -// Object Viewer Qt - MMORPG Framework -// Copyright (C) 2010 Winch Gate Property Limited -// Copyright (C) 2010 Dzmitry Kamiahin -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program 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 Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -#ifndef CORE_CONSTANTS_H -#define CORE_CONSTANTS_H - -namespace Core -{ -namespace Constants -{ - -const char * const OVQT_VERSION_LONG = "0.0.1"; -const char * const OVQT_VENDOR = "Ryzom Core"; -const char * const OVQT_YEAR = "2010, 2011"; -const char * const OVQT_CORE_PLUGIN = "Core"; - -//mainwindow -const char * const MAIN_WINDOW = "ObjectViewerQt.MainWindow"; - -//menubar -const char * const MENU_BAR = "ObjectViewerQt.MenuBar"; - -//menus -const char * const M_FILE = "ObjectViewerQt.Menu.File"; -const char * const M_EDIT = "ObjectViewerQt.Menu.Edit"; -const char * const M_VIEW = "ObjectViewerQt.Menu.View"; -const char * const M_SCENE = "ObjectViewerQt.Menu.Scene"; -const char * const M_TOOLS = "ObjectViewerQt.Menu.Tools"; -const char * const M_WINDOW = "ObjectViewerQt.Menu.Window"; -const char * const M_HELP = "ObjectViewerQt.Menu.Help"; - -const char * const M_SHEET = "ObjectViewerQt.Menu.Sheet"; - -//actions -const char * const NEW = "ObjectViewerQt.New"; -const char * const OPEN = "ObjectViewerQt.Open"; -const char * const EXIT = "ObjectViewerQt.Exit"; - -const char * const SETTINGS = "ObjectViewerQt.Settings"; -const char * const TOGGLE_FULLSCREEN = "ObjectViewerQt.ToggleFullScreen"; - -const char * const CLOSE = "ObjectViewerQt.Close"; -const char * const CLOSEALL = "ObjectViewerQt.CloseAll"; -const char * const CLOSEOTHERS = "ObjectViewerQt.CloseOthers"; -const char * const ABOUT = "ObjectViewerQt.About"; -const char * const ABOUT_PLUGINS = "ObjectViewerQt.AboutPlugins"; -const char * const ABOUT_QT = "ObjectViewerQt.AboutQt"; - -//settings -const char * const SETTINGS_CATEGORY_GENERAL = "general"; -const char * const SETTINGS_CATEGORY_GENERAL_ICON = ":/icons/ic_nel_generic_settings.png"; -const char * const SETTINGS_TR_CATEGORY_GENERAL = QT_TR_NOOP("General"); - -const char * const MAIN_WINDOW_SECTION = "MainWindow"; -const char * const MAIN_WINDOW_STATE = "WindowState"; -const char * const MAIN_WINDOW_GEOMETRY = "WindowGeometry"; -const char * const QT_STYLE = "QtStyle"; -const char * const QT_PALETTE = "QtPalette"; - -const char * const LANGUAGE = "Language"; -const char * const PLUGINS_PATH = "PluginPath"; -const char * const DATA_PATH_SECTION = "DataPath"; -const char * const SEARCH_PATHS = "SearchPaths"; -const char * const RECURSIVE_SEARCH_PATHS = "RecursiveSearchPathes"; -const char * const LEVELDESIGN_PATH = "LevelDesignPath"; -const char * const ASSETS_PATH = "AssetsPath"; -const char * const REMAP_EXTENSIONS = "RemapExtensions"; - -//resources -const char * const ICON_NEL = ":/core/images/nel.png"; -const char * const ICON_SETTINGS = ":/core/images/preferences.png"; -const char * const ICON_PILL = ":/core/icons/ic_nel_pill.png"; -const char * const ICON_OPEN = ":/core/icons/ic_nel_open.png"; -const char * const ICON_CRASH = ":/core/icons/ic_nel_crash.png"; - -} // namespace Constants -} // namespace Core - -#endif // CORE_CONSTANTS_H +// Object Viewer Qt - MMORPG Framework +// Copyright (C) 2010 Winch Gate Property Limited +// Copyright (C) 2010 Dzmitry Kamiahin +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +#ifndef CORE_CONSTANTS_H +#define CORE_CONSTANTS_H + +namespace Core +{ +namespace Constants +{ + +const char * const OVQT_VERSION_LONG = "0.0.1"; +const char * const OVQT_VENDOR = "Ryzom Core"; +const char * const OVQT_YEAR = "2010, 2011"; +const char * const OVQT_CORE_PLUGIN = "Core"; + +//mainwindow +const char * const MAIN_WINDOW = "ObjectViewerQt.MainWindow"; + +//menubar +const char * const MENU_BAR = "ObjectViewerQt.MenuBar"; + +//menus +const char * const M_FILE = "ObjectViewerQt.Menu.File"; +const char * const M_EDIT = "ObjectViewerQt.Menu.Edit"; +const char * const M_VIEW = "ObjectViewerQt.Menu.View"; +const char * const M_SCENE = "ObjectViewerQt.Menu.Scene"; +const char * const M_TOOLS = "ObjectViewerQt.Menu.Tools"; +const char * const M_WINDOW = "ObjectViewerQt.Menu.Window"; +const char * const M_HELP = "ObjectViewerQt.Menu.Help"; + +const char * const M_SHEET = "ObjectViewerQt.Menu.Sheet"; + +//actions +const char * const NEW = "ObjectViewerQt.New"; +const char * const OPEN = "ObjectViewerQt.Open"; +const char * const EXIT = "ObjectViewerQt.Exit"; + +const char * const SETTINGS = "ObjectViewerQt.Settings"; +const char * const TOGGLE_FULLSCREEN = "ObjectViewerQt.ToggleFullScreen"; + +const char * const CLOSE = "ObjectViewerQt.Close"; +const char * const CLOSEALL = "ObjectViewerQt.CloseAll"; +const char * const CLOSEOTHERS = "ObjectViewerQt.CloseOthers"; +const char * const ABOUT = "ObjectViewerQt.About"; +const char * const ABOUT_PLUGINS = "ObjectViewerQt.AboutPlugins"; +const char * const ABOUT_QT = "ObjectViewerQt.AboutQt"; + +//settings +const char * const SETTINGS_CATEGORY_GENERAL = "general"; +const char * const SETTINGS_CATEGORY_GENERAL_ICON = ":/icons/ic_nel_generic_settings.png"; +const char * const SETTINGS_TR_CATEGORY_GENERAL = QT_TR_NOOP("General"); + +const char * const MAIN_WINDOW_SECTION = "MainWindow"; +const char * const MAIN_WINDOW_STATE = "WindowState"; +const char * const MAIN_WINDOW_GEOMETRY = "WindowGeometry"; +const char * const QT_STYLE = "QtStyle"; +const char * const QT_PALETTE = "QtPalette"; + +const char * const LANGUAGE = "Language"; +const char * const PLUGINS_PATH = "PluginPath"; +const char * const DATA_PATH_SECTION = "DataPath"; +const char * const SEARCH_PATHS = "SearchPaths"; +const char * const RECURSIVE_SEARCH_PATHS = "RecursiveSearchPathes"; +const char * const LEVELDESIGN_PATH = "LevelDesignPath"; +const char * const ASSETS_PATH = "AssetsPath"; +const char * const REMAP_EXTENSIONS = "RemapExtensions"; + +const char * const LOG_SECTION = "LogSettings"; +const char * const LOG_ERROR = "LogError"; +const char * const LOG_WARNING = "LogWarning"; +const char * const LOG_DEBUG = "LogDebug"; +const char * const LOG_ASSERT = "LogAssert"; +const char * const LOG_INFO = "LogInfo"; + +//resources +const char * const ICON_NEL = ":/core/images/nel.png"; +const char * const ICON_SETTINGS = ":/core/images/preferences.png"; +const char * const ICON_PILL = ":/core/icons/ic_nel_pill.png"; +const char * const ICON_OPEN = ":/core/icons/ic_nel_open.png"; +const char * const ICON_CRASH = ":/core/icons/ic_nel_crash.png"; + +} // namespace Constants +} // namespace Core + +#endif // CORE_CONSTANTS_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/log/CMakeLists.txt b/code/nel/tools/3d/object_viewer_qt/src/plugins/log/CMakeLists.txt index 555eac232..b497e3332 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/log/CMakeLists.txt +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/log/CMakeLists.txt @@ -1,7 +1,7 @@ INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR} - ${LIBXML2_INCLUDE_DIR} - ${QT_INCLUDES}) + ${CMAKE_CURRENT_SOURCE_DIR} + ${LIBXML2_INCLUDE_DIR} + ${QT_INCLUDES}) FILE(GLOB SRC *.cpp *.h) SET(OVQT_EXT_SYS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin.h diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_plugin.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_plugin.cpp index ad772f593..d6403592d 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_plugin.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_plugin.cpp @@ -1,24 +1,29 @@ -/* -Log Plugin Qt -Copyright (C) 2010 Adrian Jaekel - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program 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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -*/ +// Object Viewer Qt - MMORPG Framework +// Copyright (C) 2010 Winch Gate Property Limited +// Copyright (C) 2011 Adrian Jaekel +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// Project includes #include "log_plugin.h" #include "log_settings_page.h" +#include "qt_displayer.h" + +#include "../core/icore.h" +#include "../core/core_constants.h" +#include "../core/imenu_manager.h" +#include "../../extension_system/iplugin_spec.h" // Qt includes #include @@ -35,103 +40,153 @@ along with this program. If not, see . // NeL includes #include -// Project includes -#include "../core/icore.h" -#include "../core/core_constants.h" -#include "../core/imenu_manager.h" -#include "qt_displayer.h" - -using namespace Plugin; - -namespace ExtensionSystem +namespace Plugin { -class IPluginSpec; -} -CLogPlugin::CLogPlugin(QWidget *parent): QDockWidget(parent) -{ - _ui.setupUi(this); -} + CLogPlugin::CLogPlugin(QWidget *parent): QDockWidget(parent) + { + m_ui.setupUi(this); + } -CLogPlugin::~CLogPlugin() -{ - //_plugMan->removeObject(_logSettingsPage); - delete _logSettingsPage; + CLogPlugin::~CLogPlugin() + { + Q_FOREACH(QObject *obj, m_autoReleaseObjects) + { + m_plugMan->removeObject(obj); + } + qDeleteAll(m_autoReleaseObjects); + m_autoReleaseObjects.clear(); - NLMISC::ErrorLog->removeDisplayer(_displayer); - NLMISC::WarningLog->removeDisplayer(_displayer); - NLMISC::DebugLog->removeDisplayer(_displayer); - NLMISC::AssertLog->removeDisplayer(_displayer); - NLMISC::InfoLog->removeDisplayer(_displayer); - delete _displayer; -} + NLMISC::ErrorLog->removeDisplayer(m_displayer); + NLMISC::WarningLog->removeDisplayer(m_displayer); + NLMISC::DebugLog->removeDisplayer(m_displayer); + NLMISC::AssertLog->removeDisplayer(m_displayer); + NLMISC::InfoLog->removeDisplayer(m_displayer); + delete m_displayer; + } -bool CLogPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString) -{ - Q_UNUSED(errorString); - _plugMan = pluginManager; - _logSettingsPage = new CLogSettingsPage(this); - //_plugMan->addObject(_logSettingsPage); - return true; -} + bool CLogPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString) + { + Q_UNUSED(errorString); + m_plugMan = pluginManager; + m_logSettingsPage = new CLogSettingsPage(this); + addAutoReleasedObject(m_logSettingsPage); + return true; + } -void CLogPlugin::extensionsInitialized() -{ - NLMISC::ErrorLog->addDisplayer(_displayer); - NLMISC::WarningLog->addDisplayer(_displayer); - NLMISC::DebugLog->addDisplayer(_displayer); - NLMISC::AssertLog->addDisplayer(_displayer); - NLMISC::InfoLog->addDisplayer(_displayer); + void CLogPlugin::extensionsInitialized() + { + setDisplayers(); - Core::ICore *core = Core::ICore::instance(); - Core::IMenuManager *menuManager = core->menuManager(); - QMenu *viewMenu = menuManager->menu(Core::Constants::M_VIEW); + Core::ICore *core = Core::ICore::instance(); + Core::IMenuManager *menuManager = core->menuManager(); + QMenu *viewMenu = menuManager->menu(Core::Constants::M_VIEW); - QMainWindow *wnd = Core::ICore::instance()->mainWindow(); - wnd->addDockWidget(Qt::RightDockWidgetArea, this); - hide(); + QMainWindow *wnd = Core::ICore::instance()->mainWindow(); + wnd->addDockWidget(Qt::RightDockWidgetArea, this); + hide(); - viewMenu->addAction(this->toggleViewAction()); -} + viewMenu->addAction(this->toggleViewAction()); + } -void CLogPlugin::setNelContext(NLMISC::INelContext *nelContext) -{ + void CLogPlugin::setNelContext(NLMISC::INelContext *nelContext) + { #ifdef NL_OS_WINDOWS - // Ensure that a context doesn't exist yet. - // This only applies to platforms without PIC, e.g. Windows. - nlassert(!NLMISC::INelContext::isContextInitialised()); + // Ensure that a context doesn't exist yet. + // This only applies to platforms without PIC, e.g. Windows. + nlassert(!NLMISC::INelContext::isContextInitialised()); #endif // fdef NL_OS_WINDOWS^M - _LibContext = new NLMISC::CLibraryContext(*nelContext); + m_libContext = new NLMISC::CLibraryContext(*nelContext); - _displayer = new NLQT::CQtDisplayer(_ui.plainTextEdit); + m_displayer = new NLQT::CQtDisplayer(m_ui.plainTextEdit); + } + + QString CLogPlugin::name() const + { + return "LogPlugin"; + } + + QString CLogPlugin::version() const + { + return "1.1"; + } + + QString CLogPlugin::vendor() const + { + return "aquiles"; + } + + QString CLogPlugin::description() const + { + return "DockWidget to display all log messages from NeL."; + } + + QStringList CLogPlugin::dependencies() const + { + QStringList list; + list.append(Core::Constants::OVQT_CORE_PLUGIN); + return list; + } + + void CLogPlugin::addAutoReleasedObject(QObject *obj) + { + m_plugMan->addObject(obj); + m_autoReleaseObjects.prepend(obj); + } + + void CLogPlugin::setDisplayers() + { + QSettings *settings = Core::ICore::instance()->settings(); + + settings->beginGroup(Core::Constants::LOG_SECTION); + bool error = settings->value(Core::Constants::LOG_ERROR, true).toBool(); + bool warning = settings->value(Core::Constants::LOG_WARNING, true).toBool(); + bool debug = settings->value(Core::Constants::LOG_DEBUG, true).toBool(); + bool assert = settings->value(Core::Constants::LOG_ASSERT, true).toBool(); + bool info = settings->value(Core::Constants::LOG_INFO, true).toBool(); + settings->endGroup(); + + if (error) { + if (!NLMISC::ErrorLog->attached(m_displayer)) + NLMISC::ErrorLog->addDisplayer(m_displayer); + } else { + if (m_displayer) { + NLMISC::ErrorLog->removeDisplayer(m_displayer); + } + } + if (warning) { + if (!NLMISC::WarningLog->attached(m_displayer)) + NLMISC::WarningLog->addDisplayer(m_displayer); + } else { + if (m_displayer) { + NLMISC::WarningLog->removeDisplayer(m_displayer); + } + } + if (debug) { + if (!NLMISC::DebugLog->attached(m_displayer)) + NLMISC::DebugLog->addDisplayer(m_displayer); + } else { + if (m_displayer) { + NLMISC::DebugLog->removeDisplayer(m_displayer); + } + } + if (assert) { + if (!NLMISC::AssertLog->attached(m_displayer)) + NLMISC::AssertLog->addDisplayer(m_displayer); + } else { + if (m_displayer) { + NLMISC::AssertLog->removeDisplayer(m_displayer); + } + } + if (info) { + if (!NLMISC::InfoLog->attached(m_displayer)) + NLMISC::InfoLog->addDisplayer(m_displayer); + } else { + if (m_displayer) { + NLMISC::InfoLog->removeDisplayer(m_displayer); + } + } + } } - -QString CLogPlugin::name() const -{ - return "LogPlugin"; -} - -QString CLogPlugin::version() const -{ - return "1.0"; -} - -QString CLogPlugin::vendor() const -{ - return "aquiles"; -} - -QString CLogPlugin::description() const -{ - return "DockWidget to display all log messages from NeL."; -} - -QStringList CLogPlugin::dependencies() const -{ - QStringList list; - list.append(Core::Constants::OVQT_CORE_PLUGIN); - return list; -} - -Q_EXPORT_PLUGIN(CLogPlugin) +Q_EXPORT_PLUGIN(Plugin::CLogPlugin) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_plugin.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_plugin.h index d07469541..6a2d78f79 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_plugin.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_plugin.h @@ -1,6 +1,6 @@ /* Log Plugin Qt -Copyright (C) 2010 Adrian Jaekel +Copyright (C) 2011 Adrian Jaekel This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,16 +20,16 @@ along with this program. If not, see . #ifndef LOG_PLUGIN_H #define LOG_PLUGIN_H +// Project includes +#include "ui_log_form.h" #include "../../extension_system/iplugin.h" +// NeL includes #include "nel/misc/app_context.h" // Qt includes #include -// Project includes -#include "ui_log_form.h" - namespace NLMISC { class CLibraryContext; @@ -52,7 +52,7 @@ namespace Plugin class CLogPlugin : public QDockWidget, public ExtensionSystem::IPlugin { Q_OBJECT - Q_INTERFACES(ExtensionSystem::IPlugin) + Q_INTERFACES(ExtensionSystem::IPlugin) public: CLogPlugin(QWidget *parent = 0); ~CLogPlugin(); @@ -61,7 +61,7 @@ namespace Plugin void extensionsInitialized(); void setNelContext(NLMISC::INelContext *nelContext); - NLQT::CQtDisplayer* displayer() { return _displayer; } + NLQT::CQtDisplayer* displayer() { return m_displayer; } QString name() const; QString version() const; @@ -69,16 +69,21 @@ namespace Plugin QString description() const; QStringList dependencies() const; + void addAutoReleasedObject(QObject *obj); + + void setDisplayers(); + protected: - NLMISC::CLibraryContext *_LibContext; + NLMISC::CLibraryContext *m_libContext; private: - ExtensionSystem::IPluginManager *_plugMan; - CLogSettingsPage *_logSettingsPage; + ExtensionSystem::IPluginManager *m_plugMan; + QList m_autoReleaseObjects; + CLogSettingsPage *m_logSettingsPage; - Ui::CLogPlugin _ui; + Ui::CLogPlugin m_ui; - NLQT::CQtDisplayer *_displayer; + NLQT::CQtDisplayer *m_displayer; }; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_settings_page.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_settings_page.cpp index 83cfdc979..f75d6ab37 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_settings_page.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_settings_page.cpp @@ -1,6 +1,6 @@ // Object Viewer Qt - MMORPG Framework // Copyright (C) 2010 Winch Gate Property Limited -// Copyright (C) 2011 Dzmitry Kamiahin +// Copyright (C) 2011 Adrian Jaekel // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as @@ -15,31 +15,43 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . +// Project includes #include "log_settings_page.h" - -// Qt includes -#include +#include "log_plugin.h" +#include "../core/core_constants.h" +#include "../core/icore.h" +#include "../../extension_system/plugin_manager.h" // NeL includes -// Project includes +// Qt includes +#include +#include + namespace ExtensionSystem { - class IPluginManager; + class IPluginManager; } namespace Plugin { + class CLogPlugin; + CLogSettingsPage::CLogSettingsPage(QObject *parent) : IOptionsPage(parent), - _currentPage(NULL) + m_currentPage(NULL), + m_error(true), + m_warning(true), + m_debug(true), + m_assert(true), + m_info(true) { } QString CLogSettingsPage::id() const { - return QLatin1String("Log"); + return QLatin1String("log"); } QString CLogSettingsPage::trName() const @@ -49,32 +61,78 @@ namespace Plugin QString CLogSettingsPage::category() const { - return QLatin1String("General"); + return QLatin1String(Core::Constants::SETTINGS_CATEGORY_GENERAL); } QString CLogSettingsPage::trCategory() const { - return tr("General"); + return tr(Core::Constants::SETTINGS_TR_CATEGORY_GENERAL); + } + + QIcon CLogSettingsPage::categoryIcon() const + { + return QIcon(); } QWidget *CLogSettingsPage::createPage(QWidget *parent) { - _currentPage = new QWidget(parent); - _ui.setupUi(_currentPage); - return _currentPage; + m_currentPage = new QWidget(parent); + m_ui.setupUi(m_currentPage); + + readSettings(); + m_ui.errorCheck->setChecked(m_error); + m_ui.warningCheck->setChecked(m_warning); + m_ui.debugCheck->setChecked(m_debug); + m_ui.assertCheck->setChecked(m_assert); + m_ui.infoCheck->setChecked(m_info); + + return m_currentPage; } void CLogSettingsPage::apply() { - //ExtensionSystem::IPluginSpec *spec, _plugMan->plugins() - //ExtensionSystem::IPluginManager; - //if (_ui.errorCheck->isChecked()) { - //displayer(); - //} - //if (_ui.warningCheck->isChecked()); - //if (_ui.debugCheck->isChecked()); - //if (_ui.assertCheck->isChecked()); - //if (_ui.infoCheck->isChecked()); + m_error = m_ui.errorCheck->isChecked(); + m_warning = m_ui.warningCheck->isChecked(); + m_debug = m_ui.debugCheck->isChecked(); + m_assert = m_ui.assertCheck->isChecked(); + m_info = m_ui.infoCheck->isChecked(); + + writeSettings(); + ExtensionSystem::IPluginManager *p = Core::ICore::instance()->pluginManager(); + ExtensionSystem::IPlugin *plugin = p->pluginByName("LogPlugin")->plugin(); + CLogPlugin* lp = dynamic_cast(plugin); + if (lp) + { + lp->setDisplayers(); + } + } + + void CLogSettingsPage::readSettings() + { + QSettings *settings = Core::ICore::instance()->settings(); + + settings->beginGroup(Core::Constants::LOG_SECTION); + m_error = settings->value(Core::Constants::LOG_ERROR, true).toBool(); + m_warning = settings->value(Core::Constants::LOG_WARNING, true).toBool(); + m_debug = settings->value(Core::Constants::LOG_DEBUG, true).toBool(); + m_assert = settings->value(Core::Constants::LOG_ASSERT, true).toBool(); + m_info = settings->value(Core::Constants::LOG_INFO, true).toBool(); + settings->endGroup(); + } + + void CLogSettingsPage::writeSettings() + { + QSettings *settings = Core::ICore::instance()->settings(); + + settings->beginGroup(Core::Constants::LOG_SECTION); + settings->setValue(Core::Constants::LOG_ERROR, m_error); + settings->setValue(Core::Constants::LOG_WARNING, m_warning); + settings->setValue(Core::Constants::LOG_DEBUG, m_debug); + settings->setValue(Core::Constants::LOG_ASSERT, m_assert); + settings->setValue(Core::Constants::LOG_INFO, m_info); + settings->endGroup(); + + settings->sync(); } } /* namespace Plugin */ \ No newline at end of file diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_settings_page.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_settings_page.h index 396afcdd3..2c0c5ed98 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_settings_page.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_settings_page.h @@ -29,29 +29,39 @@ class QWidget; namespace Plugin { -/** -@class CLogSettingsPage -*/ -class CLogSettingsPage : public Core::IOptionsPage -{ - Q_OBJECT -public: - CLogSettingsPage(QObject *parent = 0); - virtual ~CLogSettingsPage() {} + /** + @class CLogSettingsPage + */ + class CLogSettingsPage : public Core::IOptionsPage + { + Q_OBJECT + public: + CLogSettingsPage(QObject *parent = 0); + virtual ~CLogSettingsPage() {} - virtual QString id() const; - virtual QString trName() const; - virtual QString category() const; - virtual QString trCategory() const; - virtual QWidget *createPage(QWidget *parent); + virtual QString id() const; + virtual QString trName() const; + virtual QString category() const; + virtual QString trCategory() const; + QIcon categoryIcon() const; + virtual QWidget *createPage(QWidget *parent); - virtual void apply(); - virtual void finish() {} + virtual void apply(); + virtual void finish() {} -private: - QWidget *_currentPage; - Ui::CLogSettingsPage _ui; -}; + private: + void readSettings(); + void writeSettings(); + + QWidget *m_currentPage; + Ui::CLogSettingsPage m_ui; + + bool m_error; + bool m_warning; + bool m_debug; + bool m_assert; + bool m_info; + }; } // namespace Core diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/log/qt_displayer.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/log/qt_displayer.cpp index aaeae9a1a..fc694d779 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/log/qt_displayer.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/log/qt_displayer.cpp @@ -1,24 +1,21 @@ -/* -Georges Editor Qt -Copyright (C) 2010 Adrian Jaekel - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program 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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -*/ +// Object Viewer Qt - MMORPG Framework +// Copyright (C) 2010 Winch Gate Property Limited +// Copyright (C) 2011 Adrian Jaekel +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . // Nel includes - #include "qt_displayer.h" #include #include From bc994d4bec2e99d92b1d16dfba25e311609f84b1 Mon Sep 17 00:00:00 2001 From: kervala Date: Sun, 29 May 2011 13:57:08 +0200 Subject: [PATCH 10/16] Changed: Use of CFile::createEmptyFile Changed: #142 Replace atoi and sscanf by fromString when it's possible --- code/nel/src/misc/debug.cpp | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/code/nel/src/misc/debug.cpp b/code/nel/src/misc/debug.cpp index 472e2cd35..f6b80c9b3 100644 --- a/code/nel/src/misc/debug.cpp +++ b/code/nel/src/misc/debug.cpp @@ -969,14 +969,12 @@ void force_exception_frame(...) {std::cout.flush();} static void exceptionTranslator(unsigned, EXCEPTION_POINTERS *pexp) { #ifndef NL_NO_DEBUG_FILES - FILE *file = fopen ("exception_catched", "wb"); - fclose (file); + CFile::createEmptyFile(getLogDirectory() + "exception_catched"); #endif if (pexp->ExceptionRecord->ExceptionCode == EXCEPTION_BREAKPOINT) { #ifndef NL_NO_DEBUG_FILES - FILE *file2 = fopen ("breakpointed", "wb"); - fclose (file2); + CFile::createEmptyFile(getLogDirectory() + "breakpointed"); #endif return; } @@ -1684,11 +1682,15 @@ NLMISC_CATEGORISED_COMMAND(nel, writeaccess, "write a uint8 value in an invalid uint8 *adr = (uint8*)0; if(args.size() >= 1) #ifdef HAVE_X86_64 - adr = (uint8*)(uint64)atoi(args[0].c_str()); + uint64 addr64; + NLMISC::fromString(args[0], addr64); + adr = (uint8*)addr64; #else - adr = (uint8*)atoi(args[0].c_str()); + uint32 addr32; + NLMISC::fromString(args[0], addr32); + adr = (uint8*)addr32; #endif - if(args.size() >= 2) val = (uint8)atoi(args[1].c_str()); + if(args.size() >= 2) NLMISC::fromString(args[1], val); *adr = val; return true; } @@ -1699,9 +1701,13 @@ NLMISC_CATEGORISED_COMMAND(nel, readaccess, "read a uint8 value in an invalid ad uint8 *adr = (uint8*)0; if(args.size() == 1) #ifdef HAVE_X86_64 - adr = (uint8*)(uint64)atoi(args[0].c_str()); + uint64 addr64; + NLMISC::fromString(args[0], addr64); + adr = (uint8*)addr64; #else - adr = (uint8*)atoi(args[0].c_str()); + uint32 addr32; + NLMISC::fromString(args[0], addr32); + adr = (uint8*)addr32; #endif val = *adr; log.displayNL("value is %hu", (uint16)val); From 5da70e5d9dbd1d2f7e5f594399053ba642e13efd Mon Sep 17 00:00:00 2001 From: kervala Date: Sun, 29 May 2011 13:57:31 +0200 Subject: [PATCH 11/16] Changed: #825 Remove all warnings when compiling Ryzom --- code/ryzom/server/src/ai_service/nf_static.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/ryzom/server/src/ai_service/nf_static.cpp b/code/ryzom/server/src/ai_service/nf_static.cpp index 0168d80ad..fa1699b4b 100644 --- a/code/ryzom/server/src/ai_service/nf_static.cpp +++ b/code/ryzom/server/src/ai_service/nf_static.cpp @@ -674,7 +674,7 @@ void md5sum_s_s(CStateInstance* entity, CScriptStack& stack) { std::string str = (std::string)stack.top(); - std::string value = NLMISC::getMD5((uint8*)&str[0], str.size() ).toString(); + std::string value = NLMISC::getMD5((uint8*)&str[0], (uint32)str.size() ).toString(); nlinfo(value.c_str()); stack.top() = value; } From 44b79123303c4cc73b89a010b3c93d5237bc6319 Mon Sep 17 00:00:00 2001 From: kervala Date: Sun, 29 May 2011 16:20:34 +0200 Subject: [PATCH 12/16] Changed: #825 Remove all warnings when compiling Ryzom --- code/nel/src/misc/debug.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/code/nel/src/misc/debug.cpp b/code/nel/src/misc/debug.cpp index f6b80c9b3..505f88a7d 100644 --- a/code/nel/src/misc/debug.cpp +++ b/code/nel/src/misc/debug.cpp @@ -1700,15 +1700,17 @@ NLMISC_CATEGORISED_COMMAND(nel, readaccess, "read a uint8 value in an invalid ad uint8 val; uint8 *adr = (uint8*)0; if(args.size() == 1) + { #ifdef HAVE_X86_64 - uint64 addr64; - NLMISC::fromString(args[0], addr64); - adr = (uint8*)addr64; + uint64 addr64; + NLMISC::fromString(args[0], addr64); + adr = (uint8*)addr64; #else - uint32 addr32; - NLMISC::fromString(args[0], addr32); - adr = (uint8*)addr32; + uint32 addr32; + NLMISC::fromString(args[0], addr32); + adr = (uint8*)addr32; #endif + } val = *adr; log.displayNL("value is %hu", (uint16)val); return true; From 49c3ae1b8583422f014a0de1dcadc8506675d6cd Mon Sep 17 00:00:00 2001 From: kervala Date: Sun, 29 May 2011 16:23:08 +0200 Subject: [PATCH 13/16] Changed: #825 Remove all warnings when compiling Ryzom --- code/nel/src/misc/debug.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/code/nel/src/misc/debug.cpp b/code/nel/src/misc/debug.cpp index 505f88a7d..17cf2fd3b 100644 --- a/code/nel/src/misc/debug.cpp +++ b/code/nel/src/misc/debug.cpp @@ -1681,15 +1681,17 @@ NLMISC_CATEGORISED_COMMAND(nel, writeaccess, "write a uint8 value in an invalid uint8 val = 123; uint8 *adr = (uint8*)0; if(args.size() >= 1) + { #ifdef HAVE_X86_64 - uint64 addr64; - NLMISC::fromString(args[0], addr64); - adr = (uint8*)addr64; + uint64 addr64; + NLMISC::fromString(args[0], addr64); + adr = (uint8*)addr64; #else - uint32 addr32; - NLMISC::fromString(args[0], addr32); - adr = (uint8*)addr32; + uint32 addr32; + NLMISC::fromString(args[0], addr32); + adr = (uint8*)addr32; #endif + } if(args.size() >= 2) NLMISC::fromString(args[1], val); *adr = val; return true; From 35a4beeec3328209520815d21e9337eca308db35 Mon Sep 17 00:00:00 2001 From: kervala Date: Sun, 29 May 2011 17:54:58 +0200 Subject: [PATCH 14/16] Added: VC++ flags to fix some warnings and errors --- code/CMakeModules/nel.cmake | 60 +++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/code/CMakeModules/nel.cmake b/code/CMakeModules/nel.cmake index 20364b1ef..220e4132d 100644 --- a/code/CMakeModules/nel.cmake +++ b/code/CMakeModules/nel.cmake @@ -288,6 +288,26 @@ MACRO(NL_SETUP_BUILD) ENDIF(CMAKE_BUILD_TYPE MATCHES "Release") ENDIF(CMAKE_BUILD_TYPE MATCHES "Debug") + # Determine target CPU +# IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86") + IF(NOT CMAKE_SIZEOF_VOID_P) + INCLUDE (CheckTypeSize) + CHECK_TYPE_SIZE("void*" CMAKE_SIZEOF_VOID_P) + ENDIF(NOT CMAKE_SIZEOF_VOID_P) + + # Using 32 or 64 bits libraries + SET(TARGET_X86 1) + IF(CMAKE_SIZEOF_VOID_P EQUAL 8) + SET(ARCH "x86_64") + SET(TARGET_X64 1) + ADD_DEFINITIONS(-DHAVE_X86_64) + ELSE(CMAKE_SIZEOF_VOID_P EQUAL 8) + SET(ARCH "x86") + ADD_DEFINITIONS(-DHAVE_X86) + ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 8) +# ADD_DEFINITIONS(-DHAVE_IA64) +# ENDIF(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86") + IF(WIN32) IF(MSVC10) # /Ox is working with VC++ 2010, but custom optimizations don't exist @@ -301,13 +321,23 @@ MACRO(NL_SETUP_BUILD) SET(MIN_OPTIMIZATIONS "/Ob1") ENDIF(MSVC10) - SET(PLATFORM_CFLAGS "/D_CRT_SECURE_NO_WARNINGS /DWIN32 /D_WINDOWS /W3 /Zi /Zm1000 /MP") - - # Exceptions are only set for C++ - SET(PLATFORM_CXXFLAGS "${PLATFORM_CFLAGS} /EHa") + SET(PLATFORM_CFLAGS "/D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_WARNINGS /DWIN32 /D_WINDOWS /W3 /Zi /Zm1000 /MP /Gy-") # Common link flags SET(PLATFORM_LINKFLAGS "-DEBUG") + + IF(TARGET_X64) + # Fix a bug with Intellisense + SET(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} /D_WIN64") + # Fix a compilation error for some big C++ files + SET(MIN_OPTIMIZATIONS "${MIN_OPTIMIZATIONS} /bigobj") + ELSE(TARGET_X64) + # Allows 32 bits applications to use 3 GB of RAM + SET(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} /LARGEADDRESSAWARE") + ENDIF(TARGET_X64) + + # Exceptions are only set for C++ + SET(PLATFORM_CXXFLAGS "${PLATFORM_CFLAGS} /EHa") SET(NL_DEBUG_CFLAGS "/MDd /RTC1 /D_DEBUG ${MIN_OPTIMIZATIONS}") SET(NL_RELEASE_CFLAGS "/MD /D NDEBUG ${SPEED_OPTIMIZATIONS}") @@ -331,29 +361,7 @@ MACRO(NL_SETUP_BUILD) SET(NL_DEBUG_CFLAGS "-DNL_DEBUG -D_DEBUG") SET(NL_RELEASE_CFLAGS "-DNL_RELEASE -DNDEBUG -O6") - ENDIF(WIN32) - - # Determine target CPU -# IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86") - IF(NOT CMAKE_SIZEOF_VOID_P) - INCLUDE (CheckTypeSize) - CHECK_TYPE_SIZE("void*" CMAKE_SIZEOF_VOID_P) - ENDIF(NOT CMAKE_SIZEOF_VOID_P) - - # Using 32 or 64 bits libraries - SET(TARGET_X86 1) - IF(CMAKE_SIZEOF_VOID_P EQUAL 8) - SET(ARCH "x86_64") - SET(TARGET_X64 1) - ADD_DEFINITIONS(-DHAVE_X86_64) - ELSE(CMAKE_SIZEOF_VOID_P EQUAL 8) - SET(ARCH "x86") - ADD_DEFINITIONS(-DHAVE_X86) - ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 8) -# ADD_DEFINITIONS(-DHAVE_IA64) -# ENDIF(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86") - ENDMACRO(NL_SETUP_BUILD) MACRO(NL_SETUP_BUILD_FLAGS) From 8e6cdce8ee67ea842e1f451d76a3d2917a529e97 Mon Sep 17 00:00:00 2001 From: kervala Date: Sun, 29 May 2011 17:55:18 +0200 Subject: [PATCH 15/16] Fixed: Compilation with VC++ 2010 without STLport --- code/nel/include/nel/misc/sstring.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/nel/include/nel/misc/sstring.h b/code/nel/include/nel/misc/sstring.h index 7b4fa717d..513c681c9 100644 --- a/code/nel/include/nel/misc/sstring.h +++ b/code/nel/include/nel/misc/sstring.h @@ -945,10 +945,13 @@ inline CSString operator+(const char* s0,const CSString& s1) return CSString(s0)+s1; } +#ifndef NL_COMP_VC10 +// TODO: check if it can be disabled for other compilers too inline CSString operator+(const std::string& s0,const CSString& s1) { return s0+static_cast(s1); } +#endif // NL_COMP_VC10 } // NLMISC From fdefb39d673c9f7f40bbbde284618cbd3361157a Mon Sep 17 00:00:00 2001 From: aquiles Date: Sun, 29 May 2011 17:58:48 +0200 Subject: [PATCH 16/16] Changed: #1306 basic structure for georges editor plugin added --- .../src/plugins/CMakeLists.txt | 3 +- .../src/plugins/core/core.qrc | 3 + .../src/plugins/core/core_constants.h | 3 + .../src/plugins/core/icons/ic_nel_new.png | Bin 0 -> 21396 bytes .../src/plugins/core/icons/ic_nel_save.png | Bin 0 -> 43738 bytes .../src/plugins/core/icons/ic_nel_save_as.png | Bin 0 -> 52871 bytes .../src/plugins/georges_editor/CMakeLists.txt | 41 ++++++ .../plugins/georges_editor/georges_editor.qrc | 5 + .../georges_editor/georges_editor_constants.h | 31 +++++ .../georges_editor/georges_editor_form.cpp | 111 +++++++++++++++ .../georges_editor/georges_editor_form.h | 61 +++++++++ .../georges_editor/georges_editor_form.ui | 28 ++++ .../georges_editor/georges_editor_plugin.cpp | 127 ++++++++++++++++++ .../georges_editor/georges_editor_plugin.h | 105 +++++++++++++++ .../images/ic_nel_georges_editor.png | Bin 0 -> 37356 bytes .../src/plugins/log/log_plugin.cpp | 3 +- 16 files changed, 518 insertions(+), 3 deletions(-) create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/core/icons/ic_nel_new.png create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/core/icons/ic_nel_save.png create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/core/icons/ic_nel_save_as.png create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/CMakeLists.txt create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor.qrc create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_constants.h create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.h create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.ui create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.cpp create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.h create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/ic_nel_georges_editor.png diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/CMakeLists.txt b/code/nel/tools/3d/object_viewer_qt/src/plugins/CMakeLists.txt index 7da567023..bec71cf94 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/CMakeLists.txt +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/CMakeLists.txt @@ -5,4 +5,5 @@ ADD_SUBDIRECTORY(landscape_editor) ADD_SUBDIRECTORY(log) ADD_SUBDIRECTORY(disp_sheet_id) ADD_SUBDIRECTORY(object_viewer) -ADD_SUBDIRECTORY(zone_painter) \ No newline at end of file +ADD_SUBDIRECTORY(zone_painter) +ADD_SUBDIRECTORY(georges_editor) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core.qrc b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core.qrc index 85b4702b0..a4c87d29c 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core.qrc +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core.qrc @@ -6,6 +6,9 @@ icons/ic_nel_down_item.png icons/ic_nel_generic_settings.png icons/ic_nel_open.png + icons/ic_nel_new.png + icons/ic_nel_save.png + icons/ic_nel_save_as.png icons/ic_nel_path_settings.png icons/ic_nel_pill.png icons/ic_nel_reset_all.png diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core_constants.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core_constants.h index 1f75eb81e..7f0b5cd15 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core_constants.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core_constants.h @@ -92,6 +92,9 @@ const char * const ICON_NEL = ":/core/images/nel.png"; const char * const ICON_SETTINGS = ":/core/images/preferences.png"; const char * const ICON_PILL = ":/core/icons/ic_nel_pill.png"; const char * const ICON_OPEN = ":/core/icons/ic_nel_open.png"; +const char * const ICON_NEW = ":/core/icons/ic_nel_new.png"; +const char * const ICON_SAVE = ":/core/icons/ic_nel_save.png"; +const char * const ICON_SAVE_AS = ":/core/icons/ic_nel_save_as.png"; const char * const ICON_CRASH = ":/core/icons/ic_nel_crash.png"; } // namespace Constants diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icons/ic_nel_new.png b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icons/ic_nel_new.png new file mode 100644 index 0000000000000000000000000000000000000000..159e3e18e388c82cb44e1cd0ce628f81d3bd59c0 GIT binary patch literal 21396 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 literal 0 HcmV?d00001 diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icons/ic_nel_save.png b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icons/ic_nel_save.png new file mode 100644 index 0000000000000000000000000000000000000000..5aeb3bbe94a27c3528cecf0f2e849fb82a85b4b3 GIT binary patch literal 43738 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 %I{nv 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 literal 0 HcmV?d00001 diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icons/ic_nel_save_as.png b/code/nel/tools/3d/object_viewer_qt/src/plugins/core/icons/ic_nel_save_as.png new file mode 100644 index 0000000000000000000000000000000000000000..6cb71a33436e58801b73476821800b1b95a1018e GIT binary patch literal 52871 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 z + + images/ic_nel_georges_editor.png + + diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_constants.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_constants.h new file mode 100644 index 000000000..bb9fe3306 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_constants.h @@ -0,0 +1,31 @@ +// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework +// Copyright (C) 2011 Adrian Jaekel +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +#ifndef GEORGES_EDITOR_CONSTANTS_H +#define GEORGES_EDITOR_CONSTANTS_H + +namespace Plugin +{ +namespace Constants +{ +//settings +const char * const GEORGES_EDITOR_SECTION = "GeorgesEditor"; + + +} // namespace Constants +} // namespace Plugin + +#endif // GEORGES_EDITOR_CONSTANTS_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp new file mode 100644 index 000000000..2e3b9efb3 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.cpp @@ -0,0 +1,111 @@ +// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework +// Copyright (C) 2011 Adrian Jaekel +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Project includes +#include "georges_editor_form.h" +#include "georges_editor_constants.h" + +#include "../core/icore.h" +#include "../core/imenu_manager.h" +#include "../core/core_constants.h" + +// NeL includes +#include + +// Qt includes +#include +#include +#include + +namespace Plugin +{ + +GeorgesEditorForm::GeorgesEditorForm(QWidget *parent) + : QMainWindow(parent) +{ + m_ui.setupUi(this); + + m_undoStack = new QUndoStack(this); + + _openAction = new QAction(tr("&Open..."), this); + _openAction->setIcon(QIcon(Core::Constants::ICON_OPEN)); + _openAction->setShortcut(QKeySequence::Open); + _openAction->setStatusTip(tr("Open an existing file")); + connect(_openAction, SIGNAL(triggered()), this, SLOT(open())); + + _newAction = new QAction(tr("&New..."), this); + _newAction->setIcon(QIcon(Core::Constants::ICON_NEW)); + _newAction->setShortcut(QKeySequence::New); + _newAction->setStatusTip(tr("Create a new file")); + connect(_newAction, SIGNAL(triggered()), this, SLOT(newFile())); + + _saveAction = new QAction(tr("&Save..."), this); + _saveAction->setIcon(QIcon(Core::Constants::ICON_SAVE)); + _saveAction->setShortcut(QKeySequence::Save); + _saveAction->setStatusTip(tr("Save the current file")); + connect(_saveAction, SIGNAL(triggered()), this, SLOT(save())); + + _fileToolBar = addToolBar(tr("&File")); + _fileToolBar->addAction(_openAction); + _fileToolBar->addAction(_newAction); + _fileToolBar->addAction(_saveAction); + + readSettings(); +} + +GeorgesEditorForm::~GeorgesEditorForm() +{ + writeSettings(); +} + +QUndoStack *GeorgesEditorForm::undoStack() const +{ + return m_undoStack; +} + +void GeorgesEditorForm::open() +{ + // TODO: FileDialog & loadFile(); + //QString fileName = QFileDialog::getOpenFileName(); + //loadFile(fileName); +} + +void GeorgesEditorForm::newFile() +{ + +} + +void GeorgesEditorForm::save() +{ + +} + +void GeorgesEditorForm::readSettings() +{ + QSettings *settings = Core::ICore::instance()->settings(); + settings->beginGroup(Constants::GEORGES_EDITOR_SECTION); + settings->endGroup(); +} + +void GeorgesEditorForm::writeSettings() +{ + QSettings *settings = Core::ICore::instance()->settings(); + settings->beginGroup(Constants::GEORGES_EDITOR_SECTION); + settings->endGroup(); + settings->sync(); +} + +} /* namespace Plugin */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.h new file mode 100644 index 000000000..65c37cb8d --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.h @@ -0,0 +1,61 @@ +// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework +// Copyright (C) 2011 Adrian Jaekel +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +#ifndef GEORGES_EDITOR_FORM_H +#define GEORGES_EDITOR_FORM_H + +// Project includes +#include "ui_georges_editor_form.h" + +// Qt includes +#include + +namespace Plugin +{ + +class GeorgesEditorForm: public QMainWindow +{ + Q_OBJECT + +public: + GeorgesEditorForm(QWidget *parent = 0); + ~GeorgesEditorForm(); + + QUndoStack *undoStack() const; + +Q_SIGNALS: +public Q_SLOTS: + void open(); + void newFile(); + void save(); + +private Q_SLOTS: +private: + void readSettings(); + void writeSettings(); + + QUndoStack *m_undoStack; + Ui::GeorgesEditorForm m_ui; + + QToolBar *_fileToolBar; + QAction *_openAction; + QAction *_newAction; + QAction *_saveAction; +}; /* class GeorgesEditorForm */ + +} /* namespace Plugin */ + +#endif // GEORGES_EDITOR_FORM_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.ui b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.ui new file mode 100644 index 000000000..905814cc7 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_form.ui @@ -0,0 +1,28 @@ + + + GeorgesEditorForm + + + + 0 + 0 + 800 + 600 + + + + Georges Editor + + + + QWidget#centralwidget { + image: url(:/images/ic_nel_georges_editor.png); + } + + + + + + + + diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.cpp new file mode 100644 index 000000000..941722994 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.cpp @@ -0,0 +1,127 @@ +// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework +// Copyright (C) 2011 Adrian Jaekel +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Project includes +#include "georges_editor_plugin.h" +#include "georges_editor_form.h" + +#include "../core/icore.h" +#include "../core/core_constants.h" + +// NeL includes +#include "nel/misc/debug.h" + +// Qt includes +#include + +namespace Plugin +{ + +GeorgesEditorPlugin::~GeorgesEditorPlugin() +{ + Q_FOREACH(QObject *obj, m_autoReleaseObjects) + { + m_plugMan->removeObject(obj); + } + qDeleteAll(m_autoReleaseObjects); + m_autoReleaseObjects.clear(); +} + +bool GeorgesEditorPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString) +{ + Q_UNUSED(errorString); + m_plugMan = pluginManager; + + addAutoReleasedObject(new GeorgesEditorContext(this)); + return true; +} + +void GeorgesEditorPlugin::extensionsInitialized() +{ +} + +void GeorgesEditorPlugin::shutdown() +{ +} + +void GeorgesEditorPlugin::setNelContext(NLMISC::INelContext *nelContext) +{ +#ifdef NL_OS_WINDOWS + // Ensure that a context doesn't exist yet. + // This only applies to platforms without PIC, e.g. Windows. + nlassert(!NLMISC::INelContext::isContextInitialised()); +#endif // NL_OS_WINDOWS + m_libContext = new NLMISC::CLibraryContext(*nelContext); +} + +QString GeorgesEditorPlugin::name() const +{ + return tr("GeorgesEditor"); +} + +QString GeorgesEditorPlugin::version() const +{ + return "0.1"; +} + +QString GeorgesEditorPlugin::vendor() const +{ + return "aquiles"; +} + +QString GeorgesEditorPlugin::description() const +{ + return "Tool to create & edit sheets or forms."; +} + +QStringList GeorgesEditorPlugin::dependencies() const +{ + QStringList list; + list.append(Core::Constants::OVQT_CORE_PLUGIN); + return list; +} + +void GeorgesEditorPlugin::addAutoReleasedObject(QObject *obj) +{ + m_plugMan->addObject(obj); + m_autoReleaseObjects.prepend(obj); +} + +GeorgesEditorContext::GeorgesEditorContext(QObject *parent) + : IContext(parent), + m_georgesEditorForm(0) +{ + m_georgesEditorForm = new GeorgesEditorForm(); +} + +QUndoStack *GeorgesEditorContext::undoStack() +{ + return m_georgesEditorForm->undoStack(); +} + +void GeorgesEditorContext::open() +{ + m_georgesEditorForm->open(); +} + +QWidget *GeorgesEditorContext::widget() +{ + return m_georgesEditorForm; +} + +} + +Q_EXPORT_PLUGIN(Plugin::GeorgesEditorPlugin) \ No newline at end of file diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.h new file mode 100644 index 000000000..7cc93dfb4 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor_plugin.h @@ -0,0 +1,105 @@ +// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework +// Copyright (C) 2011 Adrian Jaekel +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +#ifndef GEORGES_EDITOR_PLUGIN_H +#define GEORGES_EDITOR_PLUGIN_H + +// Project includes +#include "../../extension_system/iplugin.h" +#include "../core/icontext.h" + +// NeL includes +#include "nel/misc/app_context.h" + +// Qt includes +#include +#include + +namespace NLMISC +{ +class CLibraryContext; +} + +namespace ExtensionSystem +{ +class IPluginSpec; +} + +namespace Plugin +{ +class GeorgesEditorForm; +class GeorgesEditorPlugin : public QObject, public ExtensionSystem::IPlugin +{ + Q_OBJECT + Q_INTERFACES(ExtensionSystem::IPlugin) +public: + + virtual ~GeorgesEditorPlugin(); + + bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString); + void extensionsInitialized(); + void shutdown(); + + void setNelContext(NLMISC::INelContext *nelContext); + + QString name() const; + QString version() const; + QString vendor() const; + QString description() const; + QStringList dependencies() const; + + void addAutoReleasedObject(QObject *obj); + +protected: + NLMISC::CLibraryContext *m_libContext; + +private: + ExtensionSystem::IPluginManager *m_plugMan; + QList m_autoReleaseObjects; +}; + +class GeorgesEditorContext: public Core::IContext +{ + Q_OBJECT +public: + GeorgesEditorContext(QObject *parent = 0); + virtual ~GeorgesEditorContext() {} + + virtual QString id() const + { + return QLatin1String("GeorgesEditorContext"); + } + virtual QString trName() const + { + return tr("Georges Editor"); + } + virtual QIcon icon() const + { + return QIcon(":/images/ic_nel_georges_editor.png"); + } + + virtual void open(); + + virtual QUndoStack *undoStack(); + + virtual QWidget *widget(); + + GeorgesEditorForm *m_georgesEditorForm; +}; + +} // namespace Plugin + +#endif // LANDSCAPE_EDITOR_PLUGIN_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/ic_nel_georges_editor.png b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/ic_nel_georges_editor.png new file mode 100644 index 0000000000000000000000000000000000000000..b293fec5286b9f86d8ad6e03602b041fdaf18c26 GIT binary patch literal 37356 zcmcG#`!{T0&a7mL(*mQRxySJ}97+QcDRU-OUmb z(z(Pgd-J_tzX$g}@Ov^KAeCDAd)I4FCXiQw0Ge zL^qEYZ_4cd*YYw@eFA(PWZk-HKphmd6#<|oi413b>!wZWp=Rm@0F<5oE1(|tGCKfB z2~$^AH1fCD4I%b_(c|;grN=YnRqQP`IGQpQPD%|OA!}a@+PB$P*=fP*#N8BqT6KM+ zng^!ea=Q}KK7L%2j&+Fc?ax(?c%8tnG?CfIxvAWLIUI-=-iVwY*6-o}V-UQg_*^py!{x3hr zV69apW~?KtL?Tn_1H?a&kjV0cTxT>;jvv^=$uhpL`W1^KOYx<5^T*G^7w3|By zmg*~#+uFZ>as8w{ww)aM2op-AHhTNr$S2i5`bI|d>@S;q8HC$#--L%F?$x_3+<#VO zA;>6b#%({C!_TXebB|Xm1O6)sCj2Xbh3{7)8w(P)lPzi+C3|OTXR*bERqBnh%XD>Y zOhL5cL`93^V)HJ+aq@w!K?ISYkay zMNVU^DU;l~Vs2T&NAc0I0c5^0KG`~>hi_7Ho}D|{*yxZgS@KGX{x3v|vOz@K#p-GI zX;2j7Zdcyu25!>DB9+gMlSQ8#M=R;VSh;kIC4}ht6XI1g?z zUsSO&8h&=VBDV<6#zcLgosYJwBK z$S;->!Om(B|T-<=NU_ z|9X}fJk?8%Lg1$|-pqm$u1);RkN4l=m*W4Qp4^Nyr2It6rtjTEk!FJ@_uu2+jKb*! zNxDM%6;dFt_LWtGitU0ao~s+2h@~w=?`{SUu41i;l=C_X$3M21AmWb-UQ}9ys;B$q z^I*jt^^!NY$!_u8`X5dNCNr6e+uQeOR}H^w z7^25nxLV*5M=JHxccyoEf#&@T((JC{a+$T(jII^Z>o#K#`~MqRS)j6u*o50LfNxCd z5x)V21I9LHj9>> zr>(6uAyfj#4SIs0~I9_H+vwF zP5QEN^vZ8f!tfGw5MYz4(W643$RA`F$bPI_q}8iXdT7p^mN(c$v`^cQrW*txAzOXl z>EmIhq^RV+pSf<3nsN@K_w+isS7oDDT;#n-)O2y`cinRz=d~mIfh=*JVFHCgVT#E} zh4Ft&^)54SY!aGHJ;tnvDm;ngd!W_6s|+I&&d+&(C- z!L6pplcOW=^R>_CIOuPQNFTL6G zK=4b~8oEIj3_GR2SJB~oqPjT(384VfmXWoYxFVy5>Kqr`y=*jQl4uS3u2XiV+x+=I z8(z)g5V%EQv3^%dJ@HQ!GSrAP#ufq4!M}lh1${?dEY&#&G*P44sl$By7Mzwk+bHm7 z{YGMOpe6WBcw~iqKTTKx#Z{D0h-XR3{sbYjJ8@jjjBMaDxREk5|!b1ht6**6G!wid=oTA-h{_nri^ z#}aCx4mpTB4Vt-fE4Jd|2>x{)@i9*4)~aZzLgj!I*FjRz;dXd9_#dj)&}F{aaP9AV z!$bN&n9(~?+t0KhRytxzR)&_V#1DAtRD*9lQ|k^?i&y1?h<_iiD4z$DY*ng#Zts+F zAJNZToRtq!zU%0z&ZF?@L4)Aw_6CpKM3SoenL#IxmfGOi;Jq6A&R6O>>y3oXDp|U) zW|DS+`vr91^x5BoRAp*UuKewcqNv~X?SJ0snsxLu z-(v39dDd6{=Qv8PttTC4>h&!CWzeAE-!+vH2eh}TElqyvon-VFayb9&s+*gBzl8X7 z%Ky1}Jrm+=n^M&JNW#h1Z&yn7fn`YEzm25dQxAN$=9iKKgSaH>xd~1oi&35zAqPyy zal9IDzJZ1wTpyLqA*N~ zU*;-R8&>-EDeuXIkrBC(k%XJs14dyvm}%wHFOSHv#U#l>@TlPmL8&)I`SjwXs9``Z#P8Sq4cDI3S0KYKW` zGMB2hW}K)k#VGUZYX5kv>+x=;j{TH=b{?Sa^GIOW9csPPHIN7uvFo~@VlEkWJ3>Qe z@?`!1Zy8*J*Ys3>>n{G<;3=s(OV{PVhO**_9ymA=+)|mhc3Z>Pq@BQ5LQlJerTz0P zmy>QgYWmx%bmqhOSHHbv2k>K;lslyH?l$Ir&a>;U57I6?1$Z)D9Bj z!vhjkbeZ#+N&%9~pmcF!l?3Co;|^?M!hkbN_Va_OFOM$cRWy_0cmxt-Cz(P>(cN}K zcMPhaU>R5Awn!WPg_^%%6@8J#HevUE_4#bX0&abx9-9WHo=n+BVrNdlNf^1;9z>hg z^ZjU5Y}WFpsoUHW^nQ8w&sZB_gP(dJi6SPZQ%vt!T|GJmOb;qtP@=YjAW)Er#%fn; zXi}^&^D{$OK5L5ma>(bw;zsd_g=}U3*!Zxy%17G!#}4he;NrhK(B{Dn^dA?M@RiI& zQrl|}kS$=3YYyLztHu@Ba91DB+ zi6#pm%E@Y^$_xRKj$^1yBN}wh?}riSh$ym5(O-K26qY@>psu50GyQl{CX~xHl+MM! zvFS8R;5URBR7*^)aqqPrmtf7k?|U#0g7LOcpEPj%sQodT8D-MnCS4aH53%s%2Az;X zf71rIeu;(MNgTFpo%9n*VOUl6jR4mv>qcCN zA^;C^1jmq1yq}NC$`~42lVjmtEA8P;$3=!dS35n;u8K{uol4^>%Z4fxXYC{WJ`=XM=|=Im^4ow%69i=WGDx+h~(jqR{zImzscDQA2g8LN_CD_?akbsB%yX0{`m+zXsI7!Ammbv`Z z)@&?&RB*JqJkHa$MKiVg%6o82#-rvv^uTKQE{e1+rNql86%o|d%)?rLxkat>Z!pkpT`-yV#t7v>3S=98mt>sCUY%={pu`g6cE z9*TlVvZ47)v{3W&xRDPO+E!glyK7r zI;pMqBT+vT_4UlY=S>cE<9NLxF)!Xi2~B#6qn7=U!7F^QP^r4^q(=`D6?P_x3i1HonyRNzw9(}#L9!me4L0yVAi&sj4}a2+g#ygr105_1OXib z-~W%Uw~>B&5~!`n3Pa|a3xN{baUqmE-cMyXxwt1&w&wRrq;mX8#&mLu zv>s-j+1SRa4NwjIy+!EG5y{29sNQBW7RM@+RAl9FB~ zlUwhj3|!@^AFq?Ai!ddt5Frc(DYvxYFh(!*Ql~_<8 z^KJ*ajjka__Mu$(JNYm>@Rn0}eCzl0EPx~}YjJ(>P4wp?IGQMgqy@blqn4hmX9w=9G$iY}Cq zlWpsUK!3M6Zh6KLV-KNiu%xyz$X{g=|LGagzbAcABv8lHwJrC25N8}@w@(YW&F zDAp)3f#=Hr4%fRQMCudfy9ZV*1h+;v35OH)zStOX$X8{(Th}Q{z~DK zcT6)@dNTMjJhFMtEd?-Ku!qBIdiRzSwdUKE-jRSDxU$eF?`#R@{1@J7VS}`K1lT%= z)nKG-XW|S0G;77Vtlpo2fGDO&J@%i(s!Bv^UQtR6AtV<~StFF!+WkudNkk6WbZPX7 zxtCF&_)!j&Z8EH#aF7l&nOZ@V8Y)Y>{`0$POE@%=`1YWre;5-^2HR@!o7XqZ#rTk3 z=7KWWf93t%h-g?o1H)TDdPi0ANG~kLUtS|g|5HH(Th%F{FpyJwVh5x*vF|h%hwG1r zp=Wwee&s6A%=xwP%3Z@fB*7_-5wy0+%m7s#^Gpo+M3J=>%IHP(2Q4gH=>dTKmglAFDc8Ld-DA5igb zdf8w-FqP~92TdmrQ^IF_V%=YZ4y3tuqUm4pp-qgB0&b3j5guS;?O^uOC9c_}*?kAd zZ%o4xCnyK0O2JhPK*2My3PAO!E#tKB`NLkzH`i2CrR=lm5K|a`0y*ln4YQ67DXo{> zzci*;D5e;HO3(58^yrDTtk*Ua3BWQv^so!XM#f1qY7esZcRrFA=}#>5P9}Y39B>!~ z?fbATvb6Ek0u4H9yrLMto_#7l4*XuI>3f%9zVJbZ<(28KW^*7kjZyAzM}|l8)>+-o zWYPOxPCDwsdu^j#RMbTylrE7dTBBegzJu>+R7i4e^1_Vn{S9oOzxMC-TMvaPIGK$X zcE1NK^iah%<*xc!)PvfA@}Udx)`C?BP?GMcOc#%D4x281j+W)U zT9Rm=!s!|{QClWFViVvlrHjGIzOY~pPoSS?m-cTRxtGQx?>-Z(SjS{DC}BLlK3DcN zy6yhIKv(D6NVTS)>pkQ21-IZcT6d%+9-<1K2t!No@4xz2pf4UYo4$GDJJc7)Do^B)5^kCLXoMFVN%XhzQIK*dO z1)vv5`ZRz3%oMahdm3~v^ww95N}BCzCiL(HPA_aY({ zf)43G#D!`1_w2{!*gg2r&r~#2|D$MDx;S!Sxf-cx?&UEnI^g{2sE{^?mz)CfYhGom zQK0GN9UloB#*~{rcrvB0a6NQ+tK7+yFI(()L0pYux*_tdQF(-s(^;Gg6r>I8W`mH9 z5DRY9iI%X>wK_?A?7jZzB$$x-Q6kG`ek66X*q!Tlf%dtU)LG>XjUNrgi|%;-Ncplf zWcxbM;&^?-FJ5wkrR*WDW+%M3)FB(AxmoyIYQZ%1ka1bfzaI-nCN8I^R?3-$U zgl(!ljEp_8C4Irm8{&+7+|aLdEF6CB^lGfa7(+?(^7q5}b)sSS-cpMX6>`wE(SavLdlLS*0@jFtJClWjNa5BA(=(#}x} z!&}`+FCAwuC43gCsJ)v;o{Aw!+PA+eJIilkh%rlq13nHgaISAoz-B!y7){`+gVyOz zG3Ts@i$_%?f26><*}Z%@8_r@{=*#s@>_^cs*(sAhrDwB+7E-a6its2D`Q*voxA9-5 zMX&yRxVgTshpq=}6!y0rZbSeX1Xi5OC^dsfa`6d0PYtxx}B*`>jkCp`(kI@#$^l>V&^Gz=6M zELHh$wccqd>GlWS;nzRN%K3lWXAXydbEqV?Lc+2Y5RXZ{mr$;5u1kM34XZxem_9 zDsIfXdh{1?-<=5Sg?Mm*&Z(QZ8|lvRS>(u_SC8k$tG?`<2i$|k4FRN~yOUVEw#dAe zjb8RkQPPWIeuiGx7Y0Hq&!tme&xNhGd{NVM7G!?xrvBfS{cvF5?v{U|Y*MYrOm&)= zuxZ7+fTxCuezl{P=7ys&AyKB(6u<&^GwjQrdhhZL6lpEI(-#hx0OnM6Ix{geI&Ws_ z_+p-@^pL!ZcTGoAeSq=#SS|@>HKVJ)%((0$Gb4T4>fe2I-vQ3HF%wcYeY3YU5dTp( zwmW@J+>rg!@})#uK)&WwtH38dHtB?P;6ni)wV{1Uj3#`T&$meB;r}k_cS#PuD5u#A zDt{loA$_Fqly?RHigK=zZ~{yy5|QC%=<>64?0vcpH}*1*<)x-)qSERikBdCG^vB*E zJpAFp9U)7x=9VGHltHd{4(Wk?iNwWM_0Wq^=)HW)6rPSf<|FKb;@- z`cJ!wYTlY0+FFB1m2W=@n0}T3)XgDL|Lzq3e7W?3j&{PMkY1`!fYth#Aaz(9n ztxHd2yc&o#)L$f53+x7`-R-oI*Xq4H#uH;X9C*Rh%x?A~$>LmCcTNW_lmsAij82b9 zPNa$l9r&G=Y8lio?Kw#IDXwq3B67(_QRS$hZ%zej1vYSvN7hG-Gu^5mag`t|vTrMg zXF&||blFUWmZfb`-t}yq$dJu_hKtsejYIKZ%39?hJW))Q+HIyE!0Q(yep~I8lMd5U z5$ri@vJl~JMshgA>BoC4zFeRT(q^54wDGeytrrv2xY<*;f~h+4$dcjkzVtIdu2>F1 zRSiA?gp7jehK=zsETj-ca)6Wup~V11wTdEnRxz9`l{oOyy7^*~s;= zVz5e|F){3&W{6d5e@MNT$Knk)^Io4P4LHcHrrM_KI3%Vx?v4sz13#E-XF^CuF}q*C zQwNM+=wzXOSQHG@i-kFn8E47^!l%y^zG^BMe#;!C-0d(uO-zV>nJ+wXT%5jB{n9cQ z<;NMvt8Er37QREmX$1q_k>iLYa$v4~-{g)9@JDE(^{%cBfM6ZS)IZ2n##R67WzeBB za;O*k^<2xu9jTDxYL*EYooz{)r5j1OCJ4wH5X0~ou0wLGSPx0!>@n%EVJI~}nyR-x zr&T56k9vY1xYTWK7D0x2QWE*HpO*S2clFtdnflBfNpDvkn9MHK2B41sPd9<2jclahl3+2q&x;x!~G~L#Fe8CO26ED20%~%aW{o@M4YxP>^O0 zdWdj^pBfl4l}SvzPulud&cB<(%{&`c<5k6>j(fh%L@B`?>@N9ifz@FQnmq{F+alG)w&!Y1yyO!{ozabn%`= zKFn0l=pQGTCa-L>hZz4{+Bi-*ZicUc zOB{9>2n@27WoBmDjF;)#9IkZR{P`fbGF@Z4vObW#a=6;FlIypaV(xWt?L750_J+5P z{o%C{2Z9jAR8~H)ECx6c=^$ll&HOu&Z_C2i<&}N-Qsaj&J`x-43p{RBRoXR-)Du1N z%C*Rz!i2U><+kB+HNH%1KSX@jJq=n5y<4#D=R(BXwI;keOp)axodQg=abuu5*%aF* z6g~#J0c}EGFgZrEw^y*$`@akMY|jQ*OG4rq1(mBTTDUQ~`SOB`$gAB0|C7xWk!U1q z)xfHI%jt(<;$BFxh|9D{X5H3j9t4Y;wyVl4g4YR>%S|($q(TXzjZc?Aeb~HHbsbg) z5U_ULY(!^=dR=;=^NE=omn}L;SQ#f!&LP&|g>~CfO^?EP#UmM;Iej(lmB*;756@}~H2-@9h9xXvc^AQbY3v0Ay|n5@zA!RLAzolr4C zRX!He4r%XfwovfBI&-ag^H*b}MDvabr=u3LqQ+~MQ48teoCp%5UTQnkNLH%TFi}ES zk{~DX-Aj4oK+nmS-DbzHDw5BW4sXJ7h{A<%d8k78IJ_2AI0XdwI1>HqX2dZe9V-VT zHc<&sD`&{`2r!vc(YKLtzg+0A70ahw`eN?!4Wra^9Ro&M|NacomGN@JL{uH<>KcC) z-jnU#%J08<1@guXp?aM0FPbNZ6oSqwGj4J5yx4?*B`Baw@L-HRDV>OV=k(cViJ!&jVB4a@@k%wmj1Z|#v%RZ~O1DhUTNVHCIsT}IOs9(L(ScN8@AWMO zu?{B*Frty#0D=&2cbWYl9h1AGWB8@z4FvnFLa@GaUC7i^L!;aOXy-q%mrbgned+uw zgSj#^qt8FCOFswM;6snaBc`BD*KPSz^;k)-^>^N^(oVu64jCjitH1T{X7i~7ydW1( zWjO%JKKyR*McH{icH7Px(ukx&4n!7N#&^LUr%@*$FppnTo1An?A3Y$3am_OMi++Zu z#Y_Dp#8msaHcC16*Y%p0DQzJly5wW4`*@>xdT*K%<#&lh1K9G<)t)31 za4j7|TkqdSyDmoTT(-gM#I~yCEDP-+9lF2RQdCzK6)!ZH|v<+guzKagcyl7(keV0 z|8Ya#8eg{8RP(XZjt`*Oudmvyu5NXa8fAT?WwK3c(BFltPHo}gBgX2 zXT?dl&c@s%sOqRptE&6SOtlkrEkW3?!^C3rUP}U1%`2}NF-;M`GB$?P3EVp;`DR59 ze60$_x&JOy!`=~&w0FQf24MNZ)U)$O$*bt;MW)AK4zT>G@s`Gp9Z}$|x4Ax2|GuX*43Yi29 z_`i3kNN>I!=9ClLJY6d{Bt5UvJb+k{^YWFuh9?jCfj?2|w6^7Y-AHe>>$P(vs{A4q?3jGvdzAP!OvH^A&t|-LmtW{W`X*kGej&pi-*X zAuck`wkSSx=;LJ_;7`9pgbZ{JTrjJAUiWmKE9oaIb}^aTDy>!`cDHT_y8FevAyWSN zo9vA(LiW@F0r^#tljb3LPXfzErZI^tFp}ID>2f>ajNyt(0e%qr2zpJ`MQZl^Ehu5? z!A!t^5eq}krEArSozHqdocP=4T?KAmj>rYJ&(z67geQksB4Jb#>^~b2v)fQ$gOd9l z6EY53le)G(tj;lNdP}`({24V+Ot|>7R75GK^omjeJ%n~w|A7@WucOIila31^rqs_m zRJv~-A|S>dGsVA72^MLmKud*X$ES3hWz zSdwUD(XjpA5lNm+mZJm_B1jG*0E}4IBQMNRL2|6_%KTO z8^w{HLj3_1a2}re@fFs}@Y0sy<85KDx8HyN&a{(G_1-XAb56Z1{+icvUdSpJsLfX= zp}BsbboA)JJoQsmb?u{Eugrg|ON{Qafvh#%^2r^}Rdh7Njo4oyKUy>s+hzR9eh$7R z$pL!dJLrIxzljJ6gS62VN!)h-q^S@z_W^R9_UeEK4tqSdFV%r;4n0p1^(EjUMh6Zy( zq$tu@Jr-}|b!=SFO13iarw=yf*wx6ZVp^i5%!uqDD6wa0B`8Yd5EJCm34ztF!*ww>-1YCVh$MGKU zVAK~jY^w=Xw3{^(J^v>D3wi&@>t*{-?VebGo$g?XflsG}FEPKXKAa>m&nOFop!xzp zI8=}cU)1kP!X}Uss_+gJQ>Ie+MriwWSsog*Hk%Eqn9A$+3@!7(b-rm}b{T4e&!6eD3>1Pc?&bw z{tfXTAZ%~+VgHTt1y=6Qaal(fGc2_p# za#=f*=hvVaoOd8ZMeBxw?0;VSqTixXx$^mUot>Em-50IF#^D5s6bK2J8G7viZVWuF z7$&}d7k>grq!$=xKk&p18yn!4IN@#Dm{8T!uu&5FVV{F-v|nJtvHp%N7vL=)1w%pm zEXNn=*qXoZGodRgi@)N*3cN_8^z$revWb}Jj+DJ>3j4#+Ty-}KJG|`Qn82hx&D4$a zkZEGd8d{bA<^j!oc!q@?l6!092VAmjtp}#~Soh4{Xm^ zwyv+{K2hc%RZImh2q@Fi*wIL{%iB|v(dl;M=`S#$NMUtE;dTZJA$=~t>*eH`vhzZJ zw66576td`fwYQWHWL8+nf{z%UNv~lGe+Z{-yh&623$Q2{En*OOmMrbFP8mi3IRQz< z5eL1oevUW6boRN+K@gR6=vfRpMwB|TfZ(n*^*Oz5ZybLm?#)XOq0fwTm>sH|$EmjrXF9 z_aNuFeLTxauf)BP%-wIUiLi+cA8I6HO~M82_8m7=mS|Y2PKGMXb>MW5Xo_gG`Uz!X^Fo zDAlj8pyv%Fy-915!8@**h&5%X7LlYX3=S^6uYUrH5%`=u70e+_SNnbDZN z9@`M&CT5qqvg%9=c{%T_2R&!PyjMp!L6AhX5TY`j+tQ8$Q>pML%C<7Pt-{&d97XLH z%h>js;a}PDco(yP|HiuhcvEJkt8#{-Lowz_hoj0a?I9a^V+^ zD#wJ+l25rk*1G1D!AYG4Yz31gtwM(bQ*cP-gI8nV0+o)GcX8SeZ&{q3iV*S1Eij!2 zYFT{0thrF=OnRH4P|tg=?*g7%BJ%Lc-@ErsDuI&}s36FscQQfA>u7*c$OJ*6JavkES6}zPvFo}E84jtBG5bT&Xgf}*rQ({5v_wJf84;tabl-gU{ig zh0XaGE0=_L1z&IwrB1arE{RyKccwMBeGKKS6d%T_oPcJ5{;>YUT(xk^RQP01S1etK z6X-?^f3pqbz`>382J_oAKBKdtYpU7?ne}S(G5&X}X z4Tb)GMUxlG-@wKk0x$9F%J6ypMFMh;3vE->Rw;9Bh?kxLod?}uo( zF04&AR6RN!Xj1$we}GylEM_SI1!o5XOI#=+GCD*pMu0`qKI3l~{`gBPuYul`p} zp`7f5_I$G*7T9%I#y5YTFDXFwZ5QTh-eglF-iOlOv;rnoJhY9}qI$AMMn-G#(BZQ5 zDusYcUK+I0Lt%PS$*^4Pz5@C8J#l_jtOP5@tK@(9V8(A>gyW(DjlHP}({ZDdXYQr)V ztdD#88BUP;Sxm$12YH$edkn;bmUsBvTRDVUE)pB@LOj$ovDP;Ml-qdtb2@Y{>&6c- zEk-5bS8#zKbDSzi(5Hp2HK$`XxQKFsEyN+R`{oU9@2B#lyx#VIdCXI$O*>2q>gjK{ zLu-aN(SSb4D^(%9-FbU3GL{z_SH-0XVGc+5yiobaUy)kZJUSS8PyZ@zSGYfYKlzO300OoxuV_`^L7@@W02b8j6FLmq`#Q@#lLH<=B_ zj<&I=0Z`O|!_~YE6Z@@cj?+^RVkl2;?jz%HOORi{ZswzpF}?dK$|g{Z#NC5S#tqvP z>clMAFsjVf@UeFOYjkzZ<%rgk%@Oy$rzK6 z4S~7qVRFDOk&v|vGyL1|Hco5kQ2(}gu6$4u`z$_j@V=T*?NPXEV9Jx1Bmpl=&#}40 z?rB7b@&*{b@OcwfO|r0u6j!}lxIV}IQyogKK~zLK+O!|Kq7KMC)uO&*5!ytXaT+v> z-cuoIM=^?w+>K5 zj^Kq@)?~hwXuyL~SdMt(k;T}fbAGw_sdB~=O)F+2GJ!5RUE0ul0Tu-MZYGb>8wsj~ zhL1nqbhn|L;CNbhBZhj&SQ!*_I-Df**R{raLBA_+WtDF~tuJt4_E@K`-R(Z6D-}aU zkx4{m3A_bchDN_R_${=A#8pBg&F4ce&hYPxe`s??z+F-;mm2nWjCH}NEO&_HSxsM+ zd+uPJ6GVhcOB>J!Wq_2T$m8L_By`v}_!@W7N@6u!pqL6+$OUGjuRn`jxpeYgXn*r~ zO}nB@UdHph{$I`smG`EYncT;kw+c^Wq#x*;2#D3+AJcmMc+!#Y19eX1~!=nvF%CXXF7SZOp3sP zhh=ME?j&o$)2w^bg)8|GsM@2`sd4C6`Qm>Fa6U_;PxX&n;zu2Sh|y51*L38US8Gk^ z>J-q~3`tm34Gqvy(975_{Ggr|_(^VykGL@l`KJQURHcK@t0mv;e3%YB@VPCz_)!xr zLlf2tgQ5wmS)^$V7n3&!^S9C`Y;4GBXxESm$%FGlUR$63|5 zw+=)@@~xX2$uIQVtQViWZo}O@o$}~{ugAr9McP;e@Rs4E$sU0+c!8fd>9D17z$5SL zdQ*2|Qm#M3y43KSQ>hL>j&!j^UcB0RKPe6%6T0qXfZX*M7HgdSI{2G)&^dK)Z13VE z%3p&=o&xTvKSVFy8|Ptq97MDMx^r@Suk9NrLz34}%h|I?QuNXtd*F8A!!rK96fV^c zc|Z*rVkHMvum^BLs)-A5I+T_e_}h{-7pW2GQvBA*adLFH2ZyxYrzyZ7_HPGg;kpBC$S)i{%!K)oVu^2(-=T#Ox^f1Ybot&f7jGfP?%;_i|T;YTc^u7`pF} z2fC!p5Ua*7wiq{H1IqaqiTM%*SN{yOZgkO9Ngl=;`gQfDaIv*7WxcuPsByu3EWAGo z{kl+u45g=#47x%}k_~G=q{@^vXKe|5e7~IR8*l(0Ng>1VTnwyw%(Jy2by2c8i2XX) z)C&9RhM-SC==(dvAKrk6Z!ys>Nl_hbM3)k{<{r2 z5FZ%5(ntWfQ5$#V_^p2y$*~0+4pW{O$2k5i%#Wb&^_GmW_#iCNzkQJDsQg5M`e!*# zep5j3%ND9JGEt$cPvrHNE1Mg!v|_~zS$*>Bt?yW}%0Kp3G+JQHUBTA??sMoj?W%}H zxuBc0D=~-kam{c^tJ_t!s4H%WL#Vk`i?V%=3Ks9|-pVF~J%tPlDgEkQ%R9YFisv%f zQ!5X|(@boJ9yhJjxd)rS2#%;&aU`6ruE~|oM-E0jRiOwz_PXIlf2+hl-e(Nr@ABQ5 zb*9;m$Nq9aJAl-8r9w>e;+;LdOkq=LKz-CM`Ih&8rJg*!FG58f_Vtz(=|crGbQHx^ zFR@27!j)J;3sTh{DH4eL#m5Pf{dk~KSbVqq*H5cX=W`0Zy4!`fIEX3ktP9XVUJ_WC zmnvW;%_}7t9ZN0rcHpPC6XH)gb3YyGk9`&_mwQI}_aBxTPb~bI`RLfdcqKM$A(7p+ z`f6d?gb&DxzQt3&)A&;TNT&Q4Xrr6feu5?(+=WR8=8s=FEk_SO1%l3Y%GU<$qZ!lC zukOEXQDO_R;BtU}1cE?+zX!cAX5wTP@jn>8@oCX)&H_dEb)2dHb%_L?(5nMMl+84g z;JXLOXKtNO$&+Vwi%2)8>YWsn>q}LO+qogvFn?4%V1wwOskNbw5Mx`3zYhDg6)1Xf zL&_C&B>GI|9|VAZbJcdN=$p;HZJjm)<6mU~CCq{^eV$2QeDmrtdOf$xgQp2>k8Atf z=MHH#zkM&?Jqy6K-DX;#bDgtS2UmwF2n!F<-~xlMz<-Gl5Py72lCu7Od!E73cQT~0 z2NaA5LF6OxH-5RVH0WAp`QXM<#^FMxFiHRO57SMAI+5v->x3|>bry&QAq{6q$|L@BUYepX~)X)BE0d5qM$cXJ_4;L5F{$NW0T-TQ+_glp~S0RLcRPSxf*hKDPLFKy3L9Q-xl3kE}H9=`2wW4&lUo3(^ZIAKK z3AezAr&H|_#N`j_qs2frf6We4PA}IZm&t4lBzI{mXy$e;d|Qz@#{P1Low4NJu|qY> zkSfjw97iS--p;|24?Nu#8X7t9Iu&sqdIXto_OqNX`H8x=Exo6JNaz1)ENAIMcQj>= zampoD0K`xoD=Qkz0J@3}ePiU58;cl8vR>a2F9yx0p!}F6641NBtaCq)6A>*yo(eYs zKK?OH*O@K3Q<&MHItAqlE0zc-k=0ZKpYK|Kx| zVg~AO%&p!N;9(gLbbRWjt)_aZ&RVPaXsTawC8f80FnrdBEG|BH8%Q?L@n12ic%%d1j^}YLEmR- zJ#phc5m4`MH|v}>WSC6F8*QQk3xQ7%Qa+jV@w6Ox%!mQO3g+j1u~4CxO&o41Tpsf~ zZ}Ya$6StlYN{%;OE7R)QU#Wt zMh0aBrp#*m!}6(ojZ<;r@f$hpma-Ks0F%*;51TI#!Hk z4H!c)25G&AdVx=6Oy{c7P#4VH9;mFC#;W^~-B0IIh&<9zp$(~wXbjONM_s^l?JX94 zjO^S2=j~(sc?eBQ_&TZ@dobesDi08|Hu@<|6QKk6znl-K@QxBNEI1(ci2^pGFIlJo zR=ecX%{17ZLD0Q)D9VmB8;aHF6HW8e@>$XqfBrVDs>q|O7XR3_Nk?FET?1V01nkb% zd1+aR)`2Nqa}`4M=Yv;MGQPhF8Ruz7qTOUliwu*Fq^7S3P6-I5+^GNBv`veto@4=Q zEU$BCQkt>RJfsI6oDm%zPfTdlJ~6y~<}RtTcs*6jXqC39gILGwOaYA+Q?oIh+$?;w z%h+x?jK6Xu`TOWVBuX7Phy4%}kvfoO<*jt(g@ey&NUV<5ey2haKs5mr>`zEDkkKTK zcl&C8Z?JYZcjZ{;$`xAROcGdVXhL6^JI5Bv7{D;kQ6q^mUT=U_`W`8d6N?!yPT0yqojIDWK z_;g0NFTpRT5kABw8q!*&4Cm#nbV9Aen|yaujnnT+(_~cjyklC`01{XlXpir>ae+}> zdg?AjB^3S=9{=F$&L_t?7C|Wy$ob~zxjIdgy!YC!Qtup7fkX~>1dYlvaa}^l#kDe^ z00O}k*twI_!%OlRKvrvabV=&o`0g#)k3r{+LWFzrEzYeOBSrY{fg6Rjf#9c(z;9(h z;xu%$Se=FvkxMT5&iHp;3H6ju9JF$#PS?I8fCfOs*f0ZZHwW1xTgsiDMr^xZ2L!mq zv}qdll`UK;t9@E3zU#kn|24|qw|k)K)fP{8Bn;o;(a+jQWC!Iux8V-}PiCf!MZ6xYx_n4DD=F-@hmfOfOkkG_jTEewUgw_KTl3R`QUd*KBP z3Hk9st&{4gT-3d!TYA+`gj4|xMDO4Kq3A5bqUzcxd?pwex}-a$1f@Y?0F@4rdI3q5 zP6?@DXaS`Kq`ON}$pJ*VJA_fXyX%|p@BEnSaIw#xy`Qz#y=3Rab!*?bez=eN!1kPBb-uH`6N#6Kn0eO1%*O-go zmcbhDkBvKP;rU?pgNV5`O6?n@UGPamEO6$v3Nd>VN|yV69ACZRSN)p?n}x6St@H=( zrhv&Z9iha58c{pE$oI?7Q;20~$Q9x1?3> zw2bMy<$!CA4E@pz>r&7riySMds^9C5d5%_MZHlT?(`UOp;n{0^fIt7F4A$+vI>&PPqZ#SQRRU*y1pM zy_$~Ld4Z=Uah4Ui`BOA(BpP&+_5e1_--8d0i5n}3gP|&F3(}nkOwBX@+W>>H z!C&tecFvK^z?&eoIwRcHc#iiD2yT!L%)9s>3y`>?23+}U>&>}ELG z>U1EXjo6#cpz~}unzdvKxJb6!?okCK9H{vJQL9(^OG5w+T0|7Yn9x{{UZ1P4w`*1k zQf_ai;%(CaYu%Dr@b5m+{WcShqq+qKDG{0N%zU>v*%*BS|FnGX4DRUP%m*cFFDS2y zTV80KwZxO4_|O3Iqs8|Z?c|S(ML_mgD}h^MZP;`Q96ew;9sZZFuCY-?pkrvUS#h;0 zyAH$;Me$0f>P$~Mye7w*NM0wE9dZCgn_AQE&NWnKDo8E}{VO5Xs$5bcg+FRQ9>j8$ zg`alFRu)|mwB(!q?c1grkWe|=a;@bGUSv6aqwN2tyuk)yf^d^^1pnE7`esf#HYC$0 zi}*JO@RlIwh*Sm`GbWkF0bfv)0%%!_Uk~x~-9NJcIxl{D9sb$zc}*~);ElBR8|OFc z9Ufzzv&p}>Zkxrj>W94W#6Pxe>y_fp50?=$m}o=Hwi6#6{mn3q7+ANB5x!70yi zsB>%TNu3SOfiyY**Ex5)k^-KbmvtY#O-g$(9*#!`NI}ZqH0hOGYoMpq1LESy6~QQv zk%oO|!}1H;9$c-zxJ40^V(?!?CyrS!2QtG_3(TYoOe3eg1%NQTSE@p87p|KSmO*!? zH!P@oTriEOZ32y$eJ}^0i<@Qmk@dG@$;Hmb@z$UB$G95~=>uFO8hKf&$Qt`v%SCG& zuml;9LtlTQ%Powmnau(jw<`0kj`6l%X&Z6TjCKzTVjPCVNg;D?(w8&~YGC7_g1pYc z!Px9)!AzrZ3}Xx}xQ;S+TExx2Wf(do@m>>WiVb_x2&ECLakiK0mB*$BAb^5DPI2JrF?u_Lh%k=5b_)(I2QcEl!=jsJx$w z&eejRt|(R7BUsTh&zoQdpMSV5M{%HrATK4rZnO1%WLqCaqQqy8 zgSZAybgt8t(8mAz`~43%x_`3ZE&6c*sZ?3<9Wks5#&ENZgIFC>w{RW*cQD{N7si3* zM7u2=HE>=}_SuWb_RYy(#edu92+^`HK zdp%~)A`rFXuCHqbErn=D9v2Cg5c+XZOQx?Ee0#dtGPo@VSmReeeGagI1l6;!QU404 zkn4(d3GNRiFCYTQ(Zx=ooY_gZ+5X;2&HNDo-6kuOUt~t-nihNkNcF-fw8#;@cV&jt zfYOU=N~n{KzP3NU0TV^fLeY0bAY;HA%+f(2_I(=1pvsbdqF4Bea)Zfowf(k#Gl#) zhfCs0_6gq)(Un~unNI1baxq&@su=|qFt6n<`SME)SmN^>S z+t)Wr{nHuZv!yP8hPhTw4HtaSEI$9*)RBCBrp1AHV)F^m)}Gf^4{3Lpo8o(BK-OtjZ`9|cUz2~6Q53jpDfuT|l;VM^ zH%sq&qEhmtoutY#`I;=iItVi#?9AEFBOe znc^{A(70d7&2SBjjF5#RzK44~A?qo_LF_eFfT|?T$Wh-$Lzk_F-eh^B6fImo#*U;U z)sCW$ZBl>>V-{3?zy8bTfWchuk}L^VaCP+)eQ>gv1D$BLB%8iM_=! z`eKlwh|+VWh;RK1WMlffcZsQttc6cy5)=Ze7Y%{og<~<{K(EMoUe9P@!r-qd=@WkSZ{I zou-2{q8Tn;Zz_l9J-R%VvPUr&=WJXSObPZB4llN9E09irJ{DhV1UpCI2O@xe>#vx? zS?ZBW+JjnAKnMDWm74{!m~c}7k4aD8RRN0l(4t}1;b)9Zk3w$&4fF{_MsU-fo#>dZ zX0(u509DyOM{7-K!H%lWE7!I z4M#jQJ*yGI^QX=O=kmH9_SMA!Zn{g#6xOrV`RpLGO))M)Yd|`WU1+Syac<58Q-LqH z5scbC6%}%mUfNu|G6enb7@J^>+LD#RiOyPlAOy0YAef%u0dM?i^85rOz*#J}--6AE z5JrxzMpT&;tU@ujXTIXP{zkYoY7!Jc4}rSesXK@iHsRn?c%(Z8K6#$_dIj1nUy9?z zrRgq$#fs6P?EVF=x`w+X?6d7oF<4W&F7G<^O?qqL@8};bH$Sd1jqQ&xpJX1o7;pH| zAnDAo-wnaeQhy|6o)2ZaVe(6-DL^AqBq`&=XWpHmL=|Igs!5MjZe@Lgv6PDl2WejH z0;5OgL&iwZ=~TyN_kr`z?5B^e=X;d7AKsM#KjUwgn(lM7$g$}}%|2$mLOdYd*eBQ* z@MZ#PffLAEE$NU;`z&!kh$G5_9jDO5ktNtY^-)+4ZxTcD13ExD)6A+dBBKu(@I zlgLohfxU@-kb!DZoOWU(M|O(8vK7LNl>yphM`8qJW&m);D52~HB)z3HJ3gZy>vRJ5 z!_;I^Cv1>oiJ(6PI5T*`a?!_+wZwxQ(Hc+`j&fulm-hG{a6p~-HYJGVeZK}8AFO2u zVJYp^Sxwh=Q)m11{wwtqX|s3RwmSQ$M#+EPPP1eW0~*2N`7bH1g2dnTQBD(!HTF5J z)px@2z%%}9ae`pfFGapbskPJRj}6qrKi66aDt|UcQVdANq;s@=0o>To&*~Ya*RSqI z0;wt&l@9MLPoj)<4L#Ou?+Sj#f=W#?K~Lj#akgaaq-Rw3@*RRR~GKl~@JLETka+2Piho=1W#c)k%;e~mugpCBL&M)`hS zrPPk*zLtIT_}(L(6@?|L^|*tu7jYFjR0P-R%t+mY}Y#Qq_HY|8p?Zf(DNxAu$9ug ze1}-71!g&LC^ib1fw!plIgVTiWTl)o0T|S*vSO{`&jnqyp!MLUVBzC4`hC~1*Gw68 z4{=`G8W#(9z@}q>RK(=7(~p9J@>Pu8?oX55wEnDfoO;R91zNm%^BhZ;a$TR~0R!-a zq$E}B$lyzVKqo;^4=lT@*7xX@G8kwuni=LvTYtYUoOOGGoSu&Byrkb$3}6>}#M(p- z!m$2Qu(2~*wOV??3zzX+SJwxls~0p%#LuK9HwSKu_Rq(Fi;Io_BJ=c_O_1WK)NVHc zVEW1h48EcHxUaA05W|Hk25mr5J&_a_v4x}M-K5|B)^W7Ydyh3sYTysY7d>2uHqG85 znrw&(t&gSVuTvNOjt$>lvw}nF@cwYfQlK$^`BuHbET~YT8tDm1Fkhhr6u#Pt; z@{2xqs&lz?J|qaJh|!?rBT}0 z14HTxu7rBHlyWX95KKGm$C_W@yAJ!_Y*e`~Cm^`~LrnBx@8%E3rJy2e zq*7qWEc#_cP0)x3Q4f&rZT>IENK>x2Kj%%@Usq)ze(^mkWg$T@8k}=%D#^P4Aai2V zB|Y};f<+CmUYcm~H2o>0lnlr}2-qQfOOASpee3OMs}Gk~8zfKNqTA>XW;sS0VpBkg z$;dBU7gg*abX&HnUxT(DDavFWdAFrL1}ql*xHIdvN8c?M_Es^MUTc^jxpf%{LO-W{ zXW>1lfoY}BqQpj0uc^ul>oMG#VQ>VljLH6dgC>>(slx_bypJiK&BHl;u;8s6n&>_` zKgi^%-F-WEAcnCl76h0!eULP+mcO65<~cXnrS)8mHUFdtmWLct$bz zw?oW}=LYIDx1)!-*<$lHn^v+VvZeQHVB&=bFlfwI;b1*+J#{%Xa)U;nxo3(Rl$G{#oDL48;Ka?q;BIpBs?ONchC_@p)~QlZRC90t z#ycYcdIL7iP~<{`S3nHXWO9HM?Mxy}lfB8bAo=z7S$==?_;HrKfBk$qs_#0N6aHsP z+yN=^?}8SoeQ@n^7XVag$2=9!#;B!(+Z@3w>+6vw*vmrVR8+E|BxsfluXq0ipz+IW zPmx5n_Qgx>V51+y#^-~un+QJx+BM>DAlza;QYzeVH5izdkVXhymy}+fOQeLE2vJQS zzDcA}vb~E}no0Sg*Kl9@kKhyj%@cAV#6bQ-G^;B(WsKPno$+j9r=#aSY%7{`9+Tzp zr$R8`PNfI#`J(L4$NaeCq5jwVFR8BT2z}E5On4=6vD1gUF771ddm8O^GFlXKw&kJ$ zmNXb@%#>N#h&NQf1aQM3{SJwE~+s64J; zP367njt~8QO{ELb8-hVWSr^dvsMNXPL4gxu@e(GCz+)Y$jU7Lb9e4q`2OnvYnVEH*Z-R5_O_Y=b{G7nNnRNkdJm$xLb{-Jc=bzU_|gZ2z40xh2BCu{6( zGhDb6WnlrQt^p%hSB;Xgl+PYg`%V2P*4h-F39gx|WYRk8qLiL3nx6E~pXjJ(mG4s1 zMFJS(l=eQ!-2Rpf&BBfpspNq75?GOzd)Oqe4#X7xIAI3@-@r|FUrpo2Y1;MXPrBoM z0Xo}XVrEhUW1*^1$=9`9TDN~+Zz&B`%Ew(K1EHFSJNmY@lRzC(bb*GTe-vc6NnwJ0PiS?AE zbc_II=kZzBoL>ao$#1fCF!yUpK>Zi`_!_RCsOGw7?;Jl&XVk1f)l%#9s~M5c%cwuW zK|F|6FLE{%7a%X!JV|)`&F+_%;Kj$(xIhgFa-ie27!exUS^-Lv_@H46#IFg)W4c`z zq=dHUW)8hfQ9-+$9}JY#}o z>}^~2xT}^aYapgy&o3!IYQ`tg#mXI8BYon<<992MlA~l z=-eA@O?{Rxmn0zW?Nd*@)8K6(`sH|?%#t?L+ef>~d-=0Fro=MFtx#yOTFu15c zD^}?qj5iCny5&!N6x33`KV6_ke})aDiVN-#)`FH6!ji?k!2?`XRk?#CAQt-{Z~K|P zF`KO|e#j+$jzi_Jz~lWYxP3drB#v?LWmPlHQfk8|L^5PH;3yJX^!7>kWb% z#~O4%k0Q)sL>r@0Ru%aWW5G!)4doP-@o0|{L8sWoQ92@o3n};Y4`rknB<9rP8(mPV zysFc85;VcXm=mD&KOZN(<->b`-5Zake0qDae%as+-nlcRk=UD_hlObNx&`+WZU1xx z1tsmMDA01o%sMlnHDF4H$e3rUy4n5((D|NA+Rqv<~<#{7hL$+XJ)_dlj!PX z2dS+)ZQabuyV2%%tRbRCdc33^5u)`n9`%0R$`BNZnSj9A-~7}L?F!{HVHSfx@= z!g6Ubg;obir(3JFUPs*0KNNI?5Avz!3(3gRAeg@*&nZE(uQk>H@1hqqdcHWU3pw7$ z^wrb8$BFq*q(}HEep?i2q&u8)B`Nvffb0t$8yz(eI!Bu&vH-E!6)SMdU<@ftGX*35 zKY>H+h%9`<@|mUHMe%_!*KN(#KP8ZNIUE3gQ|S9AC2+eBCG2v)GmmZ*t_0Zxh|Mka zc4x)TRe?1xF?8xW%NhyM*h>KKko9{Z7P_;};Kx!+A+S&C_#W>S~EB?shv#C#UN5T00WyhGiS5jjUft6(VKPq`D1`~-{d zSzf_p8T?&1ZY>|KQey-ketW3v|3_|}<9o}F7q?*Bu2j_1Z%`m0cjqq0v-I4Ccuy~% z_TzUsq@)c*R$)>%9ZJ-^MFI&CUyyL-5j;?#^_T;+_*}>L4hpgJ5eqwr@=pELHH(W9X zp*PmK6$VK7CE@|?r$iy&_Oi;Mn8@3_?pcWsb()(F8qvfI76 zB6I1b;}|n}CT?cf{r8CP^FAs>C_LwzGMrlNlUI+ujwY&3y5sB*DUTFdWmS4(@%x8l zU~NP_8oYkBDd0?!w%GWs=%J~TvNz>-g%UrODF)Gzr^k)*M@b2q@v{bE0$4f&(3S)v z{mF2m4o7}=cn&Rku3%VVET3ktM{Jb+Af*+ZKf6QTJ@lrDlQ^SE-l6^Kxd_fE2m&^X zxvslbpJW7N{P$xwgx^;?ff2GGdW?gZ?9ezIWol{jL9>H(3<8QukxHeCkmPrj-@apY zXV_K_1XymD<5lx&LxN!&vG3Ml)~V^0@gbLUnI7;z(&W9ZzJNy@*w1&u>4H~pAu3rH<7=iKzqdY`d~ zsnC21G4=j#Nx?zP%1L4GAdFK5P5yRanF76;;8ykKLTz%&tTovnJM+YJ{TBK zvl*YGYC_8dw-As0V@Yp3OVl2rB0^A*%0khjpx19?<;uImG*j0pK0ojR4D4dy=-%;4 zRb&j|@6Gx1-rRkKqp(I$Clr0oEaj17&q_jsA0=z+@&G0q*F1B$u6UI?mKH!%9uP)N zi(w*V5ZfdfC!a0CqA>5Ne%)l!6o~pjN*+r9y(GF7wf!e5hJeAs8pKQ+od^d`p|+#l z^l?xO0UAL)m+(734mxtB#tm|-eoX)7sDqlDXQys|#VcUaWtF!*(HeNVVNK#VclQ2w zrZNDqkD+2mslTjD5C6I0EjL>s2aDw2+p5^gmj_N?KR99H$09m4TS%o6-Kkff`KWF# zCHwLiD1gVX={^_buIk>%NA0&tAJU=CXh(KDQk;ghDP=$&%G&;UAUg+Xd>E19=N;4} zdq~J)M+yaWiT^_t&;pu|un2*X$s7KAo__N!l(Dzj?#NmV0e^{Mm!X~(MV+mX=_cCMpxDX z5wPG|Pz>UIcXoA<&=DjhMiw9^Vt@ARjs3!p$AM5%900VFk0bv<>YPoKh6}O6E60^p zwIZ%_+?DFtKenLTL<|p})#3<#n`*7<+yeA>%W=h1RmAK=PMP|nbLWNdIyRZid6;27 zN?UgK>|3MXn+vh;9G_7S-)3e$gFof*umA&f;tkZKQFH;)xV<99&o!t?f1HrRKLkVqMj2XRcYa9?581GLwuT7c1oXt9_N3^@U>rio zO(h?s2F4a!P-2TQ;yGBP;jbT)&IRsDBMskr?#US;cum@DHP#_brNgm)Rc?>*moR%k`eY${?}q(ez82qb* zM)hwB$tO9-kRd!M2{8(w-WlI&~vpzBQm5LHEGgs}Quq z9lN!cm(_@0ywi4+oI4yEM?c#q{u6S09+6B%>g$G(VwzSUuQBZVXR`%j=R_}TRtb)E9MY^i(Bth7kK-v2Wlr}AieFVBt4N{5dr6u*R=TcN$PZI9pLLvT& zifk>P2ckG`$KSQ}1XF(9!v@%|@QN!-50MjIve2w0MOo%s_CwzpJV5mGlG8k6@_74bwl=+o zvgiO;$pM8QYN*}nQ(C|K;$@fy8(&*;Ey^_?C+4-<8V;Ig;~z;?0P!eThor+i?0K43 z?Hn;fD4!=&!Yxp*z54gj*1Tu()ANUf@*bEMbpOv!rTU|D+ro12jEFPi9J;y2{a~7D za)Zx9L$@ACXlIL17RtcL^4Q{2VLc4EtIHeg)v8V59@xKCnO=JmnXs?PHJ-&88F%;1BJefKq}A>PfiDRGJ5TejH2@+D%K)}Edt@uc!BOyr08;2=S%WE z|HE9ipxOL49B>w17KNZZ>=~m&5)9>FG;Xn}V?i;Jfldg~ymGvbmH1v2PZ1Zyx?a4> z>*VFngUOKU>!x{AD?j$YqTD|bHr+Jq#cH&wNtS6Xx1kb##~CvpZpxBd-+tYAVwOCi zm$$_B+~A_@B5kXN_aAuVF=gzi-PNOmi)HEeR0*HN{=-(k94C%F58Rct?vekFpJiGI z49B(cqCCJ&HoQUyE;1=2Y{C;fCt-W9CpOo^PV$hgYZ+6Rp-CCYM7X;wQYZK-2Jh{4 zz~7VbP^^S+;$-5`dq?sDHs#d%oXOsB!F=$)EmbWhwgCG+62#ZkBOJu3!;9}uAJJs6 z{sBI+*{<|_+p+-=DS(E$BrIvM=vdL+f}uMomrG5SEBWON?j`{XJid zYyu)FXb-0ua7SvFVCvq!UwjG3G?=ZIScTcz#&tra_8HnUABVKS-t z@e1`k~bua`NhW+ghO7O6_nA(M1 zvjO93=n?^5>4VUOyVQ+mW-yGXiXIk+{F3$){kv;h-I1KMzzApp)kukhQ85lS@}0y2 z*1}NgXxBH1z!5-AvBQ}Qm{WCwpz;|hwY47tX9ZvA_>O>l1URS1pPBH%@GBqHi0^AZ zz>-sW$u!6DyMW7Z0)4!dq#}lM21#z45R;NVY3B`H+aVXF9fdHa+5B}>*+y@1id!4wGDhBasUyY%$u+SPcOS@a z`08}tVBM#VTtc55jKsm%L)?kD{_$#;q!$)YyM%>+S`NyTxBn@1hiT;!=_#hZ=l}WE z@?%*`sEJc!`F=hTa3K)}&$1}31K7_<3pqbMD1wh@+wz$S_gvDTqFmN~GrGh9kK~Yt-ZU5kKU}*5#saMs zIm6ro%wKlsnSzCEd3%Gu>~G|36ul_n%+XAfXCMX;h#$bPPaUZO$01^1=eP$(W?doO8o?4#^~#jfCZi@RbhoevIc%q#jL z$yc=AVoW#w-Wb=(WVH|4dcf#@KQIB%hYH)W)f&*EE!U`1MJW*N$(6T5^Kaj-R(x`^ zL9?@)pfP6Dj#wT6cmDfVo6ZlPkg|a`NrOc=0npPjZKpXO0~LFKuH^C?Hr}PMR~YwC zSl=;xoTGPC_gq59J#NLomOhRFSn@xpf{Js9=Sd)lg_iw4n6(l6HcTI{4<|uGhl$mJ zl+PUCF}w*D`78(eCl7?2HMTvzJC7I=+=9QuvL=h1? zE2xKYBn9P3LT*Xl(a6U^RvLdroz>BAT$&hE6A-k?M=Cp|vnm6b^ekZs>#X;Mx8*`T z3$((Hfio{sy4K1S@ooz9rurdm@Vcif|L?3gBy8qiOGazLgdrDE3M4O4i^r8B49G zJDQCZ`R}H2ZvQ#3z4`2fv)F|xK5)(?9*X*oMQA?(spP*V{qFRDNk>_}KH%$D2Nv=3 z!~0PcAHB;KB{MAO&GoAl|CIT4nt)+mSRD-)SQ)mmJKQ%!wJl~(>hmehW0x)7ZreQW z?(KE_N*D~&y>?!G{SE4d+Wv)k0Z7QagBdpeZQy}NcZ~H`H*k=l1vfya#!Zz{%>OVZ zx@jQ(R=n`&gD(PS(Y|{jXm-Nx1_F|vq8C)qdW3BRjsq9dgI^a63?%X>-#5Wt0zAZFw(UaTG`y6 zER6=dsw`dBhgvK;3*!HNY|C6>;=+?HX@+}$ym)*=4xuWXgaeFuhfRI>=$Q^jU0;r% z{){QYEEPVn?2Dz*jiAzdw^L@G_9FPf(aCnVI$GKW+>8we#UN&=Nxg~44XQ45ZH*Sy zV-YHkLU13zXJF{b6rG&_2yR5aYEoZ`{2wp<2VksYVg7V`I`aQ`yjQs|!}tC)McT*B zXk>N`BYhV&(xrN-Otmh_Ud`0mk<_U!sYbQ2kInDnUWh$d?A>-^hocr>0w!~SA!?fg z7(|@GJ_}yuvXCFt#u#^d0bD}$922$p_@K-DnW?jDasM|P&lQ)xu3W0ECYa-fG15BPpnzw7_SSE;oT zug9MuYL}QSIt?t~p|F_+s%AYTuu2gVu8{ETN1{C@ z?dFw^L_(ob*0&li40Ujw3sas<;_+OSc@6X~>J4s@)|L>bB4eS!eQ(U5X358gLr%vh z(jlAJTBi5fF^?|)gB+B?54?)5!`42n<03&f(XDY`Qcf;(t-bbAkZD2JSb9$_3;QkB zpwx_RKa$|7D1 zbnUDm98mMS&*ri1f-gVQymtc=+v&F(x9x|(zS@>-H`Un6-n2#*k7iedSya8 zF0wdM8e5I2ux!;2ZBVm}uzNBv^y2Y>arR@L8GKMiLDe0hyOH&x; zJ7NP{1XE1d@H7x87+Tmix@zjWzD%~E69QFDh&Qk>PeI+V6jRR^Q7-XfuX@TF_}Mia zCjyjE9RbA1fVl+{8&mC<1QtWd+!WrVav8pLD#atMiCMmO2TIZbbg)sE{A1*}hnwHEKO8sc6q_w6o9iiW%L-GUo zd_S?;Rloa#Cf|5**o<`W5@hic33Ki`FmRJXw6W6p)lX?RpVD;j&?<0h z0@|GBmbPQL21%Zt&1-bT-;enizi)6tl_~hQg5uwA6(;EUU0NbB(FdcK^Xz%{#ESvVS}a%}(0S&+^r}JbK8_dp;R}zZ~(*e%V;f+w~kqp4r$YLFx02tZ3gsGsTSiqexBxpW}JQ&w_+=Hpm6Uu%4Dw4s5{8((G$saTsTdYz~_LIfzyzB8UKaOk6E@4+&;a z63?P2bKsYo-;koLx2Jdk@HI5KFBB8z(@ z1sc?QJ{moias5e5$1Ndt))dP*(81P2AP}U*XL%g z=A^>#18m)WPtaQm-iMGPD9&BLCRqxgemj>|u6 zAdN$0>Y7=}oe9cQ%F!0DS&NGzNU8!+<_pIkSTKv18+zkGv$2(i4{pCdVo=ZF7iNKp>x1&n~?;dfaIInqQn_hB#{zrE#k>Wlim7V8QB@ldM=f0X}i z(}l)2EcFr!4dcRD=7RBG#{gJt-wHWTaKZ4R>KxjU_k{PR_EoOOswiHN)$!Cu?@Oj> z)AloeuQ`oTtUVU5kT4BZACo!w*Gk1-_PJKn?@h*l1G+2DGt+n~Rp5A<~F{X!G{e{LJJAI$zz!Gp5l+YgO zk8Tg?rWJPAZ-9KFgpvF7{MYVtpX+oU%&y5A)!BZ%wr8v3YIVQWFy-#OXGbyf)&9dZ zgS{sLTIM;bR>>EKItg|(Smlh$mJ%+H;I}Ait(l*A)=e@#**WGPg3p zTOs_2YPE=|At7!XF;ka6-K_*#QaPq6oa{p+u(@)`5>_7$m=PG-U%MHv0jsm2j}v3G zRXG2s5GbiVVk3W8z*bggu{JOph=*CHL^|kGIDcH*Q%2w8Ar!4lZ%EaPWsEe30NRZ) z?2~lA@w*{MDMKB}mw0eyPOknRm_KI&jwMjhej5EI!aYB~hgQI=-dZ_h1yo>|Ba6YW zaeXN|eP6G59p|IbdsC6I`RD?Sn{48V375jF+5SE#3!9Q7RDdN@FK8$sf5bXVp5x#( z-C(99T5p}&Ft z4Kf;-nI7n9w>UpFOyD^SS9TWz*+<%?^joFw{%q#(*WE=vYhGW?KL^{1bjKpztN7lv z{gWx|ve-J9DA@(@NfJpxl%s5glFtF!>H%+TW;e%ke~~3XaWXv2YRkmMC7;$s`CS|M z;#ift*Mj-c=)|+{LIiAjJEMuGN8?ld0(bk{-;1+U-DKZ2n5;L=UXOBYUmTKrBnzZKIf%9V2hGd0{D4hoyBnHiEq{odYUza= zsKNDdCfFap7ITuLE|mPRhB?jD?r%u8!mpjYeE0W)egCdf4ge%Y0KHpxY{>j(uKGTw zch4tIO;#6NR(+|Z1de~<7193|r2N7nnip>@OkfXd0V}&ot#6~IeLf!Btyi|pT|TYn zV)gr`WdLP8`H>4JYQ70HyU8FJh+t2`rX)ycu*K-(;GbmmqA3pIT9Ws6)wR_7wt?@ee*hs(i?`Kq(O5c{0+-+}3wt0+koqQ<$cXPGz60&$)De}aR9D`lDxxsYYwgmGE!t8Wl_K_i^#cFKI6rVp04s z`ByO8>PeDZ7!%u5wTn@Mh*a{WL2j+DZl+3n$A8OvDD*G?Az>&~{s4A|sAck>qAc0E z46CighfC;Q{%w$ZgnMsN|8v=|*X9k5VIynWR>EFC5}c~Pq)H*g=r2WcK8o6PfZes^C2zt@!455Q(vfcHoCO5M6^Y0QvAL#^$I>Mx03ys zIYKxQ*~`b_bKP)I#4hql4G|BWbEo0ybU-R)@t)qMHx0V^#vK0CDhvLE!^HLU2L+cC zg|z@qj1MTwXW#3q61sA$vhY?f@9rfP{2R&>Tlqzf+VypN_j0vh`ut2P>gV>TRqI5; zLY!ywzxy9k|Lw~1ME`BjK0{hvuTUw2w5qoBt+U#CxVNbr0iamF3fB{mWXt za7lRuAq9w(#iiiCMj!L<;W-PF35}==qX+&SyMn0_Sa6NqLq~B@B*g)^g!#Q%+oM@f zXvk`xSv6oUL_a1BYXpPKhX5{NxgOQAd3oe$$^HAk8ns>0_Jxolt@9St?zzN$YqFKd z`Y-G`s(IXnyO3D~wa@`K$8hHd0(~2vJF24hVGnCQ;N{;^F=cn(eW*Lxz;&We2^j9; z`uen^Gw59^%R8M9 z{e?Nmvg(??6vE`9J0o$4;0j8_u3$h3JQtL)KU{Z%{De+y+zunm!D&Xy1TilWMLiXF z4x(Wl{eH)k=+eEw7M9boR&gPqPDFBlY`pcHRJ}S{1FWjNHSE9oiNoQ|*0TGy2gK&p zbWmOwVUAUqnLi3GB@8Lwrl`6j9%B+?(}O;#1D>j}|1OJ9K{11!pt#UjC=(cydmp4`;`%RyTi`G1*{H-3R8<2ehY!W<`kC4Ljj)IDRJFB(j1 zGR=#xhuK7DbNEZ1>NBX(t+Dc6ZE};-J=iN3jz%8HO%RHx@%OT6`9OMV83JPOllA9m$wR9h}XpRq)RU3 z^n{j^`fTI?O0FRXmY!8XDu{9#Vpkci&I~}SI?o=xT+h9f4rhTht_5b5w>)ocrMYt7 zfeo_pwc#hE&2Olqxu}tjU+0prLlG%wQQhrK0O_7OcSdu%zR^QOBAiYM8}2ob8VtBN z%ueK-mr-s1Ez$vfek|dy7aKC&4T#Gi!%H^B$~uS6&POG07n@@W3IJZ})vxCRAUiC0 z_XpGz4OaI?EXP$#*0AcgW#ru@@0Vjxa$Me2f%x0pjo$9ouHHjgYyJ$B-S6l+Wbh~P z8AAhv^Tllo_Rr)wCziv(U|$-hF}};iMR^C|Mu&Ib3Rxe^k5+qMagPas0+Zb6q;qFZ zV}NI2f~j)TdB1-w&f}Z+xvBArU;o&fT#v`35gq5l++pCtOxg*6QCNUC!t(EOF#sh!V;Ertj?|rG!WJZjB3y7b9kM`_4>H{INpi+kV<1&O~j|uPYNdFj=H|Y$xjavdL4dfE%=?jbB`R1JV zTvBb6B;)qZt?A04HL?u8(Te7_js`vP-ND`GelNuv`3&f#!Mngl+)Z&og88oh9AJJa zE0k*%wZue~3Ngg~Jx1cknVj$`QGEv$Qj#EvX3C6II2_iS+3*E=SU~J88j=${6*6FL zaoLtCB}eT)J_#^!Oa8#BCb|E31ui!G@h3u(piC+S-8k`UkrEHlN{pQdtK~9jz>DO& zPL`D`C~8&Rl>Z9N3u}yK>!bww$~pHz^&T^~H4~8^y49WWk_mEs^;x#Y4u^KwDbN2! z>au^?^nz@e;0;az$Z@AjvSbFLuPB|7lK-pvvp$LJWz=xYbb&ecE;Hyx&=<69Ya7s@_G8}3 zcTW#d!w4ZaaXgjdxHZNR5v56vUxeBiUuMIaDdr&JrYP)QLMpigL&Yx#Z@7fYb{7@6 zNTH23=vEm#I}7$fvZpe8?5c6iqJ`)ItlM)_-AU_DGUTNMnV$0GoQktqeWTCrpYrN` zdcqT%<4;)S7Lcb4IlCBae`AYg@DwR2P2xgB~kW|814`69sS> zXK;(nF~Y4Qc&}mYfu7JizOxJ=_m%ip16Wdq72(^3Dmpr@Ko(HViYpW__po%&!OJz* zn&n@U-myf7m|^G^DTGAnIPyXzh8J_FA3QyS_46wZ4e(I@cFWF2zdR9>5g;Pt$5b}x zj3WKB!_Q6n$r~VDa+&TY2%O>9{#PMQGfsp^dFNw3E$H?@izYW7Um0`O%?4q@+;cp9 zp&z}yUpvAs5R}K+lTYL+Z~i#ZMIBoG5fXf5DfoxY zPJ{i)-P=Jn*rS8?y5+sD_yq~@#?!!$nL%^c4^+n)*juw!G!>3Oxxe;oa@BboSSkhv zopWOcwUk5sUYLai!kY}`9QU8D1CCqqUs@6xeUzprjgf2rZERE7blcH*_xKmL>XIeG zdNWGc+;RR|&D4XnPjd1|kk?O0fqV+}^uupYGtlee9LTqUAG@A#5obbQdnzP*vC6$V zQxSHX71?*PrYplhM{QEq>IG+2)-@8-qmGZoNDi2WhE_rFY*o(nsjqCX7?{B_rm98F zk}gDaS7?KOxJg++->Dfv*gChg<8l_mRdBPE`E_Z52jw{FGK|>XV*IfRt!#K z5*^hJ{I0&H@(c{~{%Mfqx`mR!31)wCX| zv@Moyxf-K*wB29To-sN$$2_HsEM;RNj(Q0oFzp~fQ`fLlQ9YuW0UvN9QU3}U~7!D zHM~l{kA|oT?O$?abxjs2aw|su31Cyzy*$#LGWy?iC$+?E5XI<76`ta4ykhx1W~DFc z^8H&w5I6$htb?Q%@ftnl0bb)Q$l0p{)rO@8sK`^6v)7EaNJ2G}1*LlmD|T}~H66qq zQ8t0(&*k5L7gh;}nN=D-_jD@LuGU)8iP-Sr3gmhg#k(e?ppf$vzBGs6aNC8=&;VoV#V-@?QZDSGi(|%Z3kvZVh|Tm=yj<1%GLolEyT?pe!pp zeRs!A)^rS{d~o&!4}n~(&)}Q3<~!XJz^m4IAd?6s*U*ZZ_OixZsPXF!L$TX-0v$Q3 zyPHgF`;h0)nH=s;osVWHqpqYxMfH7Q_KVo>oo01esIrk7c=+4bH!EL$^ED>FwDcET z^5%K05F$ht8c+L8<(5%$AU+n{I&j&c_Hjs}xzGTc&`sPJE?yeak(Mhx+mog&S-B}+ z7yR&h%qyrrwfQ_4(q!k{oMG^sX!M@#$otk~R!4-8O@s;A?+3&|HHXTDV!j3rtm|#0 z1MfVJ5lE(6XL*S~E?xNkfp%im;i$UqMPVOGPI8a0Nf)`hcP1 zLDiw-kuM}3&Tc-N2+>}Aw3CPVNnw|Ohtr@&0)lMH1HbmJ-@NziPB7^>4g<(gRcvI? zKuK9+j);&tj6C*K8_A_-O~-lO!K;=)+Ys#7}&DblGxIRpY|t-BA@q zZcj13-pgZr!2uI3*DrCL3x|5ysT}jYsc#Aod167Wbrq=asw9}7+;N&_jIPA9OsbKG zJgx^W_okf(uD%fBUb0XUc0iNClHu%g`6o=NXsAJ?!%7`|Q6J1(Rmg%6q}2U*>ky3& z!T?kdXd$F;ZJww=A|~(X%V^!yRp$QSBap@>pig(Xygah6R6`%IG0S7UWANKBNr>EKc!uUH{({Fex9UVgUON&G28htC%&Pbu=vz=fsjzPh=!{!S8M# zCbB(p3H=!XNp8)e2|C-@q?xc+BTd-9t`{0U`qpd%Z9Q``ZuuNgY**0ath+Um!qduK znHQ42-*!}4L*&F(UBNl@j0w*h=0*ox<5Du&)a8+W6>>UyH$;=B+fA$I*i2eup?XJRMm=oNLP$>g6yn3DVVZKCV$ zO$Lhcir>GOD}YeCf*=Ty9X!fFO0*o2eLa!aR`TTh7A4sVpDs8->sFKL+TYf)94%eS znM#GjGS=2VV?$>7aKI#4-b!)`eD?S>~-;i9OX(ZEaHj3 z^!e5`W!`b(USS!MTrl~!sEMyYvCcCu(aX(NqreA#^4j~sDwqNWHz~UB-s()9YE253 zC$!vMt&uuP!VHhtNkmTgaCHO_M3It1e_lh*2^j}FjskE{CSsRF_?pQBR2#OjWrp2^ zzXgq~>=nS8+}ZmlhtSs-TzY>!xCkEoCyHIyPwwpY4KY&(Q~0%qjBYwS)B{qYYv2zo zb`_~$Mhfqa>j;ORbYe6?Z7`Pj!hR1HBAa%5<1Y;E9{P{CHCGGvd&4qrLs35K7bo(@ ze@D^ZU1e$Nw5}}( zhp;r{>*k(W^RMR&#HTVO9vI{lOh&0iN9uGIr5DVmh++|HW^Q*pJzu## zt5jnQSz~F&>}|g9FHKhoy#FlMwLn-bN6M;Z1$WfGU;od7uxWsZjvCVN7k&^(dd1{{TRI+5-Rp literal 0 HcmV?d00001 diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_plugin.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_plugin.cpp index d6403592d..8344b5217 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_plugin.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/log/log_plugin.cpp @@ -1,5 +1,4 @@ -// Object Viewer Qt - MMORPG Framework -// Copyright (C) 2010 Winch Gate Property Limited +// Object Viewer Qt - Log Plugin - MMORPG Framework // Copyright (C) 2011 Adrian Jaekel // // This program is free software: you can redistribute it and/or modify