You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdenetwork/kopete/plugins/translator/translatorguiclient.cpp

98 lines
3.0 KiB

/*
translatorguiclient.cpp
Kopete Translator plugin
Copyright (c) 2003-2004 by Olivier Goffart <ogoffart @ kde.org>
Kopete (c) 2003-2004 by the Kopete developers <kopete-devel@kde.org>
*************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
*************************************************************************
*/
#include <tqvariant.h>
#include <kdebug.h>
#include <tdeaction.h>
#include <tdelocale.h>
#include "kopetechatsession.h"
#include "kopeteview.h"
#include "kopetecontact.h"
#include "kopetemetacontact.h"
#include "kopetemessage.h"
#include "translatorplugin.h"
#include "translatorguiclient.h"
#include "translatorlanguages.h"
TranslatorGUIClient::TranslatorGUIClient( Kopete::ChatSession *parent, const char *name )
: TQObject( parent, name ), KXMLGUIClient( parent )
{
setInstance( TranslatorPlugin::plugin()->instance() );
connect( TranslatorPlugin::plugin(), TQ_SIGNAL( destroyed( TQObject * ) ), this, TQ_SLOT( deleteLater() ) );
m_manager = parent;
new TDEAction( i18n( "Translate" ), "locale", CTRL + Key_T, this, TQ_SLOT( slotTranslateChat() ), actionCollection(), "translateCurrentMessage" );
setXMLFile( "translatorchatui.rc" );
}
TranslatorGUIClient::~TranslatorGUIClient()
{
}
void TranslatorGUIClient::slotTranslateChat()
{
if ( !m_manager->view() )
return;
Kopete::Message msg = m_manager->view()->currentMessage();
TQString body = msg.plainBody();
if ( body.isEmpty() )
return;
TQString src_lang = TranslatorPlugin::plugin()->m_myLang;
TQString dst_lang;
TQPtrList<Kopete::Contact> list = m_manager->members();
Kopete::MetaContact *to = list.first()->metaContact();
dst_lang = to->pluginData( TranslatorPlugin::plugin(), "languageKey" );
if ( dst_lang.isEmpty() || dst_lang == "null" )
{
kdDebug( 14308 ) << k_funcinfo << "Cannot determine dst Metacontact language (" << to->displayName() << ")" << endl;
return;
}
// We search for src_dst
TranslatorPlugin::plugin()->translateMessage( body, src_lang, dst_lang, this, TQ_SLOT( messageTranslated( const TQVariant & ) ) );
}
void TranslatorGUIClient::messageTranslated( const TQVariant &result )
{
TQString translated = result.toString();
if ( translated.isEmpty() )
{
kdDebug( 14308 ) << k_funcinfo << "Empty string returned" << endl;
return;
}
//if the user close the window before the translation arrive, return
if ( !m_manager->view() )
return;
Kopete::Message msg = m_manager->view()->currentMessage();
msg.setBody( translated );
m_manager->view()->setCurrentMessage( msg );
}
#include "translatorguiclient.moc"