+void SdiWindow::Internal::MainWindow::closeEvent(QCloseEvent * e)
+{
+ // Try to close all the managed panels; ignore the event if one of the managed panels refuses to close
+ foreach (Gui::Panel * p, mPanels) {
+ if (!p->close()) {
+ e->ignore();
+ return;
+ }
+ }
+
+ QWidget::closeEvent(e);
+}
+
+void SdiWindow::Internal::MainWindow::changeEvent(QEvent * e)
+{
+ if (e->type() == QEvent::WindowStateChange) {
+ QWindowStateChangeEvent * wse = static_cast<QWindowStateChangeEvent *>(e);
+
+ if (windowState() == Qt::WindowNoState && wse->oldState() == Qt::WindowMinimized) {
+
+ // Restore all the managed panels that were previously minimized
+ foreach (Gui::Panel * p, mMinimizedPanels) {
+ if (p->isVisible())
+ p->showNormal();
+ }
+ mMinimizedPanels.clear();
+ }
+
+ else if (windowState() == Qt::WindowMinimized && wse->oldState() != Qt::WindowMinimized) {
+
+ // Minimize all the managed panels that are not minimized yet
+ mMinimizedPanels.clear();
+ foreach (Gui::Panel * p, mPanels) {
+ if (p->windowState() != Qt::WindowMinimized && p->isVisible()) {
+ mMinimizedPanels.append(p);
+ p->showMinimized();
+ }
+ }
+ }
+ }
+ QWidget::changeEvent(e);
+}
+
+void SdiWindow::Internal::MainWindow::panelDestroyed(QObject * obj)
+{
+ // Remove panels that are deleted
+ {
+ QList<Gui::Panel *>::iterator it = mPanels.begin();
+ while (it != mPanels.end()) {
+ if (*it == obj) {
+ it = mPanels.erase(it);
+ }
+ else {
+ ++it;
+ }
+ }
+ }
+
+ // Do the same with panel names
+ {
+ QHash<QString, Gui::Panel *>::iterator it = mPanelNames.begin();
+ while (it != mPanelNames.end()) {
+ if (it.value() == obj) {
+ it = mPanelNames.erase(it);
+ }
+ else {
+ ++it;
+ }
+ }
+ }
+
+ if (mMainPanel == obj) {
+ mMainPanel = 0;
+ }
+}
+