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.
koffice/lib/kofficeui/kcoloractions.cpp

349 lines
10 KiB

/* This file is part of the KDE libraries
Copyright (C) 2000 Reginald Stadlbauer <reggie@kde.org>
Copyright (C) 2002 Werner Trobin <trobin@kde.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License version 2 as published by the Free Software Foundation.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#include <kcoloractions.h>
#include <qpopupmenu.h>
#include <qwhatsthis.h>
#include <qtooltip.h>
#include <kapplication.h>
#include <ktoolbar.h>
#include <ktoolbarbutton.h>
#include <kdebug.h>
KColorAction::KColorAction( const QString& text, int accel,
QObject* parent, const char* name )
: KAction( text, accel, parent, name )
{
typ = TextColor;
init();
}
KColorAction::KColorAction( const QString& text, int accel,
QObject* receiver, const char* slot, QObject* parent,
const char* name )
: KAction( text, accel, receiver, slot, parent, name )
{
typ = TextColor;
init();
}
KColorAction::KColorAction( const QString& text, Type type, int accel,
QObject* parent, const char* name )
: KAction( text, accel, parent, name )
{
typ = type;
init();
}
KColorAction::KColorAction( const QString& text, Type type, int accel,
QObject* receiver, const char* slot, QObject* parent,
const char* name )
: KAction( text, accel, receiver, slot, parent, name )
{
typ = type;
init();
}
KColorAction::KColorAction( QObject* parent, const char* name )
: KAction( parent, name )
{
typ = TextColor;
init();
}
void KColorAction::setColor( const QColor &c )
{
if ( c == col )
return;
col = c;
createPixmap();
}
QColor KColorAction::color() const
{
return col;
}
void KColorAction::setType( Type t )
{
if ( t == typ )
return;
typ = t;
createPixmap();
}
KColorAction::Type KColorAction::type() const
{
return typ;
}
void KColorAction::init()
{
col = Qt::black;
createPixmap();
}
void KColorAction::createPixmap()
{
int r, g, b;
QCString pix;
QCString line;
col.rgb( &r, &g, &b );
pix = "/* XPM */\n";
pix += "static char * text_xpm[] = {\n";
switch ( typ ) {
case TextColor: {
pix += "\"20 20 11 1\",\n";
pix += "\"h c #c0c000\",\n";
pix += "\"g c #808000\",\n";
pix += "\"f c #c0c0ff\",\n";
pix += "\"a c #000000\",\n";
pix += "\"d c #ff8000\",\n";
pix += "\". c none\",\n";
pix += "\"e c #0000c0\",\n";
pix += "\"i c #ffff00\",\n";
line.sprintf( "\"# c #%02X%02X%02X \",\n", r, g, b );
pix += line.copy();
pix += "\"b c #c00000\",\n";
pix += "\"c c #ff0000\",\n";
pix += "\"....................\",\n";
pix += "\"....................\",\n";
pix += "\"....................\",\n";
pix += "\"........#...........\",\n";
pix += "\"........#a..........\",\n";
pix += "\".......###..........\",\n";
pix += "\".......###a.........\",\n";
pix += "\"......##aa#.........\",\n";
pix += "\"......##a.#a........\",\n";
pix += "\".....##a...#........\",\n";
pix += "\".....#######a.......\",\n";
pix += "\"....##aaaaaa#.......\",\n";
pix += "\"....##a.....aaaaaaaa\",\n";
pix += "\"...####....#abbccdda\",\n";
pix += "\"....aaaa....abbccdda\",\n";
pix += "\"............aee##ffa\",\n";
pix += "\"............aee##ffa\",\n";
pix += "\"............agghhiia\",\n";
pix += "\"............agghhiia\",\n";
pix += "\"............aaaaaaaa\"};\n";
} break;
case FrameColor: {
pix += "\" 20 20 3 1 \",\n";
pix += "\" c none \",\n";
pix += "\"+ c white \",\n";
line.sprintf( "\". c #%02X%02X%02X \",\n", r, g, b );
pix += line.copy();
pix += "\" \",\n";
pix += "\" \",\n";
pix += "\" ................ \",\n";
pix += "\" ................ \",\n";
pix += "\" ................ \",\n";
pix += "\" ...++++++++++... \",\n";
pix += "\" ...++++++++++... \",\n";
pix += "\" ...++++++++++... \",\n";
pix += "\" ...++++++++++... \",\n";
pix += "\" ...++++++++++... \",\n";
pix += "\" ...++++++++++... \",\n";
pix += "\" ...++++++++++... \",\n";
pix += "\" ...++++++++++... \",\n";
pix += "\" ...++++++++++... \",\n";
pix += "\" ...++++++++++... \",\n";
pix += "\" ................ \",\n";
pix += "\" ................ \",\n";
pix += "\" ................ \",\n";
pix += "\" \",\n";
pix += "\" \";\n";
} break;
case BackgroundColor: {
pix += "\" 20 20 3 1 \",\n";
pix += "\" c none \",\n";
pix += "\". c red \",\n";
line.sprintf( "\"+ c #%02X%02X%02X \",\n", r, g, b );
pix += line.copy();
pix += "\" \",\n";
pix += "\" \",\n";
pix += "\" ................ \",\n";
pix += "\" ................ \",\n";
pix += "\" ..++++++++++++.. \",\n";
pix += "\" ..++++++++++++.. \",\n";
pix += "\" ..++++++++++++.. \",\n";
pix += "\" ..++++++++++++.. \",\n";
pix += "\" ..++++++++++++.. \",\n";
pix += "\" ..++++++++++++.. \",\n";
pix += "\" ..++++++++++++.. \",\n";
pix += "\" ..++++++++++++.. \",\n";
pix += "\" ..++++++++++++.. \",\n";
pix += "\" ..++++++++++++.. \",\n";
pix += "\" ..++++++++++++.. \",\n";
pix += "\" ..++++++++++++.. \",\n";
pix += "\" ................ \",\n";
pix += "\" ................ \",\n";
pix += "\" \",\n";
pix += "\" \";\n";
} break;
}
QPixmap pixmap( pix );
setIconSet( QIconSet( pixmap ) );
}
KSelectColorAction::KSelectColorAction( const QString& text, Type type,
const QObject* receiver, const char* slot,
KActionCollection* parent, const char* name ) :
KAction( text, KShortcut(), receiver, slot, parent, name ), m_type( type ),
m_color( Qt::black )
{
}
KSelectColorAction::~KSelectColorAction()
{
}
int KSelectColorAction::plug( QWidget* w, int index )
{
if (w == 0) {
kdWarning() << "KSelectColorAction::plug called with 0 argument\n";
return -1;
}
if (kapp && !kapp->authorizeKAction(name()))
return -1;
if ( w->inherits("QPopupMenu") )
{
QPopupMenu* menu = static_cast<QPopupMenu*>( w );
int id;
if ( hasIcon() )
{
/* ###### CHECK: We're not allowed to specify the instance in iconSet()
KInstance *instance;
if ( parentCollection() )
instance = parentCollection()->instance();
else
instance = KGlobal::instance();
*/
id = menu->insertItem( iconSet( KIcon::Small, 0 ), text(), this,//dsweet
SLOT( slotActivated() ), 0, -1, index );
}
else
id = menu->insertItem( text(), this, SLOT( slotActivated() ), //dsweet
0, -1, index );
updateShortcut( menu, id );
// call setItemEnabled only if the item really should be disabled,
// because that method is slow and the item is per default enabled
if ( !isEnabled() )
menu->setItemEnabled( id, false );
if ( !whatsThis().isEmpty() )
menu->setWhatsThis( id, whatsThisWithIcon() );
addContainer( menu, id );
connect( menu, SIGNAL( destroyed() ), this, SLOT( slotDestroyed() ) );
if ( parentCollection() )
parentCollection()->connectHighlight( menu, this );
return containerCount() - 1;
}
else if ( w->inherits( "KToolBar" ) )
{
KToolBar *bar = static_cast<KToolBar *>( w );
int id_ = getToolButtonID();
KInstance *instance;
if ( parentCollection() )
instance = parentCollection()->instance();
else
instance = KGlobal::instance();
if ( icon().isEmpty() ) // old code using QIconSet directly
{
bar->insertButton( iconSet( KIcon::Small ).pixmap(), id_, SIGNAL( clicked() ), this,
SLOT( slotActivated() ),
isEnabled(), plainText(), index );
}
else
bar->insertButton( icon(), id_, SIGNAL( clicked() ), this,
SLOT( slotActivated() ),
isEnabled(), plainText(), index, instance );
bar->getButton( id_ )->setName( QCString("toolbutton_")+name() );
if ( !whatsThis().isEmpty() )
QWhatsThis::add( bar->getButton(id_), whatsThisWithIcon() );
if ( !toolTip().isEmpty() )
QToolTip::add( bar->getButton(id_), toolTip() );
addContainer( bar, id_ );
connect( bar, SIGNAL( destroyed() ), this, SLOT( slotDestroyed() ) );
if ( parentCollection() )
parentCollection()->connectHighlight( bar, this );
return containerCount() - 1;
}
return -1;
}
QColor KSelectColorAction::color() const
{
return m_color;
}
KSelectColorAction::Type KSelectColorAction::type() const
{
return m_type;
}
void KSelectColorAction::setColor( const QColor &/*c*/ )
{
}
void KSelectColorAction::setType( Type /*t*/ )
{
}
QString KSelectColorAction::whatsThisWithIcon() const
{
QString text = whatsThis();
if (!icon().isEmpty())
return QString::fromLatin1("<img source=\"small|%1\"> %2").arg(icon()).arg(text);
return text;
}
#include <kcoloractions.moc>