Properly handle close events.
This commit is contained in:
+2
-37
@@ -195,42 +195,7 @@ void File::print( MainWindow *window )
|
|||||||
///
|
///
|
||||||
void File::close( MainWindow *window )
|
void File::close( MainWindow *window )
|
||||||
{
|
{
|
||||||
bool closeFlag = true;
|
window->close();
|
||||||
|
|
||||||
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() )
|
foreach ( MainWindow* window, MainWindow::windowList() )
|
||||||
{
|
{
|
||||||
close( window );
|
window->close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+55
-2
@@ -33,6 +33,7 @@
|
|||||||
#include <QListWidget>
|
#include <QListWidget>
|
||||||
#include <QStackedWidget>
|
#include <QStackedWidget>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
|
#include <QMessageBox>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
#include "libglabels/Db.h"
|
#include "libglabels/Db.h"
|
||||||
@@ -221,8 +222,15 @@ QList<MainWindow*> MainWindow::windowList()
|
|||||||
///
|
///
|
||||||
void MainWindow::closeEvent( QCloseEvent *event )
|
void MainWindow::closeEvent( QCloseEvent *event )
|
||||||
{
|
{
|
||||||
writeSettings();
|
if ( isOkToClose() )
|
||||||
event->accept();
|
{
|
||||||
|
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
|
/// Change page
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -179,6 +179,8 @@ private:
|
|||||||
void readSettings();
|
void readSettings();
|
||||||
void writeSettings();
|
void writeSettings();
|
||||||
|
|
||||||
|
bool isOkToClose();
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////
|
/////////////////////////////////////
|
||||||
// Private Data
|
// Private Data
|
||||||
|
|||||||
Reference in New Issue
Block a user