Fix popup widgets' positions. Add tool bar on Symbian.
[dorian] / fullscreenwindow.cpp
index bdea6a4..07bf291 100644 (file)
 
 #include "fullscreenwindow.h"
 #include "translucentbutton.h"
+#include "progress.h"
+#include "trace.h"
+#include "settings.h"
+#include "platform.h"
 
-FullScreenWindow::FullScreenWindow(QWidget *parent): QMainWindow(parent), child(0)
+static const int MARGIN = 9;
+
+FullScreenWindow::FullScreenWindow(QWidget *parent):
+        AdopterWindow(parent), progress(0), previousButton(0), nextButton(0)
 {
+    TRACE;
     Q_ASSERT(parent);
 #ifdef Q_WS_MAEMO_5
     setAttribute(Qt::WA_Maemo5StackedWindow, true);
     setAttribute(Qt::WA_Maemo5NonComposited, true);
 #endif // Q_WS_MAEMO_5
+#ifndef Q_OS_SYMBIAN
+    toolBar->hide();
+#endif
     QFrame *frame = new QFrame(this);
     QVBoxLayout *layout = new QVBoxLayout(frame);
     layout->setMargin(0);
     frame->setLayout(layout);
     setCentralWidget(frame);
-    restoreButton = new TranslucentButton("view-fullscreen", this);
+    restoreButton = new TranslucentButton("view-normal", this);
+    QRect screen = QApplication::desktop()->screenGeometry();
+    restoreButton->setGeometry(
+        screen.width() - TranslucentButton::pixels - MARGIN,
+        screen.height() - TranslucentButton::pixels - MARGIN,
+        TranslucentButton::pixels,
+        TranslucentButton::pixels);
+    connect(restoreButton, SIGNAL(triggered()), this, SIGNAL(restore()));
 }
 
 void FullScreenWindow::showFullScreen()
 {
-#ifdef Q_WS_MAEMO_5
-    setAttribute(Qt::WA_Maemo5PortraitOrientation, parentWidget()->
-                 testAttribute(Qt::WA_Maemo5PortraitOrientation));
-    setAttribute(Qt::WA_Maemo5LandscapeOrientation, parentWidget()->
-                 testAttribute(Qt::WA_Maemo5LandscapeOrientation));
-#endif // Q_WS_MAEMO_5
-    QWidget::showFullScreen();
-    restoreButton->flash();
+    Trace t("FullScreenWindow::showFullScreen");
+    AdopterWindow::showFullScreen();
+    placeChildren();
 }
 
-void FullScreenWindow::MOUSE_ACTIVATE_EVENT(QMouseEvent *event)
+void FullScreenWindow::resizeEvent(QResizeEvent *e)
 {
-    if (fullScreenZone().contains(event->x(), event->y())) {
-        emit restore();
-    }
-    QMainWindow::MOUSE_ACTIVATE_EVENT(event);
+    Trace t("FullScreenWindow::resizeEvent");
+    QTimer::singleShot(100, this, SLOT(placeChildren()));
+    AdopterWindow::resizeEvent(e);
 }
 
-QRect FullScreenWindow::fullScreenZone() const
+void FullScreenWindow::takeChildren(BookView *view,
+                                    Progress *prog,
+                                    TranslucentButton *previous,
+                                    TranslucentButton *next)
 {
-    return QRect(width() / 2 - 45, height() - 104, 95, 95);
+    TRACE;
+    progress = prog;
+    previousButton = previous;
+    nextButton = next;
+    QList<QWidget *> otherChildren;
+    otherChildren << progress << previousButton << nextButton;
+    AdopterWindow::takeChildren(view, otherChildren);
 }
 
-void FullScreenWindow::resizeEvent(QResizeEvent *e)
+void FullScreenWindow::placeChildren()
 {
-    restoreButton->setGeometry(fullScreenZone());
-    QMainWindow::resizeEvent(e);
-}
+    Trace t("FullScreenWindow::placeChildren");
 
-void FullScreenWindow::takeChild(QWidget *c)
-{
-    leaveChild();
-    if (c) {
-        child = c;
-        child->setParent(centralWidget());
-        centralWidget()->layout()->addWidget(child);
+    QRect screen = QApplication::desktop()->screenGeometry();
+    int w = screen.width();
+    int h = screen.height();
+
+#ifdef Q_WS_MAEMO_5
+    // Hack: FullScreenWindow can lose orientation on Maemo...
+    QString orientation = Settings::instance()->value("orientation",
+        Platform::instance()->defaultOrientation()).toString();
+    if (((orientation == "portrait") && (w > h)) ||
+        ((orientation == "landscape") && (w < h))) {
+        int tmp = w;
+        w = h;
+        h = tmp;
     }
-}
+#endif // Q_WS_MAEMO_5
 
-void FullScreenWindow::leaveChild()
-{
-    if (child) {
-        centralWidget()->layout()->removeWidget(child);
-        child = 0;
+    restoreButton->setGeometry(
+        w - TranslucentButton::pixels - MARGIN,
+        h - TranslucentButton::pixels - MARGIN,
+        TranslucentButton::pixels,
+        TranslucentButton::pixels);
+
+    if (hasChild(progress)) {
+        progress->setGeometry(0, h - progress->thickness(),
+                              w, progress->thickness());
+        qDebug() << "Screen (FullScreenWindow::resizeEvent)" << w << "x" << h;
+        qDebug() << "Progress (FullScreenWindow::resizeEvent)"
+                << progress->geometry();
+    }
+    if (hasChild(previousButton)) {
+        previousButton->setGeometry(
+                MARGIN,
+                h - TranslucentButton::pixels - MARGIN,
+                TranslucentButton::pixels,
+                TranslucentButton::pixels);
     }
+    if (hasChild(nextButton)) {
+        nextButton->setGeometry(
+        w - TranslucentButton::pixels - MARGIN,
+        MARGIN,
+        TranslucentButton::pixels,
+        TranslucentButton::pixels);
+    }
+
+    restoreButton->flash(3000);
 }