-rw-r--r-- | core/applets/clipboardapplet/clipboard.cpp | 263 |
1 files changed, 183 insertions, 80 deletions
diff --git a/core/applets/clipboardapplet/clipboard.cpp b/core/applets/clipboardapplet/clipboard.cpp index 3099a84..b83e16e 100644 --- a/core/applets/clipboardapplet/clipboard.cpp +++ b/core/applets/clipboardapplet/clipboard.cpp @@ -1,255 +1,358 @@ /********************************************************************** ** Copyright (C) 2000 Trolltech AS. All rights reserved. ** ** This file is part of Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "clipboard.h" #include <qpe/resource.h> #include <qpainter.h> #include <qpopupmenu.h> #include <qwindowsystem_qws.h> #include <qapplication.h> #include <qclipboard.h> #include <qtimer.h> //=========================================================================== /* XPM */ static const char * paste_xpm[] = { -"14 16 64 1", +"14 16 167 2", " c None", -". c #020202", -"+ c #867616", -"@ c #A69A42", -"# c #BAB676", -"$ c #060606", -"% c #EAD2AA", -"& c #F6F6DA", -"* c #222212", -"= c #86761E", -"- c #868686", -"; c #5A5202", -"> c #8A7E2E", -", c #2C2C2C", -"' c #9A9A9A", -") c #F6EADA", -"! c #AAA262", -"~ c #323232", -"{ c #726A32", -"] c #6E6E6E", -"^ c #C2B69E", -"/ c #9E9E9E", -"( c #EED6BA", -"_ c #F2DEC2", -": c #D2CE8E", -"< c #3A3A3A", -"[ c #EACAA2", -"} c #3E3E3E", -"| c #727272", -"1 c #CECECE", -"2 c #929292", -"3 c #4A462A", -"4 c #424242", -"5 c #666666", -"6 c #C2AE96", -"7 c #767676", -"8 c #D6D6D6", -"9 c #C2C2C2", -"0 c #BFA681", -"a c #1E1E1E", -"b c #FAF6F3", -"c c #AEAEAE", -"d c #C29A6A", -"e c #FEFEFE", -"f c #B6B6B6", -"g c #7E7E7E", -"h c #FAF2E6", -"i c #8E8E8E", -"j c #C6BCAE", -"k c #DEDEDE", -"l c #BEBEBE", -"m c #464646", -"n c #BEAE92", -"o c #262626", -"p c #F2E2CE", -"q c #C2A175", -"r c #CACACA", -"s c #969696", -"t c #8A8A8A", -"u c #828282", -"v c #6A6A6A", -"w c #BEB6AE", -"x c #E2E0E0", -"y c #7A7A7A", -" *{>; ", -" }}}@e:!;}}} ", -"<x8=&:#@+;ll, ", -"}k/=;;3}337|o ", -"<k's24444m45o ", -"}8'ss4xkkk]}a ", -"<1s224keee|b4 ", -"}r2itmkeee]]44", -"<9iitmkeeehkw.", -"<lt-u4keeb)pn.", -"<fu-umkebhp(0.", -"<cugg4kbh)_(q.", -"<cyyymk))p(%q.", -",5vvv4k)p_%[q.", -" ...$mljnn0qd.", -" 4.......,"}; +". c #96A0AC", +"+ c #9BB0D4", +"@ c #5E7095", +"# c #F1CA79", +"$ c #EFC56D", +"% c #C9AF76", +"& c #9FABBA", +"* c #AEBFDD", +"= c #8899BA", +"- c #726E68", +"; c #D19A33", +"> c #DA9524", +", c #EFC065", +"' c #F3DDA6", +") c #E9D192", +"! c #ADA895", +"~ c #9AA8BF", +"{ c #B4C2D8", +"] c #AEBED7", +"^ c #797E8A", +"/ c #B78534", +"( c #DE8516", +"_ c #8A4308", +": c #F0C470", +"< c #F5EFD3", +"[ c #DFD7B4", +"} c #8F9BA6", +"| c #7C8BA3", +"1 c #808A9A", +"2 c #828892", +"3 c #727582", +"4 c #9A6435", +"5 c #F37004", +"6 c #A24104", +"7 c #F0C36E", +"8 c #F4EBCC", +"9 c #ECDCAF", +"0 c #CDC29B", +"a c #C1B486", +"b c #C3A86B", +"c c #B8924A", +"d c #B17B31", +"e c #C66C1C", +"f c #DE6610", +"g c #944311", +"h c #F3E8C6", +"i c #F3E0AB", +"j c #F2DB9B", +"k c #F1D382", +"l c #F0C056", +"m c #CCA354", +"n c #B7B09D", +"o c #C2A898", +"p c #BCA298", +"q c #9A959F", +"r c #526C8F", +"s c #F3E4B9", +"t c #F3DA99", +"u c #F4D78A", +"v c #F5CA6A", +"w c #F4B032", +"x c #C19A56", +"y c #C2D7EA", +"z c #C0D0E7", +"A c #B0C6E8", +"B c #A6C1EB", +"C c #6AA1E3", +"D c #F0C36D", +"E c #F3E2B0", +"F c #F3D891", +"G c #F3CF7A", +"H c #F4BC4C", +"I c #F3A51C", +"J c #BC9758", +"K c #CAE4FE", +"L c #C5DDFB", +"M c #B5D3FB", +"N c #A8CCFC", +"O c #63A6F6", +"P c #2180E3", +"Q c #F3E1AE", +"R c #F3D488", +"S c #F3C664", +"T c #F4B63C", +"U c #F2A61C", +"V c #BC9A5C", +"W c #CCE6FE", +"X c #C8DEFB", +"Y c #B9D6FB", +"Z c #B2D0FC", +"` c #84B6FB", +" . c #479DFB", +".. c #F3DFAC", +"+. c #F3CC76", +"@. c #F3BE52", +"#. c #F4B53A", +"$. c #F2AB24", +"%. c #BC9D61", +"&. c #CBE5FE", +"*. c #C3DBFB", +"=. c #B0D0FB", +"-. c #ACCBFC", +";. c #A0C3FD", +">. c #6EB1FF", +",. c #F3DCA4", +"'. c #F3C35F", +"). c #F3BC4A", +"!. c #F3AC26", +"~. c #BC9E63", +"{. c #CAE4FF", +"]. c #BCD7FB", +"^. c #A3C7FB", +"/. c #94BCFB", +"(. c #92BAFB", +"_. c #74B4FE", +":. c #F1C46D", +"<. c #F4D99A", +"[. c #F4BE52", +"}. c #F4BB47", +"|. c #F4B63D", +"1. c #F4AD27", +"2. c #BC9E64", +"3. c #CAE5FF", +"4. c #BAD6FB", +"5. c #A1C5FB", +"6. c #9AC1FB", +"7. c #9DC1FC", +"8. c #7CBAFE", +"9. c #F5C870", +"0. c #F8DC9B", +"a. c #F8C65C", +"b. c #F8C252", +"c. c #F8BE49", +"d. c #F7B534", +"e. c #BFA46C", +"f. c #CBE4FF", +"g. c #B7D3FB", +"h. c #A4C6FB", +"i. c #A0C4FB", +"j. c #A2C4FC", +"k. c #80BDFF", +"l. c #BC9250", +"m. c #BF9461", +"n. c #BD8944", +"o. c #BD863D", +"p. c #BD8438", +"q. c #BC7C2C", +"r. c #988269", +"s. c #C5E7FF", +"t. c #C0DDFE", +"u. c #B2D4FE", +"v. c #ACD1FE", +"w. c #ACD0FE", +"x. c #7DC0FF", +"y. c #805835", +"z. c #754D26", +"A. c #754C22", +"B. c #754B20", +"C. c #75471A", +"D. c #534D4F", +"E. c #619BCE", +"F. c #6295C8", +"G. c #5C91C8", +"H. c #598FC8", +"I. c #588FC8", +"J. c #3E87CD", +" . + @ ", +" # $ % & * = - ; > ", +", ' ) ! ~ { ] ^ / ( _ ", +": < [ } | 1 2 3 4 5 6 ", +"7 8 9 0 a b c d e f g ", +"7 h i j k l m n o p q r ", +"7 s t u v w x y z A B C ", +"D E F G H I J K L M N O P ", +"D Q R S T U V W X Y Z ` . ", +"D ..+.@.#.$.%.&.*.=.-.;.>. ", +"7 ,.'.).T !.~.{.].^./.(._. ", +":.<.[.}.|.1.2.3.4.5.6.7.8. ", +"9.0.a.b.c.d.e.f.g.h.i.j.k. ", +"l.m.n.o.p.q.r.s.t.u.v.w.x. ", +" y.z.A.B.C.D.E.F.G.H.I.J. ", +" "}; ClipboardApplet::ClipboardApplet( QWidget *parent, const char *name ) : QWidget( parent, name ) { setFixedWidth ( 14 ); setFixedHeight ( 18 ); m_clipboardPixmap = QPixmap ( paste_xpm ); m_timer = new QTimer ( this ); connect ( QApplication::clipboard ( ), SIGNAL( dataChanged ( )), this, SLOT( newData ( ))); connect ( m_timer, SIGNAL( timeout ( )), this, SLOT( newData ( ))); connect ( qApp, SIGNAL( aboutToQuit ( )), this, SLOT( shutdown ( ))); m_menu = 0; m_dirty = true; m_lasttext = QString::null; m_timer-> start ( 0, true ); } ClipboardApplet::~ClipboardApplet ( ) { } void ClipboardApplet::shutdown ( ) { // the timer has to be stopped, or Qt/E will hang on quit() // see launcher/desktop.cpp m_timer-> stop ( ); } void ClipboardApplet::mousePressEvent ( QMouseEvent *) { if ( m_dirty ) { delete m_menu; m_menu = new QPopupMenu ( this ); m_menu-> setCheckable ( true ); if ( m_history. count ( )) { for ( unsigned int i = 0; i < m_history. count ( ); i++ ) { QString str = m_history [i]; if ( str. length ( ) > 20 ) str = str. left ( 20 ) + "..."; m_menu-> insertItem ( QString ( "%1: %2" ). arg ( i + 1 ). arg ( str ), i ); m_menu-> setItemChecked ( i, false ); } m_menu-> setItemChecked ( m_history. count ( ) - 1, true ); m_menu-> insertSeparator ( ); } m_menu-> insertItem ( QIconSet ( Resource::loadPixmap ( "cut" )), tr( "Cut" ), 100 ); m_menu-> insertItem ( QIconSet ( Resource::loadPixmap ( "copy" )), tr( "Copy" ), 101 ); m_menu-> insertItem ( QIconSet ( Resource::loadPixmap ( "paste" )), tr( "Paste" ), 102 ); connect ( m_menu, SIGNAL( activated ( int )), this, SLOT( action ( int ))); m_dirty = false; } QPoint p = mapToGlobal ( QPoint ( 0, 0 )); QSize s = m_menu-> sizeHint ( ); m_menu-> popup ( QPoint ( p. x ( ) + ( width ( ) / 2 ) - ( s. width ( ) / 2 ), p. y ( ) - s. height ( ))); } void ClipboardApplet::action(int id) { ushort unicode = 0; int scan = 0; switch ( id ) { case 100: unicode = 'X' - '@'; scan = Key_X; // Cut break; case 101: unicode = 'C' - '@'; scan = Key_C; // Copy break; case 102: unicode = 'V' - '@'; scan = Key_V; // Paste break; default: if (( id >= 0 ) && ( uint( id ) < m_history. count ( ))) { QApplication::clipboard ( )-> setText ( m_history [id] ); for ( uint i = 0; i < m_history. count ( ); i++ ) m_menu-> setItemChecked ( i, i == uint( id )); unicode = 'V' - '@'; scan = Key_V; } break; } if ( scan ) { qwsServer-> sendKeyEvent ( unicode, scan, ControlButton, true, false ); qwsServer-> sendKeyEvent ( unicode, scan, ControlButton, false, false ); } } void ClipboardApplet::paintEvent ( QPaintEvent* ) { QPainter p ( this ); p. drawPixmap ( 0, 1, m_clipboardPixmap ); } void ClipboardApplet::newData ( ) { static bool excllock = false; if ( excllock ) return; else excllock = true; m_timer-> stop ( ); QCString type = "plain"; QString txt = QApplication::clipboard ( )-> text ( type ); if ( !txt. isEmpty ( ) && !m_history. contains ( txt )) { m_history. append ( txt ); if ( m_history. count ( ) > 5 ) m_history. remove ( m_history. begin ( )); m_dirty = true; } m_timer-> start ( 1500, true ); excllock = false; } |