This file is indexed.

/usr/lib/x86_64-linux-gnu/qt5/qml/Ubuntu/Settings/Components/MessageHeader.qml is in qtdeclarative5-ubuntu-settings-components 0.7+16.04.20160321.1-0ubuntu1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
 * Copyright 2013 Canonical Ltd.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; version 3.
 *
 * 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 Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * Authors:
 *      Renato Araujo Oliveira Filho <renato@canonical.com>
 *      Olivier Tilloy <olivier.tilloy@canonical.com>
 */

import QtQuick 2.4
import Ubuntu.Components 1.3
import QtQuick.Layouts 1.1

Item {
    id: messageHeader

    property alias avatar: avatarImage.source
    property alias icon: iconImage.source
    property alias title: titleText.text
    property alias time: timeText.text
    property alias body: bodyText.text

    signal iconClicked()

    implicitHeight: layout.height

    function shakeIcon() {
        shake.restart();
    }

    RowLayout {
        id: layout
        anchors {
            left: parent.left
            right: parent.right
            rightMargin: units.gu(4)
        }
        spacing: units.gu(2)

        UbuntuShapeForItem {
            Layout.preferredWidth: units.gu(6)
            Layout.preferredHeight: units.gu(6)

            image: avatarImage
            Icon {
                id: avatarImage
                objectName: "avatar"

                color: {
                    if (String(source).match(/^image:\/\/theme/)) {
                        return theme.palette.normal.backgroundText;
                    }
                    return Qt.rgba(0.0, 0.0, 0.0, 0.0);
                }
            }
        }

        ColumnLayout {
            Label {
                id: titleText
                objectName: "title"

                maximumLineCount: 1
                elide: Text.ElideRight
                font.weight: Font.DemiBold
                fontSize: "medium"

                Layout.fillWidth: true
                // calculate width with regard to the time's incursion into this layout's space.
                Layout.maximumWidth: layout.width - timeLayout.width - units.gu(4)
            }
            spacing: units.gu(0.5)

            Label {
                id: bodyText
                objectName: "body"

                maximumLineCount: 3
                wrapMode: Text.WordWrap
                elide: Text.ElideRight
                fontSize: "small"

                Layout.fillWidth: true
            }
        }
    }

    ColumnLayout {
        id: timeLayout
        anchors.right: parent.right

        Label {
            id: timeText
            objectName: "time"
            anchors.right: parent.right

            fontSize: "x-small"
            maximumLineCount: 1
        }
        spacing: units.gu(0.5)

        Icon {
            id: iconImage
            objectName: "icon"
            Layout.preferredHeight: units.gu(3)
            Layout.preferredWidth: units.gu(3)
            Layout.alignment: Qt.AlignRight
            color: theme.palette.normal.backgroundText

            MouseArea {
                anchors.fill: parent
                onClicked: messageHeader.iconClicked()
            }

            SequentialAnimation {
                id: shake
                PropertyAnimation { target: iconImage; property: "rotation"; duration: 50; to: -20 }
                SpringAnimation { target: iconImage; property: "rotation"; from: -20; to: 0; mass: 0.5; spring: 15; damping: 0.1 }
            }
        }
    }
}