mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-05-14 12:02:29 -04:00
- started changing distant chat so that it works with GXS ids instead of PGP ids. Something is still broken in
service control. Crypto is not done yet => distant chat is unencrypted. - changed GUI for distant chat. Removed invitation system. - added menu item to distant chat GXS ids from IdentityItem (only entry point for now). - fixed bug in chat lobbies causing re-connexion of lobbies not to happen everytime (bug reported bu Lain) git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@7378 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
d18878aa9c
commit
b6c68d1812
22 changed files with 340 additions and 762 deletions
|
@ -6,18 +6,19 @@
|
|||
#include <QGraphicsItem>
|
||||
#include <QGraphicsSceneMouseEvent>
|
||||
|
||||
#include "IdentityItem.h"
|
||||
#include "CircleItem.h"
|
||||
|
||||
#define IMAGE_MAKEFRIEND ""
|
||||
|
||||
CircleItem *CircleItem::_selected_node = NULL ;
|
||||
|
||||
CircleItem::CircleItem(const RsGroupMetaData& group_info)
|
||||
: _group_info(group_info)
|
||||
CircleItem::CircleItem(const RsGroupMetaData& group_info, const RsGxsCircleDetails& details)
|
||||
: _group_info(group_info), _circle_details(details)
|
||||
{
|
||||
std::cerr << "Created group item for id=" <<group_info.mGroupId << std::endl;
|
||||
|
||||
// setFlag(ItemIsMovable);
|
||||
setFlag(ItemIsMovable);
|
||||
setAcceptHoverEvents(true) ;
|
||||
#if QT_VERSION >= 0x040600
|
||||
setFlag(ItemSendsGeometryChanges);
|
||||
|
@ -27,6 +28,16 @@ CircleItem::CircleItem(const RsGroupMetaData& group_info)
|
|||
|
||||
mDeterminedBB = false ;
|
||||
mBBWidth = 40 ;
|
||||
|
||||
/* update friend lists */
|
||||
|
||||
// update the position of all members
|
||||
|
||||
uint32_t n=details.mUnknownPeers.size() ;
|
||||
|
||||
_angles.resize(n) ;
|
||||
for(uint32_t i=0;i<n;++i)
|
||||
_angles[i] = 2*M_PI/n ;
|
||||
}
|
||||
|
||||
void CircleItem::hoverEnterEvent(QGraphicsSceneHoverEvent *e)
|
||||
|
@ -48,31 +59,43 @@ void CircleItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *e)
|
|||
update() ;
|
||||
}
|
||||
|
||||
|
||||
QRectF CircleItem::boundingRect() const
|
||||
{
|
||||
static const bool mDeterminedBB = false ;
|
||||
static const int mBBWidth = 40 ;
|
||||
|
||||
return QRectF(-(int)IMG_SIZE/2-10, -(int)IMG_SIZE/2-10, (int)IMG_SIZE+20,(int)IMG_SIZE+35) ;
|
||||
return QRectF(-(int)IMG_SIZE/2 - CRC_SIZE, -(int)IMG_SIZE/2 - CRC_SIZE, IMG_SIZE+2*CRC_SIZE,IMG_SIZE+2*CRC_SIZE) ;
|
||||
}
|
||||
|
||||
void CircleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *)
|
||||
{
|
||||
painter->setPen(Qt::NoPen);
|
||||
painter->setBrush(Qt::lightGray);
|
||||
painter->drawEllipse(-7, -7, 20, 20);
|
||||
|
||||
QRadialGradient gradient(-10, -IMG_SIZE/3.0, IMG_SIZE*1.5);
|
||||
gradient.setColorAt(0.0f,Qt::lightGray) ;
|
||||
gradient.setColorAt(1.0f,Qt::darkGray) ;
|
||||
painter->setBrush(gradient);
|
||||
|
||||
if(_selected)
|
||||
painter->setOpacity(0.7) ;
|
||||
else
|
||||
painter->setOpacity(1.0) ;
|
||||
|
||||
// draw a circle in the center
|
||||
//
|
||||
QRadialGradient gradient(-10, -IMG_SIZE/3.0, IMG_SIZE*1.5);
|
||||
gradient.setColorAt(0.0f,Qt::lightGray) ;
|
||||
gradient.setColorAt(1.0f,Qt::darkGray) ;
|
||||
painter->setBrush(gradient);
|
||||
|
||||
painter->setPen(Qt::NoPen);
|
||||
painter->setBrush(Qt::lightGray);
|
||||
painter->drawEllipse(-7, -7, 20, 20);
|
||||
|
||||
// Now draw all members of this circle into a circle
|
||||
//
|
||||
uint32_t i=0 ;
|
||||
for(std::set<RsGxsId>::const_iterator it(_circle_details.mUnknownPeers.begin());it!= _circle_details.mUnknownPeers.end();++it)
|
||||
{
|
||||
painter->drawImage(QPoint(CRC_SIZE*cos(_angles[i]) -(int)IMG_SIZE/2, CRC_SIZE*sin(_angles[i]) -(int)IMG_SIZE/2), IdentityItem::makeDefaultIcon(RsGxsGroupId(*it))) ;
|
||||
++i ;
|
||||
}
|
||||
|
||||
// Draw the name of the circle
|
||||
//
|
||||
painter->setPen(QPen(Qt::black, 0));
|
||||
|
||||
//painter->drawRoundedRect(QRectF(-(int)IMG_SIZE/2-10, -(int)IMG_SIZE/2-10, 20+IMG_SIZE, 20+IMG_SIZE),20,15) ;
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
#include <QGraphicsItem>
|
||||
|
||||
#include <retroshare/rsidentity.h>
|
||||
#include <retroshare/rsgxscircles.h>
|
||||
|
||||
class CircleItem: public QObject, public QGraphicsItem
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
CircleItem(const RsGroupMetaData& gxs_group_info) ;
|
||||
CircleItem(const RsGroupMetaData& gxs_group_info,const RsGxsCircleDetails& details) ;
|
||||
|
||||
QRectF boundingRect() const ;
|
||||
//QPainterPath shape() const ;
|
||||
|
@ -18,7 +18,9 @@ class CircleItem: public QObject, public QGraphicsItem
|
|||
|
||||
//static QImage makeDefaultIcon(const RsGxsGroupId& id) ;
|
||||
|
||||
static const int IMG_SIZE = 64;
|
||||
static const int IMG_SIZE = 32;
|
||||
static const int CRC_SIZE = 128;
|
||||
|
||||
static CircleItem *_selected_node ;
|
||||
|
||||
const RsGroupMetaData& groupInfo() const { return _group_info ; }
|
||||
|
@ -35,9 +37,12 @@ signals:
|
|||
virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *) ;
|
||||
|
||||
RsGroupMetaData _group_info ;
|
||||
RsGxsCircleDetails _circle_details ;
|
||||
|
||||
bool mDeterminedBB;
|
||||
bool mBBWidth;
|
||||
bool _selected ;
|
||||
|
||||
std::vector<float> _angles ;
|
||||
};
|
||||
|
||||
|
|
|
@ -25,23 +25,24 @@ GroupListView::GroupListView(QWidget *)
|
|||
mStateHelper = new UIStateHelper(this);
|
||||
//mStateHelper->addWidget(IDDIALOG_IDLIST, ui.treeWidget_IdList);
|
||||
|
||||
mIdQueue = new TokenQueue(rsIdentity->getTokenService(), this);
|
||||
mIdentityQueue = new TokenQueue(rsIdentity->getTokenService(), this);
|
||||
mCirclesQueue = new TokenQueue(rsGxsCircles->getTokenService(), this);
|
||||
|
||||
QGraphicsScene *scene = new QGraphicsScene(QRectF(0,0,width(),height()),this);
|
||||
scene->setItemIndexMethod(QGraphicsScene::NoIndex);
|
||||
scene->clear() ;
|
||||
setScene(scene);
|
||||
scene->setSceneRect(0, 0, width(), height());
|
||||
QGraphicsScene *scene = new QGraphicsScene(QRectF(0,0,width(),height()),this);
|
||||
scene->setItemIndexMethod(QGraphicsScene::NoIndex);
|
||||
scene->clear() ;
|
||||
setScene(scene);
|
||||
scene->setSceneRect(0, 0, width(), height());
|
||||
|
||||
setCacheMode(CacheBackground);
|
||||
setViewportUpdateMode(FullViewportUpdate);
|
||||
setRenderHint(QPainter::Antialiasing);
|
||||
setTransformationAnchor(AnchorUnderMouse);
|
||||
setResizeAnchor(AnchorViewCenter);
|
||||
_friction_factor = 1.0f ;
|
||||
setCacheMode(CacheBackground);
|
||||
setViewportUpdateMode(FullViewportUpdate);
|
||||
setRenderHint(QPainter::Antialiasing);
|
||||
setTransformationAnchor(AnchorUnderMouse);
|
||||
setResizeAnchor(AnchorViewCenter);
|
||||
_friction_factor = 1.0f ;
|
||||
|
||||
setMouseTracking(true) ;
|
||||
//scale(qreal(0.8), qreal(0.8));
|
||||
setMouseTracking(true) ;
|
||||
//scale(qreal(0.8), qreal(0.8));
|
||||
}
|
||||
|
||||
void GroupListView::resizeEvent(QResizeEvent *e)
|
||||
|
@ -199,7 +200,14 @@ void GroupListView::insertCircles(uint32_t token)
|
|||
std::cerr << " Group: " << vit->mGroupName;
|
||||
std::cerr << std::endl;
|
||||
|
||||
CircleItem *gitem = new CircleItem( *vit ) ;
|
||||
RsGxsCircleDetails details ;
|
||||
|
||||
if(!rsGxsCircles->getCircleDetails(RsGxsCircleId(vit->mGroupId), details))
|
||||
{
|
||||
std::cerr << "(EE) Cannot get details for circle id " << vit->mGroupId << ". Circle item is not created!" << std::endl;
|
||||
continue ;
|
||||
}
|
||||
CircleItem *gitem = new CircleItem( *vit, details ) ;
|
||||
|
||||
_circles_items[(*vit).mGroupId] = gitem ;
|
||||
|
||||
|
@ -209,29 +217,6 @@ void GroupListView::insertCircles(uint32_t token)
|
|||
|
||||
scene()->addItem(gitem) ;
|
||||
++i ;
|
||||
|
||||
//groupItem->setText(CIRCLEGROUP_CIRCLE_COL_GROUPNAME, QString::fromUtf8(vit->mGroupName.c_str()));
|
||||
//groupItem->setText(CIRCLEGROUP_CIRCLE_COL_GROUPID, QString::fromStdString(vit->mGroupId.toStdString()));
|
||||
|
||||
//if (vit->mCircleType == GXS_CIRCLE_TYPE_LOCAL)
|
||||
//{
|
||||
// personalCirclesItem->addChild(groupItem);
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// if (vit->mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_ADMIN)
|
||||
// {
|
||||
// externalAdminCirclesItem->addChild(groupItem);
|
||||
// }
|
||||
// else if (vit->mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_SUBSCRIBED)
|
||||
// {
|
||||
// externalSubCirclesItem->addChild(groupItem);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// externalOtherCirclesItem->addChild(groupItem);
|
||||
// }
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -239,40 +224,40 @@ void GroupListView::requestIdList()
|
|||
{
|
||||
std::cerr << "Requesting ID list..." << std::endl;
|
||||
|
||||
if (!mIdQueue)
|
||||
if (!mIdentityQueue)
|
||||
return;
|
||||
|
||||
mStateHelper->setLoading(GLVIEW_IDLIST, true);
|
||||
//mStateHelper->setLoading(GLVIEW_IDDETAILS, true);
|
||||
//mStateHelper->setLoading(GLVIEW_REPLIST, true);
|
||||
|
||||
mIdQueue->cancelActiveRequestTokens(GLVIEW_IDLIST);
|
||||
mIdentityQueue->cancelActiveRequestTokens(GLVIEW_IDLIST);
|
||||
|
||||
RsTokReqOptions opts;
|
||||
opts.mReqType = GXS_REQUEST_TYPE_GROUP_DATA;
|
||||
|
||||
uint32_t token;
|
||||
|
||||
mIdQueue->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, GLVIEW_IDLIST);
|
||||
mIdentityQueue->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, GLVIEW_IDLIST);
|
||||
}
|
||||
void GroupListView::requestCirclesList()
|
||||
{
|
||||
std::cerr << "Requesting Circles list..." << std::endl;
|
||||
|
||||
if (!mIdQueue)
|
||||
if (!mCirclesQueue)
|
||||
return;
|
||||
|
||||
mStateHelper->setLoading(GLVIEW_CIRCLES, true);
|
||||
//mStateHelper->setLoading(GLVIEW_IDDETAILS, true);
|
||||
//mStateHelper->setLoading(GLVIEW_REPLIST, true);
|
||||
|
||||
mIdQueue->cancelActiveRequestTokens(GLVIEW_CIRCLES);
|
||||
mCirclesQueue->cancelActiveRequestTokens(GLVIEW_CIRCLES);
|
||||
|
||||
RsTokReqOptions opts;
|
||||
opts.mReqType = GXS_REQUEST_TYPE_GROUP_META;
|
||||
|
||||
uint32_t token;
|
||||
mIdQueue->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_SUMMARY, opts, GLVIEW_CIRCLES);
|
||||
mCirclesQueue->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_SUMMARY, opts, GLVIEW_CIRCLES);
|
||||
}
|
||||
void GroupListView::forceRedraw()
|
||||
{
|
||||
|
|
|
@ -71,7 +71,9 @@ private:
|
|||
float _friction_factor ;
|
||||
//NodeId _current_node ;
|
||||
|
||||
TokenQueue *mIdQueue;
|
||||
TokenQueue *mIdentityQueue;
|
||||
TokenQueue *mCirclesQueue;
|
||||
|
||||
UIStateHelper *mStateHelper;
|
||||
|
||||
std::map<RsGxsGroupId,IdentityItem *> _identity_items ;
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
#include <math.h>
|
||||
|
||||
#include <retroshare/rsmsgs.h>
|
||||
|
||||
#include <QPainter>
|
||||
#include <QMessageBox>
|
||||
#include <QMenu>
|
||||
#include <QStyle>
|
||||
#include <QGraphicsItem>
|
||||
#include <QGraphicsSceneMouseEvent>
|
||||
|
||||
#include <gui/chat/ChatDialog.h>
|
||||
#include "IdentityItem.h"
|
||||
|
||||
#define IMAGE_MAKEFRIEND ""
|
||||
|
@ -143,9 +147,7 @@ void IdentityItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *opti
|
|||
|
||||
painter->drawRoundedRect(QRectF(-(int)IMG_SIZE/2-10, -(int)IMG_SIZE/2-10, 20+IMG_SIZE, 20+IMG_SIZE),20,15) ;
|
||||
painter->drawImage(QPoint(-(int)IMG_SIZE/2, -(int)IMG_SIZE/2), makeDefaultIcon(_group_info.mMeta.mGroupId)) ;
|
||||
//painter->drawRect(-(int)IMG_SIZE/2, -(int)IMG_SIZE/2, IMG_SIZE, IMG_SIZE);
|
||||
|
||||
//std::string desc_string = _group_info.mMeta.mGroupId.toStdString() ;
|
||||
std::string desc_string = _group_info.mMeta.mGroupName ;
|
||||
|
||||
painter->drawText(-8*desc_string.size()/2, IMG_SIZE/2+24, QString::fromUtf8(desc_string.c_str()));
|
||||
|
@ -160,17 +162,7 @@ void IdentityItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *opti
|
|||
|
||||
QVariant IdentityItem::itemChange(GraphicsItemChange change, const QVariant &value)
|
||||
{
|
||||
// switch (change) {
|
||||
// case ItemPositionHasChanged:
|
||||
// foreach (Edge *edge, edgeList)
|
||||
// edge->adjust();
|
||||
// graph->itemMoved();
|
||||
// break;
|
||||
// default:
|
||||
// break;
|
||||
// };
|
||||
|
||||
return QGraphicsItem::itemChange(change, value);
|
||||
return QGraphicsItem::itemChange(change, value);
|
||||
}
|
||||
|
||||
void IdentityItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
||||
|
@ -188,16 +180,22 @@ void IdentityItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
|
|||
{
|
||||
QMenu contextMnu ;
|
||||
|
||||
//if(_type == GraphWidget::ELASTIC_NODE_TYPE_FRIEND)
|
||||
// contextMnu.addAction(QIcon(IMAGE_DENIED), QObject::tr( "Deny friend" ), this, SLOT(denyFriend()) );
|
||||
//else if(_type != GraphWidget::ELASTIC_NODE_TYPE_OWN)
|
||||
// contextMnu.addAction(QIcon(IMAGE_MAKEFRIEND), QObject::tr( "Make friend" ), this, SLOT(makeFriend()) );
|
||||
|
||||
contextMnu.addAction(QIcon(IMAGE_MAKEFRIEND), QObject::tr( "Peer details" ), this, SLOT(peerDetails()) );
|
||||
|
||||
contextMnu.addAction(QIcon(IMAGE_MAKEFRIEND), QObject::tr( "Chat this peer" ), this, SLOT(distantChat()) );
|
||||
contextMnu.exec(event->screenPos());
|
||||
}
|
||||
|
||||
void IdentityItem::distantChat()
|
||||
{
|
||||
DistantChatPeerId virtual_peer_id ;
|
||||
uint32_t error_code ;
|
||||
|
||||
if(!rsMsgs->initiateDistantChatConnexion(RsGxsId(_group_info.mMeta.mGroupId), virtual_peer_id, error_code))
|
||||
QMessageBox::information(NULL,"Distant cannot work","Distant chat refused with this peer. Reason: "+QString::number(error_code)) ;
|
||||
else
|
||||
ChatDialog::chatFriend(virtual_peer_id);
|
||||
}
|
||||
|
||||
void IdentityItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
//_selected_node = NULL ;
|
||||
|
|
|
@ -22,6 +22,10 @@ class IdentityItem: public QObject, public QGraphicsItem
|
|||
static IdentityItem *_selected_node ;
|
||||
|
||||
const RsGxsIdGroup& groupInfo() const { return _group_info ; }
|
||||
|
||||
public slots:
|
||||
void distantChat() ;
|
||||
|
||||
signals:
|
||||
void itemChanged() ;
|
||||
|
||||
|
|
|
@ -1270,48 +1270,49 @@ static void processList(const QStringList &list, const QString &textSingular, co
|
|||
// MessageComposer::msgDistantPeer(link._hash.toStdString(),link._GPGid.toStdString()) ;
|
||||
}
|
||||
break ;
|
||||
case TYPE_PRIVATE_CHAT:
|
||||
{
|
||||
std::cerr << "Opening a private chat window " << std::endl;
|
||||
std::cerr << " time_stamp = " << link._time_stamp << std::endl;
|
||||
std::cerr << " enc-string = " << link._encrypted_chat_info.toStdString() << std::endl;
|
||||
std::cerr << " PGP Id = " << link._GPGid.toStdString() << std::endl;
|
||||
|
||||
if(link._time_stamp < time(NULL))
|
||||
{
|
||||
QMessageBox::information(NULL,QObject::tr("Chat link is expired"),QObject::tr("This chat link is expired. The destination peer will not answer.")) ;
|
||||
break ;
|
||||
}
|
||||
if(RsPgpId(link._GPGid.toStdString()) != rsPeers->getGPGOwnId())
|
||||
{
|
||||
QMessageBox::information(NULL,QObject::tr("Chat link cannot be decrypted"),QObject::tr("This chat link is encrypted with a key that is not yours. You can't use it. Key ID = ")+link._GPGid) ;
|
||||
break ;
|
||||
}
|
||||
|
||||
DistantChatPeerId dpid ;
|
||||
uint32_t error_code ;
|
||||
|
||||
if(!rsMsgs->initiateDistantChatConnexion(link._encrypted_chat_info.toStdString(),link._time_stamp,dpid,error_code))
|
||||
{
|
||||
QString error_msg ;
|
||||
switch(error_code)
|
||||
{
|
||||
default:
|
||||
case RS_DISTANT_CHAT_ERROR_DECRYPTION_FAILED: error_msg = QObject::tr("The link could not be decrypted.") ; break ;
|
||||
case RS_DISTANT_CHAT_ERROR_SIGNATURE_MISMATCH: error_msg = QObject::tr("The link signature cannot be checked.") ; break ;
|
||||
case RS_DISTANT_CHAT_ERROR_UNKNOWN_KEY: error_msg = QObject::tr("The link is signed by an unknown key.") ; break ;
|
||||
}
|
||||
QMessageBox::information(NULL,QObject::tr("Chat connection is not possible"),error_msg) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(error_code == RS_DISTANT_CHAT_ERROR_UNKNOWN_KEY)
|
||||
QMessageBox::information(NULL,QObject::tr("Chat connection is unauthenticated"),QObject::tr("Signature check failed!\nMake sure you know who you're talking to.")) ;
|
||||
|
||||
ChatDialog::chatFriend(dpid);
|
||||
}
|
||||
}
|
||||
break ;
|
||||
// case TYPE_PRIVATE_CHAT:
|
||||
// {
|
||||
// std::cerr << "Opening a private chat window " << std::endl;
|
||||
// std::cerr << " time_stamp = " << link._time_stamp << std::endl;
|
||||
// std::cerr << " enc-string = " << link._encrypted_chat_info.toStdString() << std::endl;
|
||||
// std::cerr << " PGP Id = " << link._GPGid.toStdString() << std::endl;
|
||||
//
|
||||
// if(link._time_stamp < time(NULL))
|
||||
// {
|
||||
// QMessageBox::information(NULL,QObject::tr("Chat link is expired"),QObject::tr("This chat link is expired. The destination peer will not answer.")) ;
|
||||
// break ;
|
||||
// }
|
||||
// if(RsPgpId(link._GPGid.toStdString()) != rsPeers->getGPGOwnId())
|
||||
// {
|
||||
// QMessageBox::information(NULL,QObject::tr("Chat link cannot be decrypted"),QObject::tr("This chat link is encrypted with a key that is not yours. You can't use it. Key ID = ")+link._GPGid) ;
|
||||
// break ;
|
||||
// }
|
||||
//
|
||||
// DistantChatPeerId dpid ;
|
||||
// uint32_t error_code ;
|
||||
//
|
||||
// if(!rsMsgs->initiateDistantChatConnexion(link._encrypted_chat_info.toStdString(),link._time_stamp,dpid,error_code))
|
||||
// {
|
||||
// QString error_msg ;
|
||||
// switch(error_code)
|
||||
// {
|
||||
// default:
|
||||
// case RS_DISTANT_CHAT_ERROR_DECRYPTION_FAILED: error_msg = QObject::tr("The link could not be decrypted.") ; break ;
|
||||
// case RS_DISTANT_CHAT_ERROR_SIGNATURE_MISMATCH: error_msg = QObject::tr("The link signature cannot be checked.") ; break ;
|
||||
// case RS_DISTANT_CHAT_ERROR_UNKNOWN_KEY: error_msg = QObject::tr("The link is signed by an unknown key.") ; break ;
|
||||
// }
|
||||
// QMessageBox::information(NULL,QObject::tr("Chat connection is not possible"),error_msg) ;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if(error_code == RS_DISTANT_CHAT_ERROR_UNKNOWN_KEY)
|
||||
// QMessageBox::information(NULL,QObject::tr("Chat connection is unauthenticated"),QObject::tr("Signature check failed!\nMake sure you know who you're talking to.")) ;
|
||||
//
|
||||
// ChatDialog::chatFriend(dpid);
|
||||
// }
|
||||
// }
|
||||
// break ;
|
||||
|
||||
case TYPE_FILE:
|
||||
case TYPE_EXTRAFILE:
|
||||
|
|
|
@ -98,9 +98,9 @@ void ChatDialog::init(const RsPeerId &peerId, const QString &title)
|
|||
}
|
||||
|
||||
uint32_t distant_peer_status ;
|
||||
RsPgpId distant_chat_pgp_id ;
|
||||
RsGxsId distant_chat_gxs_id ;
|
||||
|
||||
if(rsMsgs->getDistantChatStatus(peerId,distant_peer_status,distant_chat_pgp_id))
|
||||
if(rsMsgs->getDistantChatStatus(peerId,distant_chat_gxs_id,distant_peer_status))
|
||||
chatflags = RS_CHAT_OPEN | RS_CHAT_FOCUS; // use own flags
|
||||
|
||||
if (chatflags & RS_CHAT_OPEN) {
|
||||
|
@ -118,8 +118,8 @@ void ChatDialog::init(const RsPeerId &peerId, const QString &title)
|
|||
} else if(distant_peer_status > 0) {
|
||||
cd = new PopupDistantChatDialog();
|
||||
chatDialogs[peerId] = cd;
|
||||
std::string peer_name = rsPeers->getGPGName(distant_chat_pgp_id) ;
|
||||
cd->init(peerId, tr("Talking to ")+QString::fromStdString(peer_name)+" (PGP id="+QString::fromStdString(distant_chat_pgp_id.toStdString())+")") ;
|
||||
QString peer_name = cd->getPeerName(peerId) ;
|
||||
cd->init(peerId, tr("Talking to ")+peer_name+" (GXS id="+QString::fromStdString(distant_chat_gxs_id.toStdString())+")") ;
|
||||
|
||||
} else {
|
||||
RsPeerDetails sslDetails;
|
||||
|
@ -210,10 +210,10 @@ void ChatDialog::init(const RsPeerId &peerId, const QString &title)
|
|||
return;
|
||||
}
|
||||
|
||||
RsPgpId distant_chat_pgp_id ;
|
||||
RsGxsId distant_chat_gxs_id ;
|
||||
uint32_t distant_peer_status ;
|
||||
|
||||
if(rsMsgs->getDistantChatStatus(peerId,distant_peer_status,distant_chat_pgp_id))
|
||||
if(rsMsgs->getDistantChatStatus(peerId,distant_chat_gxs_id,distant_peer_status))
|
||||
{
|
||||
getChat(peerId, forceFocus ? RS_CHAT_OPEN | RS_CHAT_FOCUS : RS_CHAT_OPEN ); // use own flags
|
||||
return ;
|
||||
|
|
|
@ -49,6 +49,7 @@
|
|||
#include "util/HandleRichText.h"
|
||||
|
||||
#include <retroshare/rsstatus.h>
|
||||
#include <retroshare/rsidentity.h>
|
||||
#include <retroshare/rspeers.h>
|
||||
#include <retroshare/rshistory.h>
|
||||
#include <retroshare/rsmsgs.h>
|
||||
|
@ -187,8 +188,8 @@ void ChatWidget::init(const RsPeerId &peerId, const QString &title)
|
|||
mChatType = CHATTYPE_LOBBY;
|
||||
} else {
|
||||
uint32_t status;
|
||||
RsPgpId pgp_id;
|
||||
if (rsMsgs->getDistantChatStatus(peerId, status, pgp_id)) {
|
||||
RsGxsId gxs_id;
|
||||
if (rsMsgs->getDistantChatStatus(peerId, gxs_id, status)) {
|
||||
mChatType = CHATTYPE_DISTANT;
|
||||
} else {
|
||||
mChatType = CHATTYPE_PRIVATE;
|
||||
|
@ -952,10 +953,16 @@ void ChatWidget::updateStatus(const QString &peer_id, int status)
|
|||
|
||||
QString peerName ;
|
||||
uint32_t stts ;
|
||||
RsPgpId pgp_id ;
|
||||
RsGxsId gxs_id ;
|
||||
|
||||
if(rsMsgs->getDistantChatStatus(peerId,stts,pgp_id))
|
||||
peerName = QString::fromUtf8(rsPeers->getGPGName(pgp_id).c_str());
|
||||
if(rsMsgs->getDistantChatStatus(peerId,gxs_id,stts))
|
||||
{
|
||||
RsIdentityDetails details ;
|
||||
if(rsIdentity->getIdDetails(gxs_id,details))
|
||||
peerName = QString::fromUtf8( details.mNickname.c_str() ) ;
|
||||
else
|
||||
peerName = QString::fromStdString(gxs_id.toStdString()) ;
|
||||
}
|
||||
else
|
||||
peerName = QString::fromUtf8(rsPeers->getPeerName(peerId).c_str());
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
#include <retroshare/rsstatus.h>
|
||||
#include <retroshare/rspeers.h>
|
||||
#include <retroshare/rsidentity.h>
|
||||
|
||||
#include "RsAutoUpdatePage.h"
|
||||
#include "PopupDistantChatDialog.h"
|
||||
|
@ -74,8 +75,8 @@ void PopupDistantChatDialog::updateDisplay()
|
|||
//
|
||||
|
||||
uint32_t status= RS_DISTANT_CHAT_STATUS_UNKNOWN;
|
||||
RsPgpId pgp_id ;
|
||||
rsMsgs->getDistantChatStatus(_pid,status,pgp_id) ;
|
||||
RsGxsId gxs_id ;
|
||||
rsMsgs->getDistantChatStatus(_pid,gxs_id,status) ;
|
||||
|
||||
switch(status)
|
||||
{
|
||||
|
@ -116,8 +117,8 @@ void PopupDistantChatDialog::closeEvent(QCloseEvent *e)
|
|||
//std::cerr << "Closing window => closing distant chat for hash " << _pid << std::endl;
|
||||
|
||||
uint32_t status= RS_DISTANT_CHAT_STATUS_UNKNOWN;
|
||||
RsPgpId pgp_id ;
|
||||
rsMsgs->getDistantChatStatus(_pid,status,pgp_id) ;
|
||||
RsGxsId gxs_id ;
|
||||
rsMsgs->getDistantChatStatus(_pid,gxs_id,status) ;
|
||||
|
||||
if(status != RS_DISTANT_CHAT_STATUS_REMOTELY_CLOSED)
|
||||
{
|
||||
|
@ -140,10 +141,21 @@ void PopupDistantChatDialog::closeEvent(QCloseEvent *e)
|
|||
QString PopupDistantChatDialog::getPeerName(const DistantChatPeerId &id) const
|
||||
{
|
||||
uint32_t status ;
|
||||
RsPgpId pgp_id ;
|
||||
RsGxsId gxs_id ;
|
||||
|
||||
if(rsMsgs->getDistantChatStatus(id,status,pgp_id))
|
||||
return QString::fromStdString(rsPeers->getGPGName(pgp_id)) ;
|
||||
if(rsMsgs->getDistantChatStatus(id,gxs_id,status))
|
||||
{
|
||||
RsIdentityDetails details ;
|
||||
|
||||
for(int i=0;i<3;++i)
|
||||
if(rsIdentity->getIdDetails(gxs_id,details))
|
||||
return QString::fromUtf8( details.mNickname.c_str() ) ;
|
||||
else
|
||||
usleep(500000) ; // sleep for 500 msec.
|
||||
|
||||
return QString::fromStdString(id.toStdString()) ;
|
||||
}
|
||||
else
|
||||
return ChatDialog::getPeerName(id) ;
|
||||
}
|
||||
|
||||
|
|
|
@ -31,26 +31,26 @@ class PopupDistantChatDialog: public PopupChatDialog
|
|||
{
|
||||
Q_OBJECT
|
||||
|
||||
friend class ChatDialog;
|
||||
|
||||
protected:
|
||||
/** Default constructor */
|
||||
PopupDistantChatDialog(QWidget *parent = 0, Qt::WindowFlags flags = 0);
|
||||
/** Default destructor */
|
||||
virtual ~PopupDistantChatDialog();
|
||||
|
||||
virtual void init(const DistantChatPeerId &pid, const QString &title);
|
||||
virtual void closeEvent(QCloseEvent *e) ;
|
||||
|
||||
virtual QString getPeerName(const DistantChatPeerId& id) const ;
|
||||
/** Default constructor */
|
||||
PopupDistantChatDialog(QWidget *parent = 0, Qt::WindowFlags flags = 0);
|
||||
/** Default destructor */
|
||||
virtual ~PopupDistantChatDialog();
|
||||
|
||||
virtual void init(const DistantChatPeerId &pid, const QString &title);
|
||||
virtual void closeEvent(QCloseEvent *e) ;
|
||||
|
||||
virtual QString getPeerName(const DistantChatPeerId& id) const ;
|
||||
|
||||
protected slots:
|
||||
void updateDisplay() ; // overloads RsAutoUpdatePage
|
||||
|
||||
private:
|
||||
QTimer *_update_timer ;
|
||||
DistantChatPeerId _pid ;
|
||||
QLabel *_status_label ;
|
||||
QTimer *_update_timer ;
|
||||
DistantChatPeerId _pid ;
|
||||
QLabel *_status_label ;
|
||||
|
||||
friend class ChatDialog;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -204,8 +204,12 @@ void GxsGroupFrameDialog::todo()
|
|||
QMessageBox::information(this, "Todo", text(TEXT_TODO));
|
||||
}
|
||||
|
||||
void GxsGroupFrameDialog::groupTreeCustomPopupMenu(QPoint /*point*/)
|
||||
void GxsGroupFrameDialog::groupTreeCustomPopupMenu(QPoint point)
|
||||
{
|
||||
QString id = "" ;//ui->groupTreeWidget->itemIdAt(point);
|
||||
if (id.isEmpty()) return;
|
||||
|
||||
mGroupId = RsGxsGroupId(id.toStdString());
|
||||
int subscribeFlags = ui->groupTreeWidget->subscribeFlags(QString::fromStdString(mGroupId.toStdString()));
|
||||
|
||||
bool isAdmin = IS_GROUP_ADMIN(subscribeFlags);
|
||||
|
|
|
@ -29,7 +29,6 @@
|
|||
#include <retroshare/rspeers.h>
|
||||
#include "ChatPage.h"
|
||||
#include <gui/RetroShareLink.h>
|
||||
#include <gui/CreateMsgLinkDialog.h>
|
||||
#include "gui/chat/ChatStyle.h"
|
||||
#include "gui/chat/ChatDialog.h"
|
||||
#include "gui/notifyqt.h"
|
||||
|
@ -105,7 +104,6 @@ ChatPage::ChatPage(QWidget * parent, Qt::WindowFlags flags)
|
|||
ui.minimumContrast->hide();
|
||||
#endif
|
||||
|
||||
connect(ui._personal_invites_LW, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(personalInvites_customPopupMenu(QPoint)));
|
||||
connect(ui._collected_contacts_LW, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(collectedContacts_customPopupMenu(QPoint)));
|
||||
|
||||
/* Hide platform specific features */
|
||||
|
@ -131,8 +129,6 @@ void ChatPage::collectedContacts_customPopupMenu(QPoint p)
|
|||
if(selected.size() == 1)
|
||||
contextMnu.addAction( QIcon(IMAGE_CHAT_OPEN), tr("Open secured chat tunnel"), this, SLOT(collectedInvite_openDistantChat()) ) ;
|
||||
|
||||
contextMnu.addAction( QIcon(IMAGE_CHAT_DELETE), tr("Delete this invite"), this, SLOT(collectedInvite_delete()) ) ;
|
||||
|
||||
contextMnu.exec(QCursor::pos());
|
||||
}
|
||||
|
||||
|
@ -140,110 +136,16 @@ void ChatPage::collectedInvite_openDistantChat()
|
|||
{
|
||||
QList<QListWidgetItem*> selected = ui._collected_contacts_LW->selectedItems() ;
|
||||
|
||||
RsPeerId virtual_peer_id( (*selected.begin())->data(Qt::UserRole).toString().toStdString() );
|
||||
RsGxsId gxs_id( (*selected.begin())->data(Qt::UserRole).toString().toStdString() );
|
||||
|
||||
std::cerr << "Openning secured chat tunnel for virtual peer id " << virtual_peer_id << ". Please wait..." << std::endl;
|
||||
std::cerr << "Openning secured chat tunnel for virtual peer id " << gxs_id << ". Please wait..." << std::endl;
|
||||
uint32_t error_code ;
|
||||
DistantChatPeerId dcpid ;
|
||||
|
||||
if(!rsMsgs->initiateDistantChatConnexion(virtual_peer_id,error_code))
|
||||
if(!rsMsgs->initiateDistantChatConnexion(gxs_id,dcpid,error_code))
|
||||
QMessageBox::critical(NULL,tr("Can't open distant chat"),tr("Cannot open distant chat. Error code=")+QString::number(error_code)) ;
|
||||
else
|
||||
ChatDialog::chatFriend(virtual_peer_id);
|
||||
}
|
||||
|
||||
void ChatPage::collectedInvite_delete()
|
||||
{
|
||||
QList<QListWidgetItem*> selected = ui._collected_contacts_LW->selectedItems() ;
|
||||
|
||||
for(QList<QListWidgetItem*>::const_iterator it(selected.begin());it!=selected.end();++it)
|
||||
{
|
||||
RsPeerId virtual_peer_id ( (*it)->data(Qt::UserRole).toString().toStdString() );
|
||||
|
||||
std::cerr << "Removing chat invite for virtual_peer_id " << virtual_peer_id << std::endl;
|
||||
|
||||
if(!rsMsgs->removeDistantChatInvite(virtual_peer_id))
|
||||
QMessageBox::critical(NULL,tr("Can't open distant chat"),tr("Cannot remove distant chat invite.")) ;
|
||||
}
|
||||
|
||||
load() ;
|
||||
}
|
||||
|
||||
void ChatPage::personalInvites_customPopupMenu(QPoint p)
|
||||
{
|
||||
// items: create invite, copy to clipboard, delete
|
||||
std::cerr << "In custom popup menu" << std::endl;
|
||||
|
||||
QList<QListWidgetItem*> selected = ui._personal_invites_LW->selectedItems() ;
|
||||
|
||||
QMenu contextMnu( this );
|
||||
|
||||
contextMnu.addAction( QIcon(IMAGE_CHAT_CREATE), tr("Create a chat invitation"), this, SLOT(personalInvites_create()) ) ;
|
||||
|
||||
if(!selected.empty())
|
||||
{
|
||||
contextMnu.addAction( QIcon(IMAGE_CHAT_COPY), tr("Copy link to clipboard"), this, SLOT(personalInvites_copyLink()) ) ;
|
||||
contextMnu.addAction( QIcon(IMAGE_CHAT_DELETE), tr("Delete this invite"), this, SLOT(personalInvites_delete()) ) ;
|
||||
}
|
||||
|
||||
contextMnu.exec(QCursor::pos());
|
||||
}
|
||||
|
||||
void ChatPage::personalInvites_copyLink()
|
||||
{
|
||||
QList<QListWidgetItem*> selected = ui._personal_invites_LW->selectedItems() ;
|
||||
QList<RetroShareLink> links ;
|
||||
|
||||
std::vector<DistantChatInviteInfo> invites ;
|
||||
rsMsgs->getDistantChatInviteList(invites) ;
|
||||
|
||||
for(QList<QListWidgetItem*>::const_iterator it(selected.begin());it!=selected.end();++it)
|
||||
{
|
||||
RsPeerId virtual_peer_id ( (*it)->data(Qt::UserRole).toString().toStdString() );
|
||||
|
||||
bool found = false ;
|
||||
for(uint32_t i=0;i<invites.size();++i)
|
||||
if(invites[i].pid == virtual_peer_id)
|
||||
{
|
||||
RetroShareLink link ;
|
||||
|
||||
if(!link.createPrivateChatInvite(invites[i].time_of_validity,QString::fromStdString(invites[i].destination_pgp_id.toStdString()),QString::fromStdString(invites[i].encrypted_radix64_string)))
|
||||
{
|
||||
std::cerr << "Cannot create link." << std::endl;
|
||||
continue;
|
||||
}
|
||||
|
||||
links.push_back(link) ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
|
||||
if(!links.empty())
|
||||
RSLinkClipboard::copyLinks(links) ;
|
||||
}
|
||||
|
||||
void ChatPage::personalInvites_delete()
|
||||
{
|
||||
QList<QListWidgetItem*> selected = ui._personal_invites_LW->selectedItems() ;
|
||||
QList<RetroShareLink> links ;
|
||||
|
||||
for(QList<QListWidgetItem*>::const_iterator it(selected.begin());it!=selected.end();++it)
|
||||
{
|
||||
RsPeerId virtual_peer_id ( (*it)->data(Qt::UserRole).toString().toStdString() );
|
||||
|
||||
rsMsgs->removeDistantChatInvite(virtual_peer_id) ;
|
||||
}
|
||||
load() ;
|
||||
}
|
||||
|
||||
void ChatPage::personalInvites_create()
|
||||
{
|
||||
// Call the link creation box
|
||||
|
||||
CreateMsgLinkDialog::createNewChatLink() ;
|
||||
|
||||
// Now update the page
|
||||
//
|
||||
load() ;
|
||||
ChatDialog::chatFriend(dcpid);
|
||||
}
|
||||
|
||||
/** Saves the changes on this page */
|
||||
|
@ -388,58 +290,23 @@ ChatPage::load()
|
|||
|
||||
// load personal invites
|
||||
//
|
||||
std::vector<DistantChatInviteInfo> invites ;
|
||||
rsMsgs->getDistantChatInviteList(invites) ;
|
||||
#ifdef TO_BE_DONE
|
||||
for()
|
||||
{
|
||||
QListWidgetItem *item = new QListWidgetItem;
|
||||
item->setData(Qt::DisplayRole,tr("Private chat invite from ")+QString::fromUtf8(detail.name.c_str())) ;
|
||||
|
||||
ui._personal_invites_LW->clear() ;
|
||||
ui._collected_contacts_LW->clear() ;
|
||||
QString tt ;
|
||||
tt += tr("Name : ") + QString::fromStdString(detail.name) ;
|
||||
tt += "\n" + QString("PGP id : ") + QString::fromStdString(invites[i].destination_pgp_id.toStdString()) ;
|
||||
tt += "\n" + QString("Valid until : ") + QDateTime::fromTime_t(invites[i].time_of_validity).toString() ;
|
||||
|
||||
for(uint32_t i=0;i<invites.size();++i)
|
||||
{
|
||||
RsPeerDetails detail ;
|
||||
rsPeers->getGPGDetails(invites[i].destination_pgp_id,detail) ;
|
||||
item->setData(Qt::UserRole,QString::fromStdString(invites[i].pid.toStdString())) ;
|
||||
item->setToolTip(tt) ;
|
||||
|
||||
if(invites[i].encrypted_radix64_string.empty())
|
||||
{
|
||||
QListWidgetItem *item = new QListWidgetItem;
|
||||
item->setData(Qt::DisplayRole,tr("Private chat invite from ")+QString::fromUtf8(detail.name.c_str())) ;
|
||||
|
||||
QString tt ;
|
||||
tt += tr("Name : ") + QString::fromStdString(detail.name) ;
|
||||
tt += "\n" + QString("PGP id : ") + QString::fromStdString(invites[i].destination_pgp_id.toStdString()) ;
|
||||
tt += "\n" + QString("Valid until : ") + QDateTime::fromTime_t(invites[i].time_of_validity).toString() ;
|
||||
|
||||
if(invites[i].invite_flags & RS_DISTANT_CHAT_FLAG_SIGNED)
|
||||
if(invites[i].invite_flags & RS_DISTANT_CHAT_FLAG_SIGNATURE_OK)
|
||||
{
|
||||
tt += "\n"+tr("Authenticated signature") ;
|
||||
item->setIcon(QIcon(":images/stock_signature_ok.png")) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
tt += "\n"+tr("Signed with key not in keyring") ;
|
||||
item->setIcon(QIcon(":images/stock_signature_unverified.png")) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
tt += "\n"+tr("Not signed.") ;
|
||||
item->setIcon(QIcon(":images/stock_signature_missing.png")) ;
|
||||
}
|
||||
|
||||
item->setData(Qt::UserRole,QString::fromStdString(invites[i].pid.toStdString())) ;
|
||||
item->setToolTip(tt) ;
|
||||
|
||||
ui._collected_contacts_LW->insertItem(0,item) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
QListWidgetItem *item = new QListWidgetItem;
|
||||
item->setData(Qt::DisplayRole,tr("Private chat invite to ")+QString::fromStdString(detail.name)+" ("+QString::fromStdString(invites[i].destination_pgp_id.toStdString())+", " + QString::fromStdString(detail.name) + ", valid until " + QDateTime::fromTime_t(invites[i].time_of_validity).toString() + ")") ;
|
||||
item->setData(Qt::UserRole,QString::fromStdString(invites[i].pid.toStdString())) ;
|
||||
|
||||
ui._personal_invites_LW->insertItem(0,item) ;
|
||||
}
|
||||
}
|
||||
ui._collected_contacts_LW->insertItem(0,item) ;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void ChatPage::on_pushButtonChangeChatFont_clicked()
|
||||
|
|
|
@ -53,15 +53,8 @@ class ChatPage : public ConfigPage
|
|||
void on_privateList_currentRowChanged(int currentRow);
|
||||
void on_historyList_currentRowChanged(int currentRow);
|
||||
|
||||
void personalInvites_customPopupMenu(QPoint) ;
|
||||
void collectedContacts_customPopupMenu(QPoint) ;
|
||||
|
||||
void personalInvites_copyLink() ;
|
||||
void personalInvites_delete() ;
|
||||
void personalInvites_create() ;
|
||||
|
||||
void collectedInvite_openDistantChat() ;
|
||||
void collectedInvite_delete() ;
|
||||
|
||||
private:
|
||||
void setPreviewMessages(QString &stylePath, QString styleVariant, QTextBrowser *textBrowser);
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<item row="3" column="0">
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
<number>1</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="general">
|
||||
<attribute name="title">
|
||||
|
@ -344,40 +344,6 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_3">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>100</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Your personal invites</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QListWidget" name="_personal_invites_LW">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Ignored">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="contextMenuPolicy">
|
||||
<enum>Qt::CustomContextMenu</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_4">
|
||||
<property name="sizePolicy">
|
||||
|
@ -387,7 +353,7 @@
|
|||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Collected contacts</string>
|
||||
<string>People around you can chat to</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
|
|
|
@ -309,7 +309,6 @@ HEADERS += rshare.h \
|
|||
gui/MainWindow.h \
|
||||
gui/RSHumanReadableDelegate.h \
|
||||
gui/AboutDialog.h \
|
||||
gui/CreateMsgLinkDialog.h \
|
||||
gui/NetworkView.h \
|
||||
gui/MessengerWindow.h \
|
||||
gui/FriendsDialog.h \
|
||||
|
@ -526,7 +525,6 @@ FORMS += gui/StartDialog.ui \
|
|||
gui/FileTransfer/TurtleRouterStatistics.ui \
|
||||
gui/FileTransfer/DetailsDialog.ui \
|
||||
gui/MainWindow.ui \
|
||||
gui/CreateMsgLinkDialog.ui \
|
||||
gui/NetworkView.ui \
|
||||
gui/MessengerWindow.ui \
|
||||
gui/FriendsDialog.ui \
|
||||
|
@ -634,7 +632,6 @@ SOURCES += main.cpp \
|
|||
gui/graphframe.cpp \
|
||||
gui/mainpagestack.cpp \
|
||||
gui/MainWindow.cpp \
|
||||
gui/CreateMsgLinkDialog.cpp \
|
||||
gui/NetworkView.cpp \
|
||||
gui/MessengerWindow.cpp \
|
||||
gui/FriendsDialog.cpp \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue