1 #include <QtDeclarative>
4 #include <mce/dbus-names.h>
5 #include <mce/mode-names.h>
6 #include <QtDBus/QDBusConnection>
7 #include <QtDBus/QDBusMessage>
9 #include "quickwidget.hpp"
11 #define SETTING_QUICK_FILE "QuickWidgetFile"
12 #define SETTING_QUICK_SIZE "QuickWidgetSize"
13 #define SETTING_QUICK_ROTATE "QuickWidgetRotate"
14 #define SETTING_SAVE_WAITINTERVAL 3000
17 QuickWidget *QuickWidget::createAndShowNew(const QString& fileName,
21 QuickWidget *widget = new QuickWidget;
22 widget->initView(fileName, size, rotate);
24 QeMaemo5DynamicWidgetHelper::globalInstance()->registerWidget(widget);
28 void QuickWidget::initView(const QString& fileName, const QSize& size, bool rotate)
31 saveSetting(SETTING_QUICK_FILE, fileName);
32 saveSetting(SETTING_QUICK_SIZE, size_);
33 saveSetting(SETTING_QUICK_ROTATE, rotate);
34 view_->setSource(QUrl::fromLocalFile(fileName));
35 if ( view_->status() == QDeclarativeView::Error) {
38 else if (size_.isValid())
40 // use given fixed size and scale to it
41 qDebug() << "scaling";
42 view_->setResizeMode(QDeclarativeView::SizeRootObjectToView);
46 size_ = view_->sceneRect().size().toSize();
48 connect(view_, SIGNAL(sceneResized(QSize)), this, SLOT(resizer(QSize)));
52 QDBusConnection::systemBus() \
53 .call(QDBusMessage::createMethodCall(MCE_SERVICE,
56 MCE_ACCELEROMETER_ENABLE_REQ));
57 QDBusConnection::systemBus().connect(QString(), MCE_SIGNAL_PATH, MCE_SIGNAL_IF,
58 MCE_DEVICE_ORIENTATION_SIG,
59 this, SLOT(rotateScreen(QString)));
63 void QuickWidget::rotateScreen(const QString& orientation) {
66 if (orientation == QLatin1String(MCE_ORIENTATION_PORTRAIT) ||
67 orientation == QLatin1String(MCE_ORIENTATION_PORTRAIT_INVERTED)) {
84 QuickWidget::QuickWidget(QWidget *parent)
85 : QeMaemo5DynamicHomescreenWidget(true, parent),
90 //layout()->setSizeConstraint(QLayout::SetNoConstraint);
91 view_ = new QDeclarativeView(this);
92 view_->engine()->addImportPath(QString("/opt/qtm12/imports"));
93 view_->setStyleSheet("background:transparent");
94 view_->setAttribute(Qt::WA_TranslucentBackground);
95 wrapper_ = new QuickWidgetWrapper(this);
96 connect(this, SIGNAL(isVisibleOnCurrentHomescreenChanged(bool)),
97 wrapper_, SLOT(setOnHomeScreen(bool)));
98 view_->rootContext()->setContextProperty("runtime", wrapper_);
102 QuickWidget::~QuickWidget()
105 QDBusConnection::systemBus().call(QDBusMessage::createMethodCall(MCE_SERVICE,
108 MCE_ACCELEROMETER_DISABLE_REQ));
114 bool QuickWidget::restoreWidgetState()
116 QString fileName = loadSetting(SETTING_QUICK_FILE).toString();
117 QSize size = loadSetting(SETTING_QUICK_SIZE, QSize()).value<QSize>();
118 bool rotate = loadSetting(SETTING_QUICK_ROTATE).toBool();
119 initView(fileName, size, rotate);
123 void QuickWidget::errorWidget()
125 const QList<QDeclarativeError>& errs = view_->errors();
128 QTextStream qts(&errmsg);
129 qts << "import Qt 4.7" << endl
130 << "Rectangle { width: 200; height: txt.height; color: \"#ff0000\"; radius: 8" << endl
131 << "Text { id: txt; anchors.centerIn: parent; text: \"";
132 for (int i = 0; i < errs.size(); ++i) {
133 qts << errs.at(i).toString().replace(QString("\""), QString("\\\"")) <<
136 qts << "\"; font.pixelSize: 15; wrapMode: Text.Wrap; width: parent.width-20}" << endl
139 QDeclarativeComponent component(view_->engine());
140 component.setData(errmsg, QUrl());
141 qDebug() << component.errorString();
142 QDeclarativeItem *errwdgt =
143 qobject_cast<QDeclarativeItem*>(component.create(view_->rootContext()));
144 view_->scene()->addItem(errwdgt);
145 size_ = QSize(errwdgt->width(), errwdgt->height());
148 void QuickWidget::resizer(const QSize& size)