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/kformula/kformula_view.cpp

285 lines
10 KiB

/* 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.
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.
*/
class KPrinter;
#include <tqpainter.h>
#include <tqpopupmenu.h>
#include <tqtextedit.h>
#include <tqtimer.h>
#include <tdeaction.h>
#include <kdebug.h>
#include <kiconloader.h>
#include <tdelocale.h>
#include <kstdaction.h>
#include <ktip.h>
//#include <tdeglobal.h>
#include <kformulacontainer.h>
#include <kformuladocument.h>
#include "formulastring.h"
#include "fsparser.h"
#include "kfconfig.h"
#include "kformula_doc.h"
#include "kformula_factory.h"
#include "kformula_view.h"
#include "kformula_view_iface.h"
#include "kformulawidget.h"
bool KFormulaPartView::first_window = true;
KFormulaPartView::KFormulaPartView(KFormulaDoc* _doc, TQWidget* _parent, const char* _name)
: KoView( _doc, _parent, _name ), m_pDoc(_doc)
{
setInstance(KFormulaFactory::global());
if ( !_doc->isReadWrite() )
setXMLFile("kformula_readonly.rc");
else
setXMLFile("kformula.rc");
m_dcop = 0;
dcopObject(); // build it
scrollview = new TQScrollView(this, "scrollview");
formulaWidget = new KFormulaWidget(_doc->getFormula(), scrollview->viewport(), "formulaWidget");
scrollview->addChild(formulaWidget);
scrollview->viewport()->setFocusProxy( scrollview );
scrollview->viewport()->setFocusPolicy( TQ_WheelFocus );
scrollview->setFocusPolicy( TQ_NoFocus );
formulaWidget->setFocus();
// Nice parts start in read only mode.
formulaWidget->setReadOnly(true);
KFormula::Container* formula = m_pDoc->getFormula();
KFormula::Document* document = m_pDoc->getDocument();
// copy&paste
cutAction = KStdAction::cut(document->wrapper(), TQT_SLOT(cut()), actionCollection());
copyAction = KStdAction::copy(document->wrapper(), TQT_SLOT(copy()), actionCollection());
pasteAction = KStdAction::paste(document->wrapper(), TQT_SLOT(paste()), actionCollection());
cutAction->setEnabled(false);
copyAction->setEnabled(false);
// tip of the day
KStdAction::tipOfDay( TQT_TQOBJECT(this), TQT_SLOT( slotShowTip() ), actionCollection() );
// elements
addBracketAction = document->wrapper()->getAddBracketAction();
addFractionAction = document->wrapper()->getAddFractionAction();
addRootAction = document->wrapper()->getAddRootAction();
addSumAction = document->wrapper()->getAddSumAction();
addProductAction = document->wrapper()->getAddProductAction();
addIntegralAction = document->wrapper()->getAddIntegralAction();
addMatrixAction = document->wrapper()->getAddMatrixAction();
addUpperLeftAction = document->wrapper()->getAddUpperLeftAction();
addLowerLeftAction = document->wrapper()->getAddLowerLeftAction();
addUpperRightAction = document->wrapper()->getAddUpperRightAction();
addLowerRightAction = document->wrapper()->getAddLowerRightAction();
addGenericUpperAction = document->wrapper()->getAddGenericUpperAction();
addGenericLowerAction = document->wrapper()->getAddGenericLowerAction();
removeEnclosingAction = document->wrapper()->getRemoveEnclosingAction();
(void) KStdAction::selectAll(TQT_TQOBJECT(formulaWidget), TQT_SLOT(slotSelectAll()), actionCollection());
//------------------------ Settings menu
KStdAction::preferences( TQT_TQOBJECT(this), TQT_SLOT(configure()), actionCollection(), "configure" );
// font stuff
// TDEFontAction* actionElement_Text_Font = new TDEFontAction(i18n( "Font Family" ),0,
// actionCollection(),"textfont");
// connect( actionElement_Text_Font, TQT_SIGNAL( activated( const TQString& ) ), TQT_TQOBJECT(this), TQT_SLOT( fontSelected( const TQString& ) ) );
TDEFontSizeAction* actionTextSize = new TDEFontSizeAction(i18n( "Size" ),0,
actionCollection(),"formula_textsize");
actionTextSize->setFontSize( m_pDoc->getFormula()->fontSize() );
connect( actionTextSize, TQT_SIGNAL( fontSizeChanged( int ) ), TQT_TQOBJECT(this), TQT_SLOT( sizeSelected( int ) ) );
connect( formula, TQT_SIGNAL( baseSizeChanged( int ) ), actionTextSize, TQT_SLOT( setFontSize( int ) ) );
// TDEToggleAction* actionElement_Text_Bold = new TDEToggleAction(i18n( "Bold" ),
// "bold",
// 0,
// actionCollection(),"textbold");
// connect( actionElement_Text_Bold, TQT_SIGNAL( toggled( bool ) ), TQT_TQOBJECT(this), TQT_SLOT( bold( bool ) ) );
// TDEToggleAction* actionElement_Text_Italic = new TDEToggleAction(i18n( "Italic" ),
// "italic",
// 0,
// actionCollection(),"textitalic");
// connect( actionElement_Text_Italic, TQT_SIGNAL( toggled( bool ) ), TQT_TQOBJECT(this), TQT_SLOT( italic( bool ) ) );
// TDEToggleAction* actionElement_Text_Under = new TDEToggleAction(i18n( "Underlined" ),
// "underl",
// 0,
// actionCollection(),"textunder");
// connect(actionElement_Text_Under, TQT_SIGNAL( toggled( bool ) ), TQT_TQOBJECT(this), TQT_SLOT( underline( bool ) ) );
formulaStringAction = new TDEAction( i18n( "Edit Formula String..." ),
0,
TQT_TQOBJECT(this), TQT_SLOT( formulaString() ),
actionCollection(), "formula_formulastring" );
// notify on cursor change
connect(formulaWidget, TQT_SIGNAL(cursorChanged(bool, bool)),
TQT_TQOBJECT(this), TQT_SLOT(cursorChanged(bool, bool)));
connect( formula, TQT_SIGNAL( statusMsg( const TQString& ) ),
TQT_TQOBJECT(this), TQT_SLOT( slotActionStatusText( const TQString& ) ) );
if ( !_doc->isEmbedded() && first_window ) {
TQTimer::singleShot( 200, TQT_TQOBJECT(this), TQT_SLOT(slotShowTipOnStart()) );
first_window = false;
}
}
KFormulaPartView::~KFormulaPartView()
{
delete m_dcop;
}
DCOPObject* KFormulaPartView::dcopObject()
{
if ( !m_dcop )
m_dcop = new KformulaViewIface( this );
return m_dcop;
}
void KFormulaPartView::focusInEvent(TQFocusEvent*)
{
formulaWidget->setFocus();
}
void KFormulaPartView::updateReadWrite(bool readwrite)
{
formulaWidget->setReadOnly(!readwrite);
setEnabled(readwrite);
}
void KFormulaPartView::slotShowTipOnStart() {
KTipDialog::showTip( this );
}
void KFormulaPartView::slotShowTip() {
KTipDialog::showTip( this, TQString(), true );
}
void KFormulaPartView::setEnabled(bool enabled)
{
addBracketAction->setEnabled(enabled);
addFractionAction->setEnabled(enabled);
addRootAction->setEnabled(enabled);
addSumAction->setEnabled(enabled);
addIntegralAction->setEnabled(enabled);
addMatrixAction->setEnabled(enabled);
addUpperLeftAction->setEnabled(enabled);
addLowerLeftAction->setEnabled(enabled);
addUpperRightAction->setEnabled(enabled);
addLowerRightAction->setEnabled(enabled);
addGenericUpperAction->setEnabled(enabled);
addGenericLowerAction->setEnabled(enabled);
removeEnclosingAction->setEnabled(enabled);
}
void KFormulaPartView::resizeEvent( TQResizeEvent * )
{
scrollview->setGeometry(0, 0, width(), height());
}
void KFormulaPartView::setupPrinter(KPrinter&)
{
}
void KFormulaPartView::print(KPrinter& printer)
{
m_pDoc->getFormula()->print(printer);
}
const KFormula::View* KFormulaPartView::formulaView() const { return formulaWidget->view(); }
KFormula::View* KFormulaPartView::formulaView() { return formulaWidget->view(); }
void KFormulaPartView::cursorChanged(bool visible, bool selecting)
{
cutAction->setEnabled(visible && selecting);
copyAction->setEnabled(visible && selecting);
removeEnclosingAction->setEnabled(!selecting);
if (visible) {
int x = formulaWidget->getCursorPoint().x();
int y = formulaWidget->getCursorPoint().y();
scrollview->ensureVisible(x, y);
}
KFormula::Document* doc = document()->getDocument();
doc->wrapper()->getFormatBoldAction()->setEnabled( selecting );
doc->wrapper()->getFormatItalicAction()->setEnabled( selecting );
doc->wrapper()->getFontFamilyAction()->setEnabled( selecting );
if ( !selecting ) {
doc->wrapper()->getFormatBoldAction()->setChecked( false );
doc->wrapper()->getFormatItalicAction()->setChecked( false );
doc->wrapper()->getFontFamilyAction()->setCurrentItem( 0 );
}
}
void KFormulaPartView::formulaString()
{
FormulaString dia( this );
dia.textWidget->setText( document()->getFormula()->formulaString() );
if ( dia.exec() ) {
// How lovely.
}
}
void KFormulaPartView::sizeSelected( int size )
{
document()->getFormula()->setFontSize( size );
formulaWidget->setFocus();
}
TQStringList KFormulaPartView::readFormulaString( TQString text )
{
FormulaStringParser parser( document()->getDocument()->getSymbolTable(), text );
TQDomDocument formula = parser.parse();
TQStringList errorList = parser.errorList();
//if ( errorList.count() == 0 ) {
formulaView()->slotSelectAll();
document()->getFormula()->paste( formula, i18n( "Read Formula String" ) );
//}
return errorList;
}
void KFormulaPartView::configure()
{
KFConfig configDia( this );
configDia.exec();
}
#include "kformula_view.moc"