Changed: #1206 Added menu manager. Update core and example plugin.

This commit is contained in:
dnk-88 2011-02-18 13:45:34 +02:00
parent 04a974c818
commit f6ff39bcbd
21 changed files with 405 additions and 94 deletions

View file

@ -20,6 +20,8 @@
#ifndef IPLUGINMANAGER_H
#define IPLUGINMANAGER_H
#include "plugin_spec.h"
#include <QtCore/QList>
#include <QtCore/QObject>
#include <QtCore/QStringList>
@ -59,6 +61,68 @@ public:
virtual void setSettings(QSettings *settings) = 0;
virtual QSettings *settings() const = 0;
// Auxiliary operations
template <typename T>
QList<T *> getObjects() const
{
QList<QObject *> all = allObjects();
QList<T *> objects;
Q_FOREACH(QObject *obj, all)
{
T *tObj = qobject_cast<T *>(obj);
if (tObj)
objects.append(tObj);
}
return objects;
}
template <typename T>
T *getObject() const
{
QList<QObject *> all = allObjects();
T *result = 0;
Q_FOREACH(QObject *obj, all)
{
T *tObj = qobject_cast<T *>(obj);
if (tObj)
{
result = tObj;
break;
}
}
return result;
}
QObject *objectByName(const QString &name) const
{
QList<QObject *> all = allObjects();
QObject *result = 0;
Q_FOREACH (QObject *qobj, all)
{
if (qobj->objectName() == name)
{
result = qobj;
break;
}
}
return result;
}
ExtensionSystem::IPluginSpec *pluginByName(const QString &name) const
{
QList<ExtensionSystem::IPluginSpec *> all = plugins();
ExtensionSystem::IPluginSpec *result = 0;
Q_FOREACH (ExtensionSystem::IPluginSpec *spec, all)
{
if (spec->name() == name)
{
result = spec;
break;
}
}
return result;
}
Q_SIGNALS:
void objectAdded(QObject *obj);
void aboutToRemoveObject(QObject *obj);

View file

@ -23,8 +23,6 @@
#include <nel/misc/debug.h>
#include "plugin_spec.h"
namespace ExtensionSystem
{

View file

@ -9,8 +9,12 @@ SET(OVQT_EXT_SYS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin.
${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_spec.h)
SET(OVQT_CORE_PLUGIN_HDR
imenu_manager.h
icore_listener.h
ioptions_page.h
core_plugin.h
main_window.h
menu_manager.h
settings_dialog.h
search_paths_settings_page.h
plugin_view_dialog.h)
@ -34,7 +38,7 @@ SOURCE_GROUP(QtGeneratedMocSrc FILES ${OVQT_CORE_PLUGIN_MOC_SRC})
SOURCE_GROUP("Core Plugin" FILES ${SRC})
SOURCE_GROUP("OVQT Extension System" FILES ${OVQT_EXT_SYS_SRC})
ADD_LIBRARY(ovqt_plugin_core MODULE ${SRC} ${OVQT_CORE_PLUGIN_MOC_SRC} ${OVQT_EXT_SYS_SRC} ${OVQT_CORE_PLUGIN_RC_SRCS} ${OVQT_CORE_PLUGIN_UI_HDRS})
ADD_LIBRARY(ovqt_plugin_core SHARED ${SRC} ${OVQT_CORE_PLUGIN_MOC_SRC} ${OVQT_EXT_SYS_SRC} ${OVQT_CORE_PLUGIN_RC_SRCS} ${OVQT_CORE_PLUGIN_UI_HDRS})
TARGET_LINK_LIBRARIES(ovqt_plugin_core nelmisc ${QT_LIBRARIES})
@ -42,6 +46,6 @@ NL_DEFAULT_PROPS(ovqt_plugin_core "NeL, Tools, 3D: Object Viewer Qt Plugin: Core
NL_ADD_RUNTIME_FLAGS(ovqt_plugin_core)
NL_ADD_LIB_SUFFIX(ovqt_plugin_core)
ADD_DEFINITIONS(${LIBXML2_DEFINITIONS} -DQT_PLUGIN -DQT_SHARED ${QT_DEFINITIONS})
ADD_DEFINITIONS(-DCORE_LIBRARY ${LIBXML2_DEFINITIONS} -DQT_PLUGIN -DQT_SHARED ${QT_DEFINITIONS})
INSTALL(TARGETS ovqt_plugin_core LIBRARY DESTINATION lib RUNTIME DESTINATION bin ARCHIVE DESTINATION lib COMPONENT tools3d)

View file

@ -0,0 +1,30 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
// 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 CORE_GLOBAL_H
#define CORE_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(CORE_LIBRARY)
# define CORE_EXPORT Q_DECL_EXPORT
#else
# define CORE_EXPORT Q_DECL_IMPORT
#endif
#endif // CORE_GLOBAL_H

View file

@ -56,21 +56,13 @@ bool CorePlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QStr
_plugMan = pluginManager;
_oldOVQT = false;
addAutoReleasedObject(new CSearchPathsSettingsPage(this));
return true;
}
void CorePlugin::extensionsInitialized()
{
_pluginView = new ExtensionSystem::CPluginView(_plugMan);
// for old ovqt
QMainWindow *wnd = qobject_cast<QMainWindow *>(objectByName("CMainWindow"));
QMainWindow *wnd = qobject_cast<QMainWindow *>(_plugMan->objectByName("CMainWindow"));
if (wnd)
{
_pluginView = new ExtensionSystem::CPluginView(_plugMan);
QMenu *toolsMenu = qobject_cast<QMenu *>(objectByName("ovqt.Menu.Tools"));
QMenu *helpMenu = qobject_cast<QMenu *>(objectByName("ovqt.Menu.Help"));
QMenu *toolsMenu = qobject_cast<QMenu *>(_plugMan->objectByName("ovqt.Menu.Tools"));
QMenu *helpMenu = qobject_cast<QMenu *>(_plugMan->objectByName("ovqt.Menu.Help"));
nlassert(toolsMenu);
nlassert(helpMenu);
@ -103,6 +95,14 @@ void CorePlugin::extensionsInitialized()
}
_mainWindow->show();
}
addAutoReleasedObject(new CSearchPathsSettingsPage(this));
return true;
}
void CorePlugin::extensionsInitialized()
{
_pluginView = new ExtensionSystem::CPluginView(_plugMan);
}
void CorePlugin::shutdown()
@ -162,20 +162,4 @@ void CorePlugin::addAutoReleasedObject(QObject *obj)
_autoReleaseObjects.prepend(obj);
}
QObject* CorePlugin::objectByName(const QString &name) const
{
Q_FOREACH (QObject *qobj, _plugMan->allObjects())
if (qobj->objectName() == name)
return qobj;
return 0;
}
ExtensionSystem::IPluginSpec *CorePlugin::pluginByName(const QString &name) const
{
Q_FOREACH (ExtensionSystem::IPluginSpec *spec, _plugMan->plugins())
if (spec->name() == name)
return spec;
return 0;
}
Q_EXPORT_PLUGIN(CorePlugin)

View file

@ -61,44 +61,11 @@ public:
void addAutoReleasedObject(QObject *obj);
QObject *objectByName(const QString &name) const;
ExtensionSystem::IPluginSpec *pluginByName(const QString &name) const;
ExtensionSystem::IPluginManager *pluginManager() const
{
return _plugMan;
}
template <typename T>
QList<T *> getObjects() const
{
QList<QObject *> all = _plugMan->allObjects();
QList<T *> objects;
Q_FOREACH(QObject *obj, all)
{
T *tObj = qobject_cast<T *>(obj);
if (tObj)
objects.append(tObj);
}
return objects;
}
template <typename T>
T *getObject() const
{
QList<QObject *> all = _plugMan->allObjects();
T *result = 0;
Q_FOREACH(QObject *obj, all)
{
T *tObj = qobject_cast<T *>(obj);
if (tObj)
{
result = tObj;
break;
}
}
return result;
}
protected:
NLMISC::CLibraryContext *_LibContext;

View file

@ -19,9 +19,15 @@
#ifndef ICORE_LISTENER_H
#define ICORE_LISTENER_H
// Project includes
#include "core_global.h"
// Qt includes
#include <QtCore/QObject>
QT_BEGIN_NAMESPACE
class QWidget;
QT_END_NAMESPACE
namespace Core
{
@ -40,9 +46,11 @@ PluginManager->addObject(yourImplementingObject);
Don't forget to remove the object again at deconstruction (e.g. in the destructor of
your plugin)
*/
class ICoreListener
class CORE_EXPORT ICoreListener: public QObject
{
Q_OBJECT
public:
ICoreListener(QObject *parent = 0): QObject(parent) {}
virtual ~ICoreListener() {}
/// Return false from the implemented method if you want to prevent the event.
@ -51,6 +59,5 @@ public:
} // namespace Core
Q_DECLARE_INTERFACE(Core::ICoreListener, "dev.ryzom.com.ICoreListener/0.1")
#endif // ICORE_LISTENER_H

View file

@ -0,0 +1,62 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
// 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 IMENU_MANAGER_H
#define IMENU_MANAGER_H
#include "core_global.h"
#include <QtCore/QObject>
#include <QtCore/QList>
QT_BEGIN_NAMESPACE
class QMenu;
class QAction;
class QString;
class QMenuBar;
QT_END_NAMESPACE
namespace Core
{
/*
@interface IMenuManager
@brief The IMenuManager is an interface for providing a registration of menus and menu item.
@details The IMenuManager provides centralized access to menus and menu items.
All menus and menu items should be registered in the IMenuManager.
*/
class CORE_EXPORT IMenuManager : public QObject
{
Q_OBJECT
public:
IMenuManager(QObject *parent = 0): QObject(parent) {}
virtual ~IMenuManager() {}
virtual void registerMenu(QMenu *menu, const QString &id) = 0;
virtual void registerAction(QAction *action, const QString &id) = 0;
virtual QMenu *menu(const QString &id) const = 0;
virtual QAction *action(const QString &id) const = 0;
virtual void unregisterMenu(const QString &id) = 0;
virtual void unregisterAction(const QString &id) = 0;
virtual QMenuBar *menuBar() const = 0;
};
} // namespace Core
#endif // IMENU_MANAGER_H

View file

@ -19,9 +19,15 @@
#ifndef IOPTIONS_PAGE_H
#define IOPTIONS_PAGE_H
// Project includes
#include "core_global.h"
// Qt includes
#include <QtCore/QObject>
QT_BEGIN_NAMESPACE
class QWidget;
QT_END_NAMESPACE
namespace Core
{
@ -31,9 +37,11 @@ namespace Core
@details You need to subclass this interface and put an instance of your subclass
into the plugin manager object pool.
*/
class IOptionsPage
class CORE_EXPORT IOptionsPage: public QObject
{
Q_OBJECT
public:
IOptionsPage(QObject *parent = 0): QObject(parent) {}
virtual ~IOptionsPage() {}
/// id() is a unique identifier for referencing this page
@ -61,6 +69,4 @@ public:
} // namespace Core
Q_DECLARE_INTERFACE(Core::IOptionsPage, "dev.ryzom.com.IOptionsPage/1.0")
#endif // IOPTIONS_PAGE_H

View file

@ -17,6 +17,7 @@
// Project includes
#include "main_window.h"
#include "menu_manager.h"
#include "core_plugin.h"
#include "iapp_page.h"
#include "icore_listener.h"
@ -34,7 +35,11 @@ namespace Core
CMainWindow::CMainWindow(CorePlugin *corePlugin, QWidget *parent)
: QMainWindow(parent),
_lastDir(".")
_pluginManager(0),
_corePlugin(0),
_menuManager(0),
_lastDir("."),
_settings(0)
{
_corePlugin = corePlugin;
_pluginManager = _corePlugin->pluginManager();
@ -42,11 +47,15 @@ CMainWindow::CMainWindow(CorePlugin *corePlugin, QWidget *parent)
setObjectName(Constants::MAIN_WINDOW);
_menuManager = new MenuManager(this);
_menuManager->setMenuBar(menuBar());
_pluginManager->addObject(_menuManager);
_tabWidget = new QTabWidget(this);
_tabWidget->setTabPosition(QTabWidget::South);
setCentralWidget(_tabWidget);
QList<IAppPage *> listAppPages = _corePlugin->getObjects<IAppPage>();
QList<IAppPage *> listAppPages = _pluginManager->getObjects<IAppPage>();
Q_FOREACH(IAppPage *appPage, listAppPages)
{
@ -72,7 +81,11 @@ CMainWindow::CMainWindow(CorePlugin *corePlugin, QWidget *parent)
CMainWindow::~CMainWindow()
{
delete _pluginView;
}
IMenuManager *CMainWindow::menuManager() const
{
return _menuManager;
}
void CMainWindow::checkObject(QObject *obj)
@ -102,7 +115,7 @@ void CMainWindow::about()
void CMainWindow::closeEvent(QCloseEvent *event)
{
QList<ICoreListener *> listeners = _corePlugin->getObjects<ICoreListener>();
QList<ICoreListener *> listeners = _pluginManager->getObjects<ICoreListener>();
Q_FOREACH(ICoreListener *listener, listeners)
{
if (!listener->closeMainWindow())
@ -113,8 +126,7 @@ void CMainWindow::closeEvent(QCloseEvent *event)
}
writeSettings();
QMainWindow::closeEvent(event);
event->accept();
}
void CMainWindow::addAppPage(IAppPage *appPage)
@ -133,46 +145,52 @@ void CMainWindow::createActions()
_openAction->setIcon(QIcon(":/images/open-file.png"));
_openAction->setShortcut(QKeySequence::Open);
_openAction->setStatusTip(tr("Open an existing file"));
menuManager()->registerAction(_openAction, Constants::OPEN);
// connect(_openAction, SIGNAL(triggered()), this, SLOT(open()));
_exitAction = new QAction(tr("E&xit"), this);
_exitAction->setShortcut(tr("Ctrl+Q"));
_exitAction->setStatusTip(tr("Exit the application"));
menuManager()->registerAction(_exitAction, Constants::EXIT);
connect(_exitAction, SIGNAL(triggered()), this, SLOT(close()));
_settingsAction = new QAction(tr("&Settings"), this);
_settingsAction->setIcon(QIcon(":/images/preferences.png"));
_settingsAction->setStatusTip(tr("Open the settings dialog"));
menuManager()->registerAction(_settingsAction, Constants::SETTINGS);
connect(_settingsAction, SIGNAL(triggered()), this, SLOT(showOptionsDialog()));
_aboutAction = new QAction(tr("&About"), this);
_aboutAction->setStatusTip(tr("Show the application's About box"));
menuManager()->registerAction(_aboutAction, Constants::ABOUT);
connect(_aboutAction, SIGNAL(triggered()), this, SLOT(about()));
_aboutQtAction = new QAction(tr("About &Qt"), this);
_aboutQtAction->setStatusTip(tr("Show the Qt library's About box"));
menuManager()->registerAction(_aboutQtAction, Constants::ABOUT_QT);
connect(_aboutQtAction, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
_pluginViewAction = new QAction(tr("About &Plugins"), this);
_pluginViewAction->setStatusTip(tr("Show the plugin view dialog"));
menuManager()->registerAction(_pluginViewAction, Constants::ABOUT_PLUGINS);
connect(_pluginViewAction, SIGNAL(triggered()), _pluginView, SLOT(show()));
}
void CMainWindow::createMenus()
{
_fileMenu = menuBar()->addMenu(tr("&File"));
_fileMenu->setObjectName(Constants::M_FILE);
menuManager()->registerMenu(_fileMenu, Constants::M_FILE);
_fileMenu->addSeparator();
_fileMenu->addAction(_exitAction);
_editMenu = menuBar()->addMenu(tr("&Edit"));
_editMenu->setObjectName(Constants::M_EDIT);
menuManager()->registerMenu(_editMenu, Constants::M_EDIT);
_viewMenu = menuBar()->addMenu(tr("&View"));
_viewMenu->setObjectName(Constants::M_VIEW);
menuManager()->registerMenu(_viewMenu, Constants::M_VIEW);
_toolsMenu = menuBar()->addMenu(tr("&Tools"));
_toolsMenu->setObjectName(Constants::M_TOOLS);
menuManager()->registerMenu(_toolsMenu, Constants::M_TOOLS);
_toolsMenu->addSeparator();
@ -182,7 +200,7 @@ void CMainWindow::createMenus()
menuBar()->addSeparator();
_helpMenu = menuBar()->addMenu(tr("&Help"));
_helpMenu->setObjectName(Constants::M_HELP);
menuManager()->registerMenu(_helpMenu, Constants::M_HELP);
_helpMenu->addAction(_aboutAction);
_helpMenu->addAction(_aboutQtAction);
_helpMenu->addAction(_pluginViewAction);

View file

@ -33,6 +33,8 @@ namespace Core
class CSettingsDialog;
class CorePlugin;
class IAppPage;
class IMenuManager;
class MenuManager;
class CMainWindow : public QMainWindow
{
@ -42,6 +44,8 @@ public:
CMainWindow(CorePlugin *corePlugin, QWidget *parent = 0);
~CMainWindow();
IMenuManager *menuManager() const;
private Q_SLOTS:
void checkObject(QObject *obj);
bool showOptionsDialog(const QString &group = QString(),
@ -65,6 +69,7 @@ private:
ExtensionSystem::IPluginManager *_pluginManager;
ExtensionSystem::CPluginView *_pluginView;
CorePlugin *_corePlugin;
MenuManager *_menuManager;
QPalette _originalPalette;
QString _lastDir;

View file

@ -0,0 +1,94 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
// 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 "menu_manager.h"
// NeL includes
#include <nel/misc/debug.h>
// Qt includes
#include <QtGui/QMenu>
#include <QtGui/QAction>
#include <QtGui/QMenuBar>
namespace Core
{
MenuManager::MenuManager(QObject *parent)
: IMenuManager(parent),
_menuBar(0)
{
}
MenuManager::~MenuManager()
{
_menuMap.clear();
}
void MenuManager::registerMenu(QMenu *menu, const QString &id)
{
menu->setObjectName(id);
_menuMap.insert(id, menu);
}
void MenuManager::registerAction(QAction *action, const QString &id)
{
action->setObjectName(id);
_actionMap.insert(id, action);
}
QMenu *MenuManager::menu(const QString &id) const
{
QMenu *result = 0;
if (_menuMap.count(id) == 0)
nlwarning("QMenu %s not found", id.toStdString().c_str());
else
result = _menuMap.value(id);
return result;
}
QAction *MenuManager::action(const QString &id) const
{
QAction *result = 0;
if (_actionMap.count(id) == 0)
nlwarning("QAction %s not found", id.toStdString().c_str());
else
result = _actionMap.value(id);
return result;
}
void MenuManager::unregisterMenu(const QString &id)
{
_menuMap.remove(id);
}
void MenuManager::unregisterAction(const QString &id)
{
_actionMap.remove(id);
}
QMenuBar *MenuManager::menuBar() const
{
return _menuBar;
}
void MenuManager::setMenuBar(QMenuBar *menuBar)
{
_menuBar = menuBar;
}
} /* namespace Core */

View file

@ -0,0 +1,59 @@
// Object Viewer Qt - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
// 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 MENU_MANAGER_H
#define MENU_MANAGER_H
// Project includes
#include "imenu_manager.h"
// Qt includes
#include <QtCore/QHash>
namespace Core
{
class MenuManager : public IMenuManager
{
Q_OBJECT
public:
MenuManager(QObject *parent = 0);
virtual ~MenuManager();
virtual void registerMenu(QMenu *menu, const QString &id);
virtual void registerAction(QAction *action, const QString &id);
virtual QMenu *menu(const QString &id) const;
virtual QAction *action(const QString &id) const;
virtual void unregisterMenu(const QString &id);
virtual void unregisterAction(const QString &id);
virtual QMenuBar *menuBar() const;
void setMenuBar(QMenuBar *menuBar);
private:
QMenuBar *_menuBar;
typedef QHash<QString, QMenu *> IdMenuMap;
IdMenuMap _menuMap;
typedef QHash<QString, QAction *> IdActionMap;
IdActionMap _actionMap;
};
} // namespace Core
#endif // MENU_MANAGER_H

View file

@ -28,7 +28,7 @@ namespace Core
{
CSearchPathsSettingsPage::CSearchPathsSettingsPage(QObject *parent)
: QObject(parent),
: IOptionsPage(parent),
_currentPage(0)
{
}

View file

@ -32,10 +32,10 @@ namespace Core
/**
@class CSearchPathsSettingsPage
*/
class CSearchPathsSettingsPage : public QObject, public Core::IOptionsPage
class CSearchPathsSettingsPage : public Core::IOptionsPage
{
Q_OBJECT
Q_INTERFACES(Core::IOptionsPage)
public:
CSearchPathsSettingsPage(QObject *parent = 0);
~CSearchPathsSettingsPage() {}

View file

@ -62,7 +62,7 @@ CSettingsDialog::CSettingsDialog(CorePlugin *corePlugin,
QMap<QString, QTreeWidgetItem *> categories;
QList<IOptionsPage *> pages = corePlugin->getObjects<IOptionsPage>();
QList<IOptionsPage *> pages = _plugMan->getObjects<IOptionsPage>();
int index = 0;
Q_FOREACH(IOptionsPage *page, pages)

View file

@ -13,9 +13,7 @@ SET(OVQT_PLUG_EXAMPLE_HDR plugin1.h
qnel_widget.h
simple_viewer.h
example_settings_page.h
${CMAKE_CURRENT_SOURCE_DIR}/../core/iapp_page.h
${CMAKE_CURRENT_SOURCE_DIR}/../core/icore_listener.h
${CMAKE_CURRENT_SOURCE_DIR}/../core/ioptions_page.h)
${CMAKE_CURRENT_SOURCE_DIR}/../core/iapp_page.h)
SET(OVQT_PLUG_EXAMPLE_UIS example_settings_page.ui)
@ -33,7 +31,7 @@ SOURCE_GROUP("OVQT Extension System" FILES ${OVQT_EXT_SYS_SRC})
ADD_LIBRARY(ovqt_plugin_example MODULE ${SRC} ${OVQT_PLUG_EXAMPLE_MOC_SRC} ${OVQT_EXT_SYS_SRC} ${OVQT_PLUG_EXAMPLE_UI_HDRS})
TARGET_LINK_LIBRARIES(ovqt_plugin_example nelmisc nel3d ${QT_LIBRARIES})
TARGET_LINK_LIBRARIES(ovqt_plugin_example ovqt_plugin_core nelmisc nel3d ${QT_LIBRARIES})
NL_DEFAULT_PROPS(ovqt_plugin_example "NeL, Tools, 3D: Object Viewer Qt Plugin: Example")
NL_ADD_RUNTIME_FLAGS(ovqt_plugin_example)

View file

@ -28,7 +28,7 @@ namespace Plugin
{
CExampleSettingsPage::CExampleSettingsPage(QObject *parent)
: QObject(parent),
: IOptionsPage(parent),
_currentPage(NULL)
{
}

View file

@ -32,10 +32,9 @@ namespace Plugin
/**
@class CExampleSettingsPage
*/
class CExampleSettingsPage : public QObject, public Core::IOptionsPage
class CExampleSettingsPage : public Core::IOptionsPage
{
Q_OBJECT
Q_INTERFACES(Core::IOptionsPage)
public:
CExampleSettingsPage(QObject *parent = 0);
virtual ~CExampleSettingsPage() {}

View file

@ -3,6 +3,8 @@
#include "example_settings_page.h"
#include "simple_viewer.h"
#include "../core/iapp_page.h"
#include "../core/core_constants.h"
#include "../core/imenu_manager.h"
#include "../../extension_system/iplugin_spec.h"
// NeL includes
@ -41,6 +43,21 @@ bool MyPlugin::initialize(ExtensionSystem::IPluginManager *pluginManager, QStrin
void MyPlugin::extensionsInitialized()
{
Core::IMenuManager *menuManager = 0;
menuManager = _plugMan->getObject<Core::IMenuManager>();
if (menuManager == 0)
nlinfo("error menu manager");
else
{
QAction *exampleAction1 = new QAction("Example1", this);
QAction *exampleAction2 = new QAction("Example2", this);
QAction *aboutQtAction = menuManager->action(Core::Constants::ABOUT_QT);
QMenu *helpMenu = menuManager->menu(Core::Constants::M_HELP);
helpMenu->insertAction(aboutQtAction, exampleAction1);
helpMenu->addSeparator();
helpMenu->addAction(exampleAction2);
menuManager->menuBar()->addMenu("ExampleMenu");
}
}
void MyPlugin::setNelContext(NLMISC::INelContext *nelContext)

View file

@ -39,12 +39,11 @@ public:
virtual ~CSimpleViewer() {}
};
class CCoreListener : public QObject, public Core::ICoreListener
class CCoreListener : public Core::ICoreListener
{
Q_OBJECT
Q_INTERFACES(Core::ICoreListener)
public:
CCoreListener(QObject *parent = 0): QObject(parent) {}
CCoreListener(QObject *parent = 0): ICoreListener(parent) {}
virtual ~CCoreListener() {}
virtual bool closeMainWindow() const;