@@ -23,6 +23,15 @@
|
||||
<file>res/Pinguin.png</file>
|
||||
<file>res/Stag.png</file>
|
||||
<file>res/Elsa.png</file>
|
||||
<file>res/send.png</file>
|
||||
<file>res/send.svg</file>
|
||||
<file>res/addcontact.svg</file>
|
||||
<file>res/send-new.svg</file>
|
||||
<file>res/add_contact.svg</file>
|
||||
<file>res/notification.svg</file>
|
||||
<file>res/send-new-white.png</file>
|
||||
<file>res/add_contact.png</file>
|
||||
<file>res/notification.png</file>
|
||||
</qresource>
|
||||
<qresource prefix="/img">
|
||||
<file>res/hushdlogo.gif</file>
|
||||
|
||||
BIN
res/add_contact.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
9
res/add_contact.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 265.7 283.5" style="enable-background:new 0 0 265.7 283.5;" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M132.9,0C59.8,0,0,59.8,0,132.9c0,73,59.8,132.9,132.9,132.9c73,0,132.9-59.8,132.9-132.9C265.7,59.8,205.9,0,132.9,0
|
||||
L132.9,0z M199.3,146.2h-53.1v53.1h-26.6v-53.1H66.4v-26.6h53.1V66.4h26.6v53.1h53.1V146.2z M199.3,146.2"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 604 B |
7
res/addcontact.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Svg Vector Icons : http://www.onlinewebfonts.com/icon -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
|
||||
<metadata> Svg Vector Icons : http://www.onlinewebfonts.com/icon </metadata>
|
||||
<g><path d="M870.2,797.3l-99.5-2.4l2.4-99.7c0.4-15.7-12.1-28.8-27.8-29.2c-15.7-0.4-28.8,12-29.2,27.8l-2.4,99.7l-99.6-2.4c-15.7-0.4-28.8,12.1-29.2,27.8c-0.4,15.7,12,28.8,27.8,29.2l99.6,2.4l-2.4,99.7c-0.4,15.7,12,28.8,27.8,29.2c15.7,0.4,28.8-12,29.2-27.8l2.4-99.6l99.5,2.4c15.6,0.4,28.8-12,29.2-27.8C898.3,810.8,885.9,797.7,870.2,797.3L870.2,797.3z"/><path d="M515.1,568.6c2.2,15.9,16.9,27.1,32.7,25.1c117.1-14.5,232.6,25.5,316.9,109.9c11.4,11.4,29.8,11.5,41.1,0.3c11.3-11.2,11.2-29.7-0.3-41.1C808.3,565.4,675,519.2,539.9,536C524.4,538,512.9,553.1,515.1,568.6z M113.8,990c15.9,0.5,29.2-12.2,29.7-28.4c6.3-209.1,178.4-374.1,383.6-367.9c158.1,4.8,290.6-122.2,295.5-283.1c4.8-160.9-119.8-295.7-277.9-300.5C386.6,5.4,254.1,132.4,249.2,293.3c-3.2,106.5,52.2,207,142.4,260.6C216.3,608.1,91.5,772.7,85.8,959.9C85.3,976,97.9,989.5,113.8,990z M542.9,68.8c126.3,3.8,225.8,111.5,221.9,240.1C761,437.5,655.2,539,528.9,535.1c-126.2-3.8-225.6-111.5-221.8-240.1C311,166.6,416.8,65.1,542.9,68.8z"/></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
@@ -1,5 +1,5 @@
|
||||
|
||||
QWidget, QMainWindow, QMenuBar, QMenu, QDialog, QTabWidget, QTableView, QTableView::item, QScrollArea, QGroupBox, QPlainTextEdit, QLineEdit, QLabel, MainWindow
|
||||
QWidget, QMainWindow, QMenuBar, QMenu, QDialog, QTabWidget, QTableView, QTableView::item, QScrollArea, QGroupBox, QPlainTextEdit, QLineEdit, QLabel, MainWindow, ChatModel, requestDialog
|
||||
{
|
||||
background-color: #303335;
|
||||
color: #ffffff;
|
||||
|
||||
BIN
res/notification.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
10
res/notification.svg
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 225.9 283.5" style="enable-background:new 0 0 225.9 283.5;" xml:space="preserve">
|
||||
<g>
|
||||
<path d="M113,265.7c14.6,0,26.5-11.9,26.5-26.6H86.4C86.4,253.8,98.4,265.7,113,265.7L113,265.7z M199.3,186v-73
|
||||
c0-41.2-27.9-74.4-66.4-83.7v-9.4C132.9,9.3,123.6,0,113,0C102.3,0,93,9.3,93,19.9v9.4C54.5,38.5,26.6,71.8,26.6,113v73L0,212.6
|
||||
v13.3h225.9v-13.3L199.3,186z M199.3,186"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 655 B |
BIN
res/send-new-white.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
19
res/send-new.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 300.2 283.5" style="enable-background:new 0 0 300.2 283.5;" xml:space="preserve">
|
||||
<!--<style type="text/css">-->
|
||||
<!--.st0{clip-path:url(#SVGID_2_);}-->
|
||||
<!--</style>-->
|
||||
<g>
|
||||
<!--<g>-->
|
||||
<!--<defs>-->
|
||||
<!--<rect id="SVGID_1_" x="2.6" width="297.6" height="265.7"/>-->
|
||||
<!--</defs>-->
|
||||
<!--<clipPath id="SVGID_2_">-->
|
||||
<!--<use xlink:href="#SVGID_1_" style="overflow:visible;"/>-->
|
||||
<!--</clipPath>-->
|
||||
<path class="st0" d="M2.6,255.1l297.7-127.5L2.6,0v99.2l212.6,28.3L2.6,155.9V255.1z M2.6,255.1"/>
|
||||
<!--</g>-->
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 808 B |
BIN
res/send.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
6
res/send.svg
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" ?><svg id="Layer_1" style="enable-background:new 0 0 137.3 139.3;" version="1.1" viewBox="0 0 137.3 139.3" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><style type="text/css">
|
||||
.st0{fill:#2C8AAA;}
|
||||
.st1{opacity:0.19;clip-path:url(#XMLID_39_);fill:#070808;}
|
||||
.st2{fill:#FFFFFF;}
|
||||
.st3{opacity:0.19;fill:#070808;}
|
||||
</style><g id="XMLID_2671_"><g id="XMLID_2704_"><circle class="st0" cx="68.5" cy="69.6" id="XMLID_2708_" r="66.2"/><g id="XMLID_2705_"><defs><circle cx="68.7" cy="69.6" id="XMLID_2706_" r="66.2"/></defs><clipPath id="XMLID_39_"><use style="overflow:visible;" xlink:href="#XMLID_2706_"/></clipPath><polyline class="st1" id="XMLID_2707_" points="95.7,41 155.1,91.1 134,135.8 112,146.2 33.3,62.9 "/></g></g></g><g id="XMLID_2719_"><polygon class="st2" id="XMLID_2718_" points="74.3,103.9 95.7,41 33.3,62.9 50.9,76.8 60.4,76.8 60.3,86.1 "/><polygon class="st3" id="XMLID_2713_" points="60.7,84.9 95.7,41 50.9,76.8 60.4,76.8 "/><polygon class="st3" id="XMLID_2703_" points="60.4,76.8 95.7,41 60.3,86.1 "/></g></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -126,6 +126,7 @@ FORMS += \
|
||||
src/mobileappconnector.ui \
|
||||
src/createhushconfdialog.ui \
|
||||
src/recurringdialog.ui \
|
||||
src/requestContactDialog.ui \
|
||||
src/newrecurring.ui \
|
||||
src/requestdialog.ui \
|
||||
src/recurringmultiple.ui \
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Copyright 2019-2020 The Hush developers
|
||||
// GPLv3
|
||||
#include "addressbook.h"
|
||||
#include "ui_addressbook.h"
|
||||
#include "ui_mainwindow.h"
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "controller.h"
|
||||
#include "mainwindow.h"
|
||||
#include "ui_mainwindow.h"
|
||||
#include "ui_requestContactDialog.h"
|
||||
#include "addressbook.h"
|
||||
#include "ui_memodialog.h"
|
||||
#include "ui_contactrequest.h"
|
||||
@@ -83,6 +84,7 @@ void ChatModel::showMessages()
|
||||
{
|
||||
qDebug() << c.second.toChatLine();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void ChatModel::renderChatBox(Ui::MainWindow* ui, QListView &view)
|
||||
@@ -97,7 +99,10 @@ void ChatModel::renderChatBox(Ui::MainWindow* ui, QListView &view)
|
||||
|
||||
void ChatModel::renderChatBox(Ui::MainWindow* ui, QListView *view)
|
||||
{
|
||||
|
||||
QObject::connect(ui->pushContact, &QPushButton::clicked,[&] ()
|
||||
{
|
||||
renderContactRequest();
|
||||
});
|
||||
|
||||
QStandardItemModel* chat = new QStandardItemModel();
|
||||
|
||||
@@ -136,15 +141,98 @@ void ChatModel::renderChatBox(Ui::MainWindow* ui, QListView *view)
|
||||
ui->listChat->setModel(chat);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void ChatModel::renderContactRequest(){
|
||||
|
||||
Ui_requestDialog requestContact;
|
||||
QDialog dialog(main);
|
||||
requestContact.setupUi(&dialog);
|
||||
Settings::saveRestore(&dialog);
|
||||
|
||||
{
|
||||
QStandardItemModel* contactRequest = new QStandardItemModel();
|
||||
|
||||
|
||||
for (auto &c : this->chatItems) {
|
||||
if ((c.second.getType() == "cont") && (c.second.isOutgoing() == false) && (c.second.getMemo().startsWith("{"))) {
|
||||
|
||||
|
||||
|
||||
QStandardItem* Items = new QStandardItem(c.second.getAddress());
|
||||
contactRequest->appendRow(Items);
|
||||
requestContact.requestContact->setModel(contactRequest);
|
||||
// requestContact.requestContact->show();
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
// }
|
||||
|
||||
|
||||
QObject::connect(requestContact.requestContact, &QTableView::clicked, [&] () {
|
||||
|
||||
for (auto &c : this->chatItems){
|
||||
QModelIndex index = requestContact.requestContact->currentIndex();
|
||||
QString label_contact = index.data(Qt::DisplayRole).toString();
|
||||
QStandardItemModel* contactMemo = new QStandardItemModel();
|
||||
|
||||
if (c.second.isOutgoing() == false) {
|
||||
if (label_contact == c.second.getAddress()) {
|
||||
if(c.second.getMemo().startsWith("{")){
|
||||
|
||||
}else{
|
||||
QStandardItem* Items = new QStandardItem(c.second.getMemo());
|
||||
contactMemo->appendRow(Items);
|
||||
requestContact.requestMemo->setModel(contactMemo);
|
||||
requestContact.requestMemo->show();
|
||||
|
||||
requestContact.requestZaddr->setText(c.second.getRequestZaddr());
|
||||
requestContact.requestCID->setText(c.second.getCid());
|
||||
requestContact.requestMyAddr->setText(c.second.getAddress());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
QObject::connect(requestContact.pushButton, &QPushButton::clicked, [&] () {
|
||||
|
||||
QString cid = requestContact.requestCID->text();
|
||||
auto addr = requestContact.requestZaddr->text().trimmed();
|
||||
QString newLabel = requestContact.requestLabel->text().trimmed();
|
||||
auto myAddr = requestContact.requestMyAddr->text().trimmed();
|
||||
|
||||
QString avatar = QString("res/") + requestContact.comboBoxAvatar->currentText() + QString(".png");
|
||||
|
||||
qDebug()<<"Beginn kopiert" <<cid << addr << newLabel << myAddr;
|
||||
AddressBook::getInstance()->addAddressLabel(newLabel, addr, myAddr, cid, avatar);
|
||||
});
|
||||
|
||||
|
||||
dialog.exec();
|
||||
}
|
||||
|
||||
|
||||
|
||||
void ChatModel::addCid(QString tx, QString cid)
|
||||
{
|
||||
this->cidMap[tx] = cid;
|
||||
}
|
||||
|
||||
void ChatModel::addrequestZaddr(QString tx, QString requestZaddr)
|
||||
{
|
||||
this->requestZaddrMap[tx] = requestZaddr;
|
||||
}
|
||||
|
||||
QString ChatModel::getCidByTx(QString tx)
|
||||
{
|
||||
for(auto& pair : this->cidMap)
|
||||
@@ -160,11 +248,31 @@ QString ChatModel::getCidByTx(QString tx)
|
||||
return QString("0xdeadbeef");
|
||||
}
|
||||
|
||||
QString ChatModel::getrequestZaddrByTx(QString tx)
|
||||
{
|
||||
for(auto& pair : this->requestZaddrMap)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
if(this->requestZaddrMap.count(tx) > 0)
|
||||
{
|
||||
return this->requestZaddrMap[tx];
|
||||
}
|
||||
|
||||
return QString("0xdeadbeef");
|
||||
}
|
||||
|
||||
void ChatModel::killCidCache()
|
||||
{
|
||||
this->cidMap.clear();
|
||||
}
|
||||
|
||||
void ChatModel::killrequestZaddrCache()
|
||||
{
|
||||
this->requestZaddrMap.clear();
|
||||
}
|
||||
|
||||
QString MainWindow::createHeaderMemo(QString type, QString cid, QString zaddr, int version=0, int headerNumber=1)
|
||||
{
|
||||
|
||||
@@ -183,6 +291,7 @@ QString MainWindow::createHeaderMemo(QString type, QString cid, QString zaddr,
|
||||
header = j.toJson();
|
||||
qDebug() << "made header=" << header;
|
||||
return header;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include "camount.h"
|
||||
|
||||
|
||||
|
||||
class ListViewDelegate : public QAbstractItemDelegate
|
||||
{
|
||||
int d_radius;
|
||||
@@ -163,7 +164,9 @@ class ChatItem
|
||||
long _timestamp;
|
||||
QString _address;
|
||||
QString _contact;
|
||||
QString _memo;
|
||||
QString _memo;
|
||||
QString _requestZaddr;
|
||||
QString _type;
|
||||
QString _cid;
|
||||
QString _txid;
|
||||
bool _outgoing = false;
|
||||
@@ -171,24 +174,28 @@ class ChatItem
|
||||
public:
|
||||
ChatItem() {}
|
||||
|
||||
ChatItem(long timestamp, QString address, QString contact, QString memo, QString cid, QString txid)
|
||||
ChatItem(long timestamp, QString address, QString contact, QString memo,QString requestZaddr, QString type, QString cid, QString txid)
|
||||
{
|
||||
_timestamp = timestamp;
|
||||
_address = address;
|
||||
_contact = contact;
|
||||
_memo = memo;
|
||||
_requestZaddr = requestZaddr;
|
||||
_type = type;
|
||||
_cid = cid;
|
||||
_txid = txid;
|
||||
_outgoing = false;
|
||||
|
||||
}
|
||||
|
||||
ChatItem(long timestamp, QString address, QString contact, QString memo, QString cid, QString txid, bool outgoing)
|
||||
ChatItem(long timestamp, QString address, QString contact, QString memo, QString requestZaddr, QString type, QString cid, QString txid, bool outgoing)
|
||||
{
|
||||
_timestamp = timestamp;
|
||||
_address = address;
|
||||
_contact = contact;
|
||||
_memo = memo;
|
||||
_requestZaddr = requestZaddr;
|
||||
_type = type;
|
||||
_cid = cid;
|
||||
_txid = txid;
|
||||
_outgoing = outgoing;
|
||||
@@ -215,6 +222,15 @@ class ChatItem
|
||||
return _memo;
|
||||
}
|
||||
|
||||
QString getRequestZaddr()
|
||||
{
|
||||
return _requestZaddr;
|
||||
}
|
||||
QString getType()
|
||||
{
|
||||
return _type;
|
||||
}
|
||||
|
||||
QString getCid()
|
||||
{
|
||||
return _cid;
|
||||
@@ -224,6 +240,7 @@ class ChatItem
|
||||
{
|
||||
return _txid;
|
||||
}
|
||||
|
||||
|
||||
bool isOutgoing()
|
||||
{
|
||||
@@ -244,12 +261,22 @@ class ChatItem
|
||||
{
|
||||
_contact = contact;
|
||||
}
|
||||
|
||||
|
||||
void setMemo(QString memo)
|
||||
{
|
||||
_memo = memo;
|
||||
}
|
||||
|
||||
void setRequestZaddr(QString requestZaddr)
|
||||
{
|
||||
_requestZaddr = requestZaddr;
|
||||
}
|
||||
|
||||
void setType(QString type)
|
||||
{
|
||||
_type = type;
|
||||
}
|
||||
|
||||
void setCid(QString cid)
|
||||
{
|
||||
_cid = cid;
|
||||
@@ -258,7 +285,7 @@ class ChatItem
|
||||
{
|
||||
_txid = txid;
|
||||
}
|
||||
|
||||
|
||||
void toggleOutgo()
|
||||
{
|
||||
_outgoing = true;
|
||||
@@ -291,6 +318,7 @@ class ChatModel
|
||||
Ui::MainWindow* ui;
|
||||
MainWindow* main;
|
||||
std::map<QString, QString> cidMap;
|
||||
std::map<QString, QString> requestZaddrMap;
|
||||
|
||||
public:
|
||||
ChatModel() {};
|
||||
@@ -303,13 +331,19 @@ class ChatModel
|
||||
void setItems(std::vector<ChatItem> items);
|
||||
void renderChatBox(Ui::MainWindow* ui, QListView &view);
|
||||
void renderChatBox(Ui::MainWindow* ui, QListView *view);
|
||||
void renderContactRequest();
|
||||
void triggerRequest();
|
||||
void showMessages();
|
||||
void clear();
|
||||
//void renderContactRequest(Ui::MainWindow* ui, QListView *view);
|
||||
void addMessage(ChatItem item);
|
||||
void addMessage(QString timestamp, ChatItem item);
|
||||
void addCid(QString tx, QString cid);
|
||||
void addrequestZaddr(QString tx, QString requestZaddr);
|
||||
QString getCidByTx(QString tx);
|
||||
QString getrequestZaddrByTx(QString tx);
|
||||
void killCidCache();
|
||||
void killrequestZaddrCache();
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "ui_connection.h"
|
||||
#include "precompiled.h"
|
||||
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
class Controller;
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
// Copyright 2019-2020 The Hush developers
|
||||
// GPLv3
|
||||
#include "contactmodel.h"
|
||||
#include "addressbook.h"
|
||||
#include "mainwindow.h"
|
||||
#include "chatmodel.h"
|
||||
|
||||
void ContactModel::renderContactList(QListView* view)
|
||||
{
|
||||
@@ -12,7 +15,7 @@ void ContactModel::renderContactList(QListView* view)
|
||||
auto theme = Settings::getInstance()->get_theme_name();
|
||||
if ((theme == "dark" || theme == "midnight")) {
|
||||
|
||||
QString avatar = c.getAvatar();
|
||||
QString avatar = c.getAvatar();
|
||||
|
||||
QStandardItem* Items1 = new QStandardItem(QIcon(avatar) ,c.getName());
|
||||
contact->appendRow(Items1);
|
||||
@@ -22,10 +25,8 @@ void ContactModel::renderContactList(QListView* view)
|
||||
view->setDragDropMode(QAbstractItemView::DropOnly);
|
||||
view->show();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,7 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
<string>Send a contact request</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="1" colspan="2">
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// Copyright 2019-2020 The Hush developers
|
||||
// GPLv3
|
||||
|
||||
#include "controller.h"
|
||||
#include "mainwindow.h"
|
||||
#include "addressbook.h"
|
||||
@@ -6,6 +9,7 @@
|
||||
#include "camount.h"
|
||||
#include "websockets.h"
|
||||
#include "DataStore.h"
|
||||
|
||||
template<>
|
||||
DataStore<QString>* DataStore<QString>::instance = nullptr;
|
||||
template<>
|
||||
@@ -860,7 +864,8 @@ void Controller::refreshTransactions() {
|
||||
QString memo;
|
||||
if (!o["memo"].is_null()) {
|
||||
memo = QString::fromStdString(o["memo"]);
|
||||
}
|
||||
}
|
||||
|
||||
QString cid;
|
||||
QString contact;
|
||||
|
||||
@@ -869,20 +874,22 @@ void Controller::refreshTransactions() {
|
||||
if (address == c.getPartnerAddress()){
|
||||
contact = c.getName();
|
||||
}else{ contact = "";}
|
||||
}
|
||||
|
||||
|
||||
ChatItem item = ChatItem(
|
||||
datetime,
|
||||
address,
|
||||
contact,
|
||||
memo,
|
||||
QString(""),
|
||||
QString(""),
|
||||
cid, // we have to set the cid here, its included in our Addressbook for this contact
|
||||
txid,
|
||||
true // is an outgoing message
|
||||
);
|
||||
chatModel->addMessage(item);
|
||||
|
||||
|
||||
}
|
||||
|
||||
items.push_back(TransactionItemDetail{address, amount, memo});
|
||||
total_amount = total_amount + amount;
|
||||
@@ -930,37 +937,40 @@ void Controller::refreshTransactions() {
|
||||
|
||||
QString type;
|
||||
QString cid;
|
||||
QString requestZaddr1;
|
||||
QString requestZaddr;
|
||||
|
||||
if (memo.startsWith("{")) {
|
||||
|
||||
type = memo.mid(75,4);
|
||||
cid = memo.mid(14,36);
|
||||
requestZaddr1 = memo.right(82);
|
||||
requestZaddr = requestZaddr1.left(78);
|
||||
|
||||
qDebug()<<type;
|
||||
qDebug()<<cid;
|
||||
chatModel->addCid(txid, cid);
|
||||
chatModel->addrequestZaddr(txid, requestZaddr);
|
||||
|
||||
}
|
||||
if (type == "cont")
|
||||
|
||||
{
|
||||
|
||||
qDebug()<< "Als Request erkannt";
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (chatModel->getCidByTx(txid) != QString("0xdeadbeef")){
|
||||
|
||||
cid = chatModel->getCidByTx(txid);
|
||||
|
||||
}
|
||||
|
||||
|
||||
else{
|
||||
|
||||
cid = "";
|
||||
}
|
||||
|
||||
if (chatModel->getrequestZaddrByTx(txid) != QString("0xdeadbeef")){
|
||||
|
||||
requestZaddr = chatModel->getrequestZaddrByTx(txid);
|
||||
|
||||
}
|
||||
|
||||
else{
|
||||
requestZaddr = "";
|
||||
}
|
||||
|
||||
QString contact;
|
||||
for(auto &c : AddressBook::getInstance()->getAllAddressLabels())
|
||||
@@ -968,23 +978,23 @@ void Controller::refreshTransactions() {
|
||||
|
||||
if (address == c.getMyAddress()){
|
||||
contact = c.getName();
|
||||
qDebug()<< "Addressbuch Addresse: " << c.getMyAddress();
|
||||
qDebug()<< "Addresse: " << address;
|
||||
|
||||
}else{ contact = "";}
|
||||
|
||||
|
||||
ChatItem item = ChatItem(
|
||||
datetime,
|
||||
address,
|
||||
contact,
|
||||
memo,
|
||||
requestZaddr,
|
||||
type,
|
||||
cid, // we have to set the cid here, its included in the headermemo
|
||||
txid,
|
||||
false
|
||||
);
|
||||
|
||||
chatModel->addMessage(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Copyright 2019-2020 The Hush developers
|
||||
// GPLv3
|
||||
#include "mainwindow.h"
|
||||
#include "addressbook.h"
|
||||
#include "viewalladdresses.h"
|
||||
@@ -15,6 +17,8 @@
|
||||
#include "version.h"
|
||||
#include "connection.h"
|
||||
#include "ui_contactrequest.h"
|
||||
#include "ui_requestContactDialog.h"
|
||||
#include "chatmodel.h"
|
||||
#include "requestdialog.h"
|
||||
#include "websockets.h"
|
||||
#include <QRegularExpression>
|
||||
@@ -1006,22 +1010,21 @@ void MainWindow::setupchatTab() {
|
||||
|
||||
// Is request Contact checked?
|
||||
|
||||
if (ui->request->isChecked()) {
|
||||
// if (ui->request->isChecked()) {
|
||||
|
||||
|
||||
QObject::connect(ui->sendChatButton, &QPushButton::clicked, this, &MainWindow::ContactRequest);
|
||||
// QObject::connect(ui->sendChatButton, &QPushButton::clicked, this, &MainWindow::ContactRequest);
|
||||
|
||||
// qDebug() <<ui->request->isChecked()->text();
|
||||
}else{
|
||||
// }else{
|
||||
|
||||
QObject::connect(ui->sendChatButton, &QPushButton::clicked, this, &MainWindow::sendChatButton);
|
||||
|
||||
}
|
||||
// }
|
||||
|
||||
QObject::connect(ui->safeContactRequest, &QPushButton::clicked, this, &MainWindow::addContact);
|
||||
|
||||
|
||||
///////// Set selected Zaddr for Chat with Doubleklick
|
||||
///////// Set selected Zaddr for Chat with Klick
|
||||
|
||||
QObject::connect(ui->listContactWidget, &QTableView::clicked, [=] () {
|
||||
|
||||
@@ -1045,7 +1048,6 @@ void MainWindow::setupchatTab() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
ChatMemoEdit::ChatMemoEdit(QWidget* parent) : QPlainTextEdit(parent) {
|
||||
QObject::connect(this, &QPlainTextEdit::textChanged, this, &ChatMemoEdit::updateDisplay);
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "logger.h"
|
||||
#include "recurring.h"
|
||||
|
||||
|
||||
// Forward declare to break circular dependency.
|
||||
class Controller;
|
||||
class Settings;
|
||||
@@ -61,6 +62,10 @@ public:
|
||||
|
||||
void updateLabels();
|
||||
void updateTAddrCombo(bool checked);
|
||||
// void setChatItem(ChatItem* item);
|
||||
//void ChatItem* getChatItem();
|
||||
|
||||
|
||||
|
||||
// Disable recurring on mainnet
|
||||
void disableRecurring();
|
||||
@@ -74,6 +79,8 @@ public:
|
||||
QLabel* statusIcon;
|
||||
QLabel* loadingLabel;
|
||||
QWidget* hushdtab;
|
||||
//ChatItem* currentChatItem;
|
||||
|
||||
|
||||
Logger* logger;
|
||||
|
||||
@@ -83,8 +90,10 @@ public:
|
||||
public slots:
|
||||
void slot_change_theme(const QString& themeName);
|
||||
void slot_change_currency(const QString& currencyName);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
void closeEvent(QCloseEvent* event);
|
||||
|
||||
void setupSendTab();
|
||||
@@ -93,6 +102,7 @@ private:
|
||||
void setupBalancesTab();
|
||||
void setuphushdTab();
|
||||
void setupchatTab();
|
||||
void renderContactRequest();
|
||||
void setLenDisplayLabel(QLabel* label);
|
||||
|
||||
void updateContacts();
|
||||
@@ -147,6 +157,9 @@ private:
|
||||
void restoreSavedStates();
|
||||
bool eventFilter(QObject *object, QEvent *event);
|
||||
|
||||
|
||||
|
||||
|
||||
bool uiPaymentsReady = false;
|
||||
QString pendingURIPayment;
|
||||
|
||||
@@ -154,6 +167,7 @@ private:
|
||||
WormholeClient* wormhole = nullptr;
|
||||
|
||||
Controller* rpc = nullptr;
|
||||
|
||||
QCompleter* labelCompleter = nullptr;
|
||||
QRegExpValidator* amtValidator = nullptr;
|
||||
QRegExpValidator* feesValidator = nullptr;
|
||||
|
||||
@@ -1332,9 +1332,9 @@
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>40</y>
|
||||
<y>90</y>
|
||||
<width>341</width>
|
||||
<height>601</height>
|
||||
<height>551</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="mouseTracking">
|
||||
@@ -1354,7 +1354,7 @@
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>20</y>
|
||||
<y>60</y>
|
||||
<width>341</width>
|
||||
<height>20</height>
|
||||
</rect>
|
||||
@@ -1392,10 +1392,10 @@
|
||||
<widget class="QPushButton" name="sendChatButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>720</x>
|
||||
<y>640</y>
|
||||
<width>114</width>
|
||||
<height>25</height>
|
||||
<x>1170</x>
|
||||
<y>560</y>
|
||||
<width>91</width>
|
||||
<height>81</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="baseSize">
|
||||
@@ -1404,33 +1404,28 @@
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Send</string>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<property name="autoFillBackground">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="safeContactRequest">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>30</x>
|
||||
<y>640</y>
|
||||
<width>211</width>
|
||||
<height>25</height>
|
||||
</rect>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="baseSize">
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normalon>:/icons/res/send-new-white.png</normalon>
|
||||
</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>0</height>
|
||||
<width>61</width>
|
||||
<height>62</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Add conversation contact</string>
|
||||
<property name="default">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>false</bool>
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="contactNameMemo_3">
|
||||
@@ -1484,7 +1479,7 @@
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>340</x>
|
||||
<y>650</y>
|
||||
<y>640</y>
|
||||
<width>261</width>
|
||||
<height>23</height>
|
||||
</rect>
|
||||
@@ -1493,6 +1488,73 @@
|
||||
<string>Is this message a contact request?</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="safeContactRequest">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>90</x>
|
||||
<y>0</y>
|
||||
<width>71</width>
|
||||
<height>61</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="baseSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../application.qrc">
|
||||
<normaloff>:/icons/res/add_contact.png</normaloff>:/icons/res/add_contact.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>43</width>
|
||||
<height>49</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="pushContact">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>170</x>
|
||||
<y>0</y>
|
||||
<width>71</width>
|
||||
<height>61</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="baseSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="autoFillBackground">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../application.qrc">
|
||||
<normaloff>:/icons/res/notification.png</normaloff>:/icons/res/notification.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>43</width>
|
||||
<height>49</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -1667,7 +1729,7 @@
|
||||
<customwidget>
|
||||
<class>AddressCombo</class>
|
||||
<extends>QComboBox</extends>
|
||||
<header>addresscombo.h</header>
|
||||
<header location="global">addresscombo.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QRCodeLabel</class>
|
||||
|
||||
355
src/requestContactDialog.ui
Normal file
@@ -0,0 +1,355 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>requestDialog</class>
|
||||
<widget class="QDialog" name="requestDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1011</width>
|
||||
<height>503</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Incoming contact request</string>
|
||||
</property>
|
||||
<widget class="QListView" name="requestContact">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>9</x>
|
||||
<y>9</y>
|
||||
<width>256</width>
|
||||
<height>461</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="mouseTracking">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked</set>
|
||||
</property>
|
||||
<property name="alternatingRowColors">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QListView" name="requestMemo">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>263</x>
|
||||
<y>9</y>
|
||||
<width>741</width>
|
||||
<height>271</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="verticalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||
</property>
|
||||
<property name="horizontalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||
</property>
|
||||
<property name="sizeAdjustPolicy">
|
||||
<enum>QAbstractScrollArea::AdjustToContents</enum>
|
||||
</property>
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
</property>
|
||||
<property name="resizeMode">
|
||||
<enum>QListView::Adjust</enum>
|
||||
</property>
|
||||
<property name="modelColumn">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="uniformItemSizes">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>276</x>
|
||||
<y>296</y>
|
||||
<width>101</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Request from :</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="requestZaddr">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>393</x>
|
||||
<y>296</y>
|
||||
<width>601</width>
|
||||
<height>25</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>276</x>
|
||||
<y>327</y>
|
||||
<width>30</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Cid :</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="requestCID">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>393</x>
|
||||
<y>327</y>
|
||||
<width>601</width>
|
||||
<height>25</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>276</x>
|
||||
<y>358</y>
|
||||
<width>71</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>My Zaddr :</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="requestMyAddr">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>393</x>
|
||||
<y>358</y>
|
||||
<width>601</width>
|
||||
<height>25</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>276</x>
|
||||
<y>389</y>
|
||||
<width>68</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Nickname</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="requestLabel">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>393</x>
|
||||
<y>389</y>
|
||||
<width>221</width>
|
||||
<height>25</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>276</x>
|
||||
<y>420</y>
|
||||
<width>228</width>
|
||||
<height>17</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><html><head/><body><p align="right">Choose a avatar for your contact :</p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QComboBox" name="comboBoxAvatar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>510</x>
|
||||
<y>420</y>
|
||||
<width>106</width>
|
||||
<height>25</height>
|
||||
</rect>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Stag</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<activeon>:/icons/res/Stag.png</activeon>
|
||||
</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Elsa</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<normalon>:/icons/res/Elsa.png</normalon>
|
||||
</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Denio</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<activeon>:/icons/res/Denio.png</activeon>
|
||||
</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Duke</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<activeon>:/icons/res/Duke.png</activeon>
|
||||
</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Yoda</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<activeon>:/icons/res/Yoda.png</activeon>
|
||||
</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Berg</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<activeon>:/icons/res/Berg.png</activeon>
|
||||
</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Sharpee</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<activeon>:/icons/res/Sharpee.png</activeon>
|
||||
</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Garfield</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<activeon>:/icons/res/Garfield.png</activeon>
|
||||
</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Snoopy</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<activeon>:/icons/res/Snoopy.png</activeon>
|
||||
</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Popey</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<activeon>:/icons/res/Popey.png</activeon>
|
||||
</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Pinguin</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<activeon>:/icons/res/Pinguin.png</activeon>
|
||||
</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Mickey</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<activeon>:/icons/res/Mickey.png</activeon>
|
||||
</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>SDLogo</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset>
|
||||
<activeon>:/icons/res/sdlogo2.png</activeon>
|
||||
</iconset>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="cancel">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>300</x>
|
||||
<y>470</y>
|
||||
<width>80</width>
|
||||
<height>25</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="baseSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Cancel</string>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="pushButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>400</x>
|
||||
<y>470</y>
|
||||
<width>101</width>
|
||||
<height>25</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Add Contact</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||