00001 #include <QtCore/QString>
00002 #include <QtCore/QtDebug>
00003 #include <QtGui/QWidget>
00004 #include <QtGui/QCloseEvent>
00005 #include <QtGui/QMessageBox>
00006 #include <QtGui/QSizePolicy>
00007
00008 #include <ACE/foldertabledockwidget.h>
00009
00010
00011 FolderTableDockWidget::FolderTableDockWidget( QWidget* parent, Qt::WindowFlags flags ) :
00012 QDockWidget( parent, flags ),
00013 folderTableModel( 0 )
00014 {
00015
00016
00017 QSizePolicy sizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred );
00018 sizePolicy.setHorizontalStretch( 0 );
00019 sizePolicy.setVerticalStretch( 0 );
00020 sizePolicy.setHeightForWidth( this->sizePolicy().hasHeightForWidth() );
00021 setSizePolicy( sizePolicy );
00022 setMinimumSize( QSize( 450, 0) );
00023 setFocusPolicy( Qt::StrongFocus );
00024 this->setFeatures( QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable );
00025 this->setAllowedAreas( Qt::BottomDockWidgetArea | Qt::RightDockWidgetArea | Qt::TopDockWidgetArea );
00026 }
00027
00028 FolderTableDockWidget::~FolderTableDockWidget()
00029 {
00030
00031 emit folderTableDockWidgetClose( folderTableModel );
00032 }
00033
00034 void FolderTableDockWidget::focusInEvent( QFocusEvent* )
00035 {
00036 emit changeFocusToTable();
00037 }
00038
00039 void FolderTableDockWidget::closeEvent( QCloseEvent* event )
00040 {
00041 if ( folderTableModel != 0 && folderTableModel->getRootTableItem()->anyNew() )
00042 {
00043 int reply = QMessageBox::warning(
00044 this,
00045 tr( "Save" ),
00046 tr( "Newly cloned entries have not been commited.\nDo you wish to commit them?" ),
00047 QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel,
00048 QMessageBox::Yes );
00049 if ( reply == QMessageBox::Yes )
00050 {
00051 while ( reply == QMessageBox::Yes && !folderTableModel->commit() )
00052 {
00053 switch ( QMessageBox::critical(
00054 this,
00055 tr( "Unexpected Error" ),
00056 tr( "Failure encountered whilst commiting!" ),
00057 QMessageBox::Retry | QMessageBox::Discard | QMessageBox::Cancel,
00058 QMessageBox::Retry ) )
00059 {
00060 case QMessageBox::Retry:
00061 continue;
00062 case QMessageBox::Discard:
00063 reply = QMessageBox::No;
00064 break;
00065 case QMessageBox::Cancel:
00066 reply = QMessageBox::Cancel;
00067 break;
00068 default:
00069 reply = QMessageBox::Cancel;
00070 break;
00071 }
00072 }
00073 }
00074 if ( reply == QMessageBox::Cancel )
00075 {
00076 event->ignore();
00077 return;
00078 }
00079 }
00080
00081 emit folderTableDockWidgetClose( folderTableModel );
00082 event->accept();
00083 }
00084
00085 void FolderTableDockWidget::setTableModel( FolderTableModel* model )
00086 {
00087 folderTableModel = model;
00088 }
00089