X-Git-Url: http://git.maemo.org/git/?p=quick-widgets;a=blobdiff_plain;f=quickwidget.cpp;h=2c72a3bf107e88250b8143dfc3d25d93cd0eadcd;hp=604711730245a5607c0ff4663f7a686a6e60f2bf;hb=refs%2Fheads%2Fmaster;hpb=6a44bcee4623e71f67a53c74f166a6bc390f96fe;ds=inline diff --git a/quickwidget.cpp b/quickwidget.cpp index 6047117..2c72a3b 100644 --- a/quickwidget.cpp +++ b/quickwidget.cpp @@ -1,33 +1,36 @@ #include #include -#include -#include -#include -#include + +#include +#include +#include +#include + #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,58 +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(); - initView(fileName, size); + bool rotate = loadSetting(SETTING_QUICK_ROTATE).toBool(); + initView(fileName, size, rotate); return true; } @@ -119,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); } } -