Properly handle close events.
This commit is contained in:
+1
-36
@@ -195,42 +195,7 @@ void File::print( MainWindow *window )
|
||||
///
|
||||
void File::close( MainWindow *window )
|
||||
{
|
||||
bool closeFlag = true;
|
||||
|
||||
if ( !window->isEmpty() )
|
||||
{
|
||||
QMessageBox msgBox;
|
||||
msgBox.setText( tr("The document ") + window->model()->shortName() + tr(" has been modified.") );
|
||||
msgBox.setInformativeText( tr("Do you want to save your changes?") );
|
||||
msgBox.setStandardButtons( QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel );
|
||||
msgBox.setDefaultButton( QMessageBox::Save );
|
||||
|
||||
int ret = msgBox.exec();
|
||||
|
||||
switch (ret) {
|
||||
case QMessageBox::Save:
|
||||
// Save was clicked
|
||||
closeFlag = save( window );
|
||||
break;
|
||||
case QMessageBox::Discard:
|
||||
// Don't Save was clicked
|
||||
closeFlag = true;
|
||||
break;
|
||||
case QMessageBox::Cancel:
|
||||
// Cancel was clicked
|
||||
closeFlag = false;
|
||||
break;
|
||||
default:
|
||||
// should never be reached
|
||||
closeFlag = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( closeFlag )
|
||||
{
|
||||
window->close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -241,6 +206,6 @@ void File::exit()
|
||||
{
|
||||
foreach ( MainWindow* window, MainWindow::windowList() )
|
||||
{
|
||||
close( window );
|
||||
window->close();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#include <QListWidget>
|
||||
#include <QStackedWidget>
|
||||
#include <QLabel>
|
||||
#include <QMessageBox>
|
||||
#include <QDebug>
|
||||
|
||||
#include "libglabels/Db.h"
|
||||
@@ -221,8 +222,15 @@ QList<MainWindow*> MainWindow::windowList()
|
||||
///
|
||||
void MainWindow::closeEvent( QCloseEvent *event )
|
||||
{
|
||||
if ( isOkToClose() )
|
||||
{
|
||||
writeSettings();
|
||||
event->accept();
|
||||
}
|
||||
else
|
||||
{
|
||||
event->ignore();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -921,6 +929,51 @@ void MainWindow::writeSettings()
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Is it ok to close window?
|
||||
///
|
||||
bool MainWindow::isOkToClose()
|
||||
{
|
||||
bool ok = true;
|
||||
|
||||
if ( !this->isEmpty() )
|
||||
{
|
||||
if ( mModel->isModified() )
|
||||
{
|
||||
QString msg = tr("Save changes to project \"%1\" before closing?").arg( mModel->shortName() );
|
||||
QString info = tr("Your changes will be lost if you don't save them.");
|
||||
|
||||
int ret = QMessageBox::warning( this,
|
||||
tr( "Save project?" ),
|
||||
"<b>" + msg + "</b><p>" + info + "</p>",
|
||||
(QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel),
|
||||
QMessageBox::Save );
|
||||
|
||||
switch (ret) {
|
||||
case QMessageBox::Save:
|
||||
// Save was clicked
|
||||
ok = File::save( this );
|
||||
break;
|
||||
case QMessageBox::Discard:
|
||||
// Don't Save was clicked
|
||||
ok = true;
|
||||
break;
|
||||
case QMessageBox::Cancel:
|
||||
// Cancel was clicked
|
||||
ok = false;
|
||||
break;
|
||||
default:
|
||||
// should never be reached
|
||||
ok = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
||||
///
|
||||
/// Change page
|
||||
///
|
||||
|
||||
@@ -179,6 +179,8 @@ private:
|
||||
void readSettings();
|
||||
void writeSettings();
|
||||
|
||||
bool isOkToClose();
|
||||
|
||||
|
||||
/////////////////////////////////////
|
||||
// Private Data
|
||||
|
||||
Reference in New Issue
Block a user