diff options
author | Release Engineers <releng@openoffice.org> | 2009-05-06 10:59:57 +0000 |
---|---|---|
committer | Release Engineers <releng@openoffice.org> | 2009-05-06 10:59:57 +0000 |
commit | 44b515b9a328f92bec405a22151650393144c19a (patch) | |
tree | f26ac111c0674d5c7ea974c0021d52afe960e7b9 /svx/source/cui/tpbitmap.cxx | |
parent | 59cc4ba03370d45a14d0f706e6970cbe0c3ac26a (diff) |
CWS-TOOLING: integrate CWS mba32issues01
2009-05-05 18:23:27 +0200 mba r271547 : apply diffs from m45->m47 for all files moved from dialog to cui
2009-05-05 18:22:02 +0200 mba r271545 : apply diffs from m45->m47 for all files moved from dialog to cui
2009-05-05 18:16:42 +0200 mba r271544 : apply diffs from m45->m47 for all files moved from dialog to cui
2009-04-29 19:35:58 +0200 mba r271392 : #i73672#: unify commands for inserting special characters
2009-04-29 18:01:27 +0200 mba r271391 : #i101337#: missing string resources
2009-04-29 18:01:10 +0200 mba r271390 : #i101337#: missing string resources
2009-04-29 15:42:47 +0200 mba r271380 : concurrency problem in multithreaded dmake due to missing dependency
2009-04-28 17:36:03 +0200 tbo r271336 : #i99432#
2009-04-28 13:57:52 +0200 mba r271322 : #i101302#: ctor might be called with pSet=0
2009-04-22 19:32:39 +0200 tbo r271138 : #i99432#
2009-04-09 14:46:03 +0200 mba r270709 : make sendreportw32.cxx compile with pch
2009-04-06 16:05:07 +0200 mba r270568 : #i99432#: some tweaks for build order
2009-04-06 15:38:52 +0200 mba r270558 : typo
2009-04-06 13:36:19 +0200 mba r270542 : #i99432#: split of localization also
2009-04-06 13:19:06 +0200 mba r270539 : #i99432#: split up srs files also
2009-04-03 17:57:59 +0200 mba r270513 : #i99432#: split dialog folder into two
2009-04-03 17:56:46 +0200 mba r270512 : #i99432#: split dialog folder into two
2009-04-01 22:15:00 +0200 mba r270364 : warnings on Linux
2009-04-01 22:10:44 +0200 mba r270363 : warnings on Linux
2009-04-01 21:43:54 +0200 mba r270362 : warning fixed
2009-04-01 21:41:27 +0200 mba r270361 : warning on Linux fixed
2009-04-01 21:35:44 +0200 mba r270360 : warning fixed
2009-04-01 20:19:59 +0200 mba r270358 : warning found on Linux fixed
2009-04-01 19:23:38 +0200 mba r270354 : warning due to missing eof
2009-04-01 18:56:25 +0200 mba r270352 : linking problem fixed that appeared only on mac
2009-04-01 18:41:30 +0200 mba r270350 : warnings discovered on Linux fixed
2009-04-01 18:34:28 +0200 mba r270349 : some fixes for warnings and include problems discoverd after resync and build on mac
2009-04-01 14:08:22 +0200 mba r270328 : CWS-TOOLING: rebase CWS mba32issues01 to trunk@270033 (milestone: DEV300:m45)
2009-03-04 18:13:35 +0100 mba r268858 : #i99432#: more dialogs moved to cui
2009-03-04 17:47:41 +0100 mba r268854 : #i99432#: more dialogs moved to cui
2009-03-04 17:32:39 +0100 mba r268851 : warning fixed
2009-03-04 12:59:26 +0100 mba r268814 : #i99432#: more dialogs moved to cui
2009-03-04 11:49:03 +0100 mba r268802 : #i99432#: CharmapDialog moved to cui
2009-03-04 10:46:00 +0100 mba r268795 : #i99432#: CharmapDialog moved to cui
2009-03-04 10:43:50 +0100 mba r268794 : #i99432#: CharmapDialog moved to cui
2009-03-04 10:00:29 +0100 mba r268792 : #i99432#: CharmapDialog moved to cui
2009-03-04 10:00:03 +0100 mba r268791 : #i99432#: CharmapDialog moved to cui
2009-03-04 09:59:43 +0100 mba r268790 : #i99432#: CharmapDialog moved to cui
2009-03-04 09:58:51 +0100 mba r268789 : #i99432#: CharmapDialog moved to cui
2009-03-04 09:58:16 +0100 mba r268788 : #i99432#: CharmapDialog moved to cui
2009-03-03 16:33:14 +0100 mba r268763 : #i99465#: new SfxAbstractDialog interface and creation methods
2009-03-03 16:32:28 +0100 mba r268762 : #i99432#: some tabpages moved to cui
2009-03-03 16:32:09 +0100 mba r268761 : #i99432#: some tabpages moved to cui
2009-03-03 16:29:40 +0100 mba r268760 : #i99465#: new SfxAbstractDialog interface and creation methods
2009-03-03 16:29:08 +0100 mba r268759 : #i99432#: MacroAssignment page moved to cui
2009-03-03 16:28:41 +0100 mba r268758 : #i99432#: MacroAssignment page moved to cui
2009-03-03 16:28:18 +0100 mba r268757 : #i99465#: new SfxAbstractDialog interface and creation methods
2009-03-03 16:27:36 +0100 mba r268756 : #i99465#: replace FN_SYMBOL by SID_CHARMAP
2009-03-03 16:27:02 +0100 mba r268755 : #i99465#: new SfxAbstractDialog interface and creation methods
2009-03-03 16:26:23 +0100 mba r268754 : #i99465#: new SfxAbstractDialog interface and creation methods
2009-03-03 16:25:30 +0100 mba r268753 : #i99465#: new SfxAbstractDialog interface and creation methods
2009-03-03 16:24:49 +0100 mba r268752 : #i99465#: new SfxAbstractDialog interface and creation methods
2009-03-03 16:24:35 +0100 mba r268751 : #i99432#: MacroAssignment page moved to cui
2009-03-03 16:23:20 +0100 mba r268750 : #i99465#: new SfxAbstractDialog interface and creation methods
2009-03-03 16:23:04 +0100 mba r268749 : #i99432#: MacroAssignment page moved to cui
2009-03-03 16:21:56 +0100 mba r268748 : #i99465#: new SfxAbstractDialog interface and creation methods
2009-03-03 16:18:39 +0100 mba r268747 : #i99432#: MacroAssignment page moved to cui
2009-03-03 16:13:14 +0100 mba r268745 : #i99465#: replace FN_SYMBOL by SID_CHARMAP
2009-03-03 16:02:54 +0100 mba r268738 : #i99432#: moved MacroAssignment TabPage from sfx2
2009-03-03 14:57:58 +0100 mba r268729 : #i99465#: transport return value via ItemSet
2009-03-03 00:08:10 +0100 mba r268701 : #i99432#: move acccfg to cuilib
2009-03-03 00:07:32 +0100 mba r268700 : #i99432#: move acccfg to cuilib
2009-03-03 00:02:01 +0100 mba r268699 : #i99432#: move acccfg to cuilib
2009-03-03 00:01:38 +0100 mba r268698 : #i99432#: move acccfg to cuilib
2009-03-03 00:01:11 +0100 mba r268697 : #i99432#: move acccfg to cuilib
2009-03-03 00:00:40 +0100 mba r268696 : #i99432#: move acccfg to cuilib
2009-03-03 00:00:06 +0100 mba r268695 : #i99432#: replace SfxAbstractSingleTabDialog by SfxAbstractDialog
2009-03-02 23:59:22 +0100 mba r268694 : #i99432#: move acccfg to cuilib
2009-03-02 23:57:19 +0100 mba r268693 : #i99432#: move acccfg to svx
2009-03-02 23:56:14 +0100 mba r268692 : #i99432#: replace SfxAbstractSingleTabDialog by SfxAbstractDialog
2009-03-02 23:49:37 +0100 mba r268691 : #i99785#: consolidate dialogs library
2009-03-02 17:26:40 +0100 mba r268683 : #i99785#: consolidate dialogs library
2009-03-02 17:24:28 +0100 mba r268682 : i99465#: consolidate slot for InsertSymbol command
2009-03-02 17:22:29 +0100 mba r268681 : #i99785#: consolidate dialogs library
2009-03-02 17:18:11 +0100 mba r268680 : i99432#: move accelconfig and macroassignment to cui
2009-03-02 17:08:30 +0100 mba r268679 : #i99785#: consolidate dialogs library
2009-03-02 17:06:57 +0100 mba r268678 : #i99785#: consolidate dialogs library
2009-03-02 17:06:30 +0100 mba r268677 : #i99785#: consolidate dialogs library
2009-03-02 17:05:02 +0100 mba r268676 : #i99785#: consolidate dialogs library
2009-03-02 17:04:35 +0100 mba r268675 : #i99785#: consolidate dialogs library
2009-03-02 16:47:53 +0100 mba r268673 : i99432#: move accelconfig and macroassignment to cui
2009-03-02 16:45:17 +0100 mba r268671 : i99432#: move accelconfig and macroassignment to cui
2009-03-02 16:39:59 +0100 mba r268670 : i99432#: move accelconfig and macroassignment to cui
2009-03-02 16:38:59 +0100 mba r268668 : i99432#: move accelconfig and macroassignment to cui
2009-03-02 16:38:28 +0100 mba r268667 : i99432#: move accelconfig and macroassignment to cui
2009-03-02 16:36:06 +0100 mba r268666 : i99432#: move accelconfig and macroassignment to cui
2009-03-02 16:29:50 +0100 mba r268663 : i99432#: move accelconfig and macroassignment to cui
2009-03-02 16:24:00 +0100 mba r268659 : i99432#: move accelconfig and macroassignment to cui
2009-03-02 16:23:31 +0100 mba r268658 : i99432#: move accelconfig and macroassignment to cui
2009-03-02 16:22:41 +0100 mba r268657 : i99432#: move accelconfig and macroassignment to cui
2009-02-25 16:57:26 +0100 mba r268453 : obsolete
2009-02-17 10:50:51 +0100 mba r267846 : obsolete
2009-02-12 16:33:54 +0100 mba r267676 : #i96834#: warning fixed
2009-02-11 19:28:47 +0100 mba r267626 : #i91978#: unused code
2009-02-11 18:37:47 +0100 mba r267625 : metafile output, fixes for 3 layer office
2009-02-11 12:56:28 +0100 mba r267593 : selective trees; incomplete build lists; metafile output
Diffstat (limited to 'svx/source/cui/tpbitmap.cxx')
-rw-r--r-- | svx/source/cui/tpbitmap.cxx | 1179 |
1 files changed, 1179 insertions, 0 deletions
diff --git a/svx/source/cui/tpbitmap.cxx b/svx/source/cui/tpbitmap.cxx new file mode 100644 index 0000000000..febfa18e90 --- /dev/null +++ b/svx/source/cui/tpbitmap.cxx @@ -0,0 +1,1179 @@ +/************************************************************************* + * + * 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: tpbitmap.cxx,v $ + * $Revision: 1.31 $ + * + * 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_svx.hxx" + +#ifdef SVX_DLLIMPLEMENTATION +#undef SVX_DLLIMPLEMENTATION +#endif + +// include --------------------------------------------------------------- + +//svdraw.hxx +#define _SVDRAW_HXX +#define _SDR_NOITEMS +#define _SDR_NOTOUCH +#define _SDR_NOTRANSFORM +#define _SDR_NOOBJECTS +#define _SDR_NOVIEWS +#define _SDR_NOVIEWMARKER +#define _SDR_NODRAGMETHODS +#define _SDR_NOUNDO +#define _SDR_NOXOUTDEV +#include <vcl/wrkwin.hxx> +#include <tools/shl.hxx> +#include <vcl/msgbox.hxx> +#include <tools/urlobj.hxx> +#ifndef _UNOTOOLS_UCBSTREAMHELPER_HXX +#include <unotools/ucbstreamhelper.hxx> +#endif +#include <svtools/pathoptions.hxx> +#include <sfx2/app.hxx> +#include <sfx2/filedlghelper.hxx> +#include <unotools/localfilehelper.hxx> +#include "com/sun/star/ui/dialogs/TemplateDescription.hpp" +#include <vcl/bmpacc.hxx> + +#define _SVX_TPBITMAP_CXX + + + +#include <svx/dialogs.hrc> + +#include "helpid.hrc" +#include "xattr.hxx" +#include <svx/xpool.hxx> +#include <svx/xtable.hxx> +#include "xoutbmp.hxx" +#include "drawitem.hxx" +#include "cuitabarea.hxx" +#include "tabarea.hrc" +#include "defdlgname.hxx" //CHINA001 #include "dlgname.hxx" +#include "dlgname.hrc" +#include <svx/svxdlg.hxx> //CHINA001 +#include <svx/dialmgr.hxx> +#include "opengrf.hxx" + +#define DLGWIN this->GetParent()->GetParent() + +/************************************************************************* +|* +|* Dialog zum Aendern und Definieren der Bitmaps +|* +\************************************************************************/ + +SvxBitmapTabPage::SvxBitmapTabPage +( + Window* pParent, + const SfxItemSet& rInAttrs +) : + + SvxTabPage ( pParent, SVX_RES( RID_SVXPAGE_BITMAP ), rInAttrs ), + + aCtlPixel ( this, SVX_RES( CTL_PIXEL ) ), + aFtPixelEdit ( this, SVX_RES( FT_PIXEL_EDIT ) ), + aFtColor ( this, SVX_RES( FT_COLOR ) ), + aLbColor ( this, SVX_RES( LB_COLOR ) ), + aFtBackgroundColor ( this, SVX_RES( FT_BACKGROUND_COLOR ) ), + aLbBackgroundColor ( this, SVX_RES( LB_BACKGROUND_COLOR ) ), + // This fix text is used only to provide the name for the following + // bitmap list box. The fixed text is not displayed. + aLbBitmapsHidden ( this, SVX_RES( FT_BITMAPS_HIDDEN ) ), + aLbBitmaps ( this, SVX_RES( LB_BITMAPS ) ), + aFlProp ( this, SVX_RES( FL_PROP ) ), + aCtlPreview ( this, SVX_RES( CTL_PREVIEW ) ), + aBtnAdd ( this, SVX_RES( BTN_ADD ) ), + aBtnModify ( this, SVX_RES( BTN_MODIFY ) ), + aBtnImport ( this, SVX_RES( BTN_IMPORT ) ), + aBtnDelete ( this, SVX_RES( BTN_DELETE ) ), + aBtnLoad ( this, SVX_RES( BTN_LOAD ) ), + aBtnSave ( this, SVX_RES( BTN_SAVE ) ), + + aBitmapCtl ( this, aCtlPreview.GetSizePixel() ), + rOutAttrs ( rInAttrs ), + + pColorTab( NULL ), + pBitmapList( NULL ), + + pXPool ( (XOutdevItemPool*) rInAttrs.GetPool() ), + aXFStyleItem ( XFILL_BITMAP ), + aXBitmapItem ( String(), XOBitmap() ), + aXFillAttr ( pXPool ), + rXFSet ( aXFillAttr.GetItemSet() ) +{ + aBtnLoad.SetModeImage( Image( SVX_RES( RID_SVXIMG_LOAD_H ) ), BMP_COLOR_HIGHCONTRAST ); + aBtnSave.SetModeImage( Image( SVX_RES( RID_SVXIMG_SAVE_H ) ), BMP_COLOR_HIGHCONTRAST ); + FreeResource(); + + // diese Page braucht ExchangeSupport + SetExchangeSupport(); + + // Setzen des Output-Devices + rXFSet.Put( aXFStyleItem ); + rXFSet.Put( aXBitmapItem ); + //aCtlPreview.SetAttributes( aXFillAttr ); + + aBtnAdd.SetClickHdl( LINK( this, SvxBitmapTabPage, ClickAddHdl_Impl ) ); + aBtnImport.SetClickHdl( + LINK( this, SvxBitmapTabPage, ClickImportHdl_Impl ) ); + aBtnModify.SetClickHdl( + LINK( this, SvxBitmapTabPage, ClickModifyHdl_Impl ) ); + aBtnDelete.SetClickHdl( + LINK( this, SvxBitmapTabPage, ClickDeleteHdl_Impl ) ); + aBtnLoad.SetClickHdl( LINK( this, SvxBitmapTabPage, ClickLoadHdl_Impl ) ); + aBtnSave.SetClickHdl( LINK( this, SvxBitmapTabPage, ClickSaveHdl_Impl ) ); + + aLbBitmaps.SetSelectHdl( + LINK( this, SvxBitmapTabPage, ChangeBitmapHdl_Impl ) ); + aLbColor.SetSelectHdl( + LINK( this, SvxBitmapTabPage, ChangePixelColorHdl_Impl ) ); + aLbBackgroundColor.SetSelectHdl( + LINK( this, SvxBitmapTabPage, ChangeBackgrndColorHdl_Impl ) ); + +} + +// ----------------------------------------------------------------------- + +void SvxBitmapTabPage::Construct() +{ + // Farbtabellen + aLbColor.Fill( pColorTab ); + aLbBackgroundColor.CopyEntries( aLbColor ); + + // Bitmaptabelle + aLbBitmaps.Fill( pBitmapList ); +} + +// ----------------------------------------------------------------------- + +void SvxBitmapTabPage::ActivatePage( const SfxItemSet& ) +{ + USHORT nPos; + USHORT nCount; + + if( *pDlgType == 0 ) // Flaechen-Dialog + { + *pbAreaTP = FALSE; + + if( pColorTab ) + { + // ColorTable + if( *pnColorTableState & CT_CHANGED || + *pnColorTableState & CT_MODIFIED ) + { + if( *pnColorTableState & CT_CHANGED ) + pColorTab = ( (SvxAreaTabDialog*) DLGWIN )->GetNewColorTable(); + + // LbColor + nPos = aLbColor.GetSelectEntryPos(); + aLbColor.Clear(); + aLbColor.Fill( pColorTab ); + nCount = aLbColor.GetEntryCount(); + if( nCount == 0 ) + ; // Dieser Fall sollte nicht auftreten + else if( nCount <= nPos ) + aLbColor.SelectEntryPos( 0 ); + else + aLbColor.SelectEntryPos( nPos ); + + // LbColorBackground + nPos = aLbBackgroundColor.GetSelectEntryPos(); + aLbBackgroundColor.Clear(); + aLbBackgroundColor.CopyEntries( aLbColor ); + nCount = aLbBackgroundColor.GetEntryCount(); + if( nCount == 0 ) + ; // Dieser Fall sollte nicht auftreten + else if( nCount <= nPos ) + aLbBackgroundColor.SelectEntryPos( 0 ); + else + aLbBackgroundColor.SelectEntryPos( nPos ); + + ChangePixelColorHdl_Impl( this ); + ChangeBackgrndColorHdl_Impl( this ); + } + + // Ermitteln (evtl. abschneiden) des Namens und in + // der GroupBox darstellen + String aString( SVX_RES( RID_SVXSTR_TABLE ) ); aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) ); + INetURLObject aURL( pBitmapList->GetPath() ); + + aURL.Append( pBitmapList->GetName() ); + DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" ); + + if( aURL.getBase().getLength() > 18 ) + { + aString += String(aURL.getBase()).Copy( 0, 15 ); + aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) ); + } + else + aString += String(aURL.getBase()); + + if( *pPageType == PT_BITMAP && *pPos != LISTBOX_ENTRY_NOTFOUND ) + { + aLbBitmaps.SelectEntryPos( *pPos ); + } + // Farben koennten geloescht worden sein + ChangeBitmapHdl_Impl( this ); + + *pPageType = PT_BITMAP; + *pPos = LISTBOX_ENTRY_NOTFOUND; + } + } +} + +// ----------------------------------------------------------------------- + +int SvxBitmapTabPage::DeactivatePage( SfxItemSet* _pSet) +{ + if ( CheckChanges_Impl() == -1L ) + return KEEP_PAGE; + + if( _pSet ) + FillItemSet( *_pSet ); + + return LEAVE_PAGE; +} + +// ----------------------------------------------------------------------- + +BOOL SvxBitmapTabPage::FillItemSet( SfxItemSet& _rOutAttrs ) +{ + if( *pDlgType == 0 && *pbAreaTP == FALSE ) // Flaechen-Dialog + { + if( *pPageType == PT_BITMAP ) + { + // CheckChanges_Impl(); <-- doppelte Abfrage ? + + XOBitmap aXOBitmap; + String aString; + USHORT nPos = aLbBitmaps.GetSelectEntryPos(); + if( nPos != LISTBOX_ENTRY_NOTFOUND ) + { + aXOBitmap = pBitmapList->GetBitmap( nPos )->GetXBitmap(); + aString = aLbBitmaps.GetSelectEntry(); + + } + else + { + aXOBitmap = aBitmapCtl.GetXBitmap(); + + // #85339# if it's an array, force conversion to bitmap before using it. + if(aXOBitmap.GetBitmapType() == XBITMAP_8X8) + aXOBitmap.GetBitmap(); + + } + _rOutAttrs.Put( XFillStyleItem( XFILL_BITMAP ) ); + _rOutAttrs.Put( XFillBitmapItem( aString, aXOBitmap ) ); + } + } + return TRUE; +} + +// ----------------------------------------------------------------------- + +void SvxBitmapTabPage::Reset( const SfxItemSet& ) +{ + // aLbBitmaps.SelectEntryPos( 0 ); + + aBitmapCtl.SetLines( aCtlPixel.GetLineCount() ); + aBitmapCtl.SetPixelColor( aLbColor.GetSelectEntryColor() ); + aBitmapCtl.SetBackgroundColor( aLbBackgroundColor.GetSelectEntryColor() ); + aBitmapCtl.SetBmpArray( aCtlPixel.GetBitmapPixelPtr() ); + + // Bitmap holen und darstellen + XFillBitmapItem aBmpItem( (const String &) String(), aBitmapCtl.GetXBitmap() ); + rXFSet.Put( aBmpItem ); + aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() ); + aCtlPreview.Invalidate(); + + ChangeBitmapHdl_Impl( this ); + + // Status der Buttons ermitteln + if( pBitmapList->Count() ) + { + aBtnAdd.Enable(); + aBtnModify.Enable(); + aBtnDelete.Enable(); + aBtnSave.Enable(); + } + else + { + aBtnModify.Disable(); + aBtnDelete.Disable(); + aBtnSave.Disable(); + } +} + +// ----------------------------------------------------------------------- + +SfxTabPage* SvxBitmapTabPage::Create( Window* pWindow, + const SfxItemSet& rSet ) +{ + return new SvxBitmapTabPage( pWindow, rSet ); +} + +//------------------------------------------------------------------------ + +IMPL_LINK( SvxBitmapTabPage, ChangeBitmapHdl_Impl, void *, EMPTYARG ) +{ + XOBitmap* pXOBitmap = NULL; + int nPos = aLbBitmaps.GetSelectEntryPos(); + + if( nPos != LISTBOX_ENTRY_NOTFOUND ) + pXOBitmap = new XOBitmap( ( (XBitmapEntry*) pBitmapList->GetBitmap( nPos ) )->GetXBitmap() ); + else + { + const SfxPoolItem* pPoolItem = NULL; + if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLSTYLE ), TRUE, &pPoolItem ) ) + { + XFillStyle eXFS = (XFillStyle) ( ( const XFillStyleItem* ) pPoolItem )->GetValue(); + if( ( XFILL_BITMAP == eXFS ) && + ( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLBITMAP ), TRUE, &pPoolItem ) ) ) + { + pXOBitmap = new XOBitmap( ( ( const XFillBitmapItem* ) pPoolItem )->GetBitmapValue() ); + } + } + if( !pXOBitmap ) + { + aLbBitmaps.SelectEntryPos( 0 ); + nPos = aLbBitmaps.GetSelectEntryPos(); + if( nPos != LISTBOX_ENTRY_NOTFOUND ) + pXOBitmap = new XOBitmap( ( (XBitmapEntry*) pBitmapList->GetBitmap( nPos ) )->GetXBitmap() ); + } + } + if( pXOBitmap ) + { + //WorkWindow aTmpWW( DLGWIN ); + //VirtualDevice aVD( aTmpWW ); + //USHORT nLines = aCtlPixel.GetLineCount(); + //Color aPixelColor, aBackColor; + //BOOL bPixelColor = FALSE; + //USHORT nWidth = pBitmap->GetSizePixel().Width(); + //USHORT nHeight = pBitmap->GetSizePixel().Height(); + + // #85339# try to convert bitmapped item to array item. + if(pXOBitmap->GetBitmapType() == XBITMAP_IMPORT) + { + Bitmap aBitmap(pXOBitmap->GetBitmap()); + Size aSizePixel(aBitmap.GetSizePixel()); + + if(8 == aSizePixel.Width() && 8 == aSizePixel.Height()) + { + sal_uInt16* pPixelArray = new sal_uInt16[64]; + sal_uInt32 nCol1(0xffffffff); // background + sal_uInt32 nCol2(0xffffffff); // pixel + BitmapReadAccess* pAccess = aBitmap.AcquireReadAccess(); + sal_Bool bValid(TRUE); + + if(pAccess) + { + for(sal_uInt32 a(0); bValid && a < 64; a++) + { + const BitmapColor aBmCol = pAccess->GetColor(a>>3, a%8); + Color aRgbCol(aBmCol.GetRed(), aBmCol.GetGreen(), aBmCol.GetBlue()); + sal_uInt32 nColVal = aRgbCol.GetRGBColor(); + + // test with nCol1 + if(nCol1 != nColVal) + { + if(0xffffffff == nCol1) + { + // nCol1 is used first time + nCol1 = nColVal; + pPixelArray[a] = 0; + } + else + { + // test with nCol2 + if(nCol2 != nColVal) + { + if(0xffffffff == nCol2) + { + // nCol2 used first time + nCol2 = nColVal; + pPixelArray[a] = 1; + } + else + { + // Third color detected + bValid = FALSE; + } + } + else + { + // color is pixel color + pPixelArray[a] = 1; + } + } + } + else + { + // color is background color + pPixelArray[a] = 0; + } + } + + // release ReadAccess + aBitmap.ReleaseAccess(pAccess); + } + else + { + // no access -> no success + bValid = FALSE; + } + + if(bValid) + { + Color aCol1(nCol1); + Color aCol2(nCol2); + + // no pixel color found? Use opposite od background color. + if(0xffffffff == nCol2) + { + aCol2 = Color( + 0xff - aCol1.GetRed(), + 0xff - aCol1.GetGreen(), + 0xff - aCol1.GetBlue()); + } + + // transformation did work, create a new Item + delete pXOBitmap; + pXOBitmap = new XOBitmap(pPixelArray, aCol2, aCol1); + } + + // cleanup + delete[] pPixelArray; + } + } + + aLbColor.SetNoSelection(); + aLbBackgroundColor.SetNoSelection(); + + if( pXOBitmap->GetBitmapType() == XBITMAP_IMPORT ) + { + aCtlPixel.Reset(); + aCtlPixel.SetPaintable( FALSE ); + aCtlPixel.Disable(); + aFtPixelEdit.Disable(); + aFtColor.Disable(); + aLbColor.Disable(); + aFtBackgroundColor.Disable(); + aLbBackgroundColor.Disable(); + aBtnModify.Disable(); + aBtnAdd.Disable(); + } + else if( pXOBitmap->GetBitmapType() == XBITMAP_8X8 ) + { + aCtlPixel.SetPaintable( TRUE ); + aCtlPixel.Enable(); + aFtPixelEdit.Enable(); + aFtColor.Enable(); + aLbColor.Enable(); + aFtBackgroundColor.Enable(); + aLbBackgroundColor.Enable(); + aBtnModify.Enable(); + aBtnAdd.Enable(); + + // Setzen des PixelControls + aCtlPixel.SetXBitmap( *pXOBitmap ); + + Color aPixelColor = pXOBitmap->GetPixelColor(); + Color aBackColor = pXOBitmap->GetBackgroundColor(); + + aBitmapCtl.SetPixelColor( aPixelColor ); + aBitmapCtl.SetBackgroundColor( aBackColor ); + + // Wenn der Eintrag nicht in der Listbox ist, wird die Farbe + // temporaer hinzugenommen + if( 0 == aLbBitmaps.GetSelectEntryPos() ) + { + aLbColor.SelectEntry( Color( COL_BLACK ) ); + ChangePixelColorHdl_Impl( this ); + } + else + aLbColor.SelectEntry( aPixelColor ); + if( aLbColor.GetSelectEntryCount() == 0 ) + { + aLbColor.InsertEntry( aPixelColor, String() ); + aLbColor.SelectEntry( aPixelColor ); + } + aLbBackgroundColor.SelectEntry( aBackColor ); + if( aLbBackgroundColor.GetSelectEntryCount() == 0 ) + { + aLbBackgroundColor.InsertEntry( aBackColor, String() ); + aLbBackgroundColor.SelectEntry( aBackColor ); + } + } + aCtlPixel.Invalidate(); + + // Bitmap darstellen + XFillBitmapItem aXBmpItem( (const String &) String(), *pXOBitmap ); + rXFSet.Put( aXBmpItem ); + + aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() ); + aCtlPreview.Invalidate(); + + bBmpChanged = FALSE; + delete pXOBitmap; + } + return 0L; +} + +// ----------------------------------------------------------------------- + +long SvxBitmapTabPage::CheckChanges_Impl() +{ + USHORT nPos = aLbBitmaps.GetSelectEntryPos(); + if( nPos != LISTBOX_ENTRY_NOTFOUND ) + { + String aString = aLbBitmaps.GetSelectEntry(); + + if( bBmpChanged ) + { + ResMgr& rMgr = DIALOG_MGR(); + Image aWarningBoxImage = WarningBox::GetStandardImage(); + //CHINA001 SvxMessDialog aMessDlg( DLGWIN, + //CHINA001 String( SVX_RES( RID_SVXSTR_BITMAP, rMgr ) ), + //CHINA001 String( SVX_RES( RID_SVXSTR_ASK_CHANGE_BITMAP, rMgr ) ), + //CHINA001 &aWarningBoxImage ); + SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); + DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001 + AbstractSvxMessDialog* aMessDlg = pFact->CreateSvxMessDialog( DLGWIN, RID_SVXDLG_MESSBOX, + String( ResId( RID_SVXSTR_BITMAP, rMgr ) ), + String( ResId( RID_SVXSTR_ASK_CHANGE_BITMAP, rMgr ) ), + &aWarningBoxImage ); + DBG_ASSERT(aMessDlg, "Dialogdiet fail!");//CHINA001 + aMessDlg->SetButtonText( MESS_BTN_1, //CHINA001 aMessDlg.SetButtonText( MESS_BTN_1, + String( ResId( RID_SVXSTR_CHANGE, rMgr ) ) ); + aMessDlg->SetButtonText( MESS_BTN_2, //CHINA001 aMessDlg.SetButtonText( MESS_BTN_2, + String( ResId( RID_SVXSTR_ADD, rMgr ) ) ); + + short nRet = aMessDlg->Execute(); //CHINA001 short nRet = aMessDlg.Execute(); + + switch( nRet ) + { + case RET_BTN_1: // Aendern + { + ClickModifyHdl_Impl( this ); + } + break; + + case RET_BTN_2: // Hinzufuegen + { + ClickAddHdl_Impl( this ); + nPos = aLbBitmaps.GetSelectEntryPos(); + } + break; + + case RET_CANCEL: + // return( -1L ); + break; + // return( TRUE ); // Abbruch + } + delete aMessDlg; //add by CHINA001 + } + } + nPos = aLbBitmaps.GetSelectEntryPos(); + if( nPos != LISTBOX_ENTRY_NOTFOUND ) + *pPos = nPos; + return 0L; +} + +//------------------------------------------------------------------------ + +IMPL_LINK( SvxBitmapTabPage, ClickAddHdl_Impl, void *, EMPTYARG ) +{ + ResMgr& rMgr = DIALOG_MGR(); + String aNewName( ResId( RID_SVXSTR_BITMAP, rMgr ) ); + String aDesc( ResId( RID_SVXSTR_DESC_NEW_BITMAP, rMgr ) ); + String aName; + + long nCount = pBitmapList->Count(); + long j = 1; + BOOL bDifferent = FALSE; + + while( !bDifferent ) + { + aName = aNewName; + aName += sal_Unicode(' '); + aName += UniString::CreateFromInt32( j++ ); + bDifferent = TRUE; + + for( long i = 0; i < nCount && bDifferent; i++ ) + if( aName == pBitmapList->GetBitmap( i )->GetName() ) + bDifferent = FALSE; + } + + //CHINA001 SvxNameDialog* pDlg = new SvxNameDialog( DLGWIN, aName, aDesc ); + SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); + DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001 + AbstractSvxNameDialog* pDlg = pFact->CreateSvxNameDialog( DLGWIN, aName, aDesc, RID_SVXDLG_NAME ); + DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001 + WarningBox* pWarnBox = NULL; + USHORT nError = RID_SVXSTR_WARN_NAME_DUPLICATE; + + while( pDlg->Execute() == RET_OK ) + { + pDlg->GetName( aName ); + + bDifferent = TRUE; + + for( long i = 0; i < nCount && bDifferent; i++ ) + if( aName == pBitmapList->GetBitmap( i )->GetName() ) + bDifferent = FALSE; + + if( bDifferent ) { + nError = 0; + break; + } + + if( !pWarnBox ) + { + pWarnBox = new WarningBox( DLGWIN, + WinBits( WB_OK_CANCEL ), + String( ResId( nError, rMgr ) ) ); + pWarnBox->SetHelpId( HID_WARN_NAME_DUPLICATE ); + } + + if( pWarnBox->Execute() != RET_OK ) + break; + } + //Rectangle aDlgRect( pDlg->GetPosPixel(), pDlg->GetSizePixel() ); + delete pDlg; + delete pWarnBox; + + if( !nError ) + { + XBitmapEntry* pEntry = 0; + if( aCtlPixel.IsEnabled() ) + { + XOBitmap aXOBitmap = aBitmapCtl.GetXBitmap(); + + // #85339# if it's an array, force conversion to bitmap before using it. + if(aXOBitmap.GetBitmapType() == XBITMAP_8X8) + aXOBitmap.GetBitmap(); + + pEntry = new XBitmapEntry( aXOBitmap, aName ); + } + else // Es muss sich um eine nicht vorhandene importierte Bitmap handeln + { + const SfxPoolItem* pPoolItem = NULL; + if( SFX_ITEM_SET == rOutAttrs.GetItemState( XATTR_FILLBITMAP, TRUE, &pPoolItem ) ) + { + XOBitmap aXOBitmap( ( ( const XFillBitmapItem* ) pPoolItem )->GetBitmapValue() ); + pEntry = new XBitmapEntry( aXOBitmap, aName ); + } + } + + DBG_ASSERT( pEntry, "SvxBitmapTabPage::ClickAddHdl_Impl(), pEntry == 0 ?" ); + + if( pEntry ) + { + pBitmapList->Insert( pEntry ); + + aLbBitmaps.Append( pEntry ); + aLbBitmaps.SelectEntryPos( aLbBitmaps.GetEntryCount() - 1 ); + +#ifdef WNT + // hack: #31355# W.P. + Rectangle aRect( aLbBitmaps.GetPosPixel(), aLbBitmaps.GetSizePixel() ); + if( TRUE ) { // ??? overlapped with pDlg + // and srolling + Invalidate( aRect ); + //aLbBitmaps.Invalidate(); + } +#endif + + // Flag fuer modifiziert setzen + *pnBitmapListState |= CT_MODIFIED; + + ChangeBitmapHdl_Impl( this ); + } + } + + // Status der Buttons ermitteln + if( pBitmapList->Count() ) + { + aBtnModify.Enable(); + aBtnDelete.Enable(); + aBtnSave.Enable(); + } + return 0L; +} + + +/******************************************************************************/ +/******************************************************************************/ + + +//------------------------------------------------------------------------ + +#ifdef _MSC_VER +#pragma optimize ( "", off ) +#endif + +IMPL_LINK( SvxBitmapTabPage, ClickImportHdl_Impl, void *, EMPTYARG ) +{ + ResMgr& rMgr = DIALOG_MGR(); + SvxOpenGraphicDialog aDlg( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "Import" ) ) ); + aDlg.EnableLink(sal_False); + + if( !aDlg.Execute() ) + { + Graphic aGraphic; + int nError = 1; + + EnterWait(); + nError = aDlg.GetGraphic( aGraphic ); + LeaveWait(); + + if( !nError ) + { + String aDesc( ResId(RID_SVXSTR_DESC_EXT_BITMAP, rMgr) ); + WarningBox* pWarnBox = NULL; + + // convert file URL to UI name + String aName; + INetURLObject aURL( aDlg.GetPath() ); + //CHINA001 SvxNameDialog* pDlg = new SvxNameDialog( DLGWIN, aURL.GetName().GetToken( 0, '.' ), aDesc ); + SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); + DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001 + AbstractSvxNameDialog* pDlg = pFact->CreateSvxNameDialog( DLGWIN, String(aURL.GetName()).GetToken( 0, '.' ), aDesc, RID_SVXDLG_NAME ); + DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001 + nError = RID_SVXSTR_WARN_NAME_DUPLICATE; + + while( pDlg->Execute() == RET_OK ) + { + pDlg->GetName( aName ); + + BOOL bDifferent = TRUE; + long nCount = pBitmapList->Count(); + + for( long i = 0; i < nCount && bDifferent; i++ ) + if( aName == pBitmapList->GetBitmap( i )->GetName() ) + bDifferent = FALSE; + + if( bDifferent ) { + nError = 0; + break; + } + + if( !pWarnBox ) + { + pWarnBox = new WarningBox( DLGWIN, + WinBits( WB_OK_CANCEL ), + String( ResId( nError, rMgr ) ) ); + pWarnBox->SetHelpId( HID_WARN_NAME_DUPLICATE ); + } + + + if( pWarnBox->Execute() != RET_OK ) + break; + } + //Rectangle aDlgRect( pDlg->GetPosPixel(), pDlg->GetSizePixel() ); + delete pDlg; + delete pWarnBox; + + if( !nError ) + { + Bitmap aBmp( aGraphic.GetBitmap() ); + XBitmapEntry* pEntry = + new XBitmapEntry( XOBitmap( aBmp ), aName ); + pBitmapList->Insert( pEntry ); + + aLbBitmaps.Append( pEntry ); + aLbBitmaps.SelectEntryPos( aLbBitmaps.GetEntryCount() - 1 ); + +#ifdef WNT + // hack: #31355# W.P. + Rectangle aRect( aLbBitmaps.GetPosPixel(), aLbBitmaps.GetSizePixel() ); + if( TRUE ) { // ??? overlapped with pDlg + // and srolling + Invalidate( aRect ); + //aLbBitmaps.Invalidate(); + } +#endif + + // Flag fuer modifiziert setzen + *pnBitmapListState |= CT_MODIFIED; + + ChangeBitmapHdl_Impl( this ); + } + } + else + // Graphik konnte nicht geladen werden + ErrorBox( DLGWIN, + WinBits( WB_OK ), + String( ResId( RID_SVXSTR_READ_DATA_ERROR, rMgr ) ) ).Execute(); + } + + return 0L; +} + +#ifdef _MSC_VER +#pragma optimize ( "", on ) +#endif + +//------------------------------------------------------------------------ + +IMPL_LINK( SvxBitmapTabPage, ClickModifyHdl_Impl, void *, EMPTYARG ) +{ + USHORT nPos = aLbBitmaps.GetSelectEntryPos(); + + if ( nPos != LISTBOX_ENTRY_NOTFOUND ) + { + ResMgr& rMgr = DIALOG_MGR(); + String aNewName( ResId( RID_SVXSTR_BITMAP, rMgr ) ); + String aDesc( ResId( RID_SVXSTR_DESC_NEW_BITMAP, rMgr ) ); + String aName( pBitmapList->GetBitmap( nPos )->GetName() ); + String aOldName = aName; + + //CHINA001 SvxNameDialog* pDlg = new SvxNameDialog( DLGWIN, aName, aDesc ); + SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); + DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001 + AbstractSvxNameDialog* pDlg = pFact->CreateSvxNameDialog( DLGWIN, aName, aDesc, RID_SVXDLG_NAME ); + DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001 + + long nCount = pBitmapList->Count(); + BOOL bDifferent = FALSE; + BOOL bLoop = TRUE; + + while( bLoop && pDlg->Execute() == RET_OK ) + { + pDlg->GetName( aName ); + bDifferent = TRUE; + + for( long i = 0; i < nCount && bDifferent; i++ ) + { + if( aName == pBitmapList->GetBitmap( i )->GetName() && + aName != aOldName ) + bDifferent = FALSE; + } + + if( bDifferent ) + { + bLoop = FALSE; + XBitmapEntry* pEntry = pBitmapList->GetBitmap( nPos ); + + pEntry->SetName( aName ); + + XOBitmap aXOBitmap = aBitmapCtl.GetXBitmap(); + + // #85339# if it's an array, force conversion to bitmap before using it. + if(aXOBitmap.GetBitmapType() == XBITMAP_8X8) + aXOBitmap.GetBitmap(); + + pEntry->SetXBitmap( aXOBitmap ); + + aLbBitmaps.Modify( pEntry, nPos ); + aLbBitmaps.SelectEntryPos( nPos ); + + // Flag fuer modifiziert setzen + *pnBitmapListState |= CT_MODIFIED; + + bBmpChanged = FALSE; + } + else + { + WarningBox aBox( DLGWIN, WinBits( WB_OK ), String( ResId( RID_SVXSTR_WARN_NAME_DUPLICATE, rMgr ) ) ); + aBox.SetHelpId( HID_WARN_NAME_DUPLICATE ); + aBox.Execute(); + } + } + delete pDlg; + } + return 0L; +} + +//------------------------------------------------------------------------ + +IMPL_LINK( SvxBitmapTabPage, ClickDeleteHdl_Impl, void *, EMPTYARG ) +{ + USHORT nPos = aLbBitmaps.GetSelectEntryPos(); + + if( nPos != LISTBOX_ENTRY_NOTFOUND ) + { + QueryBox aQueryBox( DLGWIN, WinBits( WB_YES_NO | WB_DEF_NO ), +//! SVX_RES( RID_SVXSTR_DEL_BITMAP ), + String( SVX_RES( RID_SVXSTR_ASK_DEL_BITMAP ) ) ); + + if( aQueryBox.Execute() == RET_YES ) + { + delete pBitmapList->Remove( nPos ); + aLbBitmaps.RemoveEntry( nPos ); + aLbBitmaps.SelectEntryPos( 0 ); + + aCtlPreview.Invalidate(); + aCtlPixel.Invalidate(); + + ChangeBitmapHdl_Impl( this ); + + // Flag fuer modifiziert setzen + *pnBitmapListState |= CT_MODIFIED; + } + } + // Status der Buttons ermitteln + if( !pBitmapList->Count() ) + { + aBtnModify.Disable(); + aBtnDelete.Disable(); + aBtnSave.Disable(); + } + return 0L; +} + +// ----------------------------------------------------------------------- + +IMPL_LINK( SvxBitmapTabPage, ClickLoadHdl_Impl, void *, EMPTYARG ) +{ + USHORT nReturn = RET_YES; + ResMgr& rMgr = DIALOG_MGR(); + + if ( *pnBitmapListState & CT_MODIFIED ) + { + nReturn = WarningBox( DLGWIN, WinBits( WB_YES_NO_CANCEL ), + String( ResId( RID_SVXSTR_WARN_TABLE_OVERWRITE, rMgr ) ) ).Execute(); + + if ( nReturn == RET_YES ) + pBitmapList->Save(); + } + + if ( nReturn != RET_CANCEL ) + { + ::sfx2::FileDialogHelper aDlg( + com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, + 0 ); + String aStrFilterType( RTL_CONSTASCII_USTRINGPARAM( "*.sob" ) ); + aDlg.AddFilter( aStrFilterType, aStrFilterType ); + INetURLObject aFile( SvtPathOptions().GetPalettePath() ); + aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) ); + + if ( aDlg.Execute() == ERRCODE_NONE ) + { + EnterWait(); + INetURLObject aURL( aDlg.GetPath() ); + INetURLObject aPathURL( aURL ); + + aPathURL.removeSegment(); + aPathURL.removeFinalSlash(); + + // Tabelle speichern + XBitmapList* pBmpList = new XBitmapList( aPathURL.GetMainURL( INetURLObject::NO_DECODE ), pXPool ); + pBmpList->SetName( aURL.getName() ); + if( pBmpList->Load() ) + { + if( pBmpList ) + { + // Pruefen, ob Tabelle geloescht werden darf: + if( pBitmapList != ( (SvxAreaTabDialog*) DLGWIN )->GetBitmapList() ) + delete pBitmapList; + + pBitmapList = pBmpList; + ( (SvxAreaTabDialog*) DLGWIN )->SetNewBitmapList( pBitmapList ); + + aLbBitmaps.Clear(); + aLbBitmaps.Fill( pBitmapList ); + Reset( rOutAttrs ); + + pBitmapList->SetName( aURL.getName() ); + + // Ermitteln (evtl. abschneiden) des Namens und in + // der GroupBox darstellen + String aString( ResId( RID_SVXSTR_TABLE, rMgr ) ); + aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) ); + + if ( aURL.getBase().getLength() > 18 ) + { + aString += String(aURL.getBase()).Copy( 0, 15 ); + aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) ); + } + else + aString += String(aURL.getBase()); + + // Flag fuer gewechselt setzen + *pnBitmapListState |= CT_CHANGED; + // Flag fuer modifiziert entfernen + *pnBitmapListState &= ~CT_MODIFIED; + } + LeaveWait(); + } + else + { + LeaveWait(); + ErrorBox( DLGWIN, WinBits( WB_OK ), + String( ResId( RID_SVXSTR_READ_DATA_ERROR, rMgr ) ) ).Execute(); + } + } + } + + // Status der Buttons ermitteln + if( pBitmapList->Count() ) + { + aBtnModify.Enable(); + aBtnDelete.Enable(); + aBtnSave.Enable(); + } + else + { + aBtnModify.Disable(); + aBtnDelete.Disable(); + aBtnSave.Disable(); + } + return 0L; +} + +// ----------------------------------------------------------------------- + +IMPL_LINK( SvxBitmapTabPage, ClickSaveHdl_Impl, void *, EMPTYARG ) +{ + ::sfx2::FileDialogHelper aDlg( + com::sun::star::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, 0 ); + String aStrFilterType( RTL_CONSTASCII_USTRINGPARAM( "*.sob" ) ); + aDlg.AddFilter( aStrFilterType, aStrFilterType ); + + INetURLObject aFile( SvtPathOptions().GetPalettePath() ); + DBG_ASSERT( aFile.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" ); + + if( pBitmapList->GetName().Len() ) + { + aFile.Append( pBitmapList->GetName() ); + + if( !aFile.getExtension().getLength() ) + aFile.SetExtension( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "sob" ) ) ); + } + + aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) ); + if ( aDlg.Execute() == ERRCODE_NONE ) + { + INetURLObject aURL( aDlg.GetPath() ); + INetURLObject aPathURL( aURL ); + + aPathURL.removeSegment(); + aPathURL.removeFinalSlash(); + + pBitmapList->SetName( aURL.getName() ); + pBitmapList->SetPath( aPathURL.GetMainURL( INetURLObject::NO_DECODE ) ); + + if( pBitmapList->Save() ) + { + // Ermitteln (evtl. abschneiden) des Namens und in + // der GroupBox darstellen + String aString( SVX_RES( RID_SVXSTR_TABLE ) ); + aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) ); + + if ( aURL.getBase().getLength() > 18 ) + { + aString += String(aURL.getBase()).Copy( 0, 15 ); + aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) ); + } + else + aString += String(aURL.getBase()); + + // Flag fuer gespeichert setzen + *pnBitmapListState |= CT_SAVED; + // Flag fuer modifiziert entfernen + *pnBitmapListState &= ~CT_MODIFIED; + } + else + { + ErrorBox( DLGWIN, WinBits( WB_OK ), + String( SVX_RES( RID_SVXSTR_WRITE_DATA_ERROR ) ) ).Execute(); + } + } + + return 0L; +} + +//------------------------------------------------------------------------ + +IMPL_LINK( SvxBitmapTabPage, ChangePixelColorHdl_Impl, void *, EMPTYARG ) +{ + aCtlPixel.SetPixelColor( aLbColor.GetSelectEntryColor() ); + aCtlPixel.Invalidate(); + + aBitmapCtl.SetPixelColor( aLbColor.GetSelectEntryColor() ); + + // Bitmap holen und darstellen + rXFSet.Put( XFillBitmapItem( String(), aBitmapCtl.GetXBitmap() ) ); + aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() ); + aCtlPreview.Invalidate(); + + bBmpChanged = TRUE; + + return 0L; +} + +//------------------------------------------------------------------------ + +IMPL_LINK( SvxBitmapTabPage, ChangeBackgrndColorHdl_Impl, void *, EMPTYARG ) +{ + aCtlPixel.SetBackgroundColor( aLbBackgroundColor.GetSelectEntryColor() ); + aCtlPixel.Invalidate(); + + aBitmapCtl.SetBackgroundColor( aLbBackgroundColor.GetSelectEntryColor() ); + + // Bitmap holen und darstellen + rXFSet.Put( XFillBitmapItem( String(), aBitmapCtl.GetXBitmap() ) ); + aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() ); + aCtlPreview.Invalidate(); + + bBmpChanged = TRUE; + + return 0L; +} + +//------------------------------------------------------------------------ + +void SvxBitmapTabPage::PointChanged( Window* pWindow, RECT_POINT ) +{ + if( pWindow == &aCtlPixel ) + { + aBitmapCtl.SetBmpArray( aCtlPixel.GetBitmapPixelPtr() ); + + // Bitmap holen und darstellen + rXFSet.Put( XFillBitmapItem( String(), aBitmapCtl.GetXBitmap() ) ); + aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() ); + aCtlPreview.Invalidate(); + + bBmpChanged = TRUE; + } +} + + + + +Window* SvxBitmapTabPage::GetParentLabeledBy( const Window* pLabeled ) const +{ + if (pLabeled == &aLbBitmaps) + return const_cast<FixedText*>(&aLbBitmapsHidden); + else + return SvxTabPage::GetParentLabeledBy (pLabeled); +} |