1 #include <QtDeclarative>
\r
3 #include <QtGui/QX11Info>
\r
4 #include <X11/Xlib.h>
\r
5 #include <X11/Xatom.h>
\r
6 #include <X11/Xutil.h>
\r
7 #include "quickwidget.hpp"
\r
9 #define SETTING_QUICK_FILE "QuickWidgetFile"
\r
10 #define SETTING_QUICK_SIZE "QuickWidgetSize"
\r
11 #define SETTING_SAVE_WAITINTERVAL 3000
\r
13 static Atom onCurrentHomescreenAtom;
\r
14 static bool _atomsInitialized = false;
\r
16 QuickWidget *QuickWidget::createAndShowNew(const QString& fileName, const QSize& size)
\r
18 QuickWidget *widget = new QuickWidget;
\r
19 widget->initView(fileName, size);
\r
21 QeMaemo5DynamicWidgetHelper::globalInstance()->registerWidget(widget);
\r
25 void QuickWidget::initView(const QString& fileName, const QSize& size)
\r
28 saveSetting(SETTING_QUICK_FILE, fileName);
\r
29 saveSetting(SETTING_QUICK_SIZE, size_);
\r
30 view_->setSource(QUrl::fromLocalFile(fileName));
\r
31 if ( view_->status() == QDeclarativeView::Error) {
\r
34 else if (size_.isValid())
\r
36 // use given fixed size and scale to it
\r
37 qDebug() << "scaling";
\r
38 view_->setResizeMode(QDeclarativeView::SizeRootObjectToView);
\r
42 size_ = view_->sceneRect().size().toSize();
\r
44 view_->setFixedSize(size_);
\r
49 QuickWidget::QuickWidget(QWidget *parent)
\r
50 : QeMaemo5DynamicHomescreenWidget(true, parent),
\r
54 if (!_atomsInitialized) {
\r
55 onCurrentHomescreenAtom = XInternAtom(QX11Info::display(),
\r
56 "_HILDON_APPLET_ON_CURRENT_DESKTOP",
\r
58 _atomsInitialized = true;
\r
60 view_ = new QDeclarativeView(this);
\r
61 view_->setStyleSheet("background:transparent");
\r
62 view_->setAttribute(Qt::WA_TranslucentBackground);
\r
63 wrapper_ = new QuickWidgetWrapper(this);
\r
64 view_->rootContext()->setContextProperty("runtime", wrapper_);
\r
68 QuickWidget::~QuickWidget()
\r
73 bool QuickWidget::x11Event(XEvent *event)
\r
75 bool passon = QeMaemo5DynamicHomescreenWidget::x11Event(event);
\r
77 if (event->xclient.message_type == onCurrentHomescreenAtom)
\r
79 bool visible = isVisibleOnCurrentHomescreen() ;
\r
80 if (visible != wrapper_->onHomeScreen())
\r
82 wrapper_->setOnHomeScreen(visible);
\r
88 bool QuickWidget::restoreWidgetState()
\r
90 QString fileName = loadSetting(SETTING_QUICK_FILE).toString();
\r
91 QSize size = loadSetting(SETTING_QUICK_SIZE, QSize()).value<QSize>();
\r
92 initView(fileName, size);
\r
96 void QuickWidget::errorWidget()
\r
98 const QList<QDeclarativeError>& errs = view_->errors();
\r
101 QTextStream qts(&errmsg);
\r
102 qts << "import Qt 4.7" << endl
\r
103 << "Rectangle { width: 200; height: txt.height; color: \"#ff0000\"; radius: 8" << endl
\r
104 << "Text { id: txt; anchors.centerIn: parent; text: \"";
\r
105 for (int i = 0; i < errs.size(); ++i) {
\r
106 qts << errs.at(i).toString().replace(QString("\""), QString("\\\"")) <<
\r
109 qts << "\"; font.pixelSize: 15; wrapMode: Text.Wrap; width: parent.width-20}" << endl
\r
111 qDebug() << errmsg;
\r
112 QDeclarativeComponent component(view_->engine());
\r
113 component.setData(errmsg, QUrl());
\r
114 qDebug() << component.errorString();
\r
115 QDeclarativeItem *errwdgt =
\r
116 qobject_cast<QDeclarativeItem*>(component.create(view_->rootContext()));
\r
117 view_->scene()->addItem(errwdgt);
\r
118 size_ = QSize(errwdgt->width(), errwdgt->height());
\r