forked from blue/squawk
started progress bars, changed gcc standard to 17
This commit is contained in:
parent
a0348b8fd2
commit
50bb3f5fd7
@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.4)
|
|||||||
project(squawk)
|
project(squawk)
|
||||||
|
|
||||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||||
set(CMAKE_CXX_STANDARD 14)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
|
||||||
set(CMAKE_AUTOMOC ON)
|
set(CMAKE_AUTOMOC ON)
|
||||||
set(CMAKE_AUTOUIC ON)
|
set(CMAKE_AUTOUIC ON)
|
||||||
|
@ -302,7 +302,7 @@ void Models::MessageFeed::downloadAttachment(const QString& messageId)
|
|||||||
QModelIndex ind = modelIndexById(messageId);
|
QModelIndex ind = modelIndexById(messageId);
|
||||||
if (ind.isValid()) {
|
if (ind.isValid()) {
|
||||||
std::pair<Progress::iterator, bool> progressPair = downloads.insert(std::make_pair(messageId, 0));
|
std::pair<Progress::iterator, bool> progressPair = downloads.insert(std::make_pair(messageId, 0));
|
||||||
if (!progressPair.second) { //Only to take action if we weren't already downloading it
|
if (progressPair.second) { //Only to take action if we weren't already downloading it
|
||||||
Shared::Message* msg = static_cast<Shared::Message*>(ind.internalPointer());
|
Shared::Message* msg = static_cast<Shared::Message*>(ind.internalPointer());
|
||||||
emit dataChanged(ind, ind);
|
emit dataChanged(ind, ind);
|
||||||
emit fileLocalPathRequest(messageId, msg->getOutOfBandUrl());
|
emit fileLocalPathRequest(messageId, msg->getOutOfBandUrl());
|
||||||
|
@ -431,6 +431,8 @@ void Squawk::fileError(const QString& messageId, const QString& error)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//TODO! Need to make it look like a standard message change event!
|
||||||
void Squawk::fileLocalPathResponse(const QString& messageId, const QString& path)
|
void Squawk::fileLocalPathResponse(const QString& messageId, const QString& path)
|
||||||
{
|
{
|
||||||
std::map<QString, std::set<Models::Roster::ElId>>::const_iterator itr = requestedFiles.find(messageId);
|
std::map<QString, std::set<Models::Roster::ElId>>::const_iterator itr = requestedFiles.find(messageId);
|
||||||
|
@ -36,12 +36,17 @@ bodyMetrics(bodyFont),
|
|||||||
nickMetrics(nickFont),
|
nickMetrics(nickFont),
|
||||||
dateMetrics(dateFont),
|
dateMetrics(dateFont),
|
||||||
buttonHeight(0),
|
buttonHeight(0),
|
||||||
|
barHeight(0),
|
||||||
buttons(new std::map<QString, FeedButton*>()),
|
buttons(new std::map<QString, FeedButton*>()),
|
||||||
|
bars(new std::map<QString, QProgressBar*>()),
|
||||||
idsToKeep(new std::set<QString>()),
|
idsToKeep(new std::set<QString>()),
|
||||||
clearingWidgets(false)
|
clearingWidgets(false)
|
||||||
{
|
{
|
||||||
QPushButton btn;
|
QPushButton btn;
|
||||||
buttonHeight = btn.sizeHint().height();
|
buttonHeight = btn.sizeHint().height();
|
||||||
|
|
||||||
|
QProgressBar bar;
|
||||||
|
barHeight = bar.sizeHint().height();
|
||||||
}
|
}
|
||||||
|
|
||||||
MessageDelegate::~MessageDelegate()
|
MessageDelegate::~MessageDelegate()
|
||||||
@ -50,8 +55,13 @@ MessageDelegate::~MessageDelegate()
|
|||||||
delete pair.second;
|
delete pair.second;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (const std::pair<const QString, QProgressBar*>& pair: *bars){
|
||||||
|
delete pair.second;
|
||||||
|
}
|
||||||
|
|
||||||
delete idsToKeep;
|
delete idsToKeep;
|
||||||
delete buttons;
|
delete buttons;
|
||||||
|
delete bars;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessageDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
|
void MessageDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
|
||||||
@ -110,9 +120,11 @@ void MessageDelegate::paint(QPainter* painter, const QStyleOptionViewItem& optio
|
|||||||
painter->save();
|
painter->save();
|
||||||
switch (data.attach.state) {
|
switch (data.attach.state) {
|
||||||
case Models::none:
|
case Models::none:
|
||||||
break;
|
clearHelperWidget(data); //i can't imagine the situation where it's gonna be needed
|
||||||
|
break; //but it's a possible performance problem
|
||||||
case Models::uploading:
|
case Models::uploading:
|
||||||
case Models::downloading:
|
case Models::downloading:
|
||||||
|
paintBar(getBar(data), painter, data.sentByMe, opt);
|
||||||
break;
|
break;
|
||||||
case Models::remote:
|
case Models::remote:
|
||||||
case Models::local:
|
case Models::local:
|
||||||
@ -159,6 +171,7 @@ QSize MessageDelegate::sizeHint(const QStyleOptionViewItem& option, const QModel
|
|||||||
break;
|
break;
|
||||||
case Models::uploading:
|
case Models::uploading:
|
||||||
case Models::downloading:
|
case Models::downloading:
|
||||||
|
messageSize.rheight() += barHeight;
|
||||||
break;
|
break;
|
||||||
case Models::remote:
|
case Models::remote:
|
||||||
case Models::local:
|
case Models::local:
|
||||||
@ -225,6 +238,18 @@ void MessageDelegate::paintButton(QPushButton* btn, QPainter* painter, bool sent
|
|||||||
option.rect.adjust(0, buttonHeight, 0, 0);
|
option.rect.adjust(0, buttonHeight, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MessageDelegate::paintBar(QProgressBar* bar, QPainter* painter, bool sentByMe, QStyleOptionViewItem& option) const
|
||||||
|
{
|
||||||
|
QPoint start = option.rect.topLeft();
|
||||||
|
|
||||||
|
QWidget* vp = static_cast<QWidget*>(painter->device());
|
||||||
|
bar->setParent(vp);
|
||||||
|
bar->move(start);
|
||||||
|
bar->resize(option.rect.width(), barHeight);
|
||||||
|
bar->show();
|
||||||
|
|
||||||
|
option.rect.adjust(0, barHeight, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
QPushButton * MessageDelegate::getButton(const Models::FeedItem& data) const
|
QPushButton * MessageDelegate::getButton(const Models::FeedItem& data) const
|
||||||
{
|
{
|
||||||
@ -240,6 +265,12 @@ QPushButton * MessageDelegate::getButton(const Models::FeedItem& data) const
|
|||||||
delete itr->second;
|
delete itr->second;
|
||||||
buttons->erase(itr);
|
buttons->erase(itr);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
std::map<QString, QProgressBar*>::const_iterator barItr = bars->find(data.id);
|
||||||
|
if (barItr != bars->end()) {
|
||||||
|
delete barItr->second;
|
||||||
|
bars->erase(barItr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
@ -259,6 +290,30 @@ QPushButton * MessageDelegate::getButton(const Models::FeedItem& data) const
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QProgressBar * MessageDelegate::getBar(const Models::FeedItem& data) const
|
||||||
|
{
|
||||||
|
std::map<QString, QProgressBar*>::const_iterator barItr = bars->find(data.id);
|
||||||
|
QProgressBar* result = 0;
|
||||||
|
if (barItr != bars->end()) {
|
||||||
|
result = barItr->second;
|
||||||
|
} else {
|
||||||
|
std::map<QString, FeedButton*>::const_iterator itr = buttons->find(data.id);
|
||||||
|
if (itr != buttons->end()) {
|
||||||
|
delete itr->second;
|
||||||
|
buttons->erase(itr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result == 0) {
|
||||||
|
result = new QProgressBar();
|
||||||
|
bars->insert(std::make_pair(data.id, result));
|
||||||
|
}
|
||||||
|
|
||||||
|
result->setValue(data.attach.progress);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void MessageDelegate::beginClearWidgets()
|
void MessageDelegate::beginClearWidgets()
|
||||||
{
|
{
|
||||||
@ -269,17 +324,27 @@ void MessageDelegate::beginClearWidgets()
|
|||||||
void MessageDelegate::endClearWidgets()
|
void MessageDelegate::endClearWidgets()
|
||||||
{
|
{
|
||||||
if (clearingWidgets) {
|
if (clearingWidgets) {
|
||||||
std::set<QString> toRemove;
|
std::set<QString> toRemoveButtons;
|
||||||
|
std::set<QString> toRemoveBars;
|
||||||
for (const std::pair<const QString, FeedButton*>& pair: *buttons) {
|
for (const std::pair<const QString, FeedButton*>& pair: *buttons) {
|
||||||
if (idsToKeep->find(pair.first) == idsToKeep->end()) {
|
if (idsToKeep->find(pair.first) == idsToKeep->end()) {
|
||||||
delete pair.second;
|
delete pair.second;
|
||||||
toRemove.insert(pair.first);
|
toRemoveButtons.insert(pair.first);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (const std::pair<const QString, QProgressBar*>& pair: *bars) {
|
||||||
|
if (idsToKeep->find(pair.first) == idsToKeep->end()) {
|
||||||
|
delete pair.second;
|
||||||
|
toRemoveBars.insert(pair.first);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const QString& key : toRemove) {
|
for (const QString& key : toRemoveButtons) {
|
||||||
buttons->erase(key);
|
buttons->erase(key);
|
||||||
}
|
}
|
||||||
|
for (const QString& key : toRemoveBars) {
|
||||||
|
bars->erase(key);
|
||||||
|
}
|
||||||
|
|
||||||
idsToKeep->clear();
|
idsToKeep->clear();
|
||||||
clearingWidgets = false;
|
clearingWidgets = false;
|
||||||
@ -292,6 +357,22 @@ void MessageDelegate::onButtonPushed() const
|
|||||||
emit buttonPushed(btn->messageId, btn->download);
|
emit buttonPushed(btn->messageId, btn->download);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MessageDelegate::clearHelperWidget(const Models::FeedItem& data) const
|
||||||
|
{
|
||||||
|
std::map<QString, FeedButton*>::const_iterator itr = buttons->find(data.id);
|
||||||
|
if (itr != buttons->end()) {
|
||||||
|
delete itr->second;
|
||||||
|
buttons->erase(itr);
|
||||||
|
} else {
|
||||||
|
std::map<QString, QProgressBar*>::const_iterator barItr = bars->find(data.id);
|
||||||
|
if (barItr != bars->end()) {
|
||||||
|
delete barItr->second;
|
||||||
|
bars->erase(barItr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// void MessageDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const
|
// void MessageDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const
|
||||||
// {
|
// {
|
||||||
//
|
//
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include <QFont>
|
#include <QFont>
|
||||||
#include <QFontMetrics>
|
#include <QFontMetrics>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
|
#include <QProgressBar>
|
||||||
|
|
||||||
#include "shared/icons.h"
|
#include "shared/icons.h"
|
||||||
|
|
||||||
@ -55,7 +56,10 @@ signals:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void paintButton(QPushButton* btn, QPainter* painter, bool sentByMe, QStyleOptionViewItem& option) const;
|
void paintButton(QPushButton* btn, QPainter* painter, bool sentByMe, QStyleOptionViewItem& option) const;
|
||||||
|
void paintBar(QProgressBar* bar, QPainter* painter, bool sentByMe, QStyleOptionViewItem& option) const;
|
||||||
QPushButton* getButton(const Models::FeedItem& data) const;
|
QPushButton* getButton(const Models::FeedItem& data) const;
|
||||||
|
QProgressBar* getBar(const Models::FeedItem& data) const;
|
||||||
|
void clearHelperWidget(const Models::FeedItem& data) const;
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
void onButtonPushed() const;
|
void onButtonPushed() const;
|
||||||
@ -75,8 +79,10 @@ private:
|
|||||||
QFontMetrics dateMetrics;
|
QFontMetrics dateMetrics;
|
||||||
|
|
||||||
int buttonHeight;
|
int buttonHeight;
|
||||||
|
int barHeight;
|
||||||
|
|
||||||
std::map<QString, FeedButton*>* buttons;
|
std::map<QString, FeedButton*>* buttons;
|
||||||
|
std::map<QString, QProgressBar*>* bars;
|
||||||
std::set<QString>* idsToKeep;
|
std::set<QString>* idsToKeep;
|
||||||
bool clearingWidgets;
|
bool clearingWidgets;
|
||||||
};
|
};
|
||||||
|
@ -99,7 +99,6 @@ protected slots:
|
|||||||
void onEnterPressed();
|
void onEnterPressed();
|
||||||
void onAttach();
|
void onAttach();
|
||||||
void onFileSelected();
|
void onFileSelected();
|
||||||
void onScrollResize();
|
|
||||||
void onBadgeClose();
|
void onBadgeClose();
|
||||||
void onClearButton();
|
void onClearButton();
|
||||||
void onTextEditDocSizeChanged(const QSizeF& size);
|
void onTextEditDocSizeChanged(const QSizeF& size);
|
||||||
|
Loading…
Reference in New Issue
Block a user