-quick-widgets (0.1.1) unstable; urgency=low
-
+quick-widgets (0.2.2) unstable; urgency=low
+
+ * added unicode support for standard output
+
+ -- Malte Marquarding <malte@marquarding.com> Fri, 11 Mar 2011 15:50:44 +1100
+
+quick-widgets (0.2.1) unstable; urgency=low
+
+ * fixed examples installation failure
+
+ -- Malte Marquarding <malte@marquarding.com> Mon, 22 Nov 2010 16:06:35 +1100
+
+quick-widgets (0.2.0) unstable; urgency=low
+
* Packaging changes
+ * added "quickwidgets Process" qml plugin
+ * added example for plugin
+ * make widget auto-resize from qml content
+ * do not draw widget background, let qml handle this
- -- Malte Marquarding <malte@marquarding.com> Thu, 18 Nov 2010 10:27:43 +1100
+ -- Malte Marquarding <malte@marquarding.com> Mon, 22 Nov 2010 14:46:21 +1100
quick-widgets (0.1.0) unstable; urgency=low
opt/quick-widgets
+opt/quick-widgets/examples
usr/share/applications/hildon
usr/share/pixmaps
etc/event.d
cp "$(CURDIR)/data/quick-widgets" "$(CURDIR)/debian/quick-widgets/etc/event.d/"
cp "$(CURDIR)/data/quick-widgets.desktop" "$(CURDIR)/debian/quick-widgets/usr/share/applications/hildon/"
cp "$(CURDIR)/data/quick-widgets.png" "$(CURDIR)/debian/quick-widgets/usr/share/pixmaps/"
+ cp "$(CURDIR)/data/process.qml" "$(CURDIR)/debian/quick-widgets/opt/quick-widgets/examples"
# Build architecture-independent files here.
-#include <QApplication>\r
-#include <q-extras/qemaemo5dynamicwidgethelper.h>\r
-#include <q-extras/qtsingleapplication.h>\r
-#include <q-extras/qesettingsmanager.h>\r
-#include "quickwidget.hpp"\r
-#include "quickwidgetsettings.hpp"\r
-#include "appeventlistener.hpp"\r
-\r
-int main(int argc, char *argv[])\r
-{\r
- QApplication::setApplicationName("Quick Widgets");\r
- QApplication::setOrganizationName("Marquarding");\r
- // APP_VERSION and APP_BETA are defined in the .pro file\r
- QApplication::setApplicationVersion(QString(APP_VERSION)\r
-#if APP_BETA\r
- + " beta"\r
-#endif\r
- );\r
-\r
- QtSingleApplication app(argc, argv);\r
- qDebug() << "Launched quick widgets app";\r
-\r
- if (app.isRunning())\r
- {\r
- qDebug() << "Another instance of the app is running.";\r
- if (app.arguments().contains("in-background"))\r
- {\r
- qDebug() << "Closing that other instance.";\r
- app.sendMessage(APP_MESSAGE_CLOSE);\r
- }\r
- else\r
- {\r
- qDebug() << "Asking it to offer to create a new widget.";\r
- app.sendMessage(APP_MESSAGE_ADDWIDGET);\r
- return 0;\r
- }\r
- }\r
-\r
- app.setQuitOnLastWindowClosed(false);\r
- AppEventListener::instance();\r
-\r
- if (app.arguments().contains("forget-widgets"))\r
- {\r
- qDebug() << "We were asked to forget all widgets!";\r
- QeMaemo5DynamicWidgetHelper::globalInstance()->forgetAllWidgets();\r
- }\r
- else\r
- {\r
- qDebug() << "Restoring all widgets";\r
- QeMaemo5DynamicWidgetHelper::globalInstance()->restoreWidgets<QuickWidget>();\r
- }\r
-\r
- if (!app.arguments().contains("in-background"))\r
- {\r
- // setting for new widget\r
- QuickWidgetSettings settingsDialog;\r
- settingsDialog.exec();\r
- //app.sendMessage(APP_MESSAGE_ADDWIDGET);\r
- }\r
- return app.exec();\r
-}\r
+#include <QApplication>
+//#include <QDeclarativeEngine>
+#include <QDeclarativeComponent>
+#include <q-extras/qemaemo5dynamicwidgethelper.h>
+#include <q-extras/qtsingleapplication.h>
+#include <q-extras/qesettingsmanager.h>
+#include "ProcessObject.h"
+#include "quickwidget.hpp"
+#include "quickwidgetsettings.hpp"
+#include "appeventlistener.hpp"
+
+int main(int argc, char *argv[])
+{
+ QApplication::setApplicationName("Quick Widgets");
+ QApplication::setOrganizationName("Marquarding");
+ // APP_VERSION and APP_BETA are defined in the .pro file
+ QApplication::setApplicationVersion(QString(APP_VERSION)
+#if APP_BETA
+ + " beta"
+#endif
+ );
+
+ QtSingleApplication app(argc, argv);
+ qmlRegisterType<ProcessObject>("quickwidgets", 1,0, "Process");
+
+ qDebug() << "Launched quick widgets app";
+
+ if (app.isRunning())
+ {
+ qDebug() << "Another instance of the app is running.";
+ if (app.arguments().contains("in-background"))
+ {
+ qDebug() << "Closing that other instance.";
+ app.sendMessage(APP_MESSAGE_CLOSE);
+ }
+ else
+ {
+ qDebug() << "Asking it to offer to create a new widget.";
+ app.sendMessage(APP_MESSAGE_ADDWIDGET);
+ return 0;
+ }
+ }
+
+ app.setQuitOnLastWindowClosed(false);
+ AppEventListener::instance();
+
+ if (app.arguments().contains("forget-widgets"))
+ {
+ qDebug() << "We were asked to forget all widgets!";
+ QeMaemo5DynamicWidgetHelper::globalInstance()->forgetAllWidgets();
+ }
+ else
+ {
+ qDebug() << "Restoring all widgets";
+ QeMaemo5DynamicWidgetHelper::globalInstance()->restoreWidgets<QuickWidget>();
+ }
+
+ if (!app.arguments().contains("in-background"))
+ {
+ // setting for new widget
+ QuickWidgetSettings settingsDialog;
+ settingsDialog.exec();
+ //app.sendMessage(APP_MESSAGE_ADDWIDGET);
+ }
+ return app.exec();
+}
#include <QtCore/QTime>
#include <QtDeclarative/qdeclarative.h>
#include <QtCore/QDebug>
+#include <QtCore/QTextCodec>
#include "ProcessObject.h"
void ProcessObject::processFinished(int exitCode,
QProcess::ExitStatus exitStatus)
{
+ QTextCodec* codec = QTextCodec::codecForName("utf-8");
if (exitStatus == QProcess::NormalExit)
{
if (exitCode == 0)
- {
- QString out(m_process->readAllStandardOutput());
- qDebug() << "normal";
- emit completed(out.trimmed());
+ {
+ QString out = codec->toUnicode(m_process->readAllStandardOutput());
+ qDebug() << "normal";
+ emit completed(out.trimmed());
}
else
{
- QString err(m_process->readAllStandardError());
- qDebug() << "failed";
- emit failed(exitCode, err.trimmed(), m_process->error());
+ QString err = codec->toUnicode(m_process->readAllStandardError());
+ qDebug() << "failed";
+ emit failed(exitCode, err.trimmed(), m_process->error());
}
}
else
{
- QString err(m_process->readAllStandardError());
+ QString err = codec->toUnicode(m_process->readAllStandardError());
qDebug() << "failed";
emit failed(exitCode, err, m_process->error());
}
+++ /dev/null
-plugin qmlprocess
TARGET = quick-widgets
TEMPLATE = app
-VERSION = 0.1.0
+VERSION = 0.2.2
DEFINES += APP_VERSION=\\\"$$VERSION\\\"
DEFINES += APP_BETA
HEADERS += \
quickwidget.hpp \
quickwidgetsettings.hpp \
- appeventlistener.hpp
+ appeventlistener.hpp \
+ ProcessObject.h
+
SOURCES += \
main.cpp\
quickwidget.cpp \
quickwidgetsettings.cpp \
- appeventlistener.cpp
+ appeventlistener.cpp \
+ ProcessObject.cpp
FORMS += \
quickwidgetsettings.ui
-#include <QtDeclarative>\r
-#include <QtMaemo5>\r
-#include <QtGui/QX11Info>\r
-#include <X11/Xlib.h>\r
-#include <X11/Xatom.h>\r
-#include <X11/Xutil.h>\r
-#include "quickwidget.hpp"\r
-\r
-#define SETTING_QUICK_FILE "QuickWidgetFile"\r
-#define SETTING_QUICK_SIZE "QuickWidgetSize"\r
-#define SETTING_SAVE_WAITINTERVAL 3000\r
-\r
-static Atom onCurrentHomescreenAtom;\r
-static bool _atomsInitialized = false;\r
-\r
-QuickWidget *QuickWidget::createAndShowNew(const QString& fileName, const QSize& size)\r
-{\r
- QuickWidget *widget = new QuickWidget;\r
- widget->initView(fileName, size);\r
- widget->show();\r
- QeMaemo5DynamicWidgetHelper::globalInstance()->registerWidget(widget);\r
- return widget;\r
-}\r
-\r
-void QuickWidget::initView(const QString& fileName, const QSize& size)\r
-{\r
- size_ = size;\r
- saveSetting(SETTING_QUICK_FILE, fileName);\r
- saveSetting(SETTING_QUICK_SIZE, size_);\r
- view_->setSource(QUrl::fromLocalFile(fileName));\r
- if ( view_->status() == QDeclarativeView::Error) {\r
- errorWidget();\r
- }\r
- else if (size_.isValid())\r
- {\r
- // use given fixed size and scale to it\r
- qDebug() << "scaling";\r
- view_->setResizeMode(QDeclarativeView::SizeRootObjectToView);\r
- }\r
- else\r
- {\r
- size_ = view_->sceneRect().size().toSize();\r
- }\r
- view_->setFixedSize(size_);\r
- view_->show();\r
-}\r
-\r
-\r
-QuickWidget::QuickWidget(QWidget *parent)\r
- : QeMaemo5DynamicHomescreenWidget(true, parent),\r
- size_(QSize()),\r
- view_(0)\r
-{\r
- if (!_atomsInitialized) {\r
- onCurrentHomescreenAtom = XInternAtom(QX11Info::display(),\r
- "_HILDON_APPLET_ON_CURRENT_DESKTOP",\r
- false);\r
- _atomsInitialized = true;\r
- }\r
- view_ = new QDeclarativeView(this);\r
- view_->setStyleSheet("background:transparent");\r
- view_->setAttribute(Qt::WA_TranslucentBackground);\r
- wrapper_ = new QuickWidgetWrapper(this);\r
- view_->rootContext()->setContextProperty("runtime", wrapper_);\r
-\r
-}\r
-\r
-QuickWidget::~QuickWidget()\r
-{\r
- delete wrapper_;\r
-}\r
-\r
-bool QuickWidget::x11Event(XEvent *event)\r
-{\r
- bool passon = QeMaemo5DynamicHomescreenWidget::x11Event(event);\r
-\r
- if (event->xclient.message_type == onCurrentHomescreenAtom)\r
- {\r
- bool visible = isVisibleOnCurrentHomescreen() ;\r
- if (visible != wrapper_->onHomeScreen())\r
- {\r
- wrapper_->setOnHomeScreen(visible);\r
- }\r
- }\r
- return passon;\r
-}\r
-\r
-bool QuickWidget::restoreWidgetState()\r
-{\r
- QString fileName = loadSetting(SETTING_QUICK_FILE).toString();\r
- QSize size = loadSetting(SETTING_QUICK_SIZE, QSize()).value<QSize>();\r
- initView(fileName, size);\r
- return true;\r
-}\r
-\r
-void QuickWidget::errorWidget()\r
-{\r
- const QList<QDeclarativeError>& errs = view_->errors();\r
- qDebug() << errs;\r
- QByteArray errmsg;\r
- QTextStream qts(&errmsg);\r
- qts << "import Qt 4.7" << endl\r
- << "Rectangle { width: 200; height: txt.height; color: \"#ff0000\"; radius: 8" << endl\r
- << "Text { id: txt; anchors.centerIn: parent; text: \"";\r
- for (int i = 0; i < errs.size(); ++i) {\r
- qts << errs.at(i).toString().replace(QString("\""), QString("\\\"")) <<\r
-endl;\r
- }\r
- qts << "\"; font.pixelSize: 15; wrapMode: Text.Wrap; width: parent.width-20}" << endl\r
- << "}" << endl;\r
- qDebug() << errmsg;\r
- QDeclarativeComponent component(view_->engine());\r
- component.setData(errmsg, QUrl());\r
- qDebug() << component.errorString();\r
- QDeclarativeItem *errwdgt =\r
- qobject_cast<QDeclarativeItem*>(component.create(view_->rootContext()));\r
- view_->scene()->addItem(errwdgt);\r
- size_ = QSize(errwdgt->width(), errwdgt->height());\r
-}\r
+#include <QtDeclarative>
+#include <QtMaemo5>
+#include <QtGui/QX11Info>
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+#include <X11/Xutil.h>
+#include "quickwidget.hpp"
+
+#define SETTING_QUICK_FILE "QuickWidgetFile"
+#define SETTING_QUICK_SIZE "QuickWidgetSize"
+#define SETTING_SAVE_WAITINTERVAL 3000
+
+static Atom onCurrentHomescreenAtom;
+static bool _atomsInitialized = false;
+
+QuickWidget *QuickWidget::createAndShowNew(const QString& fileName,
+ const QSize& size)
+{
+ QuickWidget *widget = new QuickWidget;
+ widget->initView(fileName, size);
+ widget->show();
+ QeMaemo5DynamicWidgetHelper::globalInstance()->registerWidget(widget);
+ return widget;
+}
+
+void QuickWidget::initView(const QString& fileName, const QSize& size)
+{
+ size_ = size;
+ saveSetting(SETTING_QUICK_FILE, fileName);
+ saveSetting(SETTING_QUICK_SIZE, size_);
+ view_->setSource(QUrl::fromLocalFile(fileName));
+ if ( view_->status() == QDeclarativeView::Error) {
+ errorWidget();
+ }
+ else if (size_.isValid())
+ {
+ // use given fixed size and scale to it
+ qDebug() << "scaling";
+ view_->setResizeMode(QDeclarativeView::SizeRootObjectToView);
+ }
+ else
+ {
+ size_ = view_->sceneRect().size().toSize();
+ }
+ connect(view_, SIGNAL(sceneResized(QSize)), this, SLOT(resizer(QSize)));
+
+ view_->resize(size_);
+ view_->show();
+}
+
+QuickWidget::QuickWidget(QWidget *parent)
+ : QeMaemo5DynamicHomescreenWidget(true, parent),
+ size_(QSize()),
+ view_(0)
+{
+ if (!_atomsInitialized) {
+ onCurrentHomescreenAtom = XInternAtom(QX11Info::display(),
+ "_HILDON_APPLET_ON_CURRENT_DESKTOP",
+ false);
+ _atomsInitialized = true;
+ }
+ //layout()->setSizeConstraint(QLayout::SetNoConstraint);
+ view_ = new QDeclarativeView(this);
+ view_->setStyleSheet("background:transparent");
+ view_->setAttribute(Qt::WA_TranslucentBackground);
+ wrapper_ = new QuickWidgetWrapper(this);
+ view_->rootContext()->setContextProperty("runtime", wrapper_);
+}
+
+QuickWidget::~QuickWidget()
+{
+ 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);
+ return true;
+}
+
+void QuickWidget::errorWidget()
+{
+ const QList<QDeclarativeError>& errs = view_->errors();
+ qDebug() << errs;
+ QByteArray errmsg;
+ QTextStream qts(&errmsg);
+ qts << "import Qt 4.7" << endl
+ << "Rectangle { width: 200; height: txt.height; color: \"#ff0000\"; radius: 8" << endl
+ << "Text { id: txt; anchors.centerIn: parent; text: \"";
+ for (int i = 0; i < errs.size(); ++i) {
+ qts << errs.at(i).toString().replace(QString("\""), QString("\\\"")) <<
+endl;
+ }
+ qts << "\"; font.pixelSize: 15; wrapMode: Text.Wrap; width: parent.width-20}" << endl
+ << "}" << endl;
+ qDebug() << errmsg;
+ QDeclarativeComponent component(view_->engine());
+ component.setData(errmsg, QUrl());
+ qDebug() << component.errorString();
+ QDeclarativeItem *errwdgt =
+ qobject_cast<QDeclarativeItem*>(component.create(view_->rootContext()));
+ view_->scene()->addItem(errwdgt);
+ size_ = QSize(errwdgt->width(), errwdgt->height());
+}
+
+void QuickWidget::paintEvent(QPaintEvent *event)
+{
+ QWidget::paintEvent(event);
+}
+
+void QuickWidget::resizer( QSize size)
+{
+ if (size_.isValid())
+ {
+ resize(size);
+ }
+}
+
-#ifndef QUICKWIDGET_HPP\r
-#define QUICKWIDGET_HPP\r
-\r
-#include <QtCore>\r
-#include <QtGui>\r
-#include <q-extras/qemaemo5dynamicwidgethelper.h>\r
-\r
-class QDeclarativeView;\r
-class QuickWidgetWrapper;\r
-\r
-\r
-class QuickWidget : public QeMaemo5DynamicHomescreenWidget\r
-{\r
- Q_OBJECT\r
-\r
-private:\r
- void initView(const QString& fileName, const QSize& size=QSize());\r
- QSize size_;\r
- QDeclarativeView* view_;\r
- QuickWidgetWrapper* wrapper_;\r
-\r
-protected:\r
-// void showSettingsDialog();\r
- bool restoreWidgetState();\r
- void errorWidget();\r
- bool x11Event(XEvent *event);\r
-\r
-public:\r
- static QuickWidget *createAndShowNew(const QString& fileName, const QSize& size=QSize());\r
-\r
- explicit QuickWidget(QWidget *parent = 0);\r
- Q_INVOKABLE bool onHomescreen() { return isVisibleOnCurrentHomescreen(); }\r
- ~QuickWidget();\r
-\r
-};\r
-\r
-class QuickWidgetWrapper : public QObject\r
-{\r
- Q_OBJECT\r
-\r
-public:\r
- QuickWidgetWrapper(QuickWidget *owner) : m_owner(owner) {;}\r
- Q_PROPERTY(bool isActiveWindow READ onHomeScreen NOTIFY onHomeScreenChanged);\r
-\r
- bool onHomeScreen() const { return homeScreen; }\r
-\r
- void setOnHomeScreen(bool active)\r
- {\r
- if (active == homeScreen)\r
- return;\r
- homeScreen = active;\r
- emit onHomeScreenChanged();\r
- }\r
-\r
-Q_SIGNALS:\r
- void onHomeScreenChanged();\r
-\r
-private:\r
- QuickWidget *m_owner;\r
- bool homeScreen;\r
-};\r
-\r
-#endif // QuickWidget_HPP\r
+#ifndef QUICKWIDGET_HPP
+#define QUICKWIDGET_HPP
+
+#include <QtCore>
+#include <QtGui>
+#include <q-extras/qemaemo5dynamicwidgethelper.h>
+
+class QDeclarativeView;
+class QuickWidgetWrapper;
+
+
+class QuickWidget : public QeMaemo5DynamicHomescreenWidget
+{
+ Q_OBJECT
+
+private:
+ void initView(const QString& fileName, const QSize& size=QSize());
+ QSize size_;
+ QDeclarativeView* view_;
+ QuickWidgetWrapper* wrapper_;
+
+protected:
+// void showSettingsDialog();
+ bool restoreWidgetState();
+ void errorWidget();
+ bool x11Event(XEvent *event);
+ void paintEvent(QPaintEvent *event);
+
+public slots:
+ void resizer(QSize size);
+
+public:
+ static QuickWidget *createAndShowNew(const QString& fileName, const QSize& size=QSize());
+
+ explicit QuickWidget(QWidget *parent = 0);
+ Q_INVOKABLE bool onHomescreen() { return isVisibleOnCurrentHomescreen(); }
+ ~QuickWidget();
+
+};
+
+class QuickWidgetWrapper : public QObject
+{
+ Q_OBJECT
+
+Q_SIGNALS:
+ void onHomeScreenChanged();
+
+public:
+ QuickWidgetWrapper(QuickWidget *owner) : m_owner(owner) {;}
+ Q_PROPERTY(bool isActiveWindow READ onHomeScreen NOTIFY onHomeScreenChanged);
+
+ bool onHomeScreen() const { return homeScreen; }
+
+ void setOnHomeScreen(bool active)
+ {
+ if (active == homeScreen)
+ return;
+ homeScreen = active;
+ emit onHomeScreenChanged();
+ }
+
+
+private:
+ QuickWidget *m_owner;
+ bool homeScreen;
+
+
+};
+
+#endif // QuickWidget_HPP