2010-10-14 08:30:41 +02:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2012-07-04 15:25:45 +01:00
|
|
|
/*
|
|
|
|
* This file is part of the LibreOffice project.
|
|
|
|
*
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
*
|
|
|
|
* This file incorporates work covered by the following license notice:
|
|
|
|
*
|
|
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
|
|
* with this work for additional information regarding copyright
|
|
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
|
|
* except in compliance with the License. You may obtain a copy of
|
|
|
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
|
|
*/
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2003-04-24 16:29:42 +00:00
|
|
|
#include <com/sun/star/accessibility/AccessibleEventId.hpp>
|
2009-05-19 09:31:27 +00:00
|
|
|
#include <com/sun/star/lang/Locale.hpp>
|
|
|
|
#include <com/sun/star/uno/Any.h>
|
|
|
|
|
|
|
|
#include <comphelper/accessibletexthelper.hxx>
|
|
|
|
#include <comphelper/processfactory.hxx>
|
|
|
|
#include <comphelper/storagehelper.hxx>
|
2015-05-01 14:15:42 +09:00
|
|
|
#include <rtl/ustrbuf.hxx>
|
2002-05-31 13:23:22 +00:00
|
|
|
#include <rtl/ustring.hxx>
|
2010-11-03 15:50:00 +01:00
|
|
|
#include <unotools/eventcfg.hxx>
|
|
|
|
#include <sfx2/event.hxx>
|
2009-05-19 09:31:27 +00:00
|
|
|
#include <sfx2/app.hxx>
|
|
|
|
#include <sfx2/dispatch.hxx>
|
|
|
|
#include <sfx2/docfile.hxx>
|
|
|
|
#include <sfx2/docfilt.hxx>
|
|
|
|
#include <sfx2/fcontnr.hxx>
|
|
|
|
#include <sfx2/msg.hxx>
|
|
|
|
#include <sfx2/objface.hxx>
|
|
|
|
#include <sfx2/printer.hxx>
|
|
|
|
#include <sfx2/request.hxx>
|
|
|
|
#include <sfx2/viewfrm.hxx>
|
2013-04-19 18:08:13 -04:00
|
|
|
#include <comphelper/classids.hxx>
|
2000-09-18 16:07:07 +00:00
|
|
|
#include <sot/exchange.hxx>
|
2009-05-19 09:31:27 +00:00
|
|
|
#include <sot/formats.hxx>
|
|
|
|
#include <sot/storage.hxx>
|
2009-10-16 00:05:16 +02:00
|
|
|
#include <svl/eitem.hxx>
|
|
|
|
#include <svl/fstathelper.hxx>
|
|
|
|
#include <svl/intitem.hxx>
|
|
|
|
#include <svl/itempool.hxx>
|
2009-10-06 07:38:24 +02:00
|
|
|
#include <unotools/lingucfg.hxx>
|
|
|
|
#include <unotools/linguprops.hxx>
|
|
|
|
#include <unotools/pathoptions.hxx>
|
2009-10-16 00:05:16 +02:00
|
|
|
#include <svl/ptitem.hxx>
|
2009-05-19 09:31:27 +00:00
|
|
|
#include <svtools/sfxecode.hxx>
|
2009-10-16 00:05:16 +02:00
|
|
|
#include <svl/slstitm.hxx>
|
2016-09-22 22:20:48 +02:00
|
|
|
#include <svl/hint.hxx>
|
2009-10-16 00:05:16 +02:00
|
|
|
#include <svl/stritem.hxx>
|
2009-05-19 09:31:27 +00:00
|
|
|
#include <svtools/transfer.hxx>
|
2009-10-16 00:05:16 +02:00
|
|
|
#include <svl/undo.hxx>
|
|
|
|
#include <svl/urihelper.hxx>
|
|
|
|
#include <svl/whiter.hxx>
|
2010-01-08 18:32:51 +01:00
|
|
|
#include <editeng/editeng.hxx>
|
|
|
|
#include <editeng/editstat.hxx>
|
|
|
|
#include <editeng/eeitem.hxx>
|
|
|
|
#include <editeng/fhgtitem.hxx>
|
|
|
|
#include <editeng/fontitem.hxx>
|
|
|
|
#include <editeng/unolingu.hxx>
|
2009-05-19 09:31:27 +00:00
|
|
|
#include <ucbhelper/content.hxx>
|
|
|
|
#include <vcl/mapmod.hxx>
|
2010-11-23 18:41:04 +01:00
|
|
|
#include <tools/mapunit.hxx>
|
2009-05-19 09:31:27 +00:00
|
|
|
#include <vcl/msgbox.hxx>
|
2014-01-02 23:52:37 +01:00
|
|
|
#include <vcl/settings.hxx>
|
|
|
|
|
2010-01-08 18:32:51 +01:00
|
|
|
#include <sfx2/sfx.hrc>
|
2000-09-18 16:07:07 +00:00
|
|
|
#include <document.hxx>
|
2009-05-19 09:31:27 +00:00
|
|
|
#include <action.hxx>
|
|
|
|
#include <dialog.hxx>
|
|
|
|
#include <format.hxx>
|
|
|
|
#include <smdll.hxx>
|
|
|
|
#include <starmath.hrc>
|
2000-09-18 16:07:07 +00:00
|
|
|
#include <symbol.hxx>
|
2009-05-19 09:31:27 +00:00
|
|
|
#include <unomodel.hxx>
|
2001-03-23 07:00:39 +00:00
|
|
|
#include <utility.hxx>
|
2009-05-19 09:31:27 +00:00
|
|
|
#include <view.hxx>
|
|
|
|
#include "mathtype.hxx"
|
2011-11-15 13:51:36 +01:00
|
|
|
#include "ooxmlexport.hxx"
|
2011-11-18 18:09:43 +01:00
|
|
|
#include "ooxmlimport.hxx"
|
2012-07-25 11:31:03 +02:00
|
|
|
#include "rtfexport.hxx"
|
2009-05-19 09:31:27 +00:00
|
|
|
#include "mathmlimport.hxx"
|
|
|
|
#include "mathmlexport.hxx"
|
2010-01-08 18:32:51 +01:00
|
|
|
#include <sfx2/sfxsids.hrc>
|
|
|
|
#include <svx/svxids.hrc>
|
2010-10-01 22:04:50 +02:00
|
|
|
#include "cursor.hxx"
|
2010-10-25 11:48:17 +02:00
|
|
|
#include <tools/diagnose_ex.h>
|
2010-10-23 17:52:33 +01:00
|
|
|
#include "visitors.hxx"
|
2010-11-29 15:59:10 +00:00
|
|
|
#include "accessibility.hxx"
|
2015-05-26 08:38:37 +02:00
|
|
|
#include "cfgitem.hxx"
|
2015-02-14 20:30:36 +00:00
|
|
|
#include <memory>
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
using namespace ::com::sun::star;
|
2009-05-19 09:31:27 +00:00
|
|
|
using namespace ::com::sun::star::accessibility;
|
2000-09-18 16:07:07 +00:00
|
|
|
using namespace ::com::sun::star::uno;
|
|
|
|
|
|
|
|
#define SmDocShell
|
|
|
|
#include "smslots.hxx"
|
|
|
|
|
|
|
|
|
2014-11-25 10:12:55 +00:00
|
|
|
SFX_IMPL_SUPERCLASS_INTERFACE(SmDocShell, SfxObjectShell)
|
2014-04-18 17:25:30 +02:00
|
|
|
|
|
|
|
void SmDocShell::InitInterface_Impl()
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2016-01-28 13:38:46 +02:00
|
|
|
GetStaticInterface()->RegisterPopupMenu("view");
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
2015-04-10 09:47:28 +02:00
|
|
|
SFX_IMPL_OBJECTFACTORY(SmDocShell, SvGlobalName(SO3_SM_CLASSID), SfxObjectShellFlags::STD_NORMAL, "smath" )
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2015-06-24 12:06:34 +02:00
|
|
|
void SmDocShell::Notify(SfxBroadcaster&, const SfxHint& rHint)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2016-09-22 22:20:48 +02:00
|
|
|
switch (rHint.GetId())
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
case HINT_FORMATCHANGED:
|
2010-11-06 01:33:05 +01:00
|
|
|
SetFormulaArranged(false);
|
2010-07-28 09:46:36 +02:00
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
mnModifyCount++; //! see comment for SID_GAPHIC_SM in SmDocShell::GetState
|
2010-07-28 09:46:36 +02:00
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
Repaint();
|
2000-09-18 16:07:07 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void SmDocShell::LoadSymbols()
|
|
|
|
{
|
2009-09-28 10:46:54 +00:00
|
|
|
SmModule *pp = SM_MOD();
|
|
|
|
pp->GetSymbolManager().Load();
|
2001-04-19 13:47:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-09-03 18:29:30 +02:00
|
|
|
const OUString SmDocShell::GetComment() const
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2008-02-26 13:43:56 +00:00
|
|
|
uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
|
2015-04-13 12:35:57 +02:00
|
|
|
GetModel(), uno::UNO_QUERY_THROW);
|
2008-02-26 13:43:56 +00:00
|
|
|
uno::Reference<document::XDocumentProperties> xDocProps(
|
|
|
|
xDPS->getDocumentProperties());
|
|
|
|
return xDocProps->getDescription();
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-01-21 14:32:09 +01:00
|
|
|
void SmDocShell::SetText(const OUString& rBuffer)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
if (rBuffer != maText)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2010-11-06 01:33:05 +01:00
|
|
|
bool bIsEnabled = IsEnableSetModified();
|
2002-01-30 10:47:52 +00:00
|
|
|
if( bIsEnabled )
|
2010-11-06 01:33:05 +01:00
|
|
|
EnableSetModified( false );
|
2002-01-30 10:47:52 +00:00
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
maText = rBuffer;
|
2010-11-06 01:33:05 +01:00
|
|
|
SetFormulaArranged( false );
|
2005-04-04 07:04:42 +00:00
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
Parse();
|
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);
|
2015-04-09 15:24:21 +02:00
|
|
|
if ( SfxObjectCreateMode::EMBEDDED == GetCreateMode() )
|
2010-11-03 15:50:00 +01:00
|
|
|
{
|
|
|
|
// have SwOleClient::FormatChanged() to align the modified formula properly
|
|
|
|
// even if the vis area does not change (e.g. when formula text changes from
|
|
|
|
// "{a over b + c} over d" to "d over {a over b + c}"
|
2015-04-28 15:01:43 +02:00
|
|
|
SfxGetpApp()->NotifyEvent(SfxEventHint( SFX_EVENT_VISAREACHANGED, GlobalEventConfig::GetEventName(GlobalEventId::VISAREACHANGED), this));
|
2010-11-03 15:50:00 +01:00
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
Repaint();
|
2010-11-03 15:50:00 +01:00
|
|
|
}
|
2002-11-20 07:54:41 +00:00
|
|
|
else
|
|
|
|
pViewSh->GetGraphicWindow().Invalidate();
|
|
|
|
}
|
2002-01-30 10:47:52 +00:00
|
|
|
|
|
|
|
if ( bIsEnabled )
|
|
|
|
EnableSetModified( bIsEnabled );
|
2016-07-22 14:35:27 +02:00
|
|
|
SetModified();
|
2002-05-31 13:23:22 +00:00
|
|
|
|
|
|
|
// launch accessible event if necessary
|
2015-11-10 10:24:24 +01:00
|
|
|
SmGraphicAccessible *pAcc = pViewSh ? pViewSh->GetGraphicWindow().GetAccessible_Impl() : nullptr;
|
2002-05-31 13:23:22 +00:00
|
|
|
if (pAcc)
|
|
|
|
{
|
2003-05-22 12:50:09 +00:00
|
|
|
Any aOldValue, aNewValue;
|
2016-05-30 14:22:15 +09:00
|
|
|
if ( comphelper::OCommonAccessibleText::implInitTextChangedEvent( maText, rBuffer, aOldValue, aNewValue ) )
|
2003-05-22 12:50:09 +00:00
|
|
|
{
|
|
|
|
pAcc->LaunchEvent( AccessibleEventId::TEXT_CHANGED,
|
|
|
|
aOldValue, aNewValue );
|
|
|
|
}
|
2002-05-31 13:23:22 +00:00
|
|
|
}
|
2005-01-31 07:29:25 +00:00
|
|
|
|
2015-04-09 15:24:21 +02:00
|
|
|
if ( GetCreateMode() == SfxObjectCreateMode::EMBEDDED )
|
2015-11-10 10:24:24 +01:00
|
|
|
OnDocumentPrinterChanged(nullptr);
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void SmDocShell::SetFormat(SmFormat& rFormat)
|
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
maFormat = rFormat;
|
2010-11-06 01:33:05 +01:00
|
|
|
SetFormulaArranged( false );
|
2016-07-22 14:35:27 +02:00
|
|
|
SetModified();
|
2010-07-28 09:46:36 +02:00
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
mnModifyCount++; //! see comment for SID_GAPHIC_SM in SmDocShell::GetState
|
2010-07-28 09:46:36 +02:00
|
|
|
|
|
|
|
// don't use SmGetActiveView since the view shell might not be active (0 pointer)
|
|
|
|
// if for example the Basic Macro dialog currently has the focus. Thus:
|
|
|
|
SfxViewFrame* pFrm = SfxViewFrame::GetFirst( this );
|
|
|
|
while (pFrm)
|
|
|
|
{
|
|
|
|
pFrm->GetBindings().Invalidate(SID_GAPHIC_SM);
|
|
|
|
pFrm = SfxViewFrame::GetNext( *pFrm, this );
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
2016-07-18 09:22:27 +02:00
|
|
|
OUString const & SmDocShell::GetAccessibleText()
|
2002-05-24 06:48:49 +00:00
|
|
|
{
|
2016-05-28 09:32:03 +09:00
|
|
|
ArrangeFormula();
|
2016-05-30 14:22:15 +09:00
|
|
|
if (maAccText.isEmpty())
|
2002-05-31 13:23:22 +00:00
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
OSL_ENSURE( mpTree, "Tree missing" );
|
|
|
|
if (mpTree)
|
2012-10-29 19:15:56 +04:00
|
|
|
{
|
|
|
|
OUStringBuffer aBuf;
|
2016-05-30 14:22:15 +09:00
|
|
|
mpTree->GetAccessibleText(aBuf);
|
|
|
|
maAccText = aBuf.makeStringAndClear();
|
2012-10-29 19:15:56 +04:00
|
|
|
}
|
2002-05-31 13:23:22 +00:00
|
|
|
}
|
2016-05-30 14:22:15 +09:00
|
|
|
return maAccText;
|
2002-05-24 06:48:49 +00:00
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
void SmDocShell::Parse()
|
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
delete mpTree;
|
2007-06-27 11:39:58 +00:00
|
|
|
ReplaceBadChars();
|
2016-05-30 14:22:15 +09:00
|
|
|
mpTree = maParser.Parse(maText);
|
|
|
|
mnModifyCount++; //! see comment for SID_GAPHIC_SM in SmDocShell::GetState
|
2010-11-06 01:33:05 +01:00
|
|
|
SetFormulaArranged( false );
|
2010-10-01 22:04:50 +02:00
|
|
|
InvalidateCursor();
|
2016-05-30 14:22:15 +09:00
|
|
|
maUsedSymbols = maParser.GetUsedSymbols();
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SmDocShell::ArrangeFormula()
|
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
if (mbFormulaArranged)
|
2005-04-04 07:04:42 +00:00
|
|
|
return;
|
|
|
|
|
2012-08-03 10:22:14 +02:00
|
|
|
// Only for the duration of the existence of this object the correct settings
|
|
|
|
// at the printer are guaranteed!
|
2000-09-18 16:07:07 +00:00
|
|
|
SmPrinterAccess aPrtAcc(*this);
|
2003-04-01 08:45:05 +00:00
|
|
|
OutputDevice* pOutDev = aPrtAcc.GetRefDev();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2016-03-17 12:03:50 +05:30
|
|
|
SAL_WARN_IF( !pOutDev, "starmath", "!! SmDocShell::ArrangeFormula: reference device missing !!");
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2013-03-03 17:11:39 +01:00
|
|
|
// if necessary get another OutputDevice for which we format
|
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
|
|
|
{
|
2009-09-28 10:46:54 +00:00
|
|
|
pOutDev = &SM_MOD()->GetDefaultVirtualDev();
|
2016-09-20 16:41:39 +02:00
|
|
|
pOutDev->SetMapMode( MapMode(MapUnit::Map100thMM) );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
}
|
2016-09-20 16:41:39 +02:00
|
|
|
OSL_ENSURE(pOutDev->GetMapMode().GetMapUnit() == MapUnit::Map100thMM,
|
2000-09-18 16:07:07 +00:00
|
|
|
"Sm : falscher MapMode");
|
|
|
|
|
|
|
|
const SmFormat &rFormat = GetFormat();
|
2016-05-30 14:22:15 +09:00
|
|
|
mpTree->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
|
2016-05-30 14:00:22 +02:00
|
|
|
ComplexTextLayoutFlags nLayoutMode = pOutDev->GetLayoutMode();
|
|
|
|
pOutDev->SetLayoutMode( ComplexTextLayoutFlags::Default );
|
2011-01-14 17:19:25 +01:00
|
|
|
sal_Int16 nDigitLang = pOutDev->GetDigitLanguage();
|
2003-09-04 10:42:11 +00:00
|
|
|
pOutDev->SetDigitLanguage( LANGUAGE_ENGLISH );
|
2014-02-25 20:41:20 +01:00
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
mpTree->Arrange(*pOutDev, rFormat);
|
2014-02-25 20:41:20 +01:00
|
|
|
|
2003-09-04 10:42:11 +00:00
|
|
|
pOutDev->SetLayoutMode( nLayoutMode );
|
|
|
|
pOutDev->SetDigitLanguage( nDigitLang );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2010-11-06 01:33:05 +01:00
|
|
|
SetFormulaArranged(true);
|
2002-05-31 13:23:22 +00:00
|
|
|
|
|
|
|
// invalidate accessible text
|
2016-05-30 14:22:15 +09:00
|
|
|
maAccText.clear();
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2011-06-28 16:41:42 +01:00
|
|
|
void SetEditEngineDefaultFonts(SfxItemPool &rEditEngineItemPool)
|
2001-03-08 08:24:49 +00:00
|
|
|
{
|
2014-02-25 20:41:20 +01:00
|
|
|
|
2001-11-21 10:59:49 +00:00
|
|
|
// set fonts to be used
|
2014-02-25 20:41:20 +01:00
|
|
|
|
2001-11-21 10:59:49 +00:00
|
|
|
SvtLinguOptions aOpt;
|
|
|
|
SvtLinguConfig().GetOptions( aOpt );
|
2014-02-25 20:41:20 +01:00
|
|
|
|
2001-11-21 10:59:49 +00:00
|
|
|
struct FontDta {
|
2011-01-14 17:19:25 +01:00
|
|
|
sal_Int16 nFallbackLang;
|
|
|
|
sal_Int16 nLang;
|
2015-05-05 09:58:47 +02:00
|
|
|
DefaultFontType nFontType;
|
2011-01-14 17:19:25 +01:00
|
|
|
sal_uInt16 nFontInfoId;
|
2001-11-21 10:59:49 +00:00
|
|
|
} aTable[3] =
|
|
|
|
{
|
|
|
|
// info to get western font to be used
|
|
|
|
{ LANGUAGE_ENGLISH_US, LANGUAGE_NONE,
|
2015-05-05 09:58:47 +02:00
|
|
|
DefaultFontType::FIXED, EE_CHAR_FONTINFO },
|
2001-11-21 10:59:49 +00:00
|
|
|
// info to get CJK font to be used
|
|
|
|
{ LANGUAGE_JAPANESE, LANGUAGE_NONE,
|
2015-05-05 09:58:47 +02:00
|
|
|
DefaultFontType::CJK_TEXT, EE_CHAR_FONTINFO_CJK },
|
2001-11-21 10:59:49 +00:00
|
|
|
// info to get CTL font to be used
|
2009-01-06 12:54:16 +00:00
|
|
|
{ LANGUAGE_ARABIC_SAUDI_ARABIA, LANGUAGE_NONE,
|
2015-05-05 09:58:47 +02:00
|
|
|
DefaultFontType::CTL_TEXT, EE_CHAR_FONTINFO_CTL }
|
2001-11-21 10:59:49 +00:00
|
|
|
};
|
|
|
|
aTable[0].nLang = aOpt.nDefaultLanguage;
|
|
|
|
aTable[1].nLang = aOpt.nDefaultLanguage_CJK;
|
|
|
|
aTable[2].nLang = aOpt.nDefaultLanguage_CTL;
|
2014-02-25 20:41:20 +01:00
|
|
|
|
2016-05-10 14:39:07 +02:00
|
|
|
for (FontDta & rFntDta : aTable)
|
2001-11-21 10:59:49 +00:00
|
|
|
{
|
|
|
|
LanguageType nLang = (LANGUAGE_NONE == rFntDta.nLang) ?
|
|
|
|
rFntDta.nFallbackLang : rFntDta.nLang;
|
2014-09-16 10:09:58 +02:00
|
|
|
vcl::Font aFont = OutputDevice::GetDefaultFont(
|
2015-05-19 14:37:07 +02:00
|
|
|
rFntDta.nFontType, nLang, GetDefaultFontFlags::OnlyOne );
|
2005-05-03 12:51:39 +00:00
|
|
|
rEditEngineItemPool.SetPoolDefaultItem(
|
2016-01-21 03:30:10 +11:00
|
|
|
SvxFontItem( aFont.GetFamilyType(), aFont.GetFamilyName(),
|
2001-11-21 10:59:49 +00:00
|
|
|
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(
|
2016-09-20 16:41:39 +02:00
|
|
|
Size( 0, 11 ), MapMode( MapUnit::MapPoint ) ).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()
|
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
if (!mpEditEngine)
|
2005-05-03 12:51:39 +00:00
|
|
|
{
|
|
|
|
//!
|
|
|
|
//! see also SmEditWindow::DataChanged !
|
|
|
|
//!
|
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
mpEditEngineItemPool = EditEngine::CreatePool();
|
2005-05-03 12:51:39 +00:00
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
SetEditEngineDefaultFonts(*mpEditEngineItemPool);
|
2001-03-08 08:24:49 +00:00
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
mpEditEngine = new EditEngine( mpEditEngineItemPool );
|
2001-03-08 08:24:49 +00:00
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
mpEditEngine->EnableUndo( true );
|
|
|
|
mpEditEngine->SetDefTab( sal_uInt16(
|
2015-11-06 09:37:28 +01:00
|
|
|
Application::GetDefaultDevice()->GetTextWidth("XXXX")) );
|
2001-03-08 08:24:49 +00:00
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
mpEditEngine->SetControlWord(
|
|
|
|
(mpEditEngine->GetControlWord() | EEControlBits::AUTOINDENTING) &
|
2015-03-24 16:05:55 +02:00
|
|
|
EEControlBits(~EEControlBits::UNDOATTRIBS) &
|
|
|
|
EEControlBits(~EEControlBits::PASTESPECIAL) );
|
2001-03-08 08:24:49 +00:00
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
mpEditEngine->SetWordDelimiters(" .=+-*/(){}[];\"");
|
2016-09-20 16:41:39 +02:00
|
|
|
mpEditEngine->SetRefMapMode( MapUnit::MapPixel );
|
2001-03-08 08:24:49 +00:00
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
mpEditEngine->SetPaperSize( Size( 800, 0 ) );
|
2001-03-08 08:24:49 +00:00
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
mpEditEngine->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)
|
2013-09-03 18:29:30 +02:00
|
|
|
OUString aTxt( GetText() );
|
|
|
|
if (!aTxt.isEmpty())
|
2016-05-30 14:22:15 +09:00
|
|
|
mpEditEngine->SetText( aTxt );
|
2001-07-23 10:59:10 +00:00
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
mpEditEngine->ClearModifyFlag();
|
2001-03-08 08:24:49 +00:00
|
|
|
|
|
|
|
}
|
2016-05-30 14:22:15 +09:00
|
|
|
return *mpEditEngine;
|
2001-03-08 08:24:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SfxItemPool& SmDocShell::GetEditEngineItemPool()
|
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
if (!mpEditEngineItemPool)
|
2001-03-08 08:24:49 +00:00
|
|
|
GetEditEngine();
|
2016-05-30 14:22:15 +09:00
|
|
|
assert(mpEditEngineItemPool && "EditEngineItemPool missing");
|
|
|
|
return *mpEditEngineItemPool;
|
2001-03-08 08:24:49 +00:00
|
|
|
}
|
|
|
|
|
2010-11-06 01:33:05 +01:00
|
|
|
void SmDocShell::DrawFormula(OutputDevice &rDev, Point &rPosition, bool bDrawSelection)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
if (!mpTree)
|
2000-09-18 16:07:07 +00:00
|
|
|
Parse();
|
2016-05-30 14:22:15 +09:00
|
|
|
OSL_ENSURE(mpTree, "Sm : NULL pointer");
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2016-05-28 09:32:03 +09:00
|
|
|
ArrangeFormula();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2012-08-03 10:22:14 +02:00
|
|
|
// Problem: What happens to WYSIWYG? While we're active inplace, we don't have a reference
|
|
|
|
// device and aren't aligned to that either. So now there can be a difference between the
|
|
|
|
// VisArea (i.e. the size within the client) and the current size.
|
|
|
|
// Idea: The difference could be adapted with SmNod::SetSize (no long-term solution)
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
rPosition.X() += maFormat.GetDistance( DIS_LEFTSPACE );
|
|
|
|
rPosition.Y() += maFormat.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.
|
2015-05-19 10:43:01 +02:00
|
|
|
DrawModeFlags nOldDrawMode = DrawModeFlags::Default;
|
2010-11-06 01:33:05 +01:00
|
|
|
bool bRestoreDrawMode = false;
|
2002-07-12 06:26:02 +00:00
|
|
|
if (OUTDEV_WINDOW == rDev.GetOutDevType() &&
|
2014-12-03 10:43:00 +02:00
|
|
|
static_cast<vcl::Window &>(rDev).GetSettings().GetStyleSettings().GetHighContrastMode())
|
2002-07-12 06:26:02 +00:00
|
|
|
{
|
|
|
|
nOldDrawMode = rDev.GetDrawMode();
|
2015-05-19 10:43:01 +02:00
|
|
|
rDev.SetDrawMode( DrawModeFlags::Default );
|
2010-11-06 01:33:05 +01:00
|
|
|
bRestoreDrawMode = true;
|
2002-07-12 06:26:02 +00:00
|
|
|
}
|
|
|
|
|
2003-09-04 10:42:11 +00:00
|
|
|
// format/draw formulas always from left to right
|
|
|
|
// and numbers should not be converted
|
2016-05-30 14:00:22 +02:00
|
|
|
ComplexTextLayoutFlags nLayoutMode = rDev.GetLayoutMode();
|
|
|
|
rDev.SetLayoutMode( ComplexTextLayoutFlags::Default );
|
2011-01-14 17:19:25 +01:00
|
|
|
sal_Int16 nDigitLang = rDev.GetDigitLanguage();
|
2003-09-04 10:42:11 +00:00
|
|
|
rDev.SetDigitLanguage( LANGUAGE_ENGLISH );
|
2010-10-01 22:04:50 +02:00
|
|
|
|
|
|
|
//Set selection if any
|
2016-05-30 14:22:15 +09:00
|
|
|
if(mpCursor && bDrawSelection){
|
|
|
|
mpCursor->AnnotateSelection();
|
|
|
|
SmSelectionDrawingVisitor(rDev, mpTree, rPosition);
|
2010-10-01 22:04:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
//Drawing using visitor
|
2016-05-30 14:22:15 +09:00
|
|
|
SmDrawingVisitor(rDev, rPosition, mpTree);
|
2010-10-01 22:04:50 +02:00
|
|
|
|
2014-02-25 20:41:20 +01:00
|
|
|
|
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()
|
|
|
|
{
|
|
|
|
Size aRet;
|
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
if (!mpTree)
|
2000-09-18 16:07:07 +00:00
|
|
|
Parse();
|
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
if (mpTree)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2016-05-28 09:32:03 +09:00
|
|
|
ArrangeFormula();
|
2016-05-30 14:22:15 +09:00
|
|
|
aRet = mpTree->GetSize();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
if ( !aRet.Width() )
|
|
|
|
aRet.Width() = 2000;
|
|
|
|
else
|
2016-05-30 14:22:15 +09:00
|
|
|
aRet.Width() += maFormat.GetDistance( DIS_LEFTSPACE ) +
|
|
|
|
maFormat.GetDistance( DIS_RIGHTSPACE );
|
2000-09-18 16:07:07 +00:00
|
|
|
if ( !aRet.Height() )
|
|
|
|
aRet.Height() = 1000;
|
|
|
|
else
|
2016-05-30 14:22:15 +09:00
|
|
|
aRet.Height() += maFormat.GetDistance( DIS_TOPSPACE ) +
|
|
|
|
maFormat.GetDistance( DIS_BOTTOMSPACE );
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return aRet;
|
|
|
|
}
|
|
|
|
|
2010-10-01 22:04:50 +02:00
|
|
|
void SmDocShell::InvalidateCursor(){
|
2016-05-30 14:22:15 +09:00
|
|
|
mpCursor.reset();
|
2010-10-01 22:04:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
SmCursor& SmDocShell::GetCursor(){
|
2016-05-30 14:22:15 +09:00
|
|
|
if(!mpCursor)
|
|
|
|
mpCursor.reset(new SmCursor(mpTree, this));
|
|
|
|
return *mpCursor;
|
2010-10-01 22:04:50 +02:00
|
|
|
}
|
|
|
|
|
2015-12-22 12:00:49 +09:00
|
|
|
bool SmDocShell::HasCursor()
|
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
return mpCursor.get() != nullptr;
|
2015-12-22 12:00:49 +09:00
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
|
|
|
|
SmPrinterAccess::SmPrinterAccess( SmDocShell &rDocShell )
|
|
|
|
{
|
2015-04-29 13:48:06 +02:00
|
|
|
pPrinter = rDocShell.GetPrt();
|
|
|
|
if ( pPrinter )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2014-10-06 14:48:16 +02:00
|
|
|
pPrinter->Push( PushFlags::MAPMODE );
|
2015-04-09 15:24:21 +02:00
|
|
|
if ( SfxObjectCreateMode::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.
|
2016-01-09 22:55:28 +01:00
|
|
|
//!If it is a document with its own printer the MapMode should
|
2000-09-18 16:07:07 +00:00
|
|
|
//!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();
|
2016-09-20 16:41:39 +02:00
|
|
|
if ( MapUnit::Map100thMM != eOld )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
MapMode aMap( pPrinter->GetMapMode() );
|
2016-09-20 16:41:39 +02:00
|
|
|
aMap.SetMapUnit( MapUnit::Map100thMM );
|
2000-09-18 16:07:07 +00:00
|
|
|
Point aTmp( aMap.GetOrigin() );
|
2016-09-20 16:41:39 +02:00
|
|
|
aTmp.X() = OutputDevice::LogicToLogic( aTmp.X(), eOld, MapUnit::Map100thMM );
|
|
|
|
aTmp.Y() = OutputDevice::LogicToLogic( aTmp.Y(), eOld, MapUnit::Map100thMM );
|
2000-09-18 16:07:07 +00:00
|
|
|
aMap.SetOrigin( aTmp );
|
|
|
|
pPrinter->SetMapMode( aMap );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2015-03-18 20:52:22 +00:00
|
|
|
if ( !!(pRefDev = rDocShell.GetRefDev()) && pPrinter.get() != pRefDev.get() )
|
2003-04-01 08:45:05 +00:00
|
|
|
{
|
2014-10-06 14:48:16 +02:00
|
|
|
pRefDev->Push( PushFlags::MAPMODE );
|
2015-04-09 15:24:21 +02:00
|
|
|
if ( SfxObjectCreateMode::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.
|
2016-01-09 22:55:28 +01:00
|
|
|
//!If it is a document with its own printer the MapMode should
|
2003-04-01 08:45:05 +00:00
|
|
|
//!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();
|
2016-09-20 16:41:39 +02:00
|
|
|
if ( MapUnit::Map100thMM != eOld )
|
2003-04-01 08:45:05 +00:00
|
|
|
{
|
|
|
|
MapMode aMap( pRefDev->GetMapMode() );
|
2016-09-20 16:41:39 +02:00
|
|
|
aMap.SetMapUnit( MapUnit::Map100thMM );
|
2003-04-01 08:45:05 +00:00
|
|
|
Point aTmp( aMap.GetOrigin() );
|
2016-09-20 16:41:39 +02:00
|
|
|
aTmp.X() = OutputDevice::LogicToLogic( aTmp.X(), eOld, MapUnit::Map100thMM );
|
|
|
|
aTmp.Y() = OutputDevice::LogicToLogic( aTmp.Y(), eOld, MapUnit::Map100thMM );
|
2003-04-01 08:45:05 +00:00
|
|
|
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
|
|
|
{
|
2015-05-14 13:51:36 +09:00
|
|
|
if (SfxObjectCreateMode::EMBEDDED == GetCreateMode())
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2012-08-03 10:22:14 +02:00
|
|
|
// Normally the server provides the printer. But if it doesn't provide one (e.g. because
|
|
|
|
// there is no connection) it still can be the case that we know the printer because it
|
|
|
|
// has been passed on by the server in OnDocumentPrinterChanged and being kept temporarily.
|
2015-05-14 13:51:36 +09:00
|
|
|
Printer* pPrt = GetDocumentPrinter();
|
2016-05-30 14:22:15 +09:00
|
|
|
if (!pPrt && mpTmpPrinter)
|
|
|
|
pPrt = mpTmpPrinter;
|
2000-09-18 16:07:07 +00:00
|
|
|
return pPrt;
|
|
|
|
}
|
2016-05-30 14:22:15 +09:00
|
|
|
else if (!mpPrinter)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2015-05-14 13:51:36 +09:00
|
|
|
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,
|
|
|
|
SID_SAVE_ONLY_USED_SYMBOLS, SID_SAVE_ONLY_USED_SYMBOLS,
|
2015-11-02 21:43:24 -02:00
|
|
|
SID_AUTO_CLOSE_BRACKETS, SID_AUTO_CLOSE_BRACKETS,
|
2015-05-14 13:51:36 +09:00
|
|
|
0);
|
2009-09-28 10:46:54 +00:00
|
|
|
SmModule *pp = SM_MOD();
|
2000-09-18 16:07:07 +00:00
|
|
|
pp->GetConfig()->ConfigToItemSet(*pOptions);
|
2016-05-30 14:22:15 +09:00
|
|
|
mpPrinter = VclPtr<SfxPrinter>::Create(pOptions);
|
2016-09-20 16:41:39 +02:00
|
|
|
mpPrinter->SetMapMode(MapMode(MapUnit::Map100thMM));
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
2016-05-30 14:22:15 +09:00
|
|
|
return mpPrinter;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
2003-04-01 08:45:05 +00:00
|
|
|
OutputDevice* SmDocShell::GetRefDev()
|
|
|
|
{
|
2015-05-14 13:51:36 +09:00
|
|
|
if (SfxObjectCreateMode::EMBEDDED == GetCreateMode())
|
2003-04-01 08:45:05 +00:00
|
|
|
{
|
|
|
|
OutputDevice* pOutDev = GetDocumentRefDev();
|
2015-05-14 13:51:36 +09:00
|
|
|
if (pOutDev)
|
2003-04-01 08:45:05 +00:00
|
|
|
return pOutDev;
|
|
|
|
}
|
|
|
|
|
|
|
|
return GetPrt();
|
|
|
|
}
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
void SmDocShell::SetPrinter( SfxPrinter *pNew )
|
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
mpPrinter.disposeAndClear();
|
|
|
|
mpPrinter = pNew; //Transfer ownership
|
2016-09-20 16:41:39 +02:00
|
|
|
mpPrinter->SetMapMode( MapMode(MapUnit::Map100thMM) );
|
2010-11-06 01:33:05 +01:00
|
|
|
SetFormulaArranged(false);
|
2004-11-15 15:42:35 +00:00
|
|
|
Repaint();
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void SmDocShell::OnDocumentPrinterChanged( Printer *pPrt )
|
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
mpTmpPrinter = pPrt;
|
2010-11-06 01:33:05 +01:00
|
|
|
SetFormulaArranged(false);
|
2000-09-18 16:07:07 +00:00
|
|
|
Size aOldSize = GetVisArea().GetSize();
|
2004-11-15 15:42:35 +00:00
|
|
|
Repaint();
|
2016-05-30 14:22:15 +09:00
|
|
|
if( aOldSize != GetVisArea().GetSize() && !maText.isEmpty() )
|
2016-07-22 14:35:27 +02:00
|
|
|
SetModified();
|
2016-05-30 14:22:15 +09:00
|
|
|
mpTmpPrinter = nullptr;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
void SmDocShell::Repaint()
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2010-11-06 01:33:05 +01:00
|
|
|
bool bIsEnabled = IsEnableSetModified();
|
2015-05-14 13:51:36 +09:00
|
|
|
if (bIsEnabled)
|
2010-11-06 01:33:05 +01:00
|
|
|
EnableSetModified( false );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2015-05-14 13:51:36 +09:00
|
|
|
SetFormulaArranged(false);
|
2004-11-15 15:42:35 +00:00
|
|
|
|
2005-04-04 07:04:42 +00:00
|
|
|
Size aVisSize = GetSize();
|
2015-05-14 13:51:36 +09:00
|
|
|
SetVisAreaSize(aVisSize);
|
|
|
|
SmViewShell* pViewSh = SmGetActiveView();
|
2000-09-18 16:07:07 +00:00
|
|
|
if (pViewSh)
|
2002-07-24 09:49:14 +00:00
|
|
|
pViewSh->GetGraphicWindow().Invalidate();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2015-05-14 13:51:36 +09:00
|
|
|
if (bIsEnabled)
|
|
|
|
EnableSetModified(bIsEnabled);
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
2015-05-14 13:51:36 +09:00
|
|
|
SmDocShell::SmDocShell( SfxModelFlags i_nSfxCreationFlags )
|
|
|
|
: SfxObjectShell(i_nSfxCreationFlags)
|
2016-05-30 14:22:15 +09:00
|
|
|
, mpTree(nullptr)
|
|
|
|
, mpEditEngineItemPool(nullptr)
|
|
|
|
, mpEditEngine(nullptr)
|
|
|
|
, mpPrinter(nullptr)
|
|
|
|
, mpTmpPrinter(nullptr)
|
|
|
|
, mnModifyCount(0)
|
|
|
|
, mbFormulaArranged(false)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2014-06-27 10:26:55 +02:00
|
|
|
SetPool(&SfxGetpApp()->GetPool());
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2009-09-28 10:46:54 +00:00
|
|
|
SmModule *pp = SM_MOD();
|
2016-05-30 14:22:15 +09:00
|
|
|
maFormat = pp->GetConfig()->GetStandardFormat();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
StartListening(maFormat);
|
2000-09-18 16:07:07 +00:00
|
|
|
StartListening(*pp->GetConfig());
|
|
|
|
|
2015-05-14 13:51:36 +09:00
|
|
|
SetBaseModel(new SmModel(this));
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
SmDocShell::~SmDocShell()
|
|
|
|
{
|
2009-09-28 10:46:54 +00:00
|
|
|
SmModule *pp = SM_MOD();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
EndListening(maFormat);
|
2000-09-18 16:07:07 +00:00
|
|
|
EndListening(*pp->GetConfig());
|
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
mpCursor.reset();
|
|
|
|
delete mpEditEngine;
|
|
|
|
SfxItemPool::Free(mpEditEngineItemPool);
|
|
|
|
delete mpTree;
|
|
|
|
mpPrinter.disposeAndClear();
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
2014-03-17 13:38:26 +02:00
|
|
|
bool SmDocShell::ConvertFrom(SfxMedium &rMedium)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2010-11-06 01:33:05 +01:00
|
|
|
bool bSuccess = false;
|
2013-09-03 18:29:30 +02:00
|
|
|
const OUString& rFltName = rMedium.GetFilter()->GetFilterName();
|
2004-10-04 17:03:04 +00:00
|
|
|
|
2014-12-18 13:32:41 +01:00
|
|
|
OSL_ENSURE( rFltName != STAROFFICE_XML, "Wrong filter!");
|
2004-10-04 17:03:04 +00:00
|
|
|
|
2014-12-18 13:32:41 +01:00
|
|
|
if ( rFltName == MATHML_XML )
|
2000-11-15 09:47:20 +00:00
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
if (mpTree)
|
2000-11-15 09:47:20 +00:00
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
delete mpTree;
|
|
|
|
mpTree = nullptr;
|
2010-10-01 22:04:50 +02:00
|
|
|
InvalidateCursor();
|
2000-11-15 09:47:20 +00:00
|
|
|
}
|
2015-10-29 12:44:31 +02:00
|
|
|
Reference<css::frame::XModel> xModel(GetModel());
|
2009-05-19 09:31:27 +00:00
|
|
|
SmXMLImportWrapper aEquation(xModel);
|
2016-01-25 07:28:48 -05:00
|
|
|
bSuccess = ( ERRCODE_NONE == 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 ) )
|
|
|
|
{
|
2015-05-06 16:33:19 +02:00
|
|
|
tools::SvRef<SotStorage> aStorage = new SotStorage( pStream, false );
|
2015-11-06 09:37:28 +01:00
|
|
|
if ( aStorage->IsStream("Equation Native") )
|
2004-10-04 17:03:04 +00:00
|
|
|
{
|
|
|
|
// is this a MathType Storage?
|
2016-05-30 14:22:15 +09:00
|
|
|
MathType aEquation( maText );
|
2016-10-05 22:00:51 +02:00
|
|
|
bSuccess = aEquation.Parse( aStorage.get() );
|
2016-01-25 07:28:48 -05:00
|
|
|
if ( bSuccess )
|
2004-10-04 17:03:04 +00:00
|
|
|
Parse();
|
|
|
|
}
|
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
}
|
2004-10-04 17:03:04 +00:00
|
|
|
|
2015-04-09 15:24:21 +02:00
|
|
|
if ( GetCreateMode() == SfxObjectCreateMode::EMBEDDED )
|
2005-04-04 07:04:42 +00:00
|
|
|
{
|
2010-11-06 01:33:05 +01:00
|
|
|
SetFormulaArranged( false );
|
2005-04-04 07:04:42 +00:00
|
|
|
Repaint();
|
|
|
|
}
|
2004-10-04 17:03:04 +00:00
|
|
|
|
2015-10-20 11:46:38 +02:00
|
|
|
FinishedLoading();
|
2000-09-18 16:07:07 +00:00
|
|
|
return bSuccess;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-03-17 13:38:26 +02:00
|
|
|
bool SmDocShell::InitNew( const uno::Reference < embed::XStorage >& xStorage )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2010-11-06 01:33:05 +01:00
|
|
|
bool bRet = false;
|
2004-10-04 17:03:04 +00:00
|
|
|
if ( SfxObjectShell::InitNew( xStorage ) )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2010-11-06 01:33:05 +01:00
|
|
|
bRet = true;
|
2000-09-18 16:07:07 +00:00
|
|
|
SetVisArea(Rectangle(Point(0, 0), Size(2000, 1000)));
|
|
|
|
}
|
|
|
|
return bRet;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-03-17 13:38:26 +02:00
|
|
|
bool SmDocShell::Load( SfxMedium& rMedium )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2010-11-06 01:33:05 +01:00
|
|
|
bool bRet = false;
|
2005-01-11 12:08:26 +00:00
|
|
|
if( SfxObjectShell::Load( rMedium ))
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
CWS-TOOLING: integrate CWS odfmetadata2
2009-06-22 11:48:36 +0200 mst r273206 : - connectivity/source/drivers/mozab/mozillasrc/MNSInclude.hxx:
+ add "include ustrbuf.hxx" to work around warning caused by
solaris <sys/kstat.h> declaring a global "long l ;"
2009-06-19 14:25:25 +0200 mst r273159 : - scp2/source/ooo/file_library_ooo.scp:
+ fix MinGW build
2009-06-08 12:52:33 +0200 mst r272727 : - redland/raptor-1.4.18.patch.mingw, redland/raptor/makefile.mk:
+ disable parsers that do not build on MinGW (thanks for patch by tono)
2009-05-15 17:31:07 +0200 mst r271957 : fix typos
2009-05-15 17:28:57 +0200 mst r271956 : #i101965#
- offapi/com/sun/star/text/TextPortion:
+ add missing properties:
SoftPageBreak, DocumentIndexMark, ReferenceMark, Footnote, TextField
+ fix read-only status of properties: Bookmark, IsStart, IsCollapsed
- offapi/type_reference/{typelibrary_history.txt,types.rdb}:
+ update reference types.rdb
2009-05-07 14:41:38 +0200 mst r271669 : - sw/inc/{fmtftn.hxx,unocoll.hxx,doc.hxx,editsh.hxx,ftninfo.hxx},
sw/source/core/layout/{flowfrm.cxx,ftnfrm.cxx},
sw/source/core/doc/docftn.cxx, sw/source/core/edit/edattr.cxx,
sw/source/core/txtnode/atrftn.cxx, sw/source/core/unocore/unocoll.cxx,
sw/source/ui/fldui/fldref.cxx:
+ fix warning ... the hard way
+ also fix signature of SwDoc::SetCurFtn
2009-05-05 19:52:55 +0200 mst r271556 : - sw/inc/undobj.hxx:
+ make some members const
2009-05-05 19:34:40 +0200 mst r271555 : - sw/inc/rolbck.hxx, sw/source/core/undo/rolbck.cxx:
+ make some members const
2009-05-05 19:13:14 +0200 mst r271553 : - sw/inc/{undobj.hxx,rolbck.hxx},
sw/source/core/undo/{unbkmk.cxx,rolbck.cxx}:
+ fix rebase merge error
+ rename SwHstryBookmark to SwHistoryBookmark
+ clean up SwUndoBookmark
2009-05-05 19:05:53 +0200 mst r271552 : - sw/source/core/unocore/unoportenum.cxx:
+ fix annoying assertion
2009-05-05 15:34:48 +0200 mst r271522 : CWS-TOOLING: rebase CWS odfmetadata2 to trunk@271427 (milestone: DEV300:m47)
2009-05-04 12:37:01 +0200 mst r271444 : trivial
2009-04-22 13:30:37 +0200 mst r271102 : - sfx2/inc/sfx2/dinfdlg.hxx:
+ trivial change
2009-04-21 16:46:58 +0200 mst r271043 : - sw/inc/hintids.hxx:
+ introduce some predicates for the various hints, and use them
2009-04-21 16:19:03 +0200 mst r271041 : - sw/inc/undobj.hxx,
sw/source/core/doc/{docfly.cxx,docfmt.cxx,docftn.cxx,doctxm.cxx},
sw/source/core/undo/{unattr.cxx,unins.cxx}:
+ clean up unattr.cxx:
remove/fix casts, prefix members, use auto_ptr, etc.
2009-04-21 15:34:23 +0200 mst r271039 : - sw/inc/{rolbck.hxx,undobj.hxx},
sw/source/core/doc/docfmt.cxx,
sw/source/core/txtnode/{thints.cxx,txtedt.cxx},
sw/source/core/undo/{rolbck.cxx,undel.cxx,undobj.cxx,unins.cxx,unmove.cxx,
unovwr.cxx,unsect.cxx,unspnd.cxx,untbl.cxx,untblk.cxx,unattr.cxx}:
+ clean up SwHistory, SwRegHistory and SwHistoryHint etc.:
remove/fix casts, prefix members, remove wrong const annotations,
use auto_ptr, remove unused members, etc.
2009-04-20 19:17:36 +0200 mst r271013 : - sw/inc/ndhints.hxx,
sw/source/core/text/{itrtxt.cxx,txtftn.cxx,itratr.cxx,porfly.cxx,
txtfrm.cxx,txtdrop.cxx,frmform.cxx},
sw/source/core/txtnode/{ndtxt.cxx,ndhints.cxx,thints.cxx,txtedt.cxx},
sw/source/core/edit/acorrect.cxx,
sw/source/core/doc/{docedt.cxx,docfmt.cxx},
sw/source/filter/html/swhtml.cxx:
+ clean up SwHintsArray and its subclasses: remove/fix casts, prefix members
2009-04-20 18:42:07 +0200 mst r271007 : - sw/source/core/text/txtio.cxx, sw/source/core/edit/edattr.cxx,
sw/source/core/undo/rolbck.cxx:
+ remove JP_NEWCORE dead code
2009-04-20 18:38:09 +0200 mst r271006 : - sw/source/core/unocore/unochart.cxx:
+ silence unxlngi warning (debug=t)
2009-04-20 16:36:13 +0200 mst r270991 : - sfx2/inc/sfx2/dinfdlg.hxx, sfx2/source/dialog/dinfdlg.cxx,
sfx2/source/doc/objserv.cxx, sw/source/ui/fldui/flddinf.hxx:
+ trivial cleanups
2009-04-20 15:28:52 +0200 mst r270990 : - sfx2/inc/sfx2/dinfdlg.hxx, sfx2/source/dialog/dinfdlg.cxx,
sfx2/source/doc/objserv.cxx:
+ fix bug: replaying a macro with a DocumentInfoItem removes all
user-defined properties
2009-03-10 15:08:20 +0100 mst r269273 : - sfx2/source/doc/Metadatable.cxx:
+ add missing SolarMutex guards
2009-03-10 14:46:29 +0100 mst r269272 : - unoxml/source/rdf/librdf_repository.cxx:
+ never free rdf_world because that would call libxm2 xmlCleanupParser
(and, to add insult to injury, other libxml2 functions later...)
2009-03-06 19:02:44 +0100 mst r269041 : argh! undo...
2009-03-06 19:00:58 +0100 mst r269040 : fix #i99931#
- sw/source/ui/uno/unomod.cxx:
+ SwXViewSettings::_getSingleValue returns uninitialized memory
for the ZoomType property if the value is PAGE_WIDTH_EXACT
2009-03-06 18:59:28 +0100 mst r269039 : - sw/inc/ndtxt.hxx, sw/source/core/txtnode/ndtxt.cxx,
sw/source/core/unocore/unoportenum.cxx:
+ fix some more wntmsci12 warnings...
2009-03-06 18:56:46 +0100 mst r269038 : - sd/source/ui/slidesorter/model/SlsPageEnumerationProvider.cxx:
+ work around spurious warning on unxsoli4 debug=t
2009-03-05 14:02:01 +0100 mst r268902 : - sw/inc/txatbase.hxx:
+ back to c-style casts, they also compile on wntmsci12...
2009-03-05 10:23:25 +0100 mst r268882 : - comphelper/inc/comphelper/processfactory.hxx,
comphelper/source/processfactory/processfactory.cxx:
+ revert change of return type of comphelper_getProcessComponentContext
to Reference: does not build on wntmsci12
2009-03-04 19:08:09 +0100 mst r268861 : - sw/source/core/txtnode/{atrtox.cxx,ndtxt.cxx}:
+ fix initialization
2009-03-04 14:37:30 +0100 mst r268831 : - solenv/inc/target.mk:
+ fix CLASSPATH so complex tests run (fix by sb)
2009-03-04 14:36:30 +0100 mst r268830 : - sw/inc/unoobj.hxx,
sw/source/core/unocore/{unoparagraph.cxx,unoobj.cxx,unoobj2.cxx}:
+ SwXParaFrameEnumeration constructor now takes SwPaM, not SwUnoCrsr
+ move SwParaSelection into unoparagraph.cxx, as it is only used there
+ bugfix: replace SwUnoCrsrs on stack with SwCursors
2009-03-04 14:34:46 +0100 mst r268829 : - sw/inc/pam.hxx, sw/source/core/crsr/pam.cxx,
sw/source/core/edit/eddel.cxx, sw/source/core/doc/docredln.cxx,
sw/source/core/undo/{untbl.cxx,undel.cxx}, sw/source/filter/rtf/swparrtf.cxx:
+ clean up SwPaM: prefix members
+ new constructor SwPosition(SwCntntNode&, xub_StrLen)
+ fix several broken SwPosition and SwPaM constructors
+ SwPam::DeleteMark now actually resets the unused position to default
2009-03-02 12:07:09 +0100 mst r268646 : - sw/inc/fmtcol.hxx:
+ fix annoying warning (gcc 4)
2009-03-02 12:06:27 +0100 mst r268645 : - odk/util/check.pl, odk/examples/DevelopersGuide/Text/TextDocuments.java:
+ rename module from FieldMaster to fieldmaster
2009-02-27 19:49:56 +0100 mst r268614 : - sfx2/inc/sfx2/Metadatable.hxx, sfx2/prj/d.lst,
sfx2/source/doc/{Metadatable.cxx,makefile.mk},
sw/inc/{SwMetadatable.hxx,unoobj.hxx,undobj.hxx,ndtxt.hxx},
sw/source/core/doc/{SwMetadatable.cxx,makefile.mk,docnew.cxx},
sw/source/core/undo/{untbl.cxx,unins.cxx},
sw/source/core/unocore/unoparagraph.cxx, sw/source/ui/app/docsh.cxx:
+ move Metadatable implementation from sw to sfx2
2009-02-27 17:58:55 +0100 mst r268608 : - sw/inc/{SwMetadatable.hxx,undobj.hxx}, sw/source/core/doc/SwMetadatable.cxx,
sw/source/core/undo/{untbl.cxx,unins.cxx,undel.cxx}:
+ CreateUndo now returns an opaque MetadatableUndo object
2009-02-27 13:15:44 +0100 mst r268587 : - sw/inc/ndtxt.hxx, sw/source/core/doc/docfmt.cxx,
sw/source/core/text/{itratr.cxx,porlay.cxx},
sw/source/core/txtnode/{txtedt.cxx,ndtxt.cxx,thints.cxx}:
+ clean up SwTxtNode: fix casts, prefix members
+ factor out inline function SwTxtNode::TryDeleteSwpHints()
2009-02-27 13:14:30 +0100 mst r268586 : - svx/inc/svx/emphitem.hxx:
+ fix borken header guard
2009-02-27 13:13:56 +0100 mst r268585 : - sfx2/source/bastyp/progress.cxx:
+ fix use of compiler specific macro
2009-02-27 11:00:32 +0100 mst r268564 : - sw/inc/{txatbase.hxx,txtatr.hxx,txtinet.hxx,txtfld.hxx,txtftn.hxx,
txtflcnt.hxx,txttxmrk.hxx,txtrfmrk.hxx},
sw/source/core/txtnode/{atrtox.cxx,atrref.cxx,atrflyin.cxx,atrftn.cxx,
txtatr2.cxx,txatbase.cxx,atrfld.cxx,txtedt.cxx},
sw/source/core/text/atrstck.cxx, sw/source/core/access/acchyperlink.cxx,
sw/source/core/doc/visiturl.cxx, sw/source/ui/wrtsh/wrtsh2.cxx:
+ clean up SwTxtAttr and its subclasses: remove/fix casts, prefix members
+ SwTxtINetFmt: remove unused member bColor
- sw/source/core/text/txtfld.cxx:
+ move SwTxtFld methods to atrfld.cxx
2009-02-27 10:58:44 +0100 mst r268563 : - sfx2/inc/sfx2/sfxbasemodel.hxx:
+ don't privately inherit BaseMutex, ScModelObj wants to access it
2009-02-27 10:58:02 +0100 mst r268562 : - xmloff/source/core/{RDFaExportHelper.cxx,RDFaImportHelper.cxx}:
+ arrrgh!!! someone thought it would be a good idea to have 2 different
versions of boost in external! and they're NOT compatible!!!
insert an ugly fragile hack that maybe works with both...
2009-02-26 17:42:26 +0100 mst r268544 : - comphelper/inc/comphelper/storagehelper.hxx.
sfx2/source/doc/DocumentMetadataAccess.cxx:
+ someone made IsValidZipEntryFileName a static method and didn't tell me
2009-02-26 15:52:56 +0100 mst r268529 : redland: split up patches
2009-02-26 13:17:56 +0100 mst r268509 : migration of cws odfmetadata2 from CVS (resync to m42): module sw
#i95863#
- sw/inc/segdefs{,_}.hxx:
+ remove obsolete files
- sw/source/ui/inc/itemdef.hxx:
+ remove itemdef.hxx
- sw/source/ui/app/[apphdl.cxx,docsh.cxx}, sw/source/ui/misc/glshell.cxx,
sw/source/ui/shells/*.cxx, sw/source/ui/uiview/*.cxx, sw/source/ui/web/*.cxx:
+ use sfx2/msg.hxx instead of itemdef.hxx
- sw/source/core/edit/eddel.cxx:
+ @ JP: SwEditShell::Replace:
you're right, deleting the text to be replaced first, and then inserting
a space, and then replacing that space is unnecessary.
whew, i'm so happy that we finally answered that question after 11 years.
- sw/inc/edimp.hxx:
+ remove FOREACHCURSOR_START, FOREACHCURSOR_END
- sw/inc/{swcrsr.hxx,unocrsr.hxx,viscrs.hxx},
sw/source/core/crsr/{crsrsh.cxx,swcrsr.cxx,trvlreg.cxx,trvltbl.cxx,
unocrsr.cxx,viscrs.cxx},
sw/source/core/doc/{docbm.cxx,doccorr.cxx},
sw/source/core/docnode/{ndtbl.cxx,ndtbl1.cxx},
sw/source/core/edit/editsh.cxx,
sw/source/core/frmedt/{fefly1.cxx,fetab.cxx,tblsel.cxx},
sw/source/core/layout/trvlfrm.cxx,
sw/source/core/unocore/{unochart.cxx,unoobj2.cxx,unoparagraph.cxx,
unoportenum.cxx,unotbl.cxx},
sw/source/core/view/vprint.cxx:
+ remove the hideous virtual operator SwFooCursor*
+ make SwCursor::IsReadOnlyAvailable() virtual
+ make SwUnoCrsr::Clone() virtual
+ refactor SwCursor methods IsSelOver(), LeftRight(), UpDown(), GotoTable():
replace dynamic_cast<...>(this) with new virtual methods
2009-02-26 13:14:58 +0100 mst r268508 : migration of cws odfmetadata2 from CVS (resync to m42): module sw
- sw/source/filter/xml/swxml.cxx:
+ XMLReader::Read: load RDF metadata of the ODF document
- sw/source/filter/xml/wrtxml.cxx:
+ SwXMLWriter::_Write: write RDF metadata of the ODF document if ODF >= 1.2
#i90620#: import xml:id in text tables (does not actually work yet)
- sw/source/filter/xml/xmltbli{.hxx,.cxx}:
+ SwXMLTableCellAttrTokens,aTableCellAttrTokenMap: add XML_TOK_TABLE_XMLID
+ SwXMLTableCellContext_Impl::SwXMLTableCellContext_Impl: attribute xml:id
+ SwXMLTableCellContext_Impl::CreateChildContext: attribute xml:id
+ SwXMLTableColContext_Impl::SwXMLTableColContext_Impl: attribute xml:id
+ SwXMLTableContext::SwXMLTableContext: attribute xml:id
fix #i98530#
- sw/inc/unoport.hxx, sw/source/core/unocore/unoport.cxx:
+ SwXTextPortion: make constructor params const&
- sw/source/core/unocore/unoportenum.cxx:
+ refactor to remove some code duplication
+ fix bug: paragraph w/out hints: bookmark before frame gets lost
#i97274# handle invalid tables
- sw/source/core/layout/tabfrm.cxx, sw/source/filter/xml/xmltbli.cxx:
+ SwXMLTableContext::MakeTable():
check that the table actually contains cells,
and abort (removing the inserted table nodes) if not
2009-02-26 13:11:48 +0100 mst r268507 : migration of cws odfmetadata2 from CVS (resync to m42): module sw
refactor SwXTextRange and SwXParagraph
- sw/inc/unoobj.hxx, sw/source/core/unocore/unoobj2.cxx:
+ remove 3 constructors of SwXTextRange
+ new method SwXTextRange::CreateParentXText
+ refactor SwXTextRange::CreateTextRangeFromPosition and
SwXTextRange::getText
- sw/inc/unoobj.hxx, sw/source/core/unocore/unoparagraph.cxx:
+ SwXParagraph no longer uses a cursor; it registers directly at SwTxtNode
+ replace SwXParagraph::GetCrsr with SwXParagraph::GetTxtNode
- sw/source/core/unocore/unotext.cxx, sw/source/ui/uno/unotxvw.cxx:
+ adapt to new SwXParagraph
#i90620#
- sw/inc/SwMetadatable.hxx,
sw/source/core/doc/SwMetadatable.cxx:
+ new files: base classes sw::Metadatable and sw::MetadatableMixin;
also, 2 implementations of IXmlIdRegistry:
sw::XmlIdRegistryDocument and sw::XmlIdRegistryClipboard
+ setMetadataReference: handle empty stream name as auto-detect
- sw/source/core/doc/makefile.mk:
+ add SwMetadatable
add a XmlIdRegistry to SwDoc
- sw/inc/doc.hxx:
+ SwDoc: add member m_pXmlIdRegistry, method GetXmlIdRegistry()
- sw/source/core/doc/docnew.cxx:
+ initialize XmlIdRegistry in SwDoc::GetXmlIdRegistry, not in constructor,
because the constructor is not told whether the SwDoc is a clipboard
- sw/inc/docsh.hxx, sw/source/ui/app/docsh.cxx:
+ SwDocShell: override GetXmlIdRegistry()
#i91563#: make the SwTxtNode metadatable
- sw/inc/ndtxt.hxx
+ SwTxtNode inherits sw::Metadatable
- sw/inc/unoobj.hxx, sw/source/core/unocore/unoparagraph.cxx:
+ SwXParagraph inherits sw::MetadatableMixin
#i91563#: handle SwTxtNode's metadata for delete
- sw/source/core/txtnode/ndtxt.cxx:
+ SwTxtNode::SplitCntntNode: handle XmlId
+ SwTxtNode::JoinNext: merge XmlIds
- sw/source/core/doc/docedt.cxx:
+ lcl_GetJoinFlags: document postcondition
+ SwDoc::Delete: remove XmlId only if SwTxtNode _becomes_ empty
#i91563#: handle SwTxtNode's metadata for delete with undo
- sw/inc/undobj.hxx
+ SwUndoDelete: new members m_pMetadataUndoStart, m_pMetadataUndoEnd
- sw/source/core/undo/undel.cxx:
+ SwUndoDelete::SaveCntnt: save XmlIds for start and end SwTxtNode
+ SwUndoDelete::SaveCntnt: remove XmlId only if SwTxtNode _becomes_ empty
+ SwUndoDelete::Undo: restore saved XmlIds for start and end SwTxtNode
- sw/source/core/docnode/ndcopy.cxx:
+ SwTxtNode::MakeCopy: register copy at XmlIdRegistry
#i91563#: handle SwTxtNode's metadata for find/replace with undo
- sw/source/core/undo/unins.cxx:
+ _UnReplaceData: rename members: add prefix m_
+ _UnReplaceData: new members m_pMetadataUndoStart, m_pMetadataUndoEnd
+ _UnReplaceData::_UnReplaceData: save XmlIds for start and end SwTxtNode
+ _UnReplaceData::Undo: restore saved XmlIds for start and end SwTxtNode
#i91563#: handle SwTxtNode's metadata for table-to-text with undo
- sw/source/core/undo/untbl.cxx:
+ SwTblToTxtSave: rename members: add prefix m_
+ SwTblToTxtSave: new members m_pMetadataUndoStart, m_pMetadataUndoEnd
+ SwTblToTxtSave::SwTblToTxtSave: save XmlIds for start and end SwTxtNode
+ SwTblToTxtSave::SwTblToTxtSave, SwNodes::UndoTableToText:
always store the index of the first SwTxtNode in the cell, instead of
the index of the first SwTxtNode in case of the first cell in a row,
and the cell start node in other cases
+ SwNodes::UndoTableToText: restore saved XmlIds for start and end SwTxtNode
- sw/source/core/docnode/ndtbl.cxx:
+ lcl_DelBox: simplify for refactored start index handling in SwTblToTxtSave
2009-02-26 13:02:28 +0100 mst r268505 : migration of cws odfmetadata2 from CVS (resync to m42): module sd
- sd/source/ui/table/tableobjectbar.cxx,sd/source/ui/view/*.cxx:
+ remove invocations of SFX_DECL_TYPE
- sd/source/ui/slideshow/SlideShowRestarter.cxx,
sd/source/ui/toolpanel/LayoutMenu.cxx,
sd/source/ui/unoidl/DrawController.cxx,
sd/source/ui/view/{ViewShellBase.cxx,ViewTabBar.cxx,frmview.cxx}:
+ fix abuses of comphelper_getProcessComponentContext (missing release)
2009-02-26 13:01:24 +0100 mst r268504 : migration of cws odfmetadata2 from CVS (resync to m42): module starmath
- starmath/source/document.cxx:
+ don't touch SfxObjectShell's privates
2009-02-26 13:00:37 +0100 mst r268503 : migration of cws odfmetadata2 from CVS (resync to m42): module sfx2
#i90620#
- sfx2/inc/sfx2/XmlIdRegistry.hxx:
+ new file: interfaces sfx2::IXmlIdRegistry and sfx2::IXmlIdRegistrySupplier
and a couple of utility functions
- sfx2/inc/sfx2/DocumentMetadataAccess.hxx,
sfx2/source/doc/DocumentMetadataAccess.cxx:
+ new class sfx2::DocumentMetadataAccess, implements XDocumentMetadataAccess
+ the URI of the DocumentMetadataAccess is now the URI from which the
document was loaded; for a new document, use a vnd.sun.star.tdoc URI
+ add new function sfx2::createBaseURI()
+ prevent using reserved file names
+ try not to recurse into embedded subdocuments
- sfx2/source/doc/makefile.mk:
+ add DocumentMetadataAccess
- sfx2/util/makefile.mk:
+ link libsfx2 against libxml2 (needed for xmlValidateNCName)
- sfx2/source/doc/makefile.mk:
+ add LIBXML_CFLAGS to CFLAGS
- sfx2/prj/build.lst:
+ add dependence on libxml2
- sfx2/prj/d.lst:
+ add XmlIdRegistry.hxx, DocumentMetadataAccess.hxx
- sfx2/inc/sfx2/objsh.hxx, sfx2/source/doc/objxtor.cxx:
+ make SfxObjectShell's members private
+ new method SfxObjectShell::GetAutoStyleFilterIndex
+ SfxObjectShell inherits sfx2::IXmlIdRegistrySupplier
- sfx2/source/dialog/templdlg.cxx, sfx2/source/doc/sfxbasemodel.cxx:
+ don't touch SfxObjectShell's privates
- sfx2/inc/sfx2/sfxbasemodel.hxx, sfx2/source/doc/sfxbasemodel.cxx:
+ SfxBaseModel inherits BaseMutex instead of IMPL_SfxBaseModel_MutexContainer
+ SfxBaseModel implements additional interface XDocumentMetadataAccess
+ IMPL_SfxBaseModel_DataContainer has new member:
a sfx2::DocumentMetadataAccess
+ implementation of XDocumentMetadataAccess forwards to
the sfx2::DocumentMetadataAccess member
- sfx2/qa/complex/DocumentMetadataAccessTest.java,
sfx2/qa/complex/{tests.sce,makefile.mk},
sfx2/qa/complex/testdocuments/TESTRDFA.odt:
+ add complex test: DocumentMetadataAccessTest
+ add RDFa test document
#i95863#
- sfx2/inc/sfx2/dinfdlg.hxx, sfx2/source/dialog/dinfdlg.cxx:
+ refactor SfxDocumentItem so it no longer requires a XDocumentInfo
+ move struct CustomProperty to implementation file
+ remove class SfxDocumentUserPage
+ QueryValue,PutValue: remove MID_DOCINFO_FIELD*
- sfx2/source/doc/objserv.cxx:
+ adapt to SfxDocumentItem change
- sfx2/inc/sfx2/sfx.hrc, sfx2/sdi/sfxslots.sdi, sfx2/inc/sfx2/msg.hxx:
+ remove MID_DOCINFO_FIELD*
+ put all invocations of SFX_DECL_TYPE in msg.hxx, and undef SFX_DECL_TYPE
- sfx2/source/doc/objxtor.cxx:
+ fix abuses of comphelper_getProcessComponentContext (missing release)
- sfx2/source/doc/docfile.cxx:
+ SfxMedium::SfxMedium: don't dereference NULL, throw exception instead
- sfx2/source/doc/objstor.cxx:
+ SfxObjectShell::DoLoad: fix bug: DocumentBaseURI is not initialized
2009-02-26 12:58:07 +0100 mst r268502 : migration of cws odfmetadata2 from CVS (resync to m42): module xmloff
#i90620#: implement RDFa import (interface change)
- xmloff/inc/xmloff/xmlimp.hxx. xmloff/source/core/xmlimp.cxx:
+ make SvXMLImport::GetAbsoluteReference() const
+ add SvXMLImport::GetComponentContext()
+ SvXMLImport::_InitCtor(): add RDFa namespace
+ add SvXMLImport::AddRDFa()
+ SvXMLImport::endDocument() inserts RDFa into document repository
- xmloff/inc/xmloff/xmltoken.hxx, xmloff/source/core/xmltoken.cxx:
+ new tokens for RDFa: XML_ABOUT, XML_DATATYPE
- xmloff/inc/RDFaImportHelper.hxx, xmloff/source/core/RDFaImportHelper.cxx:
+ new class RDFaImportHelper
+ adapt the code to the bleak reality of broken C++ implementations
+ handle empty xhtml:about attributes properly, which are actually
valid relative URIs
+ work around broken SvXMLImport::GetAbsoluteReference
- xmloff/source/core/makefile.mk:
+ add RDFaImportHelper.cxx
#i90620#: implement RDFa export
- xmloff/inc/xmloff/xmlexp.hxx, xmloff/source/core/xmlexp.cxx:
+ add SvXMLExport::EnsureNamespace(), and a stack of namespace maps
+ add SvXMLExport::GetComponentContext()
+ add SvXMLExport::AddAttributesRDFa()
- xmloff/inc/RDFaExportHelper.hxx, xmloff/source/core/RDFaExportHelper.cxx:
+ new class RDFaExportHelper
+ don't use std::map::data_type, which is actually called
std::map::mapped_type by libstdc++
- xmloff/source/core/makefile.mk:
+ add RDFaExportHelper.cxx
#i91563#
- xmloff/inc/xmloff/txtimp.hxx, xmloff/source/text/txtimp.cxx:
+ XMLTextPAttrTokens: add RDFa tokens
- xmloff/source/text/txtparai{.hxx,.cxx}:
+ import RDFa for text:p
- xmloff/source/text/txtparae.cxx:
+ export RDFa for text:p
interface change: use XHTML namespace instead of RDFA
- xmloff/inc/xmlnmspe.hxx, xmloff/inc/xmloff/xmltoken.hxx,
xmloff/source/core/{xmltoken.cxx,xmlimp.cxx,xmlexp.cxx,RDFaExportHelper.cxx},
xmloff/source/text/txtimp.cxx:
+ use XHTML namespace instead of RDFA
#i91565#, #i91566#: (preliminary) import for text:meta, text:meta-field
- xmloff/source/text/txtparai.cxx:
+ new class XMLMetaImportContextBase with subclasses to import
text:meta and text:meta-field
- xmloff/source/text/XMLTextMarkImportContext.cxx:
+ change XMLTextMarkImportContext::CreateAndInsertMark to handle marks
with no name (text:meta)
#i91565#, #i91566#: (preliminary) export for text:meta, text:meta-field
- xmloff/inc/txtflde.hxx, xmloff/source/text/txtflde.cxx:
+ add FIELD_ID_META to FieldIdEnum
+ new method XMLTextFieldExport::ExportMetaField()
+ change XMLTextFieldExport::ExportField{,AutoStyle,Helper}
to take additional parameter for progress bar
- xmloff/inc/xmloff/txtparae.hxx, xmloff/source/text/txtparae.cxx:
+ make XMLTextParagraphExport::exportTextRangeEnumeration() public
+ new method XMLTextParagraphExport::exportMeta()
#i90620#
- xmloff/inc/xmloff/xmlimp.hxx, xmloff/source/core/xmlimp.cxx,
xmloff/inc/xmloff/xmlexp.hxx, xmloff/source/core/xmlexp.cxx:
+ rename SvXML{Im,Ex}port::GetStreamPath() to GetStreamName()
+ fix xml:id {im,ex}port for embedded documents and non-packages
+ adapt to API change: XMetadatable
#i90620# GRDDL
- xmloff/inc/xmlnmspe.hxx, xmloff/inc/xmloff/xmltoken.hxx,
xmloff/source/core/{xmltoken.cxx,xmlexp.cxx}:
+ add GRDDL namespace
+ add token XML_TRANSFORMATION
+ add grddl:transformation attribute to root elements for meta.xml,
content.xml and styles.xml
2009-02-26 12:54:40 +0100 mst r268501 : migration of cws odfmetadata2 from CVS (resync to m42): module unoxml
#i90620#
- unoxml/source/rdf/librdf_repository.cxx:
+ librdf_Repository::importGraph: allocate buffer sized length of stream
+ switch from one librdf_world per repository to a single static world
because redland has global variables with a brain-damaged life-cycle...
+ exportGraph: use new raptor 1.4.18 feature to disable writing
an xml:base attribute in RDF/XML files
- unoxml/source/rdf/librdf_repository.cxx:
unoxml/qa/complex/RDFRepositoryTest.java:
+ adapt to predicate is URI change
+ adapt to RDFa API change
+ adapt to API change: RDFa has multiple predicates...
+ adapt to API change: XMetadatable derives from XURI
+ allow xhtml:datatype without xhtml:content
+ adapt to API change: attribute MetadataReference is StringPair
- unoxml/source/rdf/CURI.cxx:
+ add some more URI constants
2009-02-26 12:53:32 +0100 mst r268500 : migration of cws odfmetadata2 from CVS (resync to m42): module package
- package/inc/ImplValidCharacters.hxx:
+ remove (moved to comphelper)
2009-02-26 12:52:49 +0100 mst r268499 : migration of cws odfmetadata2 from CVS (resync to m42): module comphelper
- comphelper/inc/comphelper/processfactory.hxx,
comphelper/source/processfactory/processfactory.cxx:
+ add getProcessComponentContext()
+ change return type of comphelper_getProcessComponentContext to Reference
- comphelper/inc/comphelper/stl_types.hxx:
+ add OUStringBufferAppender
+ add algorithm intersperse
- comphelper/source/misc/string.cxx:
+ rewrite convertCommaSeparated with intersperse and OUStringBufferAppender
- comphelper/inc/comphelper/stlunosequence.hxx:
+ fix bug: begin() on empty sequence != end()
2009-02-26 12:50:47 +0100 mst r268498 : migration of cws odfmetadata2 from CVS (resync to m42): module offapi
#i96209#
- offapi/com/sun/star/text/fieldmaster/*.idl:
+ rename module from FieldMaster to fieldmaster
- offapi/type_reference/{typelibrary_history.txt,types.rdb}:
+ update reference types.rdb
#i90620#
- offapi/com/sun/star/rdf/{XMetadatable.idl,XDocumentMetadataAccess.idl}:
+ API change: XMetadatable derives from XURI
+ API change: replace XmlId (string) with MetadataReference (StringPair)
- offapi/com/sun/star/rdf/{Statement.idl,XDocumentRepository.idl,
XNamedGraph.idl,XRepository.idl}:
+ the predicate of a statement is a URI, not a Resource
- offapi/com/sun/star/rdf/XDocumentMetadataAccess.idl:
+ rename: s/Package/Document/
+ remove uuid
+ remove everything related to mapping
+ graph names are now generated from base URI and file names
+ load methods: improve error handling with XInteractionHandler
- offapi/com/sun/star/rdf/XDocumentRepository.idl:
+ change: RDFa permits using multiple predicates in one attribute
+ setStatementRDFa: subject is now XResource, object is now XMetadatable
- offapi/com/sun/star/rdf/URIs.idl:
+ add some more URI constants
- offapi/com/sun/star/rdf:
+ fix @since tags and replace <method> with <member>
2009-02-26 12:47:24 +0100 mst r268497 : migration of cws odfmetadata2 from CVS (resync to m42): module redland
fix #i93768#
- redland/raptor-1.4.17.patch, redland/raptor/makefile.mk:
+ disable GRDDL parser to prevent call to libxslt
xsltSetDefaultSecurityPrefs, which breaks xmlhelp
- redland/raptor/makefile.mk, redland/raptor-1.4.17.patch,
redland/raptor-1.4.18.patch:
+ upgrade raptor to 1.4.18
+ deactivate serializer for RSS/Atom (does not build)
- redland/rasqal/makefile.mk, redland/rasqal-0.9.15.patch,
redland/rasqal-0.9.16.patch,
+ upgrade rasqal to 0.9.16
- redland/redland/makefile.mk, redland/redland-1.0.7.patch,
redland/redland-1.0.8.patch:
+ upgrade redland to 1.0.8
- redland/redlandversion.mk:
+ the librasqal SONAME has changed
2009-07-02 09:05:03 +00:00
|
|
|
uno::Reference < embed::XStorage > xStorage = GetMedium()->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 (
|
|
|
|
(
|
2015-11-04 08:29:36 +02:00
|
|
|
xAccess->hasByName( "content.xml" ) &&
|
|
|
|
xStorage->isStreamElement( "content.xml" )
|
2008-12-11 07:05:03 +00:00
|
|
|
) ||
|
|
|
|
(
|
2015-11-04 08:29:36 +02:00
|
|
|
xAccess->hasByName( "Content.xml" ) &&
|
|
|
|
xStorage->isStreamElement( "Content.xml" )
|
2008-12-11 07:05:03 +00:00
|
|
|
)
|
|
|
|
)
|
2001-02-02 13:18:01 +00:00
|
|
|
{
|
|
|
|
// is this a fabulous math package ?
|
2015-10-29 12:44:31 +02:00
|
|
|
Reference<css::frame::XModel> xModel(GetModel());
|
2009-05-19 09:31:27 +00:00
|
|
|
SmXMLImportWrapper aEquation(xModel);
|
2011-01-14 17:19:25 +01:00
|
|
|
sal_uLong nError = aEquation.Import(rMedium);
|
2001-07-19 14:02:02 +00:00
|
|
|
bRet = 0 == nError;
|
2012-03-08 14:56:00 +01:00
|
|
|
SetError( nError, OSL_LOG_PREFIX );
|
2001-02-02 13:18:01 +00:00
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
2004-10-04 17:03:04 +00:00
|
|
|
|
2015-04-09 15:24:21 +02:00
|
|
|
if ( GetCreateMode() == SfxObjectCreateMode::EMBEDDED )
|
2005-04-04 07:04:42 +00:00
|
|
|
{
|
2010-11-06 01:33:05 +01:00
|
|
|
SetFormulaArranged( false );
|
2005-04-04 07:04:42 +00:00
|
|
|
Repaint();
|
|
|
|
}
|
2004-10-04 17:03:04 +00:00
|
|
|
|
2015-10-20 11:46:38 +02:00
|
|
|
FinishedLoading();
|
2000-09-18 16:07:07 +00:00
|
|
|
return bRet;
|
|
|
|
}
|
|
|
|
|
2014-02-22 21:20:15 +01:00
|
|
|
|
2014-03-17 13:38:26 +02:00
|
|
|
bool SmDocShell::Save()
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
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
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
if (!mpTree)
|
2001-03-29 18:40:27 +00:00
|
|
|
Parse();
|
2016-05-30 14:22:15 +09:00
|
|
|
if( mpTree )
|
2001-03-29 18:40:27 +00:00
|
|
|
ArrangeFormula();
|
|
|
|
|
2015-10-29 12:44:31 +02:00
|
|
|
Reference<css::frame::XModel> xModel(GetModel());
|
2009-05-19 09:31:27 +00:00
|
|
|
SmXMLExportWrapper aEquation(xModel);
|
2014-04-24 12:22:08 +02:00
|
|
|
aEquation.SetFlat(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
|
|
|
|
2010-11-06 01:33:05 +01:00
|
|
|
return false;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
2007-06-27 11:39:58 +00:00
|
|
|
/*
|
|
|
|
* replace bad characters that can not be saved. (#i74144)
|
|
|
|
* */
|
2016-01-14 10:03:16 +02:00
|
|
|
void SmDocShell::ReplaceBadChars()
|
2007-06-27 11:39:58 +00:00
|
|
|
{
|
2014-04-24 12:22:08 +02:00
|
|
|
bool bReplace = false;
|
2013-09-04 22:24:21 +02:00
|
|
|
|
2016-05-30 14:22:15 +09:00
|
|
|
if (mpEditEngine)
|
2007-06-27 11:39:58 +00:00
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
OUStringBuffer aBuf( mpEditEngine->GetText() );
|
2013-09-04 22:24:21 +02:00
|
|
|
|
|
|
|
for (sal_Int32 i = 0; i < aBuf.getLength(); ++i)
|
2007-06-27 11:39:58 +00:00
|
|
|
{
|
2013-09-04 22:24:21 +02:00
|
|
|
if (aBuf[i] < ' ' && aBuf[i] != '\r' && aBuf[i] != '\n' && aBuf[i] != '\t')
|
2007-06-27 11:39:58 +00:00
|
|
|
{
|
2013-09-04 22:24:21 +02:00
|
|
|
aBuf[i] = ' ';
|
2014-04-24 12:22:08 +02:00
|
|
|
bReplace = true;
|
2007-06-27 11:39:58 +00:00
|
|
|
}
|
|
|
|
}
|
2013-09-04 22:24:21 +02:00
|
|
|
|
|
|
|
if (bReplace)
|
2016-05-30 14:22:15 +09:00
|
|
|
maText = aBuf.makeStringAndClear();
|
2007-06-27 11:39:58 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2001-05-30 12:08:34 +00:00
|
|
|
void SmDocShell::UpdateText()
|
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
if (mpEditEngine && mpEditEngine->IsModified())
|
2001-05-30 12:08:34 +00:00
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
OUString aEngTxt( mpEditEngine->GetText() );
|
2001-05-30 12:08:34 +00:00
|
|
|
if (GetText() != aEngTxt)
|
|
|
|
SetText( aEngTxt );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-03-17 13:38:26 +02:00
|
|
|
bool SmDocShell::SaveAs( SfxMedium& rMedium )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2010-11-06 01:33:05 +01: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
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
if (!mpTree)
|
2001-03-29 18:40:27 +00:00
|
|
|
Parse();
|
2016-05-30 14:22:15 +09:00
|
|
|
if( mpTree )
|
2001-03-29 18:40:27 +00:00
|
|
|
ArrangeFormula();
|
|
|
|
|
2015-10-29 12:44:31 +02:00
|
|
|
Reference<css::frame::XModel> xModel(GetModel());
|
2009-05-19 09:31:27 +00:00
|
|
|
SmXMLExportWrapper aEquation(xModel);
|
2014-04-24 12:22:08 +02:00
|
|
|
aEquation.SetFlat(false);
|
2005-01-11 12:08:26 +00:00
|
|
|
bRet = aEquation.Export(rMedium);
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
return bRet;
|
|
|
|
}
|
|
|
|
|
2014-03-17 13:38:26 +02:00
|
|
|
bool SmDocShell::ConvertTo( SfxMedium &rMedium )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2010-11-06 01:33:05 +01:00
|
|
|
bool bRet = false;
|
2016-03-11 06:43:06 +01:00
|
|
|
std::shared_ptr<const SfxFilter> pFlt = rMedium.GetFilter();
|
2000-11-15 09:47:20 +00:00
|
|
|
if( pFlt )
|
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
if( !mpTree )
|
2001-03-29 18:40:27 +00:00
|
|
|
Parse();
|
2016-05-30 14:22:15 +09:00
|
|
|
if( mpTree )
|
2001-03-29 18:40:27 +00:00
|
|
|
ArrangeFormula();
|
|
|
|
|
2013-09-03 18:29:30 +02:00
|
|
|
const OUString& rFltName = pFlt->GetFilterName();
|
2014-12-18 13:32:41 +01:00
|
|
|
if(rFltName == STAROFFICE_XML)
|
2001-02-02 11:50:57 +00:00
|
|
|
{
|
2015-10-29 12:44:31 +02:00
|
|
|
Reference<css::frame::XModel> xModel(GetModel());
|
2009-05-19 09:31:27 +00:00
|
|
|
SmXMLExportWrapper aEquation(xModel);
|
2014-04-24 12:22:08 +02:00
|
|
|
aEquation.SetFlat(false);
|
2001-02-02 11:50:57 +00:00
|
|
|
bRet = aEquation.Export(rMedium);
|
|
|
|
}
|
2014-12-18 13:32:41 +01:00
|
|
|
else if(rFltName == MATHML_XML)
|
2000-11-15 09:47:20 +00:00
|
|
|
{
|
2015-10-29 12:44:31 +02:00
|
|
|
Reference<css::frame::XModel> xModel(GetModel());
|
2009-05-19 09:31:27 +00:00
|
|
|
SmXMLExportWrapper aEquation(xModel);
|
2014-04-24 12:22:08 +02:00
|
|
|
aEquation.SetFlat(true);
|
2001-02-02 09:20:47 +00:00
|
|
|
bRet = aEquation.Export(rMedium);
|
2000-11-15 09:47:20 +00:00
|
|
|
}
|
2014-12-15 10:17:51 +01:00
|
|
|
else if (pFlt->GetFilterName() == "MathType 3.x")
|
2005-05-13 11:14:02 +00:00
|
|
|
bRet = WriteAsMathType3( rMedium );
|
2000-11-15 09:47:20 +00:00
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
return bRet;
|
|
|
|
}
|
|
|
|
|
2016-01-14 22:40:52 +01:00
|
|
|
bool SmDocShell::writeFormulaOoxml(
|
2016-04-12 11:55:28 +02:00
|
|
|
::sax_fastparser::FSHelperPtr const& pSerializer,
|
2016-01-14 22:40:52 +01:00
|
|
|
oox::core::OoxmlVersion const version,
|
|
|
|
oox::drawingml::DocumentType const documentType)
|
2011-08-16 13:56:29 +02:00
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
if( !mpTree )
|
2011-08-16 13:56:29 +02:00
|
|
|
Parse();
|
2016-05-30 14:22:15 +09:00
|
|
|
if( mpTree )
|
2011-08-16 13:56:29 +02:00
|
|
|
ArrangeFormula();
|
2016-05-30 14:22:15 +09:00
|
|
|
SmOoxmlExport aEquation(mpTree, version, documentType);
|
2012-08-03 15:53:03 +02:00
|
|
|
return aEquation.ConvertFromStarMath( pSerializer );
|
2011-08-16 13:56:29 +02:00
|
|
|
}
|
|
|
|
|
2012-07-27 14:12:42 +02:00
|
|
|
void SmDocShell::writeFormulaRtf(OStringBuffer& rBuffer, rtl_TextEncoding nEncoding)
|
2012-07-25 11:31:03 +02:00
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
if (!mpTree)
|
2012-07-25 11:31:03 +02:00
|
|
|
Parse();
|
2016-05-30 14:22:15 +09:00
|
|
|
if (mpTree)
|
2012-07-25 11:31:03 +02:00
|
|
|
ArrangeFormula();
|
2016-05-30 14:22:15 +09:00
|
|
|
SmRtfExport aEquation(mpTree);
|
2012-07-27 14:12:42 +02:00
|
|
|
aEquation.ConvertFromStarMath(rBuffer, nEncoding);
|
2012-07-25 11:31:03 +02:00
|
|
|
}
|
|
|
|
|
2012-08-10 13:06:30 +02:00
|
|
|
void SmDocShell::readFormulaOoxml( oox::formulaimport::XmlStream& stream )
|
2011-11-18 18:09:43 +01:00
|
|
|
{
|
|
|
|
SmOoxmlImport aEquation( stream );
|
|
|
|
SetText( aEquation.ConvertToStarMath());
|
|
|
|
}
|
|
|
|
|
2000-09-18 16:07:07 +00:00
|
|
|
void SmDocShell::Execute(SfxRequest& rReq)
|
|
|
|
{
|
|
|
|
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());
|
|
|
|
|
2010-10-20 14:54:59 +02:00
|
|
|
::svl::IUndoManager *pTmpUndoMgr = GetUndoManager();
|
2007-05-25 11:12:32 +00:00
|
|
|
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
|
|
|
{
|
2009-09-28 10:46:54 +00:00
|
|
|
SmModule *pp = SM_MOD();
|
2010-11-06 01:33:05 +01:00
|
|
|
bool bRedraw = pp->GetConfig()->IsAutoRedraw();
|
2000-09-18 16:07:07 +00:00
|
|
|
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)
|
2009-09-28 10:46:54 +00:00
|
|
|
pDev = &SM_MOD()->GetDefaultVirtualDev();
|
2010-10-07 11:02:05 +01:00
|
|
|
OSL_ENSURE (pDev, "device for font list missing" );
|
2006-01-31 17:33:20 +00:00
|
|
|
|
2015-03-31 23:04:14 +01:00
|
|
|
VclPtrInstance< SmFontTypeDialog > xFontTypeDialog( nullptr, pDev );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2005-05-03 12:51:39 +00:00
|
|
|
SmFormat aOldFormat = GetFormat();
|
2015-02-14 20:30:36 +00:00
|
|
|
xFontTypeDialog->ReadFrom( aOldFormat );
|
|
|
|
if (xFontTypeDialog->Execute() == RET_OK)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2005-05-03 12:51:39 +00:00
|
|
|
SmFormat aNewFormat( aOldFormat );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2015-02-14 20:30:36 +00:00
|
|
|
xFontTypeDialog->WriteTo(aNewFormat);
|
2010-10-20 14:54:59 +02:00
|
|
|
::svl::IUndoManager *pTmpUndoMgr = GetUndoManager();
|
2007-05-25 11:12:32 +00:00
|
|
|
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
|
|
|
}
|
|
|
|
}
|
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
|
|
|
{
|
2015-03-31 23:04:14 +01:00
|
|
|
VclPtrInstance< SmFontSizeDialog > xFontSizeDialog(nullptr);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2005-05-03 12:51:39 +00:00
|
|
|
SmFormat aOldFormat = GetFormat();
|
2015-02-14 20:30:36 +00:00
|
|
|
xFontSizeDialog->ReadFrom( aOldFormat );
|
|
|
|
if (xFontSizeDialog->Execute() == RET_OK)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2005-05-03 12:51:39 +00:00
|
|
|
SmFormat aNewFormat( aOldFormat );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2015-02-14 20:30:36 +00:00
|
|
|
xFontSizeDialog->WriteTo(aNewFormat);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2010-10-20 14:54:59 +02:00
|
|
|
::svl::IUndoManager *pTmpUndoMgr = GetUndoManager();
|
2007-05-25 11:12:32 +00:00
|
|
|
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
|
|
|
}
|
|
|
|
}
|
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
|
|
|
{
|
2015-03-31 23:04:14 +01:00
|
|
|
VclPtrInstance< SmDistanceDialog > xDistanceDialog(nullptr);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2005-05-03 12:51:39 +00:00
|
|
|
SmFormat aOldFormat = GetFormat();
|
2015-02-14 20:30:36 +00:00
|
|
|
xDistanceDialog->ReadFrom( aOldFormat );
|
|
|
|
if (xDistanceDialog->Execute() == RET_OK)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2005-05-03 12:51:39 +00:00
|
|
|
SmFormat aNewFormat( aOldFormat );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2015-02-14 20:30:36 +00:00
|
|
|
xDistanceDialog->WriteTo(aNewFormat);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2010-10-20 14:54:59 +02:00
|
|
|
::svl::IUndoManager *pTmpUndoMgr = GetUndoManager();
|
2007-05-25 11:12:32 +00:00
|
|
|
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
|
|
|
}
|
|
|
|
}
|
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
|
|
|
{
|
2015-03-31 23:04:14 +01:00
|
|
|
VclPtrInstance< SmAlignDialog > xAlignDialog(nullptr);
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2005-05-03 12:51:39 +00:00
|
|
|
SmFormat aOldFormat = GetFormat();
|
2015-02-14 20:30:36 +00:00
|
|
|
xAlignDialog->ReadFrom( aOldFormat );
|
|
|
|
if (xAlignDialog->Execute() == RET_OK)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2005-05-03 12:51:39 +00:00
|
|
|
SmFormat aNewFormat( aOldFormat );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2015-02-14 20:30:36 +00:00
|
|
|
xAlignDialog->WriteTo(aNewFormat);
|
2001-05-02 15:58:48 +00:00
|
|
|
|
2009-09-28 10:46:54 +00:00
|
|
|
SmModule *pp = SM_MOD();
|
2001-05-02 15:58:48 +00:00
|
|
|
SmFormat aFmt( pp->GetConfig()->GetStandardFormat() );
|
2015-02-14 20:30:36 +00:00
|
|
|
xAlignDialog->WriteTo( aFmt );
|
2001-05-02 15:58:48 +00:00
|
|
|
pp->GetConfig()->SetStandardFormat( aFmt );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2010-10-20 14:54:59 +02:00
|
|
|
::svl::IUndoManager *pTmpUndoMgr = GetUndoManager();
|
2007-05-25 11:12:32 +00:00
|
|
|
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
|
|
|
}
|
|
|
|
}
|
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
|
|
|
{
|
2014-12-03 10:43:00 +02:00
|
|
|
const SfxStringItem& rItem = static_cast<const SfxStringItem&>(rReq.GetArgs()->Get(SID_TEXT));
|
2013-01-21 14:32:09 +01:00
|
|
|
if (GetText() != OUString(rItem.GetValue()))
|
2000-09-18 16:07:07 +00:00
|
|
|
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
|
|
|
{
|
2010-10-20 14:54:59 +02:00
|
|
|
::svl::IUndoManager* pTmpUndoMgr = GetUndoManager();
|
2007-05-25 11:12:32 +00:00
|
|
|
if( pTmpUndoMgr )
|
2001-10-12 14:57:24 +00:00
|
|
|
{
|
2011-01-14 17:19:25 +01:00
|
|
|
sal_uInt16 nId = rReq.GetSlot(), nCnt = 1;
|
2001-10-12 14:57:24 +00:00
|
|
|
const SfxItemSet* pArgs = rReq.GetArgs();
|
|
|
|
const SfxPoolItem* pItem;
|
2014-09-10 17:53:41 +02:00
|
|
|
if( pArgs && SfxItemState::SET == pArgs->GetItemState( nId, false, &pItem ))
|
2014-12-03 10:43:00 +02:00
|
|
|
nCnt = static_cast<const SfxUInt16Item*>(pItem)->GetValue();
|
2001-10-12 14:57:24 +00:00
|
|
|
|
2013-07-05 16:25:03 -05:00
|
|
|
bool (::svl::IUndoManager:: *fnDo)();
|
2001-10-12 14:57:24 +00:00
|
|
|
|
2014-08-12 00:25:29 +02:00
|
|
|
std::size_t nCount;
|
2001-10-12 14:57:24 +00:00
|
|
|
if( SID_UNDO == rReq.GetSlot() )
|
|
|
|
{
|
2007-05-25 11:12:32 +00:00
|
|
|
nCount = pTmpUndoMgr->GetUndoActionCount();
|
2010-10-20 14:54:59 +02:00
|
|
|
fnDo = &::svl::IUndoManager::Undo;
|
2001-10-12 14:57:24 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2007-05-25 11:12:32 +00:00
|
|
|
nCount = pTmpUndoMgr->GetRedoActionCount();
|
2010-10-20 14:54:59 +02:00
|
|
|
fnDo = &::svl::IUndoManager::Redo;
|
2001-10-12 14:57:24 +00:00
|
|
|
}
|
|
|
|
|
2010-10-25 11:48:17 +02:00
|
|
|
try
|
|
|
|
{
|
|
|
|
for( ; nCnt && nCount; --nCnt, --nCount )
|
|
|
|
(pTmpUndoMgr->*fnDo)();
|
|
|
|
}
|
2011-10-26 09:43:48 +03:00
|
|
|
catch( const Exception& )
|
2010-10-25 11:48:17 +02:00
|
|
|
{
|
|
|
|
DBG_UNHANDLED_EXCEPTION();
|
|
|
|
}
|
2001-10-12 14:57:24 +00:00
|
|
|
}
|
2004-11-15 15:42:35 +00:00
|
|
|
Repaint();
|
2011-02-15 22:46:54 +00:00
|
|
|
UpdateText();
|
2009-09-18 10:15:03 +00:00
|
|
|
SfxViewFrame* pFrm = SfxViewFrame::GetFirst( this );
|
|
|
|
while( pFrm )
|
|
|
|
{
|
|
|
|
SfxBindings& rBind = pFrm->GetBindings();
|
|
|
|
rBind.Invalidate(SID_UNDO);
|
|
|
|
rBind.Invalidate(SID_REDO);
|
|
|
|
rBind.Invalidate(SID_REPEAT);
|
|
|
|
rBind.Invalidate(SID_CLEARHISTORY);
|
|
|
|
pFrm = SfxViewFrame::GetNext( *pFrm, this );
|
|
|
|
}
|
2001-10-12 14:57:24 +00:00
|
|
|
}
|
|
|
|
break;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
2009-09-18 10:15:03 +00:00
|
|
|
|
|
|
|
rReq.Done();
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SmDocShell::GetState(SfxItemSet &rSet)
|
|
|
|
{
|
|
|
|
SfxWhichIter aIter(rSet);
|
|
|
|
|
2011-01-14 17:19:25 +01:00
|
|
|
for (sal_uInt16 nWh = aIter.FirstWhich(); 0 != nWh; nWh = aIter.NextWhich())
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
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
|
|
|
{
|
2009-09-28 10:46:54 +00:00
|
|
|
SmModule *pp = SM_MOD();
|
2010-11-06 01:33:05 +01:00
|
|
|
bool bRedraw = pp->GetConfig()->IsAutoRedraw();
|
2000-09-18 16:07:07 +00:00
|
|
|
|
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 = '*';
|
2013-04-07 12:06:47 +02:00
|
|
|
rSet.Put(SfxStringItem(SID_MODIFYSTATUS, OUString(cMod)));
|
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_TEXT:
|
|
|
|
rSet.Put(SfxStringItem(SID_TEXT, GetText()));
|
|
|
|
break;
|
|
|
|
|
2004-03-17 08:50:33 +00:00
|
|
|
case SID_GAPHIC_SM:
|
2010-07-28 09:46:36 +02:00
|
|
|
//! very old (pre UNO) and ugly hack to invalidate the SmGraphicWindow.
|
2016-05-30 14:22:15 +09:00
|
|
|
//! If mnModifyCount gets changed then the call below will implicitly notify
|
2010-07-28 09:46:36 +02:00
|
|
|
//! SmGraphicController::StateChanged and there the window gets invalidated.
|
2016-05-30 14:22:15 +09:00
|
|
|
//! Thus all the 'mnModifyCount++' before invalidating this slot.
|
|
|
|
rSet.Put(SfxInt16Item(SID_GAPHIC_SM, mnModifyCount));
|
2001-10-12 14:57:24 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case SID_UNDO:
|
|
|
|
case SID_REDO:
|
|
|
|
{
|
|
|
|
SfxViewFrame* pFrm = SfxViewFrame::GetFirst( this );
|
|
|
|
if( pFrm )
|
2015-11-10 10:24:24 +01:00
|
|
|
pFrm->GetSlotState( nWh, nullptr, &rSet );
|
2001-10-12 14:57:24 +00:00
|
|
|
else
|
|
|
|
rSet.DisableItem( nWh );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case SID_GETUNDOSTRINGS:
|
|
|
|
case SID_GETREDOSTRINGS:
|
|
|
|
{
|
2010-10-20 14:54:59 +02:00
|
|
|
::svl::IUndoManager* pTmpUndoMgr = GetUndoManager();
|
2007-05-25 11:12:32 +00:00
|
|
|
if( pTmpUndoMgr )
|
2001-10-12 14:57:24 +00:00
|
|
|
{
|
2013-04-07 12:06:47 +02:00
|
|
|
OUString(::svl::IUndoManager:: *fnGetComment)( size_t, bool const ) 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();
|
2010-10-20 14:54:59 +02:00
|
|
|
fnGetComment = &::svl::IUndoManager::GetUndoActionComment;
|
2001-10-12 14:57:24 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2007-05-25 11:12:32 +00:00
|
|
|
nCount = pTmpUndoMgr->GetRedoActionCount();
|
2010-10-20 14:54:59 +02:00
|
|
|
fnGetComment = &::svl::IUndoManager::GetRedoActionComment;
|
2001-10-12 14:57:24 +00:00
|
|
|
}
|
|
|
|
if( nCount )
|
|
|
|
{
|
2015-05-01 14:15:42 +09:00
|
|
|
OUStringBuffer aBuf;
|
2001-10-12 14:57:24 +00:00
|
|
|
for( sal_uInt16 n = 0; n < nCount; ++n )
|
2015-05-01 14:15:42 +09:00
|
|
|
{
|
|
|
|
aBuf.append((pTmpUndoMgr->*fnGetComment)( n, ::svl::IUndoManager::TopLevel ));
|
|
|
|
aBuf.append('\n');
|
|
|
|
}
|
2001-10-12 14:57:24 +00:00
|
|
|
|
|
|
|
SfxStringListItem aItem( nWh );
|
2015-05-01 14:15:42 +09:00
|
|
|
aItem.SetString( aBuf.makeStringAndClear() );
|
2001-10-12 14:57:24 +00:00
|
|
|
rSet.Put( aItem );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
rSet.DisableItem( nWh );
|
|
|
|
}
|
|
|
|
break;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-10-20 14:54:59 +02:00
|
|
|
::svl::IUndoManager *SmDocShell::GetUndoManager()
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
if (!mpEditEngine)
|
2001-03-08 08:24:49 +00:00
|
|
|
GetEditEngine();
|
2016-05-30 14:22:15 +09:00
|
|
|
return &mpEditEngine->GetUndoManager();
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SmDocShell::SaveSymbols()
|
|
|
|
{
|
2009-09-28 10:46:54 +00:00
|
|
|
SmModule *pp = SM_MOD();
|
|
|
|
pp->GetSymbolManager().Save();
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void SmDocShell::Draw(OutputDevice *pDevice,
|
|
|
|
const JobSetup &,
|
2011-01-14 17:19:25 +01:00
|
|
|
sal_uInt16 /*nAspect*/)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
pDevice->IntersectClipRegion(GetVisArea());
|
|
|
|
Point atmppoint;
|
2010-10-01 22:04:50 +02:00
|
|
|
DrawFormula(*pDevice, atmppoint);
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
2015-05-05 13:11:02 +02:00
|
|
|
SfxItemPool& SmDocShell::GetPool()
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
2014-06-27 10:26:55 +02:00
|
|
|
return SfxGetpApp()->GetPool();
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
2004-11-15 15:42:35 +00:00
|
|
|
void SmDocShell::SetVisArea(const Rectangle & rVisArea)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
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
|
|
|
|
2010-11-06 01:33:05 +01:00
|
|
|
bool bIsEnabled = IsEnableSetModified();
|
2000-09-18 16:07:07 +00:00
|
|
|
if ( bIsEnabled )
|
2010-11-06 01:33:05 +01:00
|
|
|
EnableSetModified( false );
|
2000-09-18 16:07:07 +00:00
|
|
|
|
2004-10-04 17:03:04 +00:00
|
|
|
//TODO/LATER: it's unclear how this interacts with the SFX code
|
2015-09-29 18:09:26 +02:00
|
|
|
// If outplace editing, then don't resize the OutplaceWindow. But the
|
2000-09-18 16:07:07 +00:00
|
|
|
// ObjectShell has to resize. Bug 56470
|
2010-11-06 01:33:05 +01:00
|
|
|
bool bUnLockFrame;
|
2015-04-09 15:24:21 +02:00
|
|
|
if( GetCreateMode() == SfxObjectCreateMode::EMBEDDED && !IsInPlaceActive() && GetFrame() )
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
|
|
|
GetFrame()->LockAdjustPosSizePixel();
|
2010-11-06 01:33:05 +01:00
|
|
|
bUnLockFrame = true;
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
else
|
2010-11-06 01:33:05 +01:00
|
|
|
bUnLockFrame = false;
|
2000-09-18 16:07:07 +00:00
|
|
|
|
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,
|
2015-03-12 14:53:28 +02:00
|
|
|
SotClipboardFormatId* pFormat,
|
2013-03-05 10:35:52 +01:00
|
|
|
OUString* /*pAppName*/,
|
|
|
|
OUString* pFullTypeName,
|
|
|
|
OUString* pShortTypeName,
|
2008-12-12 12:52:51 +00:00
|
|
|
sal_Int32 nFileFormat,
|
2014-03-10 22:48:41 +01:00
|
|
|
bool bTemplate /* = false */) const
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
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);
|
2015-03-12 14:53:28 +02:00
|
|
|
*pFormat = SotClipboardFormatId::STARMATH_60;
|
2013-09-04 10:41:41 +01:00
|
|
|
*pFullTypeName = SM_RESSTR(STR_MATH_DOCUMENT_FULLTYPE_CURRENT);
|
|
|
|
*pShortTypeName = SM_RESSTR(RID_DOCUMENTSTR);
|
2001-02-06 15:02:19 +00:00
|
|
|
}
|
2004-07-13 08:30:23 +00:00
|
|
|
else if (nFileFormat == SOFFICE_FILEFORMAT_8 )
|
|
|
|
{
|
|
|
|
*pClassName = SvGlobalName(SO3_SM_CLASSID_60);
|
2015-03-12 14:53:28 +02:00
|
|
|
*pFormat = bTemplate ? SotClipboardFormatId::STARMATH_8_TEMPLATE : SotClipboardFormatId::STARMATH_8;
|
2013-09-04 10:41:41 +01:00
|
|
|
*pFullTypeName = SM_RESSTR(STR_MATH_DOCUMENT_FULLTYPE_CURRENT);
|
|
|
|
*pShortTypeName = SM_RESSTR(RID_DOCUMENTSTR);
|
2004-07-13 08:30:23 +00:00
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
2011-01-14 17:19:25 +01:00
|
|
|
sal_uLong SmDocShell::GetMiscStatus() const
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
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;
|
|
|
|
}
|
|
|
|
|
2014-03-17 13:38:26 +02:00
|
|
|
void SmDocShell::SetModified(bool bModified)
|
2000-09-18 16:07:07 +00:00
|
|
|
{
|
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 );
|
2016-09-22 22:20:48 +02:00
|
|
|
Broadcast(SfxHint(SFX_HINT_DOCCHANGED));
|
2007-06-26 15:03:31 +00:00
|
|
|
}
|
2000-09-18 16:07:07 +00:00
|
|
|
}
|
|
|
|
|
2010-11-06 01:33:05 +01:00
|
|
|
bool SmDocShell::WriteAsMathType3( SfxMedium& rMedium )
|
2005-05-13 11:14:02 +00:00
|
|
|
{
|
2016-05-30 14:22:15 +09:00
|
|
|
MathType aEquation( maText, mpTree );
|
2016-01-25 07:28:48 -05:00
|
|
|
return aEquation.ConvertFromStarMath( rMedium );
|
2005-05-13 11:14:02 +00:00
|
|
|
}
|
|
|
|
|
2010-10-14 08:30:41 +02:00
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|