diff options
Diffstat (limited to 'lib/kformula/symbolaction.cpp')
-rw-r--r-- | lib/kformula/symbolaction.cpp | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/lib/kformula/symbolaction.cpp b/lib/kformula/symbolaction.cpp new file mode 100644 index 00000000..8fe3d8f8 --- /dev/null +++ b/lib/kformula/symbolaction.cpp @@ -0,0 +1,174 @@ +/* This file is part of the KDE project + Copyright (C) 2002 Heinrich Kuettler <heinrich.kuettler@gmx.de> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + 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 <tqlistbox.h> +#include <tqpainter.h> + +#include <tdeapplication.h> +#include <kcombobox.h> +#include <tdeglobalsettings.h> +#include <tdetoolbar.h> +#include <kdebug.h> + +#include "symbolaction.h" + +/* + * The items for the SymbolCombos. * + */ + +KFORMULA_NAMESPACE_BEGIN + +class SymbolComboItem : public TQListBoxItem +{ +public: + SymbolComboItem( const TQString&, const TQFont& , TQChar, TQComboBox* combo ); + virtual ~SymbolComboItem(); + + virtual int width( const TQListBox* ) const; + virtual int height( const TQListBox* ) const; + +protected: + virtual void paint( TQPainter *p ); + +private: + TQComboBox *m_combo; + TQString m_name; + TQFont m_font; + TQChar m_symbol; + + static int widest; +}; + +int SymbolComboItem::widest = 0; + +SymbolComboItem::SymbolComboItem( const TQString &name, const TQFont& font, + TQChar symbol, TQComboBox *combo ) + : TQListBoxItem( combo->listBox() ), + m_combo( combo ), + m_name( name ), + m_font( font ), + m_symbol( symbol ) +{ + setText( name ); + int charWidth = TQFontMetrics( m_font ).width( TQChar( m_symbol ) ); + widest = TQMAX( widest, charWidth ); +} + +SymbolComboItem::~SymbolComboItem() +{ +} + +int SymbolComboItem::width( const TQListBox * /*lb*/ ) const +{ + return widest + TQFontMetrics( TDEGlobalSettings::generalFont() ).width( text() ) + 12; +} + +int SymbolComboItem::height( const TQListBox * /*lb*/ ) const +{ + int generalHeight = TQFontMetrics( TDEGlobalSettings::generalFont() ).lineSpacing(); + int fontHeight = TQFontMetrics( m_font ).lineSpacing(); + return TQMAX( generalHeight, fontHeight ) + 2; +} + +void SymbolComboItem::paint( TQPainter *p ) +{ + p->setFont( m_font ); + TQFontMetrics fm( p->fontMetrics() ); + p->drawText( 3, fm.ascent() + fm.leading() / 2, + TQString( "%1" ).arg( TQChar( m_symbol ) ) ); + + p->setFont( TDEGlobalSettings::generalFont() ); + fm = p->fontMetrics(); + p->drawText( widest + 6, height( m_combo->listBox() ) / 2 + fm.strikeOutPos(), m_name ); +} + +/* + * The symbol action * + */ +SymbolAction::SymbolAction( TQObject* parent, const char* name ) + : TDESelectAction( parent, name ) +{ + setEditable( FALSE ); +} + +SymbolAction::SymbolAction( const TQString& text, const TDEShortcut& cut, + const TQObject* receiver, const char* slot, + TQObject* parent, const char* name ) + : TDESelectAction( text, cut, receiver, slot, parent, name ) +{ + setEditable( FALSE ); +} + +int SymbolAction::plug( TQWidget* w, int index ) +{ + if (kapp && !kapp->authorizeTDEAction(name())) + return -1; + if ( w->inherits( "TDEToolBar" ) ) + { + TDEToolBar* bar = static_cast<TDEToolBar*>( w ); + int id_ = TDEAction::getToolButtonID(); + KComboBox *cb = new KComboBox( bar ); + connect( cb, TQT_SIGNAL( activated( const TQString & ) ), + TQT_SLOT( slotActivated( const TQString & ) ) ); + cb->setEnabled( isEnabled() ); + bar->insertWidget( id_, comboWidth(), cb, index ); + cb->setMinimumWidth( cb->sizeHint().width() ); + + addContainer( bar, id_ ); + + connect( bar, TQT_SIGNAL( destroyed() ), this, TQT_SLOT( slotDestroyed() ) ); + + updateItems( containerCount() - 1 ); + + return containerCount() - 1; + } + else return TDESelectAction::plug( w, index ); +} + +void SymbolAction::setSymbols( const TQStringList &names, + const TQFont& font, + const TQMemArray<TQChar>& chars ) +{ + m_chars = chars; + m_font = font; + setItems( names ); + + int len = containerCount(); + for ( int i = 0; i < len; ++i ) + updateItems( i ); +} + +void SymbolAction::updateItems( int id ) +{ + TQWidget *w = container( id ); + if ( w->inherits( "TDEToolBar" ) ) { + TQWidget *r = static_cast<TDEToolBar*>( w )->getWidget( itemId( id ) ); + if ( r->inherits( TQCOMBOBOX_OBJECT_NAME_STRING ) ) { + TQComboBox *cb = static_cast<TQComboBox*>( r ); + cb->clear(); + + for( uint i = 0; i < items().count(); ++i ) { + new SymbolComboItem( *items().at( i ), m_font, m_chars.at( i ), cb ); + } + cb->setMinimumWidth( cb->sizeHint().width() ); + } + } +} + +KFORMULA_NAMESPACE_END |