Don't keep compiling/run if something failed.
[kdevelopdvcssupport.git] / plugins / teamwork / messagemanager.cpp
blobcb9577ce469b4db21a31246ae25cba39ce00b86e
1 /***************************************************************************
2 Copyright 2006 David Nolden <david.nolden.kdevelop@art-master.de>
3 ***************************************************************************/
5 /***************************************************************************
6 * *
7 * This program is free software; you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation; either version 2 of the License, or *
10 * (at your option) any later version. *
11 * *
12 ***************************************************************************/
14 #include "messagemanager.h"
15 #include "kdevteamwork.h"
16 #include "serializationutils.h"
17 #include "conversationmanager.h"
18 #include "guimessagehistory.h"
19 #include "messagehistorymanager.h"
20 #include "lib/network/messagetypeset.h"
21 #include <kdialog.h>
22 #include <QMenu>
23 #include "kdevteamwork_messageshower.h"
25 #include <QList>
26 #include <QAction>
28 Q_DECLARE_METATYPE( MessagePointer )
32 MessageManager::MessageManager( KDevTeamwork* tw ) : dispatcher_( *this ), m_teamwork( tw ), m_conversationManager( this ), m_historyManager( m_teamwork->logger() ) {
33 m_showMessageAction = new QAction( i18n("Show"), this );
34 connect( m_showMessageAction, SIGNAL( triggered() ), this, SLOT( slotShowMessage() ) );
35 connect( m_teamwork, SIGNAL( init() ), this, SLOT( init() ) );
36 m_showMessageAction->setToolTip( i18n("Show the message.") );
39 void MessageManager::init() {
42 MessageManager::~MessageManager() {}
44 void MessageManager::restorePartialProjectSession( const QDomElement* /*el*/ ) {
45 /*try {
46 xmlDeserializeFromElementItem( el, "ConversationManager", m_conversationManager );
47 } catch ( const QString & str ) {
48 log( "failed to restore the conversation-manager: " + str, Error );
49 }*/
52 void MessageManager::savePartialProjectSession( QDomElement* /*el*/ ) {
53 /*try {
54 xmlSerializeToElementItem( el, "ConversationManager", m_conversationManager );
55 } catch ( const QString & str ) {
56 log( "failed to store the conversation-manager: " + str, Error );
57 }*/
60 void MessageManager::showMessage( const MessagePointer& msg ) {
61 MessagePointer::Locked l = msg;
62 if ( !l )
63 throw "cannot lock message";
64 if ( !l.freeCast<AbstractGUIMessage>() )
65 throw "message is no GUI-message";
67 KDialog* d = new KDialog( m_teamwork->widget() );
68 d->setAttribute( Qt::WA_DeleteOnClose, true );
70 l.freeCast<AbstractGUIMessage>() ->showInWidget( d->mainWidget(), m_teamwork );
72 d->show();
75 void MessageManager::slotShowMessage() {
76 try {
77 QAction * act = qobject_cast<QAction*>( sender() );
78 if ( !act )
79 throw "no action";
81 QVariant v = act->data();
82 if ( !v.canConvert<MessagePointer>() )
83 throw "cannot convert";
85 showMessage( v.value<MessagePointer>() );
86 } catch ( const char * str ) {
87 log( QString( "error in showMessage: " ) + str, Error );
92 int MessageManager::receiveMessage( MessageInterface* /*msg*/ ) {
93 return 0;
96 int MessageManager::receiveMessage( KDevTeamworkTextMessage* /*msg*/ ) {
97 return 0;
100 int MessageManager::receiveMessage( InDocumentMessage* msg ) {
101 return m_conversationManager->processMessage( msg );
104 int MessageManager::processMessage( KDevTeamworkTextMessage* msg ) {
105 if ( !msg )
106 return 0;
107 m_historyManager->addMessage( msg );
108 return dispatcher_( msg );
111 void MessageManager::log( const QString& str, LogLevel level ) {
112 m_teamwork->log( "MessageManager: " + str, level );
115 KDevTeamwork* MessageManager::teamwork() {
116 return m_teamwork;
119 MessageHistoryManager& MessageManager::historyManager() {
120 return * m_historyManager;
123 ConversationManager& MessageManager::conversationManager() {
124 return * m_conversationManager;
127 void MessageManager::showMessageHistory( const QList<KDevTeamworkUserPointer>& users, const QString& context ) {
128 new GuiMessageHistory( this, users, context );
131 void MessageManager::fillMessageMenu( QMenu* menu, MessagePointer msg ) {
132 QVariant v;
133 v.setValue( msg );
134 m_showMessageAction->setData( v );
135 menu->addAction( m_showMessageAction );
137 teamwork() ->fillMessageMenu( menu, msg );
141 MessagePointer::Locked l = msg;
142 if ( l ) {
143 UserPointer u = l->info().user();
144 if ( u ) {
145 if ( /*l->info().isIncoming() &&*/ l.freeCast<AbstractGUIMessage>() ) {
146 AbstractGUIMessage * request = l.freeCast<AbstractGUIMessage>();
147 request->fillContextMenu( menu, teamwork() );
150 if ( !menu->children().isEmpty() )
151 menu->addSeparator();
153 if ( l->info().session() && l->info().session().unsafe() ->isOk() ) {
154 QMenu * m = new QMenu( ~u.unsafe() ->safeName(), menu );
155 menu->addMenu( m );
156 m_teamwork->fillUserMenu( m, u );
158 } else
159 log( "could not get user from message", Error );
161 } else {
162 if ( !l )
163 log( "could not lock message", Error );
167 void MessageManager::updateMessage( const MessagePointer& msg ) {
168 emit messageUpdated( msg );
171 #include "messagemanager.moc"
173 // kate: space-indent on; indent-width 2; tab-width 2; replace-tabs on