NewsDelegate.qml Example File | Qt Quick 5.5

- Qt 5.5
- Qt Quick
- Qt Quick Demo - RSS News
- NewsDelegate.qml Example File
- Qt 5.5.1 Reference Documentation

# NewsDelegate.qml Example File

demos/rssnews/content/NewsDelegate.qml

    /****************************************************************************
    **
    ** Copyright (C) 2015 The Qt Company Ltd.
    ** Contact: http://www.qt.io/licensing/
    **
    ** This file is part of the examples of the Qt Toolkit.
    **
    ** $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 The Qt Company Ltd 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$
    **
    ****************************************************************************/

    import QtQuick 2.2

    Column {
        id: delegate
        width: delegate.ListView.view.width
        spacing: 8

        // Returns a string representing how long ago an event occurred
        function timeSinceEvent(pubDate) {
            var result = pubDate;

            // We need to modify the pubDate read from the RSS feed
            // so the JavaScript Date object can interpret it
            var d = pubDate.replace(',','').split(' ');
            if (d.length != 6)
                return result;

            var date = new Date([d[0], d[2], d[1], d[3], d[4], 'GMT' + d[5]].join(' '));

            if (!isNaN(date.getDate())) {
                var age = new Date() - date;
                var minutes = Math.floor(Number(age) / 60000);
                if (minutes < 1440) {
                    if (minutes < 2)
                        result = qsTr("Just now");
                    else if (minutes < 60)
                        result = '' + minutes + ' ' + qsTr("minutes ago")
                    else if (minutes < 120)
                        result = qsTr("1 hour ago");
                    else
                        result = '' + Math.floor(minutes/60) + ' ' + qsTr("hours ago");
                }
                else {
                    result = date.toDateString();
                }
            }
            return result;
        }

        Item { height: 8; width: delegate.width }

        Row {
            width: parent.width
            spacing: 8

            Column {
                Item {
                    width: 4
                    height: titleText.font.pixelSize / 4
                }

                Image {
                    id: titleImage
                    source: image
                }
            }

            Text {
                id: titleText

                text: title
                width: delegate.width - titleImage.width
                wrapMode: Text.WordWrap
                font.pixelSize: 26
                font.bold: true
            }
        }

        Text {
            width: delegate.width
            font.pixelSize: 12
            textFormat: Text.RichText
            font.italic: true
            text: timeSinceEvent(pubDate) + " (<a href=\"" + link + "\">Link</a>)"
            onLinkActivated: {
                Qt.openUrlExternally(link)
            }
        }

        Text {
            id: descriptionText

            text: description
            width: parent.width
            wrapMode: Text.WordWrap
            font.pixelSize: 14
            textFormat: Text.StyledText
            horizontalAlignment: Qt.AlignLeft
        }
    }