From d875fa2e07d36a42e21bd59e05669af537554583 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 13 Feb 2013 22:08:27 +0000 Subject: [PATCH] added a new class FriendSelectionDialog with a sstatic method to select friends in a modal dialog. Used it to add a "invite friends" button to chatLobbyDialog git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-ImprovedGUI@6125 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- .../src/gui/chat/ChatLobbyDialog.cpp | 39 ++++++++++++++- retroshare-gui/src/gui/chat/ChatLobbyDialog.h | 3 ++ .../src/gui/common/FriendSelectionDialog.cpp | 48 +++++++++++++++++++ .../src/gui/common/FriendSelectionDialog.h | 17 +++++++ .../src/gui/common/FriendSelectionWidget.cpp | 2 + .../src/gui/common/FriendSelectionWidget.h | 1 + retroshare-gui/src/retroshare-gui.pro | 2 + 7 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 retroshare-gui/src/gui/common/FriendSelectionDialog.cpp create mode 100644 retroshare-gui/src/gui/common/FriendSelectionDialog.h diff --git a/retroshare-gui/src/gui/chat/ChatLobbyDialog.cpp b/retroshare-gui/src/gui/chat/ChatLobbyDialog.cpp index 04916709e..237b5b54e 100644 --- a/retroshare-gui/src/gui/chat/ChatLobbyDialog.cpp +++ b/retroshare-gui/src/gui/chat/ChatLobbyDialog.cpp @@ -33,6 +33,7 @@ #include "gui/FriendsDialog.h" #include #include "gui/common/RSTreeWidgetItem.h" +#include "gui/common/FriendSelectionDialog.h" #include @@ -57,9 +58,45 @@ ChatLobbyDialog::ChatLobbyDialog(const ChatLobbyId& lid, QWidget *parent, Qt::WF ui.participantsList->setColumnCount(COLUMN_COUNT); ui.participantsList->setColumnWidth(COLUMN_ICON, 20); - // Mute a Participant muteAct = new QAction(QIcon(), tr("Mute participant"), this); connect(muteAct, SIGNAL(triggered()), this, SLOT(changePartipationState())); + + // Add a button to invite friends. + // + inviteFriendsButton = new QPushButton ; + inviteFriendsButton->setMinimumSize(QSize(28,28)) ; + inviteFriendsButton->setMaximumSize(QSize(28,28)) ; + inviteFriendsButton->setText(QString()) ; + inviteFriendsButton->setToolTip(tr("Invite friends to this lobby")); + + QIcon icon ; + icon.addPixmap(QPixmap(":/images/edit_add24.png")) ; + inviteFriendsButton->setIcon(icon) ; + inviteFriendsButton->setIconSize(QSize(22,22)) ; + + connect(inviteFriendsButton, SIGNAL(clicked()), this , SLOT(inviteFriends())); + + getChatWidget()->addChatButton(inviteFriendsButton) ; +} + +void ChatLobbyDialog::inviteFriends() +{ + std::cerr << "Inviting friends" << std::endl; + + std::list ids = FriendSelectionDialog::selectFriends() ; + + std::cerr << "Inviting these friends:" << std::endl; + + ChatLobbyId lobby_id; + if (!rsMsgs->isLobbyId(getPeerId(), lobby_id)) + return ; + + for(std::list::const_iterator it(ids.begin());it!=ids.end();++it) + { + std::cerr << " " << *it << std::endl; + + rsMsgs->invitePeerToLobby(lobby_id,*it) ; + } } void ChatLobbyDialog::participantsTreeWidgetCostumPopupMenu(QPoint) diff --git a/retroshare-gui/src/gui/chat/ChatLobbyDialog.h b/retroshare-gui/src/gui/chat/ChatLobbyDialog.h index 87ec2575e..39bd52f67 100644 --- a/retroshare-gui/src/gui/chat/ChatLobbyDialog.h +++ b/retroshare-gui/src/gui/chat/ChatLobbyDialog.h @@ -45,6 +45,7 @@ public: private slots: void showParticipantsFrame(bool show); void participantsTreeWidgetCostumPopupMenu( QPoint point ); + void inviteFriends() ; protected: /** Default constructor */ @@ -75,6 +76,8 @@ private: QString _lobby_name ; time_t lastUpdateListTime; + QPushButton *inviteFriendsButton ; + /** Qt Designer generated object */ Ui::ChatLobbyDialog ui; diff --git a/retroshare-gui/src/gui/common/FriendSelectionDialog.cpp b/retroshare-gui/src/gui/common/FriendSelectionDialog.cpp new file mode 100644 index 000000000..d208c44ce --- /dev/null +++ b/retroshare-gui/src/gui/common/FriendSelectionDialog.cpp @@ -0,0 +1,48 @@ +#include + +#include +#include +#include "FriendSelectionDialog.h" + +std::list FriendSelectionDialog::selectFriends() +{ + FriendSelectionDialog dialog ; + dialog.friends_widget->start() ; + dialog.setWindowTitle(tr("Choose some friends")) ; + + if(QDialog::Rejected == dialog.exec()) + return std::list() ; + + std::list ids ; + dialog.friends_widget->selectedSslIds(ids,false) ; + + return ids ; +} + +FriendSelectionDialog::FriendSelectionDialog(QWidget *parent) + : QDialog(parent) +{ + friends_widget = new FriendSelectionWidget(this) ; + + friends_widget->setHeaderText(tr("Contacts:")); + friends_widget->setModus(FriendSelectionWidget::MODUS_CHECK); + friends_widget->setShowType(FriendSelectionWidget::SHOW_GROUP | FriendSelectionWidget::SHOW_SSL); + + QLayout *l = new QVBoxLayout ; + setLayout(l) ; + + QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + + connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); + connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); + + l->addWidget(friends_widget) ; + l->addWidget(buttonBox) ; + l->update() ; +} + +FriendSelectionDialog::~FriendSelectionDialog() +{ + delete friends_widget ; +} + diff --git a/retroshare-gui/src/gui/common/FriendSelectionDialog.h b/retroshare-gui/src/gui/common/FriendSelectionDialog.h new file mode 100644 index 000000000..b59463172 --- /dev/null +++ b/retroshare-gui/src/gui/common/FriendSelectionDialog.h @@ -0,0 +1,17 @@ +#pragma once + +#include +#include + +class FriendSelectionDialog : public QDialog +{ + public: + static std::list selectFriends() ; + + private: + virtual ~FriendSelectionDialog() ; + FriendSelectionDialog(QWidget *parent = NULL) ; + + FriendSelectionWidget *friends_widget ; +}; + diff --git a/retroshare-gui/src/gui/common/FriendSelectionWidget.cpp b/retroshare-gui/src/gui/common/FriendSelectionWidget.cpp index 8c81c9f13..f64129526 100644 --- a/retroshare-gui/src/gui/common/FriendSelectionWidget.cpp +++ b/retroshare-gui/src/gui/common/FriendSelectionWidget.cpp @@ -20,6 +20,7 @@ * Boston, MA 02110-1301, USA. ****************************************************************/ +#include #include "FriendSelectionWidget.h" #include "ui_FriendSelectionWidget.h" #include "gui/notifyqt.h" @@ -835,3 +836,4 @@ std::string FriendSelectionWidget::idFromItem(QTreeWidgetItem *item) return item->data(COLUMN_DATA, ROLE_ID).toString().toStdString(); } + diff --git a/retroshare-gui/src/gui/common/FriendSelectionWidget.h b/retroshare-gui/src/gui/common/FriendSelectionWidget.h index 74cf744d9..422da9716 100644 --- a/retroshare-gui/src/gui/common/FriendSelectionWidget.h +++ b/retroshare-gui/src/gui/common/FriendSelectionWidget.h @@ -24,6 +24,7 @@ #define FRIENDSELECTIONWIDGET_H #include +#include namespace Ui { class FriendSelectionWidget; diff --git a/retroshare-gui/src/retroshare-gui.pro b/retroshare-gui/src/retroshare-gui.pro index 08d73d408..dc1c58320 100644 --- a/retroshare-gui/src/retroshare-gui.pro +++ b/retroshare-gui/src/retroshare-gui.pro @@ -411,6 +411,7 @@ HEADERS += rshare.h \ gui/common/AvatarWidget.h \ gui/common/FriendList.h \ gui/common/FriendSelectionWidget.h \ + gui/common/FriendSelectionDialog.h \ gui/common/HashBox.h \ gui/common/LineEditClear.h \ gui/common/DropLineEdit.h \ @@ -682,6 +683,7 @@ SOURCES += main.cpp \ gui/common/AvatarWidget.cpp \ gui/common/FriendList.cpp \ gui/common/FriendSelectionWidget.cpp \ + gui/common/FriendSelectionDialog.cpp \ gui/common/HashBox.cpp \ gui/common/LineEditClear.cpp \ gui/common/DropLineEdit.cpp \