Changed: #1303 Each context must have its own file open dialog, which will be called when the context is active. The beginning of work on adding undo/redo.

--HG--
branch : gsoc2011-worldeditorqt
This commit is contained in:
dnk-88 2011-05-27 17:06:30 +03:00
parent 7e4d8a53a5
commit 79c5f51c0e
24 changed files with 89 additions and 29 deletions

View file

@ -18,6 +18,7 @@
// Project includes // Project includes
#include "context_manager.h" #include "context_manager.h"
#include "icontext.h" #include "icontext.h"
#include "main_window.h"
// NeL includes // NeL includes
#include <nel/misc/debug.h> #include <nel/misc/debug.h>
@ -31,26 +32,26 @@ namespace Core
struct ContextManagerPrivate struct ContextManagerPrivate
{ {
explicit ContextManagerPrivate(ExtensionSystem::IPluginManager *pluginManager, QTabWidget *tabWidget); explicit ContextManagerPrivate(Core::MainWindow *mainWindow, QTabWidget *tabWidget);
ExtensionSystem::IPluginManager *m_pluginManager; Core::MainWindow *m_mainWindow;
QTabWidget *m_tabWidget; QTabWidget *m_tabWidget;
QVector<IContext *> m_contexts; QVector<IContext *> m_contexts;
int m_oldCurrent; int m_oldCurrent;
}; };
ContextManagerPrivate::ContextManagerPrivate(ExtensionSystem::IPluginManager *pluginManager, QTabWidget *tabWidget) ContextManagerPrivate::ContextManagerPrivate(Core::MainWindow *mainWindow, QTabWidget *tabWidget)
: m_pluginManager(pluginManager), : m_mainWindow(mainWindow),
m_tabWidget(tabWidget), m_tabWidget(tabWidget),
m_oldCurrent(-1) m_oldCurrent(-1)
{ {
} }
ContextManager::ContextManager(ExtensionSystem::IPluginManager *pluginManager, QTabWidget *tabWidget) ContextManager::ContextManager(Core::MainWindow *mainWindow, QTabWidget *tabWidget)
: d(new ContextManagerPrivate(pluginManager, tabWidget)) : d(new ContextManagerPrivate(mainWindow, tabWidget))
{ {
QObject::connect(d->m_pluginManager, SIGNAL(objectAdded(QObject *)), QObject::connect(d->m_mainWindow->pluginManager(), SIGNAL(objectAdded(QObject *)),
this, SLOT(objectAdded(QObject *))); this, SLOT(objectAdded(QObject *)));
QObject::connect(d->m_pluginManager, SIGNAL(aboutToRemoveObject(QObject *)), QObject::connect(d->m_mainWindow->pluginManager(), SIGNAL(aboutToRemoveObject(QObject *)),
this, SLOT(aboutToRemoveObject(QObject *))); this, SLOT(aboutToRemoveObject(QObject *)));
QObject::connect(d->m_tabWidget, SIGNAL(currentChanged(int)), this, SLOT(currentTabChanged(int))); QObject::connect(d->m_tabWidget, SIGNAL(currentChanged(int)), this, SLOT(currentTabChanged(int)));
@ -61,7 +62,7 @@ ContextManager::~ContextManager()
delete d; delete d;
} }
Core::IContext* ContextManager::currentContext() const Core::IContext *ContextManager::currentContext() const
{ {
int currentIndex = d->m_tabWidget->currentIndex(); int currentIndex = d->m_tabWidget->currentIndex();
if (currentIndex < 0) if (currentIndex < 0)
@ -69,7 +70,7 @@ Core::IContext* ContextManager::currentContext() const
return d->m_contexts.at(currentIndex); return d->m_contexts.at(currentIndex);
} }
Core::IContext* ContextManager::context(const QString &id) const Core::IContext *ContextManager::context(const QString &id) const
{ {
const int index = indexOf(id); const int index = indexOf(id);
if (index >= 0) if (index >= 0)

View file

@ -21,8 +21,6 @@
// Project includes // Project includes
#include "core_global.h" #include "core_global.h"
#include "../../extension_system/iplugin_manager.h"
// Qt includes // Qt includes
#include <QtCore/QObject> #include <QtCore/QObject>
@ -33,6 +31,7 @@ QT_END_NAMESPACE
namespace Core namespace Core
{ {
class IContext; class IContext;
class MainWindow;
struct ContextManagerPrivate; struct ContextManagerPrivate;
class CORE_EXPORT ContextManager : public QObject class CORE_EXPORT ContextManager : public QObject
@ -40,11 +39,11 @@ class CORE_EXPORT ContextManager : public QObject
Q_OBJECT Q_OBJECT
public: public:
explicit ContextManager(ExtensionSystem::IPluginManager *pluginManager, QTabWidget *tabWidget); explicit ContextManager(Core::MainWindow *mainWindow, QTabWidget *tabWidget);
virtual ~ContextManager(); virtual ~ContextManager();
Core::IContext* currentContext() const; Core::IContext *currentContext() const;
Core::IContext* context(const QString &id) const; Core::IContext *context(const QString &id) const;
Q_SIGNALS: Q_SIGNALS:
// the default argument '=0' is important for connects without the oldContext argument. // the default argument '=0' is important for connects without the oldContext argument.

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

@ -57,15 +57,7 @@ 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 bool open() virtual void open() = 0;
{
return false;
}
virtual bool help()
{
return false;
}
}; };
} // namespace Core } // namespace Core

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

@ -42,6 +42,7 @@ MainWindow::MainWindow(ExtensionSystem::IPluginManager *pluginManager, QWidget *
m_contextManager(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"));
@ -65,10 +66,11 @@ MainWindow::MainWindow(ExtensionSystem::IPluginManager *pluginManager, QWidget *
m_tabWidget->setDocumentMode(true); m_tabWidget->setDocumentMode(true);
setCentralWidget(m_tabWidget); setCentralWidget(m_tabWidget);
m_contextManager = new ContextManager(m_pluginManager, 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();
@ -122,6 +124,7 @@ ExtensionSystem::IPluginManager *MainWindow::pluginManager() const
void MainWindow::open() void MainWindow::open()
{ {
m_contextManager->currentContext()->open();
} }
bool MainWindow::showOptionsDialog(const QString &group, bool MainWindow::showOptionsDialog(const QString &group,
@ -212,11 +215,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
@ -85,6 +86,7 @@ private:
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

@ -63,6 +63,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,10 @@ public:
return m_simpleViewer; return m_simpleViewer;
} }
virtual void open()
{
}
CSimpleViewer *m_simpleViewer; CSimpleViewer *m_simpleViewer;
}; };

View file

@ -93,6 +93,11 @@ public:
{ {
return QIcon(); return QIcon();
} }
virtual void open()
{
}
virtual QWidget *widget(); virtual QWidget *widget();
LandscapeEditorWindow *m_landEditorWindow; LandscapeEditorWindow *m_landEditorWindow;

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

@ -272,8 +272,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

@ -72,10 +72,12 @@ public:
return _SkeletonTreeModel; return _SkeletonTreeModel;
} }
private Q_SLOTS: 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);

View file

@ -89,6 +89,11 @@ void ObjectViewerPlugin::addAutoReleasedObject(QObject *obj)
_autoReleaseObjects.prepend(obj); _autoReleaseObjects.prepend(obj);
} }
void CObjectViewerContext::open()
{
Modules::mainWin().open();
}
QWidget *CObjectViewerContext::widget() QWidget *CObjectViewerContext::widget()
{ {
return &Modules::mainWin(); return &Modules::mainWin();

View file

@ -66,14 +66,19 @@ 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 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();