summaryrefslogtreecommitdiffstats
path: root/kopete/libkopete/kopeteawayaction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kopete/libkopete/kopeteawayaction.cpp')
-rw-r--r--kopete/libkopete/kopeteawayaction.cpp134
1 files changed, 134 insertions, 0 deletions
diff --git a/kopete/libkopete/kopeteawayaction.cpp b/kopete/libkopete/kopeteawayaction.cpp
new file mode 100644
index 00000000..84622c7e
--- /dev/null
+++ b/kopete/libkopete/kopeteawayaction.cpp
@@ -0,0 +1,134 @@
+/*
+ kopeteaway.cpp - Kopete Away Action
+
+ Copyright (c) 2003 Jason Keirstead <[email protected]>
+
+ Kopete (c) 2002-2005 by the Kopete developers <[email protected]>
+
+ *************************************************************************
+ * *
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Lesser General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2 of the License, or (at your option) any later version. *
+ * *
+ *************************************************************************
+*/
+
+#include <klocale.h>
+#include <kdeversion.h>
+#include <kinputdialog.h>
+#include <kstringhandler.h>
+
+#include "kopeteawayaction.h"
+#include "kopeteaway.h"
+#include "kopeteonlinestatus.h"
+
+
+namespace Kopete {
+
+class AwayAction::Private
+{
+public:
+ Private(const OnlineStatus& s) : reasonCount(0) , status(s) {};
+ int reasonCount;
+ OnlineStatus status;
+};
+
+
+AwayAction::AwayAction(const QString &text, const QIconSet &pix, const KShortcut &cut,
+ const QObject *receiver, const char *slot, QObject *parent, const char *name )
+ : KSelectAction(text, pix, cut, parent, name ) , d(new Private( OnlineStatus() ) )
+{
+ QObject::connect( Kopete::Away::getInstance(), SIGNAL( messagesChanged() ),
+ this, SLOT( slotAwayChanged() ) );
+
+ QObject::connect( this, SIGNAL( awayMessageSelected( const QString & ) ),
+ receiver, slot );
+
+ QObject::connect( this, SIGNAL( activated( int ) ),
+ this, SLOT( slotSelectAway( int ) ) );
+
+ slotAwayChanged();
+}
+
+AwayAction::AwayAction( const OnlineStatus& status, const QString &text, const QIconSet &pix, const KShortcut &cut,
+ const QObject *receiver, const char *slot, QObject *parent, const char *name )
+ : KSelectAction(text, pix, cut, parent, name ) , d(new Private( status ) )
+{
+ QObject::connect( Kopete::Away::getInstance(), SIGNAL( messagesChanged() ),
+ this, SLOT( slotAwayChanged() ) );
+
+ QObject::connect( this, SIGNAL( awayMessageSelected( const Kopete::OnlineStatus &, const QString & ) ),
+ receiver, slot );
+
+ QObject::connect( this, SIGNAL( activated( int ) ),
+ this, SLOT( slotSelectAway( int ) ) );
+
+ slotAwayChanged();
+}
+
+AwayAction::~AwayAction()
+{
+ delete d;
+}
+
+void AwayAction::slotAwayChanged()
+{
+ QStringList awayMessages = Kopete::Away::getInstance()->getMessages();
+ for( QStringList::iterator it = awayMessages.begin(); it != awayMessages.end(); ++it )
+ {
+ (*it) = KStringHandler::rsqueeze( *it );
+ }
+ d->reasonCount = awayMessages.count();
+ QStringList menu;
+ menu << i18n( "No Message" );
+ menu << i18n( "New Message..." );
+ menu << QString::null ; //separator
+ menu += awayMessages ;
+ setItems( menu );
+ setCurrentItem( -1 );
+}
+
+void AwayAction::slotSelectAway( int index )
+{
+ //remove that crappy check mark cf bug 119862
+ setCurrentItem( -1 );
+
+ Kopete::Away *mAway = Kopete::Away::getInstance();
+ QString awayReason;
+
+ // Index == -1 means this is a result of Global Away all.
+ // Use the last entered message (0)
+ if( index == -1 )
+ index = 0;
+
+ switch(index)
+ {
+ case 0:
+ awayReason = QString::null;
+ break;
+ case 1:
+ bool ok;
+ awayReason = KInputDialog::getText( i18n( "New Away Message" ), i18n( "Please enter your away reason:" ) , QString::null , &ok );
+ if(!ok) //the user canceled
+ return;
+ if( !awayReason.isEmpty() )
+ Kopete::Away::getInstance()->addMessage( awayReason );
+ break;
+ case 2:
+ //not possible case, that's a separator
+ break;
+ default:
+ if( index-3 < d->reasonCount )
+ awayReason = mAway->getMessage( index-3 );
+ }
+
+ emit awayMessageSelected( awayReason ) ;
+ emit awayMessageSelected( d->status, awayReason );
+}
+
+} //END namespace Kopete
+
+#include "kopeteawayaction.moc"
+