summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/inc/ndgrf.hxx152
-rw-r--r--sw/inc/sw.mk9
-rw-r--r--sw/source/core/graphic/makefile.mk16
-rw-r--r--sw/source/core/graphic/ndgrf.cxx972
4 files changed, 23 insertions, 1126 deletions
diff --git a/sw/inc/ndgrf.hxx b/sw/inc/ndgrf.hxx
index b1fcdf1e04..79da882e5c 100644
--- a/sw/inc/ndgrf.hxx
+++ b/sw/inc/ndgrf.hxx
@@ -2,9 +2,9 @@
*
* $RCSfile: ndgrf.hxx,v $
*
- * $Revision: 1.1.1.1 $
+ * $Revision: 1.2 $
*
- * last change: $Author: hr $ $Date: 2000-09-18 17:14:27 $
+ * last change: $Author: jp $ $Date: 2000-09-28 13:02:59 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -76,9 +76,6 @@ class SwGrfFmtColl;
class SwDoc;
class GraphicAttr;
-// Code for the new GraphicObject
-#ifdef USE_GRFOBJECT
-
// --------------------
// SwGrfNode
// --------------------
@@ -201,151 +198,6 @@ public:
#endif
};
-/* */
-#else
-// USE_GRFOBJECT
-
-// --------------------
-// SwGrfNode
-// --------------------
-class SwGrfNode: public SwNoTxtNode
-{
- friend class SwNodes;
- friend class SwGrfFrm;
- friend class SwGraphicAccess;
-
- Graphic aGraphic;
- SvBaseLinkRef refLink; // falls Grafik nur als Link, dann Pointer gesetzt
- Size nGrfSize;
- String aStrmName; // SW3: Name des Storage-Streams fuer Embedded
- String aNewStrmName; // SW3: name des Storage-Streams bei SaveAs
- String aLowResGrf; // HTML: LowRes Grafik (Ersatzdarstellung bis
- // die normale (HighRes) geladen ist.
-
- const void *pCchMagic; // "MagicNumber" innerhalb des Grafikcaches
- USHORT nCchIndex; // Index im Grafikcache
-
- BOOL bTransparentFlagValid :1;
- BOOL bIsTransparent :1;
- BOOL bInSwapIn :1;
- BOOL bGrafikArrived :1;
- BOOL bChgTwipSize :1;
- BOOL bLoadLowResGrf :1;
- BOOL bFrameInPaint :1; //Um Start-/EndActions im Paint (ueber
- //SwapIn zu verhindern.
- BOOL bScaleImageMap :1; //Image-Map in SetTwipSize skalieren
-
- SwGrfNode( const SwNodeIndex& rWhere,
- const String& rGrfName, const String& rFltName,
- const Graphic* pGraphic,
- SwGrfFmtColl* pGrfColl,
- SwAttrSet* pAutoAttr = 0 );
- // Ctor fuer Einlesen (SW/G) ohne Grafik
- SwGrfNode( const SwNodeIndex& rWhere,
- const String& rGrfName, const String& rFltName,
- SwGrfFmtColl* pGrfColl,
- SwAttrSet* pAutoAttr = 0 );
-
- void InsertLink( const String& rGrfName, const String& rFltName );
- void DelStreamName();
-
- void Impl_IsTransparent();
-
-public:
- ~SwGrfNode();
-
- const Graphic& GetGrf() const { return aGraphic; }
-
- virtual SwCntntNode *SplitNode( const SwPosition & );
-
- virtual Size GetTwipSize() const;
-#ifndef _FESHVIEW_ONLY_INLINE_NEEDED
- void SetTwipSize( const Size& rSz );
-
- inline BOOL IsTransparent() const;
- inline void InvalidateTransparentFlag() { bTransparentFlagValid = FALSE; }
- inline void SetTransparent( BOOL bFlag )
- { bIsTransparent = bFlag, bTransparentFlagValid = TRUE; }
-
- inline BOOL IsChgTwipSize() const { return bChgTwipSize; }
- inline void SetChgTwipSize( BOOL b ) { bChgTwipSize = b; }
-
- inline BOOL IsGrafikArrived() const { return bGrafikArrived; }
- inline void SetGrafikArrived( BOOL b ) { bGrafikArrived = b; }
-
- inline BOOL IsFrameInPaint() const { return bFrameInPaint; }
- inline void SetFrameInPaint( BOOL b ) { bFrameInPaint = b; }
-
- inline BOOL IsScaleImageMap() const { return bScaleImageMap; }
- inline void SetScaleImageMap( BOOL b ) { bScaleImageMap = b; }
-
- inline void SetCacheFlags( const void* p, USHORT nIdx = 0 )
- { pCchMagic = p; nCchIndex = nIdx; }
- void ClearQBmpCache();
- inline BOOL HasMagicId() const { return 0 != pCchMagic; }
-
- // alles fuers Laden der LowRes-Grafiken
- inline BOOL IsLoadLowResGrf() const { return bLoadLowResGrf; }
- inline void SetLoadLowResGrf( BOOL b ) { bLoadLowResGrf = b; }
- const String& GetLowResGrfName() const { return aLowResGrf; }
- void SetLowResGrfName( const String& r ) { aLowResGrf = r; }
-#endif
- // steht in ndcopy.cxx
- virtual SwCntntNode* MakeCopy( SwDoc*, const SwNodeIndex& ) const;
- // erneutes Einlesen, falls Graphic nicht Ok ist. Die
- // aktuelle wird durch die neue ersetzt.
-#ifndef _FESHVIEW_ONLY_INLINE_NEEDED
- BOOL ReRead( const String& rGrfName, const String& rFltName,
- const Graphic* pGraphic = 0, BOOL bModify = TRUE );
- // Laden der Grafik unmittelbar vor der Anzeige
- short SwapIn( BOOL bWaitForData = FALSE );
- // Entfernen der Grafik, um Speicher freizugeben
- short SwapOut();
- // Schreiben der Grafik
- BOOL StoreGraphics( SvStorage* pDocStg = NULL );
- // Zugriff auf den Storage-Streamnamen
- const String& GetStreamName() const;
- void SetStreamName( const String& r ) { aStrmName = r; }
- void SaveCompleted( BOOL bClear );
-#endif
-
- // Der Grafik sagen, dass sich der Node im Undobereich befindet
- virtual BOOL SavePersistentData();
- virtual BOOL RestorePersistentData();
-
-#ifndef _FESHVIEW_ONLY_INLINE_NEEDED
- // Abfrage der Link-Daten
- BOOL IsGrfLink() const { return refLink.Is(); }
- inline BOOL IsLinkedFile() const;
- inline BOOL IsLinkedDDE() const;
- SvBaseLinkRef GetLink() const { return refLink; }
- BOOL GetFileFilterNms( String* pFileNm, String* pFilterNm ) const;
- void ReleaseLink();
-
- // Prioritaet beim Laden der Grafik setzen. Geht nur, wenn der Link
- // ein FileObject gesetzt hat
- void SetTransferPriority( USHORT nPrio );
-
- // Skalieren einer Image-Map: Die Image-Map wird um den Faktor
- // zwischen Grafik-Groesse und Rahmen-Groesse vergroessert/verkleinert
- void ScaleImageMap();
-#endif
-};
-
-#ifndef _FESHVIEW_ONLY_INLINE_NEEDED
-inline BOOL SwGrfNode::IsTransparent() const
-{
- if ( !bTransparentFlagValid )
- ((SwGrfNode*)this)->Impl_IsTransparent();
- return bIsTransparent;
-}
-// fuer den Zugriff auf die CacheDaten
-BOOL FindGrfSizeFromCache( const String& rGrfName, Size& rGrfSz );
-#endif
-
-/* */
-#endif
-// USE_GRFOBJECT
// ----------------------------------------------------------------------
// Inline Metoden aus Node.hxx - erst hier ist der TxtNode bekannt !!
diff --git a/sw/inc/sw.mk b/sw/inc/sw.mk
index 990a5046c5..826dfa1f61 100644
--- a/sw/inc/sw.mk
+++ b/sw/inc/sw.mk
@@ -2,9 +2,9 @@
#
# $RCSfile: sw.mk,v $
#
-# $Revision: 1.1.1.1 $
+# $Revision: 1.2 $
#
-# last change: $Author: hr $ $Date: 2000-09-18 17:14:28 $
+# last change: $Author: jp $ $Date: 2000-09-28 13:02:59 $
#
# The Contents of this file are made available subject to the terms of
# either of the following licenses
@@ -67,11 +67,6 @@
#CDEFS+=-DXML_CORE_API
CDEFS+=-DNUM_RELSPACE
-# use the new GrahicObject - the old code with our own GraphicCache will be removed
-# if all the new code runs correct.
-CDEFS+=-DUSE_GRFOBJECT
-USE_GRFOBJECT=TRUE
-
# MakeDepn nicht das segdefs.hxx und die PCHs auswerten lassen
# PCHs werden nur in den ..._1st Verzeichnissen aufgenommen
EXCDEPN=segdefs.hxx
diff --git a/sw/source/core/graphic/makefile.mk b/sw/source/core/graphic/makefile.mk
index 8e0603aaac..89247d5493 100644
--- a/sw/source/core/graphic/makefile.mk
+++ b/sw/source/core/graphic/makefile.mk
@@ -2,9 +2,9 @@
#
# $RCSfile: makefile.mk,v $
#
-# $Revision: 1.1.1.1 $
+# $Revision: 1.2 $
#
-# last change: $Author: hr $ $Date: 2000-09-19 00:08:20 $
+# last change: $Author: jp $ $Date: 2000-09-28 13:04:06 $
#
# The Contents of this file are made available subject to the terms of
# either of the following licenses
@@ -83,22 +83,10 @@ CXXFILES = \
grfatr.cxx \
ndgrf.cxx
-.IF "$(USE_GRFOBJECT)" == ""
-CXXFILES += grfcache.cxx
-.ENDIF
-
SLOFILES = \
$(SLO)$/grfatr.obj \
$(SLO)$/ndgrf.obj
-.IF "$(USE_GRFOBJECT)" == ""
-SLOFILES += $(SLO)$/grfcache.obj
-.ENDIF
-
-EXCEPTIONSFILES = \
- $(SLO)$/grfcache.obj \
- $(SLO)$/ndgrf.obj
-
# --- Tagets -------------------------------------------------------
.INCLUDE : target.mk
diff --git a/sw/source/core/graphic/ndgrf.cxx b/sw/source/core/graphic/ndgrf.cxx
index 52487950d1..429ec752bc 100644
--- a/sw/source/core/graphic/ndgrf.cxx
+++ b/sw/source/core/graphic/ndgrf.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: ndgrf.cxx,v $
*
- * $Revision: 1.1.1.1 $
+ * $Revision: 1.2 $
*
- * last change: $Author: hr $ $Date: 2000-09-19 00:08:20 $
+ * last change: $Author: jp $ $Date: 2000-09-28 13:04:06 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -70,12 +70,21 @@
#include <hintids.hxx>
#endif
-#ifndef _UCBHELPER_CONTENT_HXX
-#include <ucbhelper/content.hxx>
+#ifndef _URLOBJ_HXX //autogen
+#include <tools/urlobj.hxx>
#endif
#ifndef _UNDO_HXX //autogen
#include <svtools/undo.hxx>
#endif
+#ifndef SVTOOLS_FSTATHELPER_HXX
+#include <svtools/fstathelper.hxx>
+#endif
+#ifndef _IMAP_HXX //autogen
+#include <svtools/imap.hxx>
+#endif
+#ifndef _FILTER_HXX //autogen
+#include <svtools/filter.hxx>
+#endif
#ifndef _LINKNAME_HXX //autogen
#include <so3/linkname.hxx>
#endif
@@ -91,21 +100,12 @@
#ifndef _SFXDOCINF_HXX //autogen
#include <sfx2/docinf.hxx>
#endif
-#ifndef _URLOBJ_HXX //autogen
-#include <tools/urlobj.hxx>
-#endif
#ifndef _SVXLINKMGR_HXX
#include <svx/linkmgr.hxx>
#endif
#ifndef _SVX_BOXITEM_HXX //autogen
#include <svx/boxitem.hxx>
#endif
-#ifndef _IMAP_HXX //autogen
-#include <svtools/imap.hxx>
-#endif
-#ifndef _FILTER_HXX //autogen
-#include <svtools/filter.hxx>
-#endif
#ifndef _SVX_IMPGRF_HXX //autogen
#include <svx/impgrf.hxx>
#endif
@@ -151,14 +151,6 @@
#include <pagefrm.hxx>
#endif
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::ucb;
-using namespace ::com::sun::star::uno;
-using namespace ::rtl;
-
-// Code for the new GraphicObject
-#ifdef USE_GRFOBJECT
-
// --------------------
// SwGrfNode
// --------------------
@@ -199,21 +191,11 @@ SwGrfNode::SwGrfNode( const SwNodeIndex & rWhere,
if( IsLinkedFile() )
{
INetURLObject aUrl( rGrfName );
- if( aUrl.GetProtocol() == INET_PROT_FILE )
+ if( INET_PROT_FILE == aUrl.GetProtocol() &&
+ FStatHelper::IsDocument( aUrl.GetMainURL() ))
{
- try
- {
- ::ucb::Content aTestContent( aUrl.GetMainURL(),
- uno::Reference< XCommandEnvironment >());
- if(aTestContent.isDocument())
-// if( FSYS_KIND_FILE == FileStat( aFileNm ).GetKind() )
- // File vorhanden, Verbindung herstellen ohne ein Update
- ((SwBaseLink*)&refLink)->Connect();
- }
- catch(...)
- {
- DBG_ERROR("Exception caught")
- }
+ // File vorhanden, Verbindung herstellen ohne ein Update
+ ((SwBaseLink*)&refLink)->Connect();
}
}
}
@@ -1138,924 +1120,4 @@ GraphicAttr& SwGrfNode::GetGraphicAttr( GraphicAttr& rGA,
}
-/* */
-#else
-// USE_GRFOBJECT
-
-#include "grfcache.hxx"
-
-// --------------------
-// SwGrfNode
-// --------------------
-
-SwGrfNode::SwGrfNode( const SwNodeIndex & rWhere,
- const String& rGrfName, const String& rFltName,
- const Graphic* pGraphic,
- SwGrfFmtColl *pGrfColl,
- SwAttrSet* pAutoAttr )
- : SwNoTxtNode( rWhere, ND_GRFNODE, pGrfColl, pAutoAttr ),
- pCchMagic( 0 ), nCchIndex( 0 )
-{
- bTransparentFlagValid = bInSwapIn = bChgTwipSize = bLoadLowResGrf =
- bFrameInPaint = bScaleImageMap = FALSE;
- bGrafikArrived = TRUE;
- ReRead( rGrfName, rFltName, pGraphic, FALSE );
-}
-
-// Konstruktor fuer den SW/G-Reader. Dieser ctor wird verwendet,
-// wenn eine gelinkte Grafik gelesen wird. Sie liest diese NICHT ein.
-
-SwGrfNode::SwGrfNode( const SwNodeIndex & rWhere,
- const String& rGrfName, const String& rFltName,
- SwGrfFmtColl *pGrfColl,
- SwAttrSet* pAutoAttr )
- : SwNoTxtNode( rWhere, ND_GRFNODE, pGrfColl, pAutoAttr ),
- pCchMagic( 0 ), nCchIndex( 0 )
-{
- bTransparentFlagValid = bInSwapIn = bChgTwipSize = bLoadLowResGrf =
- bFrameInPaint = bScaleImageMap = FALSE;
- bGrafikArrived = TRUE;
- InsertLink( rGrfName, rFltName );
- if( IsLinkedFile() )
- {
- INetURLObject aUrl( GUI2FSYS( rGrfName ) );
- if( aUrl.GetProtocol() == INET_PROT_FILE )
- {
- try
- {
- ::ucb::Content aTestContent(
- aUrl.GetMainURL(),
- uno::Reference< XCommandEnvironment >());
- if(aTestContent.isDocument())
- // File vorhanden, Verbindung herstellen ohne ein Update
- ((SwBaseLink*)&refLink)->Connect();
- }
- catch(...)
- {
- DBG_ERROR("Exception caught")
- }
-// DirEntry aFileNm( aUrl.PathToFileName() );
-// aFileNm.ToAbs();
-
-// if( FSYS_KIND_FILE == FileStat( aFileNm ).GetKind() )
- // File vorhanden, Verbindung herstellen ohne ein Update
-// ((SwBaseLink*)&refLink)->Connect();
- }
- }
-}
-
-
-// erneutes Einlesen, falls Graphic nicht Ok ist. Die
-// aktuelle wird durch die neue ersetzt.
-
-BOOL SwGrfNode::ReRead( const String& rGrfName, const String& rFltName,
- const Graphic* pGraphic, BOOL bNewGrf )
-{
- bTransparentFlagValid = FALSE;
- BOOL bReadGrf = FALSE, bSetTwipSize = TRUE;
-
- ASSERT( pGraphic || rGrfName.Len(), "GrafikNode ohne Name und Grafik" );
-
-
- // ReadRead mit Namen
- if( refLink.Is() )
- {
- ASSERT( !bInSwapIn, "ReRead: stehe noch im SwapIn" );
- if( rGrfName.Len() )
- {
- // Besonderheit: steht im FltNamen DDE, handelt es sich um eine
- // DDE-gelinkte Grafik
- String sCmd( rGrfName );
- if( rFltName.Len() )
- {
- USHORT nNewType;
- if( rFltName.EqualsAscii( "DDE" ))
- nNewType = OBJECT_CLIENT_DDE;
- else
- {
- ::MakeLnkName( sCmd, 0, rGrfName, aEmptyStr, &rFltName );
- nNewType = OBJECT_CLIENT_GRF;
- }
-
- if( nNewType != refLink->GetObjectType() )
- {
- refLink->Disconnect();
- ((SwBaseLink*)&refLink)->SetObjType( nNewType );
- }
- }
-
- refLink->SetLinkSourceName( new SvLinkName( sCmd ) );
- }
- else // kein Name mehr, Link aufheben
- {
- GetDoc()->GetLinkManager().Remove( *refLink );
- refLink.Clear();
- }
-
- if( pGraphic )
- {
- aGraphic = *pGraphic;
- bReadGrf = TRUE;
- }
- else
- {
- // MIB 25.02.97: Daten der alten Grafik zuruecksetzen, damit
- // die korrekte Ersatz-Darstellung erscheint, wenn die
- // der neue Link nicht geladen werden konnte.
- aGraphic.Clear();
-
- SetCacheFlags( 0, 0 );
-
- BOOL bAvailable = FALSE;
- {
- SwGraphicAccess aGrfAcc( rGrfName );
- if( aGrfAcc.IsAvailable() )
- {
- bTransparentFlagValid = aGrfAcc.Get()->IsTransparentFlagValid();
- bIsTransparent = aGrfAcc.Get()->IsTransparent();
- SetTwipSize( aGrfAcc.Get()->GetGrfSize() );
- aGraphic.SetDefaultType();
- bAvailable = TRUE;
- }
- }
-
- if( bAvailable )
- {
- SwMsgPoolItem aMsgHint( RES_GRF_REREAD_AND_INCACHE );
- Modify( &aMsgHint, &aMsgHint );
- }
- else if( refLink.Is() )
- ((SwBaseLink*)&refLink)->SwapIn();
-
- bSetTwipSize = FALSE;
- }
- }
- else if( pGraphic && !rGrfName.Len() )
- {
- aGraphic = *pGraphic;
- bReadGrf = TRUE;
-
- SwGraphicCacheObj::GetCache()->Delete( this );
-
- if( aStrmName.Len() )
- DelStreamName();
- }
- // Import einer Grafik:
- // Ist die Grafik bereits geladen?
- else if( !bNewGrf && GRAPHIC_NONE != aGraphic.GetType() )
- return TRUE;
-
- else
- {
- SwGraphicCacheObj::GetCache()->Delete( this );
-
- // einen neuen Grafik-Link anlegen
- InsertLink( rGrfName, rFltName );
-
- if( aStrmName.Len() )
- DelStreamName();
-
- if( GetNodes().IsDocNodes() )
- {
- if( !pGraphic )
- {
- // MIB 25.02.97: Daten der alten Grafik zuruecksetzen, damit
- // die korrekte Ersatz-Darstellung erscheint, wenn die
- // der neue Kink nicht geladen werden konnte.
- aGraphic = Graphic(); // Geht hier auch Clear? Niemand weiss es.
- ((SwBaseLink*)&refLink)->SwapIn(); //Damit wir die richtige Groesse bekommen.
- }
- else
- {
- aGraphic = *pGraphic;
- bReadGrf = TRUE;
- // Verbindung herstellen ohne ein Update; Grafik haben wir!
- ((SwBaseLink*)&refLink)->Connect();
- }
- }
- }
-
- // Bug 39281: Size nicht sofort loeschen - Events auf ImageMaps
- // sollten nicht beim Austauschen nicht ins "leere greifen"
- if( bSetTwipSize )
- SetTwipSize( ::GetGraphicSizeTwip( aGraphic, 0 ) );
-
- // erzeuge noch einen Update auf die Frames
- if( bReadGrf && bNewGrf )
- {
- SwMsgPoolItem aMsgHint( RES_UPDATE_ATTR );
- Modify( &aMsgHint, &aMsgHint );
- }
-
- return bReadGrf;
-}
-
-
-SwGrfNode::~SwGrfNode()
-{
- SwDoc* pDoc = GetDoc();
- if( refLink.Is() )
- {
- ASSERT( !bInSwapIn, "DTOR: stehe noch im SwapIn" );
- pDoc->GetLinkManager().Remove( *refLink );
- refLink->Disconnect();
- if( pCchMagic )
- {
- SwGraphicAccess aGrfAcc( *this );
- if( aGrfAcc.IsAvailable() )
- aGrfAcc.Get()->ClearLastCheckTime();
- }
- }
- else
- {
- if( !pDoc->IsInDtor() && aStrmName.Len() )
- DelStreamName();
- SwGraphicCacheObj::GetCache()->Delete( this );
- }
- //#39289# Die Frames muessen hier bereits geloescht weil der DTor der
- //Frms die Grafik noch fuer StopAnimation braucht.
- if( GetDepends() )
- DelFrms();
-}
-
-
-SwCntntNode *SwGrfNode::SplitNode( const SwPosition &rPos )
-{
- // ohne Ressourcen....
- return this;
-}
-
-
-SwGrfNode * SwNodes::MakeGrfNode( const SwNodeIndex & rWhere,
- const String& rGrfName,
- const String& rFltName,
- const Graphic* pGraphic,
- SwGrfFmtColl* pGrfColl,
- SwAttrSet* pAutoAttr,
- BOOL bDelayed )
-{
- ASSERT( pGrfColl, "MakeGrfNode: Formatpointer ist 0." );
- SwGrfNode *pNode;
- // Delayed erzeugen nur aus dem SW/G-Reader
- if( bDelayed )
- pNode = new SwGrfNode( rWhere, rGrfName,
- rFltName, pGrfColl, pAutoAttr );
- else
- pNode = new SwGrfNode( rWhere, rGrfName,
- rFltName, pGraphic, pGrfColl, pAutoAttr );
- return pNode;
-}
-
-
-Size SwGrfNode::GetTwipSize() const
-{
- return nGrfSize;
-}
-
-
-void SwGrfNode::Impl_IsTransparent()
-{
- if ( GRAPHIC_DEFAULT != aGraphic.GetType() )
- SwapIn();
- bIsTransparent = aGraphic.IsTransparent();
- bTransparentFlagValid = TRUE;
-}
-
-
-// Returnwert:
-// -1 : ReRead erfolgreich
-// 0 : nicht geladen
-// 1 : Einlesen erfolgreich
-
-
-short SwGrfNode::SwapIn( BOOL bWaitForData )
-{
- if( bInSwapIn ) // nicht rekuriv!!
- return !aGraphic.IsSwapOut();
-
- short nRet = 0;
- bInSwapIn = TRUE;
- SwBaseLink* pLink = (SwBaseLink*)(SvBaseLink*) refLink;
- if( pLink )
- {
- if( GRAPHIC_NONE == aGraphic.GetType() ||
- GRAPHIC_DEFAULT == aGraphic.GetType() )
- {
- // noch nicht geladener Link
- if( pLink->SwapIn( bWaitForData ) )
- nRet = -1;
- else if( GRAPHIC_DEFAULT == aGraphic.GetType() )
- {
- // keine default Bitmap mehr, also neu Painten!
- aGraphic.Clear();
- SwMsgPoolItem aMsgHint( RES_GRAPHIC_PIECE_ARRIVED );
- Modify( &aMsgHint, &aMsgHint );
- }
- }
- else if( aGraphic.IsSwapOut() )
- // nachzuladender Link
- nRet = pLink->SwapIn( bWaitForData ) ? 1 : 0;
- else
- nRet = 1;
- }
- else if( aGraphic.IsSwapOut() )
- {
- // Die Grafik ist im Storage oder im TempFile drin
- if( !aStrmName.Len() )
- nRet = aGraphic.IsSwapOut() ? (short)aGraphic.SwapIn() : 1;
- else
- {
- SvStorageRef refRoot = GetDoc()->GetDocStorage();
- ASSERT( refRoot.Is(), "Kein Storage am Doc" );
- if( refRoot.Is() )
- {
- SvStorageRef refPics =
- refRoot->OpenStorage( String::CreateFromAscii(
- RTL_CONSTASCII_STRINGPARAM( "EmbeddedPictures" )),
- STREAM_READ | STREAM_SHARE_DENYWRITE );
- if( refPics->GetError() == SVSTREAM_OK )
- {
- SvStorageStreamRef refStrm =
- refPics->OpenStream( aStrmName,
- STREAM_READ | STREAM_SHARE_DENYWRITE );
- if( refStrm->GetError() == SVSTREAM_OK )
- {
- refStrm->SetVersion( refRoot->GetVersion() );
- if( aGraphic.SwapIn( refStrm ) )
- nRet = 1;
- }
- }
- }
- }
- }
- else
- nRet = 1;
- DBG_ASSERTWARNING( nRet, "Grafik kann nicht eingeswapt werden" );
-
- if( nRet )
- {
- SwGraphicCacheObj::SetTimeout( 10000L );
- if( !nGrfSize.Width() && !nGrfSize.Height() )
- SetTwipSize( ::GetGraphicSizeTwip( aGraphic, 0 ) );
- }
- bInSwapIn = FALSE;
- return nRet;
-}
-
-
-short SwGrfNode::SwapOut()
-{
- if( aGraphic.GetType() != GRAPHIC_DEFAULT &&
- aGraphic.GetType() != GRAPHIC_NONE &&
- !aGraphic.IsSwapOut() && !bInSwapIn )
- {
- if( !refLink.Is() )
- {
- // Das Swapping brauchen wir nur fuer Embedded Pictures
- // Die Grafik wird in eine TempFile geschrieben, wenn
- // sie frisch eingefuegt war, d.h. wenn es noch keinen
- // Streamnamen im Storage gibt.
- if( !aStrmName.Len() )
- if( !aGraphic.SwapOut() )
- return 0;
- }
- // Geschriebene Grafiken oder Links werden jetzt weggeschmissen
- return (short) aGraphic.SwapOut( NULL );
- }
- else
- return 1;
-}
-
-// Wird nach einem SaveAs aufgerufen und setzt die StreamNamen um
-
-void SwGrfNode::SaveCompleted( BOOL bClear )
-{
- if( aNewStrmName.Len() )
- {
- if( !bClear ) // der Name wird zum aktuellen
- aStrmName = aNewStrmName;
- aNewStrmName.Erase();
- }
-}
-
-
-// Falls die Grafik noch nicht im Doc-Storage existiert,
-// wird sie neu geschrieben; falls sie bereits drin ist,
-// wird nicht geschrieben. Wenn der Storage nicht dem
-// Doc-Storage entspricht, wird, falls aNewStrmName nicht
-// besetzt ist, in diesem Storage unter dem angegebenen
-// Streamnamen abgelegt (SaveAs). nach einem SaveAs wird
-// vom SW3-I/O-System noch SaveCompleted() aufgerufen,
-// da nun der Doc-Storage dem neuen Storage entspricht.
-
-
-BOOL SwGrfNode::StoreGraphics( SvStorage* pRoot )
-{
- if( !refLink.Is() )
- {
- String aName( aStrmName );
- SvStorage* pDocStg = GetDoc()->GetDocStorage();
- if( !pRoot )
- pRoot = pDocStg;
-
- String aPicStgName( String::CreateFromAscii(
- RTL_CONSTASCII_STRINGPARAM( "EmbeddedPictures" )));
- if( pRoot != pDocStg )
- {
- // Neuer Storage. Wenn die Grafik im DocStg drin ist,
- // kann sie bequem per CopyTo() kopiert werden.
- if( aName.Len() )
- {
- SvStorageRef refSrcPics =
- pDocStg->OpenStorage( aPicStgName,
- STREAM_READ | STREAM_SHARE_DENYWRITE );
-
- SvStorageStreamRef refStrm;
-
- BOOL bWriteNew = pDocStg->GetVersion() != pRoot->GetVersion();
- if( !bWriteNew &&
- SOFFICE_FILEFORMAT_40 <= pRoot->GetVersion() )
- {
- refStrm = refSrcPics->OpenStream( aName,
- STREAM_READ | STREAM_SHARE_DENYWRITE );
- if( SVSTREAM_OK == refStrm->GetError() )
- {
- // JP 21.06.98: pruefe ob der CompressMode uebereinstimmt
- USHORT nCmprsMode =
- Graphic::GetGraphicsCompressMode(*refStrm ) &
- ~(COMPRESSMODE_ZBITMAP|COMPRESSMODE_NATIVE );
- USHORT nNewCmprsMode = 0;
- if( GRAPHIC_BITMAP == aGraphic.GetType() &&
- GetDoc()->GetInfo()->IsSaveGraphicsCompressed() )
- nNewCmprsMode |= COMPRESSMODE_ZBITMAP;
- if( SOFFICE_FILEFORMAT_40 < pRoot->GetVersion() &&
- GetDoc()->GetInfo()->IsSaveOriginalGraphics() )
- nNewCmprsMode |= COMPRESSMODE_NATIVE;
-
- if( nCmprsMode != nNewCmprsMode )
- {
- // der Kompressedmode stimmt nicht, also muss
- // ggfs. die Grafik reingeswappt und ueber den
- // unteren Teil neu geschrieben werden.
- bWriteNew = TRUE;
- refStrm->Seek( STREAM_SEEK_TO_BEGIN );
- }
- }
- }
-
- if( bWriteNew )
- {
- if( aGraphic.IsSwapOut() &&
- SVSTREAM_OK == refSrcPics->GetError() )
- {
- if( !refStrm.Is() )
- refStrm = refSrcPics->OpenStream( aName,
- STREAM_READ | STREAM_SHARE_DENYWRITE );
- if( SVSTREAM_OK == refStrm->GetError() )
- {
- refStrm->SetVersion( pDocStg->GetVersion() );
- if( !aGraphic.SwapIn( refStrm ) )
- return FALSE;
- }
- }
- aName.Erase();
- }
- else
- {
- SvStorageRef refDstPics =
- pRoot->OpenStorage( aPicStgName,
- STREAM_READWRITE | STREAM_SHARE_DENYALL );
- if( refDstPics->IsContained( aName ) )
- // nur neu erzeugen, wenn Name schon vorhanden ist!
- aName = Sw3Io::UniqueName( refDstPics, "Pic" );
-
- if( refSrcPics->CopyTo( aStrmName, refDstPics, aName )
- && refDstPics->Commit() )
- aNewStrmName = aName;
- else
- return FALSE;
- }
- }
- }
-
- if( !aName.Len() )
- {
- ASSERT( pRoot, "Kein Storage gegeben" );
- if( pRoot )
- {
- SvStorageRef refPics =
- pRoot->OpenStorage( aPicStgName,
- STREAM_READWRITE | STREAM_SHARE_DENYALL );
- if( SVSTREAM_OK == refPics->GetError() )
- {
- aName = Sw3Io::UniqueName( refPics, "Pic" );
- SvStorageStreamRef refStrm =
- refPics->OpenStream( aName,
- STREAM_READWRITE | STREAM_SHARE_DENYALL );
- if( SVSTREAM_OK == refStrm->GetError() )
- {
- // HACK bis die Grafik als Portable markiert
- // werden kann!!!
- // Die Grafik kann in einer TempFile sein!
- FASTBOOL bIsSwapOut = aGraphic.IsSwapOut();
- if( bIsSwapOut && !aGraphic.SwapIn() )
- return FALSE;
-
- refStrm->SetVersion( pRoot->GetVersion() );
-
- //JP 04.05.98: laut ChangesMail vom KA und Bug 49617
- //JP 21.06.98: laut ChangesMail vom KA, natives Save
- USHORT nComprMode = refStrm->GetCompressMode();
- if( SOFFICE_FILEFORMAT_40 <= refStrm->GetVersion() &&
- GRAPHIC_BITMAP == aGraphic.GetType() &&
- GetDoc()->GetInfo()->IsSaveGraphicsCompressed() )
- nComprMode |= COMPRESSMODE_ZBITMAP;
- else
- nComprMode &= ~COMPRESSMODE_ZBITMAP;
-
- //JP 21.06.98: laut ChangesMail vom KA, natives Save
- if( SOFFICE_FILEFORMAT_40 < refStrm->GetVersion() &&
- GetDoc()->GetInfo()->IsSaveOriginalGraphics() )
- nComprMode |= COMPRESSMODE_NATIVE;
- else
- nComprMode &= ~COMPRESSMODE_NATIVE;
- refStrm->SetCompressMode( nComprMode );
-
- BOOL bRes = FALSE;
- if( pRoot == pDocStg )
- {
- if( aGraphic.SwapOut( refStrm ) &&
- ( refStrm->Commit() | refPics->Commit()
- /*| pRoot->Commit()*/ ))
- {
- aStrmName = aName;
- bRes = TRUE;
- }
- }
- else if( aGraphic.WriteEmbedded( *refStrm)
- && ( refStrm->Commit() | refPics->Commit()
- /*| pRoot->Commit()*/ ))
- {
- if( bIsSwapOut )
- aGraphic.SwapOut();
- aNewStrmName = aName;
- bRes = TRUE;
- }
- return bRes;
- }
- }
- }
- // Da fehlte doch was?
- return FALSE;
- }
- }
- // Schon drin im Storage oder Linked
- return TRUE;
-}
-
-
-BOOL SwGrfNode::GetFileFilterNms( String* pFileNm, String* pFilterNm ) const
-{
- BOOL bRet = FALSE;
- if( refLink.Is() && refLink->GetLinkManager() )
- {
- USHORT nType = refLink->GetObjType();
- if( OBJECT_CLIENT_GRF == nType )
- bRet = refLink->GetLinkManager()->GetDisplayNames(
- *refLink, 0, pFileNm, 0, pFilterNm );
- else if( OBJECT_CLIENT_DDE == nType && pFileNm && pFilterNm )
- {
- String sApp, sTopic, sItem;
- if( refLink->GetLinkManager()->GetDisplayNames(
- *refLink, &sApp, &sTopic, &sItem ) )
- {
- ( *pFileNm = sApp ) += cTokenSeperator;
- ( *pFileNm += sTopic ) += cTokenSeperator;
- *pFileNm += sItem;
- pFilterNm->AssignAscii( RTL_CONSTASCII_STRINGPARAM( "DDE" ));
- bRet = TRUE;
- }
- }
- }
-
- return bRet;
-}
-
-
-const String& SwGrfNode::GetStreamName() const
-{
- if( aNewStrmName.Len() )
- return aNewStrmName;
- else
- return aStrmName;
-}
-
-// Eine Grafik Undo-faehig machen. Falls sie sich bereits in
-// einem Storage befindet, muss sie geladen werden.
-
-
-BOOL SwGrfNode::SavePersistentData()
-{
- if( refLink.Is() )
- {
- ASSERT( !bInSwapIn, "SavePersistentData: stehe noch im SwapIn" );
- GetDoc()->GetLinkManager().Remove( *refLink );
- if( pCchMagic )
- {
- SwGraphicAccess aGrfAcc( *this );
- if( aGrfAcc.IsAvailable() )
- aGrfAcc.Get()->ClearLastCheckTime();
- }
- return TRUE;
- }
-
- // Erst mal reinswappen, falls sie im Storage ist
- if( aStrmName.Len() && !SwapIn() )
- return FALSE;
-
- if( aStrmName.Len() )
- DelStreamName();
-
- // Und in TempFile rausswappen
- return (BOOL) SwapOut();
-}
-
-
-BOOL SwGrfNode::RestorePersistentData()
-{
- if( refLink.Is() )
- {
- refLink->SetVisible( GetDoc()->IsVisibleLinks() );
- GetDoc()->GetLinkManager().InsertDDELink( *refLink );
- if( GetDoc()->GetRootFrm() )
- refLink->Update();
- }
- return TRUE;
-}
-
-
-void SwGrfNode::InsertLink( const String& rGrfName, const String& rFltName )
-{
- refLink = new SwBaseLink( LINKUPDATE_ONCALL, FORMAT_GDIMETAFILE, this );
- SwDoc* pDoc = GetDoc();
- if( GetNodes().IsDocNodes() )
- {
- refLink->SetVisible( pDoc->IsVisibleLinks() );
- if( rFltName.EqualsAscii( "DDE" ))
- {
- USHORT nTmp = 0;
- String sApp, sTopic, sItem;
- sApp = rGrfName.GetToken( 0, cTokenSeperator, nTmp );
- sTopic = rGrfName.GetToken( 0, cTokenSeperator, nTmp );
- sItem = rGrfName.Copy( nTmp );
- pDoc->GetLinkManager().InsertDDELink( *refLink,
- sApp, sTopic, sItem );
- }
- else
- {
- BOOL bSync = rFltName.EqualsAscii( "SYNCHRON" );
- refLink->SetSynchron( bSync );
- refLink->SetContentType( Graphic::RegisterClipboardFormatName() );
-
- pDoc->GetLinkManager().InsertFileLink( *refLink,
- OBJECT_CLIENT_GRF, rGrfName,
- (!bSync && rFltName.Len() ? &rFltName : 0) );
- if( !bSync )
- aGraphic.SetDefaultType();
- }
- }
-}
-
-
-void SwGrfNode::ReleaseLink()
-{
- if( refLink.Is() )
- {
- // erst die Grafik reinswappen!
-// if( aGraphic.IsSwapOut() || !refLink->IsSynchron() )
- {
- bInSwapIn = TRUE;
- SwBaseLink* pLink = (SwBaseLink*)(SvBaseLink*) refLink;
- pLink->SwapIn( TRUE, TRUE );
- bInSwapIn = FALSE;
- }
- GetDoc()->GetLinkManager().Remove( *refLink );
- refLink.Clear();
-
- if( pCchMagic )
- {
- SwGraphicAccess aGrfAcc( *this );
- if( aGrfAcc.IsAvailable() )
- aGrfAcc.Get()->ClearLastCheckTime();
- }
- pCchMagic = 0;
- }
-}
-
-
-void SwGrfNode::SetTwipSize( const Size& rSz )
-{
- nGrfSize = rSz;
-
- if( IsLinkedFile() && nGrfSize.Width() && nGrfSize.Height() )
- {
- // dann die Size in den Cache haemmern
- SwGraphicAccess aGrfAcc( *this );
- aGrfAcc.Get()->SetGrfSize( nGrfSize );
-
- // Cache Index wieder auf 0 setzen wenn keine gueltige Graik ist!
- if( GRAPHIC_NONE == aGraphic.GetType() ||
- GRAPHIC_DEFAULT == aGraphic.GetType() )
- {
- pCchMagic = 0;
- nCchIndex = 0;
- }
- }
-
- if( IsScaleImageMap() &&
- nGrfSize.Width() && nGrfSize.Height() )
- {
- // Image-Map an Grafik-Groesse anpassen
- ScaleImageMap();
-
- // Image-Map nicht noch einmal skalieren
- SetScaleImageMap( FALSE );
- }
-}
-
-
-void SwGrfNode::ClearQBmpCache()
-{
- if( !pCchMagic )
- SwGraphicCacheObj::GetCache()->Delete( this );
-//JP 29.10.96: Bug 32846 - QuickDraw Bitmap aus dem Cache entfernen
-// (wird das vielleicht zu oft gerufen?)
- else
- {
- SwGraphicCacheObj::GetCache()->Delete( pCchMagic );
- pCchMagic = 0;
- }
- nCchIndex = 0;
-}
-
- // Prioritaet beim Laden der Grafik setzen. Geht nur, wenn der Link
- // ein FileObject gesetzt hat
-void SwGrfNode::SetTransferPriority( USHORT nPrio )
-{
- if( refLink.Is() && refLink->GetObj() )
- SvxLinkManager::SetTransferPriority( *refLink, nPrio );
-}
-
-
-
-
-void SwGrfNode::ScaleImageMap()
-{
- if( !nGrfSize.Width() || !nGrfSize.Height() )
- return;
-
- // dann die Image-Map skalieren
- SwFrmFmt* pFmt = GetFlyFmt();
-
- if( !pFmt )
- return;
-
- SwFmtURL aURL( pFmt->GetURL() );
- if ( !aURL.GetMap() )
- return;
-
- BOOL bScale = FALSE;
- Fraction aScaleX( 1, 1 );
- Fraction aScaleY( 1, 1 );
-
- const SwFmtFrmSize& rFrmSize = pFmt->GetFrmSize();
- const SvxBoxItem& rBox = pFmt->GetBox();
-
- if( !rFrmSize.GetWidthPercent() )
- {
- SwTwips nWidth = rFrmSize.GetWidth();
-
- nWidth -= rBox.CalcLineSpace(BOX_LINE_LEFT) +
- rBox.CalcLineSpace(BOX_LINE_RIGHT);
-
- ASSERT( nWidth>0, "Gibt es 0 twip breite Grafiken!?" );
-
- if( nGrfSize.Width() != nWidth )
- {
- aScaleX = Fraction( nGrfSize.Width(), nWidth );
- bScale = TRUE;
- }
- }
- if( !rFrmSize.GetHeightPercent() )
- {
- SwTwips nHeight = rFrmSize.GetHeight();
-
- nHeight -= rBox.CalcLineSpace(BOX_LINE_TOP) +
- rBox.CalcLineSpace(BOX_LINE_BOTTOM);
-
- ASSERT( nHeight>0, "Gibt es 0 twip hohe Grafiken!?" );
-
- if( nGrfSize.Height() != nHeight )
- {
- aScaleY = Fraction( nGrfSize.Height(), nHeight );
- bScale = TRUE;
- }
- }
-
- if( bScale )
- {
- aURL.GetMap()->Scale( aScaleX, aScaleY );
- pFmt->SetAttr( aURL );
- }
-}
-
-
-void SwGrfNode::DelStreamName()
-{
- if( aStrmName.Len() )
- {
- // Dann die Grafik im Storage loeschen
- SvStorage* pDocStg = GetDoc()->GetDocStorage();
- if( pDocStg )
- {
- String aPicStgName( String::CreateFromAscii(
- RTL_CONSTASCII_STRINGPARAM( "EmbeddedPictures" )));
- SvStorageRef refPics =
- pDocStg->OpenStorage( aPicStgName,
- STREAM_READWRITE | STREAM_SHARE_DENYALL );
- if( refPics->GetError() == SVSTREAM_OK )
- {
- refPics->Remove( aStrmName );
- refPics->Commit();
- refPics->ResetError(); // Falls wir ReadOnly waren
- }
- }
- aStrmName.Erase();
- }
-}
-
-
-SwCntntNode* SwGrfNode::MakeCopy( SwDoc* pDoc, const SwNodeIndex& rIdx ) const
-{
- // kopiere die Formate in das andere Dokument:
- SwGrfFmtColl* pColl = pDoc->CopyGrfColl( *GetGrfColl() );
-
- SwGrfNode* pThis = (SwGrfNode*)this;
-
- Graphic aTmpGrf;
- SwBaseLink* pLink = (SwBaseLink*)(SvBaseLink*) refLink;
- if( !pLink && aStrmName.Len() )
- {
- SvStorageRef refRoot = pThis->GetDoc()->GetDocStorage();
- ASSERT( refRoot.Is(), "Kein Storage am Doc" );
- if( refRoot.Is() )
- {
- SvStorageRef refPics = refRoot->OpenStorage( String::CreateFromAscii(
- RTL_CONSTASCII_STRINGPARAM( "EmbeddedPictures" )),
- STREAM_READ | STREAM_SHARE_DENYWRITE );
- if( refPics->GetError() == SVSTREAM_OK )
- {
- SvStorageStreamRef refStrm = refPics->OpenStream( aStrmName,
- STREAM_READ | STREAM_SHARE_DENYWRITE );
- if( refStrm->GetError() == SVSTREAM_OK )
- {
- refStrm->SetVersion( refRoot->GetVersion() );
- aTmpGrf.SwapIn( refStrm );
- }
- }
- }
- }
- else
- {
- if( aGraphic.IsSwapOut() )
- pThis->SwapIn();
- aTmpGrf = aGraphic;
- }
-
- const SvLinkManager& rMgr = GetDoc()->GetLinkManager();
- String sFile, sFilter;
- if( IsLinkedFile() )
- rMgr.GetDisplayNames( *refLink, 0, &sFile, 0, &sFilter );
- else if( IsLinkedDDE() )
- {
- String sTmp1, sTmp2;
- rMgr.GetDisplayNames( *refLink, &sTmp1, &sTmp2, &sFilter );
- ::MakeLnkName( sFile, &sTmp1, sTmp2, sFilter );
- sFilter.AssignAscii( RTL_CONSTASCII_STRINGPARAM( "DDE" ));
- }
-
- SwGrfNode* pGrfNd = pDoc->GetNodes().MakeGrfNode( rIdx, sFile, sFilter,
- &aTmpGrf, pColl,
- (SwAttrSet*)GetpSwAttrSet() );
- pGrfNd->SetAlternateText( GetAlternateText() );
- pGrfNd->SetContour( HasContour() );
- return pGrfNd;
-}
-
-
-
-#endif
-// USE_GRFOBJECT
-
-