Merge with gsoc2011-worldeditorqt

This commit is contained in:
kervala 2011-05-28 15:47:16 +02:00
commit 685ab0f488
45 changed files with 920 additions and 37 deletions

View file

@ -1,6 +1,7 @@
ADD_SUBDIRECTORY(core) ADD_SUBDIRECTORY(core)
ADD_SUBDIRECTORY(example) ADD_SUBDIRECTORY(example)
ADD_SUBDIRECTORY(ovqt_sheet_builder) ADD_SUBDIRECTORY(ovqt_sheet_builder)
ADD_SUBDIRECTORY(landscape_editor)
ADD_SUBDIRECTORY(log) ADD_SUBDIRECTORY(log)
ADD_SUBDIRECTORY(disp_sheet_id) ADD_SUBDIRECTORY(disp_sheet_id)
ADD_SUBDIRECTORY(object_viewer) ADD_SUBDIRECTORY(object_viewer)

View file

@ -18,15 +18,18 @@ SET(OVQT_CORE_PLUGIN_HDR
core.h core.h
main_window.h main_window.h
menu_manager.h menu_manager.h
context_manager.h
settings_dialog.h settings_dialog.h
search_paths_settings_page.h search_paths_settings_page.h
general_settings_page.h general_settings_page.h
plugin_view_dialog.h) plugin_view_dialog.h
)
SET(OVQT_CORE_PLUGIN_UIS settings_dialog.ui SET(OVQT_CORE_PLUGIN_UIS settings_dialog.ui
plugin_view_dialog.ui plugin_view_dialog.ui
general_settings_page.ui general_settings_page.ui
search_paths_settings_page.ui) search_paths_settings_page.ui
)
SET(OVQT_CORE_PLUGIN_RCS core.qrc) SET(OVQT_CORE_PLUGIN_RCS core.qrc)

View file

@ -0,0 +1,150 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// 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 <http://www.gnu.org/licenses/>.
// Project includes
#include "context_manager.h"
#include "icontext.h"
#include "main_window.h"
// NeL includes
#include <nel/misc/debug.h>
// Qt includes
#include <QtGui/QTabWidget>
#include <QtGui/QGridLayout>
namespace Core
{
struct ContextManagerPrivate
{
explicit ContextManagerPrivate(Core::MainWindow *mainWindow, QTabWidget *tabWidget);
Core::MainWindow *m_mainWindow;
QTabWidget *m_tabWidget;
QVector<IContext *> m_contexts;
int m_oldCurrent;
};
ContextManagerPrivate::ContextManagerPrivate(Core::MainWindow *mainWindow, QTabWidget *tabWidget)
: m_mainWindow(mainWindow),
m_tabWidget(tabWidget),
m_oldCurrent(-1)
{
}
ContextManager::ContextManager(Core::MainWindow *mainWindow, QTabWidget *tabWidget)
: d(new ContextManagerPrivate(mainWindow, tabWidget))
{
QObject::connect(d->m_mainWindow->pluginManager(), SIGNAL(objectAdded(QObject *)),
this, SLOT(objectAdded(QObject *)));
QObject::connect(d->m_mainWindow->pluginManager(), SIGNAL(aboutToRemoveObject(QObject *)),
this, SLOT(aboutToRemoveObject(QObject *)));
QObject::connect(d->m_tabWidget, SIGNAL(currentChanged(int)), this, SLOT(currentTabChanged(int)));
}
ContextManager::~ContextManager()
{
delete d;
}
Core::IContext *ContextManager::currentContext() const
{
int currentIndex = d->m_tabWidget->currentIndex();
if (currentIndex < 0)
return 0;
return d->m_contexts.at(currentIndex);
}
Core::IContext *ContextManager::context(const QString &id) const
{
const int index = indexOf(id);
if (index >= 0)
return d->m_contexts.at(index);
return 0;
}
void ContextManager::activateContext(const QString &id)
{
const int index = indexOf(id);
if (index >= 0)
d->m_tabWidget->setCurrentIndex(index);
}
void ContextManager::objectAdded(QObject *obj)
{
IContext *context = qobject_cast<IContext *>(obj);
if (context)
addContextObject(context);
}
void ContextManager::aboutToRemoveObject(QObject *obj)
{
IContext *context = qobject_cast<IContext *>(obj);
if (context)
removeContextObject(context);
}
void ContextManager::addContextObject(IContext *context)
{
d->m_contexts.push_back(context);
d->m_mainWindow->addContextObject(context);
QWidget *tabWidget = new QWidget(d->m_tabWidget);
d->m_tabWidget->addTab(tabWidget, context->icon(), context->trName());
QGridLayout *gridLayout = new QGridLayout(tabWidget);
gridLayout->setObjectName(QString::fromUtf8("gridLayout_") + context->id());
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(context->widget(), 0, 0, 1, 1);
}
void ContextManager::removeContextObject(IContext *context)
{
d->m_mainWindow->removeContextObject(context);
const int index = indexOf(context->id());
QWidget *widget = d->m_tabWidget->widget(index);
d->m_tabWidget->removeTab(index);
d->m_contexts.remove(index);
delete widget;
}
void ContextManager::currentTabChanged(int index)
{
if (index >= 0)
{
IContext *context = d->m_contexts.at(index);
IContext *oldContext = 0;
if (d->m_oldCurrent >= 0)
oldContext = d->m_contexts.at(d->m_oldCurrent);
d->m_oldCurrent = index;
Q_EMIT currentContextChanged(context, oldContext);
}
}
int ContextManager::indexOf(const QString &id) const
{
for (int i = 0; i < d->m_contexts.count(); ++i)
{
if (d->m_contexts.at(i)->id() == id)
return i;
}
nlwarning(QString("Warning, no such context: %1").arg(id).toStdString().c_str());
return -1;
}
} /* namespace Core */

View file

@ -0,0 +1,70 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// 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 <http://www.gnu.org/licenses/>.
#ifndef CONTEXT_MANAGER_H
#define CONTEXT_MANAGER_H
// Project includes
#include "core_global.h"
// Qt includes
#include <QtCore/QObject>
QT_BEGIN_NAMESPACE
class QTabWidget;
QT_END_NAMESPACE
namespace Core
{
class IContext;
class MainWindow;
struct ContextManagerPrivate;
class CORE_EXPORT ContextManager : public QObject
{
Q_OBJECT
public:
explicit ContextManager(Core::MainWindow *mainWindow, QTabWidget *tabWidget);
virtual ~ContextManager();
Core::IContext *currentContext() const;
Core::IContext *context(const QString &id) const;
Q_SIGNALS:
// the default argument '=0' is important for connects without the oldContext argument.
void currentContextChanged(Core::IContext *context, Core::IContext *oldContext = 0);
public Q_SLOTS:
void activateContext(const QString &id);
private Q_SLOTS:
void objectAdded(QObject *obj);
void aboutToRemoveObject(QObject *obj);
void addContextObject(IContext *context);
void removeContextObject(IContext *context);
void currentTabChanged(int index);
private:
int indexOf(const QString &id) const;
ContextManagerPrivate *d;
};
} // namespace Core
#endif // CONTEXT_MANAGER_H

View file

@ -18,6 +18,7 @@
#include "core.h" #include "core.h"
#include "imenu_manager.h" #include "imenu_manager.h"
#include "context_manager.h"
#include "main_window.h" #include "main_window.h"
#include "../../extension_system/iplugin_manager.h" #include "../../extension_system/iplugin_manager.h"
@ -54,6 +55,11 @@ IMenuManager *CoreImpl::menuManager() const
return m_mainWindow->menuManager(); return m_mainWindow->menuManager();
} }
ContextManager *CoreImpl::contextManager() const
{
return m_mainWindow->contextManager();
}
QSettings *CoreImpl::settings() const QSettings *CoreImpl::settings() const
{ {
return m_mainWindow->settings(); return m_mainWindow->settings();

View file

@ -38,6 +38,7 @@ public:
QWidget *parent = 0); QWidget *parent = 0);
virtual IMenuManager *menuManager() const; virtual IMenuManager *menuManager() const;
virtual ContextManager *contextManager() const;
virtual QSettings *settings() const; virtual QSettings *settings() const;
virtual QMainWindow *mainWindow() const; virtual QMainWindow *mainWindow() const;

View file

@ -65,6 +65,11 @@ QString GeneralSettingsPage::trCategory() const
return tr(Constants::SETTINGS_TR_CATEGORY_GENERAL); return tr(Constants::SETTINGS_TR_CATEGORY_GENERAL);
} }
QIcon GeneralSettingsPage::categoryIcon() const
{
return QIcon();
}
void GeneralSettingsPage::applyGeneralSettings() void GeneralSettingsPage::applyGeneralSettings()
{ {
QSettings *settings = Core::ICore::instance()->settings(); QSettings *settings = Core::ICore::instance()->settings();

View file

@ -44,6 +44,7 @@ public:
QString trName() const; QString trName() const;
QString category() const; QString category() const;
QString trCategory() const; QString trCategory() const;
QIcon categoryIcon() const;
QWidget *createPage(QWidget *parent); QWidget *createPage(QWidget *parent);
void apply(); void apply();

View file

@ -28,6 +28,7 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QWidget; class QWidget;
class QUndoStack;
QT_END_NAMESPACE QT_END_NAMESPACE
namespace Core namespace Core
@ -56,6 +57,10 @@ public:
/// The widget will be destroyed by the widget hierarchy when the main window closes /// The widget will be destroyed by the widget hierarchy when the main window closes
virtual QWidget *widget() = 0; virtual QWidget *widget() = 0;
virtual QUndoStack *undoStack() = 0;
virtual void open() = 0;
}; };
} // namespace Core } // namespace Core

View file

@ -36,6 +36,7 @@ class IPluginManager;
namespace Core namespace Core
{ {
class IMenuManager; class IMenuManager;
class ContextManager;
class CORE_EXPORT ICore : public QObject class CORE_EXPORT ICore : public QObject
{ {
@ -52,6 +53,7 @@ public:
QWidget *parent = 0) = 0; QWidget *parent = 0) = 0;
virtual IMenuManager *menuManager() const = 0; virtual IMenuManager *menuManager() const = 0;
virtual ContextManager *contextManager() const = 0;
virtual QSettings *settings() const = 0; virtual QSettings *settings() const = 0;
virtual QMainWindow *mainWindow() const = 0; virtual QMainWindow *mainWindow() const = 0;

View file

@ -27,6 +27,7 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QWidget; class QWidget;
class QIcon;
QT_END_NAMESPACE QT_END_NAMESPACE
namespace Core namespace Core
@ -56,6 +57,8 @@ public:
/// trCategory() is the translated category /// trCategory() is the translated category
virtual QString trCategory() const = 0; virtual QString trCategory() const = 0;
virtual QIcon categoryIcon() const = 0;
/// createPage() is called to retrieve the widget to show in the preferences dialog /// createPage() is called to retrieve the widget to show in the preferences dialog
/// The widget will be destroyed by the widget hierarchy when the dialog closes /// The widget will be destroyed by the widget hierarchy when the dialog closes
virtual QWidget *createPage(QWidget *parent) = 0; virtual QWidget *createPage(QWidget *parent) = 0;

View file

@ -20,6 +20,7 @@
#include "icontext.h" #include "icontext.h"
#include "icore_listener.h" #include "icore_listener.h"
#include "menu_manager.h" #include "menu_manager.h"
#include "context_manager.h"
#include "core.h" #include "core.h"
#include "core_constants.h" #include "core_constants.h"
#include "settings_dialog.h" #include "settings_dialog.h"
@ -38,8 +39,10 @@ MainWindow::MainWindow(ExtensionSystem::IPluginManager *pluginManager, QWidget *
: QMainWindow(parent), : QMainWindow(parent),
m_pluginManager(0), m_pluginManager(0),
m_menuManager(0), m_menuManager(0),
m_contextManager(0),
m_coreImpl(0), m_coreImpl(0),
m_lastDir("."), m_lastDir("."),
m_undoGroup(0),
m_settings(0) m_settings(0)
{ {
QCoreApplication::setApplicationName(QLatin1String("ObjectViewerQt")); QCoreApplication::setApplicationName(QLatin1String("ObjectViewerQt"));
@ -59,12 +62,15 @@ MainWindow::MainWindow(ExtensionSystem::IPluginManager *pluginManager, QWidget *
m_tabWidget = new QTabWidget(this); m_tabWidget = new QTabWidget(this);
m_tabWidget->setTabPosition(QTabWidget::South); m_tabWidget->setTabPosition(QTabWidget::South);
m_tabWidget->setMovable(true); m_tabWidget->setMovable(false);
m_tabWidget->setDocumentMode(true); m_tabWidget->setDocumentMode(true);
setCentralWidget(m_tabWidget); setCentralWidget(m_tabWidget);
m_contextManager = new ContextManager(this, m_tabWidget);
setDockNestingEnabled(true); setDockNestingEnabled(true);
m_originalPalette = QApplication::palette(); m_originalPalette = QApplication::palette();
m_undoGroup = new QUndoGroup(this);
createDialogs(); createDialogs();
createActions(); createActions();
@ -92,15 +98,10 @@ bool MainWindow::initialize(QString *errorString)
void MainWindow::extensionsInitialized() void MainWindow::extensionsInitialized()
{ {
QList<IContext *> listContexts = m_pluginManager->getObjects<IContext>();
Q_FOREACH(IContext *context, listContexts)
{
addContextObject(context);
}
connect(m_pluginManager, SIGNAL(objectAdded(QObject *)), this, SLOT(checkObject(QObject *)));
readSettings(); readSettings();
connect(m_contextManager, SIGNAL(currentContextChanged(Core::IContext*)),
this, SLOT(updateContext(Core::IContext*)));
updateContext(m_contextManager->currentContext());
show(); show();
} }
@ -109,6 +110,11 @@ IMenuManager *MainWindow::menuManager() const
return m_menuManager; return m_menuManager;
} }
ContextManager *MainWindow::contextManager() const
{
return m_contextManager;
}
QSettings *MainWindow::settings() const QSettings *MainWindow::settings() const
{ {
return m_settings; return m_settings;
@ -119,15 +125,19 @@ ExtensionSystem::IPluginManager *MainWindow::pluginManager() const
return m_pluginManager; return m_pluginManager;
} }
void MainWindow::open() void MainWindow::addContextObject(IContext *context)
{ {
m_undoGroup->addStack(context->undoStack());
} }
void MainWindow::checkObject(QObject *obj) void MainWindow::removeContextObject(IContext *context)
{ {
IContext *context = qobject_cast<IContext *>(obj); m_undoGroup->removeStack(context->undoStack());
if (context) }
addContextObject(context);
void MainWindow::open()
{
m_contextManager->currentContext()->open();
} }
bool MainWindow::showOptionsDialog(const QString &group, bool MainWindow::showOptionsDialog(const QString &group,
@ -151,6 +161,11 @@ void MainWindow::about()
"<p> Ryzom Core team <p>Compiled on %1 %2").arg(__DATE__).arg(__TIME__)); "<p> Ryzom Core team <p>Compiled on %1 %2").arg(__DATE__).arg(__TIME__));
} }
void MainWindow::updateContext(Core::IContext *context)
{
m_undoGroup->setActiveStack(context->undoStack());
}
void MainWindow::closeEvent(QCloseEvent *event) void MainWindow::closeEvent(QCloseEvent *event)
{ {
QList<ICoreListener *> listeners = m_pluginManager->getObjects<ICoreListener>(); QList<ICoreListener *> listeners = m_pluginManager->getObjects<ICoreListener>();
@ -168,16 +183,6 @@ void MainWindow::closeEvent(QCloseEvent *event)
event->accept(); event->accept();
} }
void MainWindow::addContextObject(IContext *context)
{
QWidget *tabWidget = new QWidget(m_tabWidget);
m_tabWidget->addTab(tabWidget, context->icon(), context->trName());
QGridLayout *gridLayout = new QGridLayout(tabWidget);
gridLayout->setObjectName(QString::fromUtf8("gridLayout_") + context->id());
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(context->widget(), 0, 0, 1, 1);
}
void MainWindow::createActions() void MainWindow::createActions()
{ {
m_openAction = new QAction(tr("&Open..."), this); m_openAction = new QAction(tr("&Open..."), this);
@ -228,11 +233,14 @@ void MainWindow::createMenus()
{ {
m_fileMenu = menuBar()->addMenu(tr("&File")); m_fileMenu = menuBar()->addMenu(tr("&File"));
menuManager()->registerMenu(m_fileMenu, Constants::M_FILE); menuManager()->registerMenu(m_fileMenu, Constants::M_FILE);
// m_fileMenu->addAction(m_openAction); m_fileMenu->addAction(m_openAction);
m_fileMenu->addSeparator(); m_fileMenu->addSeparator();
m_fileMenu->addAction(m_exitAction); m_fileMenu->addAction(m_exitAction);
m_editMenu = menuBar()->addMenu(tr("&Edit")); m_editMenu = menuBar()->addMenu(tr("&Edit"));
m_editMenu->addAction(m_undoGroup->createUndoAction(this));
m_editMenu->addAction(m_undoGroup->createRedoAction(this));
m_editMenu->addSeparator();
menuManager()->registerMenu(m_editMenu, Constants::M_EDIT); menuManager()->registerMenu(m_editMenu, Constants::M_EDIT);
m_viewMenu = menuBar()->addMenu(tr("&View")); m_viewMenu = menuBar()->addMenu(tr("&View"));

View file

@ -26,6 +26,7 @@
// Qt includes // Qt includes
#include <QtGui/QMainWindow> #include <QtGui/QMainWindow>
#include <QtGui/QUndoGroup>
#include <QtCore/QSettings> #include <QtCore/QSettings>
namespace Core namespace Core
@ -35,6 +36,7 @@ class CorePlugin;
class IContext; class IContext;
class IMenuManager; class IMenuManager;
class MenuManager; class MenuManager;
class ContextManager;
class CoreImpl; class CoreImpl;
class MainWindow : public QMainWindow class MainWindow : public QMainWindow
@ -49,10 +51,14 @@ public:
void extensionsInitialized(); void extensionsInitialized();
IMenuManager *menuManager() const; IMenuManager *menuManager() const;
ContextManager *contextManager() const;
QSettings *settings() const; QSettings *settings() const;
ExtensionSystem::IPluginManager *pluginManager() const; ExtensionSystem::IPluginManager *pluginManager() const;
void addContextObject(IContext *context);
void removeContextObject(IContext *context);
public Q_SLOTS: public Q_SLOTS:
bool showOptionsDialog(const QString &group = QString(), bool showOptionsDialog(const QString &group = QString(),
const QString &page = QString(), const QString &page = QString(),
@ -60,15 +66,13 @@ public Q_SLOTS:
private Q_SLOTS: private Q_SLOTS:
void open(); void open();
void checkObject(QObject *obj);
void about(); void about();
void updateContext(Core::IContext *context);
protected: protected:
virtual void closeEvent(QCloseEvent *event); virtual void closeEvent(QCloseEvent *event);
private: private:
void addContextObject(IContext *appPage);
void createActions(); void createActions();
void createMenus(); void createMenus();
void createStatusBar(); void createStatusBar();
@ -80,11 +84,13 @@ private:
ExtensionSystem::IPluginManager *m_pluginManager; ExtensionSystem::IPluginManager *m_pluginManager;
ExtensionSystem::CPluginView *m_pluginView; ExtensionSystem::CPluginView *m_pluginView;
MenuManager *m_menuManager; MenuManager *m_menuManager;
ContextManager *m_contextManager;
CoreImpl *m_coreImpl; CoreImpl *m_coreImpl;
QPalette m_originalPalette; QPalette m_originalPalette;
QString m_lastDir; QString m_lastDir;
QUndoGroup *m_undoGroup;
QSettings *m_settings; QSettings *m_settings;
QTimer *m_mainTimer; QTimer *m_mainTimer;

View file

@ -70,6 +70,11 @@ QString CSearchPathsSettingsPage::trCategory() const
return tr(Constants::SETTINGS_TR_CATEGORY_GENERAL); return tr(Constants::SETTINGS_TR_CATEGORY_GENERAL);
} }
QIcon CSearchPathsSettingsPage::categoryIcon() const
{
return QIcon();
}
QWidget *CSearchPathsSettingsPage::createPage(QWidget *parent) QWidget *CSearchPathsSettingsPage::createPage(QWidget *parent)
{ {
m_page = new QWidget(parent); m_page = new QWidget(parent);

View file

@ -44,6 +44,7 @@ public:
QString trName() const; QString trName() const;
QString category() const; QString category() const;
QString trCategory() const; QString trCategory() const;
QIcon categoryIcon() const;
QWidget *createPage(QWidget *parent); QWidget *createPage(QWidget *parent);
void apply(); void apply();

View file

@ -53,6 +53,11 @@ QString CExampleSettingsPage::trCategory() const
return tr("General"); return tr("General");
} }
QIcon CExampleSettingsPage::categoryIcon() const
{
return QIcon();
}
QWidget *CExampleSettingsPage::createPage(QWidget *parent) QWidget *CExampleSettingsPage::createPage(QWidget *parent)
{ {
_currentPage = new QWidget(parent); _currentPage = new QWidget(parent);

View file

@ -43,6 +43,7 @@ public:
virtual QString trName() const; virtual QString trName() const;
virtual QString category() const; virtual QString category() const;
virtual QString trCategory() const; virtual QString trCategory() const;
QIcon categoryIcon() const;
virtual QWidget *createPage(QWidget *parent); virtual QWidget *createPage(QWidget *parent);
virtual void apply(); virtual void apply();

View file

@ -86,6 +86,15 @@ public:
return m_simpleViewer; return m_simpleViewer;
} }
virtual QUndoStack *undoStack()
{
return m_simpleViewer->m_undoStack;
}
virtual void open()
{
}
CSimpleViewer *m_simpleViewer; CSimpleViewer *m_simpleViewer;
}; };

View file

@ -37,6 +37,8 @@ CSimpleViewer::CSimpleViewer(QWidget *parent)
gridLayout->setContentsMargins(0, 0, 0, 0); gridLayout->setContentsMargins(0, 0, 0, 0);
NLQT::QNLWidget *_nelWidget = new NLQT::QNLWidget(this); NLQT::QNLWidget *_nelWidget = new NLQT::QNLWidget(this);
gridLayout->addWidget(_nelWidget, 0, 0, 1, 1); gridLayout->addWidget(_nelWidget, 0, 0, 1, 1);
m_undoStack = new QUndoStack(this);
} }
bool CCoreListener::closeMainWindow() const bool CCoreListener::closeMainWindow() const

View file

@ -25,7 +25,7 @@
// Qt includes // Qt includes
#include <QtCore/QObject> #include <QtCore/QObject>
#include <QtGui/QUndoStack>
class QWidget; class QWidget;
namespace Plugin namespace Plugin
@ -37,6 +37,8 @@ class CSimpleViewer : public QWidget
public: public:
CSimpleViewer(QWidget *parent = 0); CSimpleViewer(QWidget *parent = 0);
virtual ~CSimpleViewer() {} virtual ~CSimpleViewer() {}
QUndoStack *m_undoStack;
}; };
class CCoreListener : public Core::ICoreListener class CCoreListener : public Core::ICoreListener

View file

@ -0,0 +1,48 @@
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
${LIBXML2_INCLUDE_DIR}
${QT_INCLUDES})
FILE(GLOB SRC *.cpp *.h)
SET(OVQT_EXT_SYS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin.h
${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_manager.h
${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_spec.h)
SET(OVQT_PLUGIN_LANDSCAPE_EDITOR_HDR landscape_editor_plugin.h
landscape_editor_window.h
)
SET(OVQT_PLUGIN_LANDSCAPE_EDITOR_UIS landscape_editor_window.ui
)
SET(OVQT_PLUGIN_LANDSCAPE_EDITOR_RCS landscape_editor.qrc)
SET(QT_USE_QTGUI TRUE)
SET(QT_USE_QTOPENGL TRUE)
QT4_ADD_RESOURCES(OVQT_PLUGIN_LANDSCAPE_EDITOR_RC_SRCS ${OVQT_PLUGIN_LANDSCAPE_EDITOR_RCS})
QT4_WRAP_CPP(OVQT_PLUGIN_LANDSCAPE_EDITOR_MOC_SRC ${OVQT_PLUGIN_LANDSCAPE_EDITOR_HDR})
QT4_WRAP_UI(OVQT_PLUGIN_LANDSCAPE_EDITOR_UI_HDRS ${OVQT_PLUGIN_LANDSCAPE_EDITOR_UIS})
SOURCE_GROUP(QtResources FILES ${OVQT_PLUGIN_LANDSCAPE_EDITOR_UIS})
SOURCE_GROUP(QtGeneratedUiHdr FILES ${OVQT_PLUGIN_LANDSCAPE_EDITOR_UI_HDRS})
SOURCE_GROUP(QtGeneratedMocQrcSrc FILES ${OVQT_PLUGIN_LANDSCAPE_EDITOR_MOC_SRC} OVQT_PLUGIN_LANDSCAPE_EDITOR_RC_SRCS)
SOURCE_GROUP("Landscape Editor Plugin" FILES ${SRC})
SOURCE_GROUP("OVQT Extension System" FILES ${OVQT_EXT_SYS_SRC})
ADD_LIBRARY(ovqt_plugin_landscape_editor MODULE ${SRC}
${OVQT_PLUGIN_LANDSCAPE_EDITOR_MOC_SRC}
${OVQT_EXT_SYS_SRC}
${OVQT_PLUGIN_LANDSCAPE_EDITOR_UI_HDRS}
${OVQT_PLUGIN_LANDSCAPE_EDITOR_RC_SRCS})
TARGET_LINK_LIBRARIES(ovqt_plugin_landscape_editor ovqt_plugin_core nelmisc nel3d ${QT_LIBRARIES} ${QT_QTOPENGL_LIBRARY})
NL_DEFAULT_PROPS(ovqt_plugin_landscape_editor "NeL, Tools, 3D: Object Viewer Qt Plugin: Landscape Editor")
NL_ADD_RUNTIME_FLAGS(ovqt_plugin_landscape_editor)
NL_ADD_LIB_SUFFIX(ovqt_plugin_landscape_editor)
ADD_DEFINITIONS(-DLANDSCAPE_EDITOR_LIBRARY ${LIBXML2_DEFINITIONS} -DQT_PLUGIN -DQT_SHARED ${QT_DEFINITIONS})
INSTALL(TARGETS ovqt_plugin_landscape_editor LIBRARY DESTINATION lib RUNTIME DESTINATION bin ARCHIVE DESTINATION lib COMPONENT tools3d)

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

View file

@ -0,0 +1,9 @@
<RCC>
<qresource prefix="/">
<file>icons/ic_nel_landscape_item.png</file>
<file>icons/ic_nel_landscape_settings.png</file>
<file>icons/ic_nel_world_editor.png</file>
<file>icons/ic_nel_zone.png</file>
<file>icons/ic_nel_zonel.png</file>
</qresource>
</RCC>

View file

@ -0,0 +1,37 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// 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 <http://www.gnu.org/licenses/>.
#ifndef LANDSCAPE_EDITOR_CONSTANTS_H
#define LANDSCAPE_EDITOR_CONSTANTS_H
namespace LandscapeEditor
{
namespace Constants
{
const char * const LANDSCAPE_EDITOR_PLUGIN = "LandscapeEditor";
//settings
const char * const LANDSCAPE_EDITOR_SECTION = "LandscapeEditor";
//resources
const char * const ICON_LANDSCAPE_ITEM = ":/icons/ic_nel_landscape_item.png";
} // namespace Constants
} // namespace LandscapeEditor
#endif // LANDSCAPE_EDITOR_CONSTANTS_H

View file

@ -0,0 +1,30 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
// Parts by Nokia Corporation (qt-info@nokia.com) Copyright (C) 2009.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef LANDSCAPE_EDITOR_GLOBAL_H
#define LANDSCAPE_EDITOR_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(LANDSCAPE_EDITOR_LIBRARY)
# define LANDSCAPE_EDITOR_EXPORT Q_DECL_EXPORT
#else
# define LANDSCAPE_EDITOR_EXPORT Q_DECL_IMPORT
#endif
#endif // LANDSCAPE_EDITOR_GLOBAL_H

View file

@ -0,0 +1,128 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// 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 <http://www.gnu.org/licenses/>.
// Project includes
#include "landscape_editor_plugin.h"
#include "landscape_editor_window.h"
#include "../core/icore.h"
#include "../core/core_constants.h"
// NeL includes
#include "nel/misc/debug.h"
// Qt includes
#include <QtCore/QObject>
namespace LandscapeEditor
{
LandscapeEditorPlugin::~LandscapeEditorPlugin()
{
Q_FOREACH(QObject *obj, m_autoReleaseObjects)
{
m_plugMan->removeObject(obj);
}
qDeleteAll(m_autoReleaseObjects);
m_autoReleaseObjects.clear();
}
bool LandscapeEditorPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString)
{
Q_UNUSED(errorString);
m_plugMan = pluginManager;
addAutoReleasedObject(new LandscapeEditorContext(this));
return true;
}
void LandscapeEditorPlugin::extensionsInitialized()
{
}
void LandscapeEditorPlugin::shutdown()
{
}
void LandscapeEditorPlugin::setNelContext(NLMISC::INelContext *nelContext)
{
#ifdef NL_OS_WINDOWS
// Ensure that a context doesn't exist yet.
// This only applies to platforms without PIC, e.g. Windows.
nlassert(!NLMISC::INelContext::isContextInitialised());
#endif // NL_OS_WINDOWS
m_libContext = new NLMISC::CLibraryContext(*nelContext);
}
QString LandscapeEditorPlugin::name() const
{
return tr("LandscapeEditor");
}
QString LandscapeEditorPlugin::version() const
{
return "0.0.1";
}
QString LandscapeEditorPlugin::vendor() const
{
return "GSoC2011_dnk-88";
}
QString LandscapeEditorPlugin::description() const
{
return "Landscape editor ovqt plugin.";
}
QStringList LandscapeEditorPlugin::dependencies() const
{
QStringList list;
list.append(Core::Constants::OVQT_CORE_PLUGIN);
return list;
}
void LandscapeEditorPlugin::addAutoReleasedObject(QObject *obj)
{
m_plugMan->addObject(obj);
m_autoReleaseObjects.prepend(obj);
}
LandscapeEditorContext::LandscapeEditorContext(QObject *parent)
: IContext(parent),
m_landEditorWindow(0)
{
m_landEditorWindow = new LandscapeEditorWindow();
}
QUndoStack *LandscapeEditorContext::undoStack()
{
return m_landEditorWindow->undoStack();
}
void LandscapeEditorContext::open()
{
m_landEditorWindow->open();
}
QWidget *LandscapeEditorContext::widget()
{
return m_landEditorWindow;
}
}
Q_EXPORT_PLUGIN(LandscapeEditor::LandscapeEditorPlugin)

View file

@ -0,0 +1,108 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// 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 <http://www.gnu.org/licenses/>.
#ifndef LANDSCAPE_EDITOR_PLUGIN_H
#define LANDSCAPE_EDITOR_PLUGIN_H
// Project includes
#include "landscape_editor_constants.h"
#include "../../extension_system/iplugin.h"
#include "../core/icontext.h"
// NeL includes
#include "nel/misc/app_context.h"
// Qt includes
#include <QtCore/QObject>
#include <QtGui/QIcon>
namespace NLMISC
{
class CLibraryContext;
}
namespace ExtensionSystem
{
class IPluginSpec;
}
namespace LandscapeEditor
{
class LandscapeEditorWindow;
class LandscapeEditorPlugin : public QObject, public ExtensionSystem::IPlugin
{
Q_OBJECT
Q_INTERFACES(ExtensionSystem::IPlugin)
public:
virtual ~LandscapeEditorPlugin();
bool initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString);
void extensionsInitialized();
void shutdown();
void setNelContext(NLMISC::INelContext *nelContext);
QString name() const;
QString version() const;
QString vendor() const;
QString description() const;
QStringList dependencies() const;
void addAutoReleasedObject(QObject *obj);
protected:
NLMISC::CLibraryContext *m_libContext;
private:
ExtensionSystem::IPluginManager *m_plugMan;
QList<QObject *> m_autoReleaseObjects;
};
class LandscapeEditorContext: public Core::IContext
{
Q_OBJECT
public:
LandscapeEditorContext(QObject *parent = 0);
virtual ~LandscapeEditorContext() {}
virtual QString id() const
{
return QLatin1String("LandscapeEditorContext");
}
virtual QString trName() const
{
return tr("Landscape Editor");
}
virtual QIcon icon() const
{
return QIcon();
}
virtual void open();
virtual QUndoStack *undoStack();
virtual QWidget *widget();
LandscapeEditorWindow *m_landEditorWindow;
};
} // namespace LandscapeEditor
#endif // LANDSCAPE_EDITOR_PLUGIN_H

View file

@ -0,0 +1,93 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// 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 <http://www.gnu.org/licenses/>.
// Project includes
#include "landscape_editor_window.h"
#include "landscape_editor_constants.h"
#include "../core/icore.h"
#include "../core/imenu_manager.h"
#include "../core/core_constants.h"
// NeL includes
#include <nel/misc/debug.h>
// Qt includes
#include <QtCore/QSettings>
#include <QtGui/QFileDialog>
namespace LandscapeEditor
{
QString _lastDir;
LandscapeEditorWindow::LandscapeEditorWindow(QWidget *parent)
: QMainWindow(parent)
{
m_ui.setupUi(this);
m_undoStack = new QUndoStack(this);
createMenus();
readSettings();
}
LandscapeEditorWindow::~LandscapeEditorWindow()
{
writeSettings();
}
QUndoStack *LandscapeEditorWindow::undoStack() const
{
return m_undoStack;
}
void LandscapeEditorWindow::open()
{
QStringList fileNames = QFileDialog::getOpenFileNames(this,
tr("Open NeL Ligo land file"), _lastDir,
tr("All NeL Ligo land files (*.land)"));
setCursor(Qt::WaitCursor);
if (!fileNames.isEmpty())
{
QStringList list = fileNames;
_lastDir = QFileInfo(list.front()).absolutePath();
}
setCursor(Qt::ArrowCursor);
}
void LandscapeEditorWindow::createMenus()
{
Core::IMenuManager *menuManager = Core::ICore::instance()->menuManager();
}
void LandscapeEditorWindow::readSettings()
{
QSettings *settings = Core::ICore::instance()->settings();
settings->beginGroup(Constants::LANDSCAPE_EDITOR_SECTION);
settings->endGroup();
}
void LandscapeEditorWindow::writeSettings()
{
QSettings *settings = Core::ICore::instance()->settings();
settings->beginGroup(Constants::LANDSCAPE_EDITOR_SECTION);
settings->endGroup();
settings->sync();
}
} /* namespace LandscapeEditor */

View file

@ -0,0 +1,56 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
// Copyright (C) 2011 Dzmitry Kamiahin <dnk-88@tut.by>
//
// 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 <http://www.gnu.org/licenses/>.
#ifndef LANDSCAPE_EDITOR_WINDOW_H
#define LANDSCAPE_EDITOR_WINDOW_H
// Project includes
#include "ui_landscape_editor_window.h"
// Qt includes
#include <QtGui/QUndoStack>
namespace LandscapeEditor
{
class LandscapeEditorWindow: public QMainWindow
{
Q_OBJECT
public:
LandscapeEditorWindow(QWidget *parent = 0);
~LandscapeEditorWindow();
QUndoStack *undoStack() const;
Q_SIGNALS:
public Q_SLOTS:
void open();
private Q_SLOTS:
private:
void createMenus();
void readSettings();
void writeSettings();
QUndoStack *m_undoStack;
Ui::LandscapeEditorWindow m_ui;
}; /* class LandscapeEditorWindow */
} /* namespace LandscapeEditor */
#endif // LANDSCAPE_EDITOR_WINDOW_H

View file

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>LandscapeEditorWindow</class>
<widget class="QMainWindow" name="LandscapeEditorWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="windowIcon">
<iconset resource="landscape_editor.qrc">
<normaloff>:/icons/ic_nel_landscape_item.png</normaloff>:/icons/ic_nel_landscape_item.png</iconset>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QGraphicsView" name="graphicsView"/>
</item>
</layout>
</widget>
<widget class="QToolBar" name="toolBar">
<property name="windowTitle">
<string>toolBar</string>
</property>
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
</widget>
<resources>
<include location="landscape_editor.qrc"/>
</resources>
<connections/>
</ui>

View file

@ -58,6 +58,11 @@ QString GraphicsSettingsPage::trCategory() const
return tr("Object Viewer"); return tr("Object Viewer");
} }
QIcon GraphicsSettingsPage::categoryIcon() const
{
return QIcon();
}
QWidget *GraphicsSettingsPage::createPage(QWidget *parent) QWidget *GraphicsSettingsPage::createPage(QWidget *parent)
{ {
m_page = new QWidget(parent); m_page = new QWidget(parent);

View file

@ -42,6 +42,7 @@ public:
virtual QString trName() const; virtual QString trName() const;
virtual QString category() const; virtual QString category() const;
virtual QString trCategory() const; virtual QString trCategory() const;
QIcon categoryIcon() const;
virtual QWidget *createPage(QWidget *parent); virtual QWidget *createPage(QWidget *parent);
virtual void apply(); virtual void apply();

View file

@ -89,6 +89,7 @@ CMainWindow::CMainWindow(QWidget *parent)
_isSoundInitialized = true; _isSoundInitialized = true;
} }
_undoStack = new QUndoStack(this);
_SkeletonTreeModel = new CSkeletonTreeModel(this); _SkeletonTreeModel = new CSkeletonTreeModel(this);
createDialogs(); createDialogs();
@ -272,8 +273,8 @@ void CMainWindow::createMenus()
// add actions in file menu // add actions in file menu
QMenu *fileMenu = menuManager->menu(Core::Constants::M_FILE); QMenu *fileMenu = menuManager->menu(Core::Constants::M_FILE);
QAction *exitAction = menuManager->action(Core::Constants::EXIT); QAction *exitAction = menuManager->action(Core::Constants::EXIT);
fileMenu->insertAction(exitAction, _openAction); //fileMenu->insertAction(exitAction, _openAction);
fileMenu->insertSeparator(exitAction); //fileMenu->insertSeparator(exitAction);
// register actions for view menu // register actions for view menu
menuManager->registerAction(_setBackColorAction, "ObjectViewer.View.SetBackgroundColor"); menuManager->registerAction(_setBackColorAction, "ObjectViewer.View.SetBackgroundColor");

View file

@ -25,6 +25,7 @@
// Qt includes // Qt includes
#include <QtGui/QMainWindow> #include <QtGui/QMainWindow>
#include <QtGui/QLabel> #include <QtGui/QLabel>
#include <QtGui/QUndoStack>
// NeL includes // NeL includes
#include <nel/misc/config_file.h> #include <nel/misc/config_file.h>
@ -72,10 +73,17 @@ public:
return _SkeletonTreeModel; return _SkeletonTreeModel;
} }
private Q_SLOTS: QUndoStack *getUndoStack() const
{
return _undoStack;
}
public Q_SLOTS:
void open(); void open();
void resetScene(); void resetScene();
void reloadTextures(); void reloadTextures();
private Q_SLOTS:
void updateStatusBar(); void updateStatusBar();
void updateRender(); void updateRender();
void setInterval(int value); void setInterval(int value);
@ -130,6 +138,7 @@ private:
QAction *_resetSceneAction; QAction *_resetSceneAction;
QAction *_saveScreenshotAction; QAction *_saveScreenshotAction;
QLabel *_statusInfo; QLabel *_statusInfo;
QUndoStack *_undoStack;
float _fps; float _fps;
uint _numTri; uint _numTri;

View file

@ -37,7 +37,7 @@ void Modules::init()
void Modules::release() void Modules::release()
{ {
delete _mainWindow; // delete _mainWindow;
_mainWindow = NULL; _mainWindow = NULL;
delete _particleEditor; delete _particleEditor;
_particleEditor = NULL; _particleEditor = NULL;

View file

@ -22,7 +22,7 @@ ObjectViewerPlugin::~ObjectViewerPlugin()
} }
qDeleteAll(_autoReleaseObjects); qDeleteAll(_autoReleaseObjects);
_autoReleaseObjects.clear(); _autoReleaseObjects.clear();
//Modules::release(); Modules::release();
} }
bool ObjectViewerPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString) bool ObjectViewerPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QString *errorString)
@ -43,7 +43,7 @@ void ObjectViewerPlugin::extensionsInitialized()
void ObjectViewerPlugin::shutdown() void ObjectViewerPlugin::shutdown()
{ {
Modules::release(); // Modules::release();
} }
void ObjectViewerPlugin::setNelContext(NLMISC::INelContext *nelContext) void ObjectViewerPlugin::setNelContext(NLMISC::INelContext *nelContext)
@ -89,6 +89,16 @@ void ObjectViewerPlugin::addAutoReleasedObject(QObject *obj)
_autoReleaseObjects.prepend(obj); _autoReleaseObjects.prepend(obj);
} }
void CObjectViewerContext::open()
{
Modules::mainWin().open();
}
QUndoStack *CObjectViewerContext::undoStack()
{
return Modules::mainWin().getUndoStack();
}
QWidget *CObjectViewerContext::widget() QWidget *CObjectViewerContext::widget()
{ {
return &Modules::mainWin(); return &Modules::mainWin();

View file

@ -66,14 +66,21 @@ public:
{ {
return QLatin1String("ObjectViewer"); return QLatin1String("ObjectViewer");
} }
virtual QString trName() const virtual QString trName() const
{ {
return tr("Object Viewer"); return tr("Object Viewer");
} }
virtual QIcon icon() const virtual QIcon icon() const
{ {
return QIcon(); return QIcon();
} }
virtual QUndoStack *undoStack();
virtual void open();
virtual QWidget *widget(); virtual QWidget *widget();
}; };

View file

@ -56,6 +56,11 @@ QString SoundSettingsPage::trCategory() const
return tr("Object Viewer"); return tr("Object Viewer");
} }
QIcon SoundSettingsPage::categoryIcon() const
{
return QIcon();
}
QWidget *SoundSettingsPage::createPage(QWidget *parent) QWidget *SoundSettingsPage::createPage(QWidget *parent)
{ {
m_page = new QWidget(parent); m_page = new QWidget(parent);

View file

@ -44,6 +44,7 @@ public:
virtual QString trName() const; virtual QString trName() const;
virtual QString category() const; virtual QString category() const;
virtual QString trCategory() const; virtual QString trCategory() const;
QIcon categoryIcon() const;
virtual QWidget *createPage(QWidget *parent); virtual QWidget *createPage(QWidget *parent);
virtual void apply(); virtual void apply();

View file

@ -59,6 +59,11 @@ QString VegetableSettingsPage::trCategory() const
return tr("Object Viewer"); return tr("Object Viewer");
} }
QIcon VegetableSettingsPage::categoryIcon() const
{
return QIcon();
}
QWidget *VegetableSettingsPage::createPage(QWidget *parent) QWidget *VegetableSettingsPage::createPage(QWidget *parent)
{ {
m_page = new QWidget(parent); m_page = new QWidget(parent);

View file

@ -43,6 +43,7 @@ public:
virtual QString trName() const; virtual QString trName() const;
virtual QString category() const; virtual QString category() const;
virtual QString trCategory() const; virtual QString trCategory() const;
QIcon categoryIcon() const;
virtual QWidget *createPage(QWidget *parent); virtual QWidget *createPage(QWidget *parent);
virtual void apply(); virtual void apply();