lib Library API Documentation

kcoloractions.cpp

00001 /* This file is part of the KDE libraries
00002     Copyright (C) 2000 Reginald Stadlbauer <reggie@kde.org>
00003     Copyright (C) 2002 Werner Trobin <trobin@kde.org>
00004 
00005     This library is free software; you can redistribute it and/or
00006     modify it under the terms of the GNU Library General Public
00007     License version 2 as published by the Free Software Foundation.
00008 
00009     This library is distributed in the hope that it will be useful,
00010     but WITHOUT ANY WARRANTY; without even the implied warranty of
00011     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012     Library General Public License for more details.
00013 
00014     You should have received a copy of the GNU Library General Public License
00015     along with this library; see the file COPYING.LIB.  If not, write to
00016     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
00017     Boston, MA 02111-1307, USA.
00018 */
00019 
00020 #include <kcoloractions.h>
00021 
00022 #include <qpopupmenu.h>
00023 #include <qwhatsthis.h>
00024 #include <qtooltip.h>
00025 
00026 #include <kapplication.h>
00027 #include <ktoolbar.h>
00028 #include <ktoolbarbutton.h>
00029 #include <kdebug.h>
00030 
00031 KColorAction::KColorAction( const QString& text, int accel,
00032                 QObject* parent, const char* name )
00033     : KAction( text, accel, parent, name )
00034 {
00035     typ = TextColor;
00036     init();
00037 }
00038 
00039 KColorAction::KColorAction( const QString& text, int accel,
00040                 QObject* receiver, const char* slot, QObject* parent,
00041                 const char* name )
00042     : KAction( text, accel, receiver, slot, parent, name )
00043 {
00044     typ = TextColor;
00045     init();
00046 }
00047 
00048 KColorAction::KColorAction( const QString& text, Type type, int accel,
00049                 QObject* parent, const char* name )
00050     : KAction( text, accel, parent, name )
00051 {
00052     typ = type;
00053     init();
00054 }
00055 
00056 KColorAction::KColorAction( const QString& text, Type type, int accel,
00057                 QObject* receiver, const char* slot, QObject* parent,
00058                 const char* name )
00059     : KAction( text, accel, receiver, slot, parent, name )
00060 {
00061     typ = type;
00062     init();
00063 }
00064 
00065 KColorAction::KColorAction( QObject* parent, const char* name )
00066     : KAction( parent, name )
00067 {
00068     typ = TextColor;
00069     init();
00070 }
00071 
00072 void KColorAction::setColor( const QColor &c )
00073 {
00074     if ( c == col )
00075     return;
00076 
00077     col = c;
00078     createPixmap();
00079 }
00080 
00081 QColor KColorAction::color() const
00082 {
00083     return col;
00084 }
00085 
00086 void KColorAction::setType( Type t )
00087 {
00088     if ( t == typ )
00089     return;
00090 
00091     typ = t;
00092     createPixmap();
00093 }
00094 
00095 KColorAction::Type KColorAction::type() const
00096 {
00097     return typ;
00098 }
00099 
00100 void KColorAction::init()
00101 {
00102     col = Qt::black;
00103     createPixmap();
00104 }
00105 
00106 void KColorAction::createPixmap()
00107 {
00108     int r, g, b;
00109     QCString pix;
00110     QCString line;
00111 
00112     col.rgb( &r, &g, &b );
00113 
00114     pix = "/* XPM */\n";
00115 
00116     pix += "static char * text_xpm[] = {\n";
00117 
00118     switch ( typ ) {
00119       case TextColor: {
00120         pix += "\"20 20 11 1\",\n";
00121         pix += "\"h c #c0c000\",\n";
00122         pix += "\"g c #808000\",\n";
00123         pix += "\"f c #c0c0ff\",\n";
00124         pix += "\"a c #000000\",\n";
00125         pix += "\"d c #ff8000\",\n";
00126         pix += "\". c none\",\n";
00127         pix += "\"e c #0000c0\",\n";
00128         pix += "\"i c #ffff00\",\n";
00129         line.sprintf( "\"# c #%02X%02X%02X \",\n", r, g, b );
00130         pix += line.copy();
00131         pix += "\"b c #c00000\",\n";
00132         pix += "\"c c #ff0000\",\n";
00133         pix += "\"....................\",\n";
00134         pix += "\"....................\",\n";
00135         pix += "\"....................\",\n";
00136         pix += "\"........#...........\",\n";
00137         pix += "\"........#a..........\",\n";
00138         pix += "\".......###..........\",\n";
00139         pix += "\".......###a.........\",\n";
00140         pix += "\"......##aa#.........\",\n";
00141         pix += "\"......##a.#a........\",\n";
00142         pix += "\".....##a...#........\",\n";
00143         pix += "\".....#######a.......\",\n";
00144         pix += "\"....##aaaaaa#.......\",\n";
00145         pix += "\"....##a.....aaaaaaaa\",\n";
00146         pix += "\"...####....#abbccdda\",\n";
00147         pix += "\"....aaaa....abbccdda\",\n";
00148         pix += "\"............aee##ffa\",\n";
00149         pix += "\"............aee##ffa\",\n";
00150         pix += "\"............agghhiia\",\n";
00151         pix += "\"............agghhiia\",\n";
00152         pix += "\"............aaaaaaaa\"};\n";
00153       } break;
00154       case FrameColor: {
00155     pix += "\" 20 20 3 1 \",\n";
00156 
00157     pix += "\"  c none \",\n";
00158     pix += "\"+ c white \",\n";
00159     line.sprintf( "\". c #%02X%02X%02X \",\n", r, g, b );
00160     pix += line.copy();
00161 
00162     pix += "\"                     \",\n";
00163     pix += "\"                     \",\n";
00164     pix += "\"  ................  \",\n";
00165     pix += "\"  ................  \",\n";
00166     pix += "\"  ................  \",\n";
00167     pix += "\"  ...++++++++++...  \",\n";
00168     pix += "\"  ...++++++++++...  \",\n";
00169     pix += "\"  ...++++++++++...  \",\n";
00170     pix += "\"  ...++++++++++...  \",\n";
00171     pix += "\"  ...++++++++++...  \",\n";
00172     pix += "\"  ...++++++++++...  \",\n";
00173     pix += "\"  ...++++++++++...  \",\n";
00174     pix += "\"  ...++++++++++...  \",\n";
00175     pix += "\"  ...++++++++++...  \",\n";
00176     pix += "\"  ...++++++++++...  \",\n";
00177     pix += "\"  ................  \",\n";
00178     pix += "\"  ................  \",\n";
00179     pix += "\"  ................  \",\n";
00180     pix += "\"                     \",\n";
00181     pix += "\"                     \";\n";
00182       } break;
00183       case BackgroundColor: {
00184         pix += "\" 20 20 3 1 \",\n";
00185 
00186         pix += "\"  c none \",\n";
00187         pix += "\". c red \",\n";
00188         line.sprintf( "\"+ c #%02X%02X%02X \",\n", r, g, b );
00189         pix += line.copy();
00190 
00191         pix += "\"                     \",\n";
00192         pix += "\"                     \",\n";
00193         pix += "\"  ................  \",\n";
00194         pix += "\"  ................  \",\n";
00195         pix += "\"  ..++++++++++++..  \",\n";
00196         pix += "\"  ..++++++++++++..  \",\n";
00197         pix += "\"  ..++++++++++++..  \",\n";
00198         pix += "\"  ..++++++++++++..  \",\n";
00199         pix += "\"  ..++++++++++++..  \",\n";
00200         pix += "\"  ..++++++++++++..  \",\n";
00201         pix += "\"  ..++++++++++++..  \",\n";
00202         pix += "\"  ..++++++++++++..  \",\n";
00203         pix += "\"  ..++++++++++++..  \",\n";
00204         pix += "\"  ..++++++++++++..  \",\n";
00205         pix += "\"  ..++++++++++++..  \",\n";
00206         pix += "\"  ..++++++++++++..  \",\n";
00207         pix += "\"  ................  \",\n";
00208         pix += "\"  ................  \",\n";
00209         pix += "\"                     \",\n";
00210         pix += "\"                     \";\n";
00211       } break;
00212     }
00213 
00214     QPixmap pixmap( pix );
00215     setIconSet( QIconSet( pixmap ) );
00216 }
00217 
00218 
00219 KSelectColorAction::KSelectColorAction( const QString& text, Type type,
00220                                         const QObject* receiver, const char* slot,
00221                                         KActionCollection* parent, const char* name ) :
00222     KAction( text, KShortcut(), receiver, slot, parent, name ), m_type( type ),
00223     m_color( Qt::black )
00224 {
00225 }
00226 
00227 KSelectColorAction::~KSelectColorAction()
00228 {
00229 }
00230 
00231 int KSelectColorAction::plug( QWidget* w, int index )
00232 {
00233     if (w == 0) {
00234     kdWarning() << "KSelectColorAction::plug called with 0 argument\n";
00235     return -1;
00236     }
00237     if (kapp && !kapp->authorizeKAction(name()))
00238         return -1;
00239 
00240     if ( w->inherits("QPopupMenu") )
00241     {
00242         QPopupMenu* menu = static_cast<QPopupMenu*>( w );
00243         int id;
00244 
00245         if ( hasIcon() )
00246         {
00247             /* ###### CHECK: We're not allowed to specify the instance in iconSet()
00248             KInstance *instance;
00249             if ( parentCollection() )
00250                 instance = parentCollection()->instance();
00251             else
00252                 instance = KGlobal::instance();
00253             */
00254             id = menu->insertItem( iconSet( KIcon::Small, 0 ), text(), this,//dsweet
00255                                    SLOT( slotActivated() ), 0, -1, index );
00256         }
00257         else
00258             id = menu->insertItem( text(), this, SLOT( slotActivated() ),  //dsweet
00259                                    0, -1, index );
00260 
00261         updateShortcut( menu, id );
00262 
00263         // call setItemEnabled only if the item really should be disabled,
00264         // because that method is slow and the item is per default enabled
00265         if ( !isEnabled() )
00266             menu->setItemEnabled( id, false );
00267 
00268         if ( !whatsThis().isEmpty() )
00269             menu->setWhatsThis( id, whatsThisWithIcon() );
00270 
00271         addContainer( menu, id );
00272         connect( menu, SIGNAL( destroyed() ), this, SLOT( slotDestroyed() ) );
00273 
00274         if ( parentCollection() )
00275             parentCollection()->connectHighlight( menu, this );
00276 
00277         return containerCount() - 1;
00278     }
00279     else if ( w->inherits( "KToolBar" ) )
00280     {
00281         KToolBar *bar = static_cast<KToolBar *>( w );
00282 
00283         int id_ = getToolButtonID();
00284         KInstance *instance;
00285         if ( parentCollection() )
00286             instance = parentCollection()->instance();
00287         else
00288             instance = KGlobal::instance();
00289 
00290         if ( icon().isEmpty() ) // old code using QIconSet directly
00291         {
00292             bar->insertButton( iconSet( KIcon::Small ).pixmap(), id_, SIGNAL( clicked() ), this,
00293                                SLOT( slotActivated() ),
00294                                isEnabled(), plainText(), index );
00295         }
00296         else
00297             bar->insertButton( icon(), id_, SIGNAL( clicked() ), this,
00298                                SLOT( slotActivated() ),
00299                                isEnabled(), plainText(), index, instance );
00300 
00301         bar->getButton( id_ )->setName( QCString("toolbutton_")+name() );
00302 
00303         if ( !whatsThis().isEmpty() )
00304             QWhatsThis::add( bar->getButton(id_), whatsThisWithIcon() );
00305 
00306         if ( !toolTip().isEmpty() )
00307             QToolTip::add( bar->getButton(id_), toolTip() );
00308 
00309         addContainer( bar, id_ );
00310 
00311         connect( bar, SIGNAL( destroyed() ), this, SLOT( slotDestroyed() ) );
00312 
00313         if ( parentCollection() )
00314             parentCollection()->connectHighlight( bar, this );
00315 
00316         return containerCount() - 1;
00317     }
00318 
00319     return -1;
00320 }
00321 
00322 QColor KSelectColorAction::color() const
00323 {
00324     return m_color;
00325 }
00326 
00327 KSelectColorAction::Type KSelectColorAction::type() const
00328 {
00329     return m_type;
00330 }
00331 
00332 void KSelectColorAction::setColor( const QColor &/*c*/ )
00333 {
00334 }
00335 
00336 void KSelectColorAction::setType( Type /*t*/ )
00337 {
00338 }
00339 
00340 QString KSelectColorAction::whatsThisWithIcon() const
00341 {
00342     QString text = whatsThis();
00343     if (!icon().isEmpty())
00344       return QString::fromLatin1("<img source=\"small|%1\"> %2").arg(icon()).arg(text);
00345     return text;
00346 }
00347 
00348 #include <kcoloractions.moc>
KDE Logo
This file is part of the documentation for lib Library Version 1.4.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Mon Feb 13 09:39:56 2006 by doxygen 1.4.2 written by Dimitri van Heesch, © 1997-2003