summaryrefslogtreecommitdiff
path: root/sw/source/core/docnode/ndnotxt.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core/docnode/ndnotxt.cxx')
-rw-r--r--sw/source/core/docnode/ndnotxt.cxx307
1 files changed, 307 insertions, 0 deletions
diff --git a/sw/source/core/docnode/ndnotxt.cxx b/sw/source/core/docnode/ndnotxt.cxx
new file mode 100644
index 000000000000..985c4c8e4709
--- /dev/null
+++ b/sw/source/core/docnode/ndnotxt.cxx
@@ -0,0 +1,307 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * 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.
+ *
+ * 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).
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sw.hxx"
+
+
+#include <hintids.hxx>
+#include <tools/poly.hxx>
+#include <svl/stritem.hxx>
+#include <svx/contdlg.hxx>
+#include <vcl/svapp.hxx>
+#include <docary.hxx>
+#include <doc.hxx>
+#include <fmtcol.hxx>
+#include <ndnotxt.hxx>
+#include <ndgrf.hxx>
+#include <ndole.hxx>
+#include <ndindex.hxx>
+#include <hints.hxx> // fuer SwFmtChg
+#include <istyleaccess.hxx>
+#include <SwStyleNameMapper.hxx>
+
+// --> OD 2009-07-13 #i73249#
+#include <frmfmt.hxx>
+// <--
+
+SwNoTxtNode::SwNoTxtNode( const SwNodeIndex & rWhere,
+ const BYTE nNdType,
+ SwGrfFmtColl *pGrfColl,
+ SwAttrSet* pAutoAttr ) :
+ SwCntntNode( rWhere, nNdType, pGrfColl ),
+ pContour( 0 ),
+ bAutomaticContour( FALSE ),
+ bContourMapModeValid( TRUE ),
+ bPixelContour( FALSE )
+{
+ // soll eine Harte-Attributierung gesetzt werden?
+ if( pAutoAttr )
+ SetAttr( *pAutoAttr );
+}
+
+
+SwNoTxtNode::~SwNoTxtNode()
+{
+ delete pContour;
+}
+
+
+// erzeugt fuer alle Ableitungen einen AttrSet mit Bereichen
+// fuer Frame- und Grafik-Attributen
+void SwNoTxtNode::NewAttrSet( SwAttrPool& rPool )
+{
+ ASSERT( !mpAttrSet.get(), "AttrSet ist doch gesetzt" );
+ SwAttrSet aNewAttrSet( rPool, aNoTxtNodeSetRange );
+
+ // put names of parent style and conditional style:
+ const SwFmtColl* pFmtColl = GetFmtColl();
+ String sVal;
+ SwStyleNameMapper::FillProgName( pFmtColl->GetName(), sVal, nsSwGetPoolIdFromName::GET_POOLID_TXTCOLL, sal_True );
+ SfxStringItem aFmtColl( RES_FRMATR_STYLE_NAME, sVal );
+ aNewAttrSet.Put( aFmtColl );
+
+ aNewAttrSet.SetParent( &GetFmtColl()->GetAttrSet() );
+ mpAttrSet = GetDoc()->GetIStyleAccess().getAutomaticStyle( aNewAttrSet, IStyleAccess::AUTO_STYLE_NOTXT );
+}
+
+// Dummies fuer das Laden/Speichern von persistenten Daten
+// bei Grafiken und OLE-Objekten
+
+
+BOOL SwNoTxtNode::RestorePersistentData()
+{
+ return TRUE;
+}
+
+
+BOOL SwNoTxtNode::SavePersistentData()
+{
+ return TRUE;
+}
+
+
+void SwNoTxtNode::SetContour( const PolyPolygon *pPoly, BOOL bAutomatic )
+{
+ delete pContour;
+ if ( pPoly )
+ pContour = new PolyPolygon( *pPoly );
+ else
+ pContour = 0;
+ bAutomaticContour = bAutomatic;
+ bContourMapModeValid = TRUE;
+ bPixelContour = FALSE;
+}
+
+
+void SwNoTxtNode::CreateContour()
+{
+ ASSERT( !pContour, "Contour available." );
+ pContour = new PolyPolygon(SvxContourDlg::CreateAutoContour(GetGraphic()));
+ bAutomaticContour = TRUE;
+ bContourMapModeValid = TRUE;
+ bPixelContour = FALSE;
+}
+
+const PolyPolygon *SwNoTxtNode::HasContour() const
+{
+ if( !bContourMapModeValid )
+ {
+ const MapMode aGrfMap( GetGraphic().GetPrefMapMode() );
+ BOOL bPixelGrf = aGrfMap.GetMapUnit() == MAP_PIXEL;
+ const MapMode aContourMap( bPixelGrf ? MAP_PIXEL : MAP_100TH_MM );
+ if( bPixelGrf ? !bPixelContour : aGrfMap != aContourMap )
+ {
+ ASSERT( !bPixelGrf || aGrfMap == aContourMap,
+ "scale factor for pixel unsupported" );
+ OutputDevice* pOutDev =
+ (bPixelGrf || bPixelContour) ? Application::GetDefaultDevice()
+ : 0;
+ USHORT nPolyCount = pContour->Count();
+ for( USHORT j=0; j<nPolyCount; j++ )
+ {
+ Polygon& rPoly = (*pContour)[j];
+
+ USHORT nCount = rPoly.GetSize();
+ for( USHORT i=0 ; i<nCount; i++ )
+ {
+ if( bPixelGrf )
+ rPoly[i] = pOutDev->LogicToPixel( rPoly[i],
+ aContourMap );
+ else if( bPixelContour )
+ rPoly[i] = pOutDev->PixelToLogic( rPoly[i], aGrfMap );
+ else
+ rPoly[i] = OutputDevice::LogicToLogic( rPoly[i],
+ aContourMap,
+ aGrfMap );
+ }
+ }
+ }
+ ((SwNoTxtNode *)this)->bContourMapModeValid = TRUE;
+ ((SwNoTxtNode *)this)->bPixelContour = FALSE;
+ }
+
+ return pContour;
+}
+
+void SwNoTxtNode::GetContour( PolyPolygon &rPoly ) const
+{
+ ASSERT( pContour, "Contour not available." );
+ rPoly = *HasContour();
+}
+
+void SwNoTxtNode::SetContourAPI( const PolyPolygon *pPoly )
+{
+ delete pContour;
+ if ( pPoly )
+ pContour = new PolyPolygon( *pPoly );
+ else
+ pContour = 0;
+ bContourMapModeValid = FALSE;
+}
+
+BOOL SwNoTxtNode::GetContourAPI( PolyPolygon &rContour ) const
+{
+ if( !pContour )
+ return FALSE;
+
+ rContour = *pContour;
+ if( bContourMapModeValid )
+ {
+ const MapMode aGrfMap( GetGraphic().GetPrefMapMode() );
+ const MapMode aContourMap( MAP_100TH_MM );
+ ASSERT( aGrfMap.GetMapUnit() != MAP_PIXEL ||
+ aGrfMap == MapMode( MAP_PIXEL ),
+ "scale factor for pixel unsupported" );
+ if( aGrfMap.GetMapUnit() != MAP_PIXEL &&
+ aGrfMap != aContourMap )
+ {
+ USHORT nPolyCount = rContour.Count();
+ for( USHORT j=0; j<nPolyCount; j++ )
+ {
+ Polygon& rPoly = (*pContour)[j];
+
+ USHORT nCount = rPoly.GetSize();
+ for( USHORT i=0 ; i<nCount; i++ )
+ {
+ rPoly[i] = OutputDevice::LogicToLogic( rPoly[i], aGrfMap,
+ aContourMap );
+ }
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+BOOL SwNoTxtNode::IsPixelContour() const
+{
+ BOOL bRet;
+ if( bContourMapModeValid )
+ {
+ const MapMode aGrfMap( GetGraphic().GetPrefMapMode() );
+ bRet = aGrfMap.GetMapUnit() == MAP_PIXEL;
+ }
+ else
+ {
+ bRet = bPixelContour;
+ }
+
+ return bRet;
+}
+
+
+Graphic SwNoTxtNode::GetGraphic() const
+{
+ Graphic aRet;
+ if ( GetGrfNode() )
+ {
+ ((SwGrfNode*)this)->SwapIn( TRUE );
+ aRet = ((SwGrfNode*)this)->GetGrf();
+ }
+ else
+ {
+ ASSERT( GetOLENode(), "new type of Node?" );
+ aRet = *((SwOLENode*)this)->SwOLENode::GetGraphic();
+ }
+ return aRet;
+}
+
+// --> OD 2009-07-14 #i73249#
+void SwNoTxtNode::SetTitle( const String& rTitle, bool bBroadcast )
+{
+ // Title attribute of <SdrObject> replaces own AlternateText attribute
+ SwFlyFrmFmt* pFlyFmt = dynamic_cast<SwFlyFrmFmt*>(GetFlyFmt());
+ ASSERT( pFlyFmt,
+ "<SwNoTxtNode::SetTitle(..)> - missing <SwFlyFrmFmt> instance" );
+ if ( !pFlyFmt )
+ {
+ return;
+ }
+
+ pFlyFmt->SetObjTitle( rTitle, bBroadcast );
+}
+
+const String SwNoTxtNode::GetTitle() const
+{
+ const SwFlyFrmFmt* pFlyFmt = dynamic_cast<const SwFlyFrmFmt*>(GetFlyFmt());
+ ASSERT( pFlyFmt,
+ "<SwNoTxtNode::GetTitle(..)> - missing <SwFlyFrmFmt> instance" );
+ if ( !pFlyFmt )
+ {
+ return aEmptyStr;
+ }
+
+ return pFlyFmt->GetObjTitle();
+}
+
+void SwNoTxtNode::SetDescription( const String& rDescription, bool bBroadcast )
+{
+ SwFlyFrmFmt* pFlyFmt = dynamic_cast<SwFlyFrmFmt*>(GetFlyFmt());
+ ASSERT( pFlyFmt,
+ "<SwNoTxtNode::SetDescription(..)> - missing <SwFlyFrmFmt> instance" );
+ if ( !pFlyFmt )
+ {
+ return;
+ }
+
+ pFlyFmt->SetObjDescription( rDescription, bBroadcast );
+}
+
+const String SwNoTxtNode::GetDescription() const
+{
+ const SwFlyFrmFmt* pFlyFmt = dynamic_cast<const SwFlyFrmFmt*>(GetFlyFmt());
+ ASSERT( pFlyFmt,
+ "<SwNoTxtNode::GetDescription(..)> - missing <SwFlyFrmFmt> instance" );
+ if ( !pFlyFmt )
+ {
+ return aEmptyStr;
+ }
+
+ return pFlyFmt->GetObjDescription();
+}
+// <--