an item to load icons

still private, load icons either by absolute path, icon name, svg
This commit is contained in:
Marco Martin 2011-10-29 21:19:51 +02:00
parent 9bcc260757
commit be1068709a
3 changed files with 88 additions and 47 deletions

View File

@ -0,0 +1,81 @@
/*
* Copyright (C) 2011 by Marco MArtin <mart@kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as
* published by the Free Software Foundation; either version 2, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Library General Public License for more details
*
* You should have received a copy of the GNU Library General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import QtQuick 1.1
import org.kde.plasma.core 0.1 as PlasmaCore
import org.kde.qtextracomponents 0.1
Item {
id: root
property string iconSource
PlasmaCore.Svg {
id: svgIcon
}
onIconSourceChanged: {
svgIcon.imagePath = "icons/"+root.iconSource.split("-")[0]
if (svgIcon.isValid() && svgIcon.hasElement(root.iconSource)) {
imageLoader.sourceComponent = svgComponent
} else if (root.iconSource.indexOf(".") == -1 && root.iconSource.indexOf(":") == -1) {
imageLoader.sourceComponent = iconComponent
} else {
imageLoader.sourceComponent = imageComponent
}
}
Loader {
id: imageLoader
anchors.fill: parent
Component {
id: svgComponent
PlasmaCore.SvgItem {
svg: svgIcon
elementId: root.iconSource
anchors.fill: parent
}
}
Component {
id: iconComponent
QIconItem {
icon: QIcon(root.iconSource)
smooth: true
anchors.fill: parent
}
}
Component {
id: imageComponent
Image {
source: root.iconSource
sourceSize.width: width
sourceSize.height: height
fillMode: Image.PreserveAspectFit
smooth: true
anchors.fill: parent
}
}
}
}

View File

@ -1,6 +1,5 @@
/****************************************************************************
**
**
** Copyright 2011 Marco Martin <mart@kde.org>
**
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
@ -52,7 +51,7 @@ Item {
property bool checked: internal.tabGroup != null && internal.tabGroup.currentTab == tab
property bool pressed: mouseArea.pressed == true && mouseArea.containsMouse
property alias text: label.text
property alias iconSource: imageLoader.source
property alias iconSource: imageLoader.iconSource
signal clicked
@ -105,58 +104,18 @@ Item {
verticalAlignment: Text.AlignVCenter
}
Loader {
// imageLoader acts as wrapper for Image and Icon items. The Image item is
// shown when the source points to a image (jpg, png). Icon item is used for
// locigal theme icons which are colorised.
IconLoader {
id: imageLoader
property url source
property string iconId: source.toString()
//FIXME: icon sizes in Theme
width : 16
height : 16
sourceComponent: {
if (iconId)
return iconComponent
if (source.toString())
return imageComponent
return undefined
}
anchors {
left: internal.portrait ? undefined : parent.left
horizontalCenter: internal.portrait ? parent.horizontalCenter : undefined
verticalCenter: internal.portrait ? undefined : parent.verticalCenter
}
Component {
id: imageComponent
Image {
id: image
objectName: "image"
source: imageLoader.iconId ? "" : imageLoader.source
sourceSize.width: width
sourceSize.height: height
fillMode: Image.PreserveAspectFit
smooth: true
anchors.fill: parent
}
}
Component {
id: iconComponent
Image {
id: icon
objectName: "icon"
anchors.fill: parent
source: imageLoader.iconId
}
}
}
MouseArea {

View File

@ -17,7 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import QtQuick 1.0
import QtQuick 1.1
import org.kde.plasma.core 0.1 as PlasmaCore
Item {
@ -64,8 +64,9 @@ Item {
button.forceActiveFocus();
}
width: Math.max(50, icon.width + label.paintedWidth + surface.margins.left + surface.margins.right)
height: Math.max(20, Math.max(icon.height, label.paintedHeight) + surface.margins.top + surface.margins.bottom)
implicitWidth: Math.max(50, icon.width + label.paintedWidth + surface.margins.left + surface.margins.right)
implicitHeight: Math.max(20, Math.max(icon.height, label.paintedHeight) + surface.margins.top + surface.margins.bottom)
// TODO: needs to define if there will be specific graphics for
// disabled buttons
opacity: enabled ? 1.0 : 0.5