aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/downloads/downloads.qbs4
-rw-r--r--src/lib/downloads/downloadswidget.cpp17
-rw-r--r--src/lib/downloads/downloadswidget.h3
-rw-r--r--src/lib/downloads/widgets/downloaditemform.ui53
-rw-r--r--src/lib/downloads/widgets/downloaditemwidget.cpp8
-rw-r--r--src/lib/downloads/widgets/elidedlabel.cpp85
-rw-r--r--src/lib/downloads/widgets/elidedlabel.h85
7 files changed, 221 insertions, 34 deletions
diff --git a/src/lib/downloads/downloads.qbs b/src/lib/downloads/downloads.qbs
index 3fce0f9..bdb18ad 100644
--- a/src/lib/downloads/downloads.qbs
+++ b/src/lib/downloads/downloads.qbs
@@ -7,7 +7,7 @@ Project {
id: downloads
name: "downloads"
- cpp.includePaths: ['../..']
+ cpp.includePaths: ['.', '../..']
Depends {
name: "Qt"
@@ -21,6 +21,8 @@ Project {
"widgets/downloaditemform.ui",
"widgets/downloaditemwidget.cpp",
"widgets/downloaditemwidget.h",
+ "widgets/elidedlabel.cpp",
+ "widgets/elidedlabel.h",
]
}
}
diff --git a/src/lib/downloads/downloadswidget.cpp b/src/lib/downloads/downloadswidget.cpp
index dc7d5e2..f9a8f34 100644
--- a/src/lib/downloads/downloadswidget.cpp
+++ b/src/lib/downloads/downloadswidget.cpp
@@ -31,12 +31,14 @@ DownloadsWidget::DownloadsWidget(const QString &downloadPath, QWidget *parent) :
connect(ui->listWidget, &QListWidget::currentItemChanged, this, [this](QListWidgetItem *current, QListWidgetItem *previous) {
DownloadItemWidget *currentWidget = qobject_cast<DownloadItemWidget*>(ui->listWidget->itemWidget(current));
currentWidget->showDetails();
+ currentWidget->setFixedWidth(ui->listWidget->viewport()->width());
currentWidget->adjustSize();
current->setSizeHint(currentWidget->size());
DownloadItemWidget *previousWidget = qobject_cast<DownloadItemWidget*>(ui->listWidget->itemWidget(previous));
if(previousWidget != nullptr) {
previousWidget->hideDetails();
+ previousWidget->setFixedWidth(ui->listWidget->viewport()->width());
previousWidget->adjustSize();
previous->setSizeHint(previousWidget->size());
}
@@ -50,6 +52,8 @@ DownloadsWidget::~DownloadsWidget()
void DownloadsWidget::addDownload(QWebEngineDownloadItem *item)
{
+ this->show();
+
QString filepath = QFileDialog::getSaveFileName(this,
tr("Save"),
m_downloadPath + "/" + QFileInfo(item->path()).fileName());
@@ -67,12 +71,21 @@ void DownloadsWidget::addDownload(QWebEngineDownloadItem *item)
ui->listWidget->insertItem(rowIndex, listItem);
DownloadItemWidget *form = new DownloadItemWidget(item, this);
- listItem->setSizeHint(form->size());
ui->listWidget->setItemWidget(listItem, form);
item->accept();
ui->listWidget->setCurrentRow(rowIndex);
+}
- this->show();
+void DownloadsWidget::resizeEvent(QResizeEvent *event)
+{
+ QWidget::resizeEvent(event);
+
+ for(int i = 0; i < ui->listWidget->count(); ++i) {
+ QWidget *w = ui->listWidget->itemWidget(ui->listWidget->item(i));
+ w->setFixedWidth(ui->listWidget->viewport()->width());
+ w->adjustSize();
+ ui->listWidget->item(i)->setSizeHint(w->size());
+ }
}
diff --git a/src/lib/downloads/downloadswidget.h b/src/lib/downloads/downloadswidget.h
index 30bfa38..8c9ea21 100644
--- a/src/lib/downloads/downloadswidget.h
+++ b/src/lib/downloads/downloadswidget.h
@@ -27,6 +27,9 @@ public:
public slots:
void addDownload(QWebEngineDownloadItem *item);
+protected:
+ void resizeEvent(QResizeEvent *event) override;
+
private:
Ui::DownloadDialog *ui;
QString m_downloadPath;
diff --git a/src/lib/downloads/widgets/downloaditemform.ui b/src/lib/downloads/widgets/downloaditemform.ui
index 7e63211..17f1d6a 100644
--- a/src/lib/downloads/widgets/downloaditemform.ui
+++ b/src/lib/downloads/widgets/downloaditemform.ui
@@ -7,11 +7,11 @@
<x>0</x>
<y>0</y>
<width>500</width>
- <height>100</height>
+ <height>122</height>
</rect>
</property>
<property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
+ <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -24,44 +24,36 @@
<number>0</number>
</property>
<item>
- <widget class="QLabel" name="url_label">
+ <widget class="ElidedLabel" name="url_label">
<property name="text">
<string>[url]</string>
</property>
</widget>
</item>
<item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QLabel" name="status_label">
- <property name="text">
- <string>Un&amp;known</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="filesize_label">
- <property name="text">
- <string>&amp;x MiB / y MiB</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QProgressBar" name="progressBar">
- <property name="value">
- <number>24</number>
- </property>
- </widget>
- </item>
- </layout>
+ <widget class="QProgressBar" name="progressBar">
+ <property name="value">
+ <number>24</number>
+ </property>
+ </widget>
</item>
<item>
<widget class="QWidget" name="detailsWidget" native="true">
<layout class="QVBoxLayout" name="detailsLayout">
<item>
+ <widget class="QLabel" name="status_label">
+ <property name="text">
+ <string>status_label</string>
+ </property>
+ </widget>
+ </item>
+ <item>
<widget class="QLabel" name="path_label">
<property name="text">
- <string>TextLabel</string>
+ <string>path_label</string>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
</property>
</widget>
</item>
@@ -70,6 +62,13 @@
</item>
</layout>
</widget>
+ <customwidgets>
+ <customwidget>
+ <class>ElidedLabel</class>
+ <extends>QLabel</extends>
+ <header>widgets/elidedlabel.h</header>
+ </customwidget>
+ </customwidgets>
<resources/>
<connections/>
</ui>
diff --git a/src/lib/downloads/widgets/downloaditemwidget.cpp b/src/lib/downloads/widgets/downloaditemwidget.cpp
index 6145a6e..fff3cfc 100644
--- a/src/lib/downloads/widgets/downloaditemwidget.cpp
+++ b/src/lib/downloads/widgets/downloaditemwidget.cpp
@@ -19,7 +19,8 @@ DownloadItemWidget::DownloadItemWidget(QWebEngineDownloadItem *item, QWidget *pa
m_item = item;
ui->setupUi(this);
- ui->url_label->setText(item->url().toString());
+
+ ui->url_label->setContent(item->url().toString());
ui->detailsWidget->hide();
ui->path_label->setText(item->path());
@@ -93,11 +94,10 @@ void DownloadItemWidget::updateProgress(qint64 value, qint64 total)
{
ui->progressBar->setMaximum(total);
ui->progressBar->setValue(value);
- ui->filesize_label->setText(QString("%1 / %2").arg(sizeString(value), sizeString(total)));
+ ui->progressBar->setFormat(QString("%1 / %2").arg(sizeString(value), sizeString(total)));
}
void DownloadItemWidget::updateFinished()
{
- ui->progressBar->setMaximum(100);
- ui->progressBar->setValue(100);
+ ui->progressBar->setValue(ui->progressBar->maximum());
}
diff --git a/src/lib/downloads/widgets/elidedlabel.cpp b/src/lib/downloads/widgets/elidedlabel.cpp
new file mode 100644
index 0000000..dc17d32
--- /dev/null
+++ b/src/lib/downloads/widgets/elidedlabel.cpp
@@ -0,0 +1,85 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, 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$
+**
+****************************************************************************/
+/*
+ * This file is part of smolbote. It's copyrighted by the contributors recorded
+ * in the version control history of the file, available from its original
+ * location: git://neueland.iserlohn-fortress.net/smolbote.git
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include "elidedlabel.h"
+
+#include <QPainter>
+#include <QTextLayout>
+#include <QDebug>
+
+ElidedLabel::ElidedLabel(QWidget *parent)
+ : QLabel(parent)
+ , elided(false)
+ , content("elided_label")
+{
+ setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+}
+
+void ElidedLabel::setContent(const QString &newText)
+{
+ content = newText;
+ setText(newText);
+}
+
+void ElidedLabel::resizeEvent(QResizeEvent *event)
+{
+ QLabel::resizeEvent(event);
+
+ QFontMetrics font = this->fontMetrics();
+ QString elidedLine = font.elidedText(content, Qt::ElideRight, width());
+ setText(elidedLine);
+}
diff --git a/src/lib/downloads/widgets/elidedlabel.h b/src/lib/downloads/widgets/elidedlabel.h
new file mode 100644
index 0000000..d0f6221
--- /dev/null
+++ b/src/lib/downloads/widgets/elidedlabel.h
@@ -0,0 +1,85 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, 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$
+**
+****************************************************************************/
+/*
+ * This file is part of smolbote. It's copyrighted by the contributors recorded
+ * in the version control history of the file, available from its original
+ * location: git://neueland.iserlohn-fortress.net/smolbote.git
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef ELIDEDLABEL_H
+#define ELIDEDLABEL_H
+
+#include <QLabel>
+
+class ElidedLabel : public QLabel
+{
+
+public:
+ explicit ElidedLabel(QWidget *parent = nullptr);
+
+ void setContent(const QString &text);
+ const QString & text() const {
+ return content;
+ }
+ bool isElided() const {
+ return elided;
+ }
+
+protected:
+ void resizeEvent(QResizeEvent *event) override;
+
+private:
+ bool elided;
+ QString content;
+};
+
+#endif // ELIDEDLABEL_H