#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
{
+ Q_OBJECT
public:
- ScrollArea(QWidget *parent):
- QScrollArea(parent) {
- message.setParent(this);
+ 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);
message.setPalette(pal);
message.setAutoFillBackground(true);
- timer.setSingleShot(true);
- timer.setInterval(2500);
- connect(&timer, SIGNAL(timeout()),
+ 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
}
+public slots:
void showMessage(const QString &s) {
message.setText(s);
message.show();
- timer.start();
+ message_timer.start();
}
+
+ //provided for convenience
+ void showMessage(QString /*title*/, QString msg) { showMessage(msg); }
+
+signals:
+ void fullscreenButtonClicked();
protected:
virtual void resizeEvent(QResizeEvent* ev) {
QScrollArea::resizeEvent(ev);
}
virtual void scrollContentsBy(int dx, int dy) {
QScrollArea::scrollContentsBy(dx, dy);
- if(widget())
- widget()->update(); //update whole widget
+ 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;
+ QTimer message_timer;
+ FullScreenExitButton fullscreen_exit_button;
+ QTimer button_reenable_timer;
};
#endif