Files
libreoffice/starmath/source/document.cxx

1411 lines
41 KiB
C++
Raw Normal View History

2000-09-18 16:07:07 +00:00
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
2000-09-18 16:07:07 +00:00
*
* Copyright 2008 by Sun Microsystems, Inc.
2000-09-18 16:07:07 +00:00
*
* OpenOffice.org - a multi-platform office productivity suite
2000-09-18 16:07:07 +00:00
*
* $RCSfile: document.cxx,v $
CWS-TOOLING: integrate CWS fwk92 2008-12-04 14:43:28 +0100 oc r264844 : #i96788# 2008-12-03 02:15:17 +0100 fredrikh r264734 : i96817 2008-12-02 16:42:46 +0100 tbo r264720 : #i96763# changes to password dialog for framework, math, global 2008-11-26 16:26:28 +0100 mav r264418 : #i93617# fix typo 2008-11-26 16:13:03 +0100 mav r264411 : #i93617# fix the linux scenario 2008-11-25 17:58:01 +0100 mav r264323 : #i93617# fix the windows problems 2008-11-25 17:51:33 +0100 mav r264321 : #i93617# fix the windows problems 2008-11-21 16:01:18 +0100 mav r264145 : #i78753# integrate the patch 2008-11-21 14:08:32 +0100 mav r264136 : #i93617# integrate the patch 2008-11-21 13:01:56 +0100 mav r264127 : #i82947# integrate the patch 2008-11-20 18:14:19 +0100 mav r264092 : #i95793# look for import filter 2008-11-18 15:23:44 +0100 pb r263776 : fix: #i92579# #i92583# SvxSecurity/SearchPage: more space for controls 2008-11-18 15:21:39 +0100 pb r263774 : fix: #i92579# #i92583# SvxSecurity/SearchPage: more space for controls 2008-11-18 15:18:54 +0100 pb r263772 : fix: #i92583# SvxSearchPage::InitControls_Impl() added 2008-11-18 15:16:07 +0100 pb r263771 : fix: #i92579# columns calculated newly 2008-11-18 11:09:28 +0100 mav r263751 : #i21923# small fixes 2008-11-17 17:22:04 +0100 mav r263730 : #i21923# integrate the patch 2008-11-17 14:29:02 +0100 mav r263723 : #i21923# integrate the patch 2008-11-13 16:46:08 +0100 mav r263653 : #i88127# integrate the patch 2008-11-13 14:46:56 +0100 mav r263645 : #i54638# integrate the patch 2008-11-11 13:11:03 +0100 pb r263554 : fix: #i93142# disable maRecommReadOnlyCB on read-only documents 2008-11-10 13:30:58 +0100 pb r263516 : fix: #i93833# Mozilla Plug-in -> Browser Plug-in 2008-11-10 13:29:10 +0100 pb r263515 : fix: #i93833# Mozilla Plug-in -> Browser Plug-in 2008-11-10 06:10:11 +0100 pb r263505 : fix: #i94937# now .uno.ExtendedHelp without image 2008-11-04 20:52:50 +0100 mav r263337 : migrate cws fwk92 to svn
2008-12-12 12:52:51 +00:00
* $Revision: 1.94.26.1 $
2000-09-18 16:07:07 +00:00
*
* This file is part of OpenOffice.org.
2000-09-18 16:07:07 +00:00
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
2000-09-18 16:07:07 +00:00
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
2000-09-18 16:07:07 +00:00
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
2000-09-18 16:07:07 +00:00
*
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_starmath.hxx"
2000-09-18 16:07:07 +00:00
#include <com/sun/star/accessibility/AccessibleEventId.hpp>
#include <rtl/logfile.hxx>
2002-05-31 13:23:22 +00:00
#include <rtl/ustring.hxx>
2000-09-18 16:07:07 +00:00
#include <ucbhelper/content.hxx>
#include <sot/formats.hxx>
#include <sot/storage.hxx>
#include <svtools/linguprops.hxx>
#include <svtools/lingucfg.hxx>
2000-09-18 16:07:07 +00:00
#include <svtools/smplhint.hxx>
2000-11-13 10:11:47 +00:00
#include <svtools/pathoptions.hxx>
2000-09-18 16:07:07 +00:00
#ifndef _SO_CLSIDS_HXX //autogen
#include <sot/clsids.hxx>
2000-09-18 16:07:07 +00:00
#endif
#include <sot/exchange.hxx>
#include <vcl/msgbox.hxx>
#include <vcl/mapunit.hxx>
#include <vcl/mapmod.hxx>
#include <comphelper/storagehelper.hxx>
#include <comphelper/processfactory.hxx>
#include <comphelper/accessibletexthelper.hxx>
2000-09-18 16:07:07 +00:00
#include <svtools/eitem.hxx>
#include <svtools/whiter.hxx>
#include <svtools/intitem.hxx>
#include <svtools/stritem.hxx>
#include <svtools/ptitem.hxx>
#include <svtools/undo.hxx>
#include <svtools/itempool.hxx>
#include <svtools/urihelper.hxx>
#include <svtools/fstathelper.hxx>
#include <svtools/transfer.hxx>
2000-09-18 16:07:07 +00:00
#include <sfx2/dispatch.hxx>
#include <sfx2/docfile.hxx>
#include <sfx2/app.hxx>
#include <sfx2/request.hxx>
#include <sfx2/viewfrm.hxx>
2000-09-18 16:07:07 +00:00
#include <svtools/sfxecode.hxx>
#include <sfx2/printer.hxx>
#include <sfx2/docfilt.hxx>
#include <svtools/itempool.hxx>
#include <svx/editeng.hxx>
#include <svx/eeitem.hxx>
#include <svx/editstat.hxx>
#include <svx/fontitem.hxx>
#include <svx/fhgtitem.hxx>
#include <svx/unolingu.hxx>
#include <svtools/slstitm.hxx>
#include <com/sun/star/uno/Any.h>
#include <com/sun/star/lang/Locale.hpp>
2000-09-18 16:07:07 +00:00
#ifndef STARMATH_HRC
#include <starmath.hrc>
#endif
#include <document.hxx>
#include <unomodel.hxx>
#include <config.hxx>
#include <symbol.hxx>
#include <toolbox.hxx>
#include <dialog.hxx>
#include <action.hxx>
#include <view.hxx>
#include <utility.hxx>
2000-09-18 16:07:07 +00:00
#include <format.hxx>
#include <mathtype.hxx>
2000-11-15 09:47:20 +00:00
#include <mathml.hxx>
#include <smdll.hxx>
#include <sfx2/fcontnr.hxx>
#include <sfx2/msg.hxx>
#include <sfx2/objface.hxx>
2000-09-18 16:07:07 +00:00
using namespace ::com::sun::star;
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;
using namespace ::com::sun::star::accessibility;
2000-09-18 16:07:07 +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));
}
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);
nModifyCount++; //! merkwuerdig...
2000-09-18 16:07:07 +00:00
// ohne dies wird die Grafik letztlich
// nicht geupdatet
Repaint();
2000-09-18 16:07:07 +00:00
break;
}
}
void SmDocShell::LoadSymbols()
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::LoadSymbols" );
SmModule *pp = SM_MOD1();
pp->GetSymSetManager().Load();
}
const String SmDocShell::GetComment() const
2000-09-18 16:07:07 +00:00
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::GetComment" );
uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
const_cast<SmDocShell*>(this)->GetModel(), uno::UNO_QUERY_THROW);
uno::Reference<document::XDocumentProperties> xDocProps(
xDPS->getDocumentProperties());
return xDocProps->getDescription();
2000-09-18 16:07:07 +00:00
}
void SmDocShell::SetText(const String& rBuffer)
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::SetText" );
2000-09-18 16:07:07 +00:00
if (rBuffer != aText)
{
BOOL bIsEnabled = IsEnableSetModified();
if( bIsEnabled )
EnableSetModified( FALSE );
2000-09-18 16:07:07 +00:00
aText = rBuffer;
SetFormulaArranged( FALSE );
2000-09-18 16:07:07 +00:00
Parse();
//Repaint();
2000-09-18 16:07:07 +00:00
SmViewShell *pViewSh = SmGetActiveView();
if( pViewSh )
{
2000-09-18 16:07:07 +00:00
pViewSh->GetViewFrame()->GetBindings().Invalidate(SID_TEXT);
if ( SFX_CREATE_MODE_EMBEDDED == GetCreateMode() )
Repaint();
else
pViewSh->GetGraphicWindow().Invalidate();
}
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
SmGraphicAccessible *pAcc = pViewSh ? pViewSh->GetGraphicWindow().GetAccessible_Impl() : 0;
2002-05-31 13:23:22 +00:00
if (pAcc)
{
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
}
if ( GetCreateMode() == SFX_CREATE_MODE_EMBEDDED )
OnDocumentPrinterChanged(0);
2000-09-18 16:07:07 +00:00
}
}
void SmDocShell::SetFormat(SmFormat& rFormat)
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::SetFormat" );
2000-09-18 16:07:07 +00:00
aFormat = rFormat;
SetFormulaArranged(FALSE);
SmViewShell *pViewSh = SmGetActiveView();
if (pViewSh)
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()
{
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()
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::Parse" );
2000-09-18 16:07:07 +00:00
if (pTree)
delete pTree;
ReplaceBadChars();
2000-09-18 16:07:07 +00:00
pTree = aInterpreter.Parse(aText);
nModifyCount++;
2002-03-21 09:13:38 +00:00
SetFormulaArranged( FALSE );
2000-09-18 16:07:07 +00:00
}
void SmDocShell::ArrangeFormula()
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::ArrangeFormula" );
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);
// OutputDevice *pOutDev = aPrtAcc.GetPrinter();
OutputDevice* pOutDev = aPrtAcc.GetRefDev();
2000-09-18 16:07:07 +00:00
if (!pOutDev)
{
#if OSL_DEBUG_LEVEL > 1
DBG_ERROR("!! SmDocShell::ArrangeFormula: reference device missing !!");
#endif
}
2000-09-18 16:07: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
{
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();
pTree->Prepare(rFormat, *this);
// format/draw formulas always from left to right,
// and numbers should not be converted
ULONG nLayoutMode = pOutDev->GetLayoutMode();
pOutDev->SetLayoutMode( TEXT_LAYOUT_BIDI_LTR );
INT16 nDigitLang = pOutDev->GetDigitLanguage();
pOutDev->SetDigitLanguage( LANGUAGE_ENGLISH );
//
2000-09-18 16:07:07 +00:00
pTree->Arrange(*pOutDev, rFormat);
//
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
}
void SetEditEngineDefaultFonts(
EditEngine &/*rEditEngine*/,
SfxItemPool &rEditEngineItemPool )
{
//
// 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,
DEFAULTFONT_FIXED, EE_CHAR_FONTINFO },
// 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_SAUDI_ARABIA, 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 );
#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(
SvxFontItem( aFont.GetFamily(), aFont.GetName(),
aFont.GetStyleName(), aFont.GetPitch(), aFont.GetCharSet(),
rFntDta.nFontInfoId ) );
}
// set font heights
SvxFontHeightItem aFontHeigt(
Application::GetDefaultDevice()->LogicToPixel(
Size( 0, 11 ), MapMode( MAP_POINT ) ).Height(), 100,
EE_CHAR_FONTHEIGHT );
rEditEngineItemPool.SetPoolDefaultItem( aFontHeigt );
aFontHeigt.SetWhich( EE_CHAR_FONTHEIGHT_CJK );
rEditEngineItemPool.SetPoolDefaultItem( aFontHeigt );
aFontHeigt.SetWhich( EE_CHAR_FONTHEIGHT_CTL );
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 );
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();
// 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 );
pEditEngine->ClearModifyFlag();
// forces new settings to be used if the itempool was modified
// after cthe creation of the EditEngine
//pEditEngine->Clear(); //#77957 incorrect font size
}
return *pEditEngine;
}
SfxItemPool& SmDocShell::GetEditEngineItemPool()
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::GetEditEngineItemPool" );
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)
{
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 );
//! 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;
}
// format/draw formulas always from left to right
// and numbers should not be converted
ULONG nLayoutMode = rDev.GetLayoutMode();
rDev.SetLayoutMode( TEXT_LAYOUT_BIDI_LTR );
INT16 nDigitLang = rDev.GetDigitLanguage();
rDev.SetDigitLanguage( LANGUAGE_ENGLISH );
//
2000-09-18 16:07:07 +00:00
pTree->Draw(rDev, rPosition);
//
rDev.SetLayoutMode( nLayoutMode );
rDev.SetDigitLanguage( nDigitLang );
if (bRestoreDrawMode)
rDev.SetDrawMode( nOldDrawMode );
2000-09-18 16:07:07 +00:00
}
Size SmDocShell::GetSize()
{
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 );
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 );
}
}
}
if ( 0 != (pRefDev = rDocShell.GetRefDev()) && pPrinter != pRefDev )
{
pRefDev->Push( PUSH_MAPMODE );
if ( SFX_CREATE_MODE_EMBEDDED == rDocShell.GetCreateMode() )
{
// 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();
if ( pRefDev && pRefDev != pPrinter )
pRefDev->Pop();
2000-09-18 16:07:07 +00:00
}
////////////////////////////////////////
Printer* SmDocShell::GetPrt()
2000-09-18 16:07:07 +00:00
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::GetPrt" );
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();
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;
}
OutputDevice* SmDocShell::GetRefDev()
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::GetRefDev" );
if ( SFX_CREATE_MODE_EMBEDDED == GetCreateMode() )
{
OutputDevice* pOutDev = GetDocumentRefDev();
if ( pOutDev )
return pOutDev;
}
return GetPrt();
}
2000-09-18 16:07:07 +00:00
void SmDocShell::SetPrinter( SfxPrinter *pNew )
{
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);
Repaint();
2000-09-18 16:07:07 +00:00
}
void SmDocShell::OnDocumentPrinterChanged( Printer *pPrt )
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::OnDocumentPrinterChanged" );
2000-09-18 16:07:07 +00:00
pTmpPrinter = pPrt;
SetFormulaArranged(FALSE);
Size aOldSize = GetVisArea().GetSize();
Repaint();
if( aOldSize != GetVisArea().GetSize() && aText.Len() )
2000-09-18 16:07:07 +00:00
SetModified( TRUE );
pTmpPrinter = 0;
}
void SmDocShell::Repaint()
2000-09-18 16:07:07 +00:00
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::Repaint" );
2000-09-18 16:07:07 +00:00
BOOL bIsEnabled = IsEnableSetModified();
if ( bIsEnabled )
EnableSetModified( FALSE );
SetFormulaArranged( FALSE );
Size aVisSize = GetSize();
2000-09-18 16:07:07 +00:00
SetVisAreaSize( aVisSize );
SmViewShell *pViewSh = SmGetActiveView();
if (pViewSh)
pViewSh->GetGraphicWindow().Invalidate();
2000-09-18 16:07:07 +00:00
if ( bIsEnabled )
EnableSetModified( bIsEnabled );
}
SmDocShell::SmDocShell(SfxObjectCreateMode eMode,const sal_Bool _bScriptSupport) :
2000-09-18 16:07:07 +00:00
SfxObjectShell(eMode),
pTree ( 0 ),
pEditEngineItemPool ( 0 ),
pEditEngine ( 0 ),
pPrinter ( 0 ),
pTmpPrinter ( 0 ),
nModifyCount ( 0 ),
bIsFormulaArranged ( FALSE )
2000-09-18 16:07:07 +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();
aFormat = pp->GetConfig()->GetStandardFormat();
2000-09-18 16:07:07 +00:00
StartListening(aFormat);
StartListening(*pp->GetConfig());
if ( !_bScriptSupport )
SetHasNoBasic();
2000-09-18 16:07:07 +00:00
SetModel( new SmModel(this) ); //! das hier mit new erzeugte Model brauch
//! im Destruktor nicht explizit geloescht werden.
2000-09-18 16:07:07 +00:00
//! Dies erledigt das Sfx.
}
SmDocShell::~SmDocShell()
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::~SmDocShell" );
2000-09-18 16:07:07 +00:00
SmModule *pp = SM_MOD1();
EndListening(aFormat);
EndListening(*pp->GetConfig());
delete pEditEngine;
CWS-TOOLING: integrate CWS aw063 2009-02-12 13:10:24 +0100 aw r267649 : #i99123# when a primitive is invisible, it is not sufficient to produce no output when decomposing, but to add invisible data using HitTestPrimitive2D. This is needed for the slideshow which relies on geometry data in MetaFiles when painting invisible objects 2009-02-12 13:08:39 +0100 aw r267648 : #i99123# do not ignore HitTestPrimitive2D, but draw empty rectangles instead. This is needed since Slideshow is based on getting MetaFile content when painting invisible objects 2009-02-11 16:04:28 +0100 aw r267620 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:04:10 +0100 aw r267619 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:03:56 +0100 aw r267618 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:03:39 +0100 aw r267617 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:03:21 +0100 aw r267615 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:02:48 +0100 aw r267614 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:02:24 +0100 aw r267613 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:02:01 +0100 aw r267612 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:01:32 +0100 aw r267611 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:01:05 +0100 aw r267610 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 16:00:15 +0100 aw r267608 : #i98788# made SfxItemPool destructor protected, added static ::Free method 2009-02-11 11:27:33 +0100 aw r267585 : #i98788# added missing include for STL 2009-02-10 17:46:50 +0100 aw r267570 : #i98788# added reaction on pool destruction 2009-02-10 17:11:58 +0100 aw r267562 : #i98788# added messaging mechanism to register for pool destruction 2009-02-10 13:35:35 +0100 aw r267549 : #i98788# removing changes, too complicated and risky for 3.1 2009-02-10 12:13:48 +0100 aw r267546 : #i98788# 4th round 2009-02-10 12:13:37 +0100 aw r267545 : #i98788# 4th round 2009-02-10 12:13:26 +0100 aw r267544 : #i98788# 4th round 2009-02-10 12:13:14 +0100 aw r267543 : #i98788# 4th round 2009-02-10 12:13:03 +0100 aw r267542 : #i98788# 4th round 2009-02-10 12:12:50 +0100 aw r267541 : #i98788# 4th round 2009-02-10 12:12:37 +0100 aw r267540 : #i98788# 4th round 2009-02-08 14:38:22 +0100 aw r267495 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-08 14:38:06 +0100 aw r267494 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-08 14:37:48 +0100 aw r267493 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-08 14:37:17 +0100 aw r267492 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-08 14:36:56 +0100 aw r267491 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-08 14:36:44 +0100 aw r267490 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-08 14:36:29 +0100 aw r267489 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-08 14:36:16 +0100 aw r267488 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-08 14:36:02 +0100 aw r267487 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-08 14:35:46 +0100 aw r267486 : #i98788# 3rd round of changes to SfxItemPool handling 2009-02-05 12:20:39 +0100 aw r267415 : #i98788# 2nd batch of adaptions for SfxItemPoolHolder addition 2009-02-04 15:12:54 +0100 aw r267385 : #i98788# added newline at EOF 2009-02-04 13:26:04 +0100 aw r267379 : #i98788# make SfxItemPool holdable 2009-02-04 13:25:40 +0100 aw r267378 : #i98788# make SfxItemPool holdable 2009-02-04 13:25:08 +0100 aw r267377 : #i98788# make SfxItemPool holdable 2009-02-04 13:24:42 +0100 aw r267376 : #i98788# make SfxItemPool holdable 2009-02-04 13:23:14 +0100 aw r267375 : #i98788# make SfxItemPool holdable 2009-02-04 13:23:02 +0100 aw r267374 : #i98788# make SfxItemPool holdable 2009-01-29 17:08:31 +0100 aw r267159 : #i97628# completed the fix 2009-01-29 17:08:15 +0100 aw r267158 : #i97628# completed the fix 2009-01-29 14:09:07 +0100 aw r267132 : #i97628# Corrected usage of ParagraphData in headers 2009-01-29 14:06:58 +0100 iha r267131 : #i98344# incorrect font size in charts 2009-01-29 12:13:46 +0100 aw r267115 : #i97628# back to old state; triggers too many errors in other modules 2009-01-29 12:03:51 +0100 aw r267114 : #i97628# enabled exceptions due to STL vector include 2009-01-29 11:21:37 +0100 aw r267107 : #i97628# added needed include 2009-01-28 17:58:29 +0100 aw r267077 : #i97628# first version of newly implemented OutlinerParaObject and adaptions 2009-01-28 17:58:12 +0100 aw r267076 : #i97628# first version of newly implemented OutlinerParaObject and adaptions 2009-01-28 17:57:51 +0100 aw r267074 : #i97628# first version of newly implemented OutlinerParaObject and adaptions 2009-01-28 17:57:21 +0100 aw r267073 : #i97628# first version of newly implemented OutlinerParaObject and adaptions 2009-01-27 17:07:33 +0100 aw r267011 : #i98402# added support for ViewRange when exporting MetaFiles in ObjectContactOfPageView::DoProcessDisplay to avoid to paint too much 2009-01-27 11:45:48 +0100 aw r266973 : #i98404# Added a warning to a place where a conversion to rectangle should not be copied from 2009-01-26 21:44:36 +0100 iha r266949 : #i98497# 3D charts are rendered with wrong size 2009-01-26 20:47:07 +0100 aw r266947 : #i98404# handle BackgroundColorPrimitive2D directly in PixelRenderers and avoid AA under all circumstances 2009-01-26 14:50:36 +0100 aw r266926 : #i98386# secured cloning of SdrObject in IMapUserData by boost::shared_prt usage 2009-01-26 12:51:30 +0100 aw r266916 : #i96581# added separated FontStretching and fallback for small X!=Y scale differences 2009-01-23 16:14:55 +0100 aw r266834 : #i96475# added missing implementation of TextDecoratedPortionPrimitive2D::getB2DRange 2009-01-23 15:24:34 +0100 aw r266826 : #i98405# fixed fallback to DrawAlphaRect to use the correctly sized rectangle 2009-01-23 13:34:43 +0100 aw r266813 : #i96474# fixed impSplitSingleWords for an unexpected case 2009-01-23 10:47:31 +0100 aw r266786 : #i98289#,#i96474# tooling and new flags for tasks 2009-01-23 10:47:20 +0100 aw r266785 : #i98289#,#i96474# tooling and new flags for tasks 2009-01-23 10:47:09 +0100 aw r266783 : #i98289#,#i96474# tooling and new flags for tasks 2009-01-23 10:46:58 +0100 aw r266782 : #i98289#,#i96474# tooling and new flags for tasks 2009-01-23 10:46:48 +0100 aw r266781 : #i98289#,#i96474# tooling and new flags for tasks
2009-03-04 14:16:02 +00:00
SfxItemPool::Free(pEditEngineItemPool);
2000-09-18 16:07:07 +00:00
delete pTree;
delete pPrinter;
}
2001-03-09 16:14:48 +00:00
BOOL SmDocShell::SetData( const String& rData )
{
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)
{
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();
DBG_ASSERT( !rFltName.EqualsAscii( STAROFFICE_XML ), "Wrong filter!");
if ( rFltName.EqualsAscii( MATHML_XML ) )
2000-11-15 09:47:20 +00:00
{
if (pTree)
{
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);
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();
if ( pStream )
2000-09-18 16:07:07 +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 );
if ( TRUE == (bSuccess = (1 == aEquation.Parse( aStorage )) ))
Parse();
}
}
else
{
//bSuccess = ImportSM20File( pStream );
}
2000-09-18 16:07:07 +00:00
}
}
if ( GetCreateMode() == SFX_CREATE_MODE_EMBEDDED )
{
//???OnDocumentPrinterChanged(0);
SetFormulaArranged( FALSE );
Repaint();
}
2000-09-18 16:07:07 +00:00
FinishedLoading( SFX_LOADED_ALL );
return bSuccess;
}
BOOL SmDocShell::InitNew( const uno::Reference < embed::XStorage >& xStorage )
2000-09-18 16:07:07 +00:00
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::InitNew" );
2000-09-18 16:07:07 +00:00
BOOL bRet = FALSE;
if ( SfxObjectShell::InitNew( xStorage ) )
2000-09-18 16:07:07 +00:00
{
bRet = TRUE;
SetVisArea(Rectangle(Point(0, 0), Size(2000, 1000)));
}
return bRet;
}
BOOL SmDocShell::Load( SfxMedium& rMedium )
2000-09-18 16:07:07 +00:00
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::Load" );
2000-09-18 16:07:07 +00:00
BOOL bRet = FALSE;
if( SfxObjectShell::Load( rMedium ))
2000-09-18 16:07:07 +00:00
{
uno::Reference < embed::XStorage > xStorage = pMedium->GetStorage();
uno::Reference < container::XNameAccess > xAccess (xStorage, uno::UNO_QUERY);
CWS-TOOLING: integrate CWS cmcfixes51 2008-12-08 10:12:55 +0100 cmc r264975 : #i96203# protect with ifdefs to avoid unused symbol on mac 2008-12-05 12:23:47 +0100 cmc r264898 : CWS-TOOLING: rebase CWS cmcfixes51 to trunk@264807 (milestone: DEV300:m37) 2008-12-01 14:45:17 +0100 cmc r264606 : #i76655# ehlos apparently required 2008-11-28 17:49:30 +0100 cmc r264567 : #i96655# remove newly unused method 2008-11-28 10:41:28 +0100 cmc r264531 : #i96647# better ppc-bridges flushCode impl 2008-11-27 12:58:40 +0100 cmc r264478 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 12:32:49 +0100 cmc r264476 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 12:26:02 +0100 cmc r264475 : #i96655# redundant old table export helpers 2008-11-27 11:49:06 +0100 cmc r264473 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 11:38:35 +0100 cmc r264471 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 11:14:21 +0100 cmc r264467 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 11:06:22 +0100 cmc r264464 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:58:18 +0100 cmc r264462 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:41:44 +0100 cmc r264461 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:19:24 +0100 cmc r264460 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:13:39 +0100 cmc r264459 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:06:14 +0100 cmc r264458 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:59:54 +0100 cmc r264457 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:52:51 +0100 cmc r264456 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:48:26 +0100 cmc r264454 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:40:20 +0100 cmc r264452 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:35:26 +0100 cmc r264451 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:31:00 +0100 cmc r264450 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:24:08 +0100 cmc r264449 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 00:26:15 +0100 cmc r264443 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 00:21:01 +0100 cmc r264442 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 00:09:40 +0100 cmc r264441 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 23:51:56 +0100 cmc r264440 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 23:49:09 +0100 cmc r264439 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 18:09:54 +0100 cmc r264432 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 18:07:40 +0100 cmc r264431 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 17:28:02 +0100 cmc r264429 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 17:27:39 +0100 cmc r264428 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 17:18:36 +0100 cmc r264426 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 16:22:16 +0100 cmc r264415 : #i96624# make implicit braces and brackets explicit to avoid warnings 2008-11-26 16:00:23 +0100 cmc r264409 : #i90426# remove warnings from svtools 2008-11-26 15:59:17 +0100 cmc r264408 : #i90426# remove warnings 2008-11-26 15:47:32 +0100 cmc r264404 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:46:57 +0100 cmc r264394 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:19:50 +0100 cmc r264387 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:15:26 +0100 cmc r264386 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:11:26 +0100 cmc r264384 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 13:44:23 +0100 cmc r264380 : #i96084# comfirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 13:12:24 +0100 cmc r264372 : #i96604# silence new warnings 2008-11-26 12:35:02 +0100 cmc r264369 : #i96203# make qstarter work in 3-layer land 2008-11-26 12:33:04 +0100 cmc r264368 : #i96170# ensure gtypes are up and running
2008-12-11 07:05:03 +00:00
if (
(
xAccess->hasByName( C2S( "content.xml" ) ) &&
xStorage->isStreamElement( C2S( "content.xml" ) )
) ||
(
xAccess->hasByName( C2S( "Content.xml" ) ) &&
xStorage->isStreamElement( C2S( "Content.xml" ) )
)
)
{
// 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);
ULONG nError = aEquation.Import(rMedium);
bRet = 0 == nError;
SetError( nError );
}
2000-09-18 16:07:07 +00:00
}
if ( GetCreateMode() == SFX_CREATE_MODE_EMBEDDED )
{
//???OnDocumentPrinterChanged(0);
SetFormulaArranged( FALSE );
Repaint();
}
2000-09-18 16:07:07 +00:00
FinishedLoading( SFX_LOADED_ALL );
return bRet;
}
//------------------------------------------------------------------
BOOL SmDocShell::Save()
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::Save" );
//! apply latest changes if necessary
UpdateText();
if ( SfxObjectShell::Save() )
2001-02-06 15:02:19 +00:00
{
if (!pTree)
2001-03-29 18:40:27 +00:00
Parse();
if( pTree && !IsFormulaArranged() )
ArrangeFormula();
Reference<com::sun::star::frame::XModel> xModel(GetModel());
SmXMLWrapper aEquation(xModel);
aEquation.SetFlat(sal_False);
return aEquation.Export(*GetMedium());
2001-02-06 15:02:19 +00:00
}
2000-09-18 16:07:07 +00:00
return FALSE;
}
/*
* replace bad characters that can not be saved. (#i74144)
* */
sal_Bool SmDocShell::ReplaceBadChars()
{
sal_Bool bReplace = sal_False;
if (pEditEngine)
{
String aEngTxt( pEditEngine->GetText( LINEEND_LF ) );
const sal_Unicode *pEngTxt = aEngTxt.GetBuffer();
xub_StrLen nLen = aEngTxt.Len();
for (xub_StrLen i = 0; i < nLen && !bReplace; ++i)
{
const sal_Unicode c = *pEngTxt++;
if (c < ' ' && c != '\r' && c != '\n' && c != '\t')
bReplace = sal_True;
}
if (bReplace)
{
sal_Unicode *pChgTxt = aEngTxt.GetBufferAccess();
for (xub_StrLen i = 0; i < nLen; ++i)
{
sal_Unicode &rc = *pChgTxt++;
if (rc < ' ' && rc != '\r' && rc != '\n' && rc != '\t')
rc = ' ';
}
aEngTxt.ReleaseBufferAccess( nLen );
aText = aEngTxt;
}
}
return bReplace;
}
2000-09-18 16:07:07 +00:00
void SmDocShell::UpdateText()
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::UpdateText" );
if (pEditEngine && pEditEngine->IsModified())
{
String aEngTxt( pEditEngine->GetText( LINEEND_LF ) );
if (GetText() != aEngTxt)
SetText( aEngTxt );
}
}
BOOL SmDocShell::SaveAs( SfxMedium& rMedium )
2000-09-18 16:07:07 +00:00
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::SaveAs" );
2000-09-18 16:07:07 +00:00
BOOL bRet = FALSE;
//! apply latest changes if necessary
UpdateText();
if ( SfxObjectShell::SaveAs( rMedium ) )
2000-09-18 16:07:07 +00:00
{
if (!pTree)
2001-03-29 18:40:27 +00:00
Parse();
if( pTree && !IsFormulaArranged() )
ArrangeFormula();
Reference<com::sun::star::frame::XModel> xModel(GetModel());
SmXMLWrapper aEquation(xModel);
aEquation.SetFlat(sal_False);
bRet = aEquation.Export(rMedium);
2000-09-18 16:07:07 +00:00
}
return bRet;
}
BOOL SmDocShell::ConvertTo( SfxMedium &rMedium )
{
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-10-18 11:32:43 +00:00
Reference<com::sun::star::frame::XModel> xModel(GetModel());
SmXMLWrapper aEquation(xModel);
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);
aEquation.SetFlat(sal_True);
bRet = aEquation.Export(rMedium);
2000-11-15 09:47:20 +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;
}
BOOL SmDocShell::SaveCompleted( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage )
2000-09-18 16:07:07 +00:00
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::SaveCompleted" );
if( SfxObjectShell::SaveCompleted( xStorage ))
2001-02-06 15:02:19 +00:00
return TRUE;
2000-09-18 16:07:07 +00:00
return FALSE;
}
void SmDocShell::Execute(SfxRequest& rReq)
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::Execute" );
2000-09-18 16:07:07 +00:00
switch (rReq.GetSlot())
{
case SID_TEXTMODE:
2000-09-18 16:07:07 +00:00
{
SmFormat aOldFormat = GetFormat();
SmFormat aNewFormat( aOldFormat );
aNewFormat.SetTextmode(!aOldFormat.IsTextmode());
SfxUndoManager *pTmpUndoMgr = GetUndoManager();
if (pTmpUndoMgr)
pTmpUndoMgr->AddUndoAction(
new SmFormatAction(this, aOldFormat, aNewFormat));
SetFormat( aNewFormat );
Repaint();
2000-09-18 16:07:07 +00:00
}
break;
2000-09-18 16:07:07 +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);
}
break;
2000-09-18 16:07:07 +00:00
case SID_LOADSYMBOLS:
LoadSymbols();
break;
2000-09-18 16:07:07 +00:00
case SID_SAVESYMBOLS:
SaveSymbols();
break;
2000-09-18 16:07:07 +00:00
case SID_FONT:
2000-09-18 16:07:07 +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
SmFormat aOldFormat = GetFormat();
pFontTypeDialog->ReadFrom( aOldFormat );
2000-09-18 16:07:07 +00:00
if (pFontTypeDialog->Execute() == RET_OK)
{
SmFormat aNewFormat( aOldFormat );
2000-09-18 16:07:07 +00:00
pFontTypeDialog->WriteTo(aNewFormat);
SfxUndoManager *pTmpUndoMgr = GetUndoManager();
if (pTmpUndoMgr)
pTmpUndoMgr->AddUndoAction(
new SmFormatAction(this, aOldFormat, aNewFormat));
2000-09-18 16:07:07 +00:00
SetFormat( aNewFormat );
Repaint();
2000-09-18 16:07:07 +00:00
}
delete pFontTypeDialog;
}
break;
2000-09-18 16:07:07 +00:00
case SID_FONTSIZE:
2000-09-18 16:07:07 +00:00
{
SmFontSizeDialog *pFontSizeDialog = new SmFontSizeDialog(NULL);
SmFormat aOldFormat = GetFormat();
pFontSizeDialog->ReadFrom( aOldFormat );
2000-09-18 16:07:07 +00:00
if (pFontSizeDialog->Execute() == RET_OK)
{
SmFormat aNewFormat( aOldFormat );
2000-09-18 16:07:07 +00:00
pFontSizeDialog->WriteTo(aNewFormat);
2000-09-18 16:07:07 +00:00
SfxUndoManager *pTmpUndoMgr = GetUndoManager();
if (pTmpUndoMgr)
pTmpUndoMgr->AddUndoAction(
new SmFormatAction(this, aOldFormat, aNewFormat));
2000-09-18 16:07:07 +00:00
SetFormat( aNewFormat );
Repaint();
2000-09-18 16:07:07 +00:00
}
delete pFontSizeDialog;
}
break;
2000-09-18 16:07:07 +00:00
case SID_DISTANCE:
2000-09-18 16:07:07 +00:00
{
SmDistanceDialog *pDistanceDialog = new SmDistanceDialog(NULL);
SmFormat aOldFormat = GetFormat();
pDistanceDialog->ReadFrom( aOldFormat );
2000-09-18 16:07:07 +00:00
if (pDistanceDialog->Execute() == RET_OK)
{
SmFormat aNewFormat( aOldFormat );
2000-09-18 16:07:07 +00:00
pDistanceDialog->WriteTo(aNewFormat);
2000-09-18 16:07:07 +00:00
SfxUndoManager *pTmpUndoMgr = GetUndoManager();
if (pTmpUndoMgr)
pTmpUndoMgr->AddUndoAction(
new SmFormatAction(this, aOldFormat, aNewFormat));
2000-09-18 16:07:07 +00:00
SetFormat( aNewFormat );
Repaint();
2000-09-18 16:07:07 +00:00
}
delete pDistanceDialog;
}
break;
2000-09-18 16:07:07 +00:00
case SID_ALIGN:
2000-09-18 16:07:07 +00:00
{
SmAlignDialog *pAlignDialog = new SmAlignDialog(NULL);
SmFormat aOldFormat = GetFormat();
pAlignDialog->ReadFrom( aOldFormat );
2000-09-18 16:07:07 +00:00
if (pAlignDialog->Execute() == RET_OK)
{
SmFormat aNewFormat( aOldFormat );
2000-09-18 16:07:07 +00:00
pAlignDialog->WriteTo(aNewFormat);
2000-09-18 16:07:07 +00:00
SmModule *pp = SM_MOD1();
SmFormat aFmt( pp->GetConfig()->GetStandardFormat() );
pAlignDialog->WriteTo( aFmt );
pp->GetConfig()->SetStandardFormat( aFmt );
2000-09-18 16:07:07 +00:00
SfxUndoManager *pTmpUndoMgr = GetUndoManager();
if (pTmpUndoMgr)
pTmpUndoMgr->AddUndoAction(
new SmFormatAction(this, aOldFormat, aNewFormat));
2000-09-18 16:07:07 +00:00
SetFormat( aNewFormat );
Repaint();
2000-09-18 16:07:07 +00:00
}
delete pAlignDialog;
}
break;
2000-09-18 16:07:07 +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());
}
}
break;
2000-09-18 16:07:07 +00:00
case SID_UNDO:
case SID_REDO:
{
SfxUndoManager* pTmpUndoMgr = GetUndoManager();
if( pTmpUndoMgr )
{
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() )
{
nCount = pTmpUndoMgr->GetUndoActionCount();
fnDo = &SfxUndoManager::Undo;
}
else
{
nCount = pTmpUndoMgr->GetRedoActionCount();
fnDo = &SfxUndoManager::Redo;
}
for( ; nCnt && nCount; --nCnt, --nCount )
(pTmpUndoMgr->*fnDo)( 0 );
}
Repaint();
}
break;
2000-09-18 16:07:07 +00:00
}
}
void SmDocShell::GetState(SfxItemSet &rSet)
{
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)
{
case SID_TEXTMODE:
rSet.Put(SfxBoolItem(SID_TEXTMODE, GetFormat().IsTextmode()));
break;
2000-09-18 16:07:07 +00:00
case SID_DOCTEMPLATE :
rSet.DisableItem(SID_DOCTEMPLATE);
break;
2000-09-18 16:07:07 +00:00
case SID_AUTO_REDRAW :
2000-09-18 16:07:07 +00:00
{
SmModule *pp = SM_MOD1();
BOOL bRedraw = pp->GetConfig()->IsAutoRedraw();
rSet.Put(SfxBoolItem(SID_AUTO_REDRAW, bRedraw));
2000-09-18 16:07:07 +00:00
}
break;
2000-09-18 16:07:07 +00:00
case SID_MODIFYSTATUS:
2000-09-18 16:07:07 +00:00
{
sal_Unicode cMod = ' ';
2000-09-18 16:07:07 +00:00
if (IsModified())
cMod = '*';
rSet.Put(SfxStringItem(SID_MODIFYSTATUS, String(cMod)));
}
break;
2000-09-18 16:07:07 +00:00
case SID_TEXT:
rSet.Put(SfxStringItem(SID_TEXT, GetText()));
break;
case SID_GAPHIC_SM:
rSet.Put(SfxInt16Item(SID_GAPHIC_SM, nModifyCount));
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:
{
SfxUndoManager* pTmpUndoMgr = GetUndoManager();
if( pTmpUndoMgr )
{
UniString(SfxUndoManager:: *fnGetComment)( USHORT ) const;
2000-09-18 16:07:07 +00:00
sal_uInt16 nCount;
if( SID_GETUNDOSTRINGS == nWh )
{
nCount = pTmpUndoMgr->GetUndoActionCount();
fnGetComment = &SfxUndoManager::GetUndoActionComment;
}
else
{
nCount = pTmpUndoMgr->GetRedoActionCount();
fnGetComment = &SfxUndoManager::GetRedoActionComment;
}
if( nCount )
{
String sList;
for( sal_uInt16 n = 0; n < nCount; ++n )
( sList += (pTmpUndoMgr->*fnGetComment)( n ) )
+= '\n';
SfxStringListItem aItem( nWh );
aItem.SetString( sList );
rSet.Put( aItem );
}
}
else
rSet.DisableItem( nWh );
}
break;
2000-09-18 16:07:07 +00:00
}
}
}
SfxUndoManager *SmDocShell::GetUndoManager()
2000-09-18 16:07:07 +00:00
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::GetUndoManager" );
if (!pEditEngine)
GetEditEngine();
return &pEditEngine->GetUndoManager();
2000-09-18 16:07:07 +00:00
}
void SmDocShell::SaveSymbols()
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::SaveSymbols" );
SmModule *pp = SM_MOD1();
pp->GetSymSetManager().Save();
2000-09-18 16:07:07 +00:00
}
void SmDocShell::Draw(OutputDevice *pDevice,
const JobSetup &,
USHORT /*nAspect*/)
2000-09-18 16:07:07 +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);
}
SfxItemPool& SmDocShell::GetPool() const
2000-09-18 16:07:07 +00:00
{
return SFX_APP()->GetPool();
}
void SmDocShell::SetVisArea(const Rectangle & rVisArea)
2000-09-18 16:07:07 +00:00
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::SetVisArea" );
Rectangle aNewRect(rVisArea);
2000-09-18 16:07:07 +00:00
aNewRect.SetPos(Point());
2000-09-18 16:07:07 +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 );
//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;
if( GetCreateMode() == SFX_CREATE_MODE_EMBEDDED && !IsInPlaceActive() && GetFrame() )
2000-09-18 16:07:07 +00:00
{
GetFrame()->LockAdjustPosSizePixel();
bUnLockFrame = TRUE;
}
else
bUnLockFrame = FALSE;
SfxObjectShell::SetVisArea( aNewRect );
2000-09-18 16:07:07 +00:00
if( bUnLockFrame )
GetFrame()->UnlockAdjustPosSizePixel();
if ( bIsEnabled )
EnableSetModified( bIsEnabled );
}
void SmDocShell::FillClass(SvGlobalName* pClassName,
sal_uInt32* pFormat,
String* /*pAppName*/,
2000-09-18 16:07:07 +00:00
String* pFullTypeName,
String* pShortTypeName,
CWS-TOOLING: integrate CWS fwk92 2008-12-04 14:43:28 +0100 oc r264844 : #i96788# 2008-12-03 02:15:17 +0100 fredrikh r264734 : i96817 2008-12-02 16:42:46 +0100 tbo r264720 : #i96763# changes to password dialog for framework, math, global 2008-11-26 16:26:28 +0100 mav r264418 : #i93617# fix typo 2008-11-26 16:13:03 +0100 mav r264411 : #i93617# fix the linux scenario 2008-11-25 17:58:01 +0100 mav r264323 : #i93617# fix the windows problems 2008-11-25 17:51:33 +0100 mav r264321 : #i93617# fix the windows problems 2008-11-21 16:01:18 +0100 mav r264145 : #i78753# integrate the patch 2008-11-21 14:08:32 +0100 mav r264136 : #i93617# integrate the patch 2008-11-21 13:01:56 +0100 mav r264127 : #i82947# integrate the patch 2008-11-20 18:14:19 +0100 mav r264092 : #i95793# look for import filter 2008-11-18 15:23:44 +0100 pb r263776 : fix: #i92579# #i92583# SvxSecurity/SearchPage: more space for controls 2008-11-18 15:21:39 +0100 pb r263774 : fix: #i92579# #i92583# SvxSecurity/SearchPage: more space for controls 2008-11-18 15:18:54 +0100 pb r263772 : fix: #i92583# SvxSearchPage::InitControls_Impl() added 2008-11-18 15:16:07 +0100 pb r263771 : fix: #i92579# columns calculated newly 2008-11-18 11:09:28 +0100 mav r263751 : #i21923# small fixes 2008-11-17 17:22:04 +0100 mav r263730 : #i21923# integrate the patch 2008-11-17 14:29:02 +0100 mav r263723 : #i21923# integrate the patch 2008-11-13 16:46:08 +0100 mav r263653 : #i88127# integrate the patch 2008-11-13 14:46:56 +0100 mav r263645 : #i54638# integrate the patch 2008-11-11 13:11:03 +0100 pb r263554 : fix: #i93142# disable maRecommReadOnlyCB on read-only documents 2008-11-10 13:30:58 +0100 pb r263516 : fix: #i93833# Mozilla Plug-in -> Browser Plug-in 2008-11-10 13:29:10 +0100 pb r263515 : fix: #i93833# Mozilla Plug-in -> Browser Plug-in 2008-11-10 06:10:11 +0100 pb r263505 : fix: #i94937# now .uno.ExtendedHelp without image 2008-11-04 20:52:50 +0100 mav r263337 : migrate cws fwk92 to svn
2008-12-12 12:52:51 +00:00
sal_Int32 nFileFormat,
sal_Bool bTemplate /* = sal_False */) const
2000-09-18 16:07:07 +00:00
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::FillClass" );
if (nFileFormat == SOFFICE_FILEFORMAT_60 )
2001-02-06 15:02:19 +00:00
{
*pClassName = SvGlobalName(SO3_SM_CLASSID_60);
*pFormat = SOT_FORMATSTR_ID_STARMATH_60;
*pFullTypeName = String(SmResId(STR_MATH_DOCUMENT_FULLTYPE_CURRENT));
2001-02-06 15:02:19 +00:00
*pShortTypeName = String(SmResId(RID_DOCUMENTSTR));
}
else if (nFileFormat == SOFFICE_FILEFORMAT_8 )
{
*pClassName = SvGlobalName(SO3_SM_CLASSID_60);
CWS-TOOLING: integrate CWS fwk92 2008-12-04 14:43:28 +0100 oc r264844 : #i96788# 2008-12-03 02:15:17 +0100 fredrikh r264734 : i96817 2008-12-02 16:42:46 +0100 tbo r264720 : #i96763# changes to password dialog for framework, math, global 2008-11-26 16:26:28 +0100 mav r264418 : #i93617# fix typo 2008-11-26 16:13:03 +0100 mav r264411 : #i93617# fix the linux scenario 2008-11-25 17:58:01 +0100 mav r264323 : #i93617# fix the windows problems 2008-11-25 17:51:33 +0100 mav r264321 : #i93617# fix the windows problems 2008-11-21 16:01:18 +0100 mav r264145 : #i78753# integrate the patch 2008-11-21 14:08:32 +0100 mav r264136 : #i93617# integrate the patch 2008-11-21 13:01:56 +0100 mav r264127 : #i82947# integrate the patch 2008-11-20 18:14:19 +0100 mav r264092 : #i95793# look for import filter 2008-11-18 15:23:44 +0100 pb r263776 : fix: #i92579# #i92583# SvxSecurity/SearchPage: more space for controls 2008-11-18 15:21:39 +0100 pb r263774 : fix: #i92579# #i92583# SvxSecurity/SearchPage: more space for controls 2008-11-18 15:18:54 +0100 pb r263772 : fix: #i92583# SvxSearchPage::InitControls_Impl() added 2008-11-18 15:16:07 +0100 pb r263771 : fix: #i92579# columns calculated newly 2008-11-18 11:09:28 +0100 mav r263751 : #i21923# small fixes 2008-11-17 17:22:04 +0100 mav r263730 : #i21923# integrate the patch 2008-11-17 14:29:02 +0100 mav r263723 : #i21923# integrate the patch 2008-11-13 16:46:08 +0100 mav r263653 : #i88127# integrate the patch 2008-11-13 14:46:56 +0100 mav r263645 : #i54638# integrate the patch 2008-11-11 13:11:03 +0100 pb r263554 : fix: #i93142# disable maRecommReadOnlyCB on read-only documents 2008-11-10 13:30:58 +0100 pb r263516 : fix: #i93833# Mozilla Plug-in -> Browser Plug-in 2008-11-10 13:29:10 +0100 pb r263515 : fix: #i93833# Mozilla Plug-in -> Browser Plug-in 2008-11-10 06:10:11 +0100 pb r263505 : fix: #i94937# now .uno.ExtendedHelp without image 2008-11-04 20:52:50 +0100 mav r263337 : migrate cws fwk92 to svn
2008-12-12 12:52:51 +00:00
*pFormat = bTemplate ? SOT_FORMATSTR_ID_STARMATH_8_TEMPLATE : SOT_FORMATSTR_ID_STARMATH_8;
*pFullTypeName = String(SmResId(STR_MATH_DOCUMENT_FULLTYPE_CURRENT));
*pShortTypeName = String(SmResId(RID_DOCUMENTSTR));
}
2000-09-18 16:07:07 +00:00
}
ULONG SmDocShell::GetMiscStatus() const
{
return SfxObjectShell::GetMiscStatus() | SVOBJ_MISCSTATUS_NOTRESIZEABLE
2000-09-18 16:07:07 +00:00
| SVOBJ_MISCSTATUS_RESIZEONPRINTERCHANGE;
}
void SmDocShell::SetModified(BOOL bModified)
{
RTL_LOGFILE_CONTEXT( aLog, "starmath: SmDocShell::SetModified" );
if( IsEnableSetModified() )
{
SfxObjectShell::SetModified( bModified );
Broadcast(SfxSimpleHint(SFX_HINT_DOCCHANGED));
}
2000-09-18 16:07:07 +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