Changed: #1303 Completed work on the context manager.

This commit is contained in:
dnk-88 2011-05-26 17:03:49 +03:00
parent d217155214
commit a78a831a51
6 changed files with 62 additions and 38 deletions

View file

@ -24,27 +24,36 @@
// Qt includes
#include <QtGui/QTabWidget>
#include <QtGui/QGridLayout>
namespace Core
{
struct ContextManagerPrivate
{
explicit ContextManagerPrivate(QTabWidget *tabWidget);
explicit ContextManagerPrivate(ExtensionSystem::IPluginManager *pluginManager, QTabWidget *tabWidget);
ExtensionSystem::IPluginManager *m_pluginManager;
QTabWidget *m_tabWidget;
QVector<IContext *> m_contexts;
int m_oldCurrent;
};
ContextManagerPrivate::ContextManagerPrivate(QTabWidget *tabWidget)
: m_tabWidget(tabWidget),
ContextManagerPrivate::ContextManagerPrivate(ExtensionSystem::IPluginManager *pluginManager, QTabWidget *tabWidget)
: m_pluginManager(pluginManager),
m_tabWidget(tabWidget),
m_oldCurrent(-1)
{
}
ContextManager::ContextManager(QTabWidget *tabWidget)
: d(new ContextManagerPrivate(tabWidget))
ContextManager::ContextManager(ExtensionSystem::IPluginManager *pluginManager, QTabWidget *tabWidget)
: d(new ContextManagerPrivate(pluginManager, tabWidget))
{
QObject::connect(d->m_pluginManager, SIGNAL(objectAdded(QObject *)),
this, SLOT(objectAdded(QObject *)));
QObject::connect(d->m_pluginManager, SIGNAL(aboutToRemoveObject(QObject *)),
this, SLOT(aboutToRemoveObject(QObject *)));
QObject::connect(d->m_tabWidget, SIGNAL(currentChanged(int)), this, SLOT(currentTabChanged(int)));
}
ContextManager::~ContextManager()
@ -75,16 +84,52 @@ void ContextManager::activateContext(const QString &id)
d->m_tabWidget->setCurrentIndex(index);
}
void ContextManager::objectAdded(QObject *obj)
{
IContext *context = qobject_cast<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);
QWidget *tabWidget = new QWidget(d->m_tabWidget);
d->m_tabWidget->addTab(tabWidget, context->icon(), context->trName());
QGridLayout *gridLayout = new QGridLayout(tabWidget);
gridLayout->setObjectName(QString::fromUtf8("gridLayout_") + context->id());
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(context->widget(), 0, 0, 1, 1);
}
void ContextManager::removeContextObject(IContext *context)
{
const int index = indexOf(context->id());
QWidget *widget = d->m_tabWidget->widget(index);
d->m_tabWidget->removeTab(index);
d->m_contexts.remove(index);
delete widget;
}
void ContextManager::currentTabChanged(int index)
{
if (index >= 0)
{
IContext *context = d->m_contexts.at(index);
IContext *oldContext = 0;
if (d->m_oldCurrent >= 0)
oldContext = d->m_contexts.at(d->m_oldCurrent);
d->m_oldCurrent = index;
Q_EMIT currentContextChanged(context, oldContext);
}
}
int ContextManager::indexOf(const QString &id) const

View file

@ -21,6 +21,8 @@
// Project includes
#include "core_global.h"
#include "../../extension_system/iplugin_manager.h"
// Qt includes
#include <QtCore/QObject>
@ -38,7 +40,7 @@ class CORE_EXPORT ContextManager : public QObject
Q_OBJECT
public:
explicit ContextManager(QTabWidget *tabWidget);
explicit ContextManager(ExtensionSystem::IPluginManager *pluginManager, QTabWidget *tabWidget);
virtual ~ContextManager();
Core::IContext* currentContext() const;
@ -52,6 +54,8 @@ public Q_SLOTS:
void activateContext(const QString &id);
private Q_SLOTS:
void objectAdded(QObject *obj);
void aboutToRemoveObject(QObject *obj);
void addContextObject(IContext *context);
void removeContextObject(IContext *context);
void currentTabChanged(int index);

View file

@ -65,7 +65,7 @@ MainWindow::MainWindow(ExtensionSystem::IPluginManager *pluginManager, QWidget *
m_tabWidget->setDocumentMode(true);
setCentralWidget(m_tabWidget);
m_contextManager = new ContextManager(m_tabWidget);
m_contextManager = new ContextManager(m_pluginManager, m_tabWidget);
setDockNestingEnabled(true);
m_originalPalette = QApplication::palette();
@ -96,14 +96,6 @@ bool MainWindow::initialize(QString *errorString)
void MainWindow::extensionsInitialized()
{
QList<IContext *> listContexts = m_pluginManager->getObjects<IContext>();
Q_FOREACH(IContext *context, listContexts)
{
addContextObject(context);
}
connect(m_pluginManager, SIGNAL(objectAdded(QObject *)), this, SLOT(checkObject(QObject *)));
readSettings();
show();
}
@ -132,13 +124,6 @@ void MainWindow::open()
{
}
void MainWindow::checkObject(QObject *obj)
{
IContext *context = qobject_cast<IContext *>(obj);
if (context)
addContextObject(context);
}
bool MainWindow::showOptionsDialog(const QString &group,
const QString &page,
QWidget *parent)
@ -177,16 +162,6 @@ void MainWindow::closeEvent(QCloseEvent *event)
event->accept();
}
void MainWindow::addContextObject(IContext *context)
{
QWidget *tabWidget = new QWidget(m_tabWidget);
m_tabWidget->addTab(tabWidget, context->icon(), context->trName());
QGridLayout *gridLayout = new QGridLayout(tabWidget);
gridLayout->setObjectName(QString::fromUtf8("gridLayout_") + context->id());
gridLayout->setContentsMargins(0, 0, 0, 0);
gridLayout->addWidget(context->widget(), 0, 0, 1, 1);
}
void MainWindow::createActions()
{
m_openAction = new QAction(tr("&Open..."), this);

View file

@ -62,15 +62,12 @@ public Q_SLOTS:
private Q_SLOTS:
void open();
void checkObject(QObject *obj);
void about();
protected:
virtual void closeEvent(QCloseEvent *event);
private:
void addContextObject(IContext *appPage);
void createActions();
void createMenus();
void createStatusBar();

View file

@ -23,6 +23,9 @@
#include "../core/imenu_manager.h"
#include "../core/core_constants.h"
// NeL includes
#include <nel/misc/debug.h>
// Qt includes
#include <QtCore/QSettings>
@ -34,12 +37,12 @@ LandscapeEditorWindow::LandscapeEditorWindow(QWidget *parent)
{
m_ui.setupUi(this);
createMenus();
// readSettings();
readSettings();
}
LandscapeEditorWindow::~LandscapeEditorWindow()
{
// writeSettings();
writeSettings();
}
void LandscapeEditorWindow::createMenus()