[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-devel
Subject: [PATCH] Translating the clipboard with Klipper
From: Kurt Granroth <granroth () suse ! com>
Date: 2001-02-16 20:27:26
[Download RAW message or body]
This isn't even remotely a bug fix (much less a critical one) so I
won't be hoping to get this in 2.1... but it's just so fun that I
thought I'd post the patch to it here.
I hacked klipper to add a "Translate Clipboard" submenu. When you
select a translation (English to German, for instance), it will send
the contents of the clipboard to babelfish for the translation.
I also made the submenu a tear off one. That allows me to have a
small menu by the side of my konsole while reading mail. When I come
across a non-English word, I just click on the proper entry and I get
my (very rough) translation.
Now to go hack in dictionary and thesaurus support :-)
--
Kurt Granroth | http://www.granroth.org
KDE Developer/Evangelist | SuSE Labs Open Source Developer
granroth@kde.org | granroth@suse.com
KDE -- Conquer Your Desktop
["klipper.diff" (text/plain)]
Index: toplevel.cpp
===================================================================
RCS file: /home/kde/kdebase/klipper/toplevel.cpp,v
retrieving revision 1.49
diff -b -u -r1.49 toplevel.cpp
--- toplevel.cpp 2001/01/30 21:46:15 1.49
+++ toplevel.cpp 2001/02/16 20:17:20
@@ -25,6 +25,8 @@
#include <kstringhandler.h>
#include <kiconloader.h>
+#include <krun.h>
+
#include "configdialog.h"
#include "toplevel.h"
#include "urlgrabber.h"
@@ -34,8 +36,16 @@
#define CONFIG_ITEM 60
#define URLGRAB_ITEM 70
+struct Lang {
+ enum LangCodes {
+ EN_FR, EN_DE, EN_IT, EN_PT, EN_ES,
+ FR_EN, DE_EN, IT_EN, PT_EN, ES_EN, RU_EN,
+ DE_FR, FR_DE
+ };
+};
+
// the <clipboard empty> item
-#define EMPTY 6
+#define EMPTY 8
/* XPM */
static const char*mouse[]={
@@ -88,6 +98,27 @@
connect(pQPMmenu, SIGNAL(activated(int)),
this, SLOT(clickedMenu(int)));
+ pQPMtranslate = new QPopupMenu(pQPMmenu, "translate_menu");
+ pQPMtranslate->insertTearOffHandle();
+ pQPMtranslate->setCaption(i18n("Translate Clipboard"));
+ connect(pQPMtranslate, SIGNAL(activated(int)),
+ this, SLOT(clickedTranslate(int)));
+ pQPMtranslate->insertItem(i18n("English to French"), Lang::EN_FR);
+ pQPMtranslate->insertItem(i18n("English to German"), Lang::EN_DE);
+ pQPMtranslate->insertItem(i18n("English to Italian"), Lang::EN_IT);
+ pQPMtranslate->insertItem(i18n("English to Portuguese"), Lang::EN_PT);
+ pQPMtranslate->insertItem(i18n("English to Spanish"), Lang::EN_ES);
+ pQPMtranslate->insertSeparator();
+ pQPMtranslate->insertItem(i18n("French to English"), Lang::FR_EN);
+ pQPMtranslate->insertItem(i18n("German to English"), Lang::DE_EN);
+ pQPMtranslate->insertItem(i18n("Italian to English"), Lang::IT_EN);
+ pQPMtranslate->insertItem(i18n("Portuguese to English"), Lang::PT_EN);
+ pQPMtranslate->insertItem(i18n("Spanish to English"), Lang::ES_EN);
+ pQPMtranslate->insertItem(i18n("Russian to English"), Lang::RU_EN);
+ pQPMtranslate->insertSeparator();
+ pQPMtranslate->insertItem(i18n("German to French"), Lang::DE_FR);
+ pQPMtranslate->insertItem(i18n("French to German"), Lang::FR_DE);
+
pQIDclipData = new QIntDict<QString>();
pQIDclipData->setAutoDelete(TRUE);
@@ -124,6 +155,7 @@
delete globalKeys;
delete pQTcheck;
delete pQPMmenu;
+ delete pQPMtranslate;
delete pQIDclipData;
delete pQPpic;
delete myURLGrabber;
@@ -229,7 +261,64 @@
}
}
+void TopLevel::clickedTranslate(int id)
+{
+ QString *data = pQIDclipData->find(pSelectedItem);
+ if(!data )
+ return;
+
+ QString query ( "text=" + KURL::encode_string( *data ) );
+ switch ( id ){
+ case Lang::EN_FR:
+ query+="&lp=en_fr";
+ break;
+ case Lang::EN_DE:
+ query+="&lp=en_de";
+ break;
+ case Lang::EN_IT:
+ query+="&lp=en_it";
+ break;
+ case Lang::EN_PT:
+ query+="&lp=en_pt";
+ break;
+ case Lang::EN_ES:
+ query+="&lp=en_es";
+ break;
+ case Lang::FR_EN:
+ query+="&lp=fr_en";
+ break;
+ case Lang::DE_EN:
+ query+="&lp=de_en";
+ break;
+ case Lang::IT_EN:
+ query+="&lp=it_en";
+ break;
+ case Lang::PT_EN:
+ query+="&lp=pt_en";
+ break;
+ case Lang::ES_EN:
+ query+="&lp=es_en";
+ break;
+ case Lang::RU_EN:
+ query+="&lp=ru_en";
+ break;
+ case Lang::DE_FR:
+ query+="&lp=de_fr";
+ break;
+ case Lang::FR_DE:
+ query+="&lp=fr_de";
+ break;
+ default:
+ query+="&lp=en_fr";
+ break;
+ }
+
+ KURL babel( "http://babel.altavista.com/translate.dyn" );
+ babel.setQuery( query );
+ (void)new KRun( babel );
+}
+
void TopLevel::showPopupMenu( QPopupMenu *menu )
{
ASSERT( menu != 0L );
@@ -273,6 +362,8 @@
// id aftwards for the given index.
toggleURLGrabAction->plug( pQPMmenu, URLGRAB_ITEM );
pQPMmenu->setId( URLGRAB_ITEM, URLGRAB_ITEM );
+ pQPMmenu->insertSeparator();
+ pQPMmenu->insertItem(i18n("&Translate Clipboard"), pQPMtranslate);
pQPMmenu->insertSeparator();
long int id;
Index: toplevel.h
===================================================================
RCS file: /home/kde/kdebase/klipper/toplevel.h,v
retrieving revision 1.13
diff -b -u -r1.13 toplevel.h
--- toplevel.h 2001/01/15 04:37:55 1.13
+++ toplevel.h 2001/02/16 20:17:20
@@ -52,6 +52,7 @@
private slots:
void newClipData();
void clickedMenu(int);
+ void clickedTranslate(int);
void slotConfigure();
private:
@@ -59,6 +60,7 @@
QString QSlast;
KPopupMenu *pQPMmenu;
+ QPopupMenu *pQPMtranslate;
KToggleAction *toggleURLGrabAction;
QIntDict<QString> *pQIDclipData;
QTimer *pQTcheck;
>> Visit http://master.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe <<
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic