diff options
| author | Kevin Smith <git@kismith.co.uk> | 2011-09-21 12:25:27 (GMT) | 
|---|---|---|
| committer | Kevin Smith <git@kismith.co.uk> | 2011-09-23 16:47:57 (GMT) | 
| commit | f9c432ca127d6e7d87b49d2fbf6aace34bea0e06 (patch) | |
| tree | d7f069d3c48cc3d768e770df614fe87ade6f3902 /Swift/Controllers | |
| parent | 20d3385909a2f9d886e7e0781357b23474e9f8dc (diff) | |
| download | swift-f9c432ca127d6e7d87b49d2fbf6aace34bea0e06.zip swift-f9c432ca127d6e7d87b49d2fbf6aace34bea0e06.tar.bz2 | |
Add support for kicking people from MUCs.
This also introduces a new DOM-like parser structure, used for the
MUC parsers.
Partially
Resolves: #689
Diffstat (limited to 'Swift/Controllers')
| -rw-r--r-- | Swift/Controllers/Chat/MUCController.cpp | 18 | ||||
| -rw-r--r-- | Swift/Controllers/Chat/MUCController.h | 5 | ||||
| -rw-r--r-- | Swift/Controllers/UIInterfaces/ChatWindow.h | 9 | ||||
| -rw-r--r-- | Swift/Controllers/UnitTest/MockChatWindow.h | 1 | 
4 files changed, 32 insertions, 1 deletions
| diff --git a/Swift/Controllers/Chat/MUCController.cpp b/Swift/Controllers/Chat/MUCController.cpp index aa0a1e7..19d7b4d 100644 --- a/Swift/Controllers/Chat/MUCController.cpp +++ b/Swift/Controllers/Chat/MUCController.cpp @@ -23,6 +23,7 @@  #include <Swift/Controllers/UIEvents/UIEventStream.h>  #include <Swift/Controllers/UIEvents/RequestChatUIEvent.h>  #include <Swift/Controllers/Roster/GroupRosterItem.h> +#include <Swift/Controllers/Roster/ContactRosterItem.h>  #include <Swiften/Avatars/AvatarManager.h>  #include <Swiften/Elements/Delay.h>  #include <Swiften/MUC/MUC.h> @@ -68,6 +69,8 @@ MUCController::MUCController (  	chatWindow_->setTabComplete(completer_);  	chatWindow_->setName(muc->getJID().getNode());  	chatWindow_->onClosed.connect(boost::bind(&MUCController::handleWindowClosed, this)); +	chatWindow_->onOccupantSelectionChanged.connect(boost::bind(&MUCController::handleWindowOccupantSelectionChanged, this, _1)); +	chatWindow_->onOccupantActionSelected.connect(boost::bind(&MUCController::handleActionRequestedOnOccupant, this, _1, _2));  	muc_->onJoinComplete.connect(boost::bind(&MUCController::handleJoinComplete, this, _1));  	muc_->onJoinFailed.connect(boost::bind(&MUCController::handleJoinFailed, this, _1));  	muc_->onOccupantJoined.connect(boost::bind(&MUCController::handleOccupantJoined, this, _1)); @@ -97,6 +100,21 @@ MUCController::~MUCController() {  	delete completer_;  } +void MUCController::handleWindowOccupantSelectionChanged(ContactRosterItem* item) { +	std::vector<ChatWindow::OccupantAction> actions; +	//FIXME +	if (item) { +		actions.push_back(ChatWindow::Kick); +	} +	chatWindow_->setAvailableOccupantActions(actions); +} + +void MUCController::handleActionRequestedOnOccupant(ChatWindow::OccupantAction action, ContactRosterItem* item) { +	switch (action) { +		case ChatWindow::Kick: muc_->kickUser(item->getJID());break; +	} +} +  void MUCController::handleBareJIDCapsChanged(const JID& /*jid*/) {  	ChatWindow::Tristate support = ChatWindow::Yes;  	bool any = false; diff --git a/Swift/Controllers/Chat/MUCController.h b/Swift/Controllers/Chat/MUCController.h index 3a79920..39e5fa4 100644 --- a/Swift/Controllers/Chat/MUCController.h +++ b/Swift/Controllers/Chat/MUCController.h @@ -19,11 +19,12 @@  #include <Swiften/JID/JID.h>  #include <Swiften/MUC/MUC.h>  #include <Swiften/Elements/MUCOccupant.h> +#include <Swift/Controllers/Roster/RosterItem.h> +#include <Swift/Controllers/UIInterfaces/ChatWindow.h>  namespace Swift {  	class StanzaChannel;  	class IQRouter; -	class ChatWindow;  	class ChatWindowFactory;  	class Roster;  	class AvatarManager; @@ -64,6 +65,8 @@ namespace Swift {  		private:  			void clearPresenceQueue();  			void addPresenceMessage(const std::string& message); +			void handleWindowOccupantSelectionChanged(ContactRosterItem* item); +			void handleActionRequestedOnOccupant(ChatWindow::OccupantAction, ContactRosterItem* item);  			void handleWindowClosed();  			void handleAvatarChanged(const JID& jid);  			void handleOccupantJoined(const MUCOccupant& occupant); diff --git a/Swift/Controllers/UIInterfaces/ChatWindow.h b/Swift/Controllers/UIInterfaces/ChatWindow.h index e84116d..faef5c8 100644 --- a/Swift/Controllers/UIInterfaces/ChatWindow.h +++ b/Swift/Controllers/UIInterfaces/ChatWindow.h @@ -22,11 +22,14 @@ namespace Swift {  	class TreeWidget;  	class Roster;  	class TabComplete; +	class RosterItem; +	class ContactRosterItem;  	class ChatWindow {  		public:  			enum AckState {Pending, Received, Failed};  			enum Tristate {Yes, No, Maybe}; +			enum OccupantAction {Kick};  			ChatWindow() {}  			virtual ~ChatWindow() {}; @@ -72,6 +75,10 @@ namespace Swift {  			 */  			virtual void cancelAlert() = 0; +			/** +			 * Actions that can be performed on the selected occupant. +			 */ +			virtual void setAvailableOccupantActions(const std::vector<OccupantAction>& actions) = 0;  			boost::signal<void ()> onClosed;  			boost::signal<void ()> onAllMessagesRead;  			boost::signal<void (const std::string&, bool isCorrection)> onSendMessageRequest; @@ -79,6 +86,8 @@ namespace Swift {  			boost::signal<void ()> onUserTyping;  			boost::signal<void ()> onUserCancelsTyping;  			boost::signal<void ()> onAlertButtonClicked; +			boost::signal<void (ContactRosterItem*)> onOccupantSelectionChanged; +			boost::signal<void (ChatWindow::OccupantAction, ContactRosterItem*)> onOccupantActionSelected;  	};  }  #endif diff --git a/Swift/Controllers/UnitTest/MockChatWindow.h b/Swift/Controllers/UnitTest/MockChatWindow.h index 7d6828f..574248f 100644 --- a/Swift/Controllers/UnitTest/MockChatWindow.h +++ b/Swift/Controllers/UnitTest/MockChatWindow.h @@ -40,6 +40,7 @@ namespace Swift {  			virtual void setAlert(const std::string& /*alertText*/, const std::string& /*buttonText*/) {};  			virtual void cancelAlert() {};  			virtual void setCorrectionEnabled(Tristate /*enabled*/) {} +			void setAvailableOccupantActions(const std::vector<OccupantAction>& actions) {}  			boost::signal<void ()> onClosed;  			boost::signal<void ()> onAllMessagesRead; | 
 Swift
 Swift