summaryrefslogtreecommitdiffstats
path: root/kformula/kformula_view.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kformula/kformula_view.cpp')
-rw-r--r--kformula/kformula_view.cpp284
1 files changed, 284 insertions, 0 deletions
diff --git a/kformula/kformula_view.cpp b/kformula/kformula_view.cpp
new file mode 100644
index 00000000..2d93ce5d
--- /dev/null
+++ b/kformula/kformula_view.cpp
@@ -0,0 +1,284 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001 Andrea Rizzi <[email protected]>
+ Ulrich Kuettler <[email protected]>
+
+ 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"