-implemented simple rsStatus for messenger window
- fixed minor bug with messenger window (starts new pop-up chat dialog when peer responds, if private chat started from messenger window) solution: messenger windows start peers dialogs pop-up chat dialog instead


git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@2721 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
chrisparker126 2010-04-15 12:02:23 +00:00
parent 7aa487e2b6
commit 76a4c34440
8 changed files with 80 additions and 58 deletions

View File

@ -69,7 +69,8 @@
/* Images for Status icons */ /* Images for Status icons */
#define IMAGE_ONLINE ":/images/im-user.png" #define IMAGE_ONLINE ":/images/im-user.png"
#define IMAGE_OFFLINE ":/images/im-user-offline.png" #define IMAGE_OFFLINE ":/images/im-user-offline.png"
#define IMAGE_AWAY ":/images/im-user-away.png"
#define IMAGE_BUSY ":/images/im-user-busy.png"
/****** /******
* #define MSG_DEBUG 1 * #define MSG_DEBUG 1
@ -112,8 +113,12 @@ MessengerWindow::MessengerWindow(QWidget* parent, Qt::WFlags flags)
connect( ui.actionHide_Offline_Friends, SIGNAL(triggered()), this, SLOT(insertPeers())); connect( ui.actionHide_Offline_Friends, SIGNAL(triggered()), this, SLOT(insertPeers()));
connect(ui.messagelineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(savestatusmessage())); connect(ui.messagelineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(savestatusmessage()));
//connect(ui.statuscomboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(savestatus())); connect(ui.statuscomboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(savestatus()));
QTimer *timer = new QTimer(this);
timer->connect(timer, SIGNAL(timeout()), this, SLOT(sendStatus()));
timer->start(5000); /* five seconds */
/* to hide the header */ /* to hide the header */
ui.messengertreeWidget->header()->hide(); ui.messengertreeWidget->header()->hide();
@ -147,7 +152,7 @@ MessengerWindow::MessengerWindow(QWidget* parent, Qt::WFlags flags)
updateAvatar(); updateAvatar();
loadmystatusmessage(); loadmystatusmessage();
//loadstatus(); loadstatus();
displayMenu(); displayMenu();
updateMessengerDisplay(); updateMessengerDisplay();
@ -446,11 +451,36 @@ void MessengerWindow::insertPeers()
} }
} }
std::list<StatusInfo> statusInfo;
rsStatus->getStatus(statusInfo);
RsPeerDetails ssl_details;
int i = 0; int i = 0;
if (gpg_connected) { if (gpg_connected) {
gpg_item->setHidden(false); gpg_item->setHidden(false);
gpg_item -> setIcon(0,(QIcon(IMAGE_ONLINE))); gpg_item -> setText(1, tr("Online")); // set to online regardless on update
gpg_item -> setText(1, tr("Online"));
std::list<StatusInfo>::iterator it = statusInfo.begin();
for(; it != statusInfo.end(); it++){
rsPeers->getPeerDetails(it->id, ssl_details);
if(detail.id == ssl_details.gpg_id){
std::string status;
rsStatus->getStatusString(it->status, status);
gpg_item -> setText(1, QString::fromStdString(status));
if(it->status == RS_STATUS_ONLINE)
gpg_item -> setIcon(0,(QIcon(IMAGE_ONLINE)));
else
if(it->status == RS_STATUS_AWAY)
gpg_item -> setIcon(0,(QIcon(IMAGE_AWAY)));
else
if(it->status == RS_STATUS_BUSY)
gpg_item -> setIcon(0,(QIcon(IMAGE_BUSY)));
}
}
QFont font; QFont font;
font.setBold(true); font.setBold(true);
@ -543,49 +573,13 @@ void MessengerWindow::chatfriend()
QTreeWidgetItem *i = getCurrentPeer(); QTreeWidgetItem *i = getCurrentPeer();
if (!i) if (!i)
return;
//std::string name = (i -> text(2)).toStdString();
std::string id = (i -> text(3)).toStdString();
bool oneLocationConnected = false;
RsPeerDetails detail;
if (!rsPeers->getPeerDetails(id, detail)) {
return; return;
}
if (detail.isOnlyGPGdetail) { emit startChat(i);
//let's get the ssl child details, and open all the chat boxes
std::list<std::string> sslIds;
rsPeers->getSSLChildListOfGPGId(detail.gpg_id, sslIds);
for (std::list<std::string>::iterator it = sslIds.begin(); it != sslIds.end(); it++) {
RsPeerDetails sslDetails;
if (rsPeers->getPeerDetails(*it, sslDetails)) {
if (sslDetails.state & RS_PEER_STATE_CONNECTED) {
oneLocationConnected = true;
getPrivateChat(*it, sslDetails.name + " - " + sslDetails.location, RS_CHAT_REOPEN);
}
}
}
} else {
if (detail.state & RS_PEER_STATE_CONNECTED) {
oneLocationConnected = true;
getPrivateChat(id, detail.name + " - " + detail.location, RS_CHAT_REOPEN);
}
}
if (!oneLocationConnected) {
/* info dialog */
if ((QMessageBox::question(this, tr("Friend Not Online"),tr("Your Friend is offline \nDo you want to send them a Message instead"),QMessageBox::Yes|QMessageBox::No, QMessageBox::Yes))== QMessageBox::Yes)
{
sendMessage();
}
}
return;
} }
QTreeWidgetItem *MessengerWindow::getCurrentPeer() QTreeWidgetItem *MessengerWindow::getCurrentPeer()
{ {
/* get the current, and extract the Id */ /* get the current, and extract the Id */
@ -943,11 +937,20 @@ void MessengerWindow::loadstatus()
} }
StatusInfo si; StatusInfo si;
if (!rsStatus->getStatus(ownId, si)) std::list<StatusInfo> statusList;
std::list<StatusInfo>::iterator it;
if (!rsStatus->getStatus(statusList))
{ {
return; return;
} }
for(it=statusList.begin(); it != statusList.end(); it++){
if(it->id == ownId)
si = *it;
}
/* set status mode */ /* set status mode */
int statusIndex = 0; int statusIndex = 0;
switch(si.status) switch(si.status)
@ -1011,7 +1014,7 @@ void MessengerWindow::savestatus()
si.id = ownId; si.id = ownId;
si.status = status; si.status = status;
rsStatus->setStatus(si); rsStatus->sendStatus(si);
//rsiface->unlockData(); /* UnLock Interface */ //rsiface->unlockData(); /* UnLock Interface */

View File

@ -109,6 +109,7 @@ private slots:
signals: signals:
void friendsUpdated() ; void friendsUpdated() ;
void startChat(QTreeWidgetItem* );
private: private:

View File

@ -107,7 +107,7 @@ stop: 0.9 #4c4c4c, stop: 1 #333333);
<item row="1" column="0"> <item row="1" column="0">
<widget class="QComboBox" name="statuscomboBox"> <widget class="QComboBox" name="statuscomboBox">
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>true</bool>
</property> </property>
<property name="toolTip"> <property name="toolTip">
<string>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt; <string>&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
@ -403,7 +403,7 @@ stop:0 #FEFEFE, stop:1 #E8E8E8);
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>295</width> <width>295</width>
<height>21</height> <height>27</height>
</rect> </rect>
</property> </property>
</widget> </widget>

View File

@ -103,7 +103,8 @@ PeersDialog::PeersDialog(QWidget *parent)
connect( ui.peertreeWidget, SIGNAL( customContextMenuRequested( QPoint ) ), this, SLOT( peertreeWidgetCostumPopupMenu( QPoint ) ) ); connect( ui.peertreeWidget, SIGNAL( customContextMenuRequested( QPoint ) ), this, SLOT( peertreeWidgetCostumPopupMenu( QPoint ) ) );
connect( ui.peertreeWidget, SIGNAL( itemDoubleClicked ( QTreeWidgetItem *, int)), this, SLOT(chatfriend())); connect( ui.peertreeWidget, SIGNAL( itemDoubleClicked ( QTreeWidgetItem *, int)), this, SLOT(chatfriend(QTreeWidgetItem *)));
connect( this , SIGNAL( startChat( QTreeWidgetItem *) ), this, SLOT(chatfriend(QTreeWidgetItem *)));
connect( ui.avatartoolButton, SIGNAL(clicked()), SLOT(getAvatar())); connect( ui.avatartoolButton, SIGNAL(clicked()), SLOT(getAvatar()));
connect( ui.mypersonalstatuslabel, SIGNAL(clicked()), SLOT(statusmessage())); connect( ui.mypersonalstatuslabel, SIGNAL(clicked()), SLOT(statusmessage()));
@ -250,7 +251,7 @@ void PeersDialog::peertreeWidgetCostumPopupMenu( QPoint point )
connect( collapseAll , SIGNAL( triggered() ), ui.peertreeWidget, SLOT(collapseAll()) ); connect( collapseAll , SIGNAL( triggered() ), ui.peertreeWidget, SLOT(collapseAll()) );
chatAct = new QAction(QIcon(IMAGE_CHAT), tr( "Chat" ), this ); chatAct = new QAction(QIcon(IMAGE_CHAT), tr( "Chat" ), this );
connect( chatAct , SIGNAL( triggered() ), this, SLOT( chatfriend() ) ); connect( chatAct , SIGNAL( triggered() ), this, SLOT( chatfriendproxy() ) );
msgAct = new QAction(QIcon(IMAGE_MSG), tr( "Message Friend" ), this ); msgAct = new QAction(QIcon(IMAGE_MSG), tr( "Message Friend" ), this );
connect( msgAct , SIGNAL( triggered() ), this, SLOT( msgfriend() ) ); connect( msgAct , SIGNAL( triggered() ), this, SLOT( msgfriend() ) );
@ -614,15 +615,27 @@ void PeersDialog::exportfriend()
} }
void PeersDialog::chatfriend() void PeersDialog::chatfriendproxy(){
{
QTreeWidgetItem *i = getCurrentPeer();
if (!i) QTreeWidgetItem* i = getCurrentPeer();
if(!i)
return;
emit startChat(i);
return; return;
}
void PeersDialog::chatfriend(QTreeWidgetItem* currPeer)
{
// QTreeWidgetItem *currPeer = getCurrentPeer();
if (!currPeer){
return;
}
//std::string name = (i -> text(2)).toStdString(); //std::string name = (i -> text(2)).toStdString();
std::string id = (i -> text(3)).toStdString(); std::string id = (currPeer -> text(3)).toStdString();
bool oneLocationConnected = false; bool oneLocationConnected = false;
@ -745,7 +758,7 @@ void PeersDialog::removefriend()
if (!c) if (!c)
{ {
#ifdef PEERS_DEBUG #ifdef PEERS_DEBUG
std::cerr << "PeersDialog::removefriend() Noone Selected -- sorry" << std::endl; std::cerr << "PeersDialog::removefriend() None Selected -- sorry" << std::endl;
#endif #endif
return; return;
} }

View File

@ -102,7 +102,8 @@ private slots:
/** Remove friend */ /** Remove friend */
void removefriend(); void removefriend();
/** start a chat with a friend **/ /** start a chat with a friend **/
void chatfriend(); void chatfriend(QTreeWidgetItem* );
void chatfriendproxy();
void msgfriend(); void msgfriend();
void configurefriend(); void configurefriend();
@ -142,6 +143,7 @@ private slots:
signals: signals:
void friendsUpdated() ; void friendsUpdated() ;
void notifyGroupChat(const QString&,const QString&) ; void notifyGroupChat(const QString&,const QString&) ;
void startChat(QTreeWidgetItem* );
private: private:
class QLabel *iconLabel, *textLabel; class QLabel *iconLabel, *textLabel;

View File

@ -211,7 +211,7 @@ void StartDialog::notSecureWarning() {
if(ui.autologin_checkbox->isChecked()){ if(ui.autologin_checkbox->isChecked()){
QMessageBox::StandardButton sb = QMessageBox::warning ( NULL, QMessageBox::StandardButton sb = QMessageBox::warning ( NULL,
tr("Insecure"), tr("Insecure"),
tr("Auto Login is not Secure: Password stored on disk"), tr("Auto-Login is not Secure \n It can be disabled in General Settings"),
QMessageBox::Ok); QMessageBox::Ok);
} }

View File

@ -41,6 +41,7 @@
#include "rsiface/rsmsgs.h" #include "rsiface/rsmsgs.h"
#include "rsiface/rsfiles.h" #include "rsiface/rsfiles.h"
#include "gui/feeds/AttachFileItem.h" #include "gui/feeds/AttachFileItem.h"
#include <time.h> #include <time.h>
@ -342,6 +343,7 @@ void PopupChatDialog::checkChat()
sendChat(); sendChat();
else else
updateStatusTyping() ; updateStatusTyping() ;
} }

View File

@ -167,6 +167,7 @@ int main(int argc, char *argv[])
QObject::connect(w->peersDialog,SIGNAL(friendsUpdated()),w->networkDialog,SLOT(insertConnect())) ; QObject::connect(w->peersDialog,SIGNAL(friendsUpdated()),w->networkDialog,SLOT(insertConnect())) ;
QObject::connect(w->peersDialog,SIGNAL(notifyGroupChat(const QString&,const QString&)),w,SLOT(displaySystrayMsg(const QString&,const QString&)),Qt::QueuedConnection) ; QObject::connect(w->peersDialog,SIGNAL(notifyGroupChat(const QString&,const QString&)),w,SLOT(displaySystrayMsg(const QString&,const QString&)),Qt::QueuedConnection) ;
QObject::connect(w->messengerWindow,SIGNAL(startChat(QTreeWidgetItem* )),w->peersDialog,SLOT(chatfriend(QTreeWidgetItem* ))) ;
/* only show window, if not startMinimized */ /* only show window, if not startMinimized */
RshareSettings *_settings = new RshareSettings(); RshareSettings *_settings = new RshareSettings();