]>
cloud.milkyroute.net Git - dolphin.git/blob - src/statusbar/statusbarspaceinfo.cpp
2 * SPDX-FileCopyrightText: 2006 Peter Penz (peter.penz@gmx.at) and Patrice Tremblay
4 * SPDX-License-Identifier: GPL-2.0-or-later
7 #include "statusbarspaceinfo.h"
9 #include "config-dolphin.h"
10 #include "diskspaceusagemenu.h"
11 #include "spaceinfoobserver.h"
13 #include <KCapacityBar>
15 #include <KLocalizedString>
17 #include <QHBoxLayout>
18 #include <QToolButton>
20 StatusBarSpaceInfo::StatusBarSpaceInfo(QWidget
*parent
)
23 , m_hasSpaceInfo
{false}
26 hide(); // Only become visible when we have space info to show. @see StatusBarSpaceInfo::setShown().
28 m_capacityBar
= new KCapacityBar(KCapacityBar::DrawTextInline
, this);
29 m_textInfoButton
= new QToolButton(this);
30 m_textInfoButton
->setAutoRaise(true);
31 m_textInfoButton
->setPopupMode(QToolButton::InstantPopup
);
32 auto menu
= new DiskSpaceUsageMenu
{this};
33 connect(menu
, &DiskSpaceUsageMenu::showMessage
, this, &StatusBarSpaceInfo::showMessage
);
34 connect(menu
, &DiskSpaceUsageMenu::showInstallationProgress
, this, &StatusBarSpaceInfo::showInstallationProgress
);
35 m_textInfoButton
->setMenu(menu
);
37 auto layout
= new QHBoxLayout(this);
38 // We reduce the outside margin of the flat button so it visually has the same margin as the status bar text label on the other end of the bar.
39 layout
->setContentsMargins(2, -1, 0, -1); // "-1" makes it so the fixed height won't be ignored.
40 layout
->addWidget(m_capacityBar
);
41 layout
->addWidget(m_textInfoButton
);
44 StatusBarSpaceInfo::~StatusBarSpaceInfo()
48 void StatusBarSpaceInfo::setShown(bool shown
)
56 // We only show() this widget in slotValueChanged() when it m_hasSpaceInfo.
57 if (m_observer
.isNull()) {
58 m_observer
.reset(new SpaceInfoObserver(m_url
, this));
59 connect(m_observer
.data(), &SpaceInfoObserver::valuesChanged
, this, &StatusBarSpaceInfo::slotValuesChanged
);
67 void StatusBarSpaceInfo::setUrl(const QUrl
&url
)
71 static_cast<DiskSpaceUsageMenu
*>(m_textInfoButton
->menu())->setUrl(url
);
72 m_hasSpaceInfo
= false;
74 m_observer
.reset(new SpaceInfoObserver(m_url
, this));
75 connect(m_observer
.data(), &SpaceInfoObserver::valuesChanged
, this, &StatusBarSpaceInfo::slotValuesChanged
);
80 QUrl
StatusBarSpaceInfo::url() const
85 void StatusBarSpaceInfo::update()
92 void StatusBarSpaceInfo::showEvent(QShowEvent
*event
)
94 if (m_shown
&& m_observer
.isNull()) {
95 m_observer
.reset(new SpaceInfoObserver(m_url
, this));
96 connect(m_observer
.data(), &SpaceInfoObserver::valuesChanged
, this, &StatusBarSpaceInfo::slotValuesChanged
);
98 QWidget::showEvent(event
);
101 void StatusBarSpaceInfo::hideEvent(QHideEvent
*event
)
103 if (m_hasSpaceInfo
) {
105 m_hasSpaceInfo
= false;
107 QWidget::hideEvent(event
);
110 QSize
StatusBarSpaceInfo::minimumSizeHint() const
115 void StatusBarSpaceInfo::slotValuesChanged()
117 Q_ASSERT(m_observer
);
118 const quint64 size
= m_observer
->size();
120 if (!m_shown
|| size
== 0) {
125 m_hasSpaceInfo
= true;
127 const quint64 available
= m_observer
->available();
128 const quint64 used
= size
- available
;
129 const int percentUsed
= qRound(100.0 * qreal(used
) / qreal(size
));
131 m_textInfoButton
->setText(i18nc("@info:status Free disk space", "%1 free", KIO::convertSize(available
)));
132 setToolTip(i18nc("tooltip:status Free disk space", "%1 free out of %2 (%3% used)", KIO::convertSize(available
), KIO::convertSize(size
), percentUsed
));
133 m_textInfoButton
->setToolTip(i18nc("@info:tooltip for the free disk space button",
134 "%1 free out of %2 (%3% used)\nPress to manage disk space usage.",
135 KIO::convertSize(available
),
136 KIO::convertSize(size
),
138 setUpdatesEnabled(false);
139 m_capacityBar
->setValue(percentUsed
);
140 setUpdatesEnabled(true);
149 #include "moc_statusbarspaceinfo.cpp"