From 74aaa0482fafa66b2f9aca951e05605b7c66f96a Mon Sep 17 00:00:00 2001 From: DenioD <41270280+DenioD@users.noreply.github.com> Date: Thu, 14 May 2020 22:52:28 +0200 Subject: [PATCH] improve some gui elements --- application.qrc | 5 +++ res/lock.png | Bin 0 -> 812 bytes res/lock.svg | 7 ++++ res/lock_blue.svg | 7 ++++ res/lock_green.svg | 7 ++++ res/unlocked.svg | 7 ++++ src/Chat/Chat.cpp | 11 +++-- src/Chat/Helper/ChatDelegator.h | 72 ++++++++++++++++++++++++++------ src/DataStore/ChatDataStore.cpp | 7 +++- src/Model/ChatItem.cpp | 39 +++++++++++++---- src/Model/ChatItem.h | 10 ++++- src/addressbook.cpp | 1 + src/chatmodel.h | 3 ++ src/contactmodel.cpp | 1 + src/controller.cpp | 4 ++ src/mainwindow.cpp | 1 + 16 files changed, 153 insertions(+), 29 deletions(-) create mode 100644 res/lock.png create mode 100644 res/lock.svg create mode 100644 res/lock_blue.svg create mode 100644 res/lock_green.svg create mode 100644 res/unlocked.svg diff --git a/application.qrc b/application.qrc index 29a1765..d323bff 100644 --- a/application.qrc +++ b/application.qrc @@ -36,6 +36,11 @@ res/upload.png res/upload.svg res/message-icon.svg + res/lock.svg + res/lock.png + res/lock_green.svg + res/lock_blue.svg + res/unlocked.svg res/hushdlogo.gif diff --git a/res/lock.png b/res/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..b05dc49e515101200ed38e5691913accf38d5667 GIT binary patch literal 812 zcmV+{1JnG8P)EX>4Tx04R}tkv&MmP!xqvTT4Z%4rUN>$WS|35EXIMDionYs1;guFnQ@8G%+M8 zE{=k0!NH%!s)LKOt`4q(Aov5~9J6k5c1;qgAsyXWxUeL%2LWt!DB257o% zW>QHpmtPShuLz?L0s@H3%ra&rDGlHHx~D#>y9Cej@B6cQ)q=%;uku-v%zO+nTZmTta@{6o#XTY$kMFRH^9Lm z5HC^on$NqtJLmRqPiuZZEdz3kXeP*K00006VoOIv0RI600RN!9r;`8x010qNS#tmY z4c7nw4c7reD4Tcy000McNliru`ai6{UIA?M@c5#R0oJ~$pEnybdcu0ztP{RVYafRn7|AnDqVEa60)gRoV4+rQ< z@@E)r2~vF~$tmn4*gJag7QR1FF4iHcH{4Ir`zxrXg~ec!jyjFH&{`)~L9G}ZHkKqG zBbhg&m0zQpaa=T#aR7tS>CTfe1LlLnnvL}!zl_Aa&~3E|E3XBU?dKKDh1Dh#Vk<$~ q(`<6wF^wvwF^Y1)YJsq$gh;=DyEZAQ + + + + Svg Vector Icons : http://www.onlinewebfonts.com/icon + + \ No newline at end of file diff --git a/res/lock_blue.svg b/res/lock_blue.svg new file mode 100644 index 0000000..752bc53 --- /dev/null +++ b/res/lock_blue.svg @@ -0,0 +1,7 @@ + + + + + Svg Vector Icons : http://www.onlinewebfonts.com/icon + + \ No newline at end of file diff --git a/res/lock_green.svg b/res/lock_green.svg new file mode 100644 index 0000000..1c5e4ef --- /dev/null +++ b/res/lock_green.svg @@ -0,0 +1,7 @@ + + + + + Svg Vector Icons : http://www.onlinewebfonts.com/icon + + \ No newline at end of file diff --git a/res/unlocked.svg b/res/unlocked.svg new file mode 100644 index 0000000..50ff5e1 --- /dev/null +++ b/res/unlocked.svg @@ -0,0 +1,7 @@ + + + + + Svg Vector Icons : http://www.onlinewebfonts.com/icon + + diff --git a/src/Chat/Chat.cpp b/src/Chat/Chat.cpp index 7038fe1..5b34929 100644 --- a/src/Chat/Chat.cpp +++ b/src/Chat/Chat.cpp @@ -1,3 +1,6 @@ +// Copyright 2019-2020 The Hush developers +// GPLv3 + #include "Chat.h" #include "../addressbook.h" #include "../DataStore/DataStore.h" @@ -23,9 +26,11 @@ void Chat::renderChatBox(Ui::MainWindow *ui, QListView *view) { QStandardItem *Items = new QStandardItem(c.second.toChatLine()); - Items->setData("Outgoing", Qt::UserRole + 1); + + Items->setData(OUTGOING, Qt::UserRole + 1); chat->appendRow(Items); - ui->listChat->setModel(chat); + ui->listChat->setModel(chat); + } else { @@ -39,7 +44,7 @@ void Chat::renderChatBox(Ui::MainWindow *ui, QListView *view) { QStandardItem *Items1 = new QStandardItem(c.second.toChatLine()); - Items1->setData("Incoming", Qt::UserRole + 1); + Items1->setData(INCOMING, Qt::UserRole + 1); chat->appendRow(Items1); ui->listChat->setModel(chat); } diff --git a/src/Chat/Helper/ChatDelegator.h b/src/Chat/Helper/ChatDelegator.h index ef6a150..6e3e676 100644 --- a/src/Chat/Helper/ChatDelegator.h +++ b/src/Chat/Helper/ChatDelegator.h @@ -1,3 +1,6 @@ +// Copyright 2019-2020 The Hush developers +// GPLv3 + #ifndef CHATDELEGATOR_H #define CHATDELEGATOR_H @@ -6,6 +9,14 @@ #include #include +enum RenderType +{ + OUTGOING=0, + INCOMING=1, + INDATE=2, + OUTDATE=3 +}; + class ListViewDelegate : public QAbstractItemDelegate { int d_radius; @@ -26,7 +37,7 @@ class ListViewDelegate : public QAbstractItemDelegate inline QSize sizeHint(QStyleOptionViewItem const &option, QModelIndex const &index) const; }; -inline ListViewDelegate::ListViewDelegate(QObject *parent): QAbstractItemDelegate(parent), d_radius(5), d_toppadding(5), d_bottompadding(3), d_leftpadding(5), d_rightpadding(5), d_verticalmargin(15), d_horizontalmargin(10), d_pointerwidth(10), d_pointerheight(17), d_widthfraction(.7) +inline ListViewDelegate::ListViewDelegate(QObject *parent): QAbstractItemDelegate(parent), d_radius(5), d_toppadding(5), d_bottompadding(3), d_leftpadding(5), d_rightpadding(5), d_verticalmargin(5), d_horizontalmargin(10), d_pointerwidth(10), d_pointerheight(17), d_widthfraction(.6) { } @@ -43,7 +54,9 @@ inline void ListViewDelegate::paint(QPainter *painter, QStyleOptionViewItem cons qreal contentswidth = option.rect.width() * d_widthfraction - d_horizontalmargin - d_pointerwidth - d_leftpadding - d_rightpadding; bodydoc.setTextWidth(contentswidth); qreal bodyheight = bodydoc.size().height(); - bool outgoing = index.data(Qt::UserRole + 1).toString() == "Outgoing"; + int outgoing = index.data(Qt::UserRole + 1).toInt(); + int outdate = index.data(Qt::UserRole + 1).toInt(); + int indate = index.data(Qt::UserRole + 1).toInt(); painter->save(); painter->setRenderHint(QPainter::Antialiasing); @@ -53,10 +66,26 @@ inline void ListViewDelegate::paint(QPainter *painter, QStyleOptionViewItem cons painter->translate(option.rect.left() + d_horizontalmargin, option.rect.top() + ((index.row() == 0) ? d_verticalmargin : 0)); - // background color for chat bubble - QColor bgcolor("#535353"); - if (outgoing) - bgcolor = "#eeeeee"; + QColor bgcolor("#ffffff"); + switch(outgoing) + { + case INDATE: + bgcolor = "transparent"; + break; + + case OUTDATE: + bgcolor = "transparent"; + break; + + case OUTGOING: + bgcolor = "#f8f9fa"; + break; + + default: + case INCOMING: + bgcolor = "#535353"; + break; + } // create chat bubble QPainterPath pointie; @@ -85,7 +114,7 @@ inline void ListViewDelegate::paint(QPainter *painter, QStyleOptionViewItem cons pointie.closeSubpath(); // rotate bubble for outgoing messages - if (outgoing) + if ((outgoing == OUTGOING) || (outdate == OUTDATE)) { painter->translate(option.rect.width() - pointie.boundingRect().width() - d_horizontalmargin - d_pointerwidth, 0); painter->translate(pointie.boundingRect().center()); @@ -99,7 +128,7 @@ inline void ListViewDelegate::paint(QPainter *painter, QStyleOptionViewItem cons painter->fillPath(pointie, QBrush(bgcolor)); // rotate back or painter is going to paint the text rotated... - if (outgoing) + if ((outgoing == OUTGOING) || (outdate == OUTDATE)) { painter->translate(pointie.boundingRect().center()); painter->rotate(-180); @@ -108,13 +137,30 @@ inline void ListViewDelegate::paint(QPainter *painter, QStyleOptionViewItem cons // set text color used to draw message body QAbstractTextDocumentLayout::PaintContext ctx; - if (outgoing) - ctx.palette.setColor(QPalette::Text, QColor("black")); - else - ctx.palette.setColor(QPalette::Text, QColor("white")); + switch(outgoing) + { + case INDATE: + ctx.palette.setColor(QPalette::Text, QColor("Black")); + break; + + case OUTDATE: + ctx.palette.setColor(QPalette::Text, QColor("Black")); + break; + + case OUTGOING: + ctx.palette.setColor(QPalette::Text, QColor("Black")); + break; + + default: + case INCOMING: + ctx.palette.setColor(QPalette::Text, QColor("whitesmoke")); + break; + } + // draw body text - painter->translate((outgoing ? 0 : d_pointerwidth) + d_leftpadding, 0); + painter->translate((outgoing == OUTGOING ? 0 : d_pointerwidth) + d_leftpadding, 0); + painter->translate((outdate == OUTDATE ? 0 : d_pointerwidth) + d_leftpadding, 0); bodydoc.documentLayout()->draw(painter, ctx); painter->restore(); diff --git a/src/DataStore/ChatDataStore.cpp b/src/DataStore/ChatDataStore.cpp index 4dfc605..5223d04 100644 --- a/src/DataStore/ChatDataStore.cpp +++ b/src/DataStore/ChatDataStore.cpp @@ -1,3 +1,6 @@ +// Copyright 2019-2020 The Hush developers +// GPLv3 + #include "ChatDataStore.h" ChatDataStore* ChatDataStore::getInstance() @@ -43,8 +46,8 @@ std::map ChatDataStore::getAllContactRequests() for(auto &c: this->data) { if ( - (c.second.getType() == "cont") && - (c.second.isOutgoing() == false) && + (c.second.isOutgoing() == false) && + (c.second.getType() == "cont") && (c.second.getMemo().startsWith("{")) ) { diff --git a/src/Model/ChatItem.cpp b/src/Model/ChatItem.cpp index 39d4a68..afdde53 100644 --- a/src/Model/ChatItem.cpp +++ b/src/Model/ChatItem.cpp @@ -1,8 +1,11 @@ +// Copyright 2019-2020 The Hush developers +// GPLv3 + #include "ChatItem.h" ChatItem::ChatItem() {} -ChatItem::ChatItem(long timestamp, QString address, QString contact, QString memo, QString requestZaddr, QString type, QString cid, QString txid) +ChatItem::ChatItem(long timestamp, QString address, QString contact, QString memo, QString requestZaddr, QString type, QString cid, QString txid, int confirmations) { _timestamp = timestamp; _address = address; @@ -12,10 +15,11 @@ ChatItem::ChatItem(long timestamp, QString address, QString contact, QString mem _type = type; _cid = cid; _txid = txid; + _confirmations = confirmations; _outgoing = false; } -ChatItem::ChatItem(long timestamp, QString address, QString contact, QString memo, QString requestZaddr, QString type, QString cid, QString txid, bool outgoing) +ChatItem::ChatItem(long timestamp, QString address, QString contact, QString memo, QString requestZaddr, QString type, QString cid, QString txid, int confirmations, bool outgoing) { _timestamp = timestamp; _address = address; @@ -25,6 +29,7 @@ ChatItem::ChatItem(long timestamp, QString address, QString contact, QString mem _type = type; _cid = cid; _txid = txid; + _confirmations = confirmations; _outgoing = outgoing; } @@ -66,6 +71,10 @@ QString ChatItem::getTxid() { return _txid; } +int ChatItem::getConfirmations() +{ + return _confirmations; +} bool ChatItem::isOutgoing() { @@ -110,26 +119,38 @@ void ChatItem::setTxid(QString txid) { _txid = txid; } +void ChatItem::setConfirmations(int confirmations) +{ + _confirmations = confirmations; +} void ChatItem::toggleOutgo() { _outgoing = true; } + QString ChatItem::toChatLine() { QDateTime myDateTime; + QString lock; myDateTime.setTime_t(_timestamp); - QString line = QString("[") + myDateTime.toString("d.M.yy hh:mm") + QString("] "); - line += QString("") + QString(_memo) + QString("\n\n"); + + if (_confirmations == 0){ + lock = " "; + }else{ + + lock = " "; + + } + + QString line = QString("") + myDateTime.toString("dd.MM.yyyy hh:mm"); + line += QString(lock) + QString(""); + line += QString("

") + _memo.toHtmlEscaped() + QString("

"); return line; } ChatItem::~ChatItem() { - /*delete timestamp; - delete address; - delete contact; - delete memo; - delete outgoing;*/ + } \ No newline at end of file diff --git a/src/Model/ChatItem.h b/src/Model/ChatItem.h index 467341f..6f27609 100644 --- a/src/Model/ChatItem.h +++ b/src/Model/ChatItem.h @@ -1,3 +1,6 @@ +// Copyright 2019-2020 The Hush developers +// GPLv3 + #ifndef CHATITEM_H #define CHATITEM_H @@ -14,12 +17,13 @@ class ChatItem QString _type; QString _cid; QString _txid; + int _confirmations; bool _outgoing = false; public: ChatItem(); - ChatItem(long timestamp, QString address, QString contact, QString memo,QString requestZaddr, QString type, QString cid, QString txid); - ChatItem(long timestamp, QString address, QString contact, QString memo, QString requestZaddr, QString type, QString cid, QString txid, bool outgoing); + ChatItem(long timestamp, QString address, QString contact, QString memo,QString requestZaddr, QString type, QString cid, QString txid, int confirmations); + ChatItem(long timestamp, QString address, QString contact, QString memo, QString requestZaddr, QString type, QString cid, QString txid, int confirmations, bool outgoing); long getTimestamp(); QString getAddress(); QString getContact(); @@ -28,6 +32,7 @@ class ChatItem QString getType(); QString getCid(); QString getTxid(); + int getConfirmations(); bool isOutgoing(); void setTimestamp(long timestamp); void setAddress(QString address); @@ -37,6 +42,7 @@ class ChatItem void setType(QString type); void setCid(QString cid); void setTxid(QString txid); + void setConfirmations(int confirmations); void toggleOutgo(); QString toChatLine(); ~ChatItem(); diff --git a/src/addressbook.cpp b/src/addressbook.cpp index d17726c..c3fdc6c 100644 --- a/src/addressbook.cpp +++ b/src/addressbook.cpp @@ -1,5 +1,6 @@ // Copyright 2019-2020 The Hush developers // GPLv3 + #include "addressbook.h" #include "ui_addressbook.h" #include "ui_mainwindow.h" diff --git a/src/chatmodel.h b/src/chatmodel.h index 04493b8..bf3e255 100644 --- a/src/chatmodel.h +++ b/src/chatmodel.h @@ -1,3 +1,6 @@ +// Copyright 2019-2020 The Hush developers +// GPLv3 + #ifndef CHATMODEL_H #define CHATMODEL_H #include diff --git a/src/contactmodel.cpp b/src/contactmodel.cpp index ad58ccb..6f452fa 100644 --- a/src/contactmodel.cpp +++ b/src/contactmodel.cpp @@ -1,5 +1,6 @@ // Copyright 2019-2020 The Hush developers // GPLv3 + #include "contactmodel.h" #include "addressbook.h" #include "mainwindow.h" diff --git a/src/controller.cpp b/src/controller.cpp index 47a1a1e..534fffe 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -878,9 +878,11 @@ void Controller::refreshTransactions() { QString(""), cid, txid, + confirmations, true ); qDebug()<<"Memo : " <setData(ChatIDGenerator::getInstance()->generateID(item), item); @@ -973,9 +975,11 @@ void Controller::refreshTransactions() { type, cid, txid, + confirmations, false ); qDebug()<< "Position : " << position; + qDebug()<<"Confirmation :" << confirmations; DataStore::getChatDataStore()->setData(ChatIDGenerator::getInstance()->generateID(item), item); } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 7a1f6c2..de034ac 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1,5 +1,6 @@ // Copyright 2019-2020 The Hush developers // GPLv3 + #include "mainwindow.h" #include "addressbook.h" #include "viewalladdresses.h"