From 6a44bcee4623e71f67a53c74f166a6bc390f96fe Mon Sep 17 00:00:00 2001 From: mar637 Date: Fri, 11 Mar 2011 15:54:31 +1100 Subject: [PATCH] Commit latest bug fixes --- debian/changelog | 22 ++- debian/dirs | 1 + debian/rules | 1 + main.cpp | 127 +++++++++-------- plugins/qmlprocess/ProcessObject.cpp | 18 +-- plugins/qmlprocess/qmldir | 1 - quick-widgets.pro | 9 +- quickwidget.cpp | 254 ++++++++++++++++++---------------- quickwidget.hpp | 133 +++++++++--------- 9 files changed, 308 insertions(+), 258 deletions(-) delete mode 100644 plugins/qmlprocess/qmldir diff --git a/debian/changelog b/debian/changelog index 11ce80f..65799f0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,24 @@ -quick-widgets (0.1.1) unstable; urgency=low - +quick-widgets (0.2.2) unstable; urgency=low + + * added unicode support for standard output + + -- Malte Marquarding Fri, 11 Mar 2011 15:50:44 +1100 + +quick-widgets (0.2.1) unstable; urgency=low + + * fixed examples installation failure + + -- Malte Marquarding 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 Thu, 18 Nov 2010 10:27:43 +1100 + -- Malte Marquarding Mon, 22 Nov 2010 14:46:21 +1100 quick-widgets (0.1.0) unstable; urgency=low diff --git a/debian/dirs b/debian/dirs index 04f51e1..a5f186d 100644 --- a/debian/dirs +++ b/debian/dirs @@ -1,4 +1,5 @@ opt/quick-widgets +opt/quick-widgets/examples usr/share/applications/hildon usr/share/pixmaps etc/event.d diff --git a/debian/rules b/debian/rules index e0e6660..f1a5ee4 100755 --- a/debian/rules +++ b/debian/rules @@ -55,6 +55,7 @@ install: build 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. diff --git a/main.cpp b/main.cpp index 082d8b8..24a201f 100644 --- a/main.cpp +++ b/main.cpp @@ -1,61 +1,66 @@ -#include -#include -#include -#include -#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); - 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(); - } - - if (!app.arguments().contains("in-background")) - { - // setting for new widget - QuickWidgetSettings settingsDialog; - settingsDialog.exec(); - //app.sendMessage(APP_MESSAGE_ADDWIDGET); - } - return app.exec(); -} +#include +//#include +#include +#include +#include +#include +#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("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(); + } + + if (!app.arguments().contains("in-background")) + { + // setting for new widget + QuickWidgetSettings settingsDialog; + settingsDialog.exec(); + //app.sendMessage(APP_MESSAGE_ADDWIDGET); + } + return app.exec(); +} diff --git a/plugins/qmlprocess/ProcessObject.cpp b/plugins/qmlprocess/ProcessObject.cpp index c1dbdb3..a921af9 100644 --- a/plugins/qmlprocess/ProcessObject.cpp +++ b/plugins/qmlprocess/ProcessObject.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include "ProcessObject.h" @@ -67,24 +68,25 @@ void ProcessObject::processErrored(QProcess::ProcessError error) { 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()); } diff --git a/plugins/qmlprocess/qmldir b/plugins/qmlprocess/qmldir deleted file mode 100644 index 53b91bb..0000000 --- a/plugins/qmlprocess/qmldir +++ /dev/null @@ -1 +0,0 @@ -plugin qmlprocess diff --git a/quick-widgets.pro b/quick-widgets.pro index 019ded9..58889da 100644 --- a/quick-widgets.pro +++ b/quick-widgets.pro @@ -2,7 +2,7 @@ QT += core gui maemo5 declarative TARGET = quick-widgets TEMPLATE = app -VERSION = 0.1.0 +VERSION = 0.2.2 DEFINES += APP_VERSION=\\\"$$VERSION\\\" DEFINES += APP_BETA @@ -10,13 +10,16 @@ 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 diff --git a/quickwidget.cpp b/quickwidget.cpp index 63c9563..6047117 100644 --- a/quickwidget.cpp +++ b/quickwidget.cpp @@ -1,119 +1,135 @@ -#include -#include -#include -#include -#include -#include -#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(); - } - view_->setFixedSize(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; - } - 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(); - initView(fileName, size); - return true; -} - -void QuickWidget::errorWidget() -{ - const QList& 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(component.create(view_->rootContext())); - view_->scene()->addItem(errwdgt); - size_ = QSize(errwdgt->width(), errwdgt->height()); -} +#include +#include +#include +#include +#include +#include +#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(); + initView(fileName, size); + return true; +} + +void QuickWidget::errorWidget() +{ + const QList& 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(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); + } +} + diff --git a/quickwidget.hpp b/quickwidget.hpp index f0a6bd2..a81fb47 100644 --- a/quickwidget.hpp +++ b/quickwidget.hpp @@ -1,63 +1,70 @@ -#ifndef QUICKWIDGET_HPP -#define QUICKWIDGET_HPP - -#include -#include -#include - -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); - -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 - -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(); - } - -Q_SIGNALS: - void onHomeScreenChanged(); - -private: - QuickWidget *m_owner; - bool homeScreen; -}; - -#endif // QuickWidget_HPP +#ifndef QUICKWIDGET_HPP +#define QUICKWIDGET_HPP + +#include +#include +#include + +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 -- 1.7.9.5