#ifndef SCROLLAREA_H
#define SCROLLAREA_H
-#include <QScrollArea>
-#include <QLabel>
-#include <QTimer>
+#include "fullscreenexitbutton.h"
+
+#include <QtGui>
//fixes tearing during scrolling and can display messages
-class ScrollArea : public QScrollArea {
+class ScrollArea : public QScrollArea
+{
+ Q_OBJECT
public:
- ScrollArea(QWidget *parent):
- QScrollArea(parent)
- {
- message.setParent(this);
- message.setVisible(false);
- message.setAlignment(Qt::AlignCenter);
- message.setWordWrap(true);
+ explicit ScrollArea(QWidget *parent):
+ QScrollArea(parent),
+ message(this),
+ fullscreen_exit_button(parent) //owned by parent!
+ {
+ message.setVisible(false);
+ message.setAlignment(Qt::AlignCenter);
+ message.setWordWrap(true);
+
+ QPalette pal = message.palette();
+ QColor backgroundColor = pal.color(backgroundRole());
+ backgroundColor.setAlpha(128);
+ pal.setColor(backgroundRole(), backgroundColor);
+ message.setPalette(pal);
+ message.setAutoFillBackground(true);
+
+ message_timer.setSingleShot(true);
+ message_timer.setInterval(4000);
+ connect(&message_timer, SIGNAL(timeout()),
+ &message, SLOT(hide()));
+
+ connect(&fullscreen_exit_button, SIGNAL(clicked()),
+ this, SIGNAL(fullscreenButtonClicked()));
+
+ button_reenable_timer.setSingleShot(true);
+ button_reenable_timer.setInterval(500);
+ connect(&button_reenable_timer, SIGNAL(timeout()),
+ &fullscreen_exit_button, SLOT(reenable()));
+
+#ifdef Q_WS_MAEMO_5
+ // disable overshooting because it somehow causes repaint events for the whole widget (slow)
+ QAbstractKineticScroller *scroller = property("kineticScroller").value<QAbstractKineticScroller *>();
+ if (scroller)
+ scroller->setOvershootPolicy(QAbstractKineticScroller::OvershootAlwaysOff);
+#endif
+ }
- QPalette pal = message.palette();
- QColor backgroundColor = pal.color(backgroundRole());
- backgroundColor.setAlpha(128);
- pal.setColor(backgroundRole(), backgroundColor);
- message.setPalette(pal);
- message.setAutoFillBackground(true);
+public slots:
+ void showMessage(const QString &s) {
+ message.setText(s);
+ message.show();
+ message_timer.start();
+ }
- timer.setSingleShot(true);
- timer.setInterval(2500);
- connect(&timer, SIGNAL(timeout()),
- &message, SLOT(hide()));
- }
+ //provided for convenience
+ void showMessage(QString /*title*/, QString msg) { showMessage(msg); }
- void showMessage(const QString &s)
- {
- message.setText(s);
- message.show();
- timer.start();
- }
+signals:
+ void fullscreenButtonClicked();
protected:
- virtual void resizeEvent(QResizeEvent* ev)
- {
- QScrollArea::resizeEvent(ev);
- message.setFixedWidth(width());
- }
- virtual void scrollContentsBy(int dx, int dy)
- {
- QScrollArea::scrollContentsBy(dx, dy);
- if(widget())
- widget()->update(); //update whole widget
- }
+ virtual void resizeEvent(QResizeEvent* ev) {
+ QScrollArea::resizeEvent(ev);
+ message.setFixedWidth(width());
+ }
+ virtual void scrollContentsBy(int dx, int dy) {
+ QScrollArea::scrollContentsBy(dx, dy);
+ if(widget()) {
+ //overlay-widgets slow down scrolling
+ message.hide();
+ fullscreen_exit_button.hide();
+ fullscreen_exit_button.setEnabled(false);
+ button_reenable_timer.start();
+ }
+ }
private:
- QLabel message;
- QTimer timer;
+ QLabel message;
+ QTimer message_timer;
+ FullScreenExitButton fullscreen_exit_button;
+ QTimer button_reenable_timer;
};
#endif