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:
commit
b31c4e2bcd
@ -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);
|
||||||
|
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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:
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user