2000-09-18 16:07:07 +00:00
|
|
|
|
/*************************************************************************
|
|
|
|
|
*
|
2005-09-07 14:06:24 +00:00
|
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2005-09-07 14:06:24 +00:00
|
|
|
|
* $RCSfile: document.cxx,v $
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2007-06-26 15:03:31 +00:00
|
|
|
|
* $Revision: 1.89 $
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2007-06-26 15:03:31 +00:00
|
|
|
|
* last change: $Author: hr $ $Date: 2007-06-26 16:03:31 $
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2005-09-07 14:06:24 +00:00
|
|
|
|
* The Contents of this file are made available subject to
|
|
|
|
|
* the terms of GNU Lesser General Public License Version 2.1.
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
|
|
|
|
*
|
2005-09-07 14:06:24 +00:00
|
|
|
|
* GNU Lesser General Public License Version 2.1
|
|
|
|
|
* =============================================
|
|
|
|
|
* Copyright 2005 by Sun Microsystems, Inc.
|
|
|
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2005-09-07 14:06:24 +00:00
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
|
* License version 2.1, as published by the Free Software Foundation.
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2005-09-07 14:06:24 +00:00
|
|
|
|
* 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
|
|
|
|
|
* Lesser General Public License for more details.
|
2000-09-18 16:07:07 +00:00
|
|
|
|
*
|
2005-09-07 14:06:24 +00:00
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
|
|
|
* MA 02111-1307 USA
|
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
|
|
|
|
#ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEEVENTID_HPP_
|
|
|
|
|
#include <com/sun/star/accessibility/AccessibleEventId.hpp>
|
2002-05-31 13:23:22 +00:00
|
|
|
|
#endif
|
|
|
|
|
|
2004-11-26 13:23:53 +00:00
|
|
|
|
#ifndef _RTL_LOGFILE_HXX_
|
|
|
|
|
#include <rtl/logfile.hxx>
|
|
|
|
|
#endif
|
2002-05-31 13:23:22 +00:00
|
|
|
|
#ifndef _RTL_USTRING_HXX_
|
|
|
|
|
#include <rtl/ustring.hxx>
|
|
|
|
|
#endif
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#ifndef _UCBHELPER_CONTENT_HXX
|
|
|
|
|
#include <ucbhelper/content.hxx>
|
|
|
|
|
#endif
|
2001-07-30 08:30:58 +00:00
|
|
|
|
#ifndef _SOT_FORMATS_HXX
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#include <sot/formats.hxx>
|
2001-07-30 08:30:58 +00:00
|
|
|
|
#endif
|
2004-10-04 17:03:04 +00:00
|
|
|
|
#include <sot/storage.hxx>
|
2001-11-21 10:59:49 +00:00
|
|
|
|
#ifndef _SVTOOLS_LINGUPROPS_HXX_
|
|
|
|
|
#include <svtools/linguprops.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SVTOOLS_LINGUCFG_HXX_
|
|
|
|
|
#include <svtools/lingucfg.hxx>
|
|
|
|
|
#endif
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#ifndef _SFXSMPLHINT_HXX //autogen
|
|
|
|
|
#include <svtools/smplhint.hxx>
|
|
|
|
|
#endif
|
2000-11-13 10:11:47 +00:00
|
|
|
|
#ifndef INCLUDED_SVTOOLS_PATHOPTIONS_HXX
|
|
|
|
|
#include <svtools/pathoptions.hxx>
|
|
|
|
|
#endif
|
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
|
|
|
|
|
#ifndef _SOT_EXCHANGE_HXX //autogen
|
|
|
|
|
#include <sot/exchange.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SV_MSGBOX_HXX //autogen
|
|
|
|
|
#include <vcl/msgbox.hxx>
|
|
|
|
|
#endif
|
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>
|
2001-03-23 07:00:39 +00:00
|
|
|
|
|
2003-05-22 12:50:09 +00:00
|
|
|
|
#ifndef COMPHELPER_ACCESSIBLE_TEXT_HELPER_HXX
|
|
|
|
|
#include <comphelper/accessibletexthelper.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#ifndef _SFXENUMITEM_HXX //autogen
|
|
|
|
|
#include <svtools/eitem.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SFX_WHITER_HXX //autogen
|
|
|
|
|
#include <svtools/whiter.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SFXINTITEM_HXX //autogen
|
|
|
|
|
#include <svtools/intitem.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SFXSTRITEM_HXX //autogen
|
|
|
|
|
#include <svtools/stritem.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SFXPTITEM_HXX //autogen
|
|
|
|
|
#include <svtools/ptitem.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _UNDO_HXX //autogen
|
|
|
|
|
#include <svtools/undo.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SFXITEMPOOL_HXX //autogen
|
|
|
|
|
#include <svtools/itempool.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef SVTOOLS_URIHELPER_HXX
|
|
|
|
|
#include <svtools/urihelper.hxx>
|
|
|
|
|
#endif
|
2000-11-08 13:49:23 +00:00
|
|
|
|
#ifndef _SVTOOLS_FSTATHELPER_HXX
|
|
|
|
|
#include <svtools/fstathelper.hxx>
|
|
|
|
|
#endif
|
2001-05-11 12:01:35 +00:00
|
|
|
|
#ifndef _TRANSFER_HXX
|
|
|
|
|
#include <svtools/transfer.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#ifndef _SFXDISPATCH_HXX //autogen
|
|
|
|
|
#include <sfx2/dispatch.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SFXDOCINF_HXX //autogen
|
|
|
|
|
#include <sfx2/docinf.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SFXDOCFILE_HXX //autogen
|
|
|
|
|
#include <sfx2/docfile.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SFXAPP_HXX //autogen
|
|
|
|
|
#include <sfx2/app.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SFXREQUEST_HXX //autogen
|
|
|
|
|
#include <sfx2/request.hxx>
|
|
|
|
|
#endif
|
2001-10-12 14:57:24 +00:00
|
|
|
|
#ifndef _SFXVIEWFRM_HXX
|
|
|
|
|
#include <sfx2/viewfrm.hxx>
|
|
|
|
|
#endif
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#ifndef _SFXECODE_HXX //autogen
|
|
|
|
|
#include <svtools/sfxecode.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SFX_PRINTER_HXX //autogen
|
|
|
|
|
#include <sfx2/printer.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SFX_DOCFILT_HACK_HXX
|
|
|
|
|
#include <sfx2/docfilt.hxx>
|
|
|
|
|
#endif
|
2001-03-08 08:24:49 +00:00
|
|
|
|
#ifndef _SFXITEMPOOL_HXX
|
|
|
|
|
#include <svtools/itempool.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _MyEDITENG_HXX
|
|
|
|
|
#include <svx/editeng.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _EEITEM_HXX
|
|
|
|
|
#include <svx/eeitem.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _EDITSTAT_HXX
|
|
|
|
|
#include <svx/editstat.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SVX_FONTITEM_HXX
|
|
|
|
|
#include <svx/fontitem.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _SVX_FHGTITEM_HXX
|
|
|
|
|
#include <svx/fhgtitem.hxx>
|
|
|
|
|
#endif
|
2001-11-21 10:59:49 +00:00
|
|
|
|
#ifndef _UNO_LINGU_HXX
|
|
|
|
|
#include <svx/unolingu.hxx>
|
|
|
|
|
#endif
|
2001-10-12 14:57:24 +00:00
|
|
|
|
#ifndef _SFXSLSTITM_HXX
|
|
|
|
|
#include <svtools/slstitm.hxx>
|
|
|
|
|
#endif
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
2001-11-21 10:59:49 +00:00
|
|
|
|
#ifndef _COM_SUN_STAR_UNO_ANY_H_
|
|
|
|
|
#include <com/sun/star/uno/Any.h>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef _COM_SUN_STAR_LANG_LOCALE_HPP_
|
|
|
|
|
#include <com/sun/star/lang/Locale.hpp>
|
|
|
|
|
#endif
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#ifndef STARMATH_HRC
|
|
|
|
|
#include <starmath.hrc>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef DOCUMENT_HXX
|
|
|
|
|
#include <document.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef UNOMODEL_HXX
|
|
|
|
|
#include <unomodel.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef CONFIG_HXX
|
|
|
|
|
#include <config.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef SYMBOL_HXX
|
|
|
|
|
#include <symbol.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef TOOLBOX_HXX
|
|
|
|
|
#include <toolbox.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef DIALOG_HXX
|
|
|
|
|
#include <dialog.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef ACTION_HXX
|
|
|
|
|
#include <action.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef VIEW_HXX
|
|
|
|
|
#include <view.hxx>
|
|
|
|
|
#endif
|
2001-03-23 07:00:39 +00:00
|
|
|
|
#ifndef UTILITY_HXX
|
|
|
|
|
#include <utility.hxx>
|
|
|
|
|
#endif
|
2000-09-18 16:07:07 +00:00
|
|
|
|
#ifndef FORMAT_HXX
|
|
|
|
|
#include <format.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
#ifndef MATHTYPE_HXX
|
|
|
|
|
#include <mathtype.hxx>
|
|
|
|
|
#endif
|
2000-11-15 09:47:20 +00:00
|
|
|
|
#ifndef MATHML_HXX
|
|
|
|
|
#include <mathml.hxx>
|
|
|
|
|
#endif
|
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
const String &SmDocShell::GetComment() const
|
|
|
|
|
{
|
2004-11-26 13:23:53 +00:00
|
|
|
|
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::GetComment" );
|
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
return ((SmDocShell *) this)->GetDocInfo().GetComment();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
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
|
|
|
|
|
{ LANGUAGE_ARABIC, LANGUAGE_NONE,
|
|
|
|
|
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 );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SmDocShell::SmDocShell(SfxObjectCreateMode eMode) :
|
|
|
|
|
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());
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
delete 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);
|
|
|
|
|
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
|
|
|
|
{
|
2001-03-29 18:40:27 +00:00
|
|
|
|
if( !pTree )
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
{
|
2001-03-29 18:40:27 +00:00
|
|
|
|
if( !pTree )
|
|
|
|
|
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,
|
2004-10-04 17:03:04 +00:00
|
|
|
|
sal_Int32 nFileFormat ) 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);
|
|
|
|
|
*pFormat = 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
|
|
|
|
|