Restored overwriting paintEvent.
[quick-widgets] / quickwidget.cpp
index 9c9dffd..2c72a3b 100644 (file)
@@ -1,33 +1,36 @@
 #include <QtDeclarative>
 #include <QtMaemo5>
-#include <QtGui/QX11Info>
-#include <X11/Xlib.h>
-#include <X11/Xatom.h>
-#include <X11/Xutil.h>
+
+#include <mce/dbus-names.h>
+#include <mce/mode-names.h>
+#include <QtDBus/QDBusConnection>
+#include <QtDBus/QDBusMessage>
+
 #include "quickwidget.hpp"
 
 #define SETTING_QUICK_FILE "QuickWidgetFile"
 #define SETTING_QUICK_SIZE "QuickWidgetSize"
+#define SETTING_QUICK_ROTATE "QuickWidgetRotate"
 #define SETTING_SAVE_WAITINTERVAL 3000
 
-static Atom onCurrentHomescreenAtom;
-static bool _atomsInitialized = false;
 
 QuickWidget *QuickWidget::createAndShowNew(const QString& fileName, 
-                                          const QSize& size)
+                                          const QSize& size,
+                                          bool rotate)
 {
     QuickWidget *widget = new QuickWidget;
-    widget->initView(fileName, size);
+    widget->initView(fileName, size, rotate);
     widget->show();
     QeMaemo5DynamicWidgetHelper::globalInstance()->registerWidget(widget);
     return widget;
 }
 
-void QuickWidget::initView(const QString& fileName, const QSize& size)
+void QuickWidget::initView(const QString& fileName, const QSize& size, bool rotate)
 {
     size_ = size;
     saveSetting(SETTING_QUICK_FILE, fileName);
     saveSetting(SETTING_QUICK_SIZE, size_);
+    saveSetting(SETTING_QUICK_ROTATE, rotate);
     view_->setSource(QUrl::fromLocalFile(fileName));
     if ( view_->status() == QDeclarativeView::Error) {
         errorWidget();
@@ -40,59 +43,80 @@ void QuickWidget::initView(const QString& fileName, const QSize& size)
     }
     else
     {
-        size_ = view_->sceneRect().size().toSize();
+      size_ = view_->sceneRect().size().toSize();
     }    
     connect(view_, SIGNAL(sceneResized(QSize)), this, SLOT(resizer(QSize)));
-
+    qDebug() << size_;
     view_->resize(size_);
-    view_->show();
+    if (rotate) {
+      QDBusConnection::systemBus()                     \
+       .call(QDBusMessage::createMethodCall(MCE_SERVICE, 
+                                            MCE_REQUEST_PATH, 
+                                            MCE_REQUEST_IF, 
+                                            MCE_ACCELEROMETER_ENABLE_REQ));
+      QDBusConnection::systemBus().connect(QString(), MCE_SIGNAL_PATH, MCE_SIGNAL_IF,
+                                          MCE_DEVICE_ORIENTATION_SIG, 
+                                          this, SLOT(rotateScreen(QString)));
+    }
+}
+
+void QuickWidget::rotateScreen(const QString& orientation) {
+
+  qreal angle = 90;
+  if (orientation == QLatin1String(MCE_ORIENTATION_PORTRAIT) ||
+      orientation == QLatin1String(MCE_ORIENTATION_PORTRAIT_INVERTED)) {
+    if (!landscape_) {
+      return;
+    }
+    angle = -90;
+    landscape_ = false;
+  } else {
+    if (landscape_) {
+      return;
+    }
+    landscape_ = true;
+  }
+  size_.transpose();
+  view_->resize(size_);
+  view_->rotate(angle);
 }
 
 QuickWidget::QuickWidget(QWidget *parent)
     : QeMaemo5DynamicHomescreenWidget(true, parent),
-    size_(QSize()),
-    view_(0)
+      size_(QSize()),
+      view_(0),
+      wrapper_(0)
 {
-    if (!_atomsInitialized) {
-       onCurrentHomescreenAtom = XInternAtom(QX11Info::display(),
-                                             "_HILDON_APPLET_ON_CURRENT_DESKTOP",
-                                             false);
-       _atomsInitialized = true;
-    }
     //layout()->setSizeConstraint(QLayout::SetNoConstraint);
     view_ = new QDeclarativeView(this);
     view_->engine()->addImportPath(QString("/opt/qtm12/imports"));
     view_->setStyleSheet("background:transparent");
     view_->setAttribute(Qt::WA_TranslucentBackground);
     wrapper_ = new QuickWidgetWrapper(this);
+    connect(this, SIGNAL(isVisibleOnCurrentHomescreenChanged(bool)), 
+           wrapper_, SLOT(setOnHomeScreen(bool)));
     view_->rootContext()->setContextProperty("runtime", wrapper_);
+    landscape_ = true;
 }
 
 QuickWidget::~QuickWidget()
 {
-    delete wrapper_;
+
+  QDBusConnection::systemBus().call(QDBusMessage::createMethodCall(MCE_SERVICE, 
+                                                                  MCE_REQUEST_PATH, 
+                                                                  MCE_REQUEST_IF, 
+                                                                  MCE_ACCELEROMETER_DISABLE_REQ));
+      delete wrapper_;
 }
 
-bool QuickWidget::x11Event(XEvent *event)
-{
-    bool passon = QeMaemo5DynamicHomescreenWidget::x11Event(event);
 
-    if (event->xclient.message_type == onCurrentHomescreenAtom)
-    {
-        bool visible = isVisibleOnCurrentHomescreen() ;
-        if (visible != wrapper_->onHomeScreen())
-        {
-            wrapper_->setOnHomeScreen(visible);
-        }
-    }
-    return passon;
-}
 
 bool QuickWidget::restoreWidgetState()
 {
     QString fileName = loadSetting(SETTING_QUICK_FILE).toString();
     QSize size = loadSetting(SETTING_QUICK_SIZE, QSize()).value<QSize>();
-    initView(fileName, size);
+    bool rotate = loadSetting(SETTING_QUICK_ROTATE).toBool();
+    initView(fileName, size, rotate);
     return true;
 }
 
@@ -120,17 +144,17 @@ endl;
     view_->scene()->addItem(errwdgt);
     size_ = QSize(errwdgt->width(), errwdgt->height());
 }
-    
+
+//disable base class widget's paint method
 void QuickWidget::paintEvent(QPaintEvent *event)
 {
     QWidget::paintEvent(event);
 }
 
-void QuickWidget::resizer( QSize size)
+void QuickWidget::resizer(const QSize& size)
 {
   if (size_.isValid())
   {
       resize(size);
   }
 }
-