diff --git a/declarativeimports/core/theme.cpp b/declarativeimports/core/theme.cpp index 0976fd5f3..702503d1f 100644 --- a/declarativeimports/core/theme.cpp +++ b/declarativeimports/core/theme.cpp @@ -64,6 +64,8 @@ FontProxy::FontProxy(Plasma::Theme::FontRole role, QObject *parent) this, SIGNAL(weightChanged())); connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()), this, SIGNAL(wordSpacingChanged())); + connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()), + this, SIGNAL(mSizeChanged())); } FontProxy::~FontProxy() @@ -140,6 +142,10 @@ qreal FontProxy::wordSpacing() const return Plasma::Theme::defaultTheme()->font(m_fontRole).wordSpacing(); } +QSize FontProxy::mSize() const +{ + return QFontMetrics(Plasma::Theme::defaultTheme()->font(m_fontRole)).boundingRect("M").size(); +} //********** Theme ************* diff --git a/declarativeimports/core/theme.h b/declarativeimports/core/theme.h index e83e492e2..389cfb5cb 100644 --- a/declarativeimports/core/theme.h +++ b/declarativeimports/core/theme.h @@ -41,6 +41,7 @@ class FontProxy : public QObject Q_PROPERTY(bool underline READ underline NOTIFY underlineChanged ) Q_PROPERTY(Weight weight READ weight NOTIFY weightChanged ) Q_PROPERTY(qreal wordSpacing READ wordSpacing NOTIFY wordSpacingChanged ) + Q_PROPERTY(QSize mSize READ mSize NOTIFY mSizeChanged ) Q_ENUMS(Capitalization) Q_ENUMS(Weight) @@ -80,6 +81,11 @@ public: Weight weight() const; qreal wordSpacing() const; + /** + * @return The size of an uppercase M in this font + */ + QSize mSize() const; + Q_SIGNALS: void boldChanged(); void capitalizationChanged(); @@ -92,6 +98,7 @@ Q_SIGNALS: void underlineChanged(); void weightChanged(); void wordSpacingChanged(); + void mSizeChanged(); private: Plasma::Theme::FontRole m_fontRole; diff --git a/declarativeimports/plasmacomponents/qml/AppManager.js b/declarativeimports/plasmacomponents/qml/AppManager.js new file mode 100644 index 000000000..daed77a05 --- /dev/null +++ b/declarativeimports/plasmacomponents/qml/AppManager.js @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Components project. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +function rootObject() { + var next = parent + while (next && next.parent) + next = next.parent + return next +} + +function findParent(child, propertyName) { + if (!child) + return null + var next = child.parent + while (next && !next.hasOwnProperty(propertyName)) + next = next.parent + return next +} + +function sceneX(item) { + // Binding may cause that this function is evaluated even when item is undefined, + // but in that case the Binding isn't active however so we can safely return 0 + var x = 0 + if (item) { + x = item.x + var p = item.parent + while (p) { + x += p.x + p = p.parent + } + } + return x +} + +function sceneY(item) { + // Binding may cause that this function is evaluated even when item is undefined, + // but in that case the Binding isn't active however so we can safely return 0 + var y = 0 + if (item) { + y = item.y + var p = item.parent + while (p) { + y += p.y + p = p.parent + } + } + return y +}