pulsatingscience.cpp 18.9 KB
Newer Older
Oliver Bock's avatar
Oliver Bock committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/******************************************************************************
 *   Copyright (C) 2008 by Oliver Bock                                        *
 *   oliver.bock[AT]aei.mpg.de                                                *
 *                                                                            *
 *   This file is part of PulsatingScience.                                   *
 *                                                                            *
 *   PulsatingScience is free software: you can redistribute it and/or modify *
 *   it under the terms of the GNU General Public License as published        *
 *   by the Free Software Foundation, version 3 of the License.               *
 *                                                                            *
 *   PulsatingScience is distributed in the hope that it will be useful,      *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of           *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the             *
 *   GNU General Public License for more details.                             *
 *                                                                            *
 *   You should have received a copy of the GNU General Public License        *
 *   along with PulsatingScience. If not, see <http://www.gnu.org/licenses/>. *
 *                                                                            *
 ******************************************************************************/

#include "pulsatingscience.h"
22 23
#include <QSettings>

Oliver Bock's avatar
Oliver Bock committed
24

25 26 27 28
#ifdef __APPLE__
#include "/System/Library/Frameworks/Carbon.framework/Versions/A/Headers/Carbon.h"
#endif

Oliver Bock's avatar
Oliver Bock committed
29 30
PulsatingScience::PulsatingScience(QWidget *parent) : QMainWindow(parent)
{
31
    ui.setupUi(this);
32

33 34 35 36
    QAction* animControl = ui.dockAnimControl->toggleViewAction();
    animControl->setStatusTip(tr("Toggle the animation control visibility"));
    animControl->setShortcut(QKeySequence(tr("Alt+A")));
    ui.menuView->addAction(animControl);
37

38 39 40 41
#ifdef __APPLE__
    ui.actionMenu_bar->setEnabled(false);
#endif

42 43 44
    // inital status (based on GUI)
    m_permanentOrbits = ui.actionPermanent_orbits->isChecked();
    m_rotationAxesVisible = ui.actionRotationAxes->isChecked();
45
    m_pulseFlashesVisible = ui.actionPulseFlashes->isChecked();
46 47 48 49 50
    m_menuBarVisible = ui.actionMenu_bar->isChecked();
    m_statusBarVisible = ui.actionStatus_bar->isChecked();
    m_animControlVisible = true;
    m_animControlFloating = ui.dockAnimControl->isFloating();
    m_hiddenDemoModeActivated = false;
51

52 53 54 55 56 57 58 59 60 61 62
    // register alternate shortcuts (will be enabled when menu is hidden)
    m_runShortcut = new QShortcut(ui.actionRun->shortcut(), this);
    m_runShortcut->setEnabled(false);
    m_pauseShortcut = new QShortcut(ui.actionPause->shortcut(), this);
    m_pauseShortcut->setEnabled(false);
    m_stopShortcut = new QShortcut(ui.actionStop->shortcut(), this);
    m_stopShortcut->setEnabled(false);
    m_permanentOrbitsShortcut = new QShortcut(ui.actionPermanent_orbits->shortcut(), this);
    m_permanentOrbitsShortcut->setEnabled(false);
    m_rotationAxesShortcut = new QShortcut(ui.actionRotationAxes->shortcut(), this);
    m_rotationAxesShortcut->setEnabled(false);
63 64
    m_pulseFlashesShortcut = new QShortcut(ui.actionPulseFlashes->shortcut(), this);
    m_pulseFlashesShortcut->setEnabled(false);
65 66 67 68
    m_menuBarShortcut = new QShortcut(ui.actionMenu_bar->shortcut(), this);
    m_menuBarShortcut->setEnabled(false);
    m_fullscreenShortcut = new QShortcut(ui.actionFullscreen->shortcut(), this);
    m_fullscreenShortcut->setEnabled(false);
69 70
    m_fullscreenESCShortcut = new QShortcut(QKeySequence(Qt::Key_Escape), this);
    m_fullscreenESCShortcut->setEnabled(false);
71

72 73
    // register "hidden" demo mode shortcut for IYA2009 exhibition
    m_hiddenShortcut = new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::ALT + Qt::Key_D, this);
Oliver Bock's avatar
Oliver Bock committed
74

75 76 77
    // establish object communications
    connect(ui.pushRun, SIGNAL(clicked()),
            ui.pulsarGlWidget, SLOT(runAnimation()));
78

79 80
    connect(ui.actionRun, SIGNAL(triggered()),
            ui.pulsarGlWidget, SLOT(runAnimation()));
81

82 83
    connect(ui.actionRun, SIGNAL(triggered()),
            this, SLOT(on_pushRun_clicked()));
84

85 86
    connect(ui.pushPause, SIGNAL(clicked()),
            ui.pulsarGlWidget, SLOT(pauseAnimation()));
87

88 89
    connect(ui.actionPause, SIGNAL(triggered()),
            ui.pulsarGlWidget, SLOT(pauseAnimation()));
90

91 92
    connect(ui.actionPause, SIGNAL(triggered()),
            this, SLOT(on_pushPause_clicked()));
93

94 95
    connect(ui.pushStop, SIGNAL(clicked()),
            ui.pulsarGlWidget, SLOT(stopAnimation()));
96

97 98
    connect(ui.actionStop, SIGNAL(triggered()),
            ui.pulsarGlWidget, SLOT(stopAnimation()));
99

100 101
    connect(ui.actionStop, SIGNAL(triggered()),
            this, SLOT(on_pushStop_clicked()));
102

103 104
    connect(ui.actionPermanent_orbits, SIGNAL(toggled(bool)),
            ui.pulsarGlWidget, SLOT(showOrbits(bool)));
105

106 107
    connect(ui.actionRotationAxes, SIGNAL(toggled(bool)),
            ui.pulsarGlWidget, SLOT(showRotationAxes(bool)));
Oliver Bock's avatar
Oliver Bock committed
108

109 110 111
    connect(ui.actionPulseFlashes, SIGNAL(toggled(bool)),
            ui.pulsarGlWidget, SLOT(showPulseFlashes(bool)));

112 113
    connect(ui.pulsarGlWidget, SIGNAL(pulsarSemiMajorAxisUpdated(double)),
            this, SLOT(updatePulsarSemiMajorAxisValue(double)));
Oliver Bock's avatar
Oliver Bock committed
114

115 116
    connect(ui.pulsarGlWidget, SIGNAL(pulsarAnimationStep(double)),
            ui.pulseScopeWidget, SLOT(setMarker(double)), Qt::DirectConnection);
Oliver Bock's avatar
Oliver Bock committed
117

118 119
    connect(ui.pulsarGlWidget, SIGNAL(pulseProfileUpdated(const QVector<double>&)),
            ui.pulseScopeWidget, SLOT(drawCurve(const QVector<double>&)), Qt::DirectConnection);
Oliver Bock's avatar
Oliver Bock committed
120

121 122
    connect(m_hiddenShortcut, SIGNAL(activated()),
            this, SLOT(toggleHiddenDemoMode()));
123 124 125 126 127 128 129 130 131 132

    // restore previously saved window and splitter layout
    QCoreApplication::setOrganizationName("Max-Planck-Insitut für Gravitationsphysik");
    QCoreApplication::setOrganizationDomain("aei.mpg.de");
    QCoreApplication::setApplicationName("Pulsating Science");
    QSettings settings;

    restoreGeometry(settings.value("windowGeometry").toByteArray());
    restoreState(settings.value("windowState").toByteArray());
    ui.splitter->restoreState(settings.value("splitterSizes").toByteArray());
Oliver Bock's avatar
Oliver Bock committed
133 134 135 136
}

PulsatingScience::~PulsatingScience()
{
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
    if(m_runShortcut) {
        m_runShortcut->disconnect();
        delete m_runShortcut;
    }

    if(m_pauseShortcut) {
        m_pauseShortcut->disconnect();
        delete m_pauseShortcut;
    }

    if(m_stopShortcut) {
        m_stopShortcut->disconnect();
        delete m_stopShortcut;
    }

    if(m_permanentOrbitsShortcut) {
        m_permanentOrbitsShortcut->disconnect();
        delete m_permanentOrbitsShortcut;
    }

    if(m_rotationAxesShortcut) {
        m_rotationAxesShortcut->disconnect();
        delete m_rotationAxesShortcut;
    }

162 163 164 165 166
    if(m_pulseFlashesShortcut) {
        m_pulseFlashesShortcut->disconnect();
        delete m_pulseFlashesShortcut;
    }

167 168 169 170 171 172 173 174 175 176
    if(m_menuBarShortcut) {
        m_menuBarShortcut->disconnect();
        delete m_menuBarShortcut;
    }

    if(m_fullscreenShortcut) {
        m_fullscreenShortcut->disconnect();
        delete m_fullscreenShortcut;
    }

177 178 179 180 181
    if(m_fullscreenESCShortcut) {
        m_fullscreenESCShortcut->disconnect();
        delete m_fullscreenESCShortcut;
    }

182 183 184 185
    if(m_hiddenShortcut) {
        m_hiddenShortcut->disconnect();
        delete m_hiddenShortcut;
    }
Oliver Bock's avatar
Oliver Bock committed
186 187 188 189 190
}

void PulsatingScience::closeEvent(QCloseEvent *event)
{
    if(m_hiddenDemoModeActivated) {
191
        event->ignore();
Oliver Bock's avatar
Oliver Bock committed
192 193
    }
    else {
Oliver Bock's avatar
Oliver Bock committed
194
        // save window and splitter layout
195 196 197 198 199
        QSettings settings;
        settings.setValue("windowGeometry", saveGeometry());
        settings.setValue("windowState", saveState());
        settings.setValue("splitterSizes", ui.splitter->saveState());

Oliver Bock's avatar
Oliver Bock committed
200 201
        event->accept();
    }
Oliver Bock's avatar
Oliver Bock committed
202
}
203

Oliver Bock's avatar
Oliver Bock committed
204 205
void PulsatingScience::on_pushRun_clicked()
{
Oliver Bock's avatar
Oliver Bock committed
206 207 208
    ui.pushRun->setEnabled(false);
    ui.pushPause->setEnabled(true);
    ui.pushStop->setEnabled(true);
Oliver Bock's avatar
Oliver Bock committed
209 210 211 212
}

void PulsatingScience::on_pushPause_clicked()
{
213 214 215
    ui.pushRun->setEnabled(true);
    ui.pushPause->setEnabled(false);
    ui.pushStop->setEnabled(true);
Oliver Bock's avatar
Oliver Bock committed
216 217 218 219
}

void PulsatingScience::on_pushStop_clicked()
{
220 221 222
    ui.pushRun->setEnabled(true);
    ui.pushPause->setEnabled(false);
    ui.pushStop->setEnabled(false);
Oliver Bock's avatar
Oliver Bock committed
223 224
}

Oliver Bock's avatar
Oliver Bock committed
225 226
void PulsatingScience::on_radioCompanionWD_toggled(bool checked)
{
227 228 229 230
    if(checked) {
        ui.pulsarGlWidget->setCompanionMass(0.6);
        ui.lcdCompanionMass->display(QString::number(0.6, 'f', 1));
    }
Oliver Bock's avatar
Oliver Bock committed
231 232 233 234
}

void PulsatingScience::on_radioCompanionSun_toggled(bool checked)
{
235 236 237 238
    if(checked) {
        ui.pulsarGlWidget->setCompanionMass(1.0);
        ui.lcdCompanionMass->display(QString::number(1.0, 'f', 1));
    }
Oliver Bock's avatar
Oliver Bock committed
239 240 241 242
}

void PulsatingScience::on_radioCompanionNS_toggled(bool checked)
{
243 244 245 246
    if(checked) {
        ui.pulsarGlWidget->setCompanionMass(1.4);
        ui.lcdCompanionMass->display(QString::number(1.4, 'f', 1));
    }
Oliver Bock's avatar
Oliver Bock committed
247 248 249 250
}

void PulsatingScience::on_sliderPulsarMass_valueChanged(int value)
{
251 252
    ui.pulsarGlWidget->setPulsarMass(value * 0.1);
    ui.lcdPulsarMass->display(QString::number(value * 0.1, 'f', 1));
Oliver Bock's avatar
Oliver Bock committed
253 254
}

Oliver Bock's avatar
Oliver Bock committed
255
void PulsatingScience::on_sliderPulsarSpinFrequency_valueChanged(int value)
256
{
257 258
    ui.pulsarGlWidget->setPulsarSpinFrequency(value * 0.1);
    ui.lcdPulsarSpinFrequency->display(QString::number(value * 0.1, 'f', 1));
Oliver Bock's avatar
Oliver Bock committed
259 260
}

261 262
void PulsatingScience::on_sliderPulsarSpinAxisInclination_valueChanged(int value)
{
263 264
    ui.pulsarGlWidget->setPulsarSpinAxisInclination(value);
    ui.lcdPulsarSpinAxisInclination->display(QString::number(value));
265 266
}

267 268
void PulsatingScience::on_sliderPulsarMagneticAxisInclination_valueChanged(int value)
{
269 270
    ui.pulsarGlWidget->setPulsarMagneticAxisInclination(value);
    ui.lcdPulsarMagneticAxisInclination->display(QString::number(value));
271 272
}

Oliver Bock's avatar
Oliver Bock committed
273
void PulsatingScience::on_sliderPulsarSemiMajorAxis_valueChanged(int value)
Oliver Bock's avatar
Oliver Bock committed
274
{
275 276 277
    ui.pulsarGlWidget->setPulsarSemiMajorAxis(value * 0.001);
    ui.lcdPulsarSemiMajorAxis->display(QString::number(value * 0.001, 'f', 1));
    ui.lcdPulsarSemiMajorAxis->setStyleSheet("color: black");
278
}
Oliver Bock's avatar
Oliver Bock committed
279

280
void PulsatingScience::permanentOrbitsToggled() {
281 282 283 284 285 286 287 288
    if(m_permanentOrbits) {
        on_actionPermanent_orbits_toggled(false);
        ui.actionPermanent_orbits->setChecked(false);
    }
    else {
        on_actionPermanent_orbits_toggled(true);
        ui.actionPermanent_orbits->setChecked(true);
    }
289 290 291
}

void PulsatingScience::on_actionPermanent_orbits_toggled(bool checked) {
292
    m_permanentOrbits = checked;
293 294
}

295
void PulsatingScience::rotationAxesToggled() {
296 297 298 299 300 301 302 303
    if(m_rotationAxesVisible) {
        on_actionRotationAxes_toggled(false);
        ui.actionRotationAxes->setChecked(false);
    }
    else {
        on_actionRotationAxes_toggled(true);
        ui.actionRotationAxes->setChecked(true);
    }
304 305 306
}

void PulsatingScience::on_actionRotationAxes_toggled(bool checked) {
307
    m_rotationAxesVisible = checked;
308 309
}

310 311 312 313 314 315 316 317 318 319 320 321 322 323 324
void PulsatingScience::pulseFlashesToggled() {
    if(m_pulseFlashesVisible) {
        on_actionPulseFlashes_toggled(false);
        ui.actionPulseFlashes->setChecked(false);
    }
    else {
        on_actionPulseFlashes_toggled(true);
        ui.actionPulseFlashes->setChecked(true);
    }
}

void PulsatingScience::on_actionPulseFlashes_toggled(bool checked) {
    m_pulseFlashesVisible = checked;
}

325 326
void PulsatingScience::menuBarToggled()
{
327 328 329 330 331 332 333 334 335
    if(ui.menuBar->isVisible()) {
        on_actionMenu_bar_toggled(false);
        ui.actionMenu_bar->setChecked(false);
    }
    else if(!ui.actionFullscreen->isChecked()) {
        // allow menu bar only when NOT in fullscreen mode
        on_actionMenu_bar_toggled(true);
        ui.actionMenu_bar->setChecked(true);
    }
336 337
}

Oliver Bock's avatar
Oliver Bock committed
338 339
void PulsatingScience::on_actionMenu_bar_toggled(bool checked)
{
340 341 342 343 344 345 346 347 348 349 350 351 352 353 354
    if(checked) {
        ui.menuBar->show();
        m_menuBarVisible = true;

        // deactivate alternate shortcuts
        m_runShortcut->disconnect();
        m_runShortcut->setEnabled(false);
        m_pauseShortcut->disconnect();
        m_pauseShortcut->setEnabled(false);
        m_stopShortcut->disconnect();
        m_stopShortcut->setEnabled(false);
        m_permanentOrbitsShortcut->disconnect();
        m_permanentOrbitsShortcut->setEnabled(false);
        m_rotationAxesShortcut->disconnect();
        m_rotationAxesShortcut->setEnabled(false);
355 356
        m_pulseFlashesShortcut->disconnect();
        m_pulseFlashesShortcut->setEnabled(false);
357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376
        m_fullscreenShortcut->disconnect();
        m_fullscreenShortcut->setEnabled(false);
        m_menuBarShortcut->disconnect();
        m_menuBarShortcut->setEnabled(false);
    }
    else {
        ui.menuBar->hide();
        m_menuBarVisible = false;

        // activate alternate shortcuts
        m_runShortcut->setEnabled(true);
        connect(m_runShortcut, SIGNAL(activated()), ui.pulsarGlWidget, SLOT(runAnimation()));
        m_pauseShortcut->setEnabled(true);
        connect(m_pauseShortcut, SIGNAL(activated()), ui.pulsarGlWidget, SLOT(pauseAnimation()));
        m_stopShortcut->setEnabled(true);
        connect(m_stopShortcut, SIGNAL(activated()), ui.pulsarGlWidget, SLOT(stopAnimation()));
        m_permanentOrbitsShortcut->setEnabled(true);
        connect(m_permanentOrbitsShortcut, SIGNAL(activated()), this, SLOT(permanentOrbitsToggled()));
        m_rotationAxesShortcut->setEnabled(true);
        connect(m_rotationAxesShortcut, SIGNAL(activated()), this, SLOT(rotationAxesToggled()));
377 378
        m_pulseFlashesShortcut->setEnabled(true);
        connect(m_pulseFlashesShortcut, SIGNAL(activated()), this, SLOT(pulseFlashesToggled()));
379 380 381 382 383
        m_fullscreenShortcut->setEnabled(true);
        connect(m_fullscreenShortcut, SIGNAL(activated()), this, SLOT(fullscreenToggled()));
        m_menuBarShortcut->setEnabled(true);
        connect(m_menuBarShortcut, SIGNAL(activated()), this, SLOT(menuBarToggled()));
    }
384 385 386 387
}

void PulsatingScience::fullscreenToggled()
{
388 389 390 391 392 393 394 395
    if((windowState() & Qt::WindowFullScreen) > 0) {
        on_actionFullscreen_toggled(false);
        ui.actionFullscreen->setChecked(false);
    }
    else {
        on_actionFullscreen_toggled(true);
        ui.actionFullscreen->setChecked(true);
    }
396 397 398 399
}

void PulsatingScience::on_actionFullscreen_toggled(bool checked)
{
400 401 402 403
    if(checked) {
        window()->setWindowState(windowState() | Qt::WindowFullScreen);
        // assuming text being black
        setBackgroundRole(QPalette::Text);
404
#ifndef __APPLE__
405 406 407 408 409
        if(m_menuBarVisible) {
            on_actionMenu_bar_toggled(false);
            // keep visibility setting
            m_menuBarVisible = true;
        }
410
#endif
411 412 413 414 415 416
        if(m_statusBarVisible) ui.statusbar->hide();
        if(m_animControlVisible && !m_animControlFloating) {
            ui.dockAnimControl->hide();
            // keep visibility setting
            m_animControlVisible = true;
        }
417 418 419

        m_fullscreenESCShortcut->setEnabled(true);
        connect(m_fullscreenESCShortcut, SIGNAL(activated()), this, SLOT(fullscreenToggled()));
420 421 422 423
    }
    else {
        window()->setWindowState(windowState() & ~Qt::WindowFullScreen);
        setBackgroundRole(QPalette::Window);
424
#ifndef __APPLE__
425
        if(m_menuBarVisible) on_actionMenu_bar_toggled(true);
426 427
#endif
        if(m_statusBarVisible) ui.statusbar->show();
428
        if(m_animControlVisible && !m_animControlFloating) ui.dockAnimControl->show();
429 430 431

        m_fullscreenESCShortcut->disconnect();
        m_fullscreenESCShortcut->setEnabled(false);
432
    }
Oliver Bock's avatar
Oliver Bock committed
433 434 435 436
}

void PulsatingScience::on_actionStatus_bar_toggled(bool checked)
{
437 438 439 440 441 442 443 444
    if(checked) {
        ui.statusbar->show();
        m_statusBarVisible = true;
    }
    else {
        ui.statusbar->hide();
        m_statusBarVisible = false;
    }
445 446 447
}

void PulsatingScience::on_dockAnimControl_visibilityChanged(bool visible) {
448
    m_animControlVisible = visible;
449 450 451
}

void PulsatingScience::on_dockAnimControl_topLevelChanged(bool topLevel) {
452
    m_animControlFloating = topLevel;
Oliver Bock's avatar
Oliver Bock committed
453
}
Oliver Bock's avatar
Oliver Bock committed
454

455
void PulsatingScience::on_actionHelp_triggered()
456
{
457 458
    PulsatingScienceHelp help(this);
    help.exec();
459 460
}

461
void PulsatingScience::on_actionWebsite_triggered()
Oliver Bock's avatar
Oliver Bock committed
462
{
463
    QDesktopServices::openUrl(QUrl("http://www.aei.mpg.de"));
Oliver Bock's avatar
Oliver Bock committed
464 465
}

466
void PulsatingScience::on_actionAbout_triggered()
Oliver Bock's avatar
Oliver Bock committed
467
{
468
    QString content = "<b>%1</b><br>"
469 470 471 472 473 474 475 476 477 478 479
            "%2<br>"
            "<br>"
            "%3: Oliver Bock<br>"
            "%4: Benjamin Knispel<br>"
            "<br>"
            "%5<br>"
            "(%6 ESO/IDA/Danish 1.5m - R.Gendler, J-E. Ovaldsen, C. Th&ouml;ne, C. Feron)<br>"
            "<br>"
            "%7: GNU General Public License v3<br>"
            "<br>"
            "Copyright &copy; 2009-2011 %8";
480 481 482 483

    content = content.arg(
                tr("Pulsating Science"),
                tr("International Year of Astronomy 2009"),
484 485
                tr("Author"),
                tr("Consultant"),
486 487
                tr("Background image: The Carina Nebula"),
                tr("Courtesy of"),
488 489
                tr("License"),
                tr("Max Planck Institute for Gravitational Physics"));
490 491

    QMessageBox::about(this, tr("About \"Pulsating Science\""), content);
Oliver Bock's avatar
Oliver Bock committed
492
}
Oliver Bock's avatar
Oliver Bock committed
493 494 495

void PulsatingScience::updatePulsarSemiMajorAxisValue(double value)
{
496 497 498 499 500 501 502 503 504 505 506
    ui.sliderPulsarSemiMajorAxis->setValue(qRound(value * 1000.0));

    if((int)value <= 1 || (int)value >= 20) {
        if((int)value < 1 || (int)value > 20) {
            ui.lcdPulsarSemiMajorAxis->setStyleSheet("color: red");
        }
        else {
            ui.lcdPulsarSemiMajorAxis->setStyleSheet("color: black");
        }
        ui.lcdPulsarSemiMajorAxis->display(QString::number(value, 'f', 1));
    }
Oliver Bock's avatar
Oliver Bock committed
507
}
Oliver Bock's avatar
Oliver Bock committed
508 509 510

void PulsatingScience::toggleHiddenDemoMode()
{
511
    if(m_hiddenDemoModeActivated) {
512
#ifdef __APPLE__
513 514 515 516 517 518
        // show Menubar & Dock
        // unavailable in Qt 4.6: SetSystemUIMode(kUIModeNormal, 0);
        window()->setWindowFlags(windowFlags()
                                 & ~Qt::FramelessWindowHint
                                 & ~Qt::WindowStaysOnTopHint);
        window()->showNormal();
519
#endif
520 521 522 523 524 525 526 527 528
        on_actionMenu_bar_toggled(true);
        ui.actionMenu_bar->setChecked(true);
        window()->setWindowState(windowState() & ~Qt::WindowFullScreen);
        ui.dockAnimControl->setFeatures(QDockWidget::DockWidgetClosable
                                        | QDockWidget::DockWidgetMovable
                                        | QDockWidget::DockWidgetFloatable);
        m_hiddenDemoModeActivated = false;
    }
    else {
529
#ifdef __APPLE__
530
        // hide Menubar & Dock
Oliver Bock's avatar
Oliver Bock committed
531
        // unavailable in Qt 4.6: SetSystemUIMode(kUIModeAllHidden, 0);
532 533 534 535 536 537 538
        // don't ever ask me why this works _only_ in exactly this order on the Mac
        window()->setWindowFlags(windowFlags()
                                 | Qt::FramelessWindowHint
                                 | Qt::WindowStaysOnTopHint);
        window()->showMaximized();
        // might be needed to remove the resize handle on some systems
        // window()->setFixedSize(width(), height());
539
#endif
540 541 542 543 544 545
        on_actionMenu_bar_toggled(false);
        ui.actionMenu_bar->setChecked(false);
        window()->setWindowState(windowState() | Qt::WindowFullScreen);
        ui.dockAnimControl->setFeatures(QDockWidget::NoDockWidgetFeatures);
        m_hiddenDemoModeActivated = true;
    }
Oliver Bock's avatar
Oliver Bock committed
546
}