mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-18 18:40:06 +00:00
implemented view/document closing
This commit is contained in:
parent
9834bb3ad5
commit
758371d7e4
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include <QtGui/QApplication>
|
#include <QtGui/QApplication>
|
||||||
|
|
||||||
CS::Editor::Editor()
|
CS::Editor::Editor() : mViewManager (mDocumentManager)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,31 @@
|
|||||||
|
|
||||||
#include "view.hpp"
|
#include "view.hpp"
|
||||||
|
|
||||||
CSVDoc::View::View (CSMDoc::Document *document) : mDocument (document)
|
#include <iostream>
|
||||||
|
|
||||||
|
#include <QCloseEvent>
|
||||||
|
|
||||||
|
#include "viewmanager.hpp"
|
||||||
|
|
||||||
|
void CSVDoc::View::closeEvent (QCloseEvent *event)
|
||||||
|
{
|
||||||
|
if (!mViewManager.closeRequest (this))
|
||||||
|
event->ignore();
|
||||||
|
}
|
||||||
|
|
||||||
|
CSVDoc::View::View (ViewManager& viewManager, CSMDoc::Document *document)
|
||||||
|
: mViewManager (viewManager), mDocument (document)
|
||||||
{
|
{
|
||||||
resize (200, 200);
|
resize (200, 200);
|
||||||
setWindowTitle ("New Document");
|
setWindowTitle ("New Document");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const CSMDoc::Document *CSVDoc::View::getDocument() const
|
||||||
|
{
|
||||||
|
return mDocument;
|
||||||
|
}
|
||||||
|
|
||||||
|
CSMDoc::Document *CSVDoc::View::getDocument()
|
||||||
|
{
|
||||||
|
return mDocument;
|
||||||
|
}
|
@ -10,20 +10,31 @@ namespace CSMDoc
|
|||||||
|
|
||||||
namespace CSVDoc
|
namespace CSVDoc
|
||||||
{
|
{
|
||||||
|
class ViewManager;
|
||||||
|
|
||||||
class View : public QWidget
|
class View : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
ViewManager& mViewManager;
|
||||||
CSMDoc::Document *mDocument;
|
CSMDoc::Document *mDocument;
|
||||||
|
|
||||||
// not implemented
|
// not implemented
|
||||||
View (const View&);
|
View (const View&);
|
||||||
View& operator= (const View&);
|
View& operator= (const View&);
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
void closeEvent (QCloseEvent *event);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
View (CSMDoc::Document *document);
|
View (ViewManager& viewManager, CSMDoc::Document *document);
|
||||||
///< The ownership of \a document is not transferred to *this.
|
///< The ownership of \a document is not transferred to *this.
|
||||||
|
|
||||||
|
const CSMDoc::Document *getDocument() const;
|
||||||
|
|
||||||
|
CSMDoc::Document *getDocument();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
|
|
||||||
#include "viewmanager.hpp"
|
#include "viewmanager.hpp"
|
||||||
|
|
||||||
|
#include "../../model/doc/documentmanager.hpp"
|
||||||
|
|
||||||
#include "view.hpp"
|
#include "view.hpp"
|
||||||
|
|
||||||
CSVDoc::ViewManager::ViewManager()
|
CSVDoc::ViewManager::ViewManager (CSMDoc::DocumentManager& documentManager)
|
||||||
|
: mDocumentManager (documentManager)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -12,11 +15,14 @@ CSVDoc::ViewManager::~ViewManager()
|
|||||||
{
|
{
|
||||||
for (std::vector<View *>::iterator iter (mViews.begin()); iter!=mViews.end(); ++iter)
|
for (std::vector<View *>::iterator iter (mViews.begin()); iter!=mViews.end(); ++iter)
|
||||||
delete *iter;
|
delete *iter;
|
||||||
|
|
||||||
|
for (std::vector<View *>::iterator iter (mClosed.begin()); iter!=mClosed.end(); ++iter)
|
||||||
|
delete *iter;
|
||||||
}
|
}
|
||||||
|
|
||||||
CSVDoc::View *CSVDoc::ViewManager::addView (CSMDoc::Document *document)
|
CSVDoc::View *CSVDoc::ViewManager::addView (CSMDoc::Document *document)
|
||||||
{
|
{
|
||||||
View *view = new View (document);
|
View *view = new View (*this, document);
|
||||||
|
|
||||||
mViews.push_back (view);
|
mViews.push_back (view);
|
||||||
|
|
||||||
@ -24,3 +30,34 @@ CSVDoc::View *CSVDoc::ViewManager::addView (CSMDoc::Document *document)
|
|||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CSVDoc::ViewManager::countViews (const CSMDoc::Document *document) const
|
||||||
|
{
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
for (std::vector<View *>::const_iterator iter (mViews.begin()); iter!=mViews.end(); ++iter)
|
||||||
|
if ((*iter)->getDocument()==document)
|
||||||
|
++count;
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CSVDoc::ViewManager::closeRequest (View *view)
|
||||||
|
{
|
||||||
|
std::vector<View *>::iterator iter = std::find (mViews.begin(), mViews.end(), view);
|
||||||
|
|
||||||
|
if (iter!=mViews.end())
|
||||||
|
{
|
||||||
|
bool last = countViews (view->getDocument())<=1;
|
||||||
|
|
||||||
|
/// \todo check if document has not been saved -> return false and start close dialogue
|
||||||
|
|
||||||
|
mViews.erase (iter);
|
||||||
|
mClosed.push_back (view);
|
||||||
|
|
||||||
|
if (last)
|
||||||
|
mDocumentManager.removeDocument (view->getDocument());
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
@ -6,6 +6,7 @@
|
|||||||
namespace CSMDoc
|
namespace CSMDoc
|
||||||
{
|
{
|
||||||
class Document;
|
class Document;
|
||||||
|
class DocumentManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace CSVDoc
|
namespace CSVDoc
|
||||||
@ -14,7 +15,9 @@ namespace CSVDoc
|
|||||||
|
|
||||||
class ViewManager
|
class ViewManager
|
||||||
{
|
{
|
||||||
|
CSMDoc::DocumentManager& mDocumentManager;
|
||||||
std::vector<View *> mViews;
|
std::vector<View *> mViews;
|
||||||
|
std::vector<View *> mClosed;
|
||||||
|
|
||||||
// not implemented
|
// not implemented
|
||||||
ViewManager (const ViewManager&);
|
ViewManager (const ViewManager&);
|
||||||
@ -22,13 +25,18 @@ namespace CSVDoc
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
ViewManager();
|
ViewManager (CSMDoc::DocumentManager& documentManager);
|
||||||
|
|
||||||
~ViewManager();
|
~ViewManager();
|
||||||
|
|
||||||
View *addView (CSMDoc::Document *document);
|
View *addView (CSMDoc::Document *document);
|
||||||
///< The ownership of the returned view is not transferred.
|
///< The ownership of the returned view is not transferred.
|
||||||
|
|
||||||
|
int countViews (const CSMDoc::Document *document) const;
|
||||||
|
///< Return number of views for \a document.
|
||||||
|
|
||||||
|
bool closeRequest (View *view);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user