From a290dcf3b8b3a11618bc6db1e55c3464a2800533 Mon Sep 17 00:00:00 2001 From: cemycc Date: Fri, 29 Apr 2011 22:58:59 +0300 Subject: [PATCH 02/14] Create directory for the Translation Manager plugin --- .../object_viewer_qt/src/plugins/translation_manager/README | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/README diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/README b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/README new file mode 100644 index 000000000..b182bfdcf --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/README @@ -0,0 +1,5 @@ +Translation Manager Plugin +-------------------------- +GSoC 2011 Project +http://dev.ryzom.com/wiki/ryzom/OVQTTranslationPluginGSoc2011 + From 0792442a6e97094a8422b4820c75044a36682d27 Mon Sep 17 00:00:00 2001 From: cemycc Date: Wed, 25 May 2011 00:06:07 +0300 Subject: [PATCH 03/14] first stage for my plugin --- .../tools/3d/object_viewer_qt/src/plugins/CMakeLists.txt | 3 ++- .../src/plugins/object_viewer/scheme_manager.h | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) 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..125c0c8c4 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 @@ -4,4 +4,5 @@ ADD_SUBDIRECTORY(ovqt_sheet_builder) 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(translation_manager) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/scheme_manager.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/scheme_manager.h index 01a2abb35..7b06734f2 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/scheme_manager.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/object_viewer/scheme_manager.h @@ -27,8 +27,8 @@ namespace NL3D { class CPSAttribMakerBase; } - -namespace NLQT + +namespace NLQT { class CSchemeManager @@ -51,11 +51,11 @@ public: // rename a scheme, given a pointer on it void rename(NL3D::CPSAttribMakerBase *am, const std::string &newName); protected: - typedef std::pair TSchemeInfo; + // typedef std::pair TSchemeInfo; typedef std::multimap TSchemeMap; TSchemeMap _SchemeMap; }; } /* namespace NLQT */ -#endif \ No newline at end of file +#endif From a8a9db21f295456f52af7d692a0f0c46dbbaaa9e Mon Sep 17 00:00:00 2001 From: cemycc Date: Wed, 25 May 2011 00:07:32 +0300 Subject: [PATCH 04/14] first stage for my plugin --- .../translation_manager/CMakeLists.txt | 41 ++++ .../translation_manager/qnel_widget.cpp | 197 ++++++++++++++++++ .../plugins/translation_manager/qnel_widget.h | 130 ++++++++++++ .../translation_manager/simple_viewer.cpp | 54 +++++ .../translation_manager/simple_viewer.h | 54 +++++ .../translation_manager_plugin.cpp | 122 +++++++++++ .../translation_manager_plugin.h | 94 +++++++++ .../translation_manager_settings_page.cpp | 67 ++++++ .../translation_manager_settings_page.h | 58 ++++++ .../translation_manager_settings_page.ui | 92 ++++++++ 10 files changed, 909 insertions(+) create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/qnel_widget.cpp create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/qnel_widget.h create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.cpp create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.h create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.h create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt new file mode 100644 index 000000000..ce85c682e --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt @@ -0,0 +1,41 @@ +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_PLUG_TRANSLATION_MANAGER_HDR translation_manager_plugin.h + qnel_widget.h + simple_viewer.h + translation_manager_settings_page.h) + +SET(OVQT_PLUG_TRANSLATION_MANAGER_UIS translation_manager_settings_page.ui) + +SET(QT_USE_QTGUI TRUE) +SET(QT_USE_QTOPENGL TRUE) + +QT4_WRAP_CPP(OVQT_PLUG_TRANSLATION_MANAGER_MOC_SRC ${OVQT_PLUG_TRANSLATION_MANAGER_HDR}) +QT4_WRAP_UI(OVQT_PLUG_TRANSLATION_MANAGER_UI_HDRS ${OVQT_PLUG_TRANSLATION_MANAGER_UIS}) + +SOURCE_GROUP(QtResources FILES ${OVQT_PLUG_TRANSLATION_MANAGER_UIS}) +SOURCE_GROUP(QtGeneratedUiHdr FILES ${OVQT_PLUG_TRANSLATION_MANAGER_UI_HDRS}) +SOURCE_GROUP(QtGeneratedMocSrc FILES ${OVQT_PLUG_TRANSLATION_MANAGER_MOC_SRC}) +SOURCE_GROUP("Translation Manager Plugin" FILES ${SRC}) +SOURCE_GROUP("OVQT Extension System" FILES ${OVQT_EXT_SYS_SRC}) + +ADD_LIBRARY(ovqt_plugin_translation_manager MODULE ${SRC} ${OVQT_PLUG_TRANSLATION_MANAGER_MOC_SRC} ${OVQT_EXT_SYS_SRC} ${OVQT_PLUG_TRANSLATION_MANAGER_UI_HDRS}) + +TARGET_LINK_LIBRARIES(ovqt_plugin_translation_manager ovqt_plugin_core nelmisc nel3d ${QT_LIBRARIES} ${QT_QTOPENGL_LIBRARY}) + +NL_DEFAULT_PROPS(ovqt_plugin_translation_manager "NeL, Tools, 3D: Object Viewer Qt Plugin: Translation Manager") +NL_ADD_RUNTIME_FLAGS(ovqt_plugin_translation_manager) +NL_ADD_LIB_SUFFIX(ovqt_plugin_translation_manager) + +ADD_DEFINITIONS(${LIBXML2_DEFINITIONS} -DQT_PLUGIN -DQT_SHARED ${QT_DEFINITIONS}) + +INSTALL(TARGETS ovqt_plugin_translation_manager LIBRARY DESTINATION lib RUNTIME DESTINATION bin ARCHIVE DESTINATION lib COMPONENT tools3d) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/qnel_widget.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/qnel_widget.cpp new file mode 100644 index 000000000..9a67abb80 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/qnel_widget.cpp @@ -0,0 +1,197 @@ +// 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 . + +#include "qnel_widget.h" + +// STL includes + +// Qt includes +#include +#include + +// NeL includes +#include +#include +#include +#include + +namespace NLQT +{ + +QNLWidget::QNLWidget(QWidget *parent) + : QNeLWidget(parent), + m_driver(NULL), + m_initialized(false), + m_interval(25) +{ + setMouseTracking(true); + setFocusPolicy(Qt::StrongFocus); + + init(); +#ifdef Q_OS_LINUX + makeCurrent(); +#endif + m_mainTimer = new QTimer(this); + connect(m_mainTimer, SIGNAL(timeout()), this, SLOT(updateRender())); +} + +QNLWidget::~QNLWidget() +{ + release(); +} + +void QNLWidget::init() +{ + // create the driver + m_driver = NL3D::UDriver::createDriver(NULL, false, NULL); + nlassert(m_driver); + + // initialize the nel 3d viewport + m_driver->setDisplay((nlWindow)winId(), NL3D::UDriver::CMode(width(), height(), 32)); + + // set the cache size for the font manager(in bytes) + m_driver->setFontManagerMaxMemory(2097152); + + m_initialized = true; +} + +void QNLWidget::release() +{ + m_mainTimer->stop(); + delete m_mainTimer; + if (m_initialized) + { + m_driver->release(); + delete m_driver; + m_driver = NULL; + } +} + +void QNLWidget::setInterval(int msec) +{ + m_interval = msec; + m_mainTimer->setInterval(msec); +} + +void QNLWidget::setBackgroundColor(NLMISC::CRGBA backgroundColor) +{ + m_backgroundColor = backgroundColor; +} + +void QNLWidget::updateRender() +{ + if (isVisible()) + { + if (m_initialized) + m_driver->EventServer.pump(); + Q_EMIT updateData(); + + // Calc FPS + static sint64 lastTime = NLMISC::CTime::getPerformanceTime (); + sint64 newTime = NLMISC::CTime::getPerformanceTime (); + m_fps = float(1.0 / NLMISC::CTime::ticksToSecond (newTime-lastTime)); + lastTime = newTime; + + if (m_initialized && !m_driver->isLost()) + { + //_driver->activate(); + m_driver->clearBuffers(m_backgroundColor); + Q_EMIT updatePreRender(); + + Q_EMIT updatePostRender(); + // swap 3d buffers + m_driver->swapBuffers(); + } + } +} + +void QNLWidget::showEvent(QShowEvent *showEvent) +{ + QWidget::showEvent(showEvent); + m_driver->activate(); + m_mainTimer->start(m_interval); +} + +void QNLWidget::hideEvent(QHideEvent *hideEvent) +{ + m_mainTimer->stop(); + QWidget::hideEvent(hideEvent); +} + +#if defined(NL_OS_WINDOWS) + +typedef bool (*winProc)(NL3D::IDriver *driver, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); + +bool QNLWidget::winEvent(MSG *message, long *result) +{ + if (m_driver && m_driver->isActive()) + { + NL3D::IDriver *driver = dynamic_cast(m_driver)->getDriver(); + if (driver) + { + winProc proc = (winProc)driver->getWindowProc(); + return proc(driver, message->hwnd, message->message, message->wParam, message->lParam); + } + } + + return false; +} + +#elif defined(NL_OS_MAC) + +typedef bool (*cocoaProc)(NL3D::IDriver *, const void *e); + +bool QNLWidget::macEvent(EventHandlerCallRef caller, EventRef event) +{ + if(caller) + nlerror("You are using QtCarbon! Only QtCocoa supported, please upgrade Qt"); + + if (m_driver && m_driver->isActive()) + { + NL3D::IDriver *driver = dynamic_cast(m_driver)->getDriver(); + if (driver) + { + cocoaProc proc = (cocoaProc)driver->getWindowProc(); + return proc(driver, event); + } + } + + return false; +} + +#elif defined(NL_OS_UNIX) + +typedef bool (*x11Proc)(NL3D::IDriver *drv, XEvent *e); + +bool QNLWidget::x11Event(XEvent *event) +{ + if (m_driver && m_driver->isActive()) + { + NL3D::IDriver *driver = dynamic_cast(m_driver)->getDriver(); + if (driver) + { + x11Proc proc = (x11Proc)driver->getWindowProc(); + return proc(driver, event); + } + } + + return false; +} +#endif + +} /* namespace NLQT */ + diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/qnel_widget.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/qnel_widget.h new file mode 100644 index 000000000..a54e6bb8a --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/qnel_widget.h @@ -0,0 +1,130 @@ +// 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 QNEL_WIDGET_H +#define QNEL_WIDGET_H + +// NeL includes +#include +#include +#include + +// Qt includes +#include +#include + +class QAction; + +/* TODO every platform should use QWidget */ +#if defined(NL_OS_WINDOWS) +typedef QWidget QNeLWidget; +#elif defined(NL_OS_MAC) +typedef QWidget QNeLWidget; +#elif defined(NL_OS_UNIX) +typedef QGLWidget QNeLWidget; +#endif // NL_OS_UNIX + +namespace NL3D +{ +class UDriver; +class UScene; +} + +namespace NLQT +{ + +/** +@class QNLWidget +@brief Responsible for interaction between Qt and NeL. +@details Automatically begins to update the render if the widget is visible +or suspends the updating of render if the widget is hidden. +*/ +class QNLWidget : public QNeLWidget +{ + Q_OBJECT + +public: + QNLWidget(QWidget *parent); + virtual ~QNLWidget(); + + /// Set the update interval renderer + void setInterval(int msec); + + /// Set the background color. + void setBackgroundColor(NLMISC::CRGBA backgroundColor); + + float fps() const + { + return m_fps; + } + + inline NLMISC::CRGBA backgroundColor() const + { + return m_backgroundColor; + } + + NL3D::UDriver *driver() const + { + return m_driver; + } + + virtual QPaintEngine* paintEngine() const + { + return NULL; + } +Q_SIGNALS: + void updateData(); + void updatePreRender(); + void updatePostRender(); + +private Q_SLOTS: + void updateRender(); + +protected: + virtual void showEvent(QShowEvent *showEvent); + virtual void hideEvent(QHideEvent *hideEvent); + +#if defined(NL_OS_WINDOWS) + virtual bool winEvent(MSG *message, long *result); +#elif defined(NL_OS_MAC) + virtual bool macEvent(EventHandlerCallRef caller, EventRef event); +#elif defined(NL_OS_UNIX) + virtual bool x11Event(XEvent *event); +#endif + +private: + void init(); + void release(); + + QNLWidget(const QNLWidget &); + QNLWidget &operator=(const QNLWidget &); + + NL3D::UDriver *m_driver; + NLMISC::CRGBA m_backgroundColor; + + QTimer *m_mainTimer; + + bool m_initialized; + int m_interval; + float m_fps; + +}; /* class QNLWidget */ + +} /* namespace NLQT */ + + +#endif // QNEL_WIDGET_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.cpp new file mode 100644 index 000000000..e128710c4 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.cpp @@ -0,0 +1,54 @@ +// 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 . + +#include "simple_viewer.h" + +// Qt includes +#include +#include +#include + +// NeL includes + +// Project includes + +namespace Plugin +{ + +CSimpleViewer::CSimpleViewer(QWidget *parent) + : QWidget(parent) +{ + QGridLayout *gridLayout = new QGridLayout(this); + gridLayout->setObjectName(QString::fromUtf8("gridLayoutSimpleViewer")); + gridLayout->setContentsMargins(0, 0, 0, 0); + NLQT::QNLWidget *_nelWidget = new NLQT::QNLWidget(this); + gridLayout->addWidget(_nelWidget, 0, 0, 1, 1); +} + +bool CCoreListener::closeMainWindow() const +{ + int ret = QMessageBox::question(0, tr("Example close event hook"), + tr("Do you want to close window?"), + QMessageBox::Yes | QMessageBox::No); + + if (ret == QMessageBox::Yes) + return true; + else + return false; +} + +} /* namespace Plugin */ \ No newline at end of file diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.h new file mode 100644 index 000000000..bbff7e9e0 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.h @@ -0,0 +1,54 @@ +// 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 SIMPLE_VIEWER_H +#define SIMPLE_VIEWER_H + +// Project includes +#include "qnel_widget.h" +#include "../core/icore_listener.h" + +// Qt includes +#include + +class QWidget; + +namespace Plugin +{ + +class CSimpleViewer : public QWidget +{ + Q_OBJECT +public: + CSimpleViewer(QWidget *parent = 0); + virtual ~CSimpleViewer() {} +}; + +class CCoreListener : public Core::ICoreListener +{ + Q_OBJECT +public: + CCoreListener(QObject *parent = 0): ICoreListener(parent) {} + virtual ~CCoreListener() {} + + virtual bool closeMainWindow() const; +}; + +} // namespace Plugin + +#endif // SIMPLE_VIEWER_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp new file mode 100644 index 000000000..6140a3985 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp @@ -0,0 +1,122 @@ +// Project includes +#include "translation_manager_plugin.h" +#include "translation_manager_settings_page.h" +#include "simple_viewer.h" +// Project system includes +#include "../core/icore.h" +#include "../core/core_constants.h" +#include "../core/imenu_manager.h" +#include "../../extension_system/iplugin_spec.h" + +// NeL includes +#include "nel/misc/debug.h" + +// Qt includes +#include +#include +#include +#include +#include +#include + +namespace Plugin +{ +TranslationManagerPlugin::~TranslationManagerPlugin() +{ + Q_FOREACH(QObject *obj, _autoReleaseObjects) + { + _plugMan->removeObject(obj); + } + qDeleteAll(_autoReleaseObjects); + _autoReleaseObjects.clear(); +} + +bool TranslationManagerPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString) +{ + Q_UNUSED(errorString); + _plugMan = pluginManager; + + addAutoReleasedObject(new CTranslationManagerSettingsPage(this)); + addAutoReleasedObject(new CTranslationManagerContext(this)); + addAutoReleasedObject(new CCoreListener(this)); + return true; +} + +void TranslationManagerPlugin::extensionsInitialized() +{ + Core::ICore *core = Core::ICore::instance(); + Core::IMenuManager *menuManager = core->menuManager(); + //menuManager = _plugMan->getObject(); + // Menu Actions for plugin + QAction *aboutTManPlugin = new QAction("Translation Manager", this); + // Locations + QMenu *helpMenu = menuManager->menu(Core::Constants::M_HELP); + QAction *aboutQtAction = menuManager->action(Core::Constants::ABOUT_QT); + helpMenu->addSeparator(); + helpMenu->insertAction(aboutQtAction, aboutTManPlugin); + menuManager->menuBar()->addMenu("Translation Manager"); +} + +void TranslationManagerPlugin::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 + _LibContext = new NLMISC::CLibraryContext(*nelContext); +} + +QString TranslationManagerPlugin::name() const +{ + return "Translation Manager"; +} + +QString TranslationManagerPlugin::version() const +{ + return "0.1"; +} + +QString TranslationManagerPlugin::vendor() const +{ + return "cemycc"; +} + +QString TranslationManagerPlugin::description() const +{ + return "OVQT plugin for translation files."; +} + +QStringList TranslationManagerPlugin::dependencies() const +{ + QStringList list; + list.append(Core::Constants::OVQT_CORE_PLUGIN); + list.append("ObjectViewer"); + return list; +} + +void TranslationManagerPlugin::addAutoReleasedObject(QObject *obj) +{ + _plugMan->addObject(obj); + _autoReleaseObjects.prepend(obj); +} + +QObject* TranslationManagerPlugin::objectByName(const QString &name) const +{ + Q_FOREACH (QObject *qobj, _plugMan->allObjects()) + if (qobj->objectName() == name) + return qobj; + return 0; +} + +ExtensionSystem::IPluginSpec *TranslationManagerPlugin::pluginByName(const QString &name) const +{ + Q_FOREACH (ExtensionSystem::IPluginSpec *spec, _plugMan->plugins()) + if (spec->name() == name) + return spec; + return 0; +} + +} + +Q_EXPORT_PLUGIN(Plugin::TranslationManagerPlugin) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h new file mode 100644 index 000000000..c1bfc2548 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h @@ -0,0 +1,94 @@ +#ifndef TRANSLATION_MANAGER_PLUGIN_H +#define TRANSLATION_MANAGER_PLUGIN_H + +// Project includes +#include "../../extension_system/iplugin.h" +#include "../core/icontext.h" +#include "simple_viewer.h" + +// NeL includes +#include "nel/misc/app_context.h" + +// Qt includes +#include +#include + +namespace NLMISC +{ +class CLibraryContext; +} + +namespace ExtensionSystem +{ +class IPluginSpec; +} + +namespace Plugin +{ + +class TranslationManagerPlugin : public QObject, public ExtensionSystem::IPlugin +{ + Q_OBJECT + Q_INTERFACES(ExtensionSystem::IPlugin) +public: + + virtual ~TranslationManagerPlugin(); + + bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString); + void extensionsInitialized(); + + void setNelContext(NLMISC::INelContext *nelContext); + + QString name() const; + QString version() const; + QString vendor() const; + QString description() const; + QStringList dependencies() const; + + void addAutoReleasedObject(QObject *obj); + + QObject *objectByName(const QString &name) const; + ExtensionSystem::IPluginSpec *pluginByName(const QString &name) const; + +protected: + NLMISC::CLibraryContext *_LibContext; + +private: + ExtensionSystem::IPluginManager *_plugMan; + QList _autoReleaseObjects; +}; + +class CTranslationManagerContext: public Core::IContext +{ + Q_OBJECT +public: + CTranslationManagerContext(QObject *parent = 0): IContext(parent) + { + m_simpleViewer = new CSimpleViewer(); + } + + virtual ~CTranslationManagerContext() {} + + virtual QString id() const + { + return QLatin1String("TranslationManagerContext"); + } + virtual QString trName() const + { + return tr("Translation Manager"); + } + virtual QIcon icon() const + { + return QIcon(); + } + virtual QWidget *widget() + { + return m_simpleViewer; + } + + CSimpleViewer *m_simpleViewer; +}; + +} // namespace Plugin + +#endif // TRANSLATION_MANAGER_PLUGIN_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp new file mode 100644 index 000000000..c3e4883d4 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp @@ -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 . + +#include "translation_manager_settings_page.h" + +// Qt includes +#include + +// NeL includes + +// Project includes + +namespace Plugin +{ + +CTranslationManagerSettingsPage::CTranslationManagerSettingsPage(QObject *parent) + : IOptionsPage(parent), + _currentPage(NULL) +{ +} + +QString CTranslationManagerSettingsPage::id() const +{ + return QLatin1String("TranslationManagerPage"); +} + +QString CTranslationManagerSettingsPage::trName() const +{ + return tr("Translation Manager page"); +} + +QString CTranslationManagerSettingsPage::category() const +{ + return QLatin1String("General"); +} + +QString CTranslationManagerSettingsPage::trCategory() const +{ + return tr("General"); +} + +QWidget *CTranslationManagerSettingsPage::createPage(QWidget *parent) +{ + _currentPage = new QWidget(parent); + _ui.setupUi(_currentPage); + return _currentPage; +} + +void CTranslationManagerSettingsPage::apply() +{ +} + +} /* namespace Plugin */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.h new file mode 100644 index 000000000..53f9068e1 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.h @@ -0,0 +1,58 @@ +// 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 TRANSLATION_MANAGER_SETTINGS_PAGE_H +#define TRANSLATION_MANAGER_SETTINGS_PAGE_H + +#include + +#include "../core/ioptions_page.h" + +#include "ui_translation_manager_settings_page.h" + +class QWidget; + +namespace Plugin +{ +/** +@class CTranslationManagerSettingsPage +*/ +class CTranslationManagerSettingsPage : public Core::IOptionsPage +{ + Q_OBJECT +public: + CTranslationManagerSettingsPage(QObject *parent = 0); + virtual ~CTranslationManagerSettingsPage() {} + + virtual QString id() const; + virtual QString trName() const; + virtual QString category() const; + virtual QString trCategory() const; + virtual QWidget *createPage(QWidget *parent); + + virtual void apply(); + virtual void finish() {} + +private: + QWidget *_currentPage; + Ui::CTranslationManagerSettingsPage _ui; +}; + +} // namespace Plugin + +#endif // TRANSLATION_MANAGER_SETTINGS_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui new file mode 100644 index 000000000..951be0615 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui @@ -0,0 +1,92 @@ + + + CTranslationManagerSettingsPage + + + + 0 + 0 + 458 + 479 + + + + Form + + + + 0 + + + + + GroupBox + + + + + + PushButton + + + + + + + + + + PushButton + + + + + + + RadioButton + + + + + + + RadioButton + + + + + + + CheckBox + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + + + + + + + From d1da62ce4ae1f16a142ed79bbefad55ba37751ce Mon Sep 17 00:00:00 2001 From: cemycc Date: Mon, 30 May 2011 20:56:22 +0300 Subject: [PATCH 05/14] Changed: #1307 Added extract bot names and UI dialog for plugin settings. --- .../translation_manager/CMakeLists.txt | 2 +- .../translation_manager/extract_bot_names.cpp | 756 ++++++++++++++++++ .../translation_manager_plugin.cpp | 47 +- .../translation_manager_plugin.h | 8 + .../translation_manager_settings_page.cpp | 243 ++++++ .../translation_manager_settings_page.h | 16 +- .../translation_manager_settings_page.ui | 485 ++++++++--- 7 files changed, 1462 insertions(+), 95 deletions(-) create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt index ce85c682e..827db7487 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt @@ -30,7 +30,7 @@ SOURCE_GROUP("OVQT Extension System" FILES ${OVQT_EXT_SYS_SRC}) ADD_LIBRARY(ovqt_plugin_translation_manager MODULE ${SRC} ${OVQT_PLUG_TRANSLATION_MANAGER_MOC_SRC} ${OVQT_EXT_SYS_SRC} ${OVQT_PLUG_TRANSLATION_MANAGER_UI_HDRS}) -TARGET_LINK_LIBRARIES(ovqt_plugin_translation_manager ovqt_plugin_core nelmisc nel3d ${QT_LIBRARIES} ${QT_QTOPENGL_LIBRARY}) +TARGET_LINK_LIBRARIES(ovqt_plugin_translation_manager ovqt_plugin_core nelmisc nel3d nelligo nelgeorges ${QT_LIBRARIES} ${QT_QTOPENGL_LIBRARY}) NL_DEFAULT_PROPS(ovqt_plugin_translation_manager "NeL, Tools, 3D: Object Viewer Qt Plugin: Translation Manager") NL_ADD_RUNTIME_FLAGS(ovqt_plugin_translation_manager) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp new file mode 100644 index 000000000..75a97d3bb --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp @@ -0,0 +1,756 @@ +// Ryzom - MMORPG Framework +// Copyright (C) 2010 Winch Gate Property Limited +// +// 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 . + +#include "nel/misc/types_nl.h" +#include "nel/misc/config_file.h" +#include "nel/misc/sheet_id.h" +#include "nel/misc/path.h" +#include "nel/misc/diff_tool.h" +#include "nel/georges/u_form.h" +#include "nel/georges/u_form_elm.h" +#include "nel/georges/load_form.h" +#include "nel/ligo/ligo_config.h" +#include "nel/ligo/primitive.h" +#include "nel/ligo/primitive_utils.h" + +using namespace std; +using namespace NLMISC; +using namespace NLLIGO; +using namespace STRING_MANAGER; + +vector Filters; + +static CLigoConfig LigoConfig; +static bool RemoveOlds = false; + +struct TCreatureInfo +{ + CSheetId SheetId; + bool ForceSheetName; + bool DisplayName; + + + void readGeorges (const NLMISC::CSmartPtr &form, const NLMISC::CSheetId &sheetId) + { + const NLGEORGES::UFormElm &item=form->getRootNode(); + + SheetId=sheetId; + item.getValueByName(ForceSheetName, "3d data.ForceDisplayCreatureName"); + item.getValueByName(DisplayName, "3d data.DisplayName"); + } + + void serial(NLMISC::IStream &f) + { + f.serial(SheetId); + f.serial(ForceSheetName); + f.serial(DisplayName); + } + + + static uint getVersion () + { + return 1; + } + + void removed() + { + } + +}; + +std::map Creatures; + +TCreatureInfo *getCreature(const std::string &sheetName) +{ + CSheetId id(sheetName+".creature"); + + if (Creatures.find(id) != Creatures.end()) + return &(Creatures.find(id)->second); + else + return NULL; +} + +string cleanupName(const std::string &name) +{ + string ret; + + for (uint i=0; i= 2) + { + if ( *ret.begin() == ucchar('$')) + { + ret=ret.substr(1); + } + if ( *ret.rbegin() == ucchar('$')) + { + ret = ret.substr(0, ret.size()-1); + } + } + ret = cleanupUcName(ret); + return ret; +} + +struct TEntryInfo +{ + string SheetName; +}; + +set GenericNames; +map SimpleNames; +set Functions; + + +string removeAndStoreFunction(const std::string &fullName) +{ + string::size_type pos = fullName.find("$"); + if (pos == string::npos) + return fullName; + else + { + // extract and store the function name + string ret; + + ret = fullName.substr(0, pos); + string::size_type pos2 = fullName.find("$", pos+1); + + string fct = fullName.substr(pos+1, pos2-(pos+1)); + + ret += fullName.substr(pos2+1); + + if (Functions.find(fct) == Functions.end()) + { + nldebug("Adding function '%s'", fct.c_str()); + Functions.insert(fct); + } + + return ret; + } +} + + +void addGenericName(const std::string &name, const std::string &sheetName) +{ + TCreatureInfo *c = getCreature(sheetName); + if (!c || c->ForceSheetName || !c->DisplayName) + return; + + if (SimpleNames.find(name) != SimpleNames.end()) + { + nldebug("Name '%s' is now a generic name", name.c_str()); + GenericNames.insert(name); + SimpleNames.erase(name); + + } + else if (GenericNames.find(name) == GenericNames.end()) + { + nldebug("Adding generic name '%s'", name.c_str()); + GenericNames.insert(name); + } +} + +void addSimpleName(const std::string &name, const std::string &sheetName) +{ + TCreatureInfo *c = getCreature(sheetName); + if (!c || c->ForceSheetName || !c->DisplayName) + return; + + if (SimpleNames.find(name) != SimpleNames.end()) + { + addGenericName(name, sheetName); + } + else if (GenericNames.find(name) != GenericNames.end()) + { + return; + } + else + { + nldebug("Adding simple name '%s'", name.c_str()); + + TEntryInfo ei; + ei.SheetName = sheetName; + + SimpleNames.insert(make_pair(name, ei)); + } +} + +int extractBotNamesAll(map > config_paths, string ligo_class_file, string trans_path, string work_path) +{ + //------------------------------------------------------------------- + // read the parameters + /*for (int i=2; i::iterator it = config_paths["paths"].begin(); it != config_paths["paths"].end(); ++it) + { + CPath::addSearchPath(*it, true, false); + } + for (std::list::iterator it = config_paths["pathsR"].begin(); it != config_paths["pathsR"].end(); ++it) + { + CPath::addSearchPath(*it, false, false); + } + + for (std::list::iterator it = config_paths["filters"].begin(); it != config_paths["filters"].end(); ++it) + { + Filters.push_back(*it); + } + + + //------------------------------------------------------------------- + // init the sheets + CSheetId::init(false); + const string PACKED_SHEETS_NAME = "bin/translation_tools_creature.packed_sheets"; + loadForm("creature", PACKED_SHEETS_NAME, Creatures, false, false); + + if (Creatures.empty()) + { + for (std::list::iterator it = config_paths["georges"].begin(); it != config_paths["georges"].end(); ++it) + CPath::addSearchPath((*it).c_str(), true, false); + + loadForm("creature", PACKED_SHEETS_NAME, Creatures, true); + } + + + //------------------------------------------------------------------- + // init ligo config + string ligoPath = CPath::lookup(ligo_class_file, true, true); + LigoConfig.readPrimitiveClass(ligoPath.c_str(), false); + NLLIGO::Register(); + + CPrimitiveContext::instance().CurrentLigoConfig = &LigoConfig; + + //------------------------------------------------------------------- + // ok, ready for the real work, + // first, read the primitives files and parse the primitives + vector files; + CPath::getFileList("primitive", files); + + for (uint i=0; i ps; + ps.buildSet(primDoc.RootNode, pred, result); + + for (uint i=0; igetPropertyByName("name", name); + result[i]->getPropertyByName("count", countStr); + result[i]->getPropertyByName("bot_sheet_look", sheetStr); + + uint32 count; + NLMISC::fromString(countStr, count); + + if (count != 0) + { + if (sheetStr.empty()) + { + nlwarning("In '%s', empty sheet !", buildPrimPath(result[i]).c_str()); + } + else + { + addGenericName(removeAndStoreFunction(name), sheetStr); + } + } + } + } + // look for bot template + { + TPrimitiveClassPredicate pred("bot_template_npc"); + TPrimitiveSet result; + + CPrimitiveSet ps; + ps.buildSet(primDoc.RootNode, pred, result); + + for (uint i=0; igetPropertyByName("name", name); + result[i]->getPropertyByName("sheet_look", sheetStr); + + if (sheetStr.empty()) + { + // take the sheet in the parent + result[i]->getParent()->getPropertyByName("bot_sheet_look", sheetStr); + } + + if (sheetStr.empty()) + { + nlwarning("In '%s', empty sheet !", buildPrimPath(result[i]).c_str()); + } + else + { + addGenericName(removeAndStoreFunction(name), sheetStr); + } + } + } + // look for npc_group + { + TPrimitiveClassPredicate pred("npc_group"); + TPrimitiveSet result; + + CPrimitiveSet ps; + ps.buildSet(primDoc.RootNode, pred, result); + + for (uint i=0; igetPropertyByName("name", name); + result[i]->getPropertyByName("count", countStr); + result[i]->getPropertyByName("bot_sheet_client", sheetStr); + + uint32 count; + NLMISC::fromString(countStr, count); + + if (count > 0 && sheetStr.empty()) + { + nlwarning("In '%s', empty sheet !", buildPrimPath(result[i]).c_str()); + } + else + { + if (count == 1) + { + addSimpleName(removeAndStoreFunction(name), sheetStr); + } + else if (count > 1) + { + addGenericName(removeAndStoreFunction(name), sheetStr); + } + } + } + } + // look for bot + { + TPrimitiveClassPredicate pred("npc_bot"); + TPrimitiveSet result; + + CPrimitiveSet ps; + ps.buildSet(primDoc.RootNode, pred, result); + + for (uint i=0; igetPropertyByName("name", name); + result[i]->getPropertyByName("sheet_client", sheetStr); + + if (sheetStr.empty()) + { + // take the sheet in the parent + result[i]->getParent()->getPropertyByName("bot_sheet_client", sheetStr); + } + + if (sheetStr.empty()) + { + nlwarning("In '%s', empty sheet !", buildPrimPath(result[i]).c_str()); + } + else + { + TEntryInfo ei; + addSimpleName(removeAndStoreFunction(name), sheetStr); + } + } + } + } + + //------------------------------------------------------------------- + // step 2 : load the reference file + + nlinfo("Looking for missing translation:"); + + TWorksheet botNames; + loadExcelSheet(work_path, botNames, true); + TWorksheet transBotNames; + loadExcelSheet(trans_path, transBotNames, true); + + TWorksheet fcts; + loadExcelSheet(work_path, fcts, true); + + + // add missing element + + uint nbAddSimpleName = 0; + uint nbAddFunction = 0; + uint nbAddGenericName = 0; + + uint botIdCol; + nlverify(botNames.findId(botIdCol)); + uint transIdCol; + nlverify(transBotNames.findId(transIdCol)); + uint fctsIdCol; + nlverify(fcts.findId(fctsIdCol)); + + // special treatment to add the sheet_name col + { + uint sheetCol; + if (!botNames.findCol(ucstring("sheet_name"), sheetCol)) + { + botNames.insertColumn(botNames.ColCount); + botNames.setData(0, botNames.ColCount-1, ucstring("sheet_name")); + } + + if (!transBotNames.findCol(ucstring("sheet_name"), sheetCol)) + { + transBotNames.insertColumn(transBotNames.ColCount); + transBotNames.setData(0, transBotNames.ColCount-1, ucstring("sheet_name")); + } + } + // 1 - simple names + { + nlinfo(" Simple names..."); + + + map::iterator first(SimpleNames.begin()), last(SimpleNames.end()); + for (; first != last; ++first) + { + uint rowIdx; + if (!botNames.findRow(botIdCol, first->first, rowIdx)) + { + // we need to add the entry + rowIdx = botNames.size(); + botNames.resize(botNames.size()+1); + + botNames.setData(rowIdx, ucstring("bot name"), first->first); + botNames.setData(rowIdx, ucstring("translated name"), first->first); + botNames.setData(rowIdx, ucstring("sheet_name"), first->second.SheetName); + + nbAddSimpleName++; + } + else + { + // set/update the sheet name info + // try to restore the existing translation + uint transRowIdx; + if (transBotNames.findRow(transIdCol, first->first, transRowIdx)) + { + ucstring wkBotName = botNames.getData(rowIdx, ucstring("bot name")); + ucstring wkSheetName = botNames.getData(rowIdx, ucstring("sheet_name")); + ucstring wkTranslationName = botNames.getData(rowIdx, ucstring("translated name")); + ucstring ucWkHash; + uint64 hash = CI18N::makeHash(wkBotName + wkTranslationName +wkSheetName); + CI18N::hashToUCString(hash, ucWkHash); + ucstring trUcHash = transBotNames[transRowIdx][0]; + bool isWkTranslationNameAGroupName = wkTranslationName.find(ucstring("$")) != ucstring::npos; + bool hashIsValide = std::equal(ucWkHash.begin(), ucWkHash.end(), trUcHash.begin()+1); + // Hash is equal get the translation + if (hashIsValide && !isWkTranslationNameAGroupName) + { + wkTranslationName = transBotNames.getData(transRowIdx, ucstring("translated name")); + wkSheetName = transBotNames.getData(transRowIdx, ucstring("sheet_name")); + botNames.setData(rowIdx, ucstring("translated name"), wkTranslationName); + botNames.setData(rowIdx, ucstring("sheet_name"), wkSheetName); + hash = CI18N::makeHash(wkBotName + wkTranslationName + wkSheetName); + // update the hash code + CI18N::hashToUCString(hash, transBotNames[transRowIdx][0]); + } + // bots_name.txt has been manually changed. We trust what the Level Designer has done. We don't destroy is work. + // or it is a simple + else + { + //use the "translated name" of the manually changed work/bot_name.txt + botNames.setData(rowIdx, ucstring("translated name"), wkTranslationName); + botNames.setData(rowIdx, ucstring("sheet_name"), wkSheetName); + } + } + } + } + } + + // 2 - generic names + + { + nlinfo(" Generic names..."); + + set::iterator first(GenericNames.begin()), last(GenericNames.end()); + for (; first != last; ++first) + { + string gnName = "gn_" + cleanupName(*first); + + ucstring fctsTitleId; + ucstring fctsName; + // add or modify the bot names + uint rowIdx; + if (!botNames.findRow(botIdCol, *first, rowIdx)) + { + // we need to add the entry + rowIdx = botNames.size(); + botNames.resize(botNames.size()+1); + + botNames.setData(rowIdx, ucstring("bot name"), *first); + botNames.setData(rowIdx, ucstring("translated name"), ucstring("$") + gnName + "$"); + botNames.setData(rowIdx, ucstring("sheet_name"), ucstring()); + fctsTitleId = gnName; + fctsName = *first; + + nbAddSimpleName++; + } + else + { + // look in the translated table to remember the translated name to write it in the string file + ucstring wkBotName = botNames.getData(rowIdx, ucstring("bot name")); + ucstring wkTranslationName = botNames.getData(rowIdx, ucstring("translated name")); + ucstring wkSheetName = botNames.getData(rowIdx, ucstring("sheet_name")); + + + nlinfo("Bot name:%s\n",wkBotName.toString().c_str()); + bool isWkTranslationNameAGroupName = wkTranslationName.find(ucstring("$")) != ucstring::npos; + + if ( isWkTranslationNameAGroupName ) //work name looks like "$gn_***$: do not modify + { + + //Do not change work/bot_name.txt + // update work/world_title.txt + + ucstring transName; + fctsTitleId = makeGroupName(wkTranslationName); + uint transRowIdx; + if (transBotNames.findRow(transIdCol, *first, transRowIdx)) + { + transName = transBotNames.getData(transRowIdx, ucstring("translated name")); + + if (transName.find(ucstring("$")) != ucstring::npos) + { + transName = fctsTitleId; + } + } + else + { + transName = fctsTitleId; + } + //Do not touch anything + botNames.setData(rowIdx, ucstring("translated name"), wkTranslationName); + botNames.setData(rowIdx, ucstring("sheet_name"), wkSheetName); + // fctsTitleId = makeGroupName(wkTranslationName); + fctsName = transName; + + } + else // WkTranslationName != "$gn*$" + { + uint transRowIdx; + ucstring transName; + ucstring wkSheetName; + // Get the translation as a simple name. + if (transBotNames.findRow(transIdCol, *first, transRowIdx)) + { + + transName = transBotNames.getData(transRowIdx, ucstring("translated name")); + ucstring trSheetName = transBotNames.getData(transRowIdx, ucstring("sheet_name")); + + //tr."translation name" is + if (transName.find(ucstring("$")) != ucstring::npos) + { + //get Translation, update hash + botNames[rowIdx][1] = transName; + botNames[rowIdx][2] = trSheetName; + fctsTitleId = makeGroupName(transName); + fctsName = makeGroupName(transName); + ucstring trNewUcHash; + uint64 hash = CI18N::makeHash(wkBotName + transName +trSheetName); + CI18N::hashToUCString(hash, trNewUcHash); + transBotNames[transRowIdx][0] = ucstring("_") + trNewUcHash; + } + else //botNames."translated name" != $gn_$ && tansName."translated name" != $gn_$ + { + + // get the translation back + //update work/bot_name.txt + wkTranslationName = ucstring("$")+gnName+"$"; + botNames[rowIdx][0] = wkBotName; + botNames[rowIdx][1] = wkTranslationName; + botNames[rowIdx][2] = wkSheetName; + + //update translated/bot_name.txt + + fctsName = transName; //transName + fctsTitleId = gnName; + ucstring trNewUcHash; + uint64 hash = CI18N::makeHash(botNames[rowIdx][0] + botNames[rowIdx][1] +botNames[rowIdx][2]); + CI18N::hashToUCString(hash, trNewUcHash); + transBotNames[transRowIdx][0] = ucstring("_") + trNewUcHash; + } + + } + else //There is no translation yet + { + fctsName = wkTranslationName; + wkTranslationName = ucstring("$")+gnName+"$"; + botNames[rowIdx][0] = wkBotName; + botNames[rowIdx][1] = wkTranslationName; + botNames[rowIdx][2] = wkSheetName; + fctsTitleId = gnName; + + + } + } + + } + + + // look for a corresponding entry + uint gnNameRow; + + + if (!fcts.findRow(fctsIdCol, fctsTitleId, gnNameRow)) + { + + // not found, add it + gnNameRow = fcts.size(); + fcts.resize(fcts.size()+1); + fcts.setData(gnNameRow, ucstring("title_id"), fctsTitleId); + fcts.setData(gnNameRow, ucstring("name"), fctsName); + nbAddGenericName++; + + } + else //Update + { + + } + } + } + + + // 3 - functions + { + nlinfo(" Functions..."); + + set::iterator first(Functions.begin()), last(Functions.end()); + for (; first != last; ++first) + { + string fctName = *first; + // look for a corresponding entry + uint functionRow; + if (!fcts.findRow(fctsIdCol, fctName, functionRow)) + { + // not found, add it + functionRow = fcts.size(); + fcts.resize(fcts.size()+1); + + fcts.setData(functionRow, ucstring("title_id"), fctName); + fcts.setData(functionRow, ucstring("name"), *first); + + nbAddFunction++; + } + } + } + + // display resum\E9 + nlinfo("Adding %u new simple name", nbAddSimpleName); + nlinfo("Adding %u new generic name", nbAddGenericName); + nlinfo("Adding %u new function name", nbAddFunction); + + // saving the modified files + + ucstring s = prepareExcelSheet(botNames); + CI18N::writeTextFile(work_path, s, false); + s = prepareExcelSheet(transBotNames); + CI18N::writeTextFile(trans_path, s, false); + s = prepareExcelSheet(fcts); + CI18N::writeTextFile(work_path, s, false); + + return 0; +} + diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp index 6140a3985..233780ca5 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp @@ -19,6 +19,8 @@ #include #include +int extractBotNamesAll(map > config_paths, string ligo_class_file, string trans_path, string work_path); + namespace Plugin { TranslationManagerPlugin::~TranslationManagerPlugin() @@ -54,7 +56,39 @@ void TranslationManagerPlugin::extensionsInitialized() QAction *aboutQtAction = menuManager->action(Core::Constants::ABOUT_QT); helpMenu->addSeparator(); helpMenu->insertAction(aboutQtAction, aboutTManPlugin); - menuManager->menuBar()->addMenu("Translation Manager"); + QMenu *transMenu = menuManager->menuBar()->addMenu("Translation Manager"); + /* Words extraction*/ + QAction *botnamesAct = new QAction("Extract bot_names", this); + connect(botnamesAct, SIGNAL(triggered()), this, SLOT(extractBotNames())); + transMenu->addAction(botnamesAct); +} + +void TranslationManagerPlugin::extractBotNames() +{ + // prepare the config paths + list paths,pathsR, georges, filters, languages; + string ligo, translation, work; + map > config_paths; + + QSettings *settings = Core::ICore::instance()->settings(); + settings->beginGroup("translationmanager"); + + paths = ConvertQStringList(settings->value("paths").toStringList()); /* paths */ + config_paths["paths"] = paths; + pathsR = ConvertQStringList(settings->value("pathsR").toStringList()); /* pathsR */ + config_paths["pathsR"] = pathsR; + georges = ConvertQStringList(settings->value("georges").toStringList()); /* georges */ + config_paths["georges"] = georges; + filters = ConvertQStringList(settings->value("filters").toStringList()); /* filters */ + config_paths["filters"] = filters; + languages = ConvertQStringList(settings->value("languages").toStringList()); /* languages */ + ligo = settings->value("ligo").toString().toStdString(); + translation = settings->value("translation").toString().toStdString(); + work = settings->value("work").toString().toStdString(); + settings->endGroup(); + + extractBotNamesAll(config_paths, ligo, translation, work); + } void TranslationManagerPlugin::setNelContext(NLMISC::INelContext *nelContext) @@ -67,6 +101,17 @@ void TranslationManagerPlugin::setNelContext(NLMISC::INelContext *nelContext) _LibContext = new NLMISC::CLibraryContext(*nelContext); } +list TranslationManagerPlugin::ConvertQStringList(QStringList listq) +{ + std::list stdlist; + Q_FOREACH(QString text, listq) + { + stdlist.push_back(text.toStdString()); + } + + return stdlist; +} + QString TranslationManagerPlugin::name() const { return "Translation Manager"; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h index c1bfc2548..07bf0d434 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h @@ -13,6 +13,8 @@ #include #include +using namespace std; + namespace NLMISC { class CLibraryContext; @@ -56,6 +58,11 @@ protected: private: ExtensionSystem::IPluginManager *_plugMan; QList _autoReleaseObjects; + list ConvertQStringList(QStringList list); + + +private Q_SLOTS: + void extractBotNames(); }; class CTranslationManagerContext: public Core::IContext @@ -87,6 +94,7 @@ public: } CSimpleViewer *m_simpleViewer; + }; } // namespace Plugin diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp index c3e4883d4..b3a731ae5 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp @@ -18,15 +18,21 @@ #include "translation_manager_settings_page.h" // Qt includes +#include #include +#include +#include // NeL includes // Project includes +#include "../core/icore.h" namespace Plugin { +QString lastDir = "."; + CTranslationManagerSettingsPage::CTranslationManagerSettingsPage(QObject *parent) : IOptionsPage(parent), _currentPage(NULL) @@ -57,11 +63,248 @@ QWidget *CTranslationManagerSettingsPage::createPage(QWidget *parent) { _currentPage = new QWidget(parent); _ui.setupUi(_currentPage); + readSettings(); + connect(_ui.paths_add, SIGNAL(clicked()), this, SLOT(pathAdd())); + connect(_ui.paths_del, SIGNAL(clicked()), this, SLOT(pathDel())); + connect(_ui.pathsR_add, SIGNAL(clicked()), this, SLOT(pathRAdd())); + connect(_ui.pathsR_del, SIGNAL(clicked()), this, SLOT(pathRDel())); + connect(_ui.georges_add, SIGNAL(clicked()), this, SLOT(georgeAdd())); + connect(_ui.georges_del, SIGNAL(clicked()), this, SLOT(georgeDel())); + connect(_ui.filter_add, SIGNAL(clicked()), this, SLOT(filterAdd())); + connect(_ui.filter_del, SIGNAL(clicked()), this, SLOT(filterDel())); + connect(_ui.lang_add, SIGNAL(clicked()), this, SLOT(languageAdd())); + connect(_ui.lang_del, SIGNAL(clicked()), this, SLOT(languageDel())); + connect(_ui.translation_add, SIGNAL(clicked()), this, SLOT(translationAdd())); + connect(_ui.work_add, SIGNAL(clicked()), this, SLOT(workAdd())); + return _currentPage; } +void CTranslationManagerSettingsPage::pathAdd() +{ + QString newPath = QFileDialog::getExistingDirectory(_currentPage, "", lastDir); + if (!newPath.isEmpty()) + { + QListWidgetItem *newItem = new QListWidgetItem; + newItem->setText(newPath); + newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); + _ui.paths_list->addItem(newItem); + lastDir = newPath; + } +} + +void CTranslationManagerSettingsPage::pathDel() +{ + QListWidgetItem *removeItem = _ui.paths_list->takeItem(_ui.paths_list->currentRow()); + if (!removeItem) + delete removeItem; +} + +void CTranslationManagerSettingsPage::pathRAdd() +{ + QString newPath = QFileDialog::getExistingDirectory(_currentPage, "", lastDir); + if (!newPath.isEmpty()) + { + QListWidgetItem *newItem = new QListWidgetItem; + newItem->setText(newPath); + newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); + _ui.pathsR_list->addItem(newItem); + lastDir = newPath; + } +} + +void CTranslationManagerSettingsPage::pathRDel() +{ + QListWidgetItem *removeItem = _ui.pathsR_list->takeItem(_ui.pathsR_list->currentRow()); + if (!removeItem) + delete removeItem; +} + +void CTranslationManagerSettingsPage::georgeAdd() +{ + QString newPath = QFileDialog::getExistingDirectory(_currentPage, "", lastDir); + if (!newPath.isEmpty()) + { + QListWidgetItem *newItem = new QListWidgetItem; + newItem->setText(newPath); + newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); + _ui.georges_list->addItem(newItem); + lastDir = newPath; + } +} + +void CTranslationManagerSettingsPage::georgeDel() +{ + QListWidgetItem *removeItem = _ui.georges_list->takeItem(_ui.georges_list->currentRow()); + if (!removeItem) + delete removeItem; +} + +void CTranslationManagerSettingsPage::filterAdd() +{ + QString newValue = _ui.filter_edit->text(); + if (!newValue.isEmpty()) + { + QListWidgetItem *newItem = new QListWidgetItem; + newItem->setText(newValue); + newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); + _ui.filter_list->addItem(newItem); + } +} + +void CTranslationManagerSettingsPage::filterDel() +{ + QListWidgetItem *removeItem = _ui.filter_list->takeItem(_ui.filter_list->currentRow()); + if (!removeItem) + delete removeItem; +} + +void CTranslationManagerSettingsPage::languageAdd() +{ + QString newValue = _ui.lang_edit->text(); + if (!newValue.isEmpty()) + { + QListWidgetItem *newItem = new QListWidgetItem; + newItem->setText(newValue); + newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); + _ui.lang_list->addItem(newItem); + } +} + +void CTranslationManagerSettingsPage::languageDel() +{ + QListWidgetItem *removeItem = _ui.lang_list->takeItem(_ui.lang_list->currentRow()); + if (!removeItem) + delete removeItem; +} + +void CTranslationManagerSettingsPage::translationAdd() +{ + QString newPath = QFileDialog::getExistingDirectory(_currentPage, ""); + if (!newPath.isEmpty()) + { + _ui.translation_edit->setText(newPath); + } +} + +void CTranslationManagerSettingsPage::workAdd() +{ + QString newPath = QFileDialog::getExistingDirectory(_currentPage, ""); + if (!newPath.isEmpty()) + { + _ui.work_edit->setText(newPath); + } +} + void CTranslationManagerSettingsPage::apply() { + writeSettings(); } +void CTranslationManagerSettingsPage::readSettings() +{ + QStringList paths, pathsR, georges, filters, languages; + QString ligo, translation, work; + + QSettings *settings = Core::ICore::instance()->settings(); + settings->beginGroup("translationmanager"); + + paths = settings->value("paths").toStringList(); /* paths */ + pathsR = settings->value("pathsR").toStringList(); /* pathsR */ + georges = settings->value("georges").toStringList(); /* georges */ + filters = settings->value("filters").toStringList(); /* filters */ + languages = settings->value("languages").toStringList(); /* languages */ + ligo = settings->value("ligo").toString(); + translation = settings->value("translation").toString(); + work = settings->value("work").toString(); + + settings->endGroup(); + /* paths */ + Q_FOREACH(QString path, paths) + { + QListWidgetItem *newItem = new QListWidgetItem; + newItem->setText(path); + newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); + _ui.paths_list->addItem(newItem); + } + /* pathsR */ + Q_FOREACH(QString pathR, pathsR) + { + QListWidgetItem *newItem = new QListWidgetItem; + newItem->setText(pathR); + newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); + _ui.pathsR_list->addItem(newItem); + } + /* georges */ + Q_FOREACH(QString george, georges) + { + QListWidgetItem *newItem = new QListWidgetItem; + newItem->setText(george); + newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); + _ui.georges_list->addItem(newItem); + } + /* filter */ + Q_FOREACH(QString filter, filters) + { + QListWidgetItem *newItem = new QListWidgetItem; + newItem->setText(filter); + newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); + _ui.filter_list->addItem(newItem); + } + /* languages */ + Q_FOREACH(QString lang, languages) + { + QListWidgetItem *newItem = new QListWidgetItem; + newItem->setText(lang); + newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); + _ui.lang_list->addItem(newItem); + } + /* ligo */ + _ui.ligo_edit->setText(ligo); + /* translation */ + _ui.translation_edit->setText(translation); + /* work */ + _ui.work_edit->setText(work); + +} + +void CTranslationManagerSettingsPage::writeSettings() +{ + QStringList paths, pathsR, georges, filters, languages; + QString ligo, translation, work; + /* paths */ + for (int i = 0; i < _ui.paths_list->count(); ++i) + paths << _ui.paths_list->item(i)->text(); + /* pathsR */ + for (int i = 0; i < _ui.pathsR_list->count(); ++i) + pathsR << _ui.pathsR_list->item(i)->text(); + /* georges */ + for (int i = 0; i < _ui.georges_list->count(); ++i) + georges << _ui.georges_list->item(i)->text(); + /* filters */ + for (int i = 0; i < _ui.filter_list->count(); ++i) + filters << _ui.filter_list->item(i)->text(); + /* languages */ + for (int i = 0; i < _ui.lang_list->count(); ++i) + languages << _ui.lang_list->item(i)->text(); + /* ligo path */ + ligo = _ui.ligo_edit->text(); + /* translations path*/ + translation = _ui.translation_edit->text(); + work = _ui.work_edit->text(); + + QSettings *settings = Core::ICore::instance()->settings(); + settings->beginGroup("translationmanager"); + settings->setValue("paths", paths); + settings->setValue("pathsR", pathsR); + settings->setValue("georges", georges); + settings->setValue("filters", filters); + settings->setValue("languages", languages); + settings->setValue("ligo", ligo); + settings->setValue("translation", translation); + settings->setValue("work", work); + settings->endGroup(); +} + + } /* namespace Plugin */ diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.h index 53f9068e1..4fec51fb6 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.h @@ -47,10 +47,24 @@ public: virtual void apply(); virtual void finish() {} - +private Q_SLOTS: + void pathAdd(); + void pathDel(); + void pathRAdd(); + void pathRDel(); + void georgeAdd(); + void georgeDel(); + void filterAdd(); + void filterDel(); + void languageAdd(); + void languageDel(); + void translationAdd(); + void workAdd(); private: QWidget *_currentPage; Ui::CTranslationManagerSettingsPage _ui; + void writeSettings(); + void readSettings(); }; } // namespace Plugin diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui index 951be0615..c58533185 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui @@ -1,92 +1,393 @@ - - - CTranslationManagerSettingsPage - - - - 0 - 0 - 458 - 479 - - - - Form - - - - 0 - - - - - GroupBox - - - - - - PushButton - - - - - - - - - - PushButton - - - - - - - RadioButton - - - - - - - RadioButton - - - - - - - CheckBox - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - - - - - - - - - + + + CTranslationManagerSettingsPage + + + + 0 + 0 + 490 + 495 + + + + Form + + + + + + 1 + + + + Core paths + + + + + + + + + + Paths + + + + + + + Qt::Horizontal + + + + 318 + 20 + + + + + + + + dwadwadwa + + + + :/icons/ic_nel_add_item.png:/icons/ic_nel_add_item.png + + + Qt::ToolButtonIconOnly + + + true + + + + + + + ... + + + + :/icons/ic_nel_delete_item.png:/icons/ic_nel_delete_item.png + + + true + + + + + + + + + + + + + + + + + + Paths non recursives + + + + + + + Qt::Horizontal + + + + 218 + 20 + + + + + + + + + + + + :/icons/ic_nel_add_item.png:/icons/ic_nel_add_item.png + + + true + + + + + + + ... + + + + :/icons/ic_nel_delete_item.png:/icons/ic_nel_delete_item.png + + + true + + + + + + + + + + + + + + + + + + Georges Paths + + + + + + + Qt::Horizontal + + + + 258 + 20 + + + + + + + + + + + + :/icons/ic_nel_add_item.png:/icons/ic_nel_add_item.png + + + true + + + + + + + + + + + :/icons/ic_nel_delete_item.png:/icons/ic_nel_delete_item.png + + + true + + + + + + + + + + + + + + + Translation files paths + + + + + 9 + 230 + 450 + 201 + + + + + + + Ligo class file - This is the name of the world_editor_classes.xml file. + + + + + + + + + + Work directory + + + + + + + + + + + + ... + + + + + + + + + Translation directory + + + + + + + + + + + + ... + + + + + + + + + + + 9 + 10 + 211 + 221 + + + + + + + Filters + + + + + + + + + + + + + + :/icons/ic_nel_add_item.png:/icons/ic_nel_add_item.png + + + true + + + + + + + + + + + :/icons/ic_nel_delete_item.png:/icons/ic_nel_delete_item.png + + + true + + + + + + + + + + + + 240 + 10 + 221 + 221 + + + + + + + Languages + + + + + + + + + + + + + + :/icons/ic_nel_add_item.png:/icons/ic_nel_add_item.png + + + true + + + + + + + + + + + :/icons/ic_nel_delete_item.png:/icons/ic_nel_delete_item.png + + + true + + + + + + + + + + + + + + + + + + + From d025085442a8c45952c2ed606150e1e017627213 Mon Sep 17 00:00:00 2001 From: cemycc Date: Tue, 14 Jun 2011 18:01:21 +0300 Subject: [PATCH 06/14] Changed: #1307 Update the plugin to work with the latest plugin system --- .../src/plugins/translation_manager/extract_bot_names.cpp | 1 + .../src/plugins/translation_manager/simple_viewer.cpp | 2 ++ .../src/plugins/translation_manager/simple_viewer.h | 4 +++- .../translation_manager/translation_manager_plugin.cpp | 8 ++++---- .../translation_manager/translation_manager_plugin.h | 8 ++++++++ .../translation_manager_settings_page.cpp | 5 +++++ .../translation_manager_settings_page.h | 3 ++- .../translation_manager_settings_page.ui | 2 +- 8 files changed, 26 insertions(+), 7 deletions(-) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp index 75a97d3bb..3a24127e3 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp @@ -36,6 +36,7 @@ vector Filters; static CLigoConfig LigoConfig; static bool RemoveOlds = false; + struct TCreatureInfo { CSheetId SheetId; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.cpp index e128710c4..1f6df9117 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/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/translation_manager/simple_viewer.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.h index bbff7e9e0..14b782c22 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/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/translation_manager/translation_manager_plugin.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp index 233780ca5..f82024c79 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp @@ -57,10 +57,10 @@ void TranslationManagerPlugin::extensionsInitialized() helpMenu->addSeparator(); helpMenu->insertAction(aboutQtAction, aboutTManPlugin); QMenu *transMenu = menuManager->menuBar()->addMenu("Translation Manager"); - /* Words extraction*/ - QAction *botnamesAct = new QAction("Extract bot_names", this); - connect(botnamesAct, SIGNAL(triggered()), this, SLOT(extractBotNames())); - transMenu->addAction(botnamesAct); + // Words extraction + QAction *botnamesAct = new QAction("Extract bot_names", this); + connect(botnamesAct, SIGNAL(triggered()), this, SLOT(extractBotNames())); + transMenu->addAction(botnamesAct); } void TranslationManagerPlugin::extractBotNames() diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h index 07bf0d434..0dc6e6510 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h @@ -92,6 +92,14 @@ public: { return m_simpleViewer; } + virtual QUndoStack *undoStack() + { + return m_simpleViewer->m_undoStack; + } + virtual void open() + { + + } CSimpleViewer *m_simpleViewer; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp index b3a731ae5..d99cc8642 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp @@ -59,6 +59,11 @@ QString CTranslationManagerSettingsPage::trCategory() const return tr("General"); } +QIcon CTranslationManagerSettingsPage::categoryIcon() const +{ + return QIcon(); +} + QWidget *CTranslationManagerSettingsPage::createPage(QWidget *parent) { _currentPage = new QWidget(parent); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.h index 4fec51fb6..7a082f199 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.h @@ -43,8 +43,9 @@ public: virtual QString trName() const; virtual QString category() const; virtual QString trCategory() const; + virtual QIcon categoryIcon() const; virtual QWidget *createPage(QWidget *parent); - + virtual void apply(); virtual void finish() {} private Q_SLOTS: diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui index c58533185..6da7b0d8b 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui @@ -7,7 +7,7 @@ 0 0 490 - 495 + 482 From 7fa052e11c62ce3d77d1f71de4ceb30c687b16c3 Mon Sep 17 00:00:00 2001 From: cemycc Date: Tue, 21 Jun 2011 01:03:54 +0300 Subject: [PATCH 07/14] Changed: #1307 Added extract_bot_names --- .../translation_manager/CMakeLists.txt | 6 +- .../translation_manager/extract_bot_names.cpp | 111 +++++----- .../translation_manager/qnel_widget.cpp | 197 ------------------ .../plugins/translation_manager/qnel_widget.h | 130 ------------ .../translation_manager/simple_viewer.cpp | 56 ----- .../translation_manager_main_window.cpp | 169 +++++++++++++++ ...er.h => translation_manager_main_window.h} | 40 +++- .../translation_manager_plugin.cpp | 50 +---- .../translation_manager_plugin.h | 18 +- .../translation_manager_settings_page.cpp | 42 ++-- .../translation_manager_settings_page.ui | 12 +- 11 files changed, 302 insertions(+), 529 deletions(-) delete mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/qnel_widget.cpp delete mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/qnel_widget.h delete mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.cpp create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp rename code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/{simple_viewer.h => translation_manager_main_window.h} (60%) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt index 827db7487..ec3980f05 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt @@ -10,11 +10,11 @@ SET(OVQT_EXT_SYS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin. ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_spec.h) SET(OVQT_PLUG_TRANSLATION_MANAGER_HDR translation_manager_plugin.h - qnel_widget.h - simple_viewer.h + translation_manager_main_window.h translation_manager_settings_page.h) -SET(OVQT_PLUG_TRANSLATION_MANAGER_UIS translation_manager_settings_page.ui) +SET(OVQT_PLUG_TRANSLATION_MANAGER_UIS translation_manager_settings_page.ui + translation_manager_main_window.ui) SET(QT_USE_QTGUI TRUE) SET(QT_USE_QTOPENGL TRUE) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp index 3a24127e3..a5e5690ad 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp @@ -145,6 +145,15 @@ set GenericNames; map SimpleNames; set Functions; +set getGenericNames() +{ + return GenericNames; +} + +map getSimpleNames() +{ + return SimpleNames; +} string removeAndStoreFunction(const std::string &fullName) { @@ -221,40 +230,6 @@ void addSimpleName(const std::string &name, const std::string &sheetName) int extractBotNamesAll(map > config_paths, string ligo_class_file, string trans_path, string work_path) { - //------------------------------------------------------------------- - // read the parameters - /*for (int i=2; i::iterator it = config_paths["paths"].begin(); it != config_paths["paths"].end(); ++it) { CPath::addSearchPath(*it, true, false); @@ -269,7 +244,6 @@ int extractBotNamesAll(map > config_paths, string ligo_class Filters.push_back(*it); } - //------------------------------------------------------------------- // init the sheets CSheetId::init(false); @@ -451,26 +425,62 @@ int extractBotNamesAll(map > config_paths, string ligo_class } else { - TEntryInfo ei; addSimpleName(removeAndStoreFunction(name), sheetStr); } } } - } - + } + //------------------------------------------------------------------- // step 2 : load the reference file nlinfo("Looking for missing translation:"); + + string work_path_file = work_path + "/bot_names.txt"; + string trans_path_file = trans_path + "/bot_names.txt"; + string title_path_file = work_path + "/title_words_wk.txt"; + + TWorksheet botNames; + if (!CFile::fileExists(work_path_file) || !loadExcelSheet(work_path_file, botNames)) + { + botNames.resize(botNames.size() + 1); + botNames.insertColumn(botNames.ColCount); + botNames.setData(0,botNames.ColCount - 1,ucstring("bot name")); + botNames.insertColumn(botNames.ColCount); + botNames.setData(0,botNames.ColCount - 1,ucstring("translated name")); + botNames.insertColumn(botNames.ColCount); + botNames.setData(0,botNames.ColCount - 1,ucstring("sheet_name")); + } - TWorksheet botNames; - loadExcelSheet(work_path, botNames, true); - TWorksheet transBotNames; - loadExcelSheet(trans_path, transBotNames, true); + TWorksheet transBotNames; + if (!CFile::fileExists(trans_path_file) || !loadExcelSheet(trans_path_file, transBotNames)) + { + transBotNames.resize(transBotNames.size() + 1); + transBotNames.insertColumn(transBotNames.ColCount); + transBotNames.setData(0,transBotNames.ColCount - 1,ucstring("*HASH_VALUE")); + transBotNames.insertColumn(transBotNames.ColCount); + transBotNames.setData(0,transBotNames.ColCount - 1,ucstring("bot name")); + transBotNames.insertColumn(transBotNames.ColCount); + transBotNames.setData(0,transBotNames.ColCount - 1,ucstring("translated name")); + transBotNames.insertColumn(transBotNames.ColCount); + transBotNames.setData(0,transBotNames.ColCount - 1,ucstring("sheet_name")); + } - TWorksheet fcts; - loadExcelSheet(work_path, fcts, true); + TWorksheet fcts; + if (!CFile::fileExists(title_path_file) || !loadExcelSheet(title_path_file, fcts)) + { + fcts.resize(fcts.size() + 1); + fcts.insertColumn(fcts.ColCount); + fcts.setData(0,fcts.ColCount - 1,ucstring("title_id")); + fcts.insertColumn(fcts.ColCount); + fcts.setData(0,fcts.ColCount - 1,ucstring("name")); + fcts.insertColumn(fcts.ColCount); + fcts.setData(0,fcts.ColCount - 1,ucstring("women_name")); + } + loadExcelSheet(work_path_file, botNames, true); + loadExcelSheet(trans_path_file, transBotNames, true); + loadExcelSheet(title_path_file, fcts, true); // add missing element @@ -482,9 +492,9 @@ int extractBotNamesAll(map > config_paths, string ligo_class nlverify(botNames.findId(botIdCol)); uint transIdCol; nlverify(transBotNames.findId(transIdCol)); - uint fctsIdCol; + uint fctsIdCol; nlverify(fcts.findId(fctsIdCol)); - + // special treatment to add the sheet_name col { uint sheetCol; @@ -743,14 +753,13 @@ int extractBotNamesAll(map > config_paths, string ligo_class nlinfo("Adding %u new generic name", nbAddGenericName); nlinfo("Adding %u new function name", nbAddFunction); - // saving the modified files - + // saving the modified files ucstring s = prepareExcelSheet(botNames); - CI18N::writeTextFile(work_path, s, false); + CI18N::writeTextFile(work_path_file, s, false); s = prepareExcelSheet(transBotNames); - CI18N::writeTextFile(trans_path, s, false); + CI18N::writeTextFile(trans_path_file, s, false); s = prepareExcelSheet(fcts); - CI18N::writeTextFile(work_path, s, false); + CI18N::writeTextFile(title_path_file, s, false); return 0; } diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/qnel_widget.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/qnel_widget.cpp deleted file mode 100644 index 9a67abb80..000000000 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/qnel_widget.cpp +++ /dev/null @@ -1,197 +0,0 @@ -// 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 . - -#include "qnel_widget.h" - -// STL includes - -// Qt includes -#include -#include - -// NeL includes -#include -#include -#include -#include - -namespace NLQT -{ - -QNLWidget::QNLWidget(QWidget *parent) - : QNeLWidget(parent), - m_driver(NULL), - m_initialized(false), - m_interval(25) -{ - setMouseTracking(true); - setFocusPolicy(Qt::StrongFocus); - - init(); -#ifdef Q_OS_LINUX - makeCurrent(); -#endif - m_mainTimer = new QTimer(this); - connect(m_mainTimer, SIGNAL(timeout()), this, SLOT(updateRender())); -} - -QNLWidget::~QNLWidget() -{ - release(); -} - -void QNLWidget::init() -{ - // create the driver - m_driver = NL3D::UDriver::createDriver(NULL, false, NULL); - nlassert(m_driver); - - // initialize the nel 3d viewport - m_driver->setDisplay((nlWindow)winId(), NL3D::UDriver::CMode(width(), height(), 32)); - - // set the cache size for the font manager(in bytes) - m_driver->setFontManagerMaxMemory(2097152); - - m_initialized = true; -} - -void QNLWidget::release() -{ - m_mainTimer->stop(); - delete m_mainTimer; - if (m_initialized) - { - m_driver->release(); - delete m_driver; - m_driver = NULL; - } -} - -void QNLWidget::setInterval(int msec) -{ - m_interval = msec; - m_mainTimer->setInterval(msec); -} - -void QNLWidget::setBackgroundColor(NLMISC::CRGBA backgroundColor) -{ - m_backgroundColor = backgroundColor; -} - -void QNLWidget::updateRender() -{ - if (isVisible()) - { - if (m_initialized) - m_driver->EventServer.pump(); - Q_EMIT updateData(); - - // Calc FPS - static sint64 lastTime = NLMISC::CTime::getPerformanceTime (); - sint64 newTime = NLMISC::CTime::getPerformanceTime (); - m_fps = float(1.0 / NLMISC::CTime::ticksToSecond (newTime-lastTime)); - lastTime = newTime; - - if (m_initialized && !m_driver->isLost()) - { - //_driver->activate(); - m_driver->clearBuffers(m_backgroundColor); - Q_EMIT updatePreRender(); - - Q_EMIT updatePostRender(); - // swap 3d buffers - m_driver->swapBuffers(); - } - } -} - -void QNLWidget::showEvent(QShowEvent *showEvent) -{ - QWidget::showEvent(showEvent); - m_driver->activate(); - m_mainTimer->start(m_interval); -} - -void QNLWidget::hideEvent(QHideEvent *hideEvent) -{ - m_mainTimer->stop(); - QWidget::hideEvent(hideEvent); -} - -#if defined(NL_OS_WINDOWS) - -typedef bool (*winProc)(NL3D::IDriver *driver, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); - -bool QNLWidget::winEvent(MSG *message, long *result) -{ - if (m_driver && m_driver->isActive()) - { - NL3D::IDriver *driver = dynamic_cast(m_driver)->getDriver(); - if (driver) - { - winProc proc = (winProc)driver->getWindowProc(); - return proc(driver, message->hwnd, message->message, message->wParam, message->lParam); - } - } - - return false; -} - -#elif defined(NL_OS_MAC) - -typedef bool (*cocoaProc)(NL3D::IDriver *, const void *e); - -bool QNLWidget::macEvent(EventHandlerCallRef caller, EventRef event) -{ - if(caller) - nlerror("You are using QtCarbon! Only QtCocoa supported, please upgrade Qt"); - - if (m_driver && m_driver->isActive()) - { - NL3D::IDriver *driver = dynamic_cast(m_driver)->getDriver(); - if (driver) - { - cocoaProc proc = (cocoaProc)driver->getWindowProc(); - return proc(driver, event); - } - } - - return false; -} - -#elif defined(NL_OS_UNIX) - -typedef bool (*x11Proc)(NL3D::IDriver *drv, XEvent *e); - -bool QNLWidget::x11Event(XEvent *event) -{ - if (m_driver && m_driver->isActive()) - { - NL3D::IDriver *driver = dynamic_cast(m_driver)->getDriver(); - if (driver) - { - x11Proc proc = (x11Proc)driver->getWindowProc(); - return proc(driver, event); - } - } - - return false; -} -#endif - -} /* namespace NLQT */ - diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/qnel_widget.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/qnel_widget.h deleted file mode 100644 index a54e6bb8a..000000000 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/qnel_widget.h +++ /dev/null @@ -1,130 +0,0 @@ -// 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 QNEL_WIDGET_H -#define QNEL_WIDGET_H - -// NeL includes -#include -#include -#include - -// Qt includes -#include -#include - -class QAction; - -/* TODO every platform should use QWidget */ -#if defined(NL_OS_WINDOWS) -typedef QWidget QNeLWidget; -#elif defined(NL_OS_MAC) -typedef QWidget QNeLWidget; -#elif defined(NL_OS_UNIX) -typedef QGLWidget QNeLWidget; -#endif // NL_OS_UNIX - -namespace NL3D -{ -class UDriver; -class UScene; -} - -namespace NLQT -{ - -/** -@class QNLWidget -@brief Responsible for interaction between Qt and NeL. -@details Automatically begins to update the render if the widget is visible -or suspends the updating of render if the widget is hidden. -*/ -class QNLWidget : public QNeLWidget -{ - Q_OBJECT - -public: - QNLWidget(QWidget *parent); - virtual ~QNLWidget(); - - /// Set the update interval renderer - void setInterval(int msec); - - /// Set the background color. - void setBackgroundColor(NLMISC::CRGBA backgroundColor); - - float fps() const - { - return m_fps; - } - - inline NLMISC::CRGBA backgroundColor() const - { - return m_backgroundColor; - } - - NL3D::UDriver *driver() const - { - return m_driver; - } - - virtual QPaintEngine* paintEngine() const - { - return NULL; - } -Q_SIGNALS: - void updateData(); - void updatePreRender(); - void updatePostRender(); - -private Q_SLOTS: - void updateRender(); - -protected: - virtual void showEvent(QShowEvent *showEvent); - virtual void hideEvent(QHideEvent *hideEvent); - -#if defined(NL_OS_WINDOWS) - virtual bool winEvent(MSG *message, long *result); -#elif defined(NL_OS_MAC) - virtual bool macEvent(EventHandlerCallRef caller, EventRef event); -#elif defined(NL_OS_UNIX) - virtual bool x11Event(XEvent *event); -#endif - -private: - void init(); - void release(); - - QNLWidget(const QNLWidget &); - QNLWidget &operator=(const QNLWidget &); - - NL3D::UDriver *m_driver; - NLMISC::CRGBA m_backgroundColor; - - QTimer *m_mainTimer; - - bool m_initialized; - int m_interval; - float m_fps; - -}; /* class QNLWidget */ - -} /* namespace NLQT */ - - -#endif // QNEL_WIDGET_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.cpp deleted file mode 100644 index 1f6df9117..000000000 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.cpp +++ /dev/null @@ -1,56 +0,0 @@ -// 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 . - -#include "simple_viewer.h" - -// Qt includes -#include -#include -#include - -// NeL includes - -// Project includes - -namespace Plugin -{ - -CSimpleViewer::CSimpleViewer(QWidget *parent) - : QWidget(parent) -{ - QGridLayout *gridLayout = new QGridLayout(this); - gridLayout->setObjectName(QString::fromUtf8("gridLayoutSimpleViewer")); - 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 -{ - int ret = QMessageBox::question(0, tr("Example close event hook"), - tr("Do you want to close window?"), - QMessageBox::Yes | QMessageBox::No); - - if (ret == QMessageBox::Yes) - return true; - else - return false; -} - -} /* namespace Plugin */ \ No newline at end of file diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp new file mode 100644 index 000000000..159e80e04 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp @@ -0,0 +1,169 @@ +// 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 . + +#include "translation_manager_main_window.h" +// Project system includes +#include "../core/icore.h" +// Qt includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +struct TEntryInfo +{ + string SheetName; +}; + +set getGenericNames(); +map getSimpleNames(); +int extractBotNamesAll(map > config_paths, string ligo_class_file, string trans_path, string work_path); + +namespace Plugin +{ + +CMainWindow::CMainWindow(QWidget *parent) + : QMainWindow(parent) +{ + _ui.setupUi(this); + + _toolMenu = new QMenu(tr("Primitives"), _ui.toolBar); + _ui.toolBar->addAction(_toolMenu->menuAction()); + + QAction *extractBotNames = _toolMenu->addAction(tr("Extract bot names")); + extractBotNames->setStatusTip(tr("Extract bot names from primitives")); + connect(extractBotNames, SIGNAL(triggered()), this, SLOT(extractBotNames())); + + + + readSettings(); + m_undoStack = new QUndoStack(this); +} + +void CMainWindow::readSettings() +{ + QSettings *settings = Core::ICore::instance()->settings(); + settings->beginGroup("translationmanager"); + + list paths = convertQStringList(settings->value("paths").toStringList()); /* paths */ + config_paths["paths"] = paths; + list pathsR = convertQStringList(settings->value("pathsR").toStringList()); /* pathsR */ + config_paths["pathsR"] = pathsR; + list georges = convertQStringList(settings->value("georges").toStringList()); /* georges */ + config_paths["georges"] = georges; + list filters = convertQStringList(settings->value("filters").toStringList()); /* filters */ + config_paths["filters"] = filters; + + languages = convertQStringList(settings->value("trlanguages").toStringList()); /* languages */ + ligo_path = settings->value("ligo").toString().toStdString(); + translation_path = settings->value("translation").toString().toStdString(); + work_path = settings->value("work").toString().toStdString(); + + settings->endGroup(); +} + +void CMainWindow::extractBotNames() +{ + if(verifySettings() == true) + { + // int extract_bot_names = extractBotNamesAll(config_paths, ligo_path, translation_path, work_path); + + QGridLayout* mainLayout = new QGridLayout(); + + + + //contentsWindow->setAllowedAreas(Qt::LeftDockWidgetArea); + + + QListWidget *listWidget = new QListWidget(this); + + mainLayout->addWidget(QListWidget); + + + + QTableWidget *tableWidget = new QTableWidget(this); + + tableWidget->setRowCount(10); + tableWidget->setColumnCount(5); + + mainLayout->addWidget(QTableWidget); + setCentralWidget(tableWidget); + } +} + + +bool CMainWindow::verifySettings() +{ + bool count_errors = false; + + QSettings *settings = Core::ICore::instance()->settings(); + settings->beginGroup("translationmanager"); + + if(settings->value("paths").toList().count() == 0 + || settings->value("pathsR").toList().count() == 0 + || settings->value("georges").toList().count() == 0 + || settings->value("filters").toList().count() == 0) + { + QErrorMessage error_settings; + error_settings.showMessage("Please write all the paths on the settings dialog."); + error_settings.exec(); + count_errors = true; + } + + if((settings->value("ligo").toString().isEmpty() + || settings->value("translation").toString().isEmpty() + || settings->value("work").toString().isEmpty() + || settings->value("trlanguages").toList().count() == 0) + && count_errors == false) + { + QErrorMessage error_settings; + error_settings.showMessage("Please write the paths for ligo, translation and work files and the languages on the settings dialog." + settings->value("trlanguages").toString()); + error_settings.exec(); + count_errors = true; + } + + settings->endGroup(); + + return !count_errors; + +} + +list CMainWindow::convertQStringList(QStringList listq) +{ + std::list stdlist; + + Q_FOREACH(QString text, listq) + { + stdlist.push_back(text.toStdString()); + } + + return stdlist; +} + +bool CCoreListener::closeMainWindow() const +{ + return true; +} + +} /* namespace Plugin */ \ No newline at end of file diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h similarity index 60% rename from code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.h rename to code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h index 14b782c22..4e90c6088 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/simple_viewer.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h @@ -16,29 +16,53 @@ // along with this program. If not, see . -#ifndef SIMPLE_VIEWER_H -#define SIMPLE_VIEWER_H +#ifndef MAIN_WINDOW_H +#define MAIN_WINDOW_H // Project includes -#include "qnel_widget.h" #include "../core/icore_listener.h" // Qt includes #include #include +#include +#include +#include +#include + +#include "ui_translation_manager_main_window.h" +#include + class QWidget; +using namespace std; + namespace Plugin { -class CSimpleViewer : public QWidget +class CMainWindow : public QMainWindow { Q_OBJECT public: - CSimpleViewer(QWidget *parent = 0); - virtual ~CSimpleViewer() {} - - QUndoStack *m_undoStack; + CMainWindow(QWidget *parent = 0); + virtual ~CMainWindow() {} + QUndoStack *m_undoStack; +private: + Ui::CMainWindow _ui; + QMenu *_toolMenu; + map > config_paths; + list languages; + string ligo_path; + string translation_path; + string work_path; +private Q_SLOTS: + void extractBotNames(); +private: + void compareBotNames(); + bool verifySettings(); + void readSettings(); + list convertQStringList(QStringList listq); + }; class CCoreListener : public Core::ICoreListener diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp index f82024c79..91e7686d5 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp @@ -1,7 +1,7 @@ // Project includes #include "translation_manager_plugin.h" #include "translation_manager_settings_page.h" -#include "simple_viewer.h" +#include "translation_manager_main_window.h" // Project system includes #include "../core/icore.h" #include "../core/core_constants.h" @@ -14,13 +14,12 @@ // Qt includes #include #include +#include #include #include #include #include -int extractBotNamesAll(map > config_paths, string ligo_class_file, string trans_path, string work_path); - namespace Plugin { TranslationManagerPlugin::~TranslationManagerPlugin() @@ -41,6 +40,7 @@ bool TranslationManagerPlugin::initialize(ExtensionSystem::IPluginManager *plugi addAutoReleasedObject(new CTranslationManagerSettingsPage(this)); addAutoReleasedObject(new CTranslationManagerContext(this)); addAutoReleasedObject(new CCoreListener(this)); + return true; } @@ -56,39 +56,6 @@ void TranslationManagerPlugin::extensionsInitialized() QAction *aboutQtAction = menuManager->action(Core::Constants::ABOUT_QT); helpMenu->addSeparator(); helpMenu->insertAction(aboutQtAction, aboutTManPlugin); - QMenu *transMenu = menuManager->menuBar()->addMenu("Translation Manager"); - // Words extraction - QAction *botnamesAct = new QAction("Extract bot_names", this); - connect(botnamesAct, SIGNAL(triggered()), this, SLOT(extractBotNames())); - transMenu->addAction(botnamesAct); -} - -void TranslationManagerPlugin::extractBotNames() -{ - // prepare the config paths - list paths,pathsR, georges, filters, languages; - string ligo, translation, work; - map > config_paths; - - QSettings *settings = Core::ICore::instance()->settings(); - settings->beginGroup("translationmanager"); - - paths = ConvertQStringList(settings->value("paths").toStringList()); /* paths */ - config_paths["paths"] = paths; - pathsR = ConvertQStringList(settings->value("pathsR").toStringList()); /* pathsR */ - config_paths["pathsR"] = pathsR; - georges = ConvertQStringList(settings->value("georges").toStringList()); /* georges */ - config_paths["georges"] = georges; - filters = ConvertQStringList(settings->value("filters").toStringList()); /* filters */ - config_paths["filters"] = filters; - languages = ConvertQStringList(settings->value("languages").toStringList()); /* languages */ - ligo = settings->value("ligo").toString().toStdString(); - translation = settings->value("translation").toString().toStdString(); - work = settings->value("work").toString().toStdString(); - settings->endGroup(); - - extractBotNamesAll(config_paths, ligo, translation, work); - } void TranslationManagerPlugin::setNelContext(NLMISC::INelContext *nelContext) @@ -101,17 +68,6 @@ void TranslationManagerPlugin::setNelContext(NLMISC::INelContext *nelContext) _LibContext = new NLMISC::CLibraryContext(*nelContext); } -list TranslationManagerPlugin::ConvertQStringList(QStringList listq) -{ - std::list stdlist; - Q_FOREACH(QString text, listq) - { - stdlist.push_back(text.toStdString()); - } - - return stdlist; -} - QString TranslationManagerPlugin::name() const { return "Translation Manager"; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h index 0dc6e6510..42515cb2f 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h @@ -4,7 +4,7 @@ // Project includes #include "../../extension_system/iplugin.h" #include "../core/icontext.h" -#include "simple_viewer.h" +#include "translation_manager_main_window.h" // NeL includes #include "nel/misc/app_context.h" @@ -28,12 +28,13 @@ class IPluginSpec; namespace Plugin { + class CTranslationManagerContext; + class TranslationManagerPlugin : public QObject, public ExtensionSystem::IPlugin { Q_OBJECT Q_INTERFACES(ExtensionSystem::IPlugin) public: - virtual ~TranslationManagerPlugin(); bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString); @@ -58,11 +59,6 @@ protected: private: ExtensionSystem::IPluginManager *_plugMan; QList _autoReleaseObjects; - list ConvertQStringList(QStringList list); - - -private Q_SLOTS: - void extractBotNames(); }; class CTranslationManagerContext: public Core::IContext @@ -71,7 +67,7 @@ class CTranslationManagerContext: public Core::IContext public: CTranslationManagerContext(QObject *parent = 0): IContext(parent) { - m_simpleViewer = new CSimpleViewer(); + m_MainWindow = new CMainWindow(); } virtual ~CTranslationManagerContext() {} @@ -90,18 +86,18 @@ public: } virtual QWidget *widget() { - return m_simpleViewer; + return m_MainWindow; } virtual QUndoStack *undoStack() { - return m_simpleViewer->m_undoStack; + return m_MainWindow->m_undoStack; } virtual void open() { } - CSimpleViewer *m_simpleViewer; + CMainWindow *m_MainWindow; }; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp index d99cc8642..078a9c18c 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp @@ -68,7 +68,7 @@ QWidget *CTranslationManagerSettingsPage::createPage(QWidget *parent) { _currentPage = new QWidget(parent); _ui.setupUi(_currentPage); - readSettings(); + readSettings(); connect(_ui.paths_add, SIGNAL(clicked()), this, SLOT(pathAdd())); connect(_ui.paths_del, SIGNAL(clicked()), this, SLOT(pathDel())); connect(_ui.pathsR_add, SIGNAL(clicked()), this, SLOT(pathRAdd())); @@ -79,8 +79,8 @@ QWidget *CTranslationManagerSettingsPage::createPage(QWidget *parent) connect(_ui.filter_del, SIGNAL(clicked()), this, SLOT(filterDel())); connect(_ui.lang_add, SIGNAL(clicked()), this, SLOT(languageAdd())); connect(_ui.lang_del, SIGNAL(clicked()), this, SLOT(languageDel())); - connect(_ui.translation_add, SIGNAL(clicked()), this, SLOT(translationAdd())); - connect(_ui.work_add, SIGNAL(clicked()), this, SLOT(workAdd())); + connect(_ui.translation_add, SIGNAL(clicked()), this, SLOT(translationAdd())); + connect(_ui.work_add, SIGNAL(clicked()), this, SLOT(workAdd())); return _currentPage; } @@ -218,13 +218,13 @@ void CTranslationManagerSettingsPage::readSettings() pathsR = settings->value("pathsR").toStringList(); /* pathsR */ georges = settings->value("georges").toStringList(); /* georges */ filters = settings->value("filters").toStringList(); /* filters */ - languages = settings->value("languages").toStringList(); /* languages */ + languages = settings->value("trlanguages").toStringList(); /* languages */ ligo = settings->value("ligo").toString(); translation = settings->value("translation").toString(); work = settings->value("work").toString(); settings->endGroup(); - /* paths */ + // paths Q_FOREACH(QString path, paths) { QListWidgetItem *newItem = new QListWidgetItem; @@ -232,7 +232,7 @@ void CTranslationManagerSettingsPage::readSettings() newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); _ui.paths_list->addItem(newItem); } - /* pathsR */ + // pathsR Q_FOREACH(QString pathR, pathsR) { QListWidgetItem *newItem = new QListWidgetItem; @@ -240,7 +240,7 @@ void CTranslationManagerSettingsPage::readSettings() newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); _ui.pathsR_list->addItem(newItem); } - /* georges */ + // georges Q_FOREACH(QString george, georges) { QListWidgetItem *newItem = new QListWidgetItem; @@ -248,7 +248,7 @@ void CTranslationManagerSettingsPage::readSettings() newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); _ui.georges_list->addItem(newItem); } - /* filter */ + // filter Q_FOREACH(QString filter, filters) { QListWidgetItem *newItem = new QListWidgetItem; @@ -256,7 +256,7 @@ void CTranslationManagerSettingsPage::readSettings() newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); _ui.filter_list->addItem(newItem); } - /* languages */ + // languages Q_FOREACH(QString lang, languages) { QListWidgetItem *newItem = new QListWidgetItem; @@ -264,11 +264,11 @@ void CTranslationManagerSettingsPage::readSettings() newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); _ui.lang_list->addItem(newItem); } - /* ligo */ + // ligo _ui.ligo_edit->setText(ligo); - /* translation */ + // translation _ui.translation_edit->setText(translation); - /* work */ + // work _ui.work_edit->setText(work); } @@ -277,25 +277,26 @@ void CTranslationManagerSettingsPage::writeSettings() { QStringList paths, pathsR, georges, filters, languages; QString ligo, translation, work; - /* paths */ + // paths for (int i = 0; i < _ui.paths_list->count(); ++i) paths << _ui.paths_list->item(i)->text(); - /* pathsR */ + // pathsR for (int i = 0; i < _ui.pathsR_list->count(); ++i) pathsR << _ui.pathsR_list->item(i)->text(); - /* georges */ + // georges for (int i = 0; i < _ui.georges_list->count(); ++i) georges << _ui.georges_list->item(i)->text(); - /* filters */ + // filters for (int i = 0; i < _ui.filter_list->count(); ++i) filters << _ui.filter_list->item(i)->text(); - /* languages */ + // languages for (int i = 0; i < _ui.lang_list->count(); ++i) languages << _ui.lang_list->item(i)->text(); - /* ligo path */ + // ligo path ligo = _ui.ligo_edit->text(); - /* translations path*/ + // translations path translation = _ui.translation_edit->text(); + // work path work = _ui.work_edit->text(); QSettings *settings = Core::ICore::instance()->settings(); @@ -304,11 +305,12 @@ void CTranslationManagerSettingsPage::writeSettings() settings->setValue("pathsR", pathsR); settings->setValue("georges", georges); settings->setValue("filters", filters); - settings->setValue("languages", languages); + settings->setValue("trlanguages", languages); settings->setValue("ligo", ligo); settings->setValue("translation", translation); settings->setValue("work", work); settings->endGroup(); + settings->sync(); } diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui index 6da7b0d8b..4c932b4f5 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui @@ -7,7 +7,7 @@ 0 0 490 - 482 + 496 @@ -214,9 +214,9 @@ 9 - 230 - 450 - 201 + 190 + 454 + 161 @@ -280,7 +280,7 @@ 9 10 211 - 221 + 181 @@ -333,7 +333,7 @@ 240 10 221 - 221 + 181 From 99647c12aacab4ddd218c3c58ed8b86214af730d Mon Sep 17 00:00:00 2001 From: cemycc Date: Sat, 25 Jun 2011 16:42:45 +0300 Subject: [PATCH 08/14] Changed: #1307 Added editor for worksheet files. --- .../translation_manager_main_window.cpp | 122 +++++++++++++----- .../translation_manager_main_window.h | 34 ++++- .../translation_manager_main_window.ui | 57 ++++++++ 3 files changed, 183 insertions(+), 30 deletions(-) create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.ui diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp index 159e80e04..5dedd7c70 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp @@ -18,6 +18,9 @@ #include "translation_manager_main_window.h" // Project system includes #include "../core/icore.h" +#include "../core/core_constants.h" +#include "../core/imenu_manager.h" +#include "../../extension_system/iplugin_spec.h" // Qt includes #include #include @@ -27,10 +30,14 @@ #include #include #include +#include #include #include #include #include +#include +#include + struct TEntryInfo { string SheetName; @@ -48,19 +55,97 @@ CMainWindow::CMainWindow(QWidget *parent) { _ui.setupUi(this); - _toolMenu = new QMenu(tr("Primitives"), _ui.toolBar); - _ui.toolBar->addAction(_toolMenu->menuAction()); - - QAction *extractBotNames = _toolMenu->addAction(tr("Extract bot names")); - extractBotNames->setStatusTip(tr("Extract bot names from primitives")); - connect(extractBotNames, SIGNAL(triggered()), this, SLOT(extractBotNames())); - - readSettings(); + createToolbar(); m_undoStack = new QUndoStack(this); } +void CMainWindow::createToolbar() +{ + // Tools menu + Core::IMenuManager *menuManager = Core::ICore::instance()->menuManager(); + QMenu *translationManagerMenu = new QMenu("Translation Manager"); + QAction *extractBotNamesAct = translationManagerMenu->addAction("Extract bot names"); + extractBotNamesAct->setStatusTip(tr("Extract bot names from primitives")); + QMenu *toolMenu = menuManager->menu(Core::Constants::M_TOOLS); + toolMenu->addMenu(translationManagerMenu); + + + // File menu + //QAction *action = menuManager->action(Core::Constants::NEW); + //_ui.toolBar->addAction(action); + openAct = menuManager->action(Core::Constants::OPEN); + _ui.toolBar->addAction(openAct); + connect(openAct, SIGNAL(triggered()), this, SLOT(open())); + + saveAct = menuManager->action(Core::Constants::SAVE); + _ui.toolBar->addAction(saveAct); + connect(saveAct, SIGNAL(triggered()), this, SLOT(save())); + //action = menuManager->action(Core::Constants::SAVE_AS); + //_ui.toolBar->addAction(action); + +} + +void CMainWindow::open() +{ + QString file_name = QFileDialog::getOpenFileName(this); + if (!file_name.isEmpty()) + { + STRING_MANAGER::TWorksheet wk_file; + if(loadExcelSheet(file_name.toStdString(), wk_file, true) == true) + { + QTableWidget *wk_table = new QTableWidget(); + wk_table->setToolTip(file_name); + wk_table->setWindowFilePath(file_name); + wk_table->setColumnCount(wk_file.ColCount); + wk_table->setRowCount(wk_file.size() - 1); + // read columns name + for(unsigned int i = 0; i < wk_file.ColCount; i++) + { + QTableWidgetItem *col = new QTableWidgetItem(); + ucstring col_name = wk_file.getData(0, i); + col->setText(tr(col_name.toString().c_str())); + + wk_table->setHorizontalHeaderItem(i, col); + } + // read rows + for(unsigned int i = 1; i < wk_file.size(); i++) + { + for(unsigned int j = 0; j < wk_file.ColCount; j++) + { + QTableWidgetItem *row = new QTableWidgetItem(); + ucstring row_value = wk_file.getData(i, j); + row->setText(tr(row_value.toString().c_str())); + + wk_table->setItem(i - 1, j, row); + } + } + QMdiSubWindow *sub_window = new QMdiSubWindow(_ui.mdiArea); + sub_window->setWidget(wk_table); + wk_table->resizeColumnsToContents(); + wk_table->resizeRowsToContents(); + wk_table->showMaximized(); + sub_window->activateWindow(); + //_ui.mdiArea->addSubWindow(sub_window); + // set editor signals + connect(wk_table, SIGNAL(cellChanged(int,int) ), this, SLOT(sheetEditorChanged(int,int))); + } + } + +} + +void CMainWindow::sheetEditorChanged(int, int) +{ + saveAct->setEnabled(true); +} + +void CMainWindow::save() +{ + QMdiSubWindow *current_window = _ui.mdiArea->currentSubWindow(); + +} + void CMainWindow::readSettings() { QSettings *settings = Core::ICore::instance()->settings(); @@ -87,28 +172,7 @@ void CMainWindow::extractBotNames() { if(verifySettings() == true) { - // int extract_bot_names = extractBotNamesAll(config_paths, ligo_path, translation_path, work_path); - - QGridLayout* mainLayout = new QGridLayout(); - - - - //contentsWindow->setAllowedAreas(Qt::LeftDockWidgetArea); - - - QListWidget *listWidget = new QListWidget(this); - mainLayout->addWidget(QListWidget); - - - - QTableWidget *tableWidget = new QTableWidget(this); - - tableWidget->setRowCount(10); - tableWidget->setColumnCount(5); - - mainLayout->addWidget(QTableWidget); - setCentralWidget(tableWidget); } } diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h index 4e90c6088..863145bc5 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h @@ -22,6 +22,12 @@ // Project includes #include "../core/icore_listener.h" +// Nel includes +#include "nel/misc/types_nl.h" +#include "nel/misc/sheet_id.h" +#include "nel/misc/path.h" +#include "nel/misc/diff_tool.h" + // Qt includes #include #include @@ -29,6 +35,8 @@ #include #include #include +#include + #include "ui_translation_manager_main_window.h" #include @@ -49,7 +57,10 @@ public: QUndoStack *m_undoStack; private: Ui::CMainWindow _ui; - QMenu *_toolMenu; + // actions + QAction *openAct; + QAction *saveAct; + // config map > config_paths; list languages; string ligo_path; @@ -57,12 +68,18 @@ private: string work_path; private Q_SLOTS: void extractBotNames(); + void open(); + void save(); + void sheetEditorChanged(int, int); private: void compareBotNames(); bool verifySettings(); void readSettings(); + void createMenus(); + void createToolbar(); list convertQStringList(QStringList listq); + }; class CCoreListener : public Core::ICoreListener @@ -75,6 +92,21 @@ public: virtual bool closeMainWindow() const; }; +class CMdiSubWindow : public QMdiSubWindow +{ + private: + int window_type; + public: + int getWType() + { + return window_type; + } + void setWType(int nType) + { + window_type = nType; + } +}; + } // namespace Plugin #endif // SIMPLE_VIEWER_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.ui b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.ui new file mode 100644 index 000000000..395574415 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.ui @@ -0,0 +1,57 @@ + + + CMainWindow + + + + 0 + 0 + 883 + 576 + + + + MainWindow + + + + + + + + 0 + 0 + + + + Qt::Horizontal + + + + true + + + + + + + + + + + + + + toolBar + + + TopToolBarArea + + + false + + + + + + From c3af51723399340d72ad469f929d0c1310ac3ad4 Mon Sep 17 00:00:00 2001 From: cemycc Date: Sun, 26 Jun 2011 05:48:28 +0300 Subject: [PATCH 09/14] Changed: #1307 Added option for SaveAs and a windows list --- .../translation_manager_main_window.cpp | 175 ++++++++++++++++-- .../translation_manager_main_window.h | 17 ++ 2 files changed, 180 insertions(+), 12 deletions(-) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp index 5dedd7c70..1866b3975 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp @@ -37,6 +37,10 @@ #include #include #include +#include +#include +#include + struct TEntryInfo { @@ -54,7 +58,8 @@ CMainWindow::CMainWindow(QWidget *parent) : QMainWindow(parent) { _ui.setupUi(this); - + _ui.mdiArea->closeAllSubWindows(); + connect(_ui.mdiArea, SIGNAL(subWindowActivated(QMdiSubWindow*)),this, SLOT(activeSubWindowChanged())); readSettings(); createToolbar(); @@ -72,19 +77,55 @@ void CMainWindow::createToolbar() toolMenu->addMenu(translationManagerMenu); - // File menu - //QAction *action = menuManager->action(Core::Constants::NEW); - //_ui.toolBar->addAction(action); - openAct = menuManager->action(Core::Constants::OPEN); + // File menu + openAct = new QAction(QIcon(Core::Constants::ICON_OPEN), "&Open...", this); _ui.toolBar->addAction(openAct); connect(openAct, SIGNAL(triggered()), this, SLOT(open())); - saveAct = menuManager->action(Core::Constants::SAVE); + saveAct = new QAction(QIcon(Core::Constants::ICON_SAVE), "&Save...", this); _ui.toolBar->addAction(saveAct); connect(saveAct, SIGNAL(triggered()), this, SLOT(save())); - //action = menuManager->action(Core::Constants::SAVE_AS); - //_ui.toolBar->addAction(action); - + + saveAsAct = new QAction(QIcon(Core::Constants::ICON_SAVE_AS), "&Save as...", this); + _ui.toolBar->addAction(saveAsAct); + connect(saveAsAct, SIGNAL(triggered()), this, SLOT(saveAs())); + + // Windows menu + windowMapper = new QSignalMapper(this); + connect(windowMapper, SIGNAL(mapped(QWidget*)), this, SLOT(setActiveSubWindow(QWidget*))); + windowMenu = new QMenu(tr("&Windows..."), _ui.toolBar); + windowMenu->setIcon(QIcon(Core::Constants::ICON_PILL)); + _ui.toolBar->addAction(windowMenu->menuAction()); + connect(windowMenu, SIGNAL(aboutToShow()), this, SLOT(updateWindowsList())); + + +} + +void CMainWindow::activeSubWindowChanged() +{ + updateWindowsList(); +} + +void CMainWindow::updateWindowsList() +{ + int i = 0; + windowMenu->clear(); + QList windows = _ui.mdiArea->subWindowList(); + for (QList::iterator it = windows.begin(); it != windows.end(); ++it) { + QString window_file = QFileInfo((*it)->widget()->windowFilePath()).fileName(); + QString action_text; + if (i < 9) { + action_text = tr("&%1 %2").arg(i + 1).arg(window_file); + } else { + action_text = tr("%1 %2").arg(i + 1).arg(window_file); + } + QAction *action = windowMenu->addAction(action_text); + action->setCheckable(true); + action->setChecked((*it) == _ui.mdiArea->activeSubWindow()); + connect(action, SIGNAL(triggered()), windowMapper, SLOT(map())); + windowMapper->setMapping(action, windows.at(i)); + i++; + } } void CMainWindow::open() @@ -127,23 +168,126 @@ void CMainWindow::open() wk_table->resizeRowsToContents(); wk_table->showMaximized(); sub_window->activateWindow(); - //_ui.mdiArea->addSubWindow(sub_window); // set editor signals connect(wk_table, SIGNAL(cellChanged(int,int) ), this, SLOT(sheetEditorChanged(int,int))); + // windows menu + updateWindowsList(); + } else { + QErrorMessage error_settings; + error_settings.showMessage("This file is not a worksheet file."); + error_settings.exec(); } } } -void CMainWindow::sheetEditorChanged(int, int) +void CMainWindow::sheetEditorChanged(int row, int column) { saveAct->setEnabled(true); + QMdiSubWindow *current_window = _ui.mdiArea->currentSubWindow(); + if(modifiedCells.find(current_window) != modifiedCells.end()) // founded + { + list cells = modifiedCells[current_window]; + bool overwriteResult = false; + for(list::iterator it = cells.begin(); it != cells.end(); ++it) + { + if((*it).row == row && (*it).col == column ) + overwriteResult = true; + } + if(overwriteResult == false) + { + CCelPos v; + v.row = row; + v.col = column; + cells.push_back(v); + } + } else { // not found + list cells; + CCelPos v; + v.row = row; + v.col = column; + cells.push_back(v); + modifiedCells[current_window] = cells; + } } void CMainWindow::save() { QMdiSubWindow *current_window = _ui.mdiArea->currentSubWindow(); + + if(QString(current_window->widget()->metaObject()->className()) == "QTableWidget") // Sheet Editor + { + QWidget *subwindow_widget = current_window->widget(); + QTableWidget *table_editor = qobject_cast(subwindow_widget); + QString file_path = table_editor->windowFilePath(); + + if(modifiedCells.find(current_window) != modifiedCells.end()) + { + STRING_MANAGER::TWorksheet wk_file; + loadExcelSheet(file_path.toStdString(), wk_file, true); + list cells = modifiedCells[current_window]; + for(list::iterator it = cells.begin(); it != cells.end(); ++it) + { + QTableWidgetItem* edited_item = table_editor->item((*it).row, (*it).col); + wk_file.setData((*it).row + 1, (*it).col, ucstring(edited_item->text().toStdString())); + cells.erase(it); + } + ucstring s = prepareExcelSheet(wk_file); + NLMISC::CI18N::writeTextFile(file_path.toStdString(), s, false); + if(cells.size() == 0) + modifiedCells.erase(current_window); + } + } +} +void CMainWindow::saveAs() +{ + QString file_name; + if (_ui.mdiArea->isActiveWindow()) + { + file_name = QFileDialog::getSaveFileName(this); + } + + if (!file_name.isEmpty()) + { + QMdiSubWindow *current_window = _ui.mdiArea->currentSubWindow(); + + if(QString(current_window->widget()->metaObject()->className()) == "QTableWidget") // Sheet Editor + { + QWidget *subwindow_widget = current_window->widget(); + QTableWidget *table_editor = qobject_cast(subwindow_widget); + QString orig_file_path = table_editor->windowFilePath(); + STRING_MANAGER::TWorksheet new_file, wk_file; + loadExcelSheet(orig_file_path.toStdString(), wk_file, true); + // set columns + new_file.resize(new_file.size() + 1); + for(unsigned int i = 0; i < wk_file.ColCount; i++) + { + ucstring col_name = wk_file.getData(0, i); + new_file.insertColumn(new_file.ColCount); + new_file.setData(0, new_file.ColCount - 1, col_name); + } + // read all the rows from table + uint rowIdx; + for(int i = 0; i < table_editor->rowCount(); i++) + { + rowIdx = new_file.size(); + new_file.resize(new_file.size() + 1); + for(int j = 0; j < table_editor->columnCount(); j++) + { + QTableWidgetItem* item = table_editor->item(i, j); + new_file.setData(rowIdx, j, ucstring(item->text().toStdString())); + } + } + ucstring s = prepareExcelSheet(new_file); + NLMISC::CI18N::writeTextFile(file_name.toStdString(), s, false); + } + + } + + QErrorMessage error_settings; + error_settings.showMessage( file_name); + error_settings.exec(); } void CMainWindow::readSettings() @@ -212,7 +356,14 @@ bool CMainWindow::verifySettings() return !count_errors; } - + + void CMainWindow::setActiveSubWindow(QWidget *window) + { + if (!window) + return; + _ui.mdiArea->setActiveSubWindow(qobject_cast(window)); + } + list CMainWindow::convertQStringList(QStringList listq) { std::list stdlist; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h index 863145bc5..9d7cb8862 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h @@ -36,6 +36,8 @@ #include #include #include +#include + #include "ui_translation_manager_main_window.h" @@ -48,6 +50,12 @@ using namespace std; namespace Plugin { +struct CCelPos +{ + int col; + int row; +}; + class CMainWindow : public QMainWindow { Q_OBJECT @@ -57,9 +65,14 @@ public: QUndoStack *m_undoStack; private: Ui::CMainWindow _ui; + + map > modifiedCells; // actions QAction *openAct; QAction *saveAct; + QAction *saveAsAct; + QMenu *windowMenu; + QSignalMapper *windowMapper; // config map > config_paths; list languages; @@ -70,13 +83,17 @@ private Q_SLOTS: void extractBotNames(); void open(); void save(); + void saveAs(); void sheetEditorChanged(int, int); + void setActiveSubWindow(QWidget *window); + void activeSubWindowChanged(); private: void compareBotNames(); bool verifySettings(); void readSettings(); void createMenus(); void createToolbar(); + void updateWindowsList(); list convertQStringList(QStringList listq); From e555146038395a905d125976285b4f8d3b6f3839 Mon Sep 17 00:00:00 2001 From: cemycc Date: Mon, 27 Jun 2011 03:02:21 +0300 Subject: [PATCH 10/14] Changed: #1307 Added option to extract the botnames from primitives. --- .../translation_manager/extract_bot_names.cpp | 28 ++- .../translation_manager_main_window.cpp | 192 +++++++++++++----- .../translation_manager_main_window.h | 2 + 3 files changed, 161 insertions(+), 61 deletions(-) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp index a5e5690ad..66d7d1c69 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp @@ -155,6 +155,16 @@ map getSimpleNames() return SimpleNames; } +void cleanSimpleNames() +{ + SimpleNames.clear(); +} + +void cleanGenericNames() +{ + GenericNames.clear(); +} + string removeAndStoreFunction(const std::string &fullName) { string::size_type pos = fullName.find("$"); @@ -228,7 +238,7 @@ void addSimpleName(const std::string &name, const std::string &sheetName) } } -int extractBotNamesAll(map > config_paths, string ligo_class_file, string trans_path, string work_path) +void setPathsForPrimitives(map > config_paths, string ligo_class_file) { for (std::list::iterator it = config_paths["paths"].begin(); it != config_paths["paths"].end(); ++it) { @@ -265,8 +275,11 @@ int extractBotNamesAll(map > config_paths, string ligo_class LigoConfig.readPrimitiveClass(ligoPath.c_str(), false); NLLIGO::Register(); - CPrimitiveContext::instance().CurrentLigoConfig = &LigoConfig; + CPrimitiveContext::instance().CurrentLigoConfig = &LigoConfig; +} +void extractBotNamesFromPrimitives() +{ //------------------------------------------------------------------- // ok, ready for the real work, // first, read the primitives files and parse the primitives @@ -429,8 +442,13 @@ int extractBotNamesAll(map > config_paths, string ligo_class } } } - } - + } +} + +int extractBotNamesAll(map > config_paths, string ligo_class_file, string trans_path, string work_path) +{ + + /* //------------------------------------------------------------------- // step 2 : load the reference file @@ -760,7 +778,7 @@ int extractBotNamesAll(map > config_paths, string ligo_class CI18N::writeTextFile(trans_path_file, s, false); s = prepareExcelSheet(fcts); CI18N::writeTextFile(title_path_file, s, false); - +*/ return 0; } diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp index 1866b3975..946ed78fe 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp @@ -48,8 +48,13 @@ struct TEntryInfo }; set getGenericNames(); +void cleanGenericNames(); map getSimpleNames(); -int extractBotNamesAll(map > config_paths, string ligo_class_file, string trans_path, string work_path); +void cleanSimpleNames(); +void setPathsForPrimitives(map > config_paths, string ligo_class_file); +void extractBotNamesFromPrimitives(); +string cleanupName(const std::string &name); +ucstring cleanupUcName(const ucstring &name); namespace Plugin { @@ -61,6 +66,9 @@ CMainWindow::CMainWindow(QWidget *parent) _ui.mdiArea->closeAllSubWindows(); connect(_ui.mdiArea, SIGNAL(subWindowActivated(QMdiSubWindow*)),this, SLOT(activeSubWindowChanged())); + // set extraction scripts counters + execution_count["extract_bot_names"] = 0; + readSettings(); createToolbar(); m_undoStack = new QUndoStack(this); @@ -68,28 +76,25 @@ CMainWindow::CMainWindow(QWidget *parent) void CMainWindow::createToolbar() { - // Tools menu - Core::IMenuManager *menuManager = Core::ICore::instance()->menuManager(); - QMenu *translationManagerMenu = new QMenu("Translation Manager"); - QAction *extractBotNamesAct = translationManagerMenu->addAction("Extract bot names"); - extractBotNamesAct->setStatusTip(tr("Extract bot names from primitives")); - QMenu *toolMenu = menuManager->menu(Core::Constants::M_TOOLS); - toolMenu->addMenu(translationManagerMenu); - - // File menu openAct = new QAction(QIcon(Core::Constants::ICON_OPEN), "&Open...", this); _ui.toolBar->addAction(openAct); - connect(openAct, SIGNAL(triggered()), this, SLOT(open())); - + connect(openAct, SIGNAL(triggered()), this, SLOT(open())); saveAct = new QAction(QIcon(Core::Constants::ICON_SAVE), "&Save...", this); _ui.toolBar->addAction(saveAct); - connect(saveAct, SIGNAL(triggered()), this, SLOT(save())); - + connect(saveAct, SIGNAL(triggered()), this, SLOT(save())); saveAsAct = new QAction(QIcon(Core::Constants::ICON_SAVE_AS), "&Save as...", this); _ui.toolBar->addAction(saveAsAct); connect(saveAsAct, SIGNAL(triggered()), this, SLOT(saveAs())); + // Tools menu + QMenu *wordsExtractionMenu = new QMenu("&Words extraction..."); + wordsExtractionMenu->setIcon(QIcon(Core::Constants::ICON_SETTINGS)); + _ui.toolBar->addAction(wordsExtractionMenu->menuAction()); + QAction *extractBotNamesAct = wordsExtractionMenu->addAction("&Extract bot names..."); + extractBotNamesAct->setStatusTip(tr("Extract bot names from primitives.")); + connect(extractBotNamesAct, SIGNAL(triggered()), this, SLOT(extractBotNames())); + // Windows menu windowMapper = new QSignalMapper(this); connect(windowMapper, SIGNAL(mapped(QWidget*)), this, SLOT(setActiveSubWindow(QWidget*))); @@ -97,8 +102,6 @@ void CMainWindow::createToolbar() windowMenu->setIcon(QIcon(Core::Constants::ICON_PILL)); _ui.toolBar->addAction(windowMenu->menuAction()); connect(windowMenu, SIGNAL(aboutToShow()), this, SLOT(updateWindowsList())); - - } void CMainWindow::activeSubWindowChanged() @@ -136,32 +139,60 @@ void CMainWindow::open() STRING_MANAGER::TWorksheet wk_file; if(loadExcelSheet(file_name.toStdString(), wk_file, true) == true) { + bool hasHashValue = false; QTableWidget *wk_table = new QTableWidget(); wk_table->setToolTip(file_name); wk_table->setWindowFilePath(file_name); - wk_table->setColumnCount(wk_file.ColCount); + if(wk_file.getData(0, 0) == ucstring("*HASH_VALUE")) + { + wk_table->setColumnCount(wk_file.ColCount - 1); + hasHashValue = true; + } else { + wk_table->setColumnCount(wk_file.ColCount); + } wk_table->setRowCount(wk_file.size() - 1); // read columns name + for(unsigned int i = 0; i < wk_file.ColCount; i++) { - QTableWidgetItem *col = new QTableWidgetItem(); - ucstring col_name = wk_file.getData(0, i); - col->setText(tr(col_name.toString().c_str())); - - wk_table->setHorizontalHeaderItem(i, col); + if(hasHashValue && i == 0) + { + // we don't show the column with hash value + } else { + QTableWidgetItem *col = new QTableWidgetItem(); + ucstring col_name = wk_file.getData(0, i); + col->setText(tr(col_name.toString().c_str())); + if(hasHashValue) + { + wk_table->setHorizontalHeaderItem(i - 1, col); + } else { + wk_table->setHorizontalHeaderItem(i, col); + } + } } // read rows + for(unsigned int i = 1; i < wk_file.size(); i++) { for(unsigned int j = 0; j < wk_file.ColCount; j++) { - QTableWidgetItem *row = new QTableWidgetItem(); - ucstring row_value = wk_file.getData(i, j); - row->setText(tr(row_value.toString().c_str())); - - wk_table->setItem(i - 1, j, row); - } - } + if(hasHashValue && j == 0) + { + // we don't show the column with hash value + } else { + QTableWidgetItem *row = new QTableWidgetItem(); + ucstring row_value = wk_file.getData(i, j); + row->setText(tr(row_value.toString().c_str())); + if(hasHashValue) + { + wk_table->setItem(i - 1, j - 1, row); + } else { + wk_table->setItem(i - 1, j, row); + } + } + } + } + QMdiSubWindow *sub_window = new QMdiSubWindow(_ui.mdiArea); sub_window->setWidget(wk_table); wk_table->resizeColumnsToContents(); @@ -170,7 +201,6 @@ void CMainWindow::open() sub_window->activateWindow(); // set editor signals connect(wk_table, SIGNAL(cellChanged(int,int) ), this, SLOT(sheetEditorChanged(int,int))); - // windows menu updateWindowsList(); } else { QErrorMessage error_settings; @@ -284,10 +314,81 @@ void CMainWindow::saveAs() } } - - QErrorMessage error_settings; - error_settings.showMessage( file_name); - error_settings.exec(); +} + +void CMainWindow::extractBotNames() +{ + if(verifySettings() == true) + { + QMdiSubWindow *current_window = _ui.mdiArea->currentSubWindow(); + if(QString(current_window->widget()->metaObject()->className()) == "QTableWidget") // Sheet Editor + { + if(execution_count["extract_bot_names"] == 0) + setPathsForPrimitives(config_paths, ligo_path); + extractBotNamesFromPrimitives(); + execution_count["extract_bot_names"] = execution_count["extract_bot_names"] + 1; + + QWidget *subwindow_widget = current_window->widget(); + QTableWidget *table_editor = qobject_cast(subwindow_widget); + // get SimpleNames + { + map SimpleNames = getSimpleNames(); + map::iterator it(SimpleNames.begin()), last(SimpleNames.end()); + + for (; it != last; ++it) + { + QList search_results = table_editor->findItems(tr(it->first.c_str()), Qt::MatchExactly); + if(search_results.size() == 0) + { + const int currentRow = table_editor->rowCount(); + table_editor->setRowCount(currentRow + 1); + QTableWidgetItem *bot_name_row = new QTableWidgetItem(); + bot_name_row->setText(tr(it->first.c_str())); + bot_name_row->setBackgroundColor(QColor("#F75D59")); + table_editor ->setItem(currentRow, 0, bot_name_row); + QTableWidgetItem *translation_name_row = new QTableWidgetItem(); + translation_name_row->setBackgroundColor(QColor("#F75D59")); + translation_name_row->setText(tr(it->first.c_str())); + table_editor ->setItem(currentRow , 1, translation_name_row); + QTableWidgetItem *sheet_name_row = new QTableWidgetItem(); + sheet_name_row->setText(tr(it->second.SheetName.c_str())); + sheet_name_row->setBackgroundColor(QColor("#F75D59")); + table_editor ->setItem(currentRow, 2, sheet_name_row); + } + } + cleanSimpleNames(); + } + // get GenericNames + { + set GenericNames = getGenericNames(); + set::iterator it(GenericNames.begin()), last(GenericNames.end()); + for (; it != last; ++it) + { + string gnName = "gn_" + cleanupName(*it); + QList search_results = table_editor->findItems(tr((*it).c_str()), Qt::MatchExactly); + if(search_results.size() == 0) + { + const int currentRow = table_editor->rowCount(); + table_editor->setRowCount(currentRow + 1); + QTableWidgetItem *bot_name_row = new QTableWidgetItem(); + bot_name_row->setText(tr((*it).c_str())); + bot_name_row->setBackgroundColor(QColor("#F75D59")); + table_editor ->setItem(currentRow, 0, bot_name_row); + QTableWidgetItem *translation_name_row = new QTableWidgetItem(); + translation_name_row->setBackgroundColor(QColor("#F75D59")); + translation_name_row->setText(tr(gnName.c_str())); + table_editor ->setItem(currentRow , 1, translation_name_row); + QTableWidgetItem *sheet_name_row = new QTableWidgetItem(); + sheet_name_row->setText(" "); + sheet_name_row->setBackgroundColor(QColor("#F75D59")); + table_editor ->setItem(currentRow, 2, sheet_name_row); + } + } + cleanGenericNames(); + } + + } + } } void CMainWindow::readSettings() @@ -312,15 +413,6 @@ void CMainWindow::readSettings() settings->endGroup(); } -void CMainWindow::extractBotNames() -{ - if(verifySettings() == true) - { - - } -} - - bool CMainWindow::verifySettings() { bool count_errors = false; @@ -338,19 +430,7 @@ bool CMainWindow::verifySettings() error_settings.exec(); count_errors = true; } - - if((settings->value("ligo").toString().isEmpty() - || settings->value("translation").toString().isEmpty() - || settings->value("work").toString().isEmpty() - || settings->value("trlanguages").toList().count() == 0) - && count_errors == false) - { - QErrorMessage error_settings; - error_settings.showMessage("Please write the paths for ligo, translation and work files and the languages on the settings dialog." + settings->value("trlanguages").toString()); - error_settings.exec(); - count_errors = true; - } - + settings->endGroup(); return !count_errors; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h index 9d7cb8862..4df21fa0b 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h @@ -79,6 +79,8 @@ private: string ligo_path; string translation_path; string work_path; + // counts + map execution_count; private Q_SLOTS: void extractBotNames(); void open(); From cfc7d5e25070a491d27ff0eaa8da83188195ea8e Mon Sep 17 00:00:00 2001 From: cemycc Date: Fri, 1 Jul 2011 21:51:41 +0300 Subject: [PATCH 11/14] Changed: #1307 New structure for subwindows from QMdiArea --- .../translation_manager/CMakeLists.txt | 4 +- .../translation_manager/editor_worksheet.cpp | 353 +++++++++++++++++ .../translation_manager/editor_worksheet.h | 48 +++ .../translation_manager_editor.h | 35 ++ .../translation_manager_main_window.cpp | 371 +++++++----------- .../translation_manager_main_window.h | 52 ++- .../translation_manager_main_window.ui | 26 +- .../translation_manager_plugin.cpp | 2 +- 8 files changed, 606 insertions(+), 285 deletions(-) create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.cpp create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.h create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_editor.h diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt index ec3980f05..edc0a60e5 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt @@ -11,7 +11,9 @@ SET(OVQT_EXT_SYS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin. SET(OVQT_PLUG_TRANSLATION_MANAGER_HDR translation_manager_plugin.h translation_manager_main_window.h - translation_manager_settings_page.h) + translation_manager_settings_page.h + translation_manager_editor.h + editor_worksheet.h) SET(OVQT_PLUG_TRANSLATION_MANAGER_UIS translation_manager_settings_page.ui translation_manager_main_window.ui) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.cpp new file mode 100644 index 000000000..ee32e3979 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.cpp @@ -0,0 +1,353 @@ +// 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 . + +#include "editor_worksheet.h" +#include +// Qt includes +#include +#include +#include +#include +#include + +using namespace std; + +struct TEntryInfo +{ + string SheetName; +}; + +set getGenericNames(); +void cleanGenericNames(); +map getSimpleNames(); +void cleanSimpleNames(); +void setPathsForPrimitives(map > config_paths, string ligo_class_file); +void extractBotNamesFromPrimitives(); +string cleanupName(const std::string &name); +ucstring cleanupUcName(const ucstring &name); + +namespace Plugin { + + + +void CEditorWorksheet::open(QString filename) +{ + STRING_MANAGER::TWorksheet wk_file; + if(loadExcelSheet(filename.toStdString(), wk_file, true) == true) + { + bool hasHashValue = false; + table_editor = new QTableWidget(); + if(wk_file.getData(0, 0) == ucstring("*HASH_VALUE")) + { + table_editor->setColumnCount(wk_file.ColCount - 1); + hasHashValue = true; + } else { + table_editor->setColumnCount(wk_file.ColCount); + } + table_editor->setRowCount(wk_file.size() - 1); + + // read columns name + for(unsigned int i = 0; i < wk_file.ColCount; i++) + { + if(hasHashValue && i == 0) + { + // we don't show the column with hash value + } else { + QTableWidgetItem *col = new QTableWidgetItem(); + ucstring col_name = wk_file.getData(0, i); + col->setText(tr(col_name.toString().c_str())); + if(hasHashValue) + { + table_editor->setHorizontalHeaderItem(i - 1, col); + } else { + table_editor->setHorizontalHeaderItem(i, col); + } + } + } + + // read rows + for(unsigned int i = 1; i < wk_file.size(); i++) + { + for(unsigned int j = 0; j < wk_file.ColCount; j++) + { + if(hasHashValue && j == 0) + { + // we don't show the column with hash value + } else { + QTableWidgetItem *row = new QTableWidgetItem(); + ucstring row_value = wk_file.getData(i, j); + row->setText(tr(row_value.toString().c_str())); + if(hasHashValue) + { + table_editor->setItem(i - 1, j - 1, row); + } else { + table_editor->setItem(i - 1, j, row); + } + } + } + } + setCurrentFile(filename); + setAttribute(Qt::WA_DeleteOnClose); + setWidget(table_editor); + table_editor->resizeColumnsToContents(); + table_editor->resizeRowsToContents(); + // set editor signals + connect(table_editor, SIGNAL(cellChanged(int,int) ), this, SLOT(worksheetEditorChanged(int,int))); + } else { + QErrorMessage error; + error.showMessage("This file is not a worksheet file."); + error.exec(); + } + +} + +void CEditorWorksheet::activateWindow() +{ + showMaximized(); + +} + +void CEditorWorksheet::save() +{ + STRING_MANAGER::TWorksheet wk_file; + loadExcelSheet(current_file.toStdString(), wk_file, true); + uint rowIdx; + uint colIdx = 0; + bool hasHashValue = false; + if(wk_file.getData(0, 0) == ucstring("*HASH_VALUE")) + { + hasHashValue = true; + colIdx = 1; + } + for(int i = 0; i < table_editor->rowCount(); i++) + { + // maybe extra rows ? + if((unsigned)table_editor->rowCount() > (wk_file.size() - 1)) + { + rowIdx = wk_file.size(); + wk_file.resize(rowIdx + table_editor->rowCount() - wk_file.size() + 1); + } + for(int j = 0; j < table_editor->columnCount(); j++) + { + ucstring tvalue; + ucstring colname; + uint rowIdf; + QString tvalueQt = table_editor->item(i, j)->text(); + tvalue = ucstring(tvalueQt.toStdString()); + colname = wk_file.getData(0, j + colIdx); + + rowIdf = uint(i + 1); + if(wk_file.findRow(j + colIdx, colname, rowIdf)) + { + if(wk_file.getData(i + 1, j + colIdx) != tvalue) + { + wk_file.setData(i + 1, j + colIdx, tvalue); + } + } else { + wk_file.setData(i + 1, j + colIdx, tvalue); + } + } + } + if(hasHashValue) + { + // rewrite the hash codes + makeHashCode(wk_file, true); + } + // write to file + ucstring s = prepareExcelSheet(wk_file); + NLMISC::CI18N::writeTextFile(current_file.toStdString(), s, false); + setCurrentFile(current_file); +} + +void CEditorWorksheet::saveAs(QString filename) +{ + STRING_MANAGER::TWorksheet new_file, wk_file; + loadExcelSheet(current_file.toStdString(), wk_file, true); + // set columns + new_file.resize(new_file.size() + 1); + for(unsigned int i = 0; i < wk_file.ColCount; i++) + { + ucstring col_name = wk_file.getData(0, i); + new_file.insertColumn(new_file.ColCount); + new_file.setData(0, new_file.ColCount - 1, col_name); + } + // read all the rows from table + uint rowIdx; + uint colIdx = 0; + bool hasHashValue = false; + if(wk_file.getData(0, 0) == ucstring("*HASH_VALUE")) + { + hasHashValue = true; + colIdx = 1; + } + for(int i = 0; i < table_editor->rowCount(); i++) + { + rowIdx = new_file.size(); + new_file.resize(new_file.size() + 1); + for(int j = 0; j < table_editor->columnCount(); j++) + { + QTableWidgetItem* item = table_editor->item(i, j); + new_file.setData(rowIdx, j + colIdx, ucstring(item->text().toStdString())); + } + } + if(hasHashValue) + { + // rewrite the hash codes + makeHashCode(wk_file, true); + } + ucstring s = prepareExcelSheet(new_file); + NLMISC::CI18N::writeTextFile(filename.toStdString(), s, false); + setCurrentFile(filename); +} + +void CEditorWorksheet::insertRow() +{ + int last_row = table_editor->rowCount(); + table_editor->setRowCount(last_row + 1); + for(int j = 0; j < table_editor->columnCount(); j++) + { + QTableWidgetItem* item = new QTableWidgetItem(); + //item->setText(QString(" ")); + table_editor->setItem(last_row, j, item); + } +} + +void CEditorWorksheet::deleteRow() +{ + int selected_row = table_editor->currentRow(); + QMessageBox msgBox; + msgBox.setText("The row will be deleted."); + msgBox.setInformativeText("Do you want to delete the selected row ?"); + msgBox.setStandardButtons(QMessageBox::No | QMessageBox::Yes); + msgBox.setDefaultButton(QMessageBox::No); + int ret = msgBox.exec(); + + if(ret == QMessageBox::Yes) + { + table_editor->removeRow(selected_row); + } + + table_editor->clearFocus(); + table_editor->clearSelection(); + return; +} + +void CEditorWorksheet::worksheetEditorChanged(int row, int column) +{ + +} + +void CEditorWorksheet::extractBotNames() +{ + bool modified = false; +// get SimpleNames + { + map SimpleNames = getSimpleNames(); + map::iterator it(SimpleNames.begin()), last(SimpleNames.end()); + + for (; it != last; ++it) + { + QList search_results = table_editor->findItems(tr(it->first.c_str()), Qt::MatchExactly); + if(search_results.size() == 0) + { + const int currentRow = table_editor->rowCount(); + table_editor->setRowCount(currentRow + 1); + QTableWidgetItem *bot_name_row = new QTableWidgetItem(); + bot_name_row->setText(tr(it->first.c_str())); + bot_name_row->setBackgroundColor(QColor("#F75D59")); + table_editor ->setItem(currentRow, 0, bot_name_row); + QTableWidgetItem *translation_name_row = new QTableWidgetItem(); + translation_name_row->setBackgroundColor(QColor("#F75D59")); + translation_name_row->setText(tr(it->first.c_str())); + table_editor ->setItem(currentRow , 1, translation_name_row); + QTableWidgetItem *sheet_name_row = new QTableWidgetItem(); + sheet_name_row->setText(tr(it->second.SheetName.c_str())); + sheet_name_row->setBackgroundColor(QColor("#F75D59")); + table_editor ->setItem(currentRow, 2, sheet_name_row); + if(!modified) modified = true; + } + } + cleanSimpleNames(); + } + // get GenericNames + { + set GenericNames = getGenericNames(); + set::iterator it(GenericNames.begin()), last(GenericNames.end()); + for (; it != last; ++it) + { + string gnName = "gn_" + cleanupName(*it); + QList search_results = table_editor->findItems(tr((*it).c_str()), Qt::MatchExactly); + if(search_results.size() == 0) + { + const int currentRow = table_editor->rowCount(); + table_editor->setRowCount(currentRow + 1); + QTableWidgetItem *bot_name_row = new QTableWidgetItem(); + bot_name_row->setText(tr((*it).c_str())); + bot_name_row->setBackgroundColor(QColor("#F75D59")); + table_editor ->setItem(currentRow, 0, bot_name_row); + QTableWidgetItem *translation_name_row = new QTableWidgetItem(); + translation_name_row->setBackgroundColor(QColor("#F75D59")); + translation_name_row->setText(tr(gnName.c_str())); + table_editor ->setItem(currentRow , 1, translation_name_row); + QTableWidgetItem *sheet_name_row = new QTableWidgetItem(); + sheet_name_row->setText(" "); + sheet_name_row->setBackgroundColor(QColor("#F75D59")); + table_editor ->setItem(currentRow, 2, sheet_name_row); + if(!modified) modified = true; + } + } + cleanGenericNames(); + } + if(modified) + { + setWindowModified(true); + } + +} + +void CEditorWorksheet::setCurrentFile(QString filename) +{ + QFileInfo *file = new QFileInfo(filename); + current_file = file->canonicalFilePath(); + setWindowModified(false); + setWindowTitle(file->fileName() + "[*]"); + setWindowFilePath(current_file); +} + +void CEditorWorksheet::closeEvent(QCloseEvent *event) +{ + close(); + event->accept(); + +} + +bool CEditorWorksheet::isBotNamesTable() +{ + bool status = true; + if(table_editor->horizontalHeaderItem(0)->text() != "bot name" + || table_editor->horizontalHeaderItem(1)->text() != "translated name" + || table_editor->horizontalHeaderItem(2)->text() != "sheet_name") + { + status = false; + } + + return status; +} + +} + + diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.h new file mode 100644 index 000000000..71e86af84 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.h @@ -0,0 +1,48 @@ + +#ifndef EDITOR_WORKSHEET_H +#define EDITOR_WORKSHEET_H + +// Nel includes +#include "nel/misc/types_nl.h" +#include "nel/misc/sheet_id.h" +#include "nel/misc/path.h" +#include "nel/misc/diff_tool.h" + +// Qt includes +#include +#include +#include +#include +#include + +#include "translation_manager_editor.h" + +namespace Plugin { + +class CEditorWorksheet : public CEditor +{ + Q_OBJECT +private: + QTableWidget* table_editor; +public: + CEditorWorksheet(QMdiArea* parent) : CEditor(parent) {} + CEditorWorksheet() : CEditor() {} + void open(QString filename); + void save(); + void saveAs(QString filename); + void activateWindow(); + void extractBotNames(); + bool isBotNamesTable(); + void closeEvent(QCloseEvent *event); +private Q_SLOTS: + void worksheetEditorChanged(int,int); + void insertRow(); + void deleteRow(); +private: + void setCurrentFile(QString filename); + +}; + +}; +#endif /* EDITOR_WORKSHEET_H */ + diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_editor.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_editor.h new file mode 100644 index 000000000..605d11d6e --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_editor.h @@ -0,0 +1,35 @@ + +#ifndef TRANSLATION_MANAGER_EDITOR_H +#define TRANSLATION_MANAGER_EDITOR_H + +#include +#include +#include +#include + +namespace Plugin { + +class CEditor : public QMdiSubWindow { +Q_OBJECT +protected: + QString current_file; + int editor_type; +public: + CEditor(QMdiArea* parent) : QMdiSubWindow(parent) {} + CEditor() : QMdiSubWindow() {} + virtual void open(QString filename) =0; + virtual void save() =0; + virtual void saveAs(QString filename) =0; + virtual void activateWindow() =0; +public: + QString subWindowFilePath() + { + return current_file; + } +}; + +} + + +#endif /* TRANSLATION_MANAGER_EDITOR_H */ + diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp index 946ed78fe..8b8c50a22 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp @@ -16,6 +16,8 @@ // along with this program. If not, see . #include "translation_manager_main_window.h" +#include "editor_worksheet.h" + // Project system includes #include "../core/icore.h" #include "../core/core_constants.h" @@ -40,6 +42,9 @@ #include #include #include +#include +#include + struct TEntryInfo @@ -63,9 +68,12 @@ CMainWindow::CMainWindow(QWidget *parent) : QMainWindow(parent) { _ui.setupUi(this); + _ui.mdiArea->closeAllSubWindows(); connect(_ui.mdiArea, SIGNAL(subWindowActivated(QMdiSubWindow*)),this, SLOT(activeSubWindowChanged())); - + windowMapper = new QSignalMapper(this); + connect(windowMapper, SIGNAL(mapped(QWidget*)), this, SLOT(setActiveSubWindow(QWidget*))); + // set extraction scripts counters execution_count["extract_bot_names"] = 0; @@ -96,26 +104,52 @@ void CMainWindow::createToolbar() connect(extractBotNamesAct, SIGNAL(triggered()), this, SLOT(extractBotNames())); // Windows menu - windowMapper = new QSignalMapper(this); - connect(windowMapper, SIGNAL(mapped(QWidget*)), this, SLOT(setActiveSubWindow(QWidget*))); windowMenu = new QMenu(tr("&Windows..."), _ui.toolBar); - windowMenu->setIcon(QIcon(Core::Constants::ICON_PILL)); + windowMenu->setIcon(QIcon(Core::Constants::ICON_PILL)); + updateWindowsList(); _ui.toolBar->addAction(windowMenu->menuAction()); connect(windowMenu, SIGNAL(aboutToShow()), this, SLOT(updateWindowsList())); } +void CMainWindow::updateToolbar(QMdiSubWindow *window) +{ + if(_ui.mdiArea->subWindowList().size() > 0) + if(QString(window->widget()->metaObject()->className()) == "QTableWidget") // Sheet Editor + { + QAction *insertRowAct = windowMenu->addAction("Insert new row"); + connect(insertRowAct, SIGNAL(triggered()), window, SLOT(insertRow())); + QAction *deleteRowAct = windowMenu->addAction("Delete row"); + connect(deleteRowAct, SIGNAL(triggered()), window, SLOT(deleteRow())); + + } +} + +void CMainWindow::setActiveSubWindow(QWidget* window) +{ + if (!window) + { + return; + } + QMdiSubWindow *cwindow = qobject_cast(window); + _ui.mdiArea->setActiveSubWindow(cwindow); +} + void CMainWindow::activeSubWindowChanged() { - updateWindowsList(); + } void CMainWindow::updateWindowsList() { - int i = 0; windowMenu->clear(); - QList windows = _ui.mdiArea->subWindowList(); - for (QList::iterator it = windows.begin(); it != windows.end(); ++it) { - QString window_file = QFileInfo((*it)->widget()->windowFilePath()).fileName(); + QMdiSubWindow *current_window = _ui.mdiArea->activeSubWindow(); + QList subWindows = _ui.mdiArea->subWindowList(); + + updateToolbar(current_window); + + for(int i = 0; i < subWindows.size(); ++i) + { + QString window_file = QFileInfo(subWindows.at(i)->windowFilePath()).fileName(); QString action_text; if (i < 9) { action_text = tr("&%1 %2").arg(i + 1).arg(window_file); @@ -124,149 +158,49 @@ void CMainWindow::updateWindowsList() } QAction *action = windowMenu->addAction(action_text); action->setCheckable(true); - action->setChecked((*it) == _ui.mdiArea->activeSubWindow()); - connect(action, SIGNAL(triggered()), windowMapper, SLOT(map())); - windowMapper->setMapping(action, windows.at(i)); - i++; + action->setChecked(subWindows.at(i) == current_window); + connect(action, SIGNAL(triggered()), windowMapper, SLOT(map())); + windowMapper->setMapping(action, subWindows.at(i)); } } void CMainWindow::open() { QString file_name = QFileDialog::getOpenFileName(this); - if (!file_name.isEmpty()) - { - STRING_MANAGER::TWorksheet wk_file; - if(loadExcelSheet(file_name.toStdString(), wk_file, true) == true) - { - bool hasHashValue = false; - QTableWidget *wk_table = new QTableWidget(); - wk_table->setToolTip(file_name); - wk_table->setWindowFilePath(file_name); - if(wk_file.getData(0, 0) == ucstring("*HASH_VALUE")) - { - wk_table->setColumnCount(wk_file.ColCount - 1); - hasHashValue = true; - } else { - wk_table->setColumnCount(wk_file.ColCount); - } - wk_table->setRowCount(wk_file.size() - 1); - // read columns name - - for(unsigned int i = 0; i < wk_file.ColCount; i++) - { - if(hasHashValue && i == 0) - { - // we don't show the column with hash value - } else { - QTableWidgetItem *col = new QTableWidgetItem(); - ucstring col_name = wk_file.getData(0, i); - col->setText(tr(col_name.toString().c_str())); - if(hasHashValue) - { - wk_table->setHorizontalHeaderItem(i - 1, col); - } else { - wk_table->setHorizontalHeaderItem(i, col); - } - } - } - // read rows - - for(unsigned int i = 1; i < wk_file.size(); i++) - { - for(unsigned int j = 0; j < wk_file.ColCount; j++) - { - if(hasHashValue && j == 0) - { - // we don't show the column with hash value - } else { - QTableWidgetItem *row = new QTableWidgetItem(); - ucstring row_value = wk_file.getData(i, j); - row->setText(tr(row_value.toString().c_str())); - if(hasHashValue) - { - wk_table->setItem(i - 1, j - 1, row); - } else { - wk_table->setItem(i - 1, j, row); - } - } + if(!file_name.isEmpty()) + { + list subWindows = convertSubWindowList(_ui.mdiArea->subWindowList()); + list::iterator it = subWindows.begin(); + CEditor* current_window = qobject_cast(_ui.mdiArea->currentSubWindow()); + for(; it != subWindows.end(); ++it) + { + QString sw_file = (*it)->subWindowFilePath(); + if(file_name == sw_file) + { + if((*it) != current_window) + { + (*it)->activateWindow(); } + return; } - - QMdiSubWindow *sub_window = new QMdiSubWindow(_ui.mdiArea); - sub_window->setWidget(wk_table); - wk_table->resizeColumnsToContents(); - wk_table->resizeRowsToContents(); - wk_table->showMaximized(); - sub_window->activateWindow(); - // set editor signals - connect(wk_table, SIGNAL(cellChanged(int,int) ), this, SLOT(sheetEditorChanged(int,int))); - updateWindowsList(); - } else { - QErrorMessage error_settings; - error_settings.showMessage("This file is not a worksheet file."); - error_settings.exec(); + } + if(isWorksheetEditor(file_name)) + { + CEditorWorksheet *new_window = new CEditorWorksheet(_ui.mdiArea); + new_window->open(file_name); + new_window->activateWindow(); } } } -void CMainWindow::sheetEditorChanged(int row, int column) -{ - saveAct->setEnabled(true); - QMdiSubWindow *current_window = _ui.mdiArea->currentSubWindow(); - if(modifiedCells.find(current_window) != modifiedCells.end()) // founded - { - list cells = modifiedCells[current_window]; - bool overwriteResult = false; - for(list::iterator it = cells.begin(); it != cells.end(); ++it) - { - if((*it).row == row && (*it).col == column ) - overwriteResult = true; - } - if(overwriteResult == false) - { - CCelPos v; - v.row = row; - v.col = column; - cells.push_back(v); - } - } else { // not found - list cells; - CCelPos v; - v.row = row; - v.col = column; - cells.push_back(v); - modifiedCells[current_window] = cells; - } -} - void CMainWindow::save() { - QMdiSubWindow *current_window = _ui.mdiArea->currentSubWindow(); + CEditor* current_window = qobject_cast(_ui.mdiArea->currentSubWindow()); if(QString(current_window->widget()->metaObject()->className()) == "QTableWidget") // Sheet Editor { - QWidget *subwindow_widget = current_window->widget(); - QTableWidget *table_editor = qobject_cast(subwindow_widget); - QString file_path = table_editor->windowFilePath(); - - if(modifiedCells.find(current_window) != modifiedCells.end()) - { - STRING_MANAGER::TWorksheet wk_file; - loadExcelSheet(file_path.toStdString(), wk_file, true); - list cells = modifiedCells[current_window]; - for(list::iterator it = cells.begin(); it != cells.end(); ++it) - { - QTableWidgetItem* edited_item = table_editor->item((*it).row, (*it).col); - wk_file.setData((*it).row + 1, (*it).col, ucstring(edited_item->text().toStdString())); - cells.erase(it); - } - ucstring s = prepareExcelSheet(wk_file); - NLMISC::CI18N::writeTextFile(file_path.toStdString(), s, false); - if(cells.size() == 0) - modifiedCells.erase(current_window); - } + current_window->save(); } } @@ -280,37 +214,10 @@ void CMainWindow::saveAs() if (!file_name.isEmpty()) { - QMdiSubWindow *current_window = _ui.mdiArea->currentSubWindow(); - + CEditor* current_window = qobject_cast(_ui.mdiArea->currentSubWindow()); if(QString(current_window->widget()->metaObject()->className()) == "QTableWidget") // Sheet Editor { - QWidget *subwindow_widget = current_window->widget(); - QTableWidget *table_editor = qobject_cast(subwindow_widget); - QString orig_file_path = table_editor->windowFilePath(); - STRING_MANAGER::TWorksheet new_file, wk_file; - loadExcelSheet(orig_file_path.toStdString(), wk_file, true); - // set columns - new_file.resize(new_file.size() + 1); - for(unsigned int i = 0; i < wk_file.ColCount; i++) - { - ucstring col_name = wk_file.getData(0, i); - new_file.insertColumn(new_file.ColCount); - new_file.setData(0, new_file.ColCount - 1, col_name); - } - // read all the rows from table - uint rowIdx; - for(int i = 0; i < table_editor->rowCount(); i++) - { - rowIdx = new_file.size(); - new_file.resize(new_file.size() + 1); - for(int j = 0; j < table_editor->columnCount(); j++) - { - QTableWidgetItem* item = table_editor->item(i, j); - new_file.setData(rowIdx, j, ucstring(item->text().toStdString())); - } - } - ucstring s = prepareExcelSheet(new_file); - NLMISC::CI18N::writeTextFile(file_name.toStdString(), s, false); + current_window->saveAs(file_name); } } @@ -320,72 +227,43 @@ void CMainWindow::extractBotNames() { if(verifySettings() == true) { - QMdiSubWindow *current_window = _ui.mdiArea->currentSubWindow(); - if(QString(current_window->widget()->metaObject()->className()) == "QTableWidget") // Sheet Editor + CEditor* editor_window = qobject_cast(_ui.mdiArea->currentSubWindow()); + if(QString(editor_window->widget()->metaObject()->className()) == "QTableWidget") // Sheet Editor { + CEditorWorksheet* current_window = qobject_cast(editor_window); + QString file_path = current_window->subWindowFilePath(); + if(!current_window->isBotNamesTable()) + { + list subWindows = convertSubWindowList(_ui.mdiArea->subWindowList()); + list::iterator it = subWindows.begin(); + bool finded = false; + for(; it != subWindows.end(), finded != true; ++it) + { + current_window = qobject_cast((*it)); + file_path = current_window->subWindowFilePath(); + if(current_window->isBotNamesTable()) + { + finded = true; + current_window->activateWindow(); + } + } + if(!finded) + { + open(); + current_window = qobject_cast(_ui.mdiArea->currentSubWindow()); + file_path = current_window->windowFilePath(); + } + } if(execution_count["extract_bot_names"] == 0) setPathsForPrimitives(config_paths, ligo_path); extractBotNamesFromPrimitives(); execution_count["extract_bot_names"] = execution_count["extract_bot_names"] + 1; - - QWidget *subwindow_widget = current_window->widget(); - QTableWidget *table_editor = qobject_cast(subwindow_widget); - // get SimpleNames - { - map SimpleNames = getSimpleNames(); - map::iterator it(SimpleNames.begin()), last(SimpleNames.end()); - - for (; it != last; ++it) - { - QList search_results = table_editor->findItems(tr(it->first.c_str()), Qt::MatchExactly); - if(search_results.size() == 0) - { - const int currentRow = table_editor->rowCount(); - table_editor->setRowCount(currentRow + 1); - QTableWidgetItem *bot_name_row = new QTableWidgetItem(); - bot_name_row->setText(tr(it->first.c_str())); - bot_name_row->setBackgroundColor(QColor("#F75D59")); - table_editor ->setItem(currentRow, 0, bot_name_row); - QTableWidgetItem *translation_name_row = new QTableWidgetItem(); - translation_name_row->setBackgroundColor(QColor("#F75D59")); - translation_name_row->setText(tr(it->first.c_str())); - table_editor ->setItem(currentRow , 1, translation_name_row); - QTableWidgetItem *sheet_name_row = new QTableWidgetItem(); - sheet_name_row->setText(tr(it->second.SheetName.c_str())); - sheet_name_row->setBackgroundColor(QColor("#F75D59")); - table_editor ->setItem(currentRow, 2, sheet_name_row); - } - } - cleanSimpleNames(); - } - // get GenericNames - { - set GenericNames = getGenericNames(); - set::iterator it(GenericNames.begin()), last(GenericNames.end()); - for (; it != last; ++it) - { - string gnName = "gn_" + cleanupName(*it); - QList search_results = table_editor->findItems(tr((*it).c_str()), Qt::MatchExactly); - if(search_results.size() == 0) - { - const int currentRow = table_editor->rowCount(); - table_editor->setRowCount(currentRow + 1); - QTableWidgetItem *bot_name_row = new QTableWidgetItem(); - bot_name_row->setText(tr((*it).c_str())); - bot_name_row->setBackgroundColor(QColor("#F75D59")); - table_editor ->setItem(currentRow, 0, bot_name_row); - QTableWidgetItem *translation_name_row = new QTableWidgetItem(); - translation_name_row->setBackgroundColor(QColor("#F75D59")); - translation_name_row->setText(tr(gnName.c_str())); - table_editor ->setItem(currentRow , 1, translation_name_row); - QTableWidgetItem *sheet_name_row = new QTableWidgetItem(); - sheet_name_row->setText(" "); - sheet_name_row->setBackgroundColor(QColor("#F75D59")); - table_editor ->setItem(currentRow, 2, sheet_name_row); - } - } - cleanGenericNames(); - } + + current_window->extractBotNames(); + // if(current_window->isWindowModified()) + // { + + // } } } @@ -413,6 +291,13 @@ void CMainWindow::readSettings() settings->endGroup(); } +void CMainWindow::debug(QString text) +{ + QErrorMessage error_settings; + error_settings.showMessage(text); + error_settings.exec(); +} + bool CMainWindow::verifySettings() { bool count_errors = false; @@ -436,14 +321,7 @@ bool CMainWindow::verifySettings() return !count_errors; } - - void CMainWindow::setActiveSubWindow(QWidget *window) - { - if (!window) - return; - _ui.mdiArea->setActiveSubWindow(qobject_cast(window)); - } - + list CMainWindow::convertQStringList(QStringList listq) { std::list stdlist; @@ -456,9 +334,36 @@ list CMainWindow::convertQStringList(QStringList listq) return stdlist; } +list CMainWindow::convertSubWindowList(QList listq) +{ + list subwindows; + QList::iterator it = listq.begin(); + + for(; it != listq.end(); ++it) + { + CEditor* current_window = qobject_cast((*it)); + subwindows.push_back(current_window); + } + + return subwindows; +} + +bool CMainWindow::isWorksheetEditor(QString filename) +{ + STRING_MANAGER::TWorksheet wk_file; + if(loadExcelSheet(filename.toStdString(), wk_file, true) == true) + { + return true; + } else { + return false; + } +} + bool CCoreListener::closeMainWindow() const { return true; } -} /* namespace Plugin */ \ No newline at end of file +} /* namespace Plugin */ + + diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h index 4df21fa0b..13a3ead97 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h @@ -33,29 +33,31 @@ #include #include #include -#include +#include #include #include #include - +#include "translation_manager_editor.h" #include "ui_translation_manager_main_window.h" #include class QWidget; + using namespace std; namespace Plugin { - -struct CCelPos -{ - int col; - int row; -}; +class CMdiSubWindow; + +struct WStatus +{ + bool modified; +}; + class CMainWindow : public QMainWindow { Q_OBJECT @@ -64,9 +66,8 @@ public: virtual ~CMainWindow() {} QUndoStack *m_undoStack; private: - Ui::CMainWindow _ui; - - map > modifiedCells; + + Ui::CMainWindow _ui; // actions QAction *openAct; QAction *saveAct; @@ -86,17 +87,22 @@ private Q_SLOTS: void open(); void save(); void saveAs(); - void sheetEditorChanged(int, int); - void setActiveSubWindow(QWidget *window); void activeSubWindowChanged(); + void setActiveSubWindow(QWidget *window); + void updateWindowsList(); + + void debug(QString text); // TODO private: - void compareBotNames(); + void updateToolbar(QMdiSubWindow *window); bool verifySettings(); void readSettings(); void createMenus(); void createToolbar(); - void updateWindowsList(); + list convertQStringList(QStringList listq); + list convertSubWindowList(QList listq); + bool isWorksheetEditor(QString filename); + }; @@ -111,21 +117,9 @@ public: virtual bool closeMainWindow() const; }; -class CMdiSubWindow : public QMdiSubWindow -{ - private: - int window_type; - public: - int getWType() - { - return window_type; - } - void setWType(int nType) - { - window_type = nType; - } -}; } // namespace Plugin + + #endif // SIMPLE_VIEWER_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.ui b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.ui index 395574415..71c139e0a 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.ui +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.ui @@ -16,27 +16,11 @@ - - - - 0 - 0 - - - - Qt::Horizontal - - - - true - - - - - - - - + + + + + diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp index 91e7686d5..890c589e9 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp @@ -92,7 +92,7 @@ QStringList TranslationManagerPlugin::dependencies() const { QStringList list; list.append(Core::Constants::OVQT_CORE_PLUGIN); - list.append("ObjectViewer"); + //list.append("ObjectViewer"); return list; } From a21a6ac07fdb3842a65a142d7cd29a39fb58a082 Mon Sep 17 00:00:00 2001 From: cemycc Date: Tue, 5 Jul 2011 05:01:13 +0300 Subject: [PATCH 12/14] Changed: #1307 Added extraction words options for: item, creature, sbrick, sphrase --- .../translation_manager/CMakeLists.txt | 4 +- .../translation_manager/editor_worksheet.cpp | 108 +++- .../translation_manager/editor_worksheet.h | 21 +- .../translation_manager/extract_bot_names.cpp | 467 +-------------- .../translation_manager/extract_bot_names.h | 111 ++++ .../extract_new_sheet_names.cpp | 154 +++++ .../extract_new_sheet_names.h | 70 +++ .../translation_manager_editor.h | 16 + .../translation_manager_main_window.cpp | 190 +++++-- .../translation_manager_main_window.h | 24 +- .../translation_manager_plugin.cpp | 17 + .../translation_manager_plugin.h | 17 + .../translation_manager_settings_page.cpp | 120 +--- .../translation_manager_settings_page.h | 11 +- .../translation_manager_settings_page.ui | 533 ++++++------------ 15 files changed, 835 insertions(+), 1028 deletions(-) create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.h create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.cpp create mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.h diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt index edc0a60e5..56195d6e0 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt @@ -13,7 +13,9 @@ SET(OVQT_PLUG_TRANSLATION_MANAGER_HDR translation_manager_plugin.h translation_manager_main_window.h translation_manager_settings_page.h translation_manager_editor.h - editor_worksheet.h) + editor_worksheet.h + extract_new_sheet_names.h + extract_bot_names.h) SET(OVQT_PLUG_TRANSLATION_MANAGER_UIS translation_manager_settings_page.ui translation_manager_main_window.ui) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.cpp index ee32e3979..d19d28723 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.cpp @@ -1,6 +1,6 @@ -// Object Viewer Qt - MMORPG Framework +// Translation Manager Plugin - OVQT Plugin // Copyright (C) 2010 Winch Gate Property Limited -// Copyright (C) 2011 Dzmitry Kamiahin +// Copyright (C) 2011 Emanuel Costea // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as @@ -24,22 +24,10 @@ #include #include +#include "extract_bot_names.h" + using namespace std; -struct TEntryInfo -{ - string SheetName; -}; - -set getGenericNames(); -void cleanGenericNames(); -map getSimpleNames(); -void cleanSimpleNames(); -void setPathsForPrimitives(map > config_paths, string ligo_class_file); -void extractBotNamesFromPrimitives(); -string cleanupName(const std::string &name); -ucstring cleanupUcName(const ucstring &name); - namespace Plugin { @@ -251,12 +239,15 @@ void CEditorWorksheet::worksheetEditorChanged(int row, int column) } -void CEditorWorksheet::extractBotNames() +void CEditorWorksheet::extractBotNames(list filters, string level_design_path, NLLIGO::CLigoConfig ligoConfig) { bool modified = false; -// get SimpleNames + ExtractBotNames ebn; + ebn.setRequiredSettings(filters, level_design_path); + ebn.extractBotNamesFromPrimitives(ligoConfig); + // get SimpleNames { - map SimpleNames = getSimpleNames(); + map SimpleNames = ebn.getSimpleNames(); map::iterator it(SimpleNames.begin()), last(SimpleNames.end()); for (; it != last; ++it) @@ -281,15 +272,15 @@ void CEditorWorksheet::extractBotNames() if(!modified) modified = true; } } - cleanSimpleNames(); + ebn.cleanSimpleNames(); } // get GenericNames { - set GenericNames = getGenericNames(); + set GenericNames = ebn.getGenericNames(); set::iterator it(GenericNames.begin()), last(GenericNames.end()); for (; it != last; ++it) { - string gnName = "gn_" + cleanupName(*it); + string gnName = "gn_" + ebn.cleanupName(*it); QList search_results = table_editor->findItems(tr((*it).c_str()), Qt::MatchExactly); if(search_results.size() == 0) { @@ -310,7 +301,7 @@ void CEditorWorksheet::extractBotNames() if(!modified) modified = true; } } - cleanGenericNames(); + ebn.cleanGenericNames(); } if(modified) { @@ -319,6 +310,77 @@ void CEditorWorksheet::extractBotNames() } +void CEditorWorksheet::extractWords(QString filename, QString columnId, IWordListBuilder& wordListBuilder) +{ + uint i; + + // **** Load the excel sheet + // load + TWorksheet workSheet; + if(!loadExcelSheet(filename.toStdString(), workSheet, true)) + { + nlwarning("Error reading '%s'. Aborted", filename.toStdString().c_str()); + return; + } + // get the key column index + uint keyColIndex = 0; + if(!workSheet.findCol(columnId.toStdString(), keyColIndex)) + { + nlwarning("Error: Don't find the column '%s'. '%s' Aborted", columnId.toStdString().c_str(), filename.toStdString().c_str()); + return; + } + // get the name column index + uint nameColIndex; + if(!workSheet.findCol(ucstring("name"), nameColIndex)) + { + nlwarning("Error: Don't find the column 'name'. '%s' Aborted", filename.toStdString().c_str()); + return; + } + + // **** List all words with the builder given + std::vector allWords; + if(!wordListBuilder.buildWordList(allWords, filename.toStdString())) + { + return; + } + bool modified = false; + for(i = 0; i < allWords.size(); i++) + { + string keyName = allWords[i]; + QList search_results = table_editor->findItems(tr(keyName.c_str()), Qt::MatchExactly); + if(search_results.size() == 0) + { + + int knPos = 0, nPos = 0; + if(workSheet.getData(0, 0) == ucstring("*HASH_VALUE")) + { + knPos = keyColIndex - 1; + nPos = nameColIndex - 1; + } else { + knPos = keyColIndex; + nPos = nameColIndex; + } + const int currentRow = table_editor->rowCount(); + table_editor->setRowCount(currentRow + 1); + // keyName row + QTableWidgetItem *key_name_row = new QTableWidgetItem(); + key_name_row->setText(tr(keyName.c_str())); + key_name_row->setBackgroundColor(QColor("#F75D59")); + table_editor ->setItem(currentRow, knPos, key_name_row); + // nameColumn key + QTableWidgetItem *name_row = new QTableWidgetItem(); + name_row->setText(QString("") + tr(keyName.c_str())); + name_row->setBackgroundColor(QColor("#F75D59")); + table_editor ->setItem(currentRow, nPos, name_row); + if(!modified) modified = true; + } + } + if(modified) + { + setWindowModified(true); + } +} + void CEditorWorksheet::setCurrentFile(QString filename) { QFileInfo *file = new QFileInfo(filename); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.h index 71e86af84..497e23913 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.h @@ -1,3 +1,19 @@ +// Translation Manager Plugin - OVQT Plugin +// Copyright (C) 2010 Winch Gate Property Limited +// Copyright (C) 2011 Emanuel Costea +// +// 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 EDITOR_WORKSHEET_H #define EDITOR_WORKSHEET_H @@ -7,6 +23,7 @@ #include "nel/misc/sheet_id.h" #include "nel/misc/path.h" #include "nel/misc/diff_tool.h" +#include "nel/ligo/ligo_config.h" // Qt includes #include @@ -16,6 +33,7 @@ #include #include "translation_manager_editor.h" +#include "extract_new_sheet_names.h" namespace Plugin { @@ -31,7 +49,8 @@ public: void save(); void saveAs(QString filename); void activateWindow(); - void extractBotNames(); + void extractBotNames(list filters, string level_design_path, NLLIGO::CLigoConfig ligoConfig); + void extractWords(QString filename, QString columnId, IWordListBuilder &wordListBuilder); bool isBotNamesTable(); void closeEvent(QCloseEvent *event); private Q_SLOTS: diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp index 66d7d1c69..4de3d889d 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.cpp @@ -1,5 +1,6 @@ -// Ryzom - MMORPG Framework +// Translation Manager Plugin - OVQT Plugin // Copyright (C) 2010 Winch Gate Property Limited +// Copyright (C) 2011 Emanuel Costea // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as @@ -14,67 +15,18 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -#include "nel/misc/types_nl.h" -#include "nel/misc/config_file.h" -#include "nel/misc/sheet_id.h" -#include "nel/misc/path.h" -#include "nel/misc/diff_tool.h" -#include "nel/georges/u_form.h" -#include "nel/georges/u_form_elm.h" -#include "nel/georges/load_form.h" -#include "nel/ligo/ligo_config.h" -#include "nel/ligo/primitive.h" -#include "nel/ligo/primitive_utils.h" +#include "extract_bot_names.h" -using namespace std; -using namespace NLMISC; -using namespace NLLIGO; -using namespace STRING_MANAGER; -vector Filters; - -static CLigoConfig LigoConfig; static bool RemoveOlds = false; -struct TCreatureInfo + + +namespace Plugin { - CSheetId SheetId; - bool ForceSheetName; - bool DisplayName; - - void readGeorges (const NLMISC::CSmartPtr &form, const NLMISC::CSheetId &sheetId) - { - const NLGEORGES::UFormElm &item=form->getRootNode(); - - SheetId=sheetId; - item.getValueByName(ForceSheetName, "3d data.ForceDisplayCreatureName"); - item.getValueByName(DisplayName, "3d data.DisplayName"); - } - - void serial(NLMISC::IStream &f) - { - f.serial(SheetId); - f.serial(ForceSheetName); - f.serial(DisplayName); - } - - - static uint getVersion () - { - return 1; - } - - void removed() - { - } - -}; - -std::map Creatures; - -TCreatureInfo *getCreature(const std::string &sheetName) +TCreatureInfo *ExtractBotNames::getCreature(const std::string &sheetName) { CSheetId id(sheetName+".creature"); @@ -84,7 +36,7 @@ TCreatureInfo *getCreature(const std::string &sheetName) return NULL; } -string cleanupName(const std::string &name) +string ExtractBotNames::cleanupName(const std::string &name) { string ret; @@ -99,7 +51,7 @@ string cleanupName(const std::string &name) return ret; } -ucstring cleanupUcName(const ucstring &name) +ucstring ExtractBotNames::cleanupUcName(const ucstring &name) { ucstring ret; @@ -118,7 +70,7 @@ ucstring cleanupUcName(const ucstring &name) /* Removes first and last '$' */ -ucstring makeGroupName(const ucstring & translationName) +ucstring ExtractBotNames::makeGroupName(const ucstring & translationName) { ucstring ret = translationName; if (ret.size() >= 2) @@ -136,36 +88,31 @@ ucstring makeGroupName(const ucstring & translationName) return ret; } -struct TEntryInfo -{ - string SheetName; -}; -set GenericNames; -map SimpleNames; -set Functions; -set getGenericNames() + + +set ExtractBotNames::getGenericNames() { return GenericNames; } -map getSimpleNames() +map ExtractBotNames::getSimpleNames() { return SimpleNames; } -void cleanSimpleNames() +void ExtractBotNames::cleanSimpleNames() { SimpleNames.clear(); } -void cleanGenericNames() +void ExtractBotNames::cleanGenericNames() { GenericNames.clear(); } -string removeAndStoreFunction(const std::string &fullName) +string ExtractBotNames::removeAndStoreFunction(const std::string &fullName) { string::size_type pos = fullName.find("$"); if (pos == string::npos) @@ -193,7 +140,7 @@ string removeAndStoreFunction(const std::string &fullName) } -void addGenericName(const std::string &name, const std::string &sheetName) +void ExtractBotNames::addGenericName(const std::string &name, const std::string &sheetName) { TCreatureInfo *c = getCreature(sheetName); if (!c || c->ForceSheetName || !c->DisplayName) @@ -213,7 +160,7 @@ void addGenericName(const std::string &name, const std::string &sheetName) } } -void addSimpleName(const std::string &name, const std::string &sheetName) +void ExtractBotNames::addSimpleName(const std::string &name, const std::string &sheetName) { TCreatureInfo *c = getCreature(sheetName); if (!c || c->ForceSheetName || !c->DisplayName) @@ -238,18 +185,9 @@ void addSimpleName(const std::string &name, const std::string &sheetName) } } -void setPathsForPrimitives(map > config_paths, string ligo_class_file) +void ExtractBotNames::setRequiredSettings(list filters, string level_design_path) { - for (std::list::iterator it = config_paths["paths"].begin(); it != config_paths["paths"].end(); ++it) - { - CPath::addSearchPath(*it, true, false); - } - for (std::list::iterator it = config_paths["pathsR"].begin(); it != config_paths["pathsR"].end(); ++it) - { - CPath::addSearchPath(*it, false, false); - } - - for (std::list::iterator it = config_paths["filters"].begin(); it != config_paths["filters"].end(); ++it) + for (std::list::iterator it = filters.begin(); it != filters.end(); ++it) { Filters.push_back(*it); } @@ -262,35 +200,28 @@ void setPathsForPrimitives(map > config_paths, string ligo_c if (Creatures.empty()) { - for (std::list::iterator it = config_paths["georges"].begin(); it != config_paths["georges"].end(); ++it) - CPath::addSearchPath((*it).c_str(), true, false); - - loadForm("creature", PACKED_SHEETS_NAME, Creatures, true); + loadForm("creature", PACKED_SHEETS_NAME, Creatures, true); } - - - //------------------------------------------------------------------- - // init ligo config - string ligoPath = CPath::lookup(ligo_class_file, true, true); - LigoConfig.readPrimitiveClass(ligoPath.c_str(), false); - NLLIGO::Register(); - - CPrimitiveContext::instance().CurrentLigoConfig = &LigoConfig; + } -void extractBotNamesFromPrimitives() +void ExtractBotNames::extractBotNamesFromPrimitives(CLigoConfig ligoConfig) { + //------------------------------------------------------------------- // ok, ready for the real work, // first, read the primitives files and parse the primitives vector files; CPath::getFileList("primitive", files); + for (uint i=0; i > config_paths, string ligo_class_file, string trans_path, string work_path) -{ - - /* - //------------------------------------------------------------------- - // step 2 : load the reference file - - nlinfo("Looking for missing translation:"); - - string work_path_file = work_path + "/bot_names.txt"; - string trans_path_file = trans_path + "/bot_names.txt"; - string title_path_file = work_path + "/title_words_wk.txt"; - - TWorksheet botNames; - if (!CFile::fileExists(work_path_file) || !loadExcelSheet(work_path_file, botNames)) - { - botNames.resize(botNames.size() + 1); - botNames.insertColumn(botNames.ColCount); - botNames.setData(0,botNames.ColCount - 1,ucstring("bot name")); - botNames.insertColumn(botNames.ColCount); - botNames.setData(0,botNames.ColCount - 1,ucstring("translated name")); - botNames.insertColumn(botNames.ColCount); - botNames.setData(0,botNames.ColCount - 1,ucstring("sheet_name")); - } - - TWorksheet transBotNames; - if (!CFile::fileExists(trans_path_file) || !loadExcelSheet(trans_path_file, transBotNames)) - { - transBotNames.resize(transBotNames.size() + 1); - transBotNames.insertColumn(transBotNames.ColCount); - transBotNames.setData(0,transBotNames.ColCount - 1,ucstring("*HASH_VALUE")); - transBotNames.insertColumn(transBotNames.ColCount); - transBotNames.setData(0,transBotNames.ColCount - 1,ucstring("bot name")); - transBotNames.insertColumn(transBotNames.ColCount); - transBotNames.setData(0,transBotNames.ColCount - 1,ucstring("translated name")); - transBotNames.insertColumn(transBotNames.ColCount); - transBotNames.setData(0,transBotNames.ColCount - 1,ucstring("sheet_name")); - } - - TWorksheet fcts; - if (!CFile::fileExists(title_path_file) || !loadExcelSheet(title_path_file, fcts)) - { - fcts.resize(fcts.size() + 1); - fcts.insertColumn(fcts.ColCount); - fcts.setData(0,fcts.ColCount - 1,ucstring("title_id")); - fcts.insertColumn(fcts.ColCount); - fcts.setData(0,fcts.ColCount - 1,ucstring("name")); - fcts.insertColumn(fcts.ColCount); - fcts.setData(0,fcts.ColCount - 1,ucstring("women_name")); - } - - loadExcelSheet(work_path_file, botNames, true); - loadExcelSheet(trans_path_file, transBotNames, true); - loadExcelSheet(title_path_file, fcts, true); - - // add missing element - - uint nbAddSimpleName = 0; - uint nbAddFunction = 0; - uint nbAddGenericName = 0; - - uint botIdCol; - nlverify(botNames.findId(botIdCol)); - uint transIdCol; - nlverify(transBotNames.findId(transIdCol)); - uint fctsIdCol; - nlverify(fcts.findId(fctsIdCol)); - - // special treatment to add the sheet_name col - { - uint sheetCol; - if (!botNames.findCol(ucstring("sheet_name"), sheetCol)) - { - botNames.insertColumn(botNames.ColCount); - botNames.setData(0, botNames.ColCount-1, ucstring("sheet_name")); - } - - if (!transBotNames.findCol(ucstring("sheet_name"), sheetCol)) - { - transBotNames.insertColumn(transBotNames.ColCount); - transBotNames.setData(0, transBotNames.ColCount-1, ucstring("sheet_name")); - } - } - // 1 - simple names - { - nlinfo(" Simple names..."); - - - map::iterator first(SimpleNames.begin()), last(SimpleNames.end()); - for (; first != last; ++first) - { - uint rowIdx; - if (!botNames.findRow(botIdCol, first->first, rowIdx)) - { - // we need to add the entry - rowIdx = botNames.size(); - botNames.resize(botNames.size()+1); - - botNames.setData(rowIdx, ucstring("bot name"), first->first); - botNames.setData(rowIdx, ucstring("translated name"), first->first); - botNames.setData(rowIdx, ucstring("sheet_name"), first->second.SheetName); - - nbAddSimpleName++; - } - else - { - // set/update the sheet name info - // try to restore the existing translation - uint transRowIdx; - if (transBotNames.findRow(transIdCol, first->first, transRowIdx)) - { - ucstring wkBotName = botNames.getData(rowIdx, ucstring("bot name")); - ucstring wkSheetName = botNames.getData(rowIdx, ucstring("sheet_name")); - ucstring wkTranslationName = botNames.getData(rowIdx, ucstring("translated name")); - ucstring ucWkHash; - uint64 hash = CI18N::makeHash(wkBotName + wkTranslationName +wkSheetName); - CI18N::hashToUCString(hash, ucWkHash); - ucstring trUcHash = transBotNames[transRowIdx][0]; - bool isWkTranslationNameAGroupName = wkTranslationName.find(ucstring("$")) != ucstring::npos; - bool hashIsValide = std::equal(ucWkHash.begin(), ucWkHash.end(), trUcHash.begin()+1); - // Hash is equal get the translation - if (hashIsValide && !isWkTranslationNameAGroupName) - { - wkTranslationName = transBotNames.getData(transRowIdx, ucstring("translated name")); - wkSheetName = transBotNames.getData(transRowIdx, ucstring("sheet_name")); - botNames.setData(rowIdx, ucstring("translated name"), wkTranslationName); - botNames.setData(rowIdx, ucstring("sheet_name"), wkSheetName); - hash = CI18N::makeHash(wkBotName + wkTranslationName + wkSheetName); - // update the hash code - CI18N::hashToUCString(hash, transBotNames[transRowIdx][0]); - } - // bots_name.txt has been manually changed. We trust what the Level Designer has done. We don't destroy is work. - // or it is a simple - else - { - //use the "translated name" of the manually changed work/bot_name.txt - botNames.setData(rowIdx, ucstring("translated name"), wkTranslationName); - botNames.setData(rowIdx, ucstring("sheet_name"), wkSheetName); - } - } - } - } - } - - // 2 - generic names - - { - nlinfo(" Generic names..."); - - set::iterator first(GenericNames.begin()), last(GenericNames.end()); - for (; first != last; ++first) - { - string gnName = "gn_" + cleanupName(*first); - - ucstring fctsTitleId; - ucstring fctsName; - // add or modify the bot names - uint rowIdx; - if (!botNames.findRow(botIdCol, *first, rowIdx)) - { - // we need to add the entry - rowIdx = botNames.size(); - botNames.resize(botNames.size()+1); - - botNames.setData(rowIdx, ucstring("bot name"), *first); - botNames.setData(rowIdx, ucstring("translated name"), ucstring("$") + gnName + "$"); - botNames.setData(rowIdx, ucstring("sheet_name"), ucstring()); - fctsTitleId = gnName; - fctsName = *first; - - nbAddSimpleName++; - } - else - { - // look in the translated table to remember the translated name to write it in the string file - ucstring wkBotName = botNames.getData(rowIdx, ucstring("bot name")); - ucstring wkTranslationName = botNames.getData(rowIdx, ucstring("translated name")); - ucstring wkSheetName = botNames.getData(rowIdx, ucstring("sheet_name")); - - - nlinfo("Bot name:%s\n",wkBotName.toString().c_str()); - bool isWkTranslationNameAGroupName = wkTranslationName.find(ucstring("$")) != ucstring::npos; - - if ( isWkTranslationNameAGroupName ) //work name looks like "$gn_***$: do not modify - { - - //Do not change work/bot_name.txt - // update work/world_title.txt - - ucstring transName; - fctsTitleId = makeGroupName(wkTranslationName); - uint transRowIdx; - if (transBotNames.findRow(transIdCol, *first, transRowIdx)) - { - transName = transBotNames.getData(transRowIdx, ucstring("translated name")); - - if (transName.find(ucstring("$")) != ucstring::npos) - { - transName = fctsTitleId; - } - } - else - { - transName = fctsTitleId; - } - //Do not touch anything - botNames.setData(rowIdx, ucstring("translated name"), wkTranslationName); - botNames.setData(rowIdx, ucstring("sheet_name"), wkSheetName); - // fctsTitleId = makeGroupName(wkTranslationName); - fctsName = transName; - - } - else // WkTranslationName != "$gn*$" - { - uint transRowIdx; - ucstring transName; - ucstring wkSheetName; - // Get the translation as a simple name. - if (transBotNames.findRow(transIdCol, *first, transRowIdx)) - { - - transName = transBotNames.getData(transRowIdx, ucstring("translated name")); - ucstring trSheetName = transBotNames.getData(transRowIdx, ucstring("sheet_name")); - - //tr."translation name" is - if (transName.find(ucstring("$")) != ucstring::npos) - { - //get Translation, update hash - botNames[rowIdx][1] = transName; - botNames[rowIdx][2] = trSheetName; - fctsTitleId = makeGroupName(transName); - fctsName = makeGroupName(transName); - ucstring trNewUcHash; - uint64 hash = CI18N::makeHash(wkBotName + transName +trSheetName); - CI18N::hashToUCString(hash, trNewUcHash); - transBotNames[transRowIdx][0] = ucstring("_") + trNewUcHash; - } - else //botNames."translated name" != $gn_$ && tansName."translated name" != $gn_$ - { - - // get the translation back - //update work/bot_name.txt - wkTranslationName = ucstring("$")+gnName+"$"; - botNames[rowIdx][0] = wkBotName; - botNames[rowIdx][1] = wkTranslationName; - botNames[rowIdx][2] = wkSheetName; - - //update translated/bot_name.txt - - fctsName = transName; //transName - fctsTitleId = gnName; - ucstring trNewUcHash; - uint64 hash = CI18N::makeHash(botNames[rowIdx][0] + botNames[rowIdx][1] +botNames[rowIdx][2]); - CI18N::hashToUCString(hash, trNewUcHash); - transBotNames[transRowIdx][0] = ucstring("_") + trNewUcHash; - } - - } - else //There is no translation yet - { - fctsName = wkTranslationName; - wkTranslationName = ucstring("$")+gnName+"$"; - botNames[rowIdx][0] = wkBotName; - botNames[rowIdx][1] = wkTranslationName; - botNames[rowIdx][2] = wkSheetName; - fctsTitleId = gnName; - - - } - } - - } - - - // look for a corresponding entry - uint gnNameRow; - - - if (!fcts.findRow(fctsIdCol, fctsTitleId, gnNameRow)) - { - - // not found, add it - gnNameRow = fcts.size(); - fcts.resize(fcts.size()+1); - fcts.setData(gnNameRow, ucstring("title_id"), fctsTitleId); - fcts.setData(gnNameRow, ucstring("name"), fctsName); - nbAddGenericName++; - - } - else //Update - { - - } - } - } - - - // 3 - functions - { - nlinfo(" Functions..."); - - set::iterator first(Functions.begin()), last(Functions.end()); - for (; first != last; ++first) - { - string fctName = *first; - // look for a corresponding entry - uint functionRow; - if (!fcts.findRow(fctsIdCol, fctName, functionRow)) - { - // not found, add it - functionRow = fcts.size(); - fcts.resize(fcts.size()+1); - - fcts.setData(functionRow, ucstring("title_id"), fctName); - fcts.setData(functionRow, ucstring("name"), *first); - - nbAddFunction++; - } - } - } - - // display resum\E9 - nlinfo("Adding %u new simple name", nbAddSimpleName); - nlinfo("Adding %u new generic name", nbAddGenericName); - nlinfo("Adding %u new function name", nbAddFunction); - - // saving the modified files - ucstring s = prepareExcelSheet(botNames); - CI18N::writeTextFile(work_path_file, s, false); - s = prepareExcelSheet(transBotNames); - CI18N::writeTextFile(trans_path_file, s, false); - s = prepareExcelSheet(fcts); - CI18N::writeTextFile(title_path_file, s, false); -*/ - return 0; -} - + +} \ No newline at end of file diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.h new file mode 100644 index 000000000..9c4ea51d2 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_bot_names.h @@ -0,0 +1,111 @@ +// Translation Manager Plugin - OVQT Plugin +// Copyright (C) 2010 Winch Gate Property Limited +// Copyright (C) 2011 Emanuel Costea +// +// 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 EXTRACT_BOT_NAMES_H +#define EXTRACT_BOT_NAMES_H + +#include "nel/misc/types_nl.h" +#include "nel/misc/config_file.h" +#include "nel/misc/sheet_id.h" +#include "nel/misc/path.h" +#include "nel/misc/diff_tool.h" +#include "nel/georges/u_form.h" +#include "nel/georges/u_form_elm.h" +#include "nel/georges/load_form.h" +#include "nel/ligo/ligo_config.h" +#include "nel/ligo/primitive.h" +#include "nel/ligo/primitive_utils.h" + +using namespace std; +using namespace NLMISC; +using namespace NLLIGO; +using namespace STRING_MANAGER; + +namespace Plugin +{ + +struct TCreatureInfo +{ + CSheetId SheetId; + bool ForceSheetName; + bool DisplayName; + + + void readGeorges (const NLMISC::CSmartPtr &form, const NLMISC::CSheetId &sheetId) + { + const NLGEORGES::UFormElm &item=form->getRootNode(); + + SheetId=sheetId; + item.getValueByName(ForceSheetName, "3d data.ForceDisplayCreatureName"); + item.getValueByName(DisplayName, "3d data.DisplayName"); + } + + void serial(NLMISC::IStream &f) + { + f.serial(SheetId); + f.serial(ForceSheetName); + f.serial(DisplayName); + } + + + static uint getVersion () + { + return 1; + } + + void removed() + { + } + +}; + +struct TEntryInfo +{ + string SheetName; +}; + +struct ExtractBotNames +{ +private: + vector Filters; + std::map Creatures; + set GenericNames; + map SimpleNames; + set Functions; +private: + TCreatureInfo *getCreature(const std::string &sheetName); + ucstring makeGroupName(const ucstring & translationName); + string removeAndStoreFunction(const std::string &fullName); + void addGenericName(const std::string &name, const std::string &sheetName); + void addSimpleName(const std::string &name, const std::string &sheetName); +public: + void extractBotNamesFromPrimitives(CLigoConfig ligoConfig); + void setRequiredSettings(list filters, string level_design_path); + set getGenericNames(); + map getSimpleNames(); + string cleanupName(const std::string &name); + ucstring cleanupUcName(const ucstring &name); + void cleanSimpleNames(); + void cleanGenericNames(); + +}; + +} + + +#endif /* EXTRACT_BOT_NAMES_H */ + diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.cpp new file mode 100644 index 000000000..e881177bb --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.cpp @@ -0,0 +1,154 @@ +// Ryzom - MMORPG Framework +// Copyright (C) 2010 Winch Gate Property Limited +// +// 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 . + +#include "extract_new_sheet_names.h" + +using namespace std; +using namespace NLMISC; +using namespace NLLIGO; +using namespace STRING_MANAGER; + +namespace Plugin { + + + +// *************************************************************************** +/* + * Specialisation of IWordListBuilder to list sheets in a directory + */ + + +bool CSheetWordListBuilder::buildWordList(std::vector &allWords, string workSheetFileName) + { + SheetExt= toLower(SheetExt); + nlinfo("aaaa"); + // verify the directory is correct + if(!CFile::isDirectory(SheetPath)) + { + nlwarning("Error: Directory '%s' not found. '%s' Aborted", SheetPath.c_str(), workSheetFileName.c_str()); + return false; + } + + // list all files. + std::vector allFiles; + allFiles.reserve(100000); + CPath::getPathContent(SheetPath, true, false, true, allFiles, NULL); + + // Keep only the extension we want, and remove "_" (parent) + allWords.clear(); + allWords.reserve(allFiles.size()); + for(uint i=0;i &allWords, string workSheetFileName) + { + // verify the directory is correct + if(!CFile::isDirectory(PrimPath)) + { + nlwarning("Error: Directory '%s' not found. '%s' Aborted", PrimPath.c_str(), workSheetFileName.c_str()); + return false; + } + + // list all files. + std::vector allFiles; + allFiles.reserve(100000); + CPath::getPathContent(PrimPath, true, false, true, allFiles, NULL); + + // parse all primitive that match the filter + allWords.clear(); + allWords.reserve(100000); + // to avoid duplicate + set allWordSet; + for(uint i=0;i setPlace; + TPrimitiveSet placeRes; + setPlace.buildSet(PrimDoc.RootNode, predCont, placeRes); + // for all found + for (uint placeId= 0; placeId < placeRes.size(); ++placeId) + { + string primName; + if(placeRes[placeId]->getPropertyByName(listProp[cid], primName) && !primName.empty()) + { + primName= toLower(primName); + // avoid duplicate + if(allWordSet.insert(primName).second) + { + allWords.push_back(primName); + } + } + } + } + } + + return true; + } + +} \ No newline at end of file diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.h new file mode 100644 index 000000000..007018a08 --- /dev/null +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.h @@ -0,0 +1,70 @@ +// Ryzom - MMORPG Framework +// Copyright (C) 2010 Winch Gate Property Limited +// +// 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 EXTRACT_NEW_SHEET_NAMES_H +#define EXTRACT_NEW_SHEET_NAMES_H + +#include "nel/misc/types_nl.h" +#include "nel/misc/config_file.h" +#include "nel/misc/sheet_id.h" +#include "nel/misc/path.h" +#include "nel/misc/diff_tool.h" +#include "nel/misc/algo.h" +#include "nel/georges/u_form.h" +#include "nel/georges/u_form_elm.h" +#include "nel/georges/load_form.h" +#include "nel/ligo/ligo_config.h" +#include "nel/ligo/primitive.h" +#include "nel/ligo/primitive_utils.h" + +using namespace std; +using namespace NLMISC; +using namespace NLLIGO; +using namespace STRING_MANAGER; + +namespace Plugin { + + +// *************************************************************************** +/* + * Interface to build the whole list of words (key id) for a specific worksheet + */ +struct IWordListBuilder +{ + virtual bool buildWordList(std::vector &allWords, string workSheetFileName) =0; + +}; + +struct CSheetWordListBuilder : public IWordListBuilder +{ + string SheetExt; + string SheetPath; + + virtual bool buildWordList(std::vector &allWords, string workSheetFileName); +}; + +struct CRegionPrimWordListBuilder : public IWordListBuilder +{ + string PrimPath; + vector PrimFilter; + virtual bool buildWordList(std::vector &allWords, string workSheetFileName); +}; + +} + + +#endif /* EXTRACT_NEW_SHEET_NAMES_H */ + diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_editor.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_editor.h index 605d11d6e..7af2b061d 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_editor.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_editor.h @@ -1,3 +1,19 @@ +// Translation Manager Plugin - OVQT Plugin +// Copyright (C) 2010 Winch Gate Property Limited +// Copyright (C) 2011 Emanuel Costea +// +// 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 TRANSLATION_MANAGER_EDITOR_H #define TRANSLATION_MANAGER_EDITOR_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp index 8b8c50a22..95a5fe95f 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp @@ -1,6 +1,6 @@ -// Object Viewer Qt - MMORPG Framework +// Translation Manager Plugin - OVQT Plugin // Copyright (C) 2010 Winch Gate Property Limited -// Copyright (C) 2011 Dzmitry Kamiahin +// Copyright (C) 2011 Emanuel Costea // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as @@ -46,21 +46,6 @@ #include - -struct TEntryInfo -{ - string SheetName; -}; - -set getGenericNames(); -void cleanGenericNames(); -map getSimpleNames(); -void cleanSimpleNames(); -void setPathsForPrimitives(map > config_paths, string ligo_class_file); -void extractBotNamesFromPrimitives(); -string cleanupName(const std::string &name); -ucstring cleanupUcName(const ucstring &name); - namespace Plugin { @@ -74,9 +59,8 @@ CMainWindow::CMainWindow(QWidget *parent) windowMapper = new QSignalMapper(this); connect(windowMapper, SIGNAL(mapped(QWidget*)), this, SLOT(setActiveSubWindow(QWidget*))); - // set extraction scripts counters - execution_count["extract_bot_names"] = 0; - + initialize_settings["georges"] = false; + initialize_settings["ligo"] = false; readSettings(); createToolbar(); m_undoStack = new QUndoStack(this); @@ -99,9 +83,33 @@ void CMainWindow::createToolbar() QMenu *wordsExtractionMenu = new QMenu("&Words extraction..."); wordsExtractionMenu->setIcon(QIcon(Core::Constants::ICON_SETTINGS)); _ui.toolBar->addAction(wordsExtractionMenu->menuAction()); + // extract bot names QAction *extractBotNamesAct = wordsExtractionMenu->addAction("&Extract bot names..."); extractBotNamesAct->setStatusTip(tr("Extract bot names from primitives.")); connect(extractBotNamesAct, SIGNAL(triggered()), this, SLOT(extractBotNames())); + // signal mapper for extraction words + QSignalMapper *wordsExtractionMapper = new QSignalMapper(this); + connect(wordsExtractionMapper, SIGNAL(mapped(QString)), this, SLOT(extractWords(QString))); + // extract item words + QAction *extractItemWordsAct = wordsExtractionMenu->addAction("&Extract item words..."); + extractItemWordsAct->setStatusTip(tr("Extract item words")); + connect(extractItemWordsAct, SIGNAL(triggered()), wordsExtractionMapper, SLOT(map())); + wordsExtractionMapper->setMapping(extractItemWordsAct, "item"); + // extract creature words + QAction *extractCreatureWordsAct = wordsExtractionMenu->addAction("&Extract creature words..."); + extractCreatureWordsAct->setStatusTip(tr("Extract creature words")); + connect(extractCreatureWordsAct, SIGNAL(triggered()), wordsExtractionMapper, SLOT(map())); + wordsExtractionMapper->setMapping(extractCreatureWordsAct, "creature"); + // extract sbrick words + QAction *extractSbrickWordsAct = wordsExtractionMenu->addAction("&Extract sbrick words..."); + extractSbrickWordsAct->setStatusTip(tr("Extract sbrick words")); + connect(extractSbrickWordsAct, SIGNAL(triggered()), wordsExtractionMapper, SLOT(map())); + wordsExtractionMapper->setMapping(extractSbrickWordsAct, "sbrick"); + // extract sphrase words + QAction *extractSphraseWordsAct = wordsExtractionMenu->addAction("&Extract sphrase words..."); + extractSphraseWordsAct->setStatusTip(tr("Extract sphrase words")); + connect(extractSphraseWordsAct, SIGNAL(triggered()), wordsExtractionMapper, SLOT(map())); + wordsExtractionMapper->setMapping(extractSphraseWordsAct, "sphrase"); // Windows menu windowMenu = new QMenu(tr("&Windows..."), _ui.toolBar); @@ -194,6 +202,29 @@ void CMainWindow::open() } +void CMainWindow::openWorkFile(QString file) +{ + QFileInfo* file_path = new QFileInfo(QString("%1/%2").arg(QString(work_path.c_str())).arg(file)); + if(file_path->exists()) + { + if(isWorksheetEditor(file_path->filePath())) + { + CEditorWorksheet *new_window = new CEditorWorksheet(_ui.mdiArea); + new_window->open(file_path->filePath()); + new_window->activateWindow(); + } + } else { + QErrorMessage error; + QString text; + text.append("The "); + text.append(file_path->fileName()); + text.append(" file don't exists."); + error.showMessage(text); + error.exec(); + } + +} + void CMainWindow::save() { CEditor* current_window = qobject_cast(_ui.mdiArea->currentSubWindow()); @@ -223,49 +254,101 @@ void CMainWindow::saveAs() } } +void CMainWindow::initializeSettings(bool georges = false) +{ + if(georges == true && initialize_settings["georges"] == false) + { + CPath::addSearchPath(level_design_path + "/DFN", true, false); + CPath::addSearchPath(level_design_path + "/Game_elem/Creature", true, false); + initialize_settings["georges"] = true; + } + + if(initialize_settings["ligo"] == false) + { + //------------------------------------------------------------------- + // init ligo config + string ligoPath = CPath::lookup("world_editor_classes.xml", true, true); + ligoConfig.readPrimitiveClass(ligoPath.c_str(), false); + NLLIGO::Register(); + NLLIGO::CPrimitiveContext::instance().CurrentLigoConfig = &ligoConfig; + initialize_settings["ligo"] = true; + } +} + +void CMainWindow::extractWords(QString type) +{ + CEditor* editor_window = qobject_cast(_ui.mdiArea->currentSubWindow()); + CEditorWorksheet* current_window = qobject_cast(editor_window); + + // initializeSettings(false); + + CSheetWordListBuilder builder; + QString column_name; + + if(type == "item") + { + column_name = "item ID"; + builder.SheetExt = "sitem"; + builder.SheetPath = level_design_path + "/game_element/sitem"; + } else if(type == "creature") { + column_name = "creature ID"; + builder.SheetExt = "creature"; + builder.SheetPath = level_design_path + "/Game_elem/Creature/fauna"; + } else if(type == "sbrick") { + column_name = "sbrick ID"; + builder.SheetExt = "sbrick"; + builder.SheetPath = level_design_path + "/game_element/sbrick"; + } else if(type == "sphrase") { + column_name = "sphrase ID"; + builder.SheetExt = "sphrase"; + builder.SheetPath = level_design_path + "/game_element/sphrase"; + } + current_window->extractWords(current_window->windowFilePath(), column_name, builder); +} + void CMainWindow::extractBotNames() { if(verifySettings() == true) { + CEditorWorksheet* current_window; + if(_ui.mdiArea->subWindowList().size() > 0) + { CEditor* editor_window = qobject_cast(_ui.mdiArea->currentSubWindow()); if(QString(editor_window->widget()->metaObject()->className()) == "QTableWidget") // Sheet Editor { - CEditorWorksheet* current_window = qobject_cast(editor_window); + current_window = qobject_cast(editor_window); QString file_path = current_window->subWindowFilePath(); if(!current_window->isBotNamesTable()) { list subWindows = convertSubWindowList(_ui.mdiArea->subWindowList()); list::iterator it = subWindows.begin(); bool finded = false; - for(; it != subWindows.end(), finded != true; ++it) + + for(; it != subWindows.end(); ++it) { - current_window = qobject_cast((*it)); - file_path = current_window->subWindowFilePath(); - if(current_window->isBotNamesTable()) - { - finded = true; - current_window->activateWindow(); - } + current_window = qobject_cast((*it)); + file_path = current_window->subWindowFilePath(); + if(current_window->isBotNamesTable()) + { + finded = true; + current_window->activateWindow(); + } } if(!finded) { - open(); + openWorkFile("bot_names_wk.txt"); current_window = qobject_cast(_ui.mdiArea->currentSubWindow()); file_path = current_window->windowFilePath(); } - } - if(execution_count["extract_bot_names"] == 0) - setPathsForPrimitives(config_paths, ligo_path); - extractBotNamesFromPrimitives(); - execution_count["extract_bot_names"] = execution_count["extract_bot_names"] + 1; - - current_window->extractBotNames(); - // if(current_window->isWindowModified()) - // { - - // } - + } } + } else { + openWorkFile("bot_names_wk.txt"); + current_window = qobject_cast(_ui.mdiArea->currentSubWindow()); + QString file_path = current_window->windowFilePath(); + } + initializeSettings(true); + current_window->extractBotNames(filters, level_design_path, ligoConfig); } } @@ -273,22 +356,14 @@ void CMainWindow::readSettings() { QSettings *settings = Core::ICore::instance()->settings(); settings->beginGroup("translationmanager"); - - list paths = convertQStringList(settings->value("paths").toStringList()); /* paths */ - config_paths["paths"] = paths; - list pathsR = convertQStringList(settings->value("pathsR").toStringList()); /* pathsR */ - config_paths["pathsR"] = pathsR; - list georges = convertQStringList(settings->value("georges").toStringList()); /* georges */ - config_paths["georges"] = georges; - list filters = convertQStringList(settings->value("filters").toStringList()); /* filters */ - config_paths["filters"] = filters; - + filters = convertQStringList(settings->value("filters").toStringList()); /* filters */ languages = convertQStringList(settings->value("trlanguages").toStringList()); /* languages */ - ligo_path = settings->value("ligo").toString().toStdString(); translation_path = settings->value("translation").toString().toStdString(); work_path = settings->value("work").toString().toStdString(); - - settings->endGroup(); + settings->endGroup(); + settings->beginGroup(Core::Constants::DATA_PATH_SECTION); + level_design_path = settings->value(Core::Constants::LEVELDESIGN_PATH).toString().toStdString(); + settings->endGroup(); } void CMainWindow::debug(QString text) @@ -305,10 +380,7 @@ bool CMainWindow::verifySettings() QSettings *settings = Core::ICore::instance()->settings(); settings->beginGroup("translationmanager"); - if(settings->value("paths").toList().count() == 0 - || settings->value("pathsR").toList().count() == 0 - || settings->value("georges").toList().count() == 0 - || settings->value("filters").toList().count() == 0) + if(settings->value("filters").toList().count() == 0) { QErrorMessage error_settings; error_settings.showMessage("Please write all the paths on the settings dialog."); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h index 13a3ead97..b0d59fe29 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h @@ -1,6 +1,6 @@ -// Object Viewer Qt - MMORPG Framework +// Translation Manager Plugin - OVQT Plugin // Copyright (C) 2010 Winch Gate Property Limited -// Copyright (C) 2011 Dzmitry Kamiahin +// Copyright (C) 2011 Emanuel Costea // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as @@ -27,6 +27,7 @@ #include "nel/misc/sheet_id.h" #include "nel/misc/path.h" #include "nel/misc/diff_tool.h" +#include "nel/ligo/ligo_config.h" // Qt includes #include @@ -51,13 +52,6 @@ using namespace std; namespace Plugin { -class CMdiSubWindow; - -struct WStatus -{ - bool modified; -}; - class CMainWindow : public QMainWindow { Q_OBJECT @@ -75,15 +69,16 @@ private: QMenu *windowMenu; QSignalMapper *windowMapper; // config - map > config_paths; + map initialize_settings; + list filters; list languages; - string ligo_path; + string level_design_path; string translation_path; string work_path; - // counts - map execution_count; + NLLIGO::CLigoConfig ligoConfig; private Q_SLOTS: void extractBotNames(); + void extractWords(QString); void open(); void save(); void saveAs(); @@ -93,12 +88,13 @@ private Q_SLOTS: void debug(QString text); // TODO private: + void openWorkFile(QString file); void updateToolbar(QMdiSubWindow *window); bool verifySettings(); void readSettings(); void createMenus(); void createToolbar(); - + void initializeSettings(bool georges); list convertQStringList(QStringList listq); list convertSubWindowList(QList listq); bool isWorksheetEditor(QString filename); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp index 890c589e9..caf677a0d 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.cpp @@ -1,3 +1,20 @@ +// Translation Manager Plugin - OVQT Plugin +// Copyright (C) 2010 Winch Gate Property Limited +// Copyright (C) 2011 Emanuel Costea +// +// 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 "translation_manager_plugin.h" #include "translation_manager_settings_page.h" diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h index 42515cb2f..ed42b4882 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_plugin.h @@ -1,3 +1,20 @@ +// Translation Manager Plugin - OVQT Plugin +// Copyright (C) 2010 Winch Gate Property Limited +// Copyright (C) 2011 Emanuel Costea +// +// 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 TRANSLATION_MANAGER_PLUGIN_H #define TRANSLATION_MANAGER_PLUGIN_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp index 078a9c18c..4870da41b 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.cpp @@ -1,6 +1,6 @@ -// Object Viewer Qt - MMORPG Framework +// Translation Manager Plugin - OVQT Plugin // Copyright (C) 2010 Winch Gate Property Limited -// Copyright (C) 2011 Dzmitry Kamiahin +// Copyright (C) 2011 Emanuel Costea // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as @@ -69,12 +69,6 @@ QWidget *CTranslationManagerSettingsPage::createPage(QWidget *parent) _currentPage = new QWidget(parent); _ui.setupUi(_currentPage); readSettings(); - connect(_ui.paths_add, SIGNAL(clicked()), this, SLOT(pathAdd())); - connect(_ui.paths_del, SIGNAL(clicked()), this, SLOT(pathDel())); - connect(_ui.pathsR_add, SIGNAL(clicked()), this, SLOT(pathRAdd())); - connect(_ui.pathsR_del, SIGNAL(clicked()), this, SLOT(pathRDel())); - connect(_ui.georges_add, SIGNAL(clicked()), this, SLOT(georgeAdd())); - connect(_ui.georges_del, SIGNAL(clicked()), this, SLOT(georgeDel())); connect(_ui.filter_add, SIGNAL(clicked()), this, SLOT(filterAdd())); connect(_ui.filter_del, SIGNAL(clicked()), this, SLOT(filterDel())); connect(_ui.lang_add, SIGNAL(clicked()), this, SLOT(languageAdd())); @@ -85,66 +79,6 @@ QWidget *CTranslationManagerSettingsPage::createPage(QWidget *parent) return _currentPage; } -void CTranslationManagerSettingsPage::pathAdd() -{ - QString newPath = QFileDialog::getExistingDirectory(_currentPage, "", lastDir); - if (!newPath.isEmpty()) - { - QListWidgetItem *newItem = new QListWidgetItem; - newItem->setText(newPath); - newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); - _ui.paths_list->addItem(newItem); - lastDir = newPath; - } -} - -void CTranslationManagerSettingsPage::pathDel() -{ - QListWidgetItem *removeItem = _ui.paths_list->takeItem(_ui.paths_list->currentRow()); - if (!removeItem) - delete removeItem; -} - -void CTranslationManagerSettingsPage::pathRAdd() -{ - QString newPath = QFileDialog::getExistingDirectory(_currentPage, "", lastDir); - if (!newPath.isEmpty()) - { - QListWidgetItem *newItem = new QListWidgetItem; - newItem->setText(newPath); - newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); - _ui.pathsR_list->addItem(newItem); - lastDir = newPath; - } -} - -void CTranslationManagerSettingsPage::pathRDel() -{ - QListWidgetItem *removeItem = _ui.pathsR_list->takeItem(_ui.pathsR_list->currentRow()); - if (!removeItem) - delete removeItem; -} - -void CTranslationManagerSettingsPage::georgeAdd() -{ - QString newPath = QFileDialog::getExistingDirectory(_currentPage, "", lastDir); - if (!newPath.isEmpty()) - { - QListWidgetItem *newItem = new QListWidgetItem; - newItem->setText(newPath); - newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); - _ui.georges_list->addItem(newItem); - lastDir = newPath; - } -} - -void CTranslationManagerSettingsPage::georgeDel() -{ - QListWidgetItem *removeItem = _ui.georges_list->takeItem(_ui.georges_list->currentRow()); - if (!removeItem) - delete removeItem; -} - void CTranslationManagerSettingsPage::filterAdd() { QString newValue = _ui.filter_edit->text(); @@ -208,15 +142,12 @@ void CTranslationManagerSettingsPage::apply() void CTranslationManagerSettingsPage::readSettings() { - QStringList paths, pathsR, georges, filters, languages; + QStringList filters, languages; QString ligo, translation, work; QSettings *settings = Core::ICore::instance()->settings(); settings->beginGroup("translationmanager"); - paths = settings->value("paths").toStringList(); /* paths */ - pathsR = settings->value("pathsR").toStringList(); /* pathsR */ - georges = settings->value("georges").toStringList(); /* georges */ filters = settings->value("filters").toStringList(); /* filters */ languages = settings->value("trlanguages").toStringList(); /* languages */ ligo = settings->value("ligo").toString(); @@ -224,30 +155,6 @@ void CTranslationManagerSettingsPage::readSettings() work = settings->value("work").toString(); settings->endGroup(); - // paths - Q_FOREACH(QString path, paths) - { - QListWidgetItem *newItem = new QListWidgetItem; - newItem->setText(path); - newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); - _ui.paths_list->addItem(newItem); - } - // pathsR - Q_FOREACH(QString pathR, pathsR) - { - QListWidgetItem *newItem = new QListWidgetItem; - newItem->setText(pathR); - newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); - _ui.pathsR_list->addItem(newItem); - } - // georges - Q_FOREACH(QString george, georges) - { - QListWidgetItem *newItem = new QListWidgetItem; - newItem->setText(george); - newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); - _ui.georges_list->addItem(newItem); - } // filter Q_FOREACH(QString filter, filters) { @@ -264,8 +171,6 @@ void CTranslationManagerSettingsPage::readSettings() newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); _ui.lang_list->addItem(newItem); } - // ligo - _ui.ligo_edit->setText(ligo); // translation _ui.translation_edit->setText(translation); // work @@ -275,25 +180,14 @@ void CTranslationManagerSettingsPage::readSettings() void CTranslationManagerSettingsPage::writeSettings() { - QStringList paths, pathsR, georges, filters, languages; + QStringList filters, languages; QString ligo, translation, work; - // paths - for (int i = 0; i < _ui.paths_list->count(); ++i) - paths << _ui.paths_list->item(i)->text(); - // pathsR - for (int i = 0; i < _ui.pathsR_list->count(); ++i) - pathsR << _ui.pathsR_list->item(i)->text(); - // georges - for (int i = 0; i < _ui.georges_list->count(); ++i) - georges << _ui.georges_list->item(i)->text(); // filters for (int i = 0; i < _ui.filter_list->count(); ++i) filters << _ui.filter_list->item(i)->text(); // languages for (int i = 0; i < _ui.lang_list->count(); ++i) languages << _ui.lang_list->item(i)->text(); - // ligo path - ligo = _ui.ligo_edit->text(); // translations path translation = _ui.translation_edit->text(); // work path @@ -301,12 +195,8 @@ void CTranslationManagerSettingsPage::writeSettings() QSettings *settings = Core::ICore::instance()->settings(); settings->beginGroup("translationmanager"); - settings->setValue("paths", paths); - settings->setValue("pathsR", pathsR); - settings->setValue("georges", georges); settings->setValue("filters", filters); - settings->setValue("trlanguages", languages); - settings->setValue("ligo", ligo); + settings->setValue("trlanguages", languages); settings->setValue("translation", translation); settings->setValue("work", work); settings->endGroup(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.h index 7a082f199..1cf19787a 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.h @@ -1,6 +1,6 @@ -// Object Viewer Qt - MMORPG Framework +// Translation Manager Plugin - OVQT Plugin // Copyright (C) 2010 Winch Gate Property Limited -// Copyright (C) 2011 Dzmitry Kamiahin +// Copyright (C) 2011 Emanuel Costea // // 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,7 +15,6 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - #ifndef TRANSLATION_MANAGER_SETTINGS_PAGE_H #define TRANSLATION_MANAGER_SETTINGS_PAGE_H @@ -49,12 +48,6 @@ public: virtual void apply(); virtual void finish() {} private Q_SLOTS: - void pathAdd(); - void pathDel(); - void pathRAdd(); - void pathRDel(); - void georgeAdd(); - void georgeDel(); void filterAdd(); void filterDel(); void languageAdd(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui index 4c932b4f5..aaa4337f4 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_settings_page.ui @@ -6,388 +6,181 @@ 0 0 - 490 - 496 + 533 + 478 Form - - - - - 1 - - - - Core paths - - - - - - - - - - Paths - - - - - - - Qt::Horizontal - - - - 318 - 20 - - - - - - - - dwadwadwa - - - - :/icons/ic_nel_add_item.png:/icons/ic_nel_add_item.png - - - Qt::ToolButtonIconOnly - - - true - - - - - - - ... - - - - :/icons/ic_nel_delete_item.png:/icons/ic_nel_delete_item.png - - - true - - - - - - - - - - - - - - - - - - Paths non recursives - - - - - - - Qt::Horizontal - - - - 218 - 20 - - - - - - - - - - - - :/icons/ic_nel_add_item.png:/icons/ic_nel_add_item.png - - - true - - - - - - - ... - - - - :/icons/ic_nel_delete_item.png:/icons/ic_nel_delete_item.png - - - true - - - - - - - - - - - - - - - - - - Georges Paths - - - - - - - Qt::Horizontal - - - - 258 - 20 - - - - - - - - - - - - :/icons/ic_nel_add_item.png:/icons/ic_nel_add_item.png - - - true - - - - - - - - - - - :/icons/ic_nel_delete_item.png:/icons/ic_nel_delete_item.png - - - true - - - - - - - - - - - - - - - Translation files paths - - - - - 9 - 190 - 454 - 161 - + + + + 0 + 10 + 531 + 421 + + + + Translation Manager Plugin + + + + + 0 + 30 + 521 + 232 + + + + + + + Filters - - - - - Ligo class file - This is the name of the world_editor_classes.xml file. - - - - - - - - - - Work directory - - - - - - - - - - - - ... - - - - - - - - - Translation directory - - - - - - - - - - - - ... - - - - - - - - - - 9 - 10 - 211 - 181 - + + + + + + + + - - - - - Filters - - - - - - - - - - - - - - :/icons/ic_nel_add_item.png:/icons/ic_nel_add_item.png - - - true - - - - - - - - - - - :/icons/ic_nel_delete_item.png:/icons/ic_nel_delete_item.png - - - true - - - - - - - - - - - - 240 - 10 - 221 - 181 - + + + :/core/icons/ic_nel_add_item.png:/core/icons/ic_nel_add_item.png + + + true - - - - - Languages - - - - - - - - - - - - - - :/icons/ic_nel_add_item.png:/icons/ic_nel_add_item.png - - - true - - - - - - - - - - - :/icons/ic_nel_delete_item.png:/icons/ic_nel_delete_item.png - - - true - - - - - - - - - - - + + + + + + + + + :/core/icons/ic_nel_delete_item.png:/core/icons/ic_nel_delete_item.png + + + true + + + + + + + Languages + + + + + + + + + + + + + + :/core/icons/ic_nel_add_item.png:/core/icons/ic_nel_add_item.png + + + true + + + + + + + + + + + :/core/icons/ic_nel_delete_item.png:/core/icons/ic_nel_delete_item.png + + + true + + + + + + + + + + + + + + + 0 + 340 + 521 + 60 + + + + + + + Translation directory + + + + + + + + + + ... + + + + + + + + + 0 + 270 + 521 + 60 + + + + + + + Work directory + + + + + + + + + + ... + + + + + + - - + From b3c99420a586c70b61fd39e91bb8cee58eecc596 Mon Sep 17 00:00:00 2001 From: cemycc Date: Wed, 6 Jul 2011 04:56:58 +0300 Subject: [PATCH 13/14] Added: #1307 Added extraction from primitives --- .../translation_manager/editor_worksheet.cpp | 135 +++++++++++- .../translation_manager/editor_worksheet.h | 2 + .../extract_new_sheet_names.cpp | 13 +- .../extract_new_sheet_names.h | 1 + .../translation_manager_main_window.cpp | 203 +++++++++++++----- .../translation_manager_main_window.h | 3 +- 6 files changed, 292 insertions(+), 65 deletions(-) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.cpp index d19d28723..83c67e7a6 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.cpp @@ -25,6 +25,7 @@ #include #include "extract_bot_names.h" +#include "translation_manager_constants.h" using namespace std; @@ -38,7 +39,7 @@ void CEditorWorksheet::open(QString filename) if(loadExcelSheet(filename.toStdString(), wk_file, true) == true) { bool hasHashValue = false; - table_editor = new QTableWidget(); + table_editor = new QTableWidget(); if(wk_file.getData(0, 0) == ucstring("*HASH_VALUE")) { table_editor->setColumnCount(wk_file.ColCount - 1); @@ -105,8 +106,7 @@ void CEditorWorksheet::open(QString filename) void CEditorWorksheet::activateWindow() { - showMaximized(); - + showMaximized(); } void CEditorWorksheet::save() @@ -209,7 +209,6 @@ void CEditorWorksheet::insertRow() for(int j = 0; j < table_editor->columnCount(); j++) { QTableWidgetItem* item = new QTableWidgetItem(); - //item->setText(QString(" ")); table_editor->setItem(last_row, j, item); } } @@ -236,7 +235,8 @@ void CEditorWorksheet::deleteRow() void CEditorWorksheet::worksheetEditorChanged(int row, int column) { - + if(!isWindowModified()) + setWindowModified(true); } void CEditorWorksheet::extractBotNames(list filters, string level_design_path, NLLIGO::CLigoConfig ligoConfig) @@ -378,9 +378,73 @@ void CEditorWorksheet::extractWords(QString filename, QString columnId, IWordLis if(modified) { setWindowModified(true); + table_editor->scrollToBottom(); } } +void CEditorWorksheet::mergeWorksheetFile(QString filename) +{ + STRING_MANAGER::TWorksheet wk_file; + if(loadExcelSheet(filename.toStdString(), wk_file, true) == true) + { + bool hasHashValue = false; + if(wk_file.getData(0, 0) == ucstring("*HASH_VALUE")) + { + table_editor->setColumnCount(wk_file.ColCount - 1); + hasHashValue = true; + } else { + table_editor->setColumnCount(wk_file.ColCount); + } + table_editor->setRowCount(wk_file.size() - 1); + + // read columns name + for(unsigned int i = 0; i < wk_file.ColCount; i++) + { + if(hasHashValue && i == 0) + { + // we don't show the column with hash value + } else { + QTableWidgetItem *col = new QTableWidgetItem(); + ucstring col_name = wk_file.getData(0, i); + col->setText(tr(col_name.toString().c_str())); + if(hasHashValue) + { + table_editor->setHorizontalHeaderItem(i - 1, col); + } else { + table_editor->setHorizontalHeaderItem(i, col); + } + } + } + + // read rows + for(unsigned int i = 1; i < wk_file.size(); i++) + { + for(unsigned int j = 0; j < wk_file.ColCount; j++) + { + if(hasHashValue && j == 0) + { + // we don't show the column with hash value + } else { + QTableWidgetItem *row = new QTableWidgetItem(); + ucstring row_value = wk_file.getData(i, j); + row->setText(tr(row_value.toString().c_str())); + if(hasHashValue) + { + table_editor->setItem(i - 1, j - 1, row); + } else { + table_editor->setItem(i - 1, j, row); + } + } + } + } + } else { + QErrorMessage error; + error.showMessage("This file is not a worksheet file."); + error.exec(); + } + +} + void CEditorWorksheet::setCurrentFile(QString filename) { QFileInfo *file = new QFileInfo(filename); @@ -392,9 +456,35 @@ void CEditorWorksheet::setCurrentFile(QString filename) void CEditorWorksheet::closeEvent(QCloseEvent *event) { - close(); - event->accept(); - + if(isWindowModified()) + { + QMessageBox msgBox; + msgBox.setText("The document has been modified."); + msgBox.setInformativeText("Do you want to save your changes?"); + msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Save); + int ret = msgBox.exec(); + switch (ret) + { + case QMessageBox::Save: + save(); + event->accept(); + close(); + break; + case QMessageBox::Discard: + event->accept(); + close(); + break; + case QMessageBox::Cancel: + event->ignore(); + break; + default: + break; + } + } else { + event->accept(); + close(); + } } bool CEditorWorksheet::isBotNamesTable() @@ -410,6 +500,35 @@ bool CEditorWorksheet::isBotNamesTable() return status; } +bool CEditorWorksheet::isSheetTable(QString type) +{ + QString column_name; + if(type.toAscii() == Constants::WK_ITEM) + { + column_name = "item ID"; + } else if(type.toAscii() == Constants::WK_CREATURE) { + column_name = "creature ID"; + } else if(type.toAscii() == Constants::WK_SBRICK) { + column_name = "sbrick ID"; + } else if(type.toAscii() == Constants::WK_SPHRASE) { + column_name = "sphrase ID"; + } else if(type.toAscii() == Constants::WK_PLACE) { + column_name = "placeId"; + } else if(type.toAscii() == Constants::WK_CONTINENT) { + column_name = "placeId"; + } else if(type.toAscii() == Constants::WK_STABLE) { + column_name = "placeId"; + } + bool status = true; + if(table_editor->horizontalHeaderItem(0)->text() != column_name + || table_editor->horizontalHeaderItem(1)->text() != "name") + { + status = false; + } + + return status; +} + } diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.h index 497e23913..39f4aafa1 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.h @@ -49,9 +49,11 @@ public: void save(); void saveAs(QString filename); void activateWindow(); + void mergeWorksheetFile(QString filename); void extractBotNames(list filters, string level_design_path, NLLIGO::CLigoConfig ligoConfig); void extractWords(QString filename, QString columnId, IWordListBuilder &wordListBuilder); bool isBotNamesTable(); + bool isSheetTable(QString type); void closeEvent(QCloseEvent *event); private Q_SLOTS: void worksheetEditorChanged(int,int); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.cpp index e881177bb..e0626bc6b 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.cpp @@ -108,12 +108,12 @@ bool CRegionPrimWordListBuilder::buildWordList(std::vector &allWords, st // ok, read the file CPrimitives PrimDoc; CPrimitiveContext::instance().CurrentPrimitive = &PrimDoc; - // if (!loadXmlPrimitiveFile(PrimDoc, allFiles[i], LigoConfig)) - // { - // nlwarning("Error: cannot open file '%s'. '%s' Aborted", allFiles[i].c_str(), workSheetFileName.c_str()); - // CPrimitiveContext::instance().CurrentPrimitive = NULL; - // return false; - // } + if (!loadXmlPrimitiveFile(PrimDoc, allFiles[i], LigoConfig)) + { + nlwarning("Error: cannot open file '%s'. '%s' Aborted", allFiles[i].c_str(), workSheetFileName.c_str()); + CPrimitiveContext::instance().CurrentPrimitive = NULL; + return false; + } CPrimitiveContext::instance().CurrentPrimitive = NULL; // For all primitives of interest @@ -141,6 +141,7 @@ bool CRegionPrimWordListBuilder::buildWordList(std::vector &allWords, st // avoid duplicate if(allWordSet.insert(primName).second) { + nlinfo(primName.c_str()); //TODO: delete allWords.push_back(primName); } } diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.h index 007018a08..8c9151e2e 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.h @@ -60,6 +60,7 @@ struct CRegionPrimWordListBuilder : public IWordListBuilder { string PrimPath; vector PrimFilter; + NLLIGO::CLigoConfig LigoConfig; virtual bool buildWordList(std::vector &allWords, string workSheetFileName); }; diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp index 95a5fe95f..daff3923d 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp @@ -16,6 +16,7 @@ // along with this program. If not, see . #include "translation_manager_main_window.h" +#include "translation_manager_constants.h" #include "editor_worksheet.h" // Project system includes @@ -86,7 +87,9 @@ void CMainWindow::createToolbar() // extract bot names QAction *extractBotNamesAct = wordsExtractionMenu->addAction("&Extract bot names..."); extractBotNamesAct->setStatusTip(tr("Extract bot names from primitives.")); - connect(extractBotNamesAct, SIGNAL(triggered()), this, SLOT(extractBotNames())); + connect(extractBotNamesAct, SIGNAL(triggered()), this, SLOT(extractBotNames())); + // Words extraction + // ----------------------------- // signal mapper for extraction words QSignalMapper *wordsExtractionMapper = new QSignalMapper(this); connect(wordsExtractionMapper, SIGNAL(mapped(QString)), this, SLOT(extractWords(QString))); @@ -94,23 +97,37 @@ void CMainWindow::createToolbar() QAction *extractItemWordsAct = wordsExtractionMenu->addAction("&Extract item words..."); extractItemWordsAct->setStatusTip(tr("Extract item words")); connect(extractItemWordsAct, SIGNAL(triggered()), wordsExtractionMapper, SLOT(map())); - wordsExtractionMapper->setMapping(extractItemWordsAct, "item"); + wordsExtractionMapper->setMapping(extractItemWordsAct, tr(Constants::WK_ITEM)); // extract creature words QAction *extractCreatureWordsAct = wordsExtractionMenu->addAction("&Extract creature words..."); extractCreatureWordsAct->setStatusTip(tr("Extract creature words")); connect(extractCreatureWordsAct, SIGNAL(triggered()), wordsExtractionMapper, SLOT(map())); - wordsExtractionMapper->setMapping(extractCreatureWordsAct, "creature"); + wordsExtractionMapper->setMapping(extractCreatureWordsAct, tr(Constants::WK_CREATURE)); // extract sbrick words QAction *extractSbrickWordsAct = wordsExtractionMenu->addAction("&Extract sbrick words..."); extractSbrickWordsAct->setStatusTip(tr("Extract sbrick words")); connect(extractSbrickWordsAct, SIGNAL(triggered()), wordsExtractionMapper, SLOT(map())); - wordsExtractionMapper->setMapping(extractSbrickWordsAct, "sbrick"); + wordsExtractionMapper->setMapping(extractSbrickWordsAct, tr(Constants::WK_SBRICK)); // extract sphrase words QAction *extractSphraseWordsAct = wordsExtractionMenu->addAction("&Extract sphrase words..."); extractSphraseWordsAct->setStatusTip(tr("Extract sphrase words")); connect(extractSphraseWordsAct, SIGNAL(triggered()), wordsExtractionMapper, SLOT(map())); - wordsExtractionMapper->setMapping(extractSphraseWordsAct, "sphrase"); - + wordsExtractionMapper->setMapping(extractSphraseWordsAct, tr(Constants::WK_SPHRASE)); + // extract place and region names + QAction *extractPlaceNamesAct = wordsExtractionMenu->addAction("&Extract place and region names..."); + extractPlaceNamesAct->setStatusTip(tr("Extract place and region names")); + connect(extractPlaceNamesAct, SIGNAL(triggered()), wordsExtractionMapper, SLOT(map())); + wordsExtractionMapper->setMapping(extractPlaceNamesAct, tr(Constants::WK_PLACE)); + // extract continent names + QAction *extractContinentNamesAct = wordsExtractionMenu->addAction("&Extract continent names..."); + extractContinentNamesAct->setStatusTip(tr("Extract continent names")); + connect(extractContinentNamesAct, SIGNAL(triggered()), wordsExtractionMapper, SLOT(map())); + wordsExtractionMapper->setMapping(extractContinentNamesAct, tr(Constants::WK_CONTINENT)); + // extract stable names + QAction *extractStableNamesAct = wordsExtractionMenu->addAction("&Extract stable names..."); + extractStableNamesAct->setStatusTip(tr("Extract stable names")); + connect(extractStableNamesAct, SIGNAL(triggered()), wordsExtractionMapper, SLOT(map())); + wordsExtractionMapper->setMapping(extractStableNamesAct, tr(Constants::WK_STABLE)); // Windows menu windowMenu = new QMenu(tr("&Windows..."), _ui.toolBar); windowMenu->setIcon(QIcon(Core::Constants::ICON_PILL)); @@ -144,7 +161,7 @@ void CMainWindow::setActiveSubWindow(QWidget* window) void CMainWindow::activeSubWindowChanged() { - + } void CMainWindow::updateWindowsList() @@ -215,11 +232,7 @@ void CMainWindow::openWorkFile(QString file) } } else { QErrorMessage error; - QString text; - text.append("The "); - text.append(file_path->fileName()); - text.append(" file don't exists."); - error.showMessage(text); + error.showMessage(QString("The %1 file don't exists.").arg(file_path->fileName())); error.exec(); } @@ -227,11 +240,14 @@ void CMainWindow::openWorkFile(QString file) void CMainWindow::save() { - CEditor* current_window = qobject_cast(_ui.mdiArea->currentSubWindow()); - - if(QString(current_window->widget()->metaObject()->className()) == "QTableWidget") // Sheet Editor + if(_ui.mdiArea->subWindowList().size() > 0) { - current_window->save(); + CEditor* current_window = qobject_cast(_ui.mdiArea->currentSubWindow()); + + if(QString(current_window->widget()->metaObject()->className()) == "QTableWidget") // Sheet Editor + { + current_window->save(); + } } } @@ -275,35 +291,111 @@ void CMainWindow::initializeSettings(bool georges = false) } } -void CMainWindow::extractWords(QString type) +void CMainWindow::extractWords(QString typeq) { - CEditor* editor_window = qobject_cast(_ui.mdiArea->currentSubWindow()); - CEditorWorksheet* current_window = qobject_cast(editor_window); - - // initializeSettings(false); - - CSheetWordListBuilder builder; - QString column_name; - - if(type == "item") - { - column_name = "item ID"; - builder.SheetExt = "sitem"; - builder.SheetPath = level_design_path + "/game_element/sitem"; - } else if(type == "creature") { - column_name = "creature ID"; - builder.SheetExt = "creature"; - builder.SheetPath = level_design_path + "/Game_elem/Creature/fauna"; - } else if(type == "sbrick") { - column_name = "sbrick ID"; - builder.SheetExt = "sbrick"; - builder.SheetPath = level_design_path + "/game_element/sbrick"; - } else if(type == "sphrase") { - column_name = "sphrase ID"; - builder.SheetExt = "sphrase"; - builder.SheetPath = level_design_path + "/game_element/sphrase"; - } - current_window->extractWords(current_window->windowFilePath(), column_name, builder); + if(verifySettings() == true) + { + CEditorWorksheet* current_window; + if(_ui.mdiArea->subWindowList().size() > 0) + { + CEditor* editor_window = qobject_cast(_ui.mdiArea->currentSubWindow()); + if(QString(editor_window->widget()->metaObject()->className()) == "QTableWidget") // Sheet Editor + { + current_window = qobject_cast(editor_window); + QString file_path = current_window->subWindowFilePath(); + if(!current_window->isSheetTable(typeq)) + { + list subWindows = convertSubWindowList(_ui.mdiArea->subWindowList()); + list::iterator it = subWindows.begin(); + bool finded = false; + + for(; it != subWindows.end(); ++it) + { + current_window = qobject_cast((*it)); + file_path = current_window->subWindowFilePath(); + if(current_window->isSheetTable(typeq)) + { + finded = true; + current_window->activateWindow(); + } + } + if(!finded) + { + openWorkFile(typeq); + if(_ui.mdiArea->subWindowList().size() > 0) + { + current_window = qobject_cast(_ui.mdiArea->currentSubWindow()); + QString file_path = current_window->windowFilePath(); + } else { + return; + } + } + } + } + } else { + openWorkFile(typeq); + if(_ui.mdiArea->subWindowList().size() > 0) + { + current_window = qobject_cast(_ui.mdiArea->currentSubWindow()); + QString file_path = current_window->windowFilePath(); + } else { + return; + } + + } + QString column_name; + // Sheet extraction + CSheetWordListBuilder builderS; + // Primitives extraction + CRegionPrimWordListBuilder builderP; + bool isSheet = false; + if(typeq.toAscii() == Constants::WK_ITEM) { + column_name = "item ID"; + builderS.SheetExt = "sitem"; + builderS.SheetPath = level_design_path + "/game_element/sitem"; + isSheet = true; + } else if(typeq.toAscii() == Constants::WK_CREATURE) { + column_name = "creature ID"; + builderS.SheetExt = "creature"; + builderS.SheetPath = level_design_path + "/Game_elem/Creature/fauna"; + isSheet = true; + } else if(typeq.toAscii() == Constants::WK_SBRICK) { + column_name = "sbrick ID"; + builderS.SheetExt = "sbrick"; + builderS.SheetPath = level_design_path + "/game_element/sbrick"; + isSheet = true; + } else if(typeq.toAscii() == Constants::WK_SPHRASE) { + column_name = "sphrase ID"; + builderS.SheetExt = "sphrase"; + builderS.SheetPath = level_design_path + "/game_element/sphrase"; + isSheet = true; + } else if(typeq.toAscii() == Constants::WK_PLACE) { + column_name = "placeId"; + builderP.PrimPath = primitives_path; + builderP.PrimFilter.push_back("region_*.primitive"); + builderP.PrimFilter.push_back("indoors_*.primitive"); + isSheet = false; + } else if(typeq.toAscii() == Constants::WK_CONTINENT) { + column_name = "placeId"; + builderP.PrimPath = primitives_path; + builderP.PrimFilter.push_back("continent_*.primitive"); + isSheet = false; + } else if(typeq.toAscii() == Constants::WK_STABLE) { + column_name = "placeId"; + builderP.PrimPath = primitives_path; + builderP.PrimFilter.push_back("stable_*.primitive"); + isSheet = false; + } + + if(isSheet) + { + current_window->extractWords(current_window->windowFilePath(), column_name, builderS); + } else { + initializeSettings(false); + current_window->extractWords(current_window->windowFilePath(), column_name, builderP); + } + } + } void CMainWindow::extractBotNames() @@ -336,16 +428,26 @@ void CMainWindow::extractBotNames() } if(!finded) { - openWorkFile("bot_names_wk.txt"); - current_window = qobject_cast(_ui.mdiArea->currentSubWindow()); - file_path = current_window->windowFilePath(); + openWorkFile(tr(Constants::WK_BOTNAMES)); + if(_ui.mdiArea->subWindowList().size() > 0) + { + current_window = qobject_cast(_ui.mdiArea->currentSubWindow()); + QString file_path = current_window->windowFilePath(); + } else { + return; + } } } } } else { - openWorkFile("bot_names_wk.txt"); - current_window = qobject_cast(_ui.mdiArea->currentSubWindow()); - QString file_path = current_window->windowFilePath(); + openWorkFile(tr(Constants::WK_BOTNAMES)); + if(_ui.mdiArea->subWindowList().size() > 0) + { + current_window = qobject_cast(_ui.mdiArea->currentSubWindow()); + QString file_path = current_window->windowFilePath(); + } else { + return; + } } initializeSettings(true); current_window->extractBotNames(filters, level_design_path, ligoConfig); @@ -363,6 +465,7 @@ void CMainWindow::readSettings() settings->endGroup(); settings->beginGroup(Core::Constants::DATA_PATH_SECTION); level_design_path = settings->value(Core::Constants::LEVELDESIGN_PATH).toString().toStdString(); + primitives_path = QString(Core::Constants::PRIMITIVES_PATH).toStdString(); settings->endGroup(); } diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h index b0d59fe29..2ee796bd0 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h @@ -73,12 +73,13 @@ private: list filters; list languages; string level_design_path; + string primitives_path; string translation_path; string work_path; NLLIGO::CLigoConfig ligoConfig; private Q_SLOTS: void extractBotNames(); - void extractWords(QString); + void extractWords(QString typeq); void open(); void save(); void saveAs(); From 0b4faa32ceb1b61c6e2abbd00a0984da40421c5b Mon Sep 17 00:00:00 2001 From: cemycc Date: Fri, 8 Jul 2011 18:22:51 +0300 Subject: [PATCH 14/14] Added: #1307 Merge options for translation files from local directory and from FTP server --- .../src/plugins/core/core_constants.h | 117 ----------------- .../translation_manager/CMakeLists.txt | 9 +- .../translation_manager/editor_worksheet.cpp | 119 +++++++++--------- .../translation_manager/editor_worksheet.h | 1 + .../extract_new_sheet_names.cpp | 1 - .../translation_manager_main_window.cpp | 82 ++++++++---- .../translation_manager_main_window.h | 4 +- 7 files changed, 132 insertions(+), 201 deletions(-) delete mode 100644 code/nel/tools/3d/object_viewer_qt/src/plugins/core/core_constants.h 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 deleted file mode 100644 index 2acf4f731..000000000 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/core/core_constants.h +++ /dev/null @@ -1,117 +0,0 @@ -// 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.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_FILE_RECENTFILES = "ObjectViewerQt.Menu.File.RecentFiles"; -const char * const M_SHEET = "ObjectViewerQt.Menu.Sheet"; - -//actions -const char * const NEW = "ObjectViewerQt.New"; -const char * const OPEN = "ObjectViewerQt.Open"; -const char * const SAVE = "ObjectViewerQt.Save"; -const char * const SAVE_AS = "ObjectViewerQt.SaveAs"; -const char * const SAVE_ALL = "ObjectViewerQt.SaveAll"; -const char * const EXIT = "ObjectViewerQt.Exit"; - -const char * const UNDO = "ObjectViewerQt.Undo"; -const char * const REDO = "ObjectViewerQt.Redo"; -const char * const CUT = "ObjectViewerQt.Cut"; -const char * const COPY = "ObjectViewerQt.Copy"; -const char * const PASTE = "ObjectViewerQt.Paste"; -const char * const DEL = "ObjectViewerQt.Del"; -const char * const FIND = "ObjectViewerQt.Find"; -const char * const SELECT_ALL = "ObjectViewerQt.SelectAll"; -const char * const GOTO_POS = "ObjectViewerQt.Goto"; - -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_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 -} // namespace Core - -#endif // CORE_CONSTANTS_H diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt index 56195d6e0..59f11c4f8 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/CMakeLists.txt @@ -13,15 +13,20 @@ SET(OVQT_PLUG_TRANSLATION_MANAGER_HDR translation_manager_plugin.h translation_manager_main_window.h translation_manager_settings_page.h translation_manager_editor.h + source_selection.h + ftp_selection.h editor_worksheet.h extract_new_sheet_names.h extract_bot_names.h) SET(OVQT_PLUG_TRANSLATION_MANAGER_UIS translation_manager_settings_page.ui - translation_manager_main_window.ui) + translation_manager_main_window.ui + source_selection.ui + ftp_selection.ui) SET(QT_USE_QTGUI TRUE) SET(QT_USE_QTOPENGL TRUE) +SET(QT_USE_QTNETWORK TRUE) QT4_WRAP_CPP(OVQT_PLUG_TRANSLATION_MANAGER_MOC_SRC ${OVQT_PLUG_TRANSLATION_MANAGER_HDR}) QT4_WRAP_UI(OVQT_PLUG_TRANSLATION_MANAGER_UI_HDRS ${OVQT_PLUG_TRANSLATION_MANAGER_UIS}) @@ -34,7 +39,7 @@ SOURCE_GROUP("OVQT Extension System" FILES ${OVQT_EXT_SYS_SRC}) ADD_LIBRARY(ovqt_plugin_translation_manager MODULE ${SRC} ${OVQT_PLUG_TRANSLATION_MANAGER_MOC_SRC} ${OVQT_EXT_SYS_SRC} ${OVQT_PLUG_TRANSLATION_MANAGER_UI_HDRS}) -TARGET_LINK_LIBRARIES(ovqt_plugin_translation_manager ovqt_plugin_core nelmisc nel3d nelligo nelgeorges ${QT_LIBRARIES} ${QT_QTOPENGL_LIBRARY}) +TARGET_LINK_LIBRARIES(ovqt_plugin_translation_manager ovqt_plugin_core nelmisc nel3d nelligo nelgeorges ${QT_LIBRARIES} ${QT_QTOPENGL_LIBRARY} ${QT_QTNETWORK_LIBRARY} ) NL_DEFAULT_PROPS(ovqt_plugin_translation_manager "NeL, Tools, 3D: Object Viewer Qt Plugin: Translation Manager") NL_ADD_RUNTIME_FLAGS(ovqt_plugin_translation_manager) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.cpp index 83c67e7a6..de20db5ec 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.cpp @@ -139,14 +139,14 @@ void CEditorWorksheet::save() colname = wk_file.getData(0, j + colIdx); rowIdf = uint(i + 1); - if(wk_file.findRow(j + colIdx, colname, rowIdf)) + if(wk_file.findRow(j + colIdx, colname, rowIdf)) // search for the row { - if(wk_file.getData(i + 1, j + colIdx) != tvalue) + if(wk_file.getData(i + 1, j + colIdx) != tvalue) // verify the current value { - wk_file.setData(i + 1, j + colIdx, tvalue); + wk_file.setData(i + 1, j + colIdx, tvalue); // change the value } } else { - wk_file.setData(i + 1, j + colIdx, tvalue); + wk_file.setData(i + 1, j + colIdx, tvalue); // insert the value } } } @@ -382,67 +382,74 @@ void CEditorWorksheet::extractWords(QString filename, QString columnId, IWordLis } } +bool CEditorWorksheet::compareWorksheetFile(QString filename) +{ + STRING_MANAGER::TWorksheet wk_file; + int colIndex = 0; + if(loadExcelSheet(filename.toStdString(), wk_file, true) == true) + { + if(wk_file.getData(0, 0) == ucstring("*HASH_VALUE")) + { + colIndex = 1; + } + if(wk_file.ColCount - colIndex != table_editor->columnCount()) + { + return false; + } + for(int i = 0; i < table_editor->columnCount(); i++) + { + QString item = table_editor->horizontalHeaderItem(i)->text(); + ucstring itemC = wk_file.getData(0, i+ colIndex); + if(item.toStdString() != itemC.toString()) + { + nlwarning(item.toStdString().c_str()); + nlwarning(itemC.toString().c_str()); + return false; + } + } + } else { + return false; + } + + return true; +} + void CEditorWorksheet::mergeWorksheetFile(QString filename) { STRING_MANAGER::TWorksheet wk_file; if(loadExcelSheet(filename.toStdString(), wk_file, true) == true) { - bool hasHashValue = false; + bool hasHashValue = false; + int colIndex = 0; if(wk_file.getData(0, 0) == ucstring("*HASH_VALUE")) { - table_editor->setColumnCount(wk_file.ColCount - 1); hasHashValue = true; - } else { - table_editor->setColumnCount(wk_file.ColCount); - } - table_editor->setRowCount(wk_file.size() - 1); - - // read columns name - for(unsigned int i = 0; i < wk_file.ColCount; i++) - { - if(hasHashValue && i == 0) - { - // we don't show the column with hash value - } else { - QTableWidgetItem *col = new QTableWidgetItem(); - ucstring col_name = wk_file.getData(0, i); - col->setText(tr(col_name.toString().c_str())); - if(hasHashValue) - { - table_editor->setHorizontalHeaderItem(i - 1, col); - } else { - table_editor->setHorizontalHeaderItem(i, col); - } - } - } - + colIndex = 1; + } // read rows for(unsigned int i = 1; i < wk_file.size(); i++) { - for(unsigned int j = 0; j < wk_file.ColCount; j++) + // search with the first column + ucstring rowId = wk_file.getData(i,colIndex); + QList search_results = table_editor->findItems(tr(rowId.toString().c_str()), Qt::MatchExactly); + if(search_results.size() == 0) { - if(hasHashValue && j == 0) - { - // we don't show the column with hash value - } else { - QTableWidgetItem *row = new QTableWidgetItem(); - ucstring row_value = wk_file.getData(i, j); - row->setText(tr(row_value.toString().c_str())); - if(hasHashValue) - { - table_editor->setItem(i - 1, j - 1, row); - } else { - table_editor->setItem(i - 1, j, row); - } - } - } - } - } else { - QErrorMessage error; - error.showMessage("This file is not a worksheet file."); - error.exec(); - } - + const int lastRow = table_editor->rowCount(); + table_editor->setRowCount(lastRow + 1); + for(unsigned int j = 0; j < table_editor->columnCount(); j++) + { + ucstring rowValue = wk_file.getData(i, j + colIndex); // get the value + QTableWidgetItem *row = new QTableWidgetItem(); + row->setText(QString(rowValue.toString().c_str())); // set the value in table item + table_editor->setItem(lastRow, j, row); + } + } + } + } else { + QErrorMessage error; + error.showMessage("This file is not a worksheet file."); + error.exec(); + } } void CEditorWorksheet::setCurrentFile(QString filename) @@ -514,11 +521,7 @@ bool CEditorWorksheet::isSheetTable(QString type) column_name = "sphrase ID"; } else if(type.toAscii() == Constants::WK_PLACE) { column_name = "placeId"; - } else if(type.toAscii() == Constants::WK_CONTINENT) { - column_name = "placeId"; - } else if(type.toAscii() == Constants::WK_STABLE) { - column_name = "placeId"; - } + } bool status = true; if(table_editor->horizontalHeaderItem(0)->text() != column_name || table_editor->horizontalHeaderItem(1)->text() != "name") diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.h index 39f4aafa1..95ee140d1 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/editor_worksheet.h @@ -50,6 +50,7 @@ public: void saveAs(QString filename); void activateWindow(); void mergeWorksheetFile(QString filename); + bool compareWorksheetFile(QString filename); void extractBotNames(list filters, string level_design_path, NLLIGO::CLigoConfig ligoConfig); void extractWords(QString filename, QString columnId, IWordListBuilder &wordListBuilder); bool isBotNamesTable(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.cpp index e0626bc6b..f2369fc1c 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/extract_new_sheet_names.cpp @@ -141,7 +141,6 @@ bool CRegionPrimWordListBuilder::buildWordList(std::vector &allWords, st // avoid duplicate if(allWordSet.insert(primName).second) { - nlinfo(primName.c_str()); //TODO: delete allWords.push_back(primName); } } diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp index daff3923d..548aa4b37 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.cpp @@ -18,6 +18,7 @@ #include "translation_manager_main_window.h" #include "translation_manager_constants.h" #include "editor_worksheet.h" +#include "ftp_selection.h" // Project system includes #include "../core/icore.h" @@ -114,20 +115,15 @@ void CMainWindow::createToolbar() connect(extractSphraseWordsAct, SIGNAL(triggered()), wordsExtractionMapper, SLOT(map())); wordsExtractionMapper->setMapping(extractSphraseWordsAct, tr(Constants::WK_SPHRASE)); // extract place and region names - QAction *extractPlaceNamesAct = wordsExtractionMenu->addAction("&Extract place and region names..."); - extractPlaceNamesAct->setStatusTip(tr("Extract place and region names")); + QAction *extractPlaceNamesAct = wordsExtractionMenu->addAction("&Extract place names..."); + extractPlaceNamesAct->setStatusTip(tr("Extract place names from primitives")); connect(extractPlaceNamesAct, SIGNAL(triggered()), wordsExtractionMapper, SLOT(map())); wordsExtractionMapper->setMapping(extractPlaceNamesAct, tr(Constants::WK_PLACE)); - // extract continent names - QAction *extractContinentNamesAct = wordsExtractionMenu->addAction("&Extract continent names..."); - extractContinentNamesAct->setStatusTip(tr("Extract continent names")); - connect(extractContinentNamesAct, SIGNAL(triggered()), wordsExtractionMapper, SLOT(map())); - wordsExtractionMapper->setMapping(extractContinentNamesAct, tr(Constants::WK_CONTINENT)); - // extract stable names - QAction *extractStableNamesAct = wordsExtractionMenu->addAction("&Extract stable names..."); - extractStableNamesAct->setStatusTip(tr("Extract stable names")); - connect(extractStableNamesAct, SIGNAL(triggered()), wordsExtractionMapper, SLOT(map())); - wordsExtractionMapper->setMapping(extractStableNamesAct, tr(Constants::WK_STABLE)); + // Merge options + // ----------------------------- + QAction *mergeSingleFileAct = wordsExtractionMenu->addAction("&Merge worksheet file..."); + mergeSingleFileAct->setStatusTip(tr("Merge worksheet file from local or remote directory")); + connect(mergeSingleFileAct, SIGNAL(triggered()), this, SLOT(mergeSingleFile())); // Windows menu windowMenu = new QMenu(tr("&Windows..."), _ui.toolBar); windowMenu->setIcon(QIcon(Core::Constants::ICON_PILL)); @@ -375,16 +371,6 @@ void CMainWindow::extractWords(QString typeq) builderP.PrimFilter.push_back("region_*.primitive"); builderP.PrimFilter.push_back("indoors_*.primitive"); isSheet = false; - } else if(typeq.toAscii() == Constants::WK_CONTINENT) { - column_name = "placeId"; - builderP.PrimPath = primitives_path; - builderP.PrimFilter.push_back("continent_*.primitive"); - isSheet = false; - } else if(typeq.toAscii() == Constants::WK_STABLE) { - column_name = "placeId"; - builderP.PrimPath = primitives_path; - builderP.PrimFilter.push_back("stable_*.primitive"); - isSheet = false; } if(isSheet) @@ -454,6 +440,58 @@ void CMainWindow::extractBotNames() } } +void CMainWindow::mergeSingleFile() +{ + CEditor* editor_window = qobject_cast(_ui.mdiArea->currentSubWindow()); + CSourceDialog *dialog = new CSourceDialog(this); + map methods; + // create items + QListWidgetItem* local_item = new QListWidgetItem(); + local_item->setText("Local directory"); + methods[local_item] = 0; + QListWidgetItem* ftp_item = new QListWidgetItem(); + ftp_item->setText("From a FTP server"); + methods[ftp_item] = 1; + + dialog->setSourceOptions(methods); + dialog->show(); + dialog->exec(); + if(dialog->selected_item == local_item) // Local directory + { + QString file_name; + if (_ui.mdiArea->subWindowList().size() > 0) + { + file_name = QFileDialog::getOpenFileName(this); + } else { + return; + } + + if(QString(editor_window->widget()->metaObject()->className()) == "QTableWidget") // Sheet Editor + { + editor_window->activateWindow(); + CEditorWorksheet* current_window = qobject_cast(editor_window); + if(current_window->windowFilePath() == file_name) + return; + if(current_window->compareWorksheetFile(file_name)) + { + current_window->mergeWorksheetFile(file_name); + } else { + QErrorMessage error; + error.showMessage(QString("The file: %1 has different columns from the current file in editor.").arg(file_name)); + error.exec(); + } + } + } else if(dialog->selected_item == ftp_item) { // Ftp directory + CFtpSelection* ftp_dialog = new CFtpSelection(this); + ftp_dialog->show(); + ftp_dialog->exec(); + } else { + return; + } + + +} + void CMainWindow::readSettings() { QSettings *settings = Core::ICore::instance()->settings(); diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h index 2ee796bd0..95e4cbaa1 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/translation_manager/translation_manager_main_window.h @@ -38,9 +38,11 @@ #include #include #include +#include #include "translation_manager_editor.h" +#include "source_selection.h" #include "ui_translation_manager_main_window.h" #include @@ -86,7 +88,7 @@ private Q_SLOTS: void activeSubWindowChanged(); void setActiveSubWindow(QWidget *window); void updateWindowsList(); - + void mergeSingleFile(); void debug(QString text); // TODO private: void openWorkFile(QString file);