2000-09-18 16:07:07 +00:00
|
|
|
|
/*************************************************************************
|
|
|
|
|
*
|
2008-04-10 11:42:40 +00:00
|
|
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2008-04-10 11:42:40 +00:00
|
|
|
|
* Copyright 2008 by Sun Microsystems, Inc.
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2008-04-10 11:42:40 +00:00
|
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2008-04-10 11:42:40 +00:00
|
|
|
|
* $RCSfile: document.cxx,v $
|
2008-12-12 12:52:51 +00:00
|
|
|
|
* $Revision: 1.94.26.1 $
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2008-04-10 11:42:40 +00:00
|
|
|
|
* This file is part of OpenOffice.org.
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2008-04-10 11:42:40 +00:00
|
|
|
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
|
|
|
* it under the terms of the GNU Lesser General Public License version 3
|
|
|
|
|
* only, as published by the Free Software Foundation.
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2008-04-10 11:42:40 +00:00
|
|
|
|
* OpenOffice.org 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 Lesser General Public License version 3 for more details
|
|
|
|
|
* (a copy is included in the LICENSE file that accompanied this code).
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2008-04-10 11:42:40 +00:00
|
|
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
|
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
|
|
|
* <http://www.openoffice.org/license.html>
|
|
|
|
|
* for a copy of the LGPLv3 License.
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
|
|
|
|
************************************************************************/
|
|
|
|
|
|
2006-09-17 06:52:24 +00:00
|
|
|
|
// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
|
|
|
#include "precompiled_starmath.hxx"
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2003-04-24 16:29:42 +00:00
|
|
|
|
#include <com/sun/star/accessibility/AccessibleEventId.hpp>
|
2004-11-26 13:23:53 +00:00
|
|
|
|
#include <rtl/logfile.hxx>
|
2002-05-31 13:23:22 +00:00
|
|
|
|
#include <rtl/ustring.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#include <ucbhelper/content.hxx>
|
|
|
|
|
#include <sot/formats.hxx>
|
2004-10-04 17:03:04 +00:00
|
|
|
|
#include <sot/storage.hxx>
|
2001-11-21 10:59:49 +00:00
|
|
|
|
#include <svtools/linguprops.hxx>
|
|
|
|
|
#include <svtools/lingucfg.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#include <svtools/smplhint.hxx>
|
2000-11-13 10:11:47 +00:00
|
|
|
|
#include <svtools/pathoptions.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#ifndef _SO_CLSIDS_HXX //autogen
|
2004-10-04 17:03:04 +00:00
|
|
|
|
#include <sot/clsids.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#endif
|
|
|
|
|
#include <sot/exchange.hxx>
|
|
|
|
|
#include <vcl/msgbox.hxx>
|
2001-03-23 07:00:39 +00:00
|
|
|
|
|
|
|
|
|
#include <vcl/mapunit.hxx>
|
|
|
|
|
#include <vcl/mapmod.hxx>
|
2004-10-04 17:03:04 +00:00
|
|
|
|
#include <comphelper/storagehelper.hxx>
|
|
|
|
|
#include <comphelper/processfactory.hxx>
|
2003-05-22 12:50:09 +00:00
|
|
|
|
#include <comphelper/accessibletexthelper.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#include <svtools/eitem.hxx>
|
|
|
|
|
#include <svtools/whiter.hxx>
|
|
|
|
|
#include <svtools/intitem.hxx>
|
|
|
|
|
#include <svtools/stritem.hxx>
|
|
|
|
|
#include <svtools/ptitem.hxx>
|
|
|
|
|
#include <svtools/undo.hxx>
|
|
|
|
|
#include <svtools/itempool.hxx>
|
|
|
|
|
#include <svtools/urihelper.hxx>
|
2000-11-08 13:49:23 +00:00
|
|
|
|
#include <svtools/fstathelper.hxx>
|
2001-05-11 12:01:35 +00:00
|
|
|
|
#include <svtools/transfer.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#include <sfx2/dispatch.hxx>
|
|
|
|
|
#include <sfx2/docfile.hxx>
|
|
|
|
|
#include <sfx2/app.hxx>
|
|
|
|
|
#include <sfx2/request.hxx>
|
2001-10-12 14:57:24 +00:00
|
|
|
|
#include <sfx2/viewfrm.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#include <svtools/sfxecode.hxx>
|
|
|
|
|
#include <sfx2/printer.hxx>
|
|
|
|
|
#include <sfx2/docfilt.hxx>
|
2001-03-08 08:24:49 +00:00
|
|
|
|
#include <svtools/itempool.hxx>
|
|
|
|
|
#include <svx/editeng.hxx>
|
|
|
|
|
#include <svx/eeitem.hxx>
|
|
|
|
|
#include <svx/editstat.hxx>
|
|
|
|
|
#include <svx/fontitem.hxx>
|
|
|
|
|
#include <svx/fhgtitem.hxx>
|
2001-11-21 10:59:49 +00:00
|
|
|
|
#include <svx/unolingu.hxx>
|
2001-10-12 14:57:24 +00:00
|
|
|
|
#include <svtools/slstitm.hxx>
|
2001-11-21 10:59:49 +00:00
|
|
|
|
#include <com/sun/star/uno/Any.h>
|
|
|
|
|
#include <com/sun/star/lang/Locale.hpp>
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#ifndef STARMATH_HRC
|
|
|
|
|
#include <starmath.hrc>
|
|
|
|
|
#endif
|
|
|
|
|
#include <document.hxx>
|
|
|
|
|
#include <unomodel.hxx>
|
|
|
|
|
#include <config.hxx>
|
|
|
|
|
#include <symbol.hxx>
|
|
|
|
|
#include <toolbox.hxx>
|
|
|
|
|
#include <dialog.hxx>
|
|
|
|
|
#include <action.hxx>
|
|
|
|
|
#include <view.hxx>
|
2001-03-23 07:00:39 +00:00
|
|
|
|
#include <utility.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#include <format.hxx>
|
|
|
|
|
#include <mathtype.hxx>
|
2000-11-15 09:47:20 +00:00
|
|
|
|
#include <mathml.hxx>
|
|
|
|
|
|
2003-09-19 07:52:18 +00:00
|
|
|
|
#include <smdll.hxx>
|
|
|
|
|
|
|
|
|
|
#include <sfx2/fcontnr.hxx>
|
2004-10-04 17:03:04 +00:00
|
|
|
|
#include <sfx2/msg.hxx>
|
|
|
|
|
#include <sfx2/objface.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
using namespace ::com::sun::star;
|
2001-11-21 10:59:49 +00:00
|
|
|
|
using namespace ::com::sun::star::lang;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
using namespace ::com::sun::star::ucb;
|
|
|
|
|
using namespace ::com::sun::star::uno;
|
2003-04-24 16:29:42 +00:00
|
|
|
|
using namespace ::com::sun::star::accessibility;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2001-11-21 10:59:49 +00:00
|
|
|
|
#define A2OU(x) rtl::OUString::createFromAscii( x )
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#define DOCUMENT_BUFFER_SIZE (USHORT)32768
|
|
|
|
|
|
|
|
|
|
static const char __FAR_DATA pStarMathDoc[] = "StarMathDocument";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**************************************************************************/
|
|
|
|
|
/*
|
|
|
|
|
**
|
|
|
|
|
** CLASS IMPLEMENTATION
|
|
|
|
|
**
|
|
|
|
|
**/
|
|
|
|
|
|
|
|
|
|
#define SmDocShell
|
|
|
|
|
#include "smslots.hxx"
|
|
|
|
|
|
|
|
|
|
TYPEINIT1( SmDocShell, SfxObjectShell );
|
|
|
|
|
|
|
|
|
|
SFX_IMPL_INTERFACE(SmDocShell, SfxObjectShell, SmResId(0))
|
|
|
|
|
{
|
|
|
|
|
SFX_POPUPMENU_REGISTRATION(SmResId(RID_VIEWMENU));
|
|
|
|
|
SFX_POPUPMENU_REGISTRATION(SmResId(RID_COMMANDMENU));
|
|
|
|
|
}
|
|
|
|
|
|
2004-10-04 17:03:04 +00:00
|
|
|
|
SFX_IMPL_OBJECTFACTORY(SmDocShell, SvGlobalName(SO3_SM_CLASSID), SFXOBJECTSHELL_STD_NORMAL, "smath" )
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
void SmDocShell::SFX_NOTIFY(SfxBroadcaster&, const TypeId&,
|
|
|
|
|
const SfxHint& rHint, const TypeId&)
|
|
|
|
|
{
|
|
|
|
|
switch (((SfxSimpleHint&)rHint).GetId())
|
|
|
|
|
{
|
|
|
|
|
case HINT_FORMATCHANGED:
|
|
|
|
|
SetFormulaArranged(FALSE);
|
2005-02-16 16:58:16 +00:00
|
|
|
|
nModifyCount++; //! merkwuerdig...
|
2000-09-18 16:07:07 +00:00
|
|
|
|
// ohne dies wird die Grafik letztlich
|
|
|
|
|
// nicht geupdatet
|
2004-11-15 15:42:35 +00:00
|
|
|
|
Repaint();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmDocShell::LoadSymbols()
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::LoadSymbols" );
|
|
|
|
|
|
2005-10-05 14:00:27 +00:00
|
|
|
|
SmModule *pp = SM_MOD1();
|
|
|
|
|
pp->GetSymSetManager().Load();
|
2001-04-19 13:47:39 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2008-02-26 13:43:56 +00:00
|
|
|
|
const String SmDocShell::GetComment() const
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::GetComment" );
|
2008-02-26 13:43:56 +00:00
|
|
|
|
uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
|
|
|
|
|
const_cast<SmDocShell*>(this)->GetModel(), uno::UNO_QUERY_THROW);
|
|
|
|
|
uno::Reference<document::XDocumentProperties> xDocProps(
|
|
|
|
|
xDPS->getDocumentProperties());
|
|
|
|
|
return xDocProps->getDescription();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void SmDocShell::SetText(const String& rBuffer)
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::SetText" );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
if (rBuffer != aText)
|
|
|
|
|
{
|
2002-01-30 10:47:52 +00:00
|
|
|
|
BOOL bIsEnabled = IsEnableSetModified();
|
|
|
|
|
if( bIsEnabled )
|
|
|
|
|
EnableSetModified( FALSE );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
aText = rBuffer;
|
2005-04-04 07:04:42 +00:00
|
|
|
|
SetFormulaArranged( FALSE );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
Parse();
|
2004-11-15 15:42:35 +00:00
|
|
|
|
//Repaint();
|
2005-04-04 07:04:42 +00:00
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
SmViewShell *pViewSh = SmGetActiveView();
|
2002-01-30 10:47:52 +00:00
|
|
|
|
if( pViewSh )
|
2002-11-20 07:54:41 +00:00
|
|
|
|
{
|
2000-09-18 16:07:07 +00:00
|
|
|
|
pViewSh->GetViewFrame()->GetBindings().Invalidate(SID_TEXT);
|
2004-10-04 17:03:04 +00:00
|
|
|
|
if ( SFX_CREATE_MODE_EMBEDDED == GetCreateMode() )
|
2004-11-15 15:42:35 +00:00
|
|
|
|
Repaint();
|
2002-11-20 07:54:41 +00:00
|
|
|
|
else
|
|
|
|
|
pViewSh->GetGraphicWindow().Invalidate();
|
|
|
|
|
}
|
2002-01-30 10:47:52 +00:00
|
|
|
|
|
|
|
|
|
if ( bIsEnabled )
|
|
|
|
|
EnableSetModified( bIsEnabled );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
SetModified(TRUE);
|
2002-05-31 13:23:22 +00:00
|
|
|
|
|
|
|
|
|
// launch accessible event if necessary
|
2007-05-25 11:12:32 +00:00
|
|
|
|
SmGraphicAccessible *pAcc = pViewSh ? pViewSh->GetGraphicWindow().GetAccessible_Impl() : 0;
|
2002-05-31 13:23:22 +00:00
|
|
|
|
if (pAcc)
|
|
|
|
|
{
|
2003-05-22 12:50:09 +00:00
|
|
|
|
Any aOldValue, aNewValue;
|
|
|
|
|
if ( comphelper::OCommonAccessibleText::implInitTextChangedEvent( aText, rBuffer, aOldValue, aNewValue ) )
|
|
|
|
|
{
|
|
|
|
|
pAcc->LaunchEvent( AccessibleEventId::TEXT_CHANGED,
|
|
|
|
|
aOldValue, aNewValue );
|
|
|
|
|
}
|
2002-05-31 13:23:22 +00:00
|
|
|
|
}
|
2005-01-31 07:29:25 +00:00
|
|
|
|
|
|
|
|
|
if ( GetCreateMode() == SFX_CREATE_MODE_EMBEDDED )
|
|
|
|
|
OnDocumentPrinterChanged(0);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmDocShell::SetFormat(SmFormat& rFormat)
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::SetFormat" );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
aFormat = rFormat;
|
|
|
|
|
SetFormulaArranged(FALSE);
|
|
|
|
|
SmViewShell *pViewSh = SmGetActiveView();
|
|
|
|
|
if (pViewSh)
|
2004-03-17 08:50:33 +00:00
|
|
|
|
pViewSh->GetViewFrame()->GetBindings().Invalidate(SID_GAPHIC_SM);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
SetModified(TRUE);
|
|
|
|
|
}
|
|
|
|
|
|
2002-05-24 06:48:49 +00:00
|
|
|
|
String SmDocShell::GetAccessibleText()
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::GetAccessibleText" );
|
|
|
|
|
|
2002-05-31 13:23:22 +00:00
|
|
|
|
if (!IsFormulaArranged())
|
|
|
|
|
ArrangeFormula();
|
|
|
|
|
if (0 == aAccText.Len())
|
|
|
|
|
{
|
|
|
|
|
DBG_ASSERT( pTree, "Tree missing" );
|
|
|
|
|
if (pTree)
|
|
|
|
|
pTree->GetAccessibleText( aAccText );
|
|
|
|
|
}
|
|
|
|
|
return aAccText;
|
2002-05-24 06:48:49 +00:00
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
void SmDocShell::Parse()
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::Parse" );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
if (pTree)
|
|
|
|
|
delete pTree;
|
2007-06-27 11:39:58 +00:00
|
|
|
|
ReplaceBadChars();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
pTree = aInterpreter.Parse(aText);
|
|
|
|
|
nModifyCount++;
|
2002-03-21 09:13:38 +00:00
|
|
|
|
SetFormulaArranged( FALSE );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void SmDocShell::ArrangeFormula()
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::ArrangeFormula" );
|
|
|
|
|
|
2005-04-04 07:04:42 +00:00
|
|
|
|
if (IsFormulaArranged())
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
//! Nur f<>r die Dauer der Existenz dieses Objekts sind am Drucker die
|
2000-09-18 16:07:07 +00:00
|
|
|
|
//! richtigen Einstellungen garantiert.
|
|
|
|
|
SmPrinterAccess aPrtAcc(*this);
|
2003-04-01 08:45:05 +00:00
|
|
|
|
// OutputDevice *pOutDev = aPrtAcc.GetPrinter();
|
|
|
|
|
OutputDevice* pOutDev = aPrtAcc.GetRefDev();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
if (!pOutDev)
|
2007-05-25 11:12:32 +00:00
|
|
|
|
{
|
|
|
|
|
#if OSL_DEBUG_LEVEL > 1
|
2005-04-04 07:04:42 +00:00
|
|
|
|
DBG_ERROR("!! SmDocShell::ArrangeFormula: reference device missing !!");
|
2007-05-25 11:12:32 +00:00
|
|
|
|
#endif
|
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2006-05-05 07:01:07 +00:00
|
|
|
|
// falls n<>tig ein anderes OutputDevice holen f<>r das formatiert wird
|
2000-09-18 16:07:07 +00:00
|
|
|
|
if (!pOutDev)
|
|
|
|
|
{
|
|
|
|
|
SmViewShell *pView = SmGetActiveView();
|
|
|
|
|
if (pView)
|
|
|
|
|
pOutDev = &pView->GetGraphicWindow();
|
|
|
|
|
else
|
2005-04-04 07:04:42 +00:00
|
|
|
|
{
|
|
|
|
|
pOutDev = &SM_MOD1()->GetDefaultVirtualDev();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
pOutDev->SetMapMode( MapMode(MAP_100TH_MM) );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
DBG_ASSERT(pOutDev->GetMapMode().GetMapUnit() == MAP_100TH_MM,
|
|
|
|
|
"Sm : falscher MapMode");
|
|
|
|
|
|
|
|
|
|
const SmFormat &rFormat = GetFormat();
|
2001-04-19 13:47:39 +00:00
|
|
|
|
pTree->Prepare(rFormat, *this);
|
2003-09-04 10:42:11 +00:00
|
|
|
|
|
|
|
|
|
// format/draw formulas always from left to right,
|
|
|
|
|
// and numbers should not be converted
|
|
|
|
|
ULONG nLayoutMode = pOutDev->GetLayoutMode();
|
2006-07-14 07:22:19 +00:00
|
|
|
|
pOutDev->SetLayoutMode( TEXT_LAYOUT_BIDI_LTR );
|
2003-09-04 10:42:11 +00:00
|
|
|
|
INT16 nDigitLang = pOutDev->GetDigitLanguage();
|
|
|
|
|
pOutDev->SetDigitLanguage( LANGUAGE_ENGLISH );
|
|
|
|
|
//
|
2000-09-18 16:07:07 +00:00
|
|
|
|
pTree->Arrange(*pOutDev, rFormat);
|
2003-09-04 10:42:11 +00:00
|
|
|
|
//
|
|
|
|
|
pOutDev->SetLayoutMode( nLayoutMode );
|
|
|
|
|
pOutDev->SetDigitLanguage( nDigitLang );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
SetFormulaArranged(TRUE);
|
2002-05-31 13:23:22 +00:00
|
|
|
|
|
|
|
|
|
// invalidate accessible text
|
|
|
|
|
aAccText = String();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2005-05-03 12:51:39 +00:00
|
|
|
|
void SetEditEngineDefaultFonts(
|
2007-05-25 11:12:32 +00:00
|
|
|
|
EditEngine &/*rEditEngine*/,
|
2005-05-03 12:51:39 +00:00
|
|
|
|
SfxItemPool &rEditEngineItemPool )
|
2001-03-08 08:24:49 +00:00
|
|
|
|
{
|
2001-11-21 10:59:49 +00:00
|
|
|
|
//
|
|
|
|
|
// set fonts to be used
|
|
|
|
|
//
|
|
|
|
|
SvtLinguOptions aOpt;
|
|
|
|
|
SvtLinguConfig().GetOptions( aOpt );
|
|
|
|
|
//
|
|
|
|
|
struct FontDta {
|
|
|
|
|
INT16 nFallbackLang;
|
|
|
|
|
INT16 nLang;
|
|
|
|
|
USHORT nFontType;
|
|
|
|
|
USHORT nFontInfoId;
|
|
|
|
|
} aTable[3] =
|
|
|
|
|
{
|
|
|
|
|
// info to get western font to be used
|
|
|
|
|
{ LANGUAGE_ENGLISH_US, LANGUAGE_NONE,
|
2005-04-04 11:37:10 +00:00
|
|
|
|
DEFAULTFONT_FIXED, EE_CHAR_FONTINFO },
|
2001-11-21 10:59:49 +00:00
|
|
|
|
// info to get CJK font to be used
|
|
|
|
|
{ LANGUAGE_JAPANESE, LANGUAGE_NONE,
|
|
|
|
|
DEFAULTFONT_CJK_TEXT, EE_CHAR_FONTINFO_CJK },
|
|
|
|
|
// info to get CTL font to be used
|
2009-01-06 12:54:16 +00:00
|
|
|
|
{ LANGUAGE_ARABIC_SAUDI_ARABIA, LANGUAGE_NONE,
|
2001-11-21 10:59:49 +00:00
|
|
|
|
DEFAULTFONT_CTL_TEXT, EE_CHAR_FONTINFO_CTL }
|
|
|
|
|
};
|
|
|
|
|
aTable[0].nLang = aOpt.nDefaultLanguage;
|
|
|
|
|
aTable[1].nLang = aOpt.nDefaultLanguage_CJK;
|
|
|
|
|
aTable[2].nLang = aOpt.nDefaultLanguage_CTL;
|
|
|
|
|
//
|
|
|
|
|
for (int i = 0; i < 3; ++i)
|
|
|
|
|
{
|
|
|
|
|
const FontDta &rFntDta = aTable[i];
|
|
|
|
|
LanguageType nLang = (LANGUAGE_NONE == rFntDta.nLang) ?
|
|
|
|
|
rFntDta.nFallbackLang : rFntDta.nLang;
|
|
|
|
|
Font aFont = Application::GetDefaultDevice()->GetDefaultFont(
|
|
|
|
|
rFntDta.nFontType, nLang, DEFAULTFONT_FLAGS_ONLYONE );
|
2005-05-03 12:51:39 +00:00
|
|
|
|
#ifdef DEBUG_TL
|
|
|
|
|
ByteString aFntName( aFont.GetName(), 1 );
|
|
|
|
|
int eFntFamily = aFont.GetFamily();
|
|
|
|
|
ByteString aFntStyleName( aFont.GetStyleName(), 1 );
|
|
|
|
|
int ePitch = aFont.GetPitch();
|
|
|
|
|
int eCharSet = aFont.GetCharSet();
|
|
|
|
|
fprintf(stderr, "\nFontName %s \n", aFntName.GetBuffer() );
|
|
|
|
|
fprintf(stderr, "StyleName %s \n", aFntStyleName.GetBuffer() );
|
|
|
|
|
fprintf(stderr, "eFntFamily %d \n", eFntFamily );
|
|
|
|
|
fprintf(stderr, "ePitch %d \n", ePitch );
|
|
|
|
|
fprintf(stderr, "eCharSet %d \n", eCharSet );
|
|
|
|
|
#endif
|
|
|
|
|
rEditEngineItemPool.SetPoolDefaultItem(
|
2001-11-21 10:59:49 +00:00
|
|
|
|
SvxFontItem( aFont.GetFamily(), aFont.GetName(),
|
|
|
|
|
aFont.GetStyleName(), aFont.GetPitch(), aFont.GetCharSet(),
|
|
|
|
|
rFntDta.nFontInfoId ) );
|
|
|
|
|
}
|
2001-03-23 07:00:39 +00:00
|
|
|
|
|
2001-11-21 10:59:49 +00:00
|
|
|
|
// set font heights
|
2001-03-23 07:00:39 +00:00
|
|
|
|
SvxFontHeightItem aFontHeigt(
|
|
|
|
|
Application::GetDefaultDevice()->LogicToPixel(
|
2005-04-04 11:37:10 +00:00
|
|
|
|
Size( 0, 11 ), MapMode( MAP_POINT ) ).Height(), 100,
|
2001-03-23 07:00:39 +00:00
|
|
|
|
EE_CHAR_FONTHEIGHT );
|
2005-05-03 12:51:39 +00:00
|
|
|
|
rEditEngineItemPool.SetPoolDefaultItem( aFontHeigt );
|
2001-03-23 07:00:39 +00:00
|
|
|
|
aFontHeigt.SetWhich( EE_CHAR_FONTHEIGHT_CJK );
|
2005-05-03 12:51:39 +00:00
|
|
|
|
rEditEngineItemPool.SetPoolDefaultItem( aFontHeigt );
|
2001-03-23 07:00:39 +00:00
|
|
|
|
aFontHeigt.SetWhich( EE_CHAR_FONTHEIGHT_CTL );
|
2005-05-03 12:51:39 +00:00
|
|
|
|
rEditEngineItemPool.SetPoolDefaultItem( aFontHeigt );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EditEngine& SmDocShell::GetEditEngine()
|
|
|
|
|
{
|
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::GetEditEngine" );
|
|
|
|
|
|
|
|
|
|
if (!pEditEngine)
|
|
|
|
|
{
|
|
|
|
|
//!
|
|
|
|
|
//! see also SmEditWindow::DataChanged !
|
|
|
|
|
//!
|
|
|
|
|
|
|
|
|
|
pEditEngineItemPool = EditEngine::CreatePool();
|
|
|
|
|
|
|
|
|
|
SetEditEngineDefaultFonts( *pEditEngine, *pEditEngineItemPool );
|
2001-03-08 08:24:49 +00:00
|
|
|
|
|
|
|
|
|
pEditEngine = new EditEngine( pEditEngineItemPool );
|
|
|
|
|
|
|
|
|
|
pEditEngine->EnableUndo( TRUE );
|
|
|
|
|
pEditEngine->SetDefTab( USHORT(
|
|
|
|
|
Application::GetDefaultDevice()->GetTextWidth( C2S("XXXX") ) ) );
|
|
|
|
|
|
|
|
|
|
pEditEngine->SetControlWord(
|
|
|
|
|
(pEditEngine->GetControlWord() | EE_CNTRL_AUTOINDENTING) &
|
|
|
|
|
(~EE_CNTRL_UNDOATTRIBS) &
|
|
|
|
|
(~EE_CNTRL_PASTESPECIAL) );
|
|
|
|
|
|
|
|
|
|
pEditEngine->SetWordDelimiters( C2S(" .=+-*/(){}[];\"" ) );
|
|
|
|
|
pEditEngine->SetRefMapMode( MAP_PIXEL );
|
|
|
|
|
|
|
|
|
|
pEditEngine->SetPaperSize( Size( 800, 0 ) );
|
|
|
|
|
|
|
|
|
|
pEditEngine->EraseVirtualDevice();
|
2001-07-23 10:59:10 +00:00
|
|
|
|
|
|
|
|
|
// set initial text if the document already has some...
|
|
|
|
|
// (may be the case when reloading a doc)
|
|
|
|
|
String aTxt( GetText() );
|
|
|
|
|
if (aTxt.Len())
|
|
|
|
|
pEditEngine->SetText( aTxt );
|
|
|
|
|
|
2001-03-08 08:24:49 +00:00
|
|
|
|
pEditEngine->ClearModifyFlag();
|
|
|
|
|
|
2001-03-23 07:00:39 +00:00
|
|
|
|
// forces new settings to be used if the itempool was modified
|
|
|
|
|
// after cthe creation of the EditEngine
|
2001-03-08 08:24:49 +00:00
|
|
|
|
//pEditEngine->Clear(); //#77957 incorrect font size
|
|
|
|
|
}
|
|
|
|
|
return *pEditEngine;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SfxItemPool& SmDocShell::GetEditEngineItemPool()
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::GetEditEngineItemPool" );
|
|
|
|
|
|
2001-03-08 08:24:49 +00:00
|
|
|
|
if (!pEditEngineItemPool)
|
|
|
|
|
GetEditEngine();
|
|
|
|
|
DBG_ASSERT( pEditEngineItemPool, "EditEngineItemPool missing" );
|
|
|
|
|
return *pEditEngineItemPool;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
void SmDocShell::Draw(OutputDevice &rDev, Point &rPosition)
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::Draw" );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
if (!pTree)
|
|
|
|
|
Parse();
|
|
|
|
|
DBG_ASSERT(pTree, "Sm : NULL pointer");
|
|
|
|
|
|
|
|
|
|
if (!IsFormulaArranged())
|
|
|
|
|
ArrangeFormula();
|
|
|
|
|
|
|
|
|
|
//Problem: Was passiert mit dem WYSIWYG? Wir haben waehrend wir inplace aktiv
|
|
|
|
|
//sind kein Referenzdevice und sind auch nicht darauf ausgerichtet. Es kann
|
|
|
|
|
//also jetzt eine Differenz zwischen der VisArea (spricht die Groesse im Client)
|
|
|
|
|
//und der jetzt vorliegenden Groese geben.
|
|
|
|
|
//Idee: Die Differenz koennte, zumindest behelfsmaessig, mit SmNod::SetSize
|
|
|
|
|
//angepasst werden.
|
|
|
|
|
|
|
|
|
|
rPosition.X() += aFormat.GetDistance( DIS_LEFTSPACE );
|
|
|
|
|
rPosition.Y() += aFormat.GetDistance( DIS_TOPSPACE );
|
2002-07-12 06:26:02 +00:00
|
|
|
|
|
|
|
|
|
//! in case of high contrast-mode (accessibility option!)
|
|
|
|
|
//! the draw mode needs to be set to default, because when imbedding
|
|
|
|
|
//! Math for example in Calc in "a over b" the fraction bar may not
|
|
|
|
|
//! be visible else. More generally: the FillColor may have been changed.
|
|
|
|
|
ULONG nOldDrawMode = DRAWMODE_DEFAULT;
|
|
|
|
|
BOOL bRestoreDrawMode = FALSE;
|
|
|
|
|
if (OUTDEV_WINDOW == rDev.GetOutDevType() &&
|
|
|
|
|
((Window &) rDev).GetDisplayBackground().GetColor().IsDark())
|
|
|
|
|
{
|
|
|
|
|
nOldDrawMode = rDev.GetDrawMode();
|
|
|
|
|
rDev.SetDrawMode( DRAWMODE_DEFAULT );
|
|
|
|
|
bRestoreDrawMode = TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
2003-09-04 10:42:11 +00:00
|
|
|
|
// format/draw formulas always from left to right
|
|
|
|
|
// and numbers should not be converted
|
|
|
|
|
ULONG nLayoutMode = rDev.GetLayoutMode();
|
2006-07-14 07:22:19 +00:00
|
|
|
|
rDev.SetLayoutMode( TEXT_LAYOUT_BIDI_LTR );
|
2003-09-04 10:42:11 +00:00
|
|
|
|
INT16 nDigitLang = rDev.GetDigitLanguage();
|
|
|
|
|
rDev.SetDigitLanguage( LANGUAGE_ENGLISH );
|
|
|
|
|
//
|
2000-09-18 16:07:07 +00:00
|
|
|
|
pTree->Draw(rDev, rPosition);
|
2003-09-04 10:42:11 +00:00
|
|
|
|
//
|
|
|
|
|
rDev.SetLayoutMode( nLayoutMode );
|
|
|
|
|
rDev.SetDigitLanguage( nDigitLang );
|
2002-07-12 06:26:02 +00:00
|
|
|
|
|
|
|
|
|
if (bRestoreDrawMode)
|
|
|
|
|
rDev.SetDrawMode( nOldDrawMode );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Size SmDocShell::GetSize()
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::GetSize" );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
Size aRet;
|
|
|
|
|
|
|
|
|
|
if (!pTree)
|
|
|
|
|
Parse();
|
|
|
|
|
|
|
|
|
|
if (pTree)
|
|
|
|
|
{
|
|
|
|
|
if (!IsFormulaArranged())
|
|
|
|
|
ArrangeFormula();
|
|
|
|
|
aRet = pTree->GetSize();
|
|
|
|
|
|
|
|
|
|
if ( !aRet.Width() )
|
|
|
|
|
aRet.Width() = 2000;
|
|
|
|
|
else
|
|
|
|
|
aRet.Width() += aFormat.GetDistance( DIS_LEFTSPACE ) +
|
|
|
|
|
aFormat.GetDistance( DIS_RIGHTSPACE );
|
|
|
|
|
if ( !aRet.Height() )
|
|
|
|
|
aRet.Height() = 1000;
|
|
|
|
|
else
|
|
|
|
|
aRet.Height() += aFormat.GetDistance( DIS_TOPSPACE ) +
|
|
|
|
|
aFormat.GetDistance( DIS_BOTTOMSPACE );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return aRet;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
SmPrinterAccess::SmPrinterAccess( SmDocShell &rDocShell )
|
|
|
|
|
{
|
|
|
|
|
if ( 0 != (pPrinter = rDocShell.GetPrt()) )
|
|
|
|
|
{
|
|
|
|
|
pPrinter->Push( PUSH_MAPMODE );
|
2004-10-04 17:03:04 +00:00
|
|
|
|
if ( SFX_CREATE_MODE_EMBEDDED == rDocShell.GetCreateMode() )
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
|
|
|
|
// if it is an embedded object (without it's own printer)
|
|
|
|
|
// we change the MapMode temporarily.
|
|
|
|
|
//!If it is a document with it's own printer the MapMode should
|
|
|
|
|
//!be set correct (once) elsewhere(!), in order to avoid numerous
|
|
|
|
|
//!superfluous pushing and poping of the MapMode when using
|
|
|
|
|
//!this class.
|
|
|
|
|
|
|
|
|
|
const MapUnit eOld = pPrinter->GetMapMode().GetMapUnit();
|
|
|
|
|
if ( MAP_100TH_MM != eOld )
|
|
|
|
|
{
|
|
|
|
|
MapMode aMap( pPrinter->GetMapMode() );
|
|
|
|
|
aMap.SetMapUnit( MAP_100TH_MM );
|
|
|
|
|
Point aTmp( aMap.GetOrigin() );
|
|
|
|
|
aTmp.X() = OutputDevice::LogicToLogic( aTmp.X(), eOld, MAP_100TH_MM );
|
|
|
|
|
aTmp.Y() = OutputDevice::LogicToLogic( aTmp.Y(), eOld, MAP_100TH_MM );
|
|
|
|
|
aMap.SetOrigin( aTmp );
|
|
|
|
|
pPrinter->SetMapMode( aMap );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2003-04-01 08:45:05 +00:00
|
|
|
|
if ( 0 != (pRefDev = rDocShell.GetRefDev()) && pPrinter != pRefDev )
|
|
|
|
|
{
|
|
|
|
|
pRefDev->Push( PUSH_MAPMODE );
|
2004-10-04 17:03:04 +00:00
|
|
|
|
if ( SFX_CREATE_MODE_EMBEDDED == rDocShell.GetCreateMode() )
|
2003-04-01 08:45:05 +00:00
|
|
|
|
{
|
|
|
|
|
// if it is an embedded object (without it's own printer)
|
|
|
|
|
// we change the MapMode temporarily.
|
|
|
|
|
//!If it is a document with it's own printer the MapMode should
|
|
|
|
|
//!be set correct (once) elsewhere(!), in order to avoid numerous
|
|
|
|
|
//!superfluous pushing and poping of the MapMode when using
|
|
|
|
|
//!this class.
|
|
|
|
|
|
|
|
|
|
const MapUnit eOld = pRefDev->GetMapMode().GetMapUnit();
|
|
|
|
|
if ( MAP_100TH_MM != eOld )
|
|
|
|
|
{
|
|
|
|
|
MapMode aMap( pRefDev->GetMapMode() );
|
|
|
|
|
aMap.SetMapUnit( MAP_100TH_MM );
|
|
|
|
|
Point aTmp( aMap.GetOrigin() );
|
|
|
|
|
aTmp.X() = OutputDevice::LogicToLogic( aTmp.X(), eOld, MAP_100TH_MM );
|
|
|
|
|
aTmp.Y() = OutputDevice::LogicToLogic( aTmp.Y(), eOld, MAP_100TH_MM );
|
|
|
|
|
aMap.SetOrigin( aTmp );
|
|
|
|
|
pRefDev->SetMapMode( aMap );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SmPrinterAccess::~SmPrinterAccess()
|
|
|
|
|
{
|
|
|
|
|
if ( pPrinter )
|
|
|
|
|
pPrinter->Pop();
|
2003-04-01 08:45:05 +00:00
|
|
|
|
if ( pRefDev && pRefDev != pPrinter )
|
|
|
|
|
pRefDev->Pop();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////
|
|
|
|
|
|
2003-04-01 08:45:05 +00:00
|
|
|
|
Printer* SmDocShell::GetPrt()
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::GetPrt" );
|
|
|
|
|
|
2004-10-04 17:03:04 +00:00
|
|
|
|
if ( SFX_CREATE_MODE_EMBEDDED == GetCreateMode() )
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
|
|
|
|
//Normalerweise wird der Printer vom Server besorgt. Wenn dieser aber
|
|
|
|
|
//keinen liefert (weil etwa noch keine connection da ist), kann es
|
|
|
|
|
//dennoch sein, dass wir den Printer kennen, denn dieser wird in
|
|
|
|
|
//OnDocumentPrinterChanged vom Server durchgereicht und dann temporaer
|
|
|
|
|
//festgehalten.
|
|
|
|
|
Printer *pPrt = GetDocumentPrinter();
|
2003-04-01 08:45:05 +00:00
|
|
|
|
if ( !pPrt && pTmpPrinter )
|
2000-09-18 16:07:07 +00:00
|
|
|
|
pPrt = pTmpPrinter;
|
|
|
|
|
return pPrt;
|
|
|
|
|
}
|
|
|
|
|
else if ( !pPrinter )
|
|
|
|
|
{
|
|
|
|
|
SfxItemSet *pOptions =
|
|
|
|
|
new SfxItemSet(GetPool(),
|
|
|
|
|
SID_PRINTSIZE, SID_PRINTSIZE,
|
|
|
|
|
SID_PRINTZOOM, SID_PRINTZOOM,
|
|
|
|
|
SID_PRINTTITLE, SID_PRINTTITLE,
|
|
|
|
|
SID_PRINTTEXT, SID_PRINTTEXT,
|
|
|
|
|
SID_PRINTFRAME, SID_PRINTFRAME,
|
|
|
|
|
SID_NO_RIGHT_SPACES, SID_NO_RIGHT_SPACES,
|
|
|
|
|
0);
|
|
|
|
|
|
|
|
|
|
SmModule *pp = SM_MOD1();
|
|
|
|
|
pp->GetConfig()->ConfigToItemSet(*pOptions);
|
|
|
|
|
pPrinter = new SfxPrinter(pOptions);
|
|
|
|
|
pPrinter->SetMapMode( MapMode(MAP_100TH_MM) );
|
|
|
|
|
}
|
|
|
|
|
return pPrinter;
|
|
|
|
|
}
|
|
|
|
|
|
2003-04-01 08:45:05 +00:00
|
|
|
|
OutputDevice* SmDocShell::GetRefDev()
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::GetRefDev" );
|
|
|
|
|
|
2004-10-04 17:03:04 +00:00
|
|
|
|
if ( SFX_CREATE_MODE_EMBEDDED == GetCreateMode() )
|
2003-04-01 08:45:05 +00:00
|
|
|
|
{
|
|
|
|
|
OutputDevice* pOutDev = GetDocumentRefDev();
|
|
|
|
|
if ( pOutDev )
|
|
|
|
|
return pOutDev;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return GetPrt();
|
|
|
|
|
}
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
void SmDocShell::SetPrinter( SfxPrinter *pNew )
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::SetPrinter" );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
delete pPrinter;
|
|
|
|
|
pPrinter = pNew; //Eigentumsuebergang!
|
|
|
|
|
pPrinter->SetMapMode( MapMode(MAP_100TH_MM) );
|
|
|
|
|
SetFormulaArranged(FALSE);
|
2004-11-15 15:42:35 +00:00
|
|
|
|
Repaint();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmDocShell::OnDocumentPrinterChanged( Printer *pPrt )
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::OnDocumentPrinterChanged" );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
pTmpPrinter = pPrt;
|
|
|
|
|
SetFormulaArranged(FALSE);
|
|
|
|
|
Size aOldSize = GetVisArea().GetSize();
|
2004-11-15 15:42:35 +00:00
|
|
|
|
Repaint();
|
2002-01-30 10:47:52 +00:00
|
|
|
|
if( aOldSize != GetVisArea().GetSize() && aText.Len() )
|
2000-09-18 16:07:07 +00:00
|
|
|
|
SetModified( TRUE );
|
|
|
|
|
pTmpPrinter = 0;
|
|
|
|
|
}
|
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
void SmDocShell::Repaint()
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2005-04-04 07:04:42 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::Repaint" );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
BOOL bIsEnabled = IsEnableSetModified();
|
|
|
|
|
if ( bIsEnabled )
|
|
|
|
|
EnableSetModified( FALSE );
|
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
SetFormulaArranged( FALSE );
|
|
|
|
|
|
2005-04-04 07:04:42 +00:00
|
|
|
|
Size aVisSize = GetSize();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
SetVisAreaSize( aVisSize );
|
|
|
|
|
SmViewShell *pViewSh = SmGetActiveView();
|
|
|
|
|
if (pViewSh)
|
2002-07-24 09:49:14 +00:00
|
|
|
|
pViewSh->GetGraphicWindow().Invalidate();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
if ( bIsEnabled )
|
|
|
|
|
EnableSetModified( bIsEnabled );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2008-03-06 17:45:08 +00:00
|
|
|
|
SmDocShell::SmDocShell(SfxObjectCreateMode eMode,const sal_Bool _bScriptSupport) :
|
2000-09-18 16:07:07 +00:00
|
|
|
|
SfxObjectShell(eMode),
|
2001-03-08 08:24:49 +00:00
|
|
|
|
pTree ( 0 ),
|
|
|
|
|
pEditEngineItemPool ( 0 ),
|
|
|
|
|
pEditEngine ( 0 ),
|
2007-05-25 11:12:32 +00:00
|
|
|
|
pPrinter ( 0 ),
|
|
|
|
|
pTmpPrinter ( 0 ),
|
2001-03-08 08:24:49 +00:00
|
|
|
|
nModifyCount ( 0 ),
|
|
|
|
|
bIsFormulaArranged ( FALSE )
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::SmDocShell" );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
SetPool(&SFX_APP()->GetPool());
|
|
|
|
|
|
|
|
|
|
SmModule *pp = SM_MOD1();
|
2001-05-02 15:58:48 +00:00
|
|
|
|
aFormat = pp->GetConfig()->GetStandardFormat();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
StartListening(aFormat);
|
|
|
|
|
StartListening(*pp->GetConfig());
|
|
|
|
|
|
2008-03-06 17:45:08 +00:00
|
|
|
|
if ( !_bScriptSupport )
|
|
|
|
|
SetHasNoBasic();
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
SetModel( new SmModel(this) ); //! das hier mit new erzeugte Model brauch
|
2005-02-16 16:58:16 +00:00
|
|
|
|
//! im Destruktor nicht explizit geloescht werden.
|
2000-09-18 16:07:07 +00:00
|
|
|
|
//! Dies erledigt das Sfx.
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SmDocShell::~SmDocShell()
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::~SmDocShell" );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
SmModule *pp = SM_MOD1();
|
|
|
|
|
|
|
|
|
|
EndListening(aFormat);
|
|
|
|
|
EndListening(*pp->GetConfig());
|
|
|
|
|
|
2001-03-08 08:24:49 +00:00
|
|
|
|
delete pEditEngine;
|
CWS-TOOLING: integrate CWS aw063
2009-02-12 13:10:24 +0100 aw r267649 : #i99123# when a primitive is invisible, it is not sufficient to produce no output when decomposing, but to add invisible data using HitTestPrimitive2D. This is needed for the slideshow which relies on geometry data in MetaFiles when painting invisible objects
2009-02-12 13:08:39 +0100 aw r267648 : #i99123# do not ignore HitTestPrimitive2D, but draw empty rectangles instead. This is needed since Slideshow is based on getting MetaFile content when painting invisible objects
2009-02-11 16:04:28 +0100 aw r267620 : #i98788# made SfxItemPool destructor protected, added static ::Free method
2009-02-11 16:04:10 +0100 aw r267619 : #i98788# made SfxItemPool destructor protected, added static ::Free method
2009-02-11 16:03:56 +0100 aw r267618 : #i98788# made SfxItemPool destructor protected, added static ::Free method
2009-02-11 16:03:39 +0100 aw r267617 : #i98788# made SfxItemPool destructor protected, added static ::Free method
2009-02-11 16:03:21 +0100 aw r267615 : #i98788# made SfxItemPool destructor protected, added static ::Free method
2009-02-11 16:02:48 +0100 aw r267614 : #i98788# made SfxItemPool destructor protected, added static ::Free method
2009-02-11 16:02:24 +0100 aw r267613 : #i98788# made SfxItemPool destructor protected, added static ::Free method
2009-02-11 16:02:01 +0100 aw r267612 : #i98788# made SfxItemPool destructor protected, added static ::Free method
2009-02-11 16:01:32 +0100 aw r267611 : #i98788# made SfxItemPool destructor protected, added static ::Free method
2009-02-11 16:01:05 +0100 aw r267610 : #i98788# made SfxItemPool destructor protected, added static ::Free method
2009-02-11 16:00:15 +0100 aw r267608 : #i98788# made SfxItemPool destructor protected, added static ::Free method
2009-02-11 11:27:33 +0100 aw r267585 : #i98788# added missing include for STL
2009-02-10 17:46:50 +0100 aw r267570 : #i98788# added reaction on pool destruction
2009-02-10 17:11:58 +0100 aw r267562 : #i98788# added messaging mechanism to register for pool destruction
2009-02-10 13:35:35 +0100 aw r267549 : #i98788# removing changes, too complicated and risky for 3.1
2009-02-10 12:13:48 +0100 aw r267546 : #i98788# 4th round
2009-02-10 12:13:37 +0100 aw r267545 : #i98788# 4th round
2009-02-10 12:13:26 +0100 aw r267544 : #i98788# 4th round
2009-02-10 12:13:14 +0100 aw r267543 : #i98788# 4th round
2009-02-10 12:13:03 +0100 aw r267542 : #i98788# 4th round
2009-02-10 12:12:50 +0100 aw r267541 : #i98788# 4th round
2009-02-10 12:12:37 +0100 aw r267540 : #i98788# 4th round
2009-02-08 14:38:22 +0100 aw r267495 : #i98788# 3rd round of changes to SfxItemPool handling
2009-02-08 14:38:06 +0100 aw r267494 : #i98788# 3rd round of changes to SfxItemPool handling
2009-02-08 14:37:48 +0100 aw r267493 : #i98788# 3rd round of changes to SfxItemPool handling
2009-02-08 14:37:17 +0100 aw r267492 : #i98788# 3rd round of changes to SfxItemPool handling
2009-02-08 14:36:56 +0100 aw r267491 : #i98788# 3rd round of changes to SfxItemPool handling
2009-02-08 14:36:44 +0100 aw r267490 : #i98788# 3rd round of changes to SfxItemPool handling
2009-02-08 14:36:29 +0100 aw r267489 : #i98788# 3rd round of changes to SfxItemPool handling
2009-02-08 14:36:16 +0100 aw r267488 : #i98788# 3rd round of changes to SfxItemPool handling
2009-02-08 14:36:02 +0100 aw r267487 : #i98788# 3rd round of changes to SfxItemPool handling
2009-02-08 14:35:46 +0100 aw r267486 : #i98788# 3rd round of changes to SfxItemPool handling
2009-02-05 12:20:39 +0100 aw r267415 : #i98788# 2nd batch of adaptions for SfxItemPoolHolder addition
2009-02-04 15:12:54 +0100 aw r267385 : #i98788# added newline at EOF
2009-02-04 13:26:04 +0100 aw r267379 : #i98788# make SfxItemPool holdable
2009-02-04 13:25:40 +0100 aw r267378 : #i98788# make SfxItemPool holdable
2009-02-04 13:25:08 +0100 aw r267377 : #i98788# make SfxItemPool holdable
2009-02-04 13:24:42 +0100 aw r267376 : #i98788# make SfxItemPool holdable
2009-02-04 13:23:14 +0100 aw r267375 : #i98788# make SfxItemPool holdable
2009-02-04 13:23:02 +0100 aw r267374 : #i98788# make SfxItemPool holdable
2009-01-29 17:08:31 +0100 aw r267159 : #i97628# completed the fix
2009-01-29 17:08:15 +0100 aw r267158 : #i97628# completed the fix
2009-01-29 14:09:07 +0100 aw r267132 : #i97628# Corrected usage of ParagraphData in headers
2009-01-29 14:06:58 +0100 iha r267131 : #i98344# incorrect font size in charts
2009-01-29 12:13:46 +0100 aw r267115 : #i97628# back to old state; triggers too many errors in other modules
2009-01-29 12:03:51 +0100 aw r267114 : #i97628# enabled exceptions due to STL vector include
2009-01-29 11:21:37 +0100 aw r267107 : #i97628# added needed include
2009-01-28 17:58:29 +0100 aw r267077 : #i97628# first version of newly implemented OutlinerParaObject and adaptions
2009-01-28 17:58:12 +0100 aw r267076 : #i97628# first version of newly implemented OutlinerParaObject and adaptions
2009-01-28 17:57:51 +0100 aw r267074 : #i97628# first version of newly implemented OutlinerParaObject and adaptions
2009-01-28 17:57:21 +0100 aw r267073 : #i97628# first version of newly implemented OutlinerParaObject and adaptions
2009-01-27 17:07:33 +0100 aw r267011 : #i98402# added support for ViewRange when exporting MetaFiles in ObjectContactOfPageView::DoProcessDisplay to avoid to paint too much
2009-01-27 11:45:48 +0100 aw r266973 : #i98404# Added a warning to a place where a conversion to rectangle should not be copied from
2009-01-26 21:44:36 +0100 iha r266949 : #i98497# 3D charts are rendered with wrong size
2009-01-26 20:47:07 +0100 aw r266947 : #i98404# handle BackgroundColorPrimitive2D directly in PixelRenderers and avoid AA under all circumstances
2009-01-26 14:50:36 +0100 aw r266926 : #i98386# secured cloning of SdrObject in IMapUserData by boost::shared_prt usage
2009-01-26 12:51:30 +0100 aw r266916 : #i96581# added separated FontStretching and fallback for small X!=Y scale differences
2009-01-23 16:14:55 +0100 aw r266834 : #i96475# added missing implementation of TextDecoratedPortionPrimitive2D::getB2DRange
2009-01-23 15:24:34 +0100 aw r266826 : #i98405# fixed fallback to DrawAlphaRect to use the correctly sized rectangle
2009-01-23 13:34:43 +0100 aw r266813 : #i96474# fixed impSplitSingleWords for an unexpected case
2009-01-23 10:47:31 +0100 aw r266786 : #i98289#,#i96474# tooling and new flags for tasks
2009-01-23 10:47:20 +0100 aw r266785 : #i98289#,#i96474# tooling and new flags for tasks
2009-01-23 10:47:09 +0100 aw r266783 : #i98289#,#i96474# tooling and new flags for tasks
2009-01-23 10:46:58 +0100 aw r266782 : #i98289#,#i96474# tooling and new flags for tasks
2009-01-23 10:46:48 +0100 aw r266781 : #i98289#,#i96474# tooling and new flags for tasks
2009-03-04 14:16:02 +00:00
|
|
|
|
SfxItemPool::Free(pEditEngineItemPool);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
delete pTree;
|
|
|
|
|
delete pPrinter;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2001-03-09 16:14:48 +00:00
|
|
|
|
BOOL SmDocShell::SetData( const String& rData )
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::SetData" );
|
|
|
|
|
|
2001-03-09 16:14:48 +00:00
|
|
|
|
SetText( rData );
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
BOOL SmDocShell::ConvertFrom(SfxMedium &rMedium)
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::ConvertFrom" );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
BOOL bSuccess = FALSE;
|
2001-03-19 09:25:21 +00:00
|
|
|
|
const String& rFltName = rMedium.GetFilter()->GetFilterName();
|
2004-10-04 17:03:04 +00:00
|
|
|
|
|
|
|
|
|
DBG_ASSERT( !rFltName.EqualsAscii( STAROFFICE_XML ), "Wrong filter!");
|
|
|
|
|
|
|
|
|
|
if ( rFltName.EqualsAscii( MATHML_XML ) )
|
2000-11-15 09:47:20 +00:00
|
|
|
|
{
|
|
|
|
|
if (pTree)
|
|
|
|
|
{
|
2001-02-02 09:20:47 +00:00
|
|
|
|
delete pTree;
|
|
|
|
|
pTree = 0;
|
2000-11-15 09:47:20 +00:00
|
|
|
|
}
|
2001-10-18 11:32:43 +00:00
|
|
|
|
Reference<com::sun::star::frame::XModel> xModel(GetModel());
|
|
|
|
|
SmXMLWrapper aEquation(xModel);
|
2001-07-19 14:02:02 +00:00
|
|
|
|
bSuccess = 0 == aEquation.Import(rMedium);
|
2000-11-15 09:47:20 +00:00
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
SvStream *pStream = rMedium.GetInStream();
|
2004-10-04 17:03:04 +00:00
|
|
|
|
if ( pStream )
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2004-10-04 17:03:04 +00:00
|
|
|
|
if ( SotStorage::IsStorageFile( pStream ) )
|
|
|
|
|
{
|
|
|
|
|
SvStorageRef aStorage = new SotStorage( pStream, FALSE );
|
|
|
|
|
if ( aStorage->IsStream( C2S( "Equation Native" ) ) )
|
|
|
|
|
{
|
|
|
|
|
// is this a MathType Storage?
|
|
|
|
|
MathType aEquation( aText );
|
2007-05-25 11:12:32 +00:00
|
|
|
|
if ( TRUE == (bSuccess = (1 == aEquation.Parse( aStorage )) ))
|
2004-10-04 17:03:04 +00:00
|
|
|
|
Parse();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2005-04-04 07:04:42 +00:00
|
|
|
|
//bSuccess = ImportSM20File( pStream );
|
2004-10-04 17:03:04 +00:00
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2004-10-04 17:03:04 +00:00
|
|
|
|
|
|
|
|
|
if ( GetCreateMode() == SFX_CREATE_MODE_EMBEDDED )
|
2005-04-04 07:04:42 +00:00
|
|
|
|
{
|
|
|
|
|
//???OnDocumentPrinterChanged(0);
|
|
|
|
|
SetFormulaArranged( FALSE );
|
|
|
|
|
Repaint();
|
|
|
|
|
}
|
2004-10-04 17:03:04 +00:00
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
FinishedLoading( SFX_LOADED_ALL );
|
|
|
|
|
return bSuccess;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2004-10-04 17:03:04 +00:00
|
|
|
|
BOOL SmDocShell::InitNew( const uno::Reference < embed::XStorage >& xStorage )
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::InitNew" );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
BOOL bRet = FALSE;
|
2004-10-04 17:03:04 +00:00
|
|
|
|
if ( SfxObjectShell::InitNew( xStorage ) )
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
|
|
|
|
bRet = TRUE;
|
|
|
|
|
SetVisArea(Rectangle(Point(0, 0), Size(2000, 1000)));
|
|
|
|
|
}
|
|
|
|
|
return bRet;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2005-01-11 12:08:26 +00:00
|
|
|
|
BOOL SmDocShell::Load( SfxMedium& rMedium )
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::Load" );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
BOOL bRet = FALSE;
|
2005-01-11 12:08:26 +00:00
|
|
|
|
if( SfxObjectShell::Load( rMedium ))
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2005-01-11 12:08:26 +00:00
|
|
|
|
uno::Reference < embed::XStorage > xStorage = pMedium->GetStorage();
|
2004-10-04 17:03:04 +00:00
|
|
|
|
uno::Reference < container::XNameAccess > xAccess (xStorage, uno::UNO_QUERY);
|
2008-12-11 07:05:03 +00:00
|
|
|
|
if (
|
|
|
|
|
(
|
|
|
|
|
xAccess->hasByName( C2S( "content.xml" ) ) &&
|
|
|
|
|
xStorage->isStreamElement( C2S( "content.xml" ) )
|
|
|
|
|
) ||
|
|
|
|
|
(
|
|
|
|
|
xAccess->hasByName( C2S( "Content.xml" ) ) &&
|
|
|
|
|
xStorage->isStreamElement( C2S( "Content.xml" ) )
|
|
|
|
|
)
|
|
|
|
|
)
|
2001-02-02 13:18:01 +00:00
|
|
|
|
{
|
|
|
|
|
// is this a fabulous math package ?
|
2001-10-18 11:32:43 +00:00
|
|
|
|
Reference<com::sun::star::frame::XModel> xModel(GetModel());
|
|
|
|
|
SmXMLWrapper aEquation(xModel);
|
2005-01-11 12:08:26 +00:00
|
|
|
|
ULONG nError = aEquation.Import(rMedium);
|
2001-07-19 14:02:02 +00:00
|
|
|
|
bRet = 0 == nError;
|
|
|
|
|
SetError( nError );
|
2001-02-02 13:18:01 +00:00
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
2004-10-04 17:03:04 +00:00
|
|
|
|
|
|
|
|
|
if ( GetCreateMode() == SFX_CREATE_MODE_EMBEDDED )
|
2005-04-04 07:04:42 +00:00
|
|
|
|
{
|
|
|
|
|
//???OnDocumentPrinterChanged(0);
|
|
|
|
|
SetFormulaArranged( FALSE );
|
|
|
|
|
Repaint();
|
|
|
|
|
}
|
2004-10-04 17:03:04 +00:00
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
FinishedLoading( SFX_LOADED_ALL );
|
|
|
|
|
return bRet;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
BOOL SmDocShell::Save()
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::Save" );
|
|
|
|
|
|
2001-05-30 12:45:55 +00:00
|
|
|
|
//! apply latest changes if necessary
|
|
|
|
|
UpdateText();
|
|
|
|
|
|
2004-10-04 17:03:04 +00:00
|
|
|
|
if ( SfxObjectShell::Save() )
|
2001-02-06 15:02:19 +00:00
|
|
|
|
{
|
2007-06-27 11:39:58 +00:00
|
|
|
|
if (!pTree)
|
2001-03-29 18:40:27 +00:00
|
|
|
|
Parse();
|
|
|
|
|
if( pTree && !IsFormulaArranged() )
|
|
|
|
|
ArrangeFormula();
|
|
|
|
|
|
2004-10-04 17:03:04 +00:00
|
|
|
|
Reference<com::sun::star::frame::XModel> xModel(GetModel());
|
|
|
|
|
SmXMLWrapper aEquation(xModel);
|
|
|
|
|
aEquation.SetFlat(sal_False);
|
2005-01-11 12:08:26 +00:00
|
|
|
|
return aEquation.Export(*GetMedium());
|
2001-02-06 15:02:19 +00:00
|
|
|
|
}
|
2004-10-04 17:03:04 +00:00
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
2007-06-27 11:39:58 +00:00
|
|
|
|
/*
|
|
|
|
|
* replace bad characters that can not be saved. (#i74144)
|
|
|
|
|
* */
|
|
|
|
|
sal_Bool SmDocShell::ReplaceBadChars()
|
|
|
|
|
{
|
|
|
|
|
sal_Bool bReplace = sal_False;
|
|
|
|
|
if (pEditEngine)
|
|
|
|
|
{
|
|
|
|
|
String aEngTxt( pEditEngine->GetText( LINEEND_LF ) );
|
|
|
|
|
const sal_Unicode *pEngTxt = aEngTxt.GetBuffer();
|
|
|
|
|
xub_StrLen nLen = aEngTxt.Len();
|
|
|
|
|
for (xub_StrLen i = 0; i < nLen && !bReplace; ++i)
|
|
|
|
|
{
|
|
|
|
|
const sal_Unicode c = *pEngTxt++;
|
|
|
|
|
if (c < ' ' && c != '\r' && c != '\n' && c != '\t')
|
|
|
|
|
bReplace = sal_True;
|
|
|
|
|
}
|
|
|
|
|
if (bReplace)
|
|
|
|
|
{
|
|
|
|
|
sal_Unicode *pChgTxt = aEngTxt.GetBufferAccess();
|
|
|
|
|
for (xub_StrLen i = 0; i < nLen; ++i)
|
|
|
|
|
{
|
|
|
|
|
sal_Unicode &rc = *pChgTxt++;
|
|
|
|
|
if (rc < ' ' && rc != '\r' && rc != '\n' && rc != '\t')
|
|
|
|
|
rc = ' ';
|
|
|
|
|
}
|
|
|
|
|
aEngTxt.ReleaseBufferAccess( nLen );
|
|
|
|
|
|
|
|
|
|
aText = aEngTxt;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return bReplace;
|
|
|
|
|
}
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2001-05-30 12:08:34 +00:00
|
|
|
|
void SmDocShell::UpdateText()
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::UpdateText" );
|
|
|
|
|
|
2001-05-30 12:08:34 +00:00
|
|
|
|
if (pEditEngine && pEditEngine->IsModified())
|
|
|
|
|
{
|
|
|
|
|
String aEngTxt( pEditEngine->GetText( LINEEND_LF ) );
|
|
|
|
|
if (GetText() != aEngTxt)
|
|
|
|
|
SetText( aEngTxt );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2005-01-11 12:08:26 +00:00
|
|
|
|
BOOL SmDocShell::SaveAs( SfxMedium& rMedium )
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::SaveAs" );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
BOOL bRet = FALSE;
|
2001-05-30 12:08:34 +00:00
|
|
|
|
|
|
|
|
|
//! apply latest changes if necessary
|
|
|
|
|
UpdateText();
|
|
|
|
|
|
2005-01-11 12:08:26 +00:00
|
|
|
|
if ( SfxObjectShell::SaveAs( rMedium ) )
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2007-06-27 11:39:58 +00:00
|
|
|
|
if (!pTree)
|
2001-03-29 18:40:27 +00:00
|
|
|
|
Parse();
|
|
|
|
|
if( pTree && !IsFormulaArranged() )
|
|
|
|
|
ArrangeFormula();
|
|
|
|
|
|
2004-10-04 17:03:04 +00:00
|
|
|
|
Reference<com::sun::star::frame::XModel> xModel(GetModel());
|
|
|
|
|
SmXMLWrapper aEquation(xModel);
|
|
|
|
|
aEquation.SetFlat(sal_False);
|
2005-01-11 12:08:26 +00:00
|
|
|
|
bRet = aEquation.Export(rMedium);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
return bRet;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL SmDocShell::ConvertTo( SfxMedium &rMedium )
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::ConvertTo" );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
BOOL bRet = FALSE;
|
|
|
|
|
const SfxFilter* pFlt = rMedium.GetFilter();
|
2000-11-15 09:47:20 +00:00
|
|
|
|
if( pFlt )
|
|
|
|
|
{
|
2001-03-29 18:40:27 +00:00
|
|
|
|
if( !pTree )
|
|
|
|
|
Parse();
|
|
|
|
|
if( pTree && !IsFormulaArranged() )
|
|
|
|
|
ArrangeFormula();
|
|
|
|
|
|
2001-03-19 09:25:21 +00:00
|
|
|
|
const String& rFltName = pFlt->GetFilterName();
|
|
|
|
|
if(rFltName.EqualsAscii( STAROFFICE_XML ))
|
2001-02-02 11:50:57 +00:00
|
|
|
|
{
|
2001-10-18 11:32:43 +00:00
|
|
|
|
Reference<com::sun::star::frame::XModel> xModel(GetModel());
|
|
|
|
|
SmXMLWrapper aEquation(xModel);
|
2001-02-02 11:50:57 +00:00
|
|
|
|
aEquation.SetFlat(sal_False);
|
|
|
|
|
bRet = aEquation.Export(rMedium);
|
|
|
|
|
}
|
2001-03-19 09:25:21 +00:00
|
|
|
|
else if(rFltName.EqualsAscii( MATHML_XML ))
|
2000-11-15 09:47:20 +00:00
|
|
|
|
{
|
2001-10-18 11:32:43 +00:00
|
|
|
|
Reference<com::sun::star::frame::XModel> xModel(GetModel());
|
|
|
|
|
SmXMLWrapper aEquation(xModel);
|
2001-02-02 11:50:57 +00:00
|
|
|
|
aEquation.SetFlat(sal_True);
|
2001-02-02 09:20:47 +00:00
|
|
|
|
bRet = aEquation.Export(rMedium);
|
2000-11-15 09:47:20 +00:00
|
|
|
|
}
|
2005-05-13 11:14:02 +00:00
|
|
|
|
else if( pFlt->GetFilterName().EqualsAscii("MathType 3.x"))
|
|
|
|
|
bRet = WriteAsMathType3( rMedium );
|
2000-11-15 09:47:20 +00:00
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
return bRet;
|
|
|
|
|
}
|
|
|
|
|
|
2004-10-04 17:03:04 +00:00
|
|
|
|
BOOL SmDocShell::SaveCompleted( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage )
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::SaveCompleted" );
|
|
|
|
|
|
2004-10-04 17:03:04 +00:00
|
|
|
|
if( SfxObjectShell::SaveCompleted( xStorage ))
|
2001-02-06 15:02:19 +00:00
|
|
|
|
return TRUE;
|
2004-10-04 17:03:04 +00:00
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void SmDocShell::Execute(SfxRequest& rReq)
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::Execute" );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
switch (rReq.GetSlot())
|
|
|
|
|
{
|
2004-11-15 15:42:35 +00:00
|
|
|
|
case SID_TEXTMODE:
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2004-11-15 15:42:35 +00:00
|
|
|
|
SmFormat aOldFormat = GetFormat();
|
|
|
|
|
SmFormat aNewFormat( aOldFormat );
|
|
|
|
|
aNewFormat.SetTextmode(!aOldFormat.IsTextmode());
|
|
|
|
|
|
2007-05-25 11:12:32 +00:00
|
|
|
|
SfxUndoManager *pTmpUndoMgr = GetUndoManager();
|
|
|
|
|
if (pTmpUndoMgr)
|
|
|
|
|
pTmpUndoMgr->AddUndoAction(
|
2004-11-15 15:42:35 +00:00
|
|
|
|
new SmFormatAction(this, aOldFormat, aNewFormat));
|
|
|
|
|
|
|
|
|
|
SetFormat( aNewFormat );
|
|
|
|
|
Repaint();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
2001-05-11 12:01:35 +00:00
|
|
|
|
break;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
case SID_AUTO_REDRAW :
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
|
|
|
|
SmModule *pp = SM_MOD1();
|
|
|
|
|
BOOL bRedraw = pp->GetConfig()->IsAutoRedraw();
|
|
|
|
|
pp->GetConfig()->SetAutoRedraw(!bRedraw);
|
|
|
|
|
}
|
2001-05-11 12:01:35 +00:00
|
|
|
|
break;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
case SID_LOADSYMBOLS:
|
2006-05-05 07:01:07 +00:00
|
|
|
|
LoadSymbols();
|
2001-05-11 12:01:35 +00:00
|
|
|
|
break;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
case SID_SAVESYMBOLS:
|
2006-05-05 07:01:07 +00:00
|
|
|
|
SaveSymbols();
|
2001-05-11 12:01:35 +00:00
|
|
|
|
break;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
case SID_FONT:
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2006-01-31 17:33:20 +00:00
|
|
|
|
// get device used to retrieve the FontList
|
|
|
|
|
OutputDevice *pDev = GetPrinter();
|
|
|
|
|
if (!pDev || pDev->GetDevFontCount() == 0)
|
|
|
|
|
pDev = &SM_MOD1()->GetDefaultVirtualDev();
|
|
|
|
|
DBG_ASSERT (pDev, "device for font list missing" );
|
|
|
|
|
|
|
|
|
|
SmFontTypeDialog *pFontTypeDialog = new SmFontTypeDialog( NULL, pDev );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2005-05-03 12:51:39 +00:00
|
|
|
|
SmFormat aOldFormat = GetFormat();
|
|
|
|
|
pFontTypeDialog->ReadFrom( aOldFormat );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
if (pFontTypeDialog->Execute() == RET_OK)
|
|
|
|
|
{
|
2005-05-03 12:51:39 +00:00
|
|
|
|
SmFormat aNewFormat( aOldFormat );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
pFontTypeDialog->WriteTo(aNewFormat);
|
2007-05-25 11:12:32 +00:00
|
|
|
|
SfxUndoManager *pTmpUndoMgr = GetUndoManager();
|
|
|
|
|
if (pTmpUndoMgr)
|
|
|
|
|
pTmpUndoMgr->AddUndoAction(
|
2004-11-15 15:42:35 +00:00
|
|
|
|
new SmFormatAction(this, aOldFormat, aNewFormat));
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
SetFormat( aNewFormat );
|
|
|
|
|
Repaint();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
delete pFontTypeDialog;
|
|
|
|
|
}
|
2001-05-11 12:01:35 +00:00
|
|
|
|
break;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
case SID_FONTSIZE:
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
|
|
|
|
SmFontSizeDialog *pFontSizeDialog = new SmFontSizeDialog(NULL);
|
|
|
|
|
|
2005-05-03 12:51:39 +00:00
|
|
|
|
SmFormat aOldFormat = GetFormat();
|
|
|
|
|
pFontSizeDialog->ReadFrom( aOldFormat );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
if (pFontSizeDialog->Execute() == RET_OK)
|
|
|
|
|
{
|
2005-05-03 12:51:39 +00:00
|
|
|
|
SmFormat aNewFormat( aOldFormat );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
pFontSizeDialog->WriteTo(aNewFormat);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2007-05-25 11:12:32 +00:00
|
|
|
|
SfxUndoManager *pTmpUndoMgr = GetUndoManager();
|
|
|
|
|
if (pTmpUndoMgr)
|
|
|
|
|
pTmpUndoMgr->AddUndoAction(
|
2004-11-15 15:42:35 +00:00
|
|
|
|
new SmFormatAction(this, aOldFormat, aNewFormat));
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
SetFormat( aNewFormat );
|
|
|
|
|
Repaint();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
delete pFontSizeDialog;
|
|
|
|
|
}
|
2001-05-11 12:01:35 +00:00
|
|
|
|
break;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
case SID_DISTANCE:
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
|
|
|
|
SmDistanceDialog *pDistanceDialog = new SmDistanceDialog(NULL);
|
|
|
|
|
|
2005-05-03 12:51:39 +00:00
|
|
|
|
SmFormat aOldFormat = GetFormat();
|
|
|
|
|
pDistanceDialog->ReadFrom( aOldFormat );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
if (pDistanceDialog->Execute() == RET_OK)
|
|
|
|
|
{
|
2005-05-03 12:51:39 +00:00
|
|
|
|
SmFormat aNewFormat( aOldFormat );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
pDistanceDialog->WriteTo(aNewFormat);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2007-05-25 11:12:32 +00:00
|
|
|
|
SfxUndoManager *pTmpUndoMgr = GetUndoManager();
|
|
|
|
|
if (pTmpUndoMgr)
|
|
|
|
|
pTmpUndoMgr->AddUndoAction(
|
2004-11-15 15:42:35 +00:00
|
|
|
|
new SmFormatAction(this, aOldFormat, aNewFormat));
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
SetFormat( aNewFormat );
|
|
|
|
|
Repaint();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
delete pDistanceDialog;
|
|
|
|
|
}
|
2001-05-11 12:01:35 +00:00
|
|
|
|
break;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
case SID_ALIGN:
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
|
|
|
|
SmAlignDialog *pAlignDialog = new SmAlignDialog(NULL);
|
|
|
|
|
|
2005-05-03 12:51:39 +00:00
|
|
|
|
SmFormat aOldFormat = GetFormat();
|
|
|
|
|
pAlignDialog->ReadFrom( aOldFormat );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
if (pAlignDialog->Execute() == RET_OK)
|
|
|
|
|
{
|
2005-05-03 12:51:39 +00:00
|
|
|
|
SmFormat aNewFormat( aOldFormat );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
pAlignDialog->WriteTo(aNewFormat);
|
2001-05-02 15:58:48 +00:00
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
SmModule *pp = SM_MOD1();
|
2001-05-02 15:58:48 +00:00
|
|
|
|
SmFormat aFmt( pp->GetConfig()->GetStandardFormat() );
|
|
|
|
|
pAlignDialog->WriteTo( aFmt );
|
|
|
|
|
pp->GetConfig()->SetStandardFormat( aFmt );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2007-05-25 11:12:32 +00:00
|
|
|
|
SfxUndoManager *pTmpUndoMgr = GetUndoManager();
|
|
|
|
|
if (pTmpUndoMgr)
|
|
|
|
|
pTmpUndoMgr->AddUndoAction(
|
2004-11-15 15:42:35 +00:00
|
|
|
|
new SmFormatAction(this, aOldFormat, aNewFormat));
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
SetFormat( aNewFormat );
|
|
|
|
|
Repaint();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
delete pAlignDialog;
|
|
|
|
|
}
|
2001-05-11 12:01:35 +00:00
|
|
|
|
break;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
case SID_TEXT:
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
|
|
|
|
const SfxStringItem& rItem =
|
|
|
|
|
(const SfxStringItem&)rReq.GetArgs()->Get(SID_TEXT);
|
|
|
|
|
|
|
|
|
|
if (GetText() != rItem.GetValue())
|
|
|
|
|
{
|
|
|
|
|
SetText(rItem.GetValue());
|
|
|
|
|
}
|
|
|
|
|
}
|
2001-05-11 12:01:35 +00:00
|
|
|
|
break;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
case SID_UNDO:
|
|
|
|
|
case SID_REDO:
|
2001-10-12 14:57:24 +00:00
|
|
|
|
{
|
2007-05-25 11:12:32 +00:00
|
|
|
|
SfxUndoManager* pTmpUndoMgr = GetUndoManager();
|
|
|
|
|
if( pTmpUndoMgr )
|
2001-10-12 14:57:24 +00:00
|
|
|
|
{
|
|
|
|
|
USHORT nId = rReq.GetSlot(), nCnt = 1;
|
|
|
|
|
const SfxItemSet* pArgs = rReq.GetArgs();
|
|
|
|
|
const SfxPoolItem* pItem;
|
|
|
|
|
if( pArgs && SFX_ITEM_SET == pArgs->GetItemState( nId, FALSE, &pItem ))
|
|
|
|
|
nCnt = ((SfxUInt16Item*)pItem)->GetValue();
|
|
|
|
|
|
|
|
|
|
BOOL (SfxUndoManager:: *fnDo)( USHORT );
|
|
|
|
|
|
|
|
|
|
sal_uInt16 nCount;
|
|
|
|
|
if( SID_UNDO == rReq.GetSlot() )
|
|
|
|
|
{
|
2007-05-25 11:12:32 +00:00
|
|
|
|
nCount = pTmpUndoMgr->GetUndoActionCount();
|
2001-10-12 14:57:24 +00:00
|
|
|
|
fnDo = &SfxUndoManager::Undo;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2007-05-25 11:12:32 +00:00
|
|
|
|
nCount = pTmpUndoMgr->GetRedoActionCount();
|
2001-10-12 14:57:24 +00:00
|
|
|
|
fnDo = &SfxUndoManager::Redo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for( ; nCnt && nCount; --nCnt, --nCount )
|
2007-05-25 11:12:32 +00:00
|
|
|
|
(pTmpUndoMgr->*fnDo)( 0 );
|
2001-10-12 14:57:24 +00:00
|
|
|
|
}
|
2004-11-15 15:42:35 +00:00
|
|
|
|
Repaint();
|
2001-10-12 14:57:24 +00:00
|
|
|
|
}
|
|
|
|
|
break;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void SmDocShell::GetState(SfxItemSet &rSet)
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::GetState" );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
SfxWhichIter aIter(rSet);
|
|
|
|
|
|
|
|
|
|
for (USHORT nWh = aIter.FirstWhich(); 0 != nWh; nWh = aIter.NextWhich())
|
|
|
|
|
{
|
|
|
|
|
switch (nWh)
|
|
|
|
|
{
|
2001-10-12 14:57:24 +00:00
|
|
|
|
case SID_TEXTMODE:
|
|
|
|
|
rSet.Put(SfxBoolItem(SID_TEXTMODE, GetFormat().IsTextmode()));
|
|
|
|
|
break;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2001-10-12 14:57:24 +00:00
|
|
|
|
case SID_DOCTEMPLATE :
|
2004-11-15 15:42:35 +00:00
|
|
|
|
rSet.DisableItem(SID_DOCTEMPLATE);
|
2001-10-12 14:57:24 +00:00
|
|
|
|
break;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2001-10-12 14:57:24 +00:00
|
|
|
|
case SID_AUTO_REDRAW :
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
|
|
|
|
SmModule *pp = SM_MOD1();
|
|
|
|
|
BOOL bRedraw = pp->GetConfig()->IsAutoRedraw();
|
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
rSet.Put(SfxBoolItem(SID_AUTO_REDRAW, bRedraw));
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
2001-10-12 14:57:24 +00:00
|
|
|
|
break;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2001-10-12 14:57:24 +00:00
|
|
|
|
case SID_MODIFYSTATUS:
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2001-10-12 14:57:24 +00:00
|
|
|
|
sal_Unicode cMod = ' ';
|
2000-09-18 16:07:07 +00:00
|
|
|
|
if (IsModified())
|
|
|
|
|
cMod = '*';
|
|
|
|
|
rSet.Put(SfxStringItem(SID_MODIFYSTATUS, String(cMod)));
|
|
|
|
|
}
|
2001-10-12 14:57:24 +00:00
|
|
|
|
break;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2001-10-12 14:57:24 +00:00
|
|
|
|
case SID_TEXT:
|
|
|
|
|
rSet.Put(SfxStringItem(SID_TEXT, GetText()));
|
|
|
|
|
break;
|
|
|
|
|
|
2004-03-17 08:50:33 +00:00
|
|
|
|
case SID_GAPHIC_SM:
|
|
|
|
|
rSet.Put(SfxInt16Item(SID_GAPHIC_SM, nModifyCount));
|
2001-10-12 14:57:24 +00:00
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case SID_UNDO:
|
|
|
|
|
case SID_REDO:
|
|
|
|
|
{
|
|
|
|
|
SfxViewFrame* pFrm = SfxViewFrame::GetFirst( this );
|
|
|
|
|
if( pFrm )
|
|
|
|
|
pFrm->GetSlotState( nWh, NULL, &rSet );
|
|
|
|
|
else
|
|
|
|
|
rSet.DisableItem( nWh );
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case SID_GETUNDOSTRINGS:
|
|
|
|
|
case SID_GETREDOSTRINGS:
|
|
|
|
|
{
|
2007-05-25 11:12:32 +00:00
|
|
|
|
SfxUndoManager* pTmpUndoMgr = GetUndoManager();
|
|
|
|
|
if( pTmpUndoMgr )
|
2001-10-12 14:57:24 +00:00
|
|
|
|
{
|
2004-11-15 15:42:35 +00:00
|
|
|
|
UniString(SfxUndoManager:: *fnGetComment)( USHORT ) const;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2001-10-12 14:57:24 +00:00
|
|
|
|
sal_uInt16 nCount;
|
|
|
|
|
if( SID_GETUNDOSTRINGS == nWh )
|
|
|
|
|
{
|
2007-05-25 11:12:32 +00:00
|
|
|
|
nCount = pTmpUndoMgr->GetUndoActionCount();
|
2001-10-12 14:57:24 +00:00
|
|
|
|
fnGetComment = &SfxUndoManager::GetUndoActionComment;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2007-05-25 11:12:32 +00:00
|
|
|
|
nCount = pTmpUndoMgr->GetRedoActionCount();
|
2001-10-12 14:57:24 +00:00
|
|
|
|
fnGetComment = &SfxUndoManager::GetRedoActionComment;
|
|
|
|
|
}
|
|
|
|
|
if( nCount )
|
|
|
|
|
{
|
|
|
|
|
String sList;
|
|
|
|
|
for( sal_uInt16 n = 0; n < nCount; ++n )
|
2007-05-25 11:12:32 +00:00
|
|
|
|
( sList += (pTmpUndoMgr->*fnGetComment)( n ) )
|
2001-10-12 14:57:24 +00:00
|
|
|
|
+= '\n';
|
|
|
|
|
|
|
|
|
|
SfxStringListItem aItem( nWh );
|
|
|
|
|
aItem.SetString( sList );
|
|
|
|
|
rSet.Put( aItem );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
rSet.DisableItem( nWh );
|
|
|
|
|
}
|
|
|
|
|
break;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2001-03-08 08:24:49 +00:00
|
|
|
|
SfxUndoManager *SmDocShell::GetUndoManager()
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::GetUndoManager" );
|
|
|
|
|
|
2001-03-08 08:24:49 +00:00
|
|
|
|
if (!pEditEngine)
|
|
|
|
|
GetEditEngine();
|
|
|
|
|
return &pEditEngine->GetUndoManager();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void SmDocShell::SaveSymbols()
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::SaveSymbols" );
|
|
|
|
|
|
2005-10-05 14:00:27 +00:00
|
|
|
|
SmModule *pp = SM_MOD1();
|
|
|
|
|
pp->GetSymSetManager().Save();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void SmDocShell::Draw(OutputDevice *pDevice,
|
|
|
|
|
const JobSetup &,
|
2007-05-25 11:12:32 +00:00
|
|
|
|
USHORT /*nAspect*/)
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::Draw" );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
pDevice->IntersectClipRegion(GetVisArea());
|
|
|
|
|
Point atmppoint;
|
|
|
|
|
Draw(*pDevice, atmppoint);
|
|
|
|
|
}
|
|
|
|
|
|
2007-05-25 11:12:32 +00:00
|
|
|
|
SfxItemPool& SmDocShell::GetPool() const
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
|
|
|
|
return SFX_APP()->GetPool();
|
|
|
|
|
}
|
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
void SmDocShell::SetVisArea(const Rectangle & rVisArea)
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::SetVisArea" );
|
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
Rectangle aNewRect(rVisArea);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
aNewRect.SetPos(Point());
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
|
if (! aNewRect.Right()) aNewRect.Right() = 2000;
|
|
|
|
|
if (! aNewRect.Bottom()) aNewRect.Bottom() = 1000;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
BOOL bIsEnabled = IsEnableSetModified();
|
|
|
|
|
if ( bIsEnabled )
|
|
|
|
|
EnableSetModified( FALSE );
|
|
|
|
|
|
2004-10-04 17:03:04 +00:00
|
|
|
|
//TODO/LATER: it's unclear how this interacts with the SFX code
|
2000-09-18 16:07:07 +00:00
|
|
|
|
// If outplace editing, then dont resize the OutplaceWindow. But the
|
|
|
|
|
// ObjectShell has to resize. Bug 56470
|
|
|
|
|
BOOL bUnLockFrame;
|
2004-10-04 17:03:04 +00:00
|
|
|
|
if( GetCreateMode() == SFX_CREATE_MODE_EMBEDDED && !IsInPlaceActive() && GetFrame() )
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
|
|
|
|
GetFrame()->LockAdjustPosSizePixel();
|
|
|
|
|
bUnLockFrame = TRUE;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
bUnLockFrame = FALSE;
|
|
|
|
|
|
2004-10-04 17:03:04 +00:00
|
|
|
|
SfxObjectShell::SetVisArea( aNewRect );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
|
|
if( bUnLockFrame )
|
|
|
|
|
GetFrame()->UnlockAdjustPosSizePixel();
|
|
|
|
|
|
|
|
|
|
if ( bIsEnabled )
|
|
|
|
|
EnableSetModified( bIsEnabled );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void SmDocShell::FillClass(SvGlobalName* pClassName,
|
2005-12-14 13:59:39 +00:00
|
|
|
|
sal_uInt32* pFormat,
|
2007-05-25 11:12:32 +00:00
|
|
|
|
String* /*pAppName*/,
|
2000-09-18 16:07:07 +00:00
|
|
|
|
String* pFullTypeName,
|
|
|
|
|
String* pShortTypeName,
|
2008-12-12 12:52:51 +00:00
|
|
|
|
sal_Int32 nFileFormat,
|
|
|
|
|
sal_Bool bTemplate /* = sal_False */) const
|
2000-09-18 16:07:07 +00:00
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::FillClass" );
|
|
|
|
|
|
2004-10-04 17:03:04 +00:00
|
|
|
|
if (nFileFormat == SOFFICE_FILEFORMAT_60 )
|
2001-02-06 15:02:19 +00:00
|
|
|
|
{
|
2004-01-28 13:43:46 +00:00
|
|
|
|
*pClassName = SvGlobalName(SO3_SM_CLASSID_60);
|
|
|
|
|
*pFormat = SOT_FORMATSTR_ID_STARMATH_60;
|
2005-07-12 13:09:23 +00:00
|
|
|
|
*pFullTypeName = String(SmResId(STR_MATH_DOCUMENT_FULLTYPE_CURRENT));
|
2001-02-06 15:02:19 +00:00
|
|
|
|
*pShortTypeName = String(SmResId(RID_DOCUMENTSTR));
|
|
|
|
|
}
|
2004-07-13 08:30:23 +00:00
|
|
|
|
else if (nFileFormat == SOFFICE_FILEFORMAT_8 )
|
|
|
|
|
{
|
|
|
|
|
*pClassName = SvGlobalName(SO3_SM_CLASSID_60);
|
2008-12-12 12:52:51 +00:00
|
|
|
|
*pFormat = bTemplate ? SOT_FORMATSTR_ID_STARMATH_8_TEMPLATE : SOT_FORMATSTR_ID_STARMATH_8;
|
2005-07-12 13:09:23 +00:00
|
|
|
|
*pFullTypeName = String(SmResId(STR_MATH_DOCUMENT_FULLTYPE_CURRENT));
|
2004-07-13 08:30:23 +00:00
|
|
|
|
*pShortTypeName = String(SmResId(RID_DOCUMENTSTR));
|
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ULONG SmDocShell::GetMiscStatus() const
|
|
|
|
|
{
|
2004-10-04 17:03:04 +00:00
|
|
|
|
return SfxObjectShell::GetMiscStatus() | SVOBJ_MISCSTATUS_NOTRESIZEABLE
|
2000-09-18 16:07:07 +00:00
|
|
|
|
| SVOBJ_MISCSTATUS_RESIZEONPRINTERCHANGE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SmDocShell::SetModified(BOOL bModified)
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::SetModified" );
|
|
|
|
|
|
2002-01-30 10:47:52 +00:00
|
|
|
|
if( IsEnableSetModified() )
|
2007-06-26 15:03:31 +00:00
|
|
|
|
{
|
2002-01-30 10:47:52 +00:00
|
|
|
|
SfxObjectShell::SetModified( bModified );
|
2007-06-26 15:03:31 +00:00
|
|
|
|
Broadcast(SfxSimpleHint(SFX_HINT_DOCCHANGED));
|
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
2005-05-13 11:14:02 +00:00
|
|
|
|
BOOL SmDocShell::WriteAsMathType3( SfxMedium& rMedium )
|
|
|
|
|
{
|
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::WriteAsMathType3" );
|
|
|
|
|
|
|
|
|
|
MathType aEquation( aText, pTree );
|
|
|
|
|
|
|
|
|
|
BOOL bRet = 0 != aEquation.ConvertFromStarMath( rMedium );
|
|
|
|
|
return bRet;
|
|
|
|
|
}
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|