diff options
Diffstat (limited to 'lib/kformula/kformulaconfigpage.cpp')
-rw-r--r-- | lib/kformula/kformulaconfigpage.cpp | 543 |
1 files changed, 543 insertions, 0 deletions
diff --git a/lib/kformula/kformulaconfigpage.cpp b/lib/kformula/kformulaconfigpage.cpp new file mode 100644 index 00000000..ce95c40c --- /dev/null +++ b/lib/kformula/kformulaconfigpage.cpp @@ -0,0 +1,543 @@ +/* This file is part of the KDE project + Copyright (C) 2001 Andrea Rizzi <rizzi@kde.org> + Ulrich Kuettler <ulrich.kuettler@mailbox.tu-dresden.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 <tqvariant.h> // first for gcc 2.7.2 +#include <tqbuttongroup.h> +#include <tqcheckbox.h> +#include <tqgroupbox.h> +#include <tqlabel.h> +#include <tqlayout.h> +#include <tqmap.h> +#include <tqradiobutton.h> +#include <tqspinbox.h> +#include <tqstringlist.h> +#include <tqvbox.h> +#include <tqwidget.h> + +//#include <algorithm> + +#include <kcolorbutton.h> +#include <tdeconfig.h> +#include <kdebug.h> +#include <kdialog.h> +#include <tdefontdialog.h> +#include <tdelistview.h> +#include <tdelocale.h> +#include <tdemessagebox.h> +#include <knuminput.h> +#include <kpushbutton.h> + +#include "contextstyle.h" +#include "kformulaconfigpage.h" +#include "kformuladocument.h" +#include "symboltable.h" + + +KFORMULA_NAMESPACE_BEGIN + + +ConfigurePage::ConfigurePage( Document* document, TQWidget* view, TDEConfig* config, TQVBox* box, char* name ) + : TQObject( box->parent(), name ), m_document( document ), m_view( view ), m_config( config ), m_changed( false ) +{ + const ContextStyle& contextStyle = document->getContextStyle( true ); + + // fonts + + TQGroupBox *gbox = new TQGroupBox( i18n( "Fonts" ), box ); + gbox->setColumnLayout( 0, Qt::Horizontal ); + + TQGridLayout* grid = new TQGridLayout( gbox->layout(), 5, 3 ); + grid->setSpacing( KDialog::spacingHint() ); + + grid->setColStretch(1, 1); + + defaultFont = contextStyle.getDefaultFont(); + nameFont = contextStyle.getNameFont(); + numberFont = contextStyle.getNumberFont(); + operatorFont = contextStyle.getOperatorFont(); + + connect( buildFontLine( gbox, grid, 0, defaultFont, + i18n( "Default font:" ), defaultFontName ), + TQT_SIGNAL( clicked() ), TQT_SLOT( selectNewDefaultFont() ) ); + + connect( buildFontLine( gbox, grid, 1, nameFont, + i18n( "Name font:" ), nameFontName ), + TQT_SIGNAL( clicked() ), TQT_SLOT( selectNewNameFont() ) ); + + connect( buildFontLine( gbox, grid, 2, numberFont, + i18n( "Number font:" ), numberFontName ), + TQT_SIGNAL( clicked() ), TQT_SLOT( selectNewNumberFont() ) ); + + connect( buildFontLine( gbox, grid, 3, operatorFont, + i18n( "Operator font:" ), operatorFontName ), + TQT_SIGNAL( clicked() ), TQT_SLOT( selectNewOperatorFont() ) ); + + TQLabel* sizeTitle = new TQLabel( i18n( "Default base size:" ), gbox ); + grid->addWidget( sizeTitle, 4, 0 ); + + sizeSpin = new KIntNumInput( contextStyle.baseSize(), gbox ); + sizeSpin->setRange( 8, 72, 1, true ); + + grid->addMultiCellWidget( sizeSpin, 4, 4, 1, 2 ); + + connect( sizeSpin, TQT_SIGNAL( valueChanged( int ) ), + TQT_SLOT( baseSizeChanged( int ) ) ); + + // syntax highlighting + + syntaxHighlighting = new TQCheckBox( i18n( "Use syntax highlighting" ),box ); + syntaxHighlighting->setChecked( contextStyle.syntaxHighlighting() ); + +// hlBox = new TQGroupBox( i18n( "Highlight Colors" ), box ); +// hlBox->setColumnLayout( 0, Qt::Horizontal ); + +// grid = new TQGridLayout( hlBox->layout(), 5, 2 ); +// grid->setSpacing( KDialog::spacingHint() ); + +// TQLabel* defaultLabel = new TQLabel( hlBox, "defaultLabel" ); +// defaultLabel->setText( i18n( "Default color:" ) ); +// grid->addWidget( defaultLabel, 0, 0 ); + +// defaultColorBtn = new KColorButton( hlBox, "defaultColor" ); +// defaultColorBtn->setColor( contextStyle.getDefaultColor() ); +// grid->addWidget( defaultColorBtn, 0, 1 ); + + +// TQLabel* numberLabel = new TQLabel( hlBox, "numberLabel" ); +// numberLabel->setText( i18n( "Number color:" ) ); +// grid->addWidget( numberLabel, 1, 0 ); + +// numberColorBtn = new KColorButton( hlBox, "numberColor" ); +// numberColorBtn->setColor( contextStyle.getNumberColorPlain() ); +// grid->addWidget( numberColorBtn, 1, 1 ); + + +// TQLabel* operatorLabel = new TQLabel( hlBox, "operatorLabel" ); +// operatorLabel->setText( i18n( "Operator color:" ) ); +// grid->addWidget( operatorLabel, 2, 0 ); + +// operatorColorBtn = new KColorButton( hlBox, "operatorColor" ); +// operatorColorBtn->setColor( contextStyle.getOperatorColorPlain() ); +// grid->addWidget( operatorColorBtn, 2, 1 ); + + +// TQLabel* emptyLabel = new TQLabel( hlBox, "emptyLabel" ); +// emptyLabel->setText( i18n( "Empty color:" ) ); +// grid->addWidget( emptyLabel, 3, 0 ); + +// emptyColorBtn = new KColorButton( hlBox, "emptyColor" ); +// emptyColorBtn->setColor( contextStyle.getEmptyColorPlain() ); +// grid->addWidget( emptyColorBtn, 3, 1 ); + + +// TQLabel* errorLabel = new TQLabel( hlBox, "errorLabel" ); +// errorLabel->setText( i18n( "Error color:" ) ); +// grid->addWidget( errorLabel, 4, 0 ); + +// errorColorBtn = new KColorButton( hlBox, "errorColor" ); +// errorColorBtn->setColor( contextStyle.getErrorColorPlain() ); +// grid->addWidget( errorColorBtn, 4, 1 ); + + connect( syntaxHighlighting, TQT_SIGNAL( clicked() ), + TQT_SLOT( syntaxHighlightingClicked() ) ); + + syntaxHighlightingClicked(); + + connect( syntaxHighlighting, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotChanged() ) ); + connect( sizeSpin, TQT_SIGNAL( valueChanged( int ) ), this, TQT_SLOT( slotChanged() ) ); + + Q_ASSERT( !m_changed ); +} + + +TQPushButton* ConfigurePage::buildFontLine( TQWidget* parent, + TQGridLayout* layout, int number, TQFont font, TQString name, + TQLabel*& fontName ) +{ + TQLabel* fontTitle = new TQLabel( name, parent ); + + TQString labelName = font.family() + ' ' + TQString::number( font.pointSize() ); + fontName = new TQLabel( labelName, parent ); + fontName->setFont( font ); + fontName->setFrameStyle(TQFrame::StyledPanel | TQFrame::Sunken); + + TQPushButton* chooseButton = new TQPushButton( i18n( "Choose..." ), parent ); + + layout->addWidget( fontTitle, number, 0 ); + layout->addWidget( fontName, number, 1 ); + layout->addWidget( chooseButton, number, 2 ); + + return chooseButton; +} + + +void ConfigurePage::apply() +{ + if ( !m_changed ) + return; + + ContextStyle& contextStyle = m_document->getContextStyle( true ); + + contextStyle.setDefaultFont( defaultFont ); + contextStyle.setNameFont( nameFont ); + contextStyle.setNumberFont( numberFont ); + contextStyle.setOperatorFont( operatorFont ); + contextStyle.setBaseSize( sizeSpin->value() ); + + contextStyle.setSyntaxHighlighting( syntaxHighlighting->isChecked() ); +// contextStyle.setDefaultColor( defaultColorBtn->color() ); +// contextStyle.setNumberColor( numberColorBtn->color() ); +// contextStyle.setOperatorColor( operatorColorBtn->color() ); +// contextStyle.setEmptyColor( emptyColorBtn->color() ); +// contextStyle.setErrorColor( errorColorBtn->color() ); + + m_config->setGroup( "kformula Font" ); + m_config->writeEntry( "defaultFont", TQString(defaultFont.toString()) ); + m_config->writeEntry( "nameFont", TQString(nameFont.toString()) ); + m_config->writeEntry( "numberFont", TQString(numberFont.toString()) ); + m_config->writeEntry( "operatorFont", TQString(operatorFont.toString()) ); + m_config->writeEntry( "baseSize", TQString::number( sizeSpin->value() ) ); + +// m_config->setGroup( "kformula Color" ); +// m_config->writeEntry( "syntaxHighlighting", syntaxHighlighting->isChecked() ); +// m_config->writeEntry( "defaultColor", defaultColorBtn->color() ); +// m_config->writeEntry( "numberColor", numberColorBtn->color() ); +// m_config->writeEntry( "operatorColor", operatorColorBtn->color() ); +// m_config->writeEntry( "emptyColor", emptyColorBtn->color() ); +// m_config->writeEntry( "errorColor", errorColorBtn->color() ); + + // notify!!! + m_document->updateConfig(); + m_changed = false; +} + +void ConfigurePage::slotDefault() +{ + defaultFont = TQFont( "Times", 12, TQFont::Normal, true ); + nameFont = TQFont( "Times" ); + numberFont = nameFont; + operatorFont = nameFont; + + sizeSpin->setValue( 20 ); + + updateFontLabel( defaultFont, defaultFontName ); + updateFontLabel( nameFont, nameFontName ); + updateFontLabel( numberFont, numberFontName ); + updateFontLabel( operatorFont, operatorFontName ); + + syntaxHighlighting->setChecked( true ); + syntaxHighlightingClicked(); + +// defaultColorBtn->setColor( TQt::black ); +// numberColorBtn->setColor( TQt::blue ); +// operatorColorBtn->setColor( TQt::darkGreen ); +// emptyColorBtn->setColor( TQt::blue ); +// errorColorBtn->setColor( TQt::darkRed ); + slotChanged(); +} + +void ConfigurePage::syntaxHighlightingClicked() +{ +// bool checked = syntaxHighlighting->isChecked(); +// hlBox->setEnabled( checked ); +} + +void ConfigurePage::selectNewDefaultFont() +{ + if ( selectFont( defaultFont ) ) + updateFontLabel( defaultFont, defaultFontName ); +} + +void ConfigurePage::selectNewNameFont() +{ + if ( selectFont( nameFont ) ) + updateFontLabel( nameFont, nameFontName ); +} + +void ConfigurePage::selectNewNumberFont() +{ + if ( selectFont( numberFont ) ) + updateFontLabel( numberFont, numberFontName ); +} + +void ConfigurePage::selectNewOperatorFont() +{ + if ( selectFont( operatorFont ) ) + updateFontLabel( operatorFont, operatorFontName ); +} + +bool ConfigurePage::selectFont( TQFont & font ) +{ + TQStringList list; + + TDEFontChooser::getFontList( list, TDEFontChooser::SmoothScalableFonts ); + + TDEFontDialog dlg( m_view, 0, false, true, list ); + dlg.setFont( font ); + + int result = dlg.exec(); + if ( KDialog::Accepted == result ) { + font = dlg.font(); + slotChanged(); + return true; + } + + return false; +} + +void ConfigurePage::baseSizeChanged( int /*value*/ ) +{ +} + +void ConfigurePage::updateFontLabel( TQFont font, TQLabel* label ) +{ + label->setText( font.family() + ' ' + TQString::number( font.pointSize() ) ); + label->setFont( font ); +} + +void ConfigurePage::slotChanged() +{ + m_changed = true; +} + +// class UsedFontItem : public TDEListViewItem { +// public: +// UsedFontItem( MathFontsConfigurePage* page, TQListView* parent, TQString font ) +// : TDEListViewItem( parent, font ), m_page( page ) {} + +// int compare( TQListViewItem* i, int col, bool ascending ) const; + +// private: +// MathFontsConfigurePage* m_page; +// }; + +// int UsedFontItem::compare( TQListViewItem* i, int, bool ) const +// { +// TQValueVector<TQString>::iterator lhsIt = m_page->findUsedFont( text( 0 ) ); +// TQValueVector<TQString>::iterator rhsIt = m_page->findUsedFont( i->text( 0 ) ); +// if ( lhsIt < rhsIt ) { +// return -1; +// } +// else if ( lhsIt > rhsIt ) { +// return 1; +// } +// return 0; +// } + +// MathFontsConfigurePage::MathFontsConfigurePage( Document* document, TQWidget* view, +// TDEConfig* config, TQVBox* box, char* name ) +// : TQObject( box->parent(), name ), m_document( document ), m_view( view ), m_config( config ) +// { +// TQWidget* fontWidget = new TQWidget( box ); +// TQGridLayout* fontLayout = new TQGridLayout( fontWidget, 1, 1, KDialog::marginHint(), KDialog::spacingHint() ); + +// TQHBoxLayout* hLayout = new TQHBoxLayout( 0, 0, 6 ); + +// availableFonts = new TDEListView( fontWidget ); +// availableFonts->addColumn( i18n( "Available Fonts" ) ); +// hLayout->addWidget( availableFonts ); + +// TQVBoxLayout* vLayout = new TQVBoxLayout( 0, 0, 6 ); +// TQSpacerItem* spacer1 = new TQSpacerItem( 20, 20, TQSizePolicy::Minimum, TQSizePolicy::Expanding ); +// vLayout->addItem( spacer1 ); + +// addFont = new KPushButton( fontWidget ); +// addFont->setText( "->" ); +// vLayout->addWidget( addFont ); + +// removeFont = new KPushButton( fontWidget ); +// removeFont->setText( "<-" ); +// vLayout->addWidget( removeFont ); + +// TQSpacerItem* spacer2 = new TQSpacerItem( 20, 20, TQSizePolicy::Minimum, TQSizePolicy::Expanding ); +// vLayout->addItem( spacer2 ); + +// hLayout->addLayout( vLayout ); + +// vLayout = new TQVBoxLayout( 0, 0, 6 ); + +// moveUp = new KPushButton( fontWidget ); +// moveUp->setText( i18n( "Up" ) ); +// vLayout->addWidget( moveUp ); + +// requestedFonts = new TDEListView( fontWidget ); +// requestedFonts->addColumn( i18n( "Used Fonts" ) ); +// vLayout->addWidget( requestedFonts ); + +// moveDown = new KPushButton( fontWidget ); +// moveDown->setText( i18n( "Down" ) ); +// vLayout->addWidget( moveDown ); + +// hLayout->addLayout( vLayout ); + +// fontLayout->addLayout( hLayout, 0, 0 ); + +// // connect( availableFonts, TQT_SIGNAL( executed( TQListViewItem* ) ), +// // this, TQT_SLOT( slotAddFont() ) ); +// // connect( requestedFonts, TQT_SIGNAL( executed( TQListViewItem* ) ), +// // this, TQT_SLOT( slotRemoveFont() ) ); +// connect( addFont, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotAddFont() ) ); +// connect( removeFont, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotRemoveFont() ) ); +// connect( moveUp, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotMoveUp() ) ); +// connect( moveDown, TQT_SIGNAL( clicked() ), this, TQT_SLOT( slotMoveDown() ) ); + +// const ContextStyle& contextStyle = document->getContextStyle( true ); +// const SymbolTable& symbolTable = contextStyle.symbolTable(); +// const TQStringList& usedFonts = contextStyle.requestedFonts(); + +// TQMap<TQString, TQString> fontMap; +// // symbolTable.findAvailableFonts( &fontMap ); + +// setupLists( usedFonts ); +// } + +// void MathFontsConfigurePage::apply() +// { +// TQStringList strings; +// std::copy( usedFontList.begin(), usedFontList.end(), std::back_inserter( strings ) ); + +// m_config->setGroup( "kformula Font" ); +// m_config->writeEntry( "usedMathFonts", strings ); + +// ContextStyle& contextStyle = m_document->getContextStyle( true ); +// contextStyle.setRequestedFonts( strings ); +// } + +// void MathFontsConfigurePage::slotDefault() +// { +// TQStringList usedFonts; + +// usedFonts.push_back( "esstixone" ); +// usedFonts.push_back( "esstixtwo" ); +// usedFonts.push_back( "esstixthree" ); +// usedFonts.push_back( "esstixfour" ); +// usedFonts.push_back( "esstixfive" ); +// usedFonts.push_back( "esstixsix" ); +// usedFonts.push_back( "esstixseven" ); +// usedFonts.push_back( "esstixeight" ); +// usedFonts.push_back( "esstixnine" ); +// usedFonts.push_back( "esstixten" ); +// usedFonts.push_back( "esstixeleven" ); +// usedFonts.push_back( "esstixtwelve" ); +// usedFonts.push_back( "esstixthirteen" ); +// usedFonts.push_back( "esstixfourteen" ); +// usedFonts.push_back( "esstixfifteen" ); +// usedFonts.push_back( "esstixsixteen" ); +// usedFonts.push_back( "esstixseventeen" ); + +// usedFontList.clear(); +// requestedFonts->clear(); +// availableFonts->clear(); + +// setupLists( usedFonts ); +// } + +// TQValueVector<TQString>::iterator MathFontsConfigurePage::findUsedFont( TQString name ) +// { +// return std::find( usedFontList.begin(), usedFontList.end(), name ); +// } + +// void MathFontsConfigurePage::setupLists( const TQStringList& usedFonts ) +// { +// const ContextStyle& contextStyle = m_document->getContextStyle( true ); +// const SymbolTable& symbolTable = contextStyle.symbolTable(); + +// TQMap<TQString, TQString> fontMap; +// // symbolTable.findAvailableFonts( &fontMap ); + +// for ( TQStringList::const_iterator it = usedFonts.begin(); it != usedFonts.end(); ++it ) { +// TQMap<TQString, TQString>::iterator font = fontMap.find( *it ); +// if ( font != fontMap.end() ) { +// fontMap.erase( font ); +// new UsedFontItem( this, requestedFonts, *it ); +// usedFontList.push_back( *it ); +// } +// } +// for ( TQMap<TQString, TQString>::iterator it = fontMap.begin(); it != fontMap.end(); ++it ) { +// new TDEListViewItem( availableFonts, it.key() ); +// } +// } + +// void MathFontsConfigurePage::slotAddFont() +// { +// TQListViewItem* fontItem = availableFonts->selectedItem(); +// if ( fontItem ) { +// TQString fontName = fontItem->text( 0 ); +// //availableFonts->takeItem( fontItem ); +// delete fontItem; + +// new UsedFontItem( this, requestedFonts, fontName ); +// usedFontList.push_back( fontName ); +// } +// } + +// void MathFontsConfigurePage::slotRemoveFont() +// { +// TQListViewItem* fontItem = requestedFonts->selectedItem(); +// if ( fontItem ) { +// TQString fontName = fontItem->text( 0 ); +// TQValueVector<TQString>::iterator it = std::find( usedFontList.begin(), usedFontList.end(), fontName ); +// if ( it != usedFontList.end() ) { +// usedFontList.erase( it ); +// } +// //requestedFonts->takeItem( fontItem ); +// delete fontItem; +// new TDEListViewItem( availableFonts, fontName ); +// } +// } + +// void MathFontsConfigurePage::slotMoveUp() +// { +// TQListViewItem* fontItem = requestedFonts->selectedItem(); +// if ( fontItem ) { +// TQString fontName = fontItem->text( 0 ); +// TQValueVector<TQString>::iterator it = std::find( usedFontList.begin(), usedFontList.end(), fontName ); +// if ( it != usedFontList.end() ) { +// uint pos = it - usedFontList.begin(); +// if ( pos > 0 ) { +// TQValueVector<TQString>::iterator before = it-1; +// std::swap( *it, *before ); +// requestedFonts->sort(); +// } +// } +// } +// } + +// void MathFontsConfigurePage::slotMoveDown() +// { +// TQListViewItem* fontItem = requestedFonts->selectedItem(); +// if ( fontItem ) { +// TQString fontName = fontItem->text( 0 ); +// TQValueVector<TQString>::iterator it = std::find( usedFontList.begin(), usedFontList.end(), fontName ); +// if ( it != usedFontList.end() ) { +// uint pos = it - usedFontList.begin(); +// if ( pos < usedFontList.size()-1 ) { +// TQValueVector<TQString>::iterator after = it+1; +// std::swap( *it, *after ); +// requestedFonts->sort(); +// } +// } +// } +// } + +KFORMULA_NAMESPACE_END + +using namespace KFormula; +#include "kformulaconfigpage.moc" |