<commit_before>/*
    kopeteaway.cpp  -  Kopete Away Action

    Copyright (c) 2003     <NAME>   <<EMAIL>>

    Kopete    (c) 2002-2005 by the Kopete developers  <<EMAIL>>

    *************************************************************************
    *                                                                       *
    * 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 )
{
	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 );
	setCurrentItem( -1 );
}

} //END namespace Kopete

#include "kopeteawayaction.moc"

<commit_msg>Fix Bug 119862: if you press escape or cancel in the new message status-window there is a checkbox next to it and you can't click on it anymore BUG: 119862<commit_after>/*
    kopeteaway.cpp  -  Kopete Away Action

    Copyright (c) 2003     <NAME>   <<EMAIL>>

    Kopete    (c) 2002-2005 by the Kopete developers  <<EMAIL>>

    *************************************************************************
    *                                                                       *
    * 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"


{'fraction_non_alphanumeric': 0.16297786720321933, 'fraction_numerical': 0.01056338028169014, 'mean_word_length': 3.401217487548423, 'pattern_counts': {'":': 0, '<': 35, '<?xml version=': 0, '>': 33, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 12, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3197215', 'n_tokens_mistral': 2685, 'n_tokens_neox': 2430, 'n_words': 705}