1 /***************************************************************************
2 Copyright 2006 David Nolden <david.nolden.kdevelop@art-master.de>
3 ***************************************************************************/
5 /***************************************************************************
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. *
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"
23 #include "kdevteamwork_messageshower.h"
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*/ ) {
46 xmlDeserializeFromElementItem( el, "ConversationManager", m_conversationManager );
47 } catch ( const QString & str ) {
48 log( "failed to restore the conversation-manager: " + str, Error );
52 void MessageManager::savePartialProjectSession( QDomElement
* /*el*/ ) {
54 xmlSerializeToElementItem( el, "ConversationManager", m_conversationManager );
55 } catch ( const QString & str ) {
56 log( "failed to store the conversation-manager: " + str, Error );
60 void MessageManager::showMessage( const MessagePointer
& msg
) {
61 MessagePointer::Locked l
= msg
;
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
);
75 void MessageManager::slotShowMessage() {
77 QAction
* act
= qobject_cast
<QAction
*>( sender() );
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*/ ) {
96 int MessageManager::receiveMessage( KDevTeamworkTextMessage
* /*msg*/ ) {
100 int MessageManager::receiveMessage( InDocumentMessage
* msg
) {
101 return m_conversationManager
->processMessage( msg
);
104 int MessageManager::processMessage( KDevTeamworkTextMessage
* msg
) {
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() {
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
) {
134 m_showMessageAction
->setData( v
);
135 menu
->addAction( m_showMessageAction
);
137 teamwork() ->fillMessageMenu( menu
, msg
);
141 MessagePointer::Locked l
= msg
;
143 UserPointer u
= l
->info().user();
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
);
156 m_teamwork
->fillUserMenu( m
, u
);
159 log( "could not get user from message", Error
);
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