summaryrefslogtreecommitdiff
path: root/cui/source/tabpages/backgrnd.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'cui/source/tabpages/backgrnd.cxx')
-rw-r--r--cui/source/tabpages/backgrnd.cxx1980
1 files changed, 1980 insertions, 0 deletions
diff --git a/cui/source/tabpages/backgrnd.cxx b/cui/source/tabpages/backgrnd.cxx
new file mode 100644
index 000000000000..004b79817b32
--- /dev/null
+++ b/cui/source/tabpages/backgrnd.cxx
@@ -0,0 +1,1980 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: backgrnd.cxx,v $
+ * $Revision: 1.39 $
+ *
+ * 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_cui.hxx"
+
+// include ---------------------------------------------------------------
+#include <unotools/pathoptions.hxx>
+#include <svl/intitem.hxx>
+#include <vcl/msgbox.hxx>
+#include <tools/urlobj.hxx>
+#include <sfx2/objsh.hxx>
+#include <sfx2/docfile.hxx>
+#include <svtools/wallitem.hxx>
+#include <svl/cntwall.hxx>
+#include <sfx2/cntids.hrc>
+#include <svx/dialogs.hrc>
+
+#define _SVX_BACKGRND_CXX
+
+#include <cuires.hrc>
+#include "backgrnd.hrc"
+#include <svx/svxitems.hrc> // RID_SVXITEM_COL_WHITE
+#include <svx/dialmgr.hxx>
+
+// Tabellenhintergrund
+#define TBL_DEST_CELL 0
+#define TBL_DEST_ROW 1
+#define TBL_DEST_TBL 2
+
+#include <svx/brshitem.hxx>
+#include "backgrnd.hxx"
+
+#include <svx/xtable.hxx>
+#include <svx/opengrf.hxx>
+#include <svx/impgrf.hxx>
+#include <svx/svxerr.hxx>
+#include <svx/drawitem.hxx>
+#include <dialmgr.hxx>
+#include <svx/htmlmode.hxx>
+#include <svtools/controldims.hrc>
+#include <svx/flagsdef.hxx> //CHINA001
+#include <svl/intitem.hxx> //CHINA001
+#include <sfx2/request.hxx> //CHINA001
+using namespace ::com::sun::star;
+// static ----------------------------------------------------------------
+
+static USHORT pRanges[] =
+{
+ SID_VIEW_FLD_PIC, SID_VIEW_FLD_PIC,
+ SID_ATTR_BRUSH, SID_ATTR_BRUSH,
+ SID_ATTR_BRUSH_CHAR, SID_ATTR_BRUSH_CHAR,
+ 0
+};
+
+struct SvxBackgroundTable_Impl
+{
+ SvxBrushItem* pCellBrush;
+ SvxBrushItem* pRowBrush;
+ SvxBrushItem* pTableBrush;
+ USHORT nCellWhich;
+ USHORT nRowWhich;
+ USHORT nTableWhich;
+ USHORT nActPos;
+
+ SvxBackgroundTable_Impl() :
+ pCellBrush(NULL), pRowBrush(NULL), pTableBrush(NULL),
+ nCellWhich(0), nRowWhich(0), nTableWhich(0) {}
+};
+
+struct SvxBackgroundPara_Impl
+{
+ SvxBrushItem* pParaBrush;
+ SvxBrushItem* pCharBrush;
+
+ USHORT nActPos;
+
+ SvxBackgroundPara_Impl() :
+ pParaBrush(NULL), pCharBrush(NULL) {}
+};
+
+struct SvxBackgroundPage_Impl
+{
+ Timer* pLoadTimer;
+ BOOL bIsImportDlgInExecute;
+
+ SvxBackgroundPage_Impl() :
+ pLoadTimer(NULL), bIsImportDlgInExecute(FALSE) {}
+};
+/* -----------------------------15.08.2002 12:21------------------------------
+
+ ---------------------------------------------------------------------------*/
+inline BYTE lcl_PercentToTransparency(long nPercent)
+{
+ //0xff must not be returned!
+ return BYTE(nPercent ? (50 + 0xfe * nPercent) / 100 : 0);
+}
+inline BYTE lcl_TransparencyToPercent(BYTE nTrans)
+{
+ return (nTrans * 100 + 127) / 254;
+}
+void lcl_SetTransparency(SvxBrushItem& rBrush, long nTransparency)
+{
+ uno::Any aTransparency;
+ aTransparency <<= (sal_Int8)nTransparency;
+ rBrush.PutValue(aTransparency, MID_GRAPHIC_TRANSPARENCY);
+}
+//-------------------------------------------------------------------------
+
+/* [Beschreibung]
+
+*/
+
+USHORT GetItemId_Impl( ValueSet& rValueSet, const Color& rCol )
+{
+ BOOL bFound = FALSE;
+ USHORT nCount = rValueSet.GetItemCount();
+ USHORT n = 1;
+
+ while ( !bFound && n <= nCount )
+ {
+ Color aValCol = rValueSet.GetItemColor(n);
+
+ bFound = ( aValCol.GetRed() == rCol.GetRed()
+ && aValCol.GetGreen() == rCol.GetGreen()
+ && aValCol.GetBlue() == rCol.GetBlue() );
+
+ if ( !bFound )
+ n++;
+ }
+ return bFound ? n : 0;
+}
+
+// class BackgroundPreview -----------------------------------------------
+
+/* [Beschreibung]
+
+ Vorschaufenster f"ur Brush oder Bitmap
+*/
+
+class BackgroundPreviewImpl : public Window
+{
+public:
+ BackgroundPreviewImpl( Window* pParent,
+ const ResId& rResId, BOOL bIsBmpPreview );
+ ~BackgroundPreviewImpl();
+
+ void NotifyChange( const Color& rColor );
+ void NotifyChange( const Bitmap* pBitmap );
+
+protected:
+ virtual void Paint( const Rectangle& rRect );
+ virtual void DataChanged( const DataChangedEvent& rDCEvt );
+
+private:
+ const BOOL bIsBmp;
+ Bitmap* pBitmap;
+ Point aDrawPos;
+ Size aDrawSize;
+ Rectangle aDrawRect;
+ BYTE nTransparency;
+};
+
+//-----------------------------------------------------------------------
+
+BackgroundPreviewImpl::BackgroundPreviewImpl
+(
+ Window* pParent,
+ const ResId& rResId,
+ BOOL bIsBmpPreview
+) :
+
+/* [Beschreibung]
+
+*/
+
+ Window( pParent, rResId ),
+
+ bIsBmp ( bIsBmpPreview ),
+ pBitmap ( NULL ),
+ aDrawRect( Point(0,0), GetOutputSizePixel() ),
+ nTransparency(0)
+
+{
+ SetBorderStyle(WINDOW_BORDER_MONO);
+ Paint( aDrawRect );
+}
+
+//-----------------------------------------------------------------------
+
+BackgroundPreviewImpl::~BackgroundPreviewImpl()
+
+/* [Beschreibung]
+
+*/
+
+{
+ delete pBitmap;
+}
+
+//-----------------------------------------------------------------------
+void BackgroundPreviewImpl::NotifyChange( const Color& rColor )
+{
+ if ( !bIsBmp )
+ {
+ const static Color aTranspCol( COL_TRANSPARENT );
+
+ nTransparency = lcl_TransparencyToPercent( rColor.GetTransparency() );
+
+ SetFillColor( rColor == aTranspCol ? GetSettings().GetStyleSettings().GetFieldColor() : (Color) rColor.GetRGBColor() );
+ Paint( aDrawRect );
+ }
+}
+
+//-----------------------------------------------------------------------
+
+void BackgroundPreviewImpl::NotifyChange( const Bitmap* pNewBitmap )
+/* [Beschreibung]
+
+*/
+
+{
+ if ( bIsBmp && (pNewBitmap || pBitmap) )
+ {
+ if ( pNewBitmap && pBitmap )
+ *pBitmap = *pNewBitmap;
+ else if ( pNewBitmap && !pBitmap )
+ pBitmap = new Bitmap( *pNewBitmap );
+ else if ( !pNewBitmap )
+ DELETEZ( pBitmap );
+
+ if ( pBitmap )
+ {
+ Size aSize = GetOutputSizePixel();
+ // InnerSize == Size without one pixel border
+ Size aInnerSize = aSize;
+ aInnerSize.Width() -= 2;
+ aInnerSize.Height() -= 2;
+ aDrawSize = pBitmap->GetSizePixel();
+
+ // bitmap bigger than preview window?
+ if ( aDrawSize.Width() > aInnerSize.Width() )
+ {
+ aDrawSize.Height() = aDrawSize.Height() * aInnerSize.Width() / aDrawSize.Width();
+ if ( aDrawSize.Height() > aInnerSize.Height() )
+ {
+ aDrawSize.Width() = aDrawSize.Height();
+ aDrawSize.Height() = aInnerSize.Height();
+ }
+ else
+ aDrawSize.Width() = aInnerSize.Width();
+ }
+ else if ( aDrawSize.Height() > aInnerSize.Height() )
+ {
+ aDrawSize.Width() = aDrawSize.Width() * aInnerSize.Height() / aDrawSize.Height();
+ if ( aDrawSize.Width() > aInnerSize.Width() )
+ {
+ aDrawSize.Height() = aDrawSize.Width();
+ aDrawSize.Width() = aInnerSize.Width();
+ }
+ else
+ aDrawSize.Height() = aInnerSize.Height();
+ }
+
+ aDrawPos.X() = (aSize.Width() - aDrawSize.Width()) / 2;
+ aDrawPos.Y() = (aSize.Height() - aDrawSize.Height()) / 2;
+ }
+ Invalidate( aDrawRect );
+ Update();
+ }
+}
+
+//-----------------------------------------------------------------------
+
+void BackgroundPreviewImpl::Paint( const Rectangle& )
+{
+ const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
+ SetBackground(Wallpaper(rStyleSettings.GetWindowColor()));
+ SetLineColor();
+ if(bIsBmp)
+ SetFillColor( Color(COL_TRANSPARENT) );
+ DrawRect( aDrawRect );
+ if ( bIsBmp )
+ {
+ if ( pBitmap )
+ DrawBitmap( aDrawPos, aDrawSize, *pBitmap );
+ else
+ {
+ Size aSize = GetOutputSizePixel();
+ DrawLine( Point(0,0), Point(aSize.Width(),aSize.Height()) );
+ DrawLine( Point(0,aSize.Height()), Point(aSize.Width(),0) );
+ }
+ }
+}
+/* -----------------------------27.02.2002 11:07------------------------------
+
+ ---------------------------------------------------------------------------*/
+void BackgroundPreviewImpl::DataChanged( const DataChangedEvent& rDCEvt )
+{
+ if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
+ (rDCEvt.GetFlags() & SETTINGS_STYLE) )
+ {
+ Invalidate();
+ }
+ Window::DataChanged( rDCEvt );
+}
+
+// class SvxBackgroundTabPage --------------------------------------------
+
+#define HDL(hdl) LINK(this,SvxBackgroundTabPage,hdl)
+
+SvxBackgroundTabPage::SvxBackgroundTabPage( Window* pParent,
+ const SfxItemSet& rCoreSet ) :
+
+/* [Beschreibung]
+
+*/
+
+ SvxTabPage( pParent, CUI_RES( RID_SVXPAGE_BACKGROUND ), rCoreSet ),
+
+ aBorderWin ( this, CUI_RES(CT_BORDER) ),
+ aBackgroundColorSet ( &aBorderWin, CUI_RES( SET_BGDCOLOR ) ),
+ aBackgroundColorBox ( this, CUI_RES( GB_BGDCOLOR ) ),
+ pPreviewWin1 ( new BackgroundPreviewImpl(
+ this, CUI_RES( WIN_PREVIEW1 ), FALSE ) ),
+ aColTransFT ( this, CUI_RES( FT_COL_TRANS ) ),
+ aColTransMF ( this, CUI_RES( MF_COL_TRANS ) ),
+ aBtnBrowse ( this, CUI_RES( BTN_BROWSE ) ),
+ aBtnLink ( this, CUI_RES( BTN_LINK ) ),
+ aBtnPreview ( this, CUI_RES( BTN_PREVIEW ) ),
+ aFtFile ( this, CUI_RES( FT_FILE ) ),
+ aGbFile ( this, CUI_RES( GB_FILE ) ),
+ aBtnPosition ( this, CUI_RES( BTN_POSITION ) ),
+ aBtnArea ( this, CUI_RES( BTN_AREA ) ),
+ aBtnTile ( this, CUI_RES( BTN_TILE ) ),
+ aWndPosition ( this, CUI_RES( WND_POSITION ), RP_MM ),
+ aGbPosition ( this, CUI_RES( GB_POSITION ) ),
+ aGraphTransFL ( this, CUI_RES( FL_GRAPH_TRANS ) ),
+ aGraphTransMF ( this, CUI_RES( MF_GRAPH_TRANS ) ),
+ pPreviewWin2 ( new BackgroundPreviewImpl(
+ this, CUI_RES( WIN_PREVIEW2 ), TRUE ) ),
+ aSelectTxt ( this, CUI_RES( FT_SELECTOR ) ),
+ aLbSelect ( this, CUI_RES( LB_SELECTOR ) ),
+ aStrBrowse ( CUI_RES( STR_BROWSE ) ),
+ aStrUnlinked ( CUI_RES( STR_UNLINKED ) ),
+ aTblDesc ( this, CUI_RES( FT_TBL_DESC ) ),
+ aTblLBox ( this, CUI_RES( LB_TBL_BOX ) ),
+ aParaLBox ( this, CUI_RES( LB_PARA_BOX ) ),
+ nHtmlMode ( 0 ),
+ bAllowShowSelector ( TRUE ),
+ bIsGraphicValid ( FALSE ),
+ bLinkOnly ( FALSE ),
+ bResized ( FALSE ),
+ bColTransparency ( FALSE ),
+ bGraphTransparency ( FALSE ),
+
+ pPageImpl ( new SvxBackgroundPage_Impl ),
+ pImportDlg ( NULL ),
+ pTableBck_Impl ( NULL ),
+ pParaBck_Impl ( NULL )
+
+{
+ // diese Page braucht ExchangeSupport
+ SetExchangeSupport();
+
+ const SfxPoolItem* pItem;
+ SfxObjectShell* pShell;
+
+ if ( SFX_ITEM_SET == rCoreSet.GetItemState( SID_HTML_MODE, FALSE, &pItem )
+ || ( 0 != ( pShell = SfxObjectShell::Current()) &&
+ 0 != ( pItem = pShell->GetItem( SID_HTML_MODE ) ) ) )
+ {
+ nHtmlMode = ((SfxUInt16Item*)pItem)->GetValue();
+ }
+
+ FillColorValueSets_Impl();
+
+ aBackgroundColorSet.SetSelectHdl( HDL(BackgroundColorHdl_Impl) );
+ FreeResource();
+}
+
+//------------------------------------------------------------------------
+
+SvxBackgroundTabPage::~SvxBackgroundTabPage()
+
+/* [Beschreibung]
+
+*/
+
+{
+ delete pPreviewWin1;
+ delete pPreviewWin2;
+ delete pPageImpl->pLoadTimer;
+ delete pPageImpl;
+ delete pImportDlg;
+
+ if( pTableBck_Impl)
+ {
+ delete pTableBck_Impl->pCellBrush;
+ delete pTableBck_Impl->pRowBrush;
+ delete pTableBck_Impl->pTableBrush;
+ delete pTableBck_Impl;
+ }
+
+ if(pParaBck_Impl)
+ {
+ delete pParaBck_Impl->pParaBrush;
+ delete pParaBck_Impl->pCharBrush;
+ delete pParaBck_Impl;
+ }
+}
+
+//------------------------------------------------------------------------
+
+USHORT* SvxBackgroundTabPage::GetRanges()
+
+/* [Beschreibung]
+
+ gibt den Bereich der Which-Werte zur"uck
+*/
+
+{
+ return pRanges;
+}
+
+//------------------------------------------------------------------------
+
+SfxTabPage* SvxBackgroundTabPage::Create( Window* pParent,
+ const SfxItemSet& rAttrSet )
+
+/* [Beschreibung]
+
+ Create-Methode f"ur den TabDialog
+*/
+
+{
+ return ( new SvxBackgroundTabPage( pParent, rAttrSet ) );
+}
+
+//------------------------------------------------------------------------
+
+void SvxBackgroundTabPage::Reset( const SfxItemSet& rSet )
+
+/* [Beschreibung]
+
+*/
+
+{
+// os: So ein Unsinn! Irgendwo laesst sich so ein Item immer finden,
+// es muss aber im rSet vorhanden sein!
+// const SfxPoolItem* pX = GetOldItem( rSet, SID_VIEW_FLD_PIC );
+// if( pX && pX->ISA(SfxWallpaperItem))
+ if(SFX_ITEM_AVAILABLE <= rSet.GetItemState(GetWhich(SID_VIEW_FLD_PIC), FALSE))
+ {
+ ResetFromWallpaperItem( rSet );
+ return;
+ }
+
+ // Zustand des Vorschau-Buttons durch UserData persistent
+ String aUserData = GetUserData();
+ aBtnPreview.Check( aUserData.Len() && sal_Unicode('1') == aUserData.GetChar( 0 ) );
+
+ // nach Reset kein ShowSelector() mehr aufrufen d"urfen
+ bAllowShowSelector = FALSE;
+
+
+ // Input-BrushItem besorgen und auswerten
+ const SvxBrushItem* pBgdAttr = NULL;
+ USHORT nSlot = SID_ATTR_BRUSH;
+ const SfxPoolItem* pItem;
+ USHORT nDestValue = USHRT_MAX;
+
+ if ( SFX_ITEM_SET == rSet.GetItemState( SID_BACKGRND_DESTINATION,
+ FALSE, &pItem ) )
+ {
+ nDestValue = ((const SfxUInt16Item*)pItem)->GetValue();
+ aTblLBox.SelectEntryPos(nDestValue);
+
+ switch ( nDestValue )
+ {
+ case TBL_DEST_CELL:
+ nSlot = SID_ATTR_BRUSH;
+ break;
+ case TBL_DEST_ROW:
+ nSlot = SID_ATTR_BRUSH_ROW;
+ break;
+ case TBL_DEST_TBL:
+ nSlot = SID_ATTR_BRUSH_TABLE;
+ break;
+ }
+ }
+ else if( SFX_ITEM_SET == rSet.GetItemState(
+ SID_PARA_BACKGRND_DESTINATION, FALSE, &pItem ) )
+ {
+ nDestValue = ((const SfxUInt16Item*)pItem)->GetValue();
+ // ist gerade Zeichen aktiviert?
+ USHORT nParaSel = aParaLBox.GetSelectEntryPos();
+ if(1 == nParaSel)
+ {
+ // dann war das ein "Standard" - Aufruf
+ nDestValue = nParaSel;
+ }
+ aParaLBox.SelectEntryPos(nDestValue);
+
+ switch ( nDestValue )
+ {
+ case PARA_DEST_PARA:
+ nSlot = SID_ATTR_BRUSH;
+ break;
+ case PARA_DEST_CHAR:
+ nSlot = SID_ATTR_BRUSH_CHAR;
+ break;
+ }
+ }
+ //#111173# the destination item is missing when the parent style has been changed
+ if(USHRT_MAX == nDestValue && (aParaLBox.IsVisible()||aTblLBox.IsVisible()))
+ nDestValue = 0;
+ USHORT nWhich = GetWhich( nSlot );
+
+ if ( rSet.GetItemState( nWhich, FALSE ) >= SFX_ITEM_AVAILABLE )
+ pBgdAttr = (const SvxBrushItem*)&( rSet.Get( nWhich ) );
+
+ aBtnTile.Check();
+
+ if ( pBgdAttr )
+ {
+ FillControls_Impl(*pBgdAttr, aUserData);
+ aBgdColor = ( (SvxBrushItem*)pBgdAttr )->GetColor();
+ }
+ else
+ {
+ aSelectTxt.Hide();
+ aLbSelect.Hide();
+ aLbSelect.SelectEntryPos( 0 );
+ ShowColorUI_Impl();
+
+ const SfxPoolItem* pOld = GetOldItem( rSet, SID_ATTR_BRUSH );
+
+ if ( pOld )
+ aBgdColor = ( (SvxBrushItem*)pOld )->GetColor();
+ }
+
+ if ( nDestValue != USHRT_MAX )
+ {
+ if(aTblLBox.IsVisible())
+ {
+ USHORT nValue = aTblLBox.GetSelectEntryPos();
+
+ if ( pTableBck_Impl )
+ {
+ DELETEZ( pTableBck_Impl->pCellBrush);
+ DELETEZ( pTableBck_Impl->pRowBrush);
+ DELETEZ( pTableBck_Impl->pTableBrush);
+ }
+ else
+ pTableBck_Impl = new SvxBackgroundTable_Impl();
+
+ pTableBck_Impl->nActPos = nValue;
+
+ nWhich = GetWhich( SID_ATTR_BRUSH );
+ if ( rSet.GetItemState( nWhich, FALSE ) >= SFX_ITEM_AVAILABLE )
+ {
+ pBgdAttr = (const SvxBrushItem*)&( rSet.Get( nWhich ) );
+ pTableBck_Impl->pCellBrush = new SvxBrushItem(*pBgdAttr);
+ }
+ pTableBck_Impl->nCellWhich = nWhich;
+
+ if ( rSet.GetItemState( SID_ATTR_BRUSH_ROW, FALSE ) >= SFX_ITEM_AVAILABLE )
+ {
+ pBgdAttr = (const SvxBrushItem*)&( rSet.Get( SID_ATTR_BRUSH_ROW ) );
+ pTableBck_Impl->pRowBrush = new SvxBrushItem(*pBgdAttr);
+ }
+ pTableBck_Impl->nRowWhich = SID_ATTR_BRUSH_ROW;
+
+ if ( rSet.GetItemState( SID_ATTR_BRUSH_TABLE, FALSE ) >= SFX_ITEM_AVAILABLE )
+ {
+ pBgdAttr = (const SvxBrushItem*)&( rSet.Get( SID_ATTR_BRUSH_TABLE ) );
+ pTableBck_Impl->pTableBrush = new SvxBrushItem(*pBgdAttr);
+ }
+ pTableBck_Impl->nTableWhich = SID_ATTR_BRUSH_TABLE;
+
+ TblDestinationHdl_Impl(&aTblLBox);
+ aTblLBox.SaveValue();
+ }
+ else
+ {
+ USHORT nValue = aParaLBox.GetSelectEntryPos();
+
+ if ( pParaBck_Impl )
+ {
+ delete pParaBck_Impl->pParaBrush;
+ delete pParaBck_Impl->pCharBrush;
+ }
+ else
+ pParaBck_Impl = new SvxBackgroundPara_Impl();
+
+ pParaBck_Impl->nActPos = nValue;
+
+ nWhich = GetWhich( SID_ATTR_BRUSH );
+ if ( rSet.GetItemState( nWhich, FALSE ) >= SFX_ITEM_AVAILABLE )
+ {
+ pBgdAttr = (const SvxBrushItem*)&( rSet.Get( nWhich ) );
+ pParaBck_Impl->pParaBrush = new SvxBrushItem(*pBgdAttr);
+ }
+
+ nWhich = GetWhich( SID_ATTR_BRUSH_CHAR );
+ SfxItemState eState = rSet.GetItemState( nWhich, TRUE );
+ eState = rSet.GetItemState( nWhich, FALSE );
+ if ( rSet.GetItemState( nWhich, TRUE ) > SFX_ITEM_AVAILABLE )
+ {
+ pBgdAttr = (const SvxBrushItem*)&( rSet.Get( nWhich ) );
+ pParaBck_Impl->pCharBrush = new SvxBrushItem(*pBgdAttr);
+ }
+ else
+ pParaBck_Impl->pCharBrush = new SvxBrushItem(SID_ATTR_BRUSH_CHAR);
+
+ ParaDestinationHdl_Impl(&aParaLBox);
+ aParaLBox.SaveValue();
+ }
+ }
+ if(!bResized)
+ {
+ if(!aLbSelect.IsVisible() && !aTblLBox.IsVisible() && !aParaLBox.IsVisible())
+ {
+ long nY(LogicToPixel(Point(11,14), MAP_APPFONT).X());
+ long nX(LogicToPixel(Point(11,14), MAP_APPFONT).Y());
+ Point aPos(aBorderWin.GetPosPixel());
+ aPos.X() = nX;
+ aPos.Y() = nY;
+ aBorderWin.SetPosPixel(aPos);
+ aPos = pPreviewWin1->GetPosPixel();
+ aPos.Y() = nY;
+ pPreviewWin1->SetPosPixel(aPos);
+ aBackgroundColorBox.Hide();
+ }
+ }
+}
+
+void SvxBackgroundTabPage::ResetFromWallpaperItem( const SfxItemSet& rSet )
+{
+ ShowSelector();
+
+ // Zustand des Vorschau-Buttons durch UserData persistent
+ String aUserData = GetUserData();
+ aBtnPreview.Check( aUserData.Len() && sal_Unicode('1') == aUserData.GetChar( 0 ) );
+
+ // Input-BrushItem besorgen und auswerten
+ const SvxBrushItem* pBgdAttr = NULL;
+ USHORT nSlot = SID_VIEW_FLD_PIC;
+ USHORT nWhich = GetWhich( nSlot );
+ SvxBrushItem* pTemp = 0;
+ const CntWallpaperItem* pItem = 0;
+
+ if ( rSet.GetItemState( nWhich, FALSE ) >= SFX_ITEM_AVAILABLE )
+ {
+ pItem = (const CntWallpaperItem*)&rSet.Get( nWhich );
+ pTemp = new SvxBrushItem( *pItem, nWhich );
+ pBgdAttr = pTemp;
+ }
+
+ aBtnTile.Check();
+
+ if ( pBgdAttr )
+ {
+ FillControls_Impl(*pBgdAttr, aUserData);
+ // Auch bei Anzeige der Grafik, soll die Brush erhalten bleiben
+ if( aBgdColor != pBgdAttr->GetColor() )
+ {
+ aBgdColor = pBgdAttr->GetColor();
+ USHORT nCol = GetItemId_Impl( aBackgroundColorSet, aBgdColor );
+ aBackgroundColorSet.SelectItem( nCol );
+ pPreviewWin1->NotifyChange( aBgdColor );
+ }
+ }
+ else
+ {
+ aLbSelect.SelectEntryPos( 0 );
+ ShowColorUI_Impl();
+
+ const SfxPoolItem* pOld = GetOldItem( rSet, SID_VIEW_FLD_PIC );
+ if ( pOld )
+ aBgdColor = Color( ((CntWallpaperItem*)pOld)->GetColor() );
+ }
+
+ // We now have always a link to the background
+ bLinkOnly = TRUE;
+ aBtnLink.Check( TRUE );
+ aBtnLink.Show( FALSE );
+// if( !pItem || !pItem->GetWallpaper(FALSE).IsBitmap() )
+// aBtnLink.Check();
+
+ delete pTemp;
+}
+
+
+
+//------------------------------------------------------------------------
+
+void SvxBackgroundTabPage::FillUserData()
+
+/* [Beschreibung]
+
+ Beim Destruieren einer SfxTabPage wird diese virtuelle Methode gerufen,
+ damit die TabPage interne Informationen sichern kann.
+
+ In diesem Fall wird der Zustand des Vorschau-Buttons gesichert.
+*/
+
+{
+ SetUserData( String( aBtnPreview.IsChecked() ? sal_Unicode('1') : sal_Unicode('0') ) );
+}
+
+//------------------------------------------------------------------------
+
+BOOL SvxBackgroundTabPage::FillItemSet( SfxItemSet& rCoreSet )
+
+/* [Beschreibung]
+
+*/
+
+{
+ if ( pPageImpl->pLoadTimer && pPageImpl->pLoadTimer->IsActive() )
+ {
+ pPageImpl->pLoadTimer->Stop();
+ LoadTimerHdl_Impl( pPageImpl->pLoadTimer );
+ }
+// os: So ein Unsinn! Irgendwo laesst sich so ein Item immer finden,
+// es muss aber im rSet vorhanden sein!
+
+// const SfxPoolItem* pX = GetOldItem( rCoreSet, SID_VIEW_FLD_PIC );
+// if( pX && pX->ISA(SfxWallpaperItem))
+ if(SFX_ITEM_AVAILABLE <= rCoreSet.GetItemState(GetWhich(SID_VIEW_FLD_PIC), FALSE))
+ return FillItemSetWithWallpaperItem( rCoreSet, SID_VIEW_FLD_PIC );
+
+ BOOL bModified = FALSE;
+ USHORT nSlot = SID_ATTR_BRUSH;
+
+ if ( aTblLBox.IsVisible() )
+ {
+ switch( aTblLBox.GetSelectEntryPos() )
+ {
+ case TBL_DEST_CELL:
+ nSlot = SID_ATTR_BRUSH;
+ break;
+ case TBL_DEST_ROW:
+ nSlot = SID_ATTR_BRUSH_ROW;
+ break;
+ case TBL_DEST_TBL:
+ nSlot = SID_ATTR_BRUSH_TABLE;
+ break;
+ }
+ }
+ else if(aParaLBox.GetData() == &aParaLBox)
+ {
+ switch(aParaLBox.GetSelectEntryPos())
+ {
+ case PARA_DEST_PARA:
+ nSlot = SID_ATTR_BRUSH;
+ break;
+ case PARA_DEST_CHAR:
+ nSlot = SID_ATTR_BRUSH_CHAR;
+ break;
+ }
+ }
+ USHORT nWhich = GetWhich( nSlot );
+
+ const SfxPoolItem* pOld = GetOldItem( rCoreSet, nSlot );
+ SfxItemState eOldItemState = rCoreSet.GetItemState(nSlot, FALSE);
+ const SfxItemSet& rOldSet = GetItemSet();
+
+ BOOL bGraphTransparencyChanged = bGraphTransparency && (aGraphTransMF.GetText() != aGraphTransMF.GetSavedValue());
+ if ( pOld )
+ {
+ const SvxBrushItem& rOldItem = (const SvxBrushItem&)*pOld;
+ SvxGraphicPosition eOldPos = rOldItem.GetGraphicPos();
+ const BOOL bIsBrush = ( 0 == aLbSelect.GetSelectEntryPos() );
+
+ // transparency has to be set if enabled, the color not already set to "No fill" and
+ if( bColTransparency &&
+ aBgdColor.GetTransparency() < 0xff)
+ {
+ aBgdColor.SetTransparency(lcl_PercentToTransparency(static_cast<long>(aColTransMF.GetValue())));
+ }
+ if ( ( (GPOS_NONE == eOldPos) && bIsBrush )
+ || ( (GPOS_NONE != eOldPos) && !bIsBrush ) ) // Brush <-> Bitmap gewechselt?
+ {
+ // Hintergrund-Art wurde nicht gewechselt:
+
+ if ( (GPOS_NONE == eOldPos) || !aLbSelect.IsVisible() )
+ {
+ // Brush-Behandlung:
+ if ( rOldItem.GetColor() != aBgdColor ||
+ (SFX_ITEM_AVAILABLE >= eOldItemState && !aBackgroundColorSet.IsNoSelection()))
+ {
+ bModified = TRUE;
+ rCoreSet.Put( SvxBrushItem( aBgdColor, nWhich ) );
+ }
+ else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, FALSE ) )
+ rCoreSet.ClearItem( nWhich );
+ }
+ else
+ {
+ // Bitmap-Behandlung:
+
+ SvxGraphicPosition eNewPos = GetGraphicPosition_Impl();
+ const BOOL bIsLink = aBtnLink.IsChecked();
+ const BOOL bWasLink = (NULL != rOldItem.GetGraphicLink() );
+
+
+ if ( !bIsLink && !bIsGraphicValid )
+ bIsGraphicValid = LoadLinkedGraphic_Impl();
+
+ if ( bGraphTransparencyChanged ||
+ eNewPos != eOldPos
+ || bIsLink != bWasLink
+ || ( bWasLink && *rOldItem.GetGraphicLink()
+ != aBgdGraphicPath )
+ || ( !bWasLink && rOldItem.GetGraphic()->GetBitmap()
+ != aBgdGraphic.GetBitmap() )
+ )
+ {
+ bModified = TRUE;
+
+ SvxBrushItem aTmpBrush(nWhich);
+ if ( bIsLink )
+ {
+ aTmpBrush = SvxBrushItem( aBgdGraphicPath,
+ aBgdGraphicFilter,
+ eNewPos,
+ nWhich );
+ }
+ else
+ aTmpBrush = SvxBrushItem( aBgdGraphic,
+ eNewPos,
+ nWhich );
+ lcl_SetTransparency(aTmpBrush, static_cast<long>(aGraphTransMF.GetValue()));
+
+ rCoreSet.Put(aTmpBrush);
+ }
+ else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, FALSE ) )
+ rCoreSet.ClearItem( nWhich );
+ }
+ }
+ else // Brush <-> Bitmap gewechselt!
+ {
+ if ( bIsBrush )
+ rCoreSet.Put( SvxBrushItem( aBgdColor, nWhich ) );
+ else
+ {
+ SvxBrushItem* pTmpBrush = 0;
+ if ( aBtnLink.IsChecked() )
+ {
+ pTmpBrush = new SvxBrushItem( aBgdGraphicPath,
+ aBgdGraphicFilter,
+ GetGraphicPosition_Impl(),
+ nWhich );
+ }
+ else
+ {
+ if ( !bIsGraphicValid )
+ bIsGraphicValid = LoadLinkedGraphic_Impl();
+
+ if ( bIsGraphicValid )
+ pTmpBrush = new SvxBrushItem( aBgdGraphic,
+ GetGraphicPosition_Impl(),
+ nWhich );
+ }
+ if(pTmpBrush)
+ {
+ lcl_SetTransparency(*pTmpBrush, static_cast<long>(aGraphTransMF.GetValue()));
+ rCoreSet.Put(*pTmpBrush);
+ delete pTmpBrush;
+ }
+ }
+ bModified = ( bIsBrush || aBtnLink.IsChecked() || bIsGraphicValid );
+ }
+ }
+ else if ( SID_ATTR_BRUSH_CHAR == nSlot && aBgdColor != Color( COL_WHITE ) )
+ {
+ rCoreSet.Put( SvxBrushItem( aBgdColor, nWhich ) );
+ bModified = TRUE;
+ }
+
+ if( aTblLBox.IsVisible() )
+ {
+ // Der aktuelle Zustand wurde bereits geputtet
+ if( nSlot != SID_ATTR_BRUSH && pTableBck_Impl->pCellBrush)
+ {
+ const SfxPoolItem* pOldCell =
+ GetOldItem( rCoreSet, SID_ATTR_BRUSH );
+
+ if ( *pTableBck_Impl->pCellBrush != *pOldCell )
+ {
+ rCoreSet.Put( *pTableBck_Impl->pCellBrush );
+ bModified |= TRUE;
+ }
+ }
+
+ if( nSlot != SID_ATTR_BRUSH_ROW && pTableBck_Impl->pRowBrush)
+ {
+ const SfxPoolItem* pOldRow =
+ GetOldItem( rCoreSet, SID_ATTR_BRUSH_ROW );
+
+ if ( *pTableBck_Impl->pRowBrush != *pOldRow )
+ {
+ rCoreSet.Put( *pTableBck_Impl->pRowBrush );
+ bModified |= TRUE;
+ }
+ }
+
+ if( nSlot != SID_ATTR_BRUSH_TABLE && pTableBck_Impl->pTableBrush)
+ {
+ const SfxPoolItem* pOldTable =
+ GetOldItem( rCoreSet, SID_ATTR_BRUSH_TABLE );
+
+ if ( *pTableBck_Impl->pTableBrush != *pOldTable )
+ {
+ rCoreSet.Put( *pTableBck_Impl->pTableBrush );
+ bModified |= TRUE;
+ }
+ }
+
+ if( aTblLBox.GetSavedValue() != aTblLBox.GetSelectEntryPos() )
+ {
+ rCoreSet.Put( SfxUInt16Item( SID_BACKGRND_DESTINATION,
+ aTblLBox.GetSelectEntryPos() ) );
+ bModified |= TRUE;
+ }
+ }
+ else if(aParaLBox.GetData() == &aParaLBox)
+ {
+ // Der aktuelle Zustand wurde bereits geputtet
+ if( nSlot != SID_ATTR_BRUSH && aParaLBox.IsVisible()) // nicht im Suchen-Format-Dialog
+ {
+ const SfxPoolItem* pOldPara =
+ GetOldItem( rCoreSet, SID_ATTR_BRUSH );
+
+ if ( *pParaBck_Impl->pParaBrush != *pOldPara )
+ {
+ rCoreSet.Put( *pParaBck_Impl->pParaBrush );
+ bModified |= TRUE;
+ }
+ }
+
+ if( nSlot != SID_ATTR_BRUSH_CHAR )
+ {
+ const SfxPoolItem* pOldChar =
+ GetOldItem( rCoreSet, SID_ATTR_BRUSH_CHAR );
+ DBG_ASSERT(pParaBck_Impl, "pParaBck_Impl == NULL ?");
+ if ( pOldChar &&
+ //#111173# crash report shows that pParaBck_Impl can be NULL, the cause is unknown
+ pParaBck_Impl &&
+ (*pParaBck_Impl->pCharBrush != *pOldChar ||
+ *pParaBck_Impl->pCharBrush != SvxBrushItem(SID_ATTR_BRUSH_CHAR)))
+ {
+ rCoreSet.Put( *pParaBck_Impl->pCharBrush );
+ bModified |= TRUE;
+ }
+ }
+
+ if( aParaLBox.GetSavedValue() != aParaLBox.GetSelectEntryPos() )
+ {
+ rCoreSet.Put( SfxUInt16Item( SID_BACKGRND_DESTINATION,
+ aParaLBox.GetSelectEntryPos() ) );
+ bModified |= TRUE;
+ }
+ }
+ return bModified;
+}
+
+BOOL SvxBackgroundTabPage::FillItemSetWithWallpaperItem( SfxItemSet& rCoreSet, USHORT nSlot)
+{
+ USHORT nWhich = GetWhich( nSlot );
+ const SfxPoolItem* pOld = GetOldItem( rCoreSet, nSlot );
+ const SfxItemSet& rOldSet = GetItemSet();
+ DBG_ASSERT(pOld,"FillItemSetWithWallpaperItem: Item not found");
+
+ SvxBrushItem rOldItem( (const CntWallpaperItem&)*pOld, nWhich );
+ SvxGraphicPosition eOldPos = rOldItem.GetGraphicPos();
+ const BOOL bIsBrush = ( 0 == aLbSelect.GetSelectEntryPos() );
+ BOOL bModified = FALSE;
+
+ if ( ( (GPOS_NONE == eOldPos) && bIsBrush )
+ || ( (GPOS_NONE != eOldPos) && !bIsBrush ) ) // Brush <-> Bitmap gewechselt?
+ {
+ // Hintergrund-Art wurde nicht gewechselt:
+
+ if ( (GPOS_NONE == eOldPos) || !aLbSelect.IsVisible() )
+ {
+ // Brush-Behandlung:
+ if ( rOldItem.GetColor() != aBgdColor )
+ {
+ bModified = TRUE;
+ CntWallpaperItem aItem( nWhich );
+ aItem.SetColor( aBgdColor );
+ rCoreSet.Put( aItem );
+ }
+ else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, FALSE ) )
+ rCoreSet.ClearItem( nWhich );
+ }
+ else
+ {
+ // Bitmap-Behandlung:
+ SvxGraphicPosition eNewPos = GetGraphicPosition_Impl();
+
+ int bBitmapChanged = ( ( eNewPos != eOldPos ) ||
+ ( *rOldItem.GetGraphicLink() != aBgdGraphicPath ) );
+ int bBrushChanged = ( rOldItem.GetColor() != aBgdColor );
+ if( bBitmapChanged || bBrushChanged )
+ {
+ bModified = TRUE;
+
+ CntWallpaperItem aItem( nWhich );
+ WallpaperStyle eWallStyle = SvxBrushItem::GraphicPos2WallpaperStyle(eNewPos);
+ aItem.SetStyle( sal::static_int_cast< USHORT >( eWallStyle ) );
+ aItem.SetColor( aBgdColor );
+ aItem.SetBitmapURL( aBgdGraphicPath );
+ rCoreSet.Put( aItem );
+ }
+ else if ( SFX_ITEM_DEFAULT == rOldSet.GetItemState( nWhich, FALSE ) )
+ rCoreSet.ClearItem( nWhich );
+ }
+ }
+ else // Brush <-> Bitmap gewechselt!
+ {
+ CntWallpaperItem aItem( nWhich );
+ if ( bIsBrush )
+ {
+ aItem.SetColor( aBgdColor );
+ rCoreSet.Put( aItem );
+ }
+ else
+ {
+ WallpaperStyle eWallStyle =
+ SvxBrushItem::GraphicPos2WallpaperStyle( GetGraphicPosition_Impl() );
+ aItem.SetStyle( sal::static_int_cast< USHORT >( eWallStyle ) );
+ aItem.SetColor( aBgdColor );
+ aItem.SetBitmapURL( aBgdGraphicPath );
+ rCoreSet.Put( aItem );
+ }
+
+ bModified = TRUE;
+ }
+ return bModified;
+}
+
+//-----------------------------------------------------------------------
+
+int SvxBackgroundTabPage::DeactivatePage( SfxItemSet* _pSet )
+
+/* [Beschreibung]
+
+ virtuelle Methode, wird beim Deaktivieren gerufen
+*/
+
+{
+ if ( pPageImpl->bIsImportDlgInExecute )
+ return KEEP_PAGE;
+
+ if ( _pSet )
+ FillItemSet( *_pSet );
+
+ return LEAVE_PAGE;
+}
+
+//-----------------------------------------------------------------------
+
+void SvxBackgroundTabPage::PointChanged( Window* , RECT_POINT )
+
+/* [Beschreibung]
+
+*/
+
+{
+ // muss implementiert werden, damit Position-Control funktioniert
+}
+
+//-----------------------------------------------------------------------
+
+void SvxBackgroundTabPage::ShowSelector()
+
+/* [Beschreibung]
+
+*/
+
+{
+ if( bAllowShowSelector)
+ {
+ aSelectTxt.Show();
+ aLbSelect.Show();
+ aLbSelect.SetSelectHdl( HDL(SelectHdl_Impl) );
+ aBtnLink.SetClickHdl( HDL(FileClickHdl_Impl) );
+ aBtnPreview.SetClickHdl( HDL(FileClickHdl_Impl) );
+ aBtnBrowse.SetClickHdl( HDL(BrowseHdl_Impl) );
+ aBtnArea.SetClickHdl( HDL(RadioClickHdl_Impl) );
+ aBtnTile.SetClickHdl( HDL(RadioClickHdl_Impl) );
+ aBtnPosition.SetClickHdl( HDL(RadioClickHdl_Impl) );
+
+ // Verz"ogertes Laden "uber Timer (wg. UI-Update)
+ pPageImpl->pLoadTimer = new Timer;
+ pPageImpl->pLoadTimer->SetTimeout( 500 ); // 500ms verz"ogern
+ pPageImpl->pLoadTimer->SetTimeoutHdl(
+ LINK( this, SvxBackgroundTabPage, LoadTimerHdl_Impl ) );
+
+ bAllowShowSelector = FALSE;
+
+ if(nHtmlMode & HTMLMODE_ON)
+ {
+ if(!(nHtmlMode & HTMLMODE_GRAPH_POS))
+ aBtnPosition.Enable(FALSE);
+ aBtnArea.Enable(FALSE);
+ }
+ }
+}
+
+//------------------------------------------------------------------------
+
+
+void SvxBackgroundTabPage::RaiseLoadError_Impl()
+
+/* [Beschreibung]
+
+*/
+
+{
+ SfxErrorContext aContext( ERRCTX_SVX_BACKGROUND,
+ String(),
+ this,
+ RID_SVXERRCTX,
+ &CUI_MGR() );
+
+ ErrorHandler::HandleError(
+ *new StringErrorInfo( ERRCODE_SVX_GRAPHIC_NOTREADABLE,
+ aBgdGraphicPath ) );
+}
+
+//------------------------------------------------------------------------
+
+BOOL SvxBackgroundTabPage::LoadLinkedGraphic_Impl()
+
+/* [Beschreibung]
+
+*/
+
+{
+ BOOL bResult = ( aBgdGraphicPath.Len() > 0 ) &&
+ ( GRFILTER_OK == LoadGraphic( aBgdGraphicPath,
+ aBgdGraphicFilter,
+ aBgdGraphic ) );
+ return bResult;
+}
+
+//------------------------------------------------------------------------
+
+
+void SvxBackgroundTabPage::FillColorValueSets_Impl()
+
+/* [Beschreibung]
+
+ F"ullen des Farb-Sets
+*/
+
+{
+ SfxObjectShell* pDocSh = SfxObjectShell::Current();
+ const SfxPoolItem* pItem = NULL;
+ XColorTable* pColorTable = NULL;
+ const Size aSize15x15 = Size( 15, 15 );
+ FASTBOOL bOwn = FALSE;
+
+ if ( pDocSh && ( 0 != ( pItem = pDocSh->GetItem( SID_COLOR_TABLE ) ) ) )
+ pColorTable = ( (SvxColorTableItem*)pItem )->GetColorTable();
+
+ if ( !pColorTable )
+ {
+ bOwn = TRUE;
+ pColorTable = new XColorTable( SvtPathOptions().GetPalettePath() );
+ }
+
+ if ( pColorTable )
+ {
+ short i = 0;
+ long nCount = pColorTable->Count();
+ XColorEntry* pEntry = NULL;
+ Color aColWhite( COL_WHITE );
+ String aStrWhite( SVX_RES( RID_SVXITEMS_COLOR_WHITE ) );
+ WinBits nBits = ( aBackgroundColorSet.GetStyle() | WB_ITEMBORDER | WB_NAMEFIELD | WB_NONEFIELD );
+ aBackgroundColorSet.SetText( SVX_RESSTR( RID_SVXSTR_TRANSPARENT ) );
+ aBackgroundColorSet.SetStyle( nBits );
+ for ( i = 0; i < nCount; i++ )
+ {
+ pEntry = pColorTable->GetColor(i);
+ aBackgroundColorSet.InsertItem( i + 1, pEntry->GetColor(), pEntry->GetName() );
+ }
+
+ while ( i < 80 )
+ {
+ aBackgroundColorSet.InsertItem( i + 1, aColWhite, aStrWhite );
+ i++;
+ }
+
+ if ( nCount > 80 )
+ {
+ aBackgroundColorSet.SetStyle( nBits | WB_VSCROLL );
+ }
+ }
+
+ if ( bOwn )
+ delete pColorTable;
+
+ aBackgroundColorSet.SetColCount( 10 );
+ aBackgroundColorSet.SetLineCount( 10 );
+ aBackgroundColorSet.CalcWindowSizePixel( aSize15x15 );
+
+}
+
+//------------------------------------------------------------------------
+
+
+
+//------------------------------------------------------------------------
+
+void SvxBackgroundTabPage::ShowColorUI_Impl()
+
+/* [Beschreibung]
+
+ Die Controls f"ur das Einstellen der Grafik ausblenden und die
+ Controls f"ur die Farbeinstellung einblenden.
+*/
+
+{
+ if( !aBackgroundColorSet.IsVisible() )
+ {
+ aBackgroundColorSet.Show();
+ aBackgroundColorBox.Show();
+ aBorderWin.Show();
+ pPreviewWin1->Show();
+ aBtnBrowse.Hide();
+ aFtFile.Hide();
+ aBtnLink.Hide();
+ aBtnPreview.Hide();
+ aGbFile.Hide();
+ aBtnPosition.Hide();
+ aBtnArea.Hide();
+ aBtnTile.Hide();
+ aWndPosition.Hide();
+ aGbPosition.Hide();
+ pPreviewWin2->Hide();
+ aGraphTransFL.Show(FALSE);
+ aGraphTransMF.Show(FALSE);
+ if(bColTransparency)
+ {
+ aColTransFT.Show();
+ aColTransMF.Show();
+ }
+ }
+}
+
+//------------------------------------------------------------------------
+
+void SvxBackgroundTabPage::ShowBitmapUI_Impl()
+
+/* [Beschreibung]
+
+ Die Controls f"ur die Farbeinstellung ausblenden und die
+ Controls f"ur das Einstellen der Grafik einblenden.
+*/
+
+{
+ if ( aLbSelect.IsVisible() &&
+ (
+ aBackgroundColorSet.IsVisible()
+ || !aBtnBrowse.IsVisible() ) )
+ {
+ aBackgroundColorSet.Hide();
+ aBackgroundColorBox.Hide();
+ aBorderWin.Hide();
+ pPreviewWin1->Hide();
+ aBtnBrowse.Show();
+ aFtFile.Show();
+
+ if ( !bLinkOnly && ! nHtmlMode & HTMLMODE_ON )
+ aBtnLink.Show();
+ aBtnPreview.Show();
+ aGbFile.Show();
+ aBtnPosition.Show();
+ aBtnArea.Show();
+ aBtnTile.Show();
+ aWndPosition.Show();
+ aGbPosition.Show();
+ pPreviewWin2->Show();
+ if(bGraphTransparency)
+ {
+ aGraphTransFL.Show();
+ aGraphTransMF.Show();
+ }
+ aColTransFT.Show(FALSE);
+ aColTransMF.Show(FALSE);
+ }
+}
+
+//------------------------------------------------------------------------
+
+void SvxBackgroundTabPage::SetGraphicPosition_Impl( SvxGraphicPosition ePos )
+
+/* [Beschreibung]
+
+ Die Controls f"ur die Grafikposition einstellen.
+*/
+
+{
+ switch ( ePos )
+ {
+ case GPOS_AREA:
+ {
+ aBtnArea.Check();
+ aWndPosition.Disable();
+ }
+ break;
+
+ case GPOS_TILED:
+ {
+ aBtnTile.Check();
+ aWndPosition.Disable();
+ }
+ break;
+
+ default:
+ {
+ aBtnPosition.Check();
+ aWndPosition.Enable();
+ RECT_POINT eNewPos = RP_MM;
+
+ switch ( ePos )
+ {
+ case GPOS_MM: break;
+ case GPOS_LT: eNewPos = RP_LT; break;
+ case GPOS_MT: eNewPos = RP_MT; break;
+ case GPOS_RT: eNewPos = RP_RT; break;
+ case GPOS_LM: eNewPos = RP_LM; break;
+ case GPOS_RM: eNewPos = RP_RM; break;
+ case GPOS_LB: eNewPos = RP_LB; break;
+ case GPOS_MB: eNewPos = RP_MB; break;
+ case GPOS_RB: eNewPos = RP_RB; break;
+ default: ;//prevent warning
+ }
+ aWndPosition.SetActualRP( eNewPos );
+ }
+ break;
+ }
+ aWndPosition.Invalidate();
+}
+
+//------------------------------------------------------------------------
+
+SvxGraphicPosition SvxBackgroundTabPage::GetGraphicPosition_Impl()
+
+/* [Beschreibung]
+
+ Die Position der Grafik zur"uckgeben.
+*/
+
+{
+ if ( aBtnTile.IsChecked() )
+ return GPOS_TILED;
+ else if ( aBtnArea.IsChecked() )
+ return GPOS_AREA;
+ else
+ {
+ switch ( aWndPosition.GetActualRP() )
+ {
+ case RP_LT: return GPOS_LT;
+ case RP_MT: return GPOS_MT;
+ case RP_RT: return GPOS_RT;
+ case RP_LM: return GPOS_LM;
+ case RP_MM: return GPOS_MM;
+ case RP_RM: return GPOS_RM;
+ case RP_LB: return GPOS_LB;
+ case RP_MB: return GPOS_MB;
+ case RP_RB: return GPOS_RB;
+ }
+ }
+ return GPOS_MM;
+}
+
+//-----------------------------------------------------------------------
+// Handler
+//-----------------------------------------------------------------------
+
+IMPL_LINK( SvxBackgroundTabPage, BackgroundColorHdl_Impl, ValueSet*, EMPTYARG )
+/*
+ Handler, called when color selection is changed
+*/
+{
+ USHORT nItemId = aBackgroundColorSet.GetSelectItemId();
+ Color aColor = nItemId ? ( aBackgroundColorSet.GetItemColor( nItemId ) ) : Color( COL_TRANSPARENT );
+ aBgdColor = aColor;
+ pPreviewWin1->NotifyChange( aBgdColor );
+ BOOL bEnableTransp = aBgdColor.GetTransparency() < 0xff;
+ aColTransFT.Enable(bEnableTransp);
+ aColTransMF.Enable(bEnableTransp);
+ return 0;
+}
+
+//------------------------------------------------------------------------
+
+IMPL_LINK( SvxBackgroundTabPage, SelectHdl_Impl, ListBox*, EMPTYARG )
+
+/* [Beschreibung]
+
+*/
+
+{
+ if ( 0 == aLbSelect.GetSelectEntryPos() )
+ {
+ ShowColorUI_Impl();
+ aParaLBox.Enable(); // Zeichenhintergrund kann keine Bitmap sein
+ }
+ else
+ {
+ ShowBitmapUI_Impl();
+ aParaLBox.Enable(FALSE);// Zeichenhintergrund kann keine Bitmap sein
+ }
+ return 0;
+}
+
+//------------------------------------------------------------------------
+
+IMPL_LINK( SvxBackgroundTabPage, FileClickHdl_Impl, CheckBox*, pBox )
+
+/* [Beschreibung]
+
+*/
+
+{
+ if ( &aBtnLink == pBox )
+ {
+ if ( aBtnLink.IsChecked() )
+ {
+ INetURLObject aObj( aBgdGraphicPath );
+ String aFilePath;
+ if ( aObj.GetProtocol() == INET_PROT_FILE )
+ aFilePath = aObj.getFSysPath( INetURLObject::FSYS_DETECT );
+ else
+ aFilePath = aBgdGraphicPath;
+ aFtFile.SetText( aFilePath );
+ }
+ else
+ aFtFile.SetText( aStrUnlinked );
+ }
+ else if ( &aBtnPreview == pBox )
+ {
+ if ( aBtnPreview.IsChecked() )
+ {
+ if ( !bIsGraphicValid )
+ bIsGraphicValid = LoadLinkedGraphic_Impl();
+
+ if ( bIsGraphicValid )
+ {
+ Bitmap aBmp = aBgdGraphic.GetBitmap();
+ pPreviewWin2->NotifyChange( &aBmp );
+ }
+ else
+ {
+ if ( aBgdGraphicPath.Len() > 0 ) // nur bei gelinkter Grafik
+ RaiseLoadError_Impl(); // ein Fehler
+ pPreviewWin2->NotifyChange( NULL );
+ }
+ }
+ else
+ pPreviewWin2->NotifyChange( NULL );
+ }
+ return 0;
+}
+
+//------------------------------------------------------------------------
+
+IMPL_LINK( SvxBackgroundTabPage, RadioClickHdl_Impl, RadioButton*, pBtn )
+
+/* [Beschreibung]
+
+*/
+
+{
+ if ( pBtn == &aBtnPosition )
+ {
+ if ( !aWndPosition.IsEnabled() )
+ {
+ aWndPosition.Enable();
+ aWndPosition.Invalidate();
+ }
+ }
+ else if ( aWndPosition.IsEnabled() )
+ {
+ aWndPosition.Disable();
+ aWndPosition.Invalidate();
+ }
+ return 0;
+}
+
+//------------------------------------------------------------------------
+
+IMPL_LINK( SvxBackgroundTabPage, BrowseHdl_Impl, PushButton* , EMPTYARG )
+
+/* [Beschreibung]
+
+ Handler, gerufen durch das Dr"ucken des Durchsuchen-Buttons.
+ Grafik/Einf"ugen-Dialog erzeugen, Pfad setzen und starten.
+*/
+
+{
+ if ( pPageImpl->pLoadTimer->IsActive() )
+ return 0;
+ BOOL bHtml = 0 != ( nHtmlMode & HTMLMODE_ON );
+
+ pImportDlg = new SvxOpenGraphicDialog( aStrBrowse );
+ if ( bHtml || bLinkOnly )
+ pImportDlg->EnableLink(sal_False);
+ pImportDlg->SetPath( aBgdGraphicPath, aBtnLink.IsChecked() );
+
+ pPageImpl->bIsImportDlgInExecute = TRUE;
+ short nErr = pImportDlg->Execute();
+ pPageImpl->bIsImportDlgInExecute = FALSE;
+
+ if( !nErr )
+ {
+ if ( bHtml )
+ aBtnLink.Check();
+ // wenn Verkn"upfen nicht gecheckt ist und die Vorschau auch nicht,
+ // dann die Vorschau aktivieren, damit der Anwender sieht,
+ // welche Grafik er ausgew"ahlt hat
+ if ( !aBtnLink.IsChecked() && !aBtnPreview.IsChecked() )
+ aBtnPreview.Check( TRUE );
+ // timer-verz"ogertes Laden der Grafik
+ pPageImpl->pLoadTimer->Start();
+ }
+ else
+ DELETEZ( pImportDlg );
+ return 0;
+}
+
+//-----------------------------------------------------------------------
+
+IMPL_LINK( SvxBackgroundTabPage, LoadTimerHdl_Impl, Timer* , pTimer )
+
+/* [Beschreibung]
+
+ Verz"ogertes Laden der Grafik.
+ Grafik wird nur dann geladen, wenn sie unterschiedlich zur
+ aktuellen Grafik ist.
+*/
+
+{
+ if ( pTimer == pPageImpl->pLoadTimer )
+ {
+ pPageImpl->pLoadTimer->Stop();
+
+ if ( pImportDlg )
+ {
+ INetURLObject aOld( aBgdGraphicPath );
+ INetURLObject aNew( pImportDlg->GetPath() );
+ if ( !aBgdGraphicPath.Len() || aNew != aOld )
+ {
+ // neue Datei gew"ahlt
+ aBgdGraphicPath = pImportDlg->GetPath();
+ aBgdGraphicFilter = pImportDlg->GetCurrentFilter();
+ BOOL bLink = ( nHtmlMode & HTMLMODE_ON ) || bLinkOnly ? TRUE : pImportDlg->IsAsLink();
+ aBtnLink.Check( bLink );
+ aBtnLink.Enable();
+
+ if ( aBtnPreview.IsChecked() )
+ {
+ if( !pImportDlg->GetGraphic(aBgdGraphic) )
+ {
+ bIsGraphicValid = TRUE;
+ }
+ else
+ {
+ aBgdGraphicFilter.Erase();
+ aBgdGraphicPath.Erase();
+ bIsGraphicValid = FALSE;
+ }
+ }
+ else
+ bIsGraphicValid = FALSE; // Grafik erst beim Preview-Click laden
+
+ if ( aBtnPreview.IsChecked() && bIsGraphicValid )
+ {
+ Bitmap aBmp = aBgdGraphic.GetBitmap();
+ pPreviewWin2->NotifyChange( &aBmp );
+ }
+ else
+ pPreviewWin2->NotifyChange( NULL );
+ }
+
+ FileClickHdl_Impl( &aBtnLink );
+ DELETEZ( pImportDlg );
+ }
+ }
+ return 0;
+}
+
+//-----------------------------------------------------------------------
+
+void SvxBackgroundTabPage::ShowTblControl()
+
+/* [Beschreibung]
+
+*/
+
+{
+ aTblLBox .SetSelectHdl( HDL(TblDestinationHdl_Impl) );
+ aTblLBox .SelectEntryPos(0);
+ aTblDesc.Show();
+ aTblLBox.Show();
+}
+
+//-----------------------------------------------------------------------
+
+void SvxBackgroundTabPage::ShowParaControl(BOOL bCharOnly)
+{
+ aParaLBox.SetSelectHdl(HDL(ParaDestinationHdl_Impl));
+ aParaLBox.SelectEntryPos(0);
+ if(!bCharOnly)
+ {
+ aTblDesc.Show();
+ aParaLBox.Show();
+ }
+ aParaLBox.SetData(&aParaLBox); // hier erkennt man, dass dieser Mode eingeschaltet ist
+}
+//-----------------------------------------------------------------------
+
+IMPL_LINK( SvxBackgroundTabPage, TblDestinationHdl_Impl, ListBox*, pBox )
+
+/* [Beschreibung]
+
+*/
+
+{
+ USHORT nSelPos = pBox->GetSelectEntryPos();
+ if( pTableBck_Impl && pTableBck_Impl->nActPos != nSelPos)
+ {
+ SvxBrushItem** pActItem = new (SvxBrushItem*);
+ USHORT nWhich = 0;
+ switch(pTableBck_Impl->nActPos)
+ {
+ case TBL_DEST_CELL:
+ *pActItem = pTableBck_Impl->pCellBrush;
+ nWhich = pTableBck_Impl->nCellWhich;
+ break;
+ case TBL_DEST_ROW:
+ *pActItem = pTableBck_Impl->pRowBrush;
+ nWhich = pTableBck_Impl->nRowWhich;
+ break;
+ case TBL_DEST_TBL:
+ *pActItem = pTableBck_Impl->pTableBrush;
+ nWhich = pTableBck_Impl->nTableWhich;
+ break;
+ }
+ pTableBck_Impl->nActPos = nSelPos;
+ if(!*pActItem)
+ *pActItem = new SvxBrushItem(nWhich);
+ if(0 == aLbSelect.GetSelectEntryPos()) // Brush ausgewaehlt
+ {
+ **pActItem = SvxBrushItem( aBgdColor, nWhich );
+ }
+ else
+ {
+ SvxGraphicPosition eNewPos = GetGraphicPosition_Impl();
+ const BOOL bIsLink = aBtnLink.IsChecked();
+
+ if ( !bIsLink && !bIsGraphicValid )
+ bIsGraphicValid = LoadLinkedGraphic_Impl();
+
+ if ( bIsLink )
+ **pActItem = SvxBrushItem( aBgdGraphicPath,
+ aBgdGraphicFilter,
+ eNewPos,
+ (*pActItem)->Which() );
+ else
+ **pActItem = SvxBrushItem( aBgdGraphic,
+ eNewPos,
+ (*pActItem)->Which() );
+ }
+ switch(nSelPos)
+ {
+ case TBL_DEST_CELL:
+ *pActItem = pTableBck_Impl->pCellBrush;
+ aLbSelect.Enable();
+ nWhich = pTableBck_Impl->nCellWhich;
+ break;
+ case TBL_DEST_ROW:
+ {
+ if((nHtmlMode & HTMLMODE_ON) && !(nHtmlMode & HTMLMODE_SOME_STYLES))
+ aLbSelect.Disable();
+ *pActItem = pTableBck_Impl->pRowBrush;
+ nWhich = pTableBck_Impl->nRowWhich;
+ }
+ break;
+ case TBL_DEST_TBL:
+ *pActItem = pTableBck_Impl->pTableBrush;
+ aLbSelect.Enable();
+ nWhich = pTableBck_Impl->nTableWhich;
+ break;
+ }
+ String aUserData = GetUserData();
+ if(!*pActItem)
+ *pActItem = new SvxBrushItem(nWhich);
+ FillControls_Impl(**pActItem, aUserData);
+ delete pActItem;
+ }
+ return 0;
+}
+
+//-----------------------------------------------------------------------
+
+IMPL_LINK( SvxBackgroundTabPage, ParaDestinationHdl_Impl, ListBox*, pBox )
+{
+ USHORT nSelPos = pBox->GetSelectEntryPos();
+ if( pParaBck_Impl && pParaBck_Impl->nActPos != nSelPos)
+ {
+ SvxBrushItem** pActItem = new (SvxBrushItem*);
+ switch(pParaBck_Impl->nActPos)
+ {
+ case PARA_DEST_PARA:
+ *pActItem = pParaBck_Impl->pParaBrush;
+ break;
+ case PARA_DEST_CHAR:
+ *pActItem = pParaBck_Impl->pCharBrush;
+ break;
+ }
+ pParaBck_Impl->nActPos = nSelPos;
+ if(0 == aLbSelect.GetSelectEntryPos()) // Brush ausgewaehlt
+ {
+ USHORT nWhich = (*pActItem)->Which();
+ **pActItem = SvxBrushItem( aBgdColor, nWhich );
+ }
+ else
+ {
+ SvxGraphicPosition eNewPos = GetGraphicPosition_Impl();
+ const BOOL bIsLink = aBtnLink.IsChecked();
+
+ if ( !bIsLink && !bIsGraphicValid )
+ bIsGraphicValid = LoadLinkedGraphic_Impl();
+
+ if ( bIsLink )
+ **pActItem = SvxBrushItem( aBgdGraphicPath,
+ aBgdGraphicFilter,
+ eNewPos,
+ (*pActItem)->Which() );
+ else
+ **pActItem = SvxBrushItem( aBgdGraphic,
+ eNewPos,
+ (*pActItem)->Which() );
+ }
+ switch(nSelPos)
+ {
+ case PARA_DEST_PARA:
+ *pActItem = pParaBck_Impl->pParaBrush;
+ aLbSelect.Enable();
+ break;
+ case PARA_DEST_CHAR:
+ {
+ *pActItem = pParaBck_Impl->pCharBrush;
+ aLbSelect.Enable(FALSE);
+ }
+ break;
+ }
+ String aUserData = GetUserData();
+ FillControls_Impl(**pActItem, aUserData);
+ delete pActItem;
+ }
+ return 0;
+}
+
+//-----------------------------------------------------------------------
+
+void SvxBackgroundTabPage::FillControls_Impl( const SvxBrushItem& rBgdAttr,
+ const String& rUserData )
+
+/* [Beschreibung]
+
+*/
+
+{
+ SvxGraphicPosition ePos = rBgdAttr.GetGraphicPos();
+ const Color& rColor = rBgdAttr.GetColor();
+ if(bColTransparency)
+ {
+ aColTransMF.SetValue(lcl_TransparencyToPercent(rColor.GetTransparency()));
+ aColTransMF.SaveValue();
+ BOOL bEnableTransp = rColor.GetTransparency() < 0xff;
+ aColTransFT.Enable(bEnableTransp);
+ aColTransMF.Enable(bEnableTransp);
+ //the default setting should be "no transparency"
+ if(!bEnableTransp)
+ aColTransMF.SetValue(0);
+ }
+
+ if ( GPOS_NONE == ePos || !aLbSelect.IsVisible() )
+ {
+ aLbSelect.SelectEntryPos( 0 );
+ ShowColorUI_Impl();
+ Color aTrColor( COL_TRANSPARENT );
+ aBgdColor = rColor;
+
+ USHORT nCol = ( aTrColor != aBgdColor ) ?
+ GetItemId_Impl( aBackgroundColorSet, aBgdColor ) : 0;
+
+ if( aTrColor != aBgdColor && nCol == 0)
+ {
+ aBackgroundColorSet.SetNoSelection();
+ }
+ else
+ {
+ aBackgroundColorSet.SelectItem( nCol );
+ }
+
+ pPreviewWin1->NotifyChange( aBgdColor );
+ if ( aLbSelect.IsVisible() ) // Grafikteil initialisieren
+ {
+ aBgdGraphicFilter.Erase();
+ aBgdGraphicPath.Erase();
+
+ if ( !rUserData.Len() )
+ aBtnPreview.Check( FALSE );
+ aBtnLink.Check( FALSE );
+ aBtnLink.Disable();
+ pPreviewWin2->NotifyChange( NULL );
+ SetGraphicPosition_Impl( GPOS_TILED ); // Kacheln als Default
+ }
+ }
+ else
+ {
+ const String* pStrLink = rBgdAttr.GetGraphicLink();
+ const String* pStrFilter = rBgdAttr.GetGraphicFilter();
+
+ aLbSelect.SelectEntryPos( 1 );
+ ShowBitmapUI_Impl();
+
+ if ( pStrLink )
+ {
+#ifdef DBG_UTIL
+ INetURLObject aObj( *pStrLink );
+ DBG_ASSERT( aObj.GetProtocol() != INET_PROT_NOT_VALID, "Invalid URL!" );
+#endif
+ aBgdGraphicPath = *pStrLink;
+ aBtnLink.Check( TRUE );
+ aBtnLink.Enable();
+ }
+ else
+ {
+ aBgdGraphicPath.Erase();
+ aBtnLink.Check( FALSE );
+ aBtnLink.Disable();
+ }
+
+ if(bGraphTransparency)
+ {
+ const GraphicObject* pObject = rBgdAttr.GetGraphicObject(SfxObjectShell::Current());
+ if(pObject)
+ aGraphTransMF.SetValue(lcl_TransparencyToPercent(pObject->GetAttr().GetTransparency()));
+ else
+ aGraphTransMF.SetValue(0);
+ aGraphTransMF.SaveValue();
+ }
+
+ FileClickHdl_Impl( &aBtnLink );
+
+ if ( pStrFilter )
+ aBgdGraphicFilter = *pStrFilter;
+ else
+ aBgdGraphicFilter.Erase();
+
+ if ( !pStrLink || aBtnPreview.IsChecked() )
+ {
+ // Grafik ist im Item vorhanden und muss nicht
+ // geladen werden:
+
+ const Graphic* pGraphic =
+ rBgdAttr.GetGraphic( SfxObjectShell::Current() );
+
+ if ( !pGraphic && aBtnPreview.IsChecked() )
+ bIsGraphicValid = LoadLinkedGraphic_Impl();
+ else if ( pGraphic )
+ {
+ aBgdGraphic = *pGraphic;
+ bIsGraphicValid = TRUE;
+
+ if ( !rUserData.Len() )
+ aBtnPreview.Check();
+ }
+ else
+ {
+ RaiseLoadError_Impl();
+ bIsGraphicValid = FALSE;
+
+ if ( !rUserData.Len() )
+ aBtnPreview.Check( FALSE );
+ }
+ }
+
+ if ( aBtnPreview.IsChecked() && bIsGraphicValid )
+ {
+ Bitmap aBmp = aBgdGraphic.GetBitmap();
+ pPreviewWin2->NotifyChange( &aBmp );
+ }
+ else
+ pPreviewWin2->NotifyChange( NULL );
+
+ SetGraphicPosition_Impl( ePos );
+ }
+}
+/* -----------------------------09.08.2002 14:04------------------------------
+
+ ---------------------------------------------------------------------------*/
+void SvxBackgroundTabPage::EnableTransparency(BOOL bColor, BOOL bGraphic)
+{
+ bColTransparency = bColor;
+ bGraphTransparency = bGraphic;
+ if(bColor)
+ {
+ aColTransFT.Show();
+ aColTransMF.Show();
+ }
+ if(bGraphic)
+ {
+ Size aRectSize(aWndPosition.GetSizePixel());
+ Point aRectPos(aWndPosition.GetPosPixel());
+ Point aFLPos(aGraphTransFL.GetPosPixel());
+ Size aTmp(LogicToPixel(Size(RSC_SP_FLGR_SPACE_Y, RSC_SP_FLGR_SPACE_Y), MAP_APPFONT));
+ long nRectHeight = aFLPos.Y() - aRectPos.Y() - aTmp.Height();
+ aRectSize.Height() = nRectHeight;
+ aWndPosition.SetSizePixel(aRectSize);
+ aWndPosition.Invalidate();
+ }
+}
+
+void SvxBackgroundTabPage::PageCreated (SfxAllItemSet aSet) //add CHINA001
+{
+ SFX_ITEMSET_ARG (&aSet,pFlagItem,SfxUInt32Item,SID_FLAG_TYPE,sal_False);
+ if (pFlagItem)
+ {
+ UINT32 nFlags=pFlagItem->GetValue();
+ if ( ( nFlags & SVX_SHOW_TBLCTL ) == SVX_SHOW_TBLCTL )
+ ShowTblControl();
+ if ( ( nFlags & SVX_SHOW_PARACTL ) == SVX_SHOW_PARACTL )
+ ShowParaControl();
+ if ( ( nFlags & SVX_SHOW_SELECTOR ) == SVX_SHOW_SELECTOR )
+ ShowSelector();
+ if ( ( nFlags & SVX_ENABLE_TRANSPARENCY ) == SVX_ENABLE_TRANSPARENCY )
+ EnableTransparency(TRUE, TRUE);
+ }
+}