1 #include <QtDeclarative>
3 #include <QtGui/QX11Info>
7 #include "quickwidget.hpp"
9 #define SETTING_QUICK_FILE "QuickWidgetFile"
10 #define SETTING_QUICK_SIZE "QuickWidgetSize"
11 #define SETTING_SAVE_WAITINTERVAL 3000
13 static Atom onCurrentHomescreenAtom;
14 static bool _atomsInitialized = false;
16 QuickWidget *QuickWidget::createAndShowNew(const QString& fileName,
19 QuickWidget *widget = new QuickWidget;
20 widget->initView(fileName, size);
22 QeMaemo5DynamicWidgetHelper::globalInstance()->registerWidget(widget);
26 void QuickWidget::initView(const QString& fileName, const QSize& size)
29 saveSetting(SETTING_QUICK_FILE, fileName);
30 saveSetting(SETTING_QUICK_SIZE, size_);
31 view_->setSource(QUrl::fromLocalFile(fileName));
32 if ( view_->status() == QDeclarativeView::Error) {
35 else if (size_.isValid())
37 // use given fixed size and scale to it
38 qDebug() << "scaling";
39 view_->setResizeMode(QDeclarativeView::SizeRootObjectToView);
43 size_ = view_->sceneRect().size().toSize();
45 connect(view_, SIGNAL(sceneResized(QSize)), this, SLOT(resizer(QSize)));
51 QuickWidget::QuickWidget(QWidget *parent)
52 : QeMaemo5DynamicHomescreenWidget(true, parent),
56 if (!_atomsInitialized) {
57 onCurrentHomescreenAtom = XInternAtom(QX11Info::display(),
58 "_HILDON_APPLET_ON_CURRENT_DESKTOP",
60 _atomsInitialized = true;
62 //layout()->setSizeConstraint(QLayout::SetNoConstraint);
63 view_ = new QDeclarativeView(this);
64 view_->engine()->addImportPath(QString("/opt/qtm12/imports"));
65 view_->setStyleSheet("background:transparent");
66 view_->setAttribute(Qt::WA_TranslucentBackground);
67 wrapper_ = new QuickWidgetWrapper(this);
68 view_->rootContext()->setContextProperty("runtime", wrapper_);
71 QuickWidget::~QuickWidget()
76 bool QuickWidget::x11Event(XEvent *event)
78 bool passon = QeMaemo5DynamicHomescreenWidget::x11Event(event);
80 if (event->xclient.message_type == onCurrentHomescreenAtom)
82 bool visible = isVisibleOnCurrentHomescreen() ;
83 if (visible != wrapper_->onHomeScreen())
85 wrapper_->setOnHomeScreen(visible);
91 bool QuickWidget::restoreWidgetState()
93 QString fileName = loadSetting(SETTING_QUICK_FILE).toString();
94 QSize size = loadSetting(SETTING_QUICK_SIZE, QSize()).value<QSize>();
95 initView(fileName, size);
99 void QuickWidget::errorWidget()
101 const QList<QDeclarativeError>& errs = view_->errors();
104 QTextStream qts(&errmsg);
105 qts << "import Qt 4.7" << endl
106 << "Rectangle { width: 200; height: txt.height; color: \"#ff0000\"; radius: 8" << endl
107 << "Text { id: txt; anchors.centerIn: parent; text: \"";
108 for (int i = 0; i < errs.size(); ++i) {
109 qts << errs.at(i).toString().replace(QString("\""), QString("\\\"")) <<
112 qts << "\"; font.pixelSize: 15; wrapMode: Text.Wrap; width: parent.width-20}" << endl
115 QDeclarativeComponent component(view_->engine());
116 component.setData(errmsg, QUrl());
117 qDebug() << component.errorString();
118 QDeclarativeItem *errwdgt =
119 qobject_cast<QDeclarativeItem*>(component.create(view_->rootContext()));
120 view_->scene()->addItem(errwdgt);
121 size_ = QSize(errwdgt->width(), errwdgt->height());
124 void QuickWidget::paintEvent(QPaintEvent *event)
126 QWidget::paintEvent(event);
129 void QuickWidget::resizer( QSize size)