1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-04 03:40:14 +00:00

Merge remote-tracking branch 'cc9cii/Bug-No-1301'

This commit is contained in:
Marc Zinnschlag 2014-09-16 12:52:12 +02:00
commit b31c4e2bcd
7 changed files with 91 additions and 12 deletions

View File

@ -17,7 +17,7 @@ CSVDoc::FileWidget::FileWidget (QWidget *parent) : QWidget (parent), mAddon (fal
QHBoxLayout *layout = new QHBoxLayout (this); QHBoxLayout *layout = new QHBoxLayout (this);
mInput = new QLineEdit (this); mInput = new QLineEdit (this);
mInput->setValidator (new QRegExpValidator(QRegExp("^[a-zA-Z0-9\\s]*$"))); mInput->setValidator (new QRegExpValidator(QRegExp("^[a-zA-Z0-9_-\\s]*$")));
layout->addWidget (mInput, 1); layout->addWidget (mInput, 1);

View File

@ -29,6 +29,11 @@ void CSVDoc::View::closeEvent (QCloseEvent *event)
{ {
if (!mViewManager.closeRequest (this)) if (!mViewManager.closeRequest (this))
event->ignore(); event->ignore();
else
{
// closeRequest() returns true if last document
mViewManager.removeDocAndView(mDocument);
}
} }
void CSVDoc::View::setupFileMenu() void CSVDoc::View::setupFileMenu()
@ -650,4 +655,4 @@ void CSVDoc::View::run (const std::string& profile, const std::string& startupIn
void CSVDoc::View::stop() void CSVDoc::View::stop()
{ {
mDocument->stopRunning(); mDocument->stopRunning();
} }

View File

@ -172,7 +172,7 @@ bool CSVDoc::ViewManager::closeRequest (View *view)
{ {
std::vector<View *>::iterator iter = std::find (mViews.begin(), mViews.end(), view); std::vector<View *>::iterator iter = std::find (mViews.begin(), mViews.end(), view);
bool continueWithClose = true; bool continueWithClose = false;
if (iter!=mViews.end()) if (iter!=mViews.end())
{ {
@ -192,6 +192,24 @@ bool CSVDoc::ViewManager::closeRequest (View *view)
return continueWithClose; return continueWithClose;
} }
// NOTE: This method assumes that it is called only if the last document
void CSVDoc::ViewManager::removeDocAndView (CSMDoc::Document *document)
{
for (std::vector<View *>::iterator iter (mViews.begin()); iter!=mViews.end(); ++iter)
{
// the first match should also be the only match
if((*iter)->getDocument() == document)
{
mDocumentManager.removeDocument(document);
(*iter)->deleteLater();
mViews.erase (iter);
updateIndices();
return;
}
}
}
bool CSVDoc::ViewManager::notifySaveOnClose (CSVDoc::View *view) bool CSVDoc::ViewManager::notifySaveOnClose (CSVDoc::View *view)
{ {
bool result = true; bool result = true;
@ -210,13 +228,19 @@ bool CSVDoc::ViewManager::notifySaveOnClose (CSVDoc::View *view)
bool CSVDoc::ViewManager::showModifiedDocumentMessageBox (CSVDoc::View *view) bool CSVDoc::ViewManager::showModifiedDocumentMessageBox (CSVDoc::View *view)
{ {
QMessageBox messageBox; emit closeMessageBox();
QMessageBox messageBox(view);
CSMDoc::Document *document = view->getDocument(); CSMDoc::Document *document = view->getDocument();
messageBox.setWindowTitle (document->getSavePath().filename().string().c_str());
messageBox.setText ("The document has been modified."); messageBox.setText ("The document has been modified.");
messageBox.setInformativeText ("Do you want to save your changes?"); messageBox.setInformativeText ("Do you want to save your changes?");
messageBox.setStandardButtons (QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); messageBox.setStandardButtons (QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
messageBox.setDefaultButton (QMessageBox::Save); messageBox.setDefaultButton (QMessageBox::Save);
messageBox.setWindowModality (Qt::NonModal);
messageBox.hide();
messageBox.show();
bool retVal = true; bool retVal = true;
@ -341,8 +365,40 @@ void CSVDoc::ViewManager::onExitWarningHandler (int state, CSMDoc::Document *doc
} }
} }
bool CSVDoc::ViewManager::removeDocument (CSVDoc::View *view)
{
if(!notifySaveOnClose(view))
return false;
else
{
// don't bother closing views or updating indicies, but remove from mViews
CSMDoc::Document * document = view->getDocument();
std::vector<View *> remainingViews;
std::vector<View *>::const_iterator iter = mViews.begin();
for (; iter!=mViews.end(); ++iter)
{
if(document == (*iter)->getDocument())
(*iter)->setVisible(false);
else
remainingViews.push_back(*iter);
}
mDocumentManager.removeDocument(document);
mViews = remainingViews;
}
return true;
}
void CSVDoc::ViewManager::exitApplication (CSVDoc::View *view) void CSVDoc::ViewManager::exitApplication (CSVDoc::View *view)
{ {
if (notifySaveOnClose (view)) if(!removeDocument(view)) // close the current document first
QApplication::instance()->exit(); return;
while(!mViews.empty()) // attempt to close all other documents
{
mViews.back()->activateWindow();
mViews.back()->raise(); // raise the window to alert the user
if(!removeDocument(mViews.back()))
return;
}
// Editor exits (via a signal) when the last document is deleted
} }

View File

@ -41,6 +41,7 @@ namespace CSVDoc
bool notifySaveOnClose (View *view = 0); bool notifySaveOnClose (View *view = 0);
bool showModifiedDocumentMessageBox (View *view); bool showModifiedDocumentMessageBox (View *view);
bool showSaveInProgressMessageBox (View *view); bool showSaveInProgressMessageBox (View *view);
bool removeDocument(View *view);
public: public:
@ -55,6 +56,7 @@ namespace CSVDoc
///< Return number of views for \a document. ///< Return number of views for \a document.
bool closeRequest (View *view); bool closeRequest (View *view);
void removeDocAndView (CSMDoc::Document *document);
signals: signals:

View File

@ -13,7 +13,9 @@ CSVFilter::RecordFilterBox::RecordFilterBox (CSMWorld::Data& data, QWidget *pare
layout->setContentsMargins (0, 0, 0, 0); layout->setContentsMargins (0, 0, 0, 0);
layout->addWidget (new QLabel ("Record Filter", this)); QLabel *label = new QLabel("Record Filter", this);
label->setIndent(2);
layout->addWidget (label);
mEdit = new EditWidget (data, this); mEdit = new EditWidget (data, this);

View File

@ -114,8 +114,20 @@ void CSVSettings::Dialog::show()
setViewValues(); setViewValues();
} }
QPoint screenCenter = QApplication::desktop()->screenGeometry().center(); QWidget *currView = QApplication::activeWindow();
if(currView)
move (screenCenter - geometry().center()); {
// place at the center of the window with focus
QSize size = currView->size();
move(currView->geometry().x()+(size.width() - frameGeometry().width())/2,
currView->geometry().y()+(size.height() - frameGeometry().height())/2);
}
else
{
// something's gone wrong, place at the center of the screen
QPoint screenCenter = QApplication::desktop()->screenGeometry().center();
move(screenCenter - QPoint(frameGeometry().width()/2,
frameGeometry().height()/2));
}
QWidget::show(); QWidget::show();
} }

View File

@ -448,12 +448,12 @@ void CSVWorld::Table::tableSizeUpdate()
size = rows; size = rows;
} }
tableSizeChanged (size, deleted, modified); emit tableSizeChanged (size, deleted, modified);
} }
void CSVWorld::Table::selectionSizeUpdate() void CSVWorld::Table::selectionSizeUpdate()
{ {
selectionSizeChanged (selectionModel()->selectedRows().size()); emit selectionSizeChanged (selectionModel()->selectedRows().size());
} }
void CSVWorld::Table::requestFocus (const std::string& id) void CSVWorld::Table::requestFocus (const std::string& id)
@ -467,6 +467,8 @@ void CSVWorld::Table::requestFocus (const std::string& id)
void CSVWorld::Table::recordFilterChanged (boost::shared_ptr<CSMFilter::Node> filter) void CSVWorld::Table::recordFilterChanged (boost::shared_ptr<CSMFilter::Node> filter)
{ {
mProxyModel->setFilter (filter); mProxyModel->setFilter (filter);
tableSizeUpdate();
selectionSizeUpdate();
} }
void CSVWorld::Table::mouseMoveEvent (QMouseEvent* event) void CSVWorld::Table::mouseMoveEvent (QMouseEvent* event)