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
134
135
136
|
/*
* SPDX-FileCopyrightText: 2010 Peter Penz <[email protected]>
* SPDX-FileCopyrightText: 2008 Fredrik Höglund <[email protected]>
* SPDX-FileCopyrightText: 2012 Mark Gaiser <[email protected]>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "dolphinfilemetadatawidget.h"
#include <KColorScheme>
#include <KSeparator>
#include <KStringHandler>
#include <Baloo/FileMetaDataWidget>
#include <QLabel>
#include <QStyleOptionFrame>
#include <QStylePainter>
#include <QTextDocument>
#include <QTextLayout>
#include <QVBoxLayout>
DolphinFileMetaDataWidget::DolphinFileMetaDataWidget(QWidget* parent) :
QWidget(parent),
m_preview(nullptr),
m_name(nullptr),
m_fileMetaDataWidget(nullptr)
{
// Create widget for file preview
m_preview = new QLabel(this);
m_preview->setAlignment(Qt::AlignTop);
// Create widget for file name
m_name = new QLabel(this);
m_name->setForegroundRole(QPalette::ToolTipText);
m_name->setTextFormat(Qt::PlainText);
m_name->setAlignment(Qt::AlignHCenter);
QFont font = m_name->font();
font.setBold(true);
m_name->setFont(font);
QFontMetrics fontMetrics(font);
m_name->setMaximumWidth(fontMetrics.averageCharWidth() * 40);
// Create widget for the meta data
m_fileMetaDataWidget = new Baloo::FileMetaDataWidget(this);
connect(m_fileMetaDataWidget, &Baloo::FileMetaDataWidget::metaDataRequestFinished,
this, &DolphinFileMetaDataWidget::metaDataRequestFinished);
connect(m_fileMetaDataWidget, &Baloo::FileMetaDataWidget::urlActivated,
this, &DolphinFileMetaDataWidget::urlActivated);
m_fileMetaDataWidget->setForegroundRole(QPalette::ToolTipText);
m_fileMetaDataWidget->setReadOnly(true);
QVBoxLayout* textLayout = new QVBoxLayout();
textLayout->addWidget(m_name);
textLayout->addWidget(new KSeparator());
textLayout->addWidget(m_fileMetaDataWidget);
textLayout->setAlignment(m_name, Qt::AlignCenter);
textLayout->setAlignment(m_fileMetaDataWidget, Qt::AlignLeft);
// Assure that the text-layout gets top-aligned by adding a stretch.
// Don't use textLayout->setAlignment(Qt::AlignTop) instead, as this does
// not work with the heightForWidth()-size-hint of m_fileMetaDataWidget
// (see bug #241608)
textLayout->addStretch();
QHBoxLayout* layout = new QHBoxLayout(this);
layout->addWidget(m_preview);
layout->addSpacing(layout->contentsMargins().left());
layout->addLayout(textLayout);
}
DolphinFileMetaDataWidget::~DolphinFileMetaDataWidget()
{
}
void DolphinFileMetaDataWidget::setPreview(const QPixmap& pixmap)
{
m_preview->setPixmap(pixmap);
}
QPixmap DolphinFileMetaDataWidget::preview() const
{
if (!m_preview->pixmap(Qt::ReturnByValue).isNull()) {
return m_preview->pixmap(Qt::ReturnByValue);
}
return QPixmap();
}
void DolphinFileMetaDataWidget::setName(const QString& name)
{
QTextOption textOption;
textOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
const QString processedName = Qt::mightBeRichText(name) ? name : KStringHandler::preProcessWrap(name);
QTextLayout textLayout(processedName);
textLayout.setFont(m_name->font());
textLayout.setTextOption(textOption);
QString wrappedText;
wrappedText.reserve(processedName.length());
// wrap the text to fit into the maximum width of m_name
textLayout.beginLayout();
QTextLine line = textLayout.createLine();
while (line.isValid()) {
line.setLineWidth(m_name->maximumWidth());
wrappedText += QStringView(processedName).mid(line.textStart(), line.textLength());
line = textLayout.createLine();
if (line.isValid()) {
wrappedText += QChar::LineSeparator;
}
}
textLayout.endLayout();
m_name->setText(wrappedText);
}
QString DolphinFileMetaDataWidget::name() const
{
return m_name->text();
}
void DolphinFileMetaDataWidget::setItems(const KFileItemList& items)
{
m_fileMetaDataWidget->setItems(items);
}
KFileItemList DolphinFileMetaDataWidget::items() const
{
return m_fileMetaDataWidget->items();
}
|