xref: /aoo42x/main/cui/source/tabpages/tpgradnt.cxx (revision 3e407bd8)
12ee96f1cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
32ee96f1cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
42ee96f1cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
52ee96f1cSAndrew Rist  * distributed with this work for additional information
62ee96f1cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
72ee96f1cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
82ee96f1cSAndrew Rist  * "License"); you may not use this file except in compliance
92ee96f1cSAndrew Rist  * with the License.  You may obtain a copy of the License at
102ee96f1cSAndrew Rist  *
112ee96f1cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
122ee96f1cSAndrew Rist  *
132ee96f1cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
142ee96f1cSAndrew Rist  * software distributed under the License is distributed on an
152ee96f1cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
162ee96f1cSAndrew Rist  * KIND, either express or implied.  See the License for the
172ee96f1cSAndrew Rist  * specific language governing permissions and limitations
182ee96f1cSAndrew Rist  * under the License.
192ee96f1cSAndrew Rist  *
202ee96f1cSAndrew Rist  *************************************************************/
212ee96f1cSAndrew Rist 
222ee96f1cSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_cui.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir // include ---------------------------------------------------------------
28cdf0e10cSrcweir #include <vcl/wrkwin.hxx>
29cdf0e10cSrcweir #include <tools/shl.hxx>
30cdf0e10cSrcweir #include <tools/urlobj.hxx>
31cdf0e10cSrcweir #include <vcl/msgbox.hxx>
32cdf0e10cSrcweir #include <unotools/pathoptions.hxx>
33cdf0e10cSrcweir #include <sfx2/app.hxx>
34cdf0e10cSrcweir #include <sfx2/filedlghelper.hxx>
35cdf0e10cSrcweir #include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
36cdf0e10cSrcweir 
37cdf0e10cSrcweir #define _SVX_TPGRADNT_CXX
38cdf0e10cSrcweir 
39cdf0e10cSrcweir #include <cuires.hrc>
40cdf0e10cSrcweir #include "helpid.hrc"
41cdf0e10cSrcweir #include "svx/xattr.hxx"
42cdf0e10cSrcweir #include <svx/xtable.hxx>
43cdf0e10cSrcweir #include <svx/xpool.hxx>
44cdf0e10cSrcweir #include "svx/drawitem.hxx"
45cdf0e10cSrcweir #include "cuitabarea.hxx"
46cdf0e10cSrcweir #include "tabarea.hrc"
47cdf0e10cSrcweir #include "defdlgname.hxx" //CHINA001 #include "dlgname.hxx"
48cdf0e10cSrcweir //#include "dlgname.hrc"
49cdf0e10cSrcweir #include <svx/svxdlg.hxx> //CHINA001
50cdf0e10cSrcweir #include <dialmgr.hxx>
51cdf0e10cSrcweir #include <svx/dialmgr.hxx>
52cdf0e10cSrcweir #include <svx/dialogs.hrc>
53cdf0e10cSrcweir #include "paragrph.hrc"
54cdf0e10cSrcweir 
55cdf0e10cSrcweir #define DLGWIN this->GetParent()->GetParent()
56cdf0e10cSrcweir 
57cdf0e10cSrcweir #define BITMAP_WIDTH  32
58cdf0e10cSrcweir #define BITMAP_HEIGHT 12
59cdf0e10cSrcweir 
60cdf0e10cSrcweir /*************************************************************************
61cdf0e10cSrcweir |*
62cdf0e10cSrcweir |*	Dialog zum Aendern und Definieren der Farbverlaeufe
63cdf0e10cSrcweir |*
64cdf0e10cSrcweir \************************************************************************/
65cdf0e10cSrcweir 
SvxGradientTabPage(Window * pParent,const SfxItemSet & rInAttrs)66cdf0e10cSrcweir SvxGradientTabPage::SvxGradientTabPage
67cdf0e10cSrcweir (
68cdf0e10cSrcweir 	Window* pParent,
69cdf0e10cSrcweir 	const SfxItemSet& rInAttrs
70cdf0e10cSrcweir ) :
71cdf0e10cSrcweir 	SfxTabPage			( pParent, CUI_RES( RID_SVXPAGE_GRADIENT ), rInAttrs ),
72cdf0e10cSrcweir 
73cdf0e10cSrcweir     aFlProp             ( this, CUI_RES( FL_PROP ) ),
74cdf0e10cSrcweir     aFtType             ( this, CUI_RES( FT_TYPE ) ),
75cdf0e10cSrcweir 	aLbGradientType		( this, CUI_RES( LB_GRADIENT_TYPES ) ),
76cdf0e10cSrcweir 	aFtCenterX			( this, CUI_RES( FT_CENTER_X ) ),
77cdf0e10cSrcweir 	aMtrCenterX			( this, CUI_RES( MTR_CENTER_X ) ),
78cdf0e10cSrcweir 	aFtCenterY			( this, CUI_RES( FT_CENTER_Y ) ),
79cdf0e10cSrcweir 	aMtrCenterY			( this, CUI_RES( MTR_CENTER_Y ) ),
80cdf0e10cSrcweir 	aFtAngle			( this, CUI_RES( FT_ANGLE ) ),
81cdf0e10cSrcweir 	aMtrAngle			( this, CUI_RES( MTR_ANGLE ) ),
82cdf0e10cSrcweir 	aFtBorder			( this, CUI_RES( FT_BORDER ) ),
83cdf0e10cSrcweir 	aMtrBorder			( this, CUI_RES( MTR_BORDER ) ),
84cdf0e10cSrcweir 	aFtColorFrom		( this, CUI_RES( FT_COLOR_FROM ) ),
85cdf0e10cSrcweir     aLbColorFrom        ( this, CUI_RES( LB_COLOR_FROM ) ),
86cdf0e10cSrcweir     aMtrColorFrom       ( this, CUI_RES( MTR_COLOR_FROM ) ),
87cdf0e10cSrcweir     aFtColorTo          ( this, CUI_RES( FT_COLOR_TO ) ),
88cdf0e10cSrcweir     aLbColorTo          ( this, CUI_RES( LB_COLOR_TO ) ),
89cdf0e10cSrcweir     aMtrColorTo         ( this, CUI_RES( MTR_COLOR_TO ) ),
90cdf0e10cSrcweir     aLbGradients        ( this, CUI_RES( LB_GRADIENTS ) ),
91cdf0e10cSrcweir     aCtlPreview         ( this, CUI_RES( CTL_PREVIEW ) ),
92cdf0e10cSrcweir 	aBtnAdd				( this, CUI_RES( BTN_ADD ) ),
93cdf0e10cSrcweir 	aBtnModify			( this, CUI_RES( BTN_MODIFY ) ),
94cdf0e10cSrcweir 	aBtnDelete			( this, CUI_RES( BTN_DELETE ) ),
95cdf0e10cSrcweir 	aBtnLoad			( this, CUI_RES( BTN_LOAD ) ),
96cdf0e10cSrcweir 	aBtnSave			( this, CUI_RES( BTN_SAVE ) ),
97cdf0e10cSrcweir 
98cdf0e10cSrcweir     rOutAttrs           ( rInAttrs ),
99cdf0e10cSrcweir 
100c7be74b1SArmin Le Grand     maColorTab(),
101c7be74b1SArmin Le Grand     maGradientList(),
102cdf0e10cSrcweir 
103cdf0e10cSrcweir     pXPool              ( (XOutdevItemPool*) rInAttrs.GetPool() ),
104cdf0e10cSrcweir     aXFStyleItem        ( XFILL_GRADIENT ),
105cdf0e10cSrcweir     aXGradientItem      ( String(), XGradient( COL_BLACK, COL_WHITE ) ),
106cdf0e10cSrcweir     aXFillAttr          ( pXPool ),
107cdf0e10cSrcweir     rXFSet              ( aXFillAttr.GetItemSet() )
108cdf0e10cSrcweir {
109cdf0e10cSrcweir 	aBtnLoad.SetModeImage( Image( CUI_RES( RID_SVXIMG_LOAD_H ) ), BMP_COLOR_HIGHCONTRAST );
110cdf0e10cSrcweir 	aBtnSave.SetModeImage( Image( CUI_RES( RID_SVXIMG_SAVE_H ) ), BMP_COLOR_HIGHCONTRAST );
111cdf0e10cSrcweir 
112cdf0e10cSrcweir 	FreeResource();
113cdf0e10cSrcweir 
114cdf0e10cSrcweir     aCtlPreview.SetAccessibleName(String(CUI_RES(STR_EXAMPLE)));
115cdf0e10cSrcweir 	aLbGradients.SetAccessibleName( GetText());
116cdf0e10cSrcweir 
117cdf0e10cSrcweir 
118cdf0e10cSrcweir 	// diese Page braucht ExchangeSupport
119cdf0e10cSrcweir 	SetExchangeSupport();
120cdf0e10cSrcweir 
121cdf0e10cSrcweir 	// Solange NICHT vom Item unterstuetzt
122cdf0e10cSrcweir 
123cdf0e10cSrcweir 	//aMtrColorTo.Disable();
124cdf0e10cSrcweir 	aMtrColorTo.SetValue( 100 );
125cdf0e10cSrcweir 	//aMtrColorFrom.Disable();
126cdf0e10cSrcweir 	aMtrColorFrom.SetValue( 100 );
127cdf0e10cSrcweir 
128cdf0e10cSrcweir 	// Setzen des Output-Devices
129cdf0e10cSrcweir 	rXFSet.Put( aXFStyleItem );
130cdf0e10cSrcweir 	rXFSet.Put( aXGradientItem );
131cdf0e10cSrcweir 	aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() );
132cdf0e10cSrcweir 
133cdf0e10cSrcweir     // Handler ueberladen
134cdf0e10cSrcweir 	aLbGradients.SetSelectHdl(
135cdf0e10cSrcweir 		LINK( this, SvxGradientTabPage, ChangeGradientHdl_Impl ) );
136cdf0e10cSrcweir 	aBtnAdd.SetClickHdl( LINK( this, SvxGradientTabPage, ClickAddHdl_Impl ) );
137cdf0e10cSrcweir 	aBtnModify.SetClickHdl(
138cdf0e10cSrcweir 		LINK( this, SvxGradientTabPage, ClickModifyHdl_Impl ) );
139cdf0e10cSrcweir 	aBtnDelete.SetClickHdl(
140cdf0e10cSrcweir 		LINK( this, SvxGradientTabPage, ClickDeleteHdl_Impl ) );
141cdf0e10cSrcweir 
142cdf0e10cSrcweir 	Link aLink = LINK( this, SvxGradientTabPage, ModifiedHdl_Impl );
143cdf0e10cSrcweir 	aLbGradientType.SetSelectHdl( aLink );
144cdf0e10cSrcweir 	aMtrCenterX.SetModifyHdl( aLink );
145cdf0e10cSrcweir 	aMtrCenterY.SetModifyHdl( aLink );
146cdf0e10cSrcweir 	aMtrAngle.SetModifyHdl( aLink );
147cdf0e10cSrcweir 	aMtrBorder.SetModifyHdl( aLink );
148cdf0e10cSrcweir 	aMtrColorFrom.SetModifyHdl( aLink );
149cdf0e10cSrcweir 	aLbColorFrom.SetSelectHdl( aLink );
150cdf0e10cSrcweir 	aMtrColorTo.SetModifyHdl( aLink );
151cdf0e10cSrcweir 	aLbColorTo.SetSelectHdl( aLink );
152cdf0e10cSrcweir 
153cdf0e10cSrcweir 	aBtnLoad.SetClickHdl(
154cdf0e10cSrcweir 		LINK( this, SvxGradientTabPage, ClickLoadHdl_Impl ) );
155cdf0e10cSrcweir 	aBtnSave.SetClickHdl(
156cdf0e10cSrcweir 		LINK( this, SvxGradientTabPage, ClickSaveHdl_Impl ) );
157cdf0e10cSrcweir 
158cdf0e10cSrcweir 	aBtnAdd.SetAccessibleRelationMemberOf( &aFlProp );
159cdf0e10cSrcweir 	aBtnModify.SetAccessibleRelationMemberOf( &aFlProp );
160cdf0e10cSrcweir 	aBtnDelete.SetAccessibleRelationMemberOf( &aFlProp );
161cdf0e10cSrcweir 	aLbGradients.SetAccessibleRelationLabeledBy(&aLbGradients);
162cdf0e10cSrcweir 
163cdf0e10cSrcweir     // #i76307# always paint the preview in LTR, because this is what the document does
164cdf0e10cSrcweir     aCtlPreview.EnableRTL( sal_False );
165cdf0e10cSrcweir }
166cdf0e10cSrcweir 
167cdf0e10cSrcweir // -----------------------------------------------------------------------
168cdf0e10cSrcweir 
Construct()169cdf0e10cSrcweir void SvxGradientTabPage::Construct()
170cdf0e10cSrcweir {
171cdf0e10cSrcweir 	// Farbtabelle
172c7be74b1SArmin Le Grand 	aLbColorFrom.Fill( maColorTab );
173cdf0e10cSrcweir 	aLbColorTo.CopyEntries( aLbColorFrom );
174cdf0e10cSrcweir 
175cdf0e10cSrcweir 	// Farbverlauftabelle
176c7be74b1SArmin Le Grand 	aLbGradients.Fill( maGradientList );
177cdf0e10cSrcweir }
178cdf0e10cSrcweir 
179cdf0e10cSrcweir // -----------------------------------------------------------------------
180cdf0e10cSrcweir 
ActivatePage(const SfxItemSet &)181cdf0e10cSrcweir void SvxGradientTabPage::ActivatePage( const SfxItemSet&  )
182cdf0e10cSrcweir {
183cdf0e10cSrcweir 	sal_uInt16 nPos;
184cdf0e10cSrcweir 	sal_uInt16 nCount;
185cdf0e10cSrcweir 
186cdf0e10cSrcweir 	if( *pDlgType == 0 ) // Flaechen-Dialog
187cdf0e10cSrcweir 	{
188cdf0e10cSrcweir 		*pbAreaTP = sal_False;
189cdf0e10cSrcweir 
190c7be74b1SArmin Le Grand 		if( maColorTab.get() )
191cdf0e10cSrcweir 		{
192cdf0e10cSrcweir 			// ColorTable
193cdf0e10cSrcweir 			if( *pnColorTableState & CT_CHANGED ||
194cdf0e10cSrcweir 				*pnColorTableState & CT_MODIFIED )
195cdf0e10cSrcweir 			{
196cdf0e10cSrcweir 				if( *pnColorTableState & CT_CHANGED )
197c7be74b1SArmin Le Grand 					maColorTab = ( (SvxAreaTabDialog*) DLGWIN )->GetNewColorTable();
198cdf0e10cSrcweir 
199cdf0e10cSrcweir 				// LbColorFrom
200cdf0e10cSrcweir 				nPos = aLbColorFrom.GetSelectEntryPos();
201cdf0e10cSrcweir 				aLbColorFrom.Clear();
202c7be74b1SArmin Le Grand 				aLbColorFrom.Fill( maColorTab );
203cdf0e10cSrcweir 				nCount = aLbColorFrom.GetEntryCount();
204cdf0e10cSrcweir 				if( nCount == 0 )
205cdf0e10cSrcweir 					; // Dieser Fall sollte nicht auftreten
206cdf0e10cSrcweir 				else if( nCount <= nPos )
207cdf0e10cSrcweir 					aLbColorFrom.SelectEntryPos( 0 );
208cdf0e10cSrcweir 				else
209cdf0e10cSrcweir 					aLbColorFrom.SelectEntryPos( nPos );
210cdf0e10cSrcweir 
211cdf0e10cSrcweir 				// LbColorTo
212cdf0e10cSrcweir 				nPos = aLbColorTo.GetSelectEntryPos();
213cdf0e10cSrcweir 				aLbColorTo.Clear();
214cdf0e10cSrcweir 				aLbColorTo.CopyEntries( aLbColorFrom );
215cdf0e10cSrcweir 				nCount = aLbColorTo.GetEntryCount();
216cdf0e10cSrcweir 				if( nCount == 0 )
217cdf0e10cSrcweir 					; // Dieser Fall sollte nicht auftreten
218cdf0e10cSrcweir 				else if( nCount <= nPos )
219cdf0e10cSrcweir 					aLbColorTo.SelectEntryPos( 0 );
220cdf0e10cSrcweir 				else
221cdf0e10cSrcweir 					aLbColorTo.SelectEntryPos( nPos );
222cdf0e10cSrcweir 
223cdf0e10cSrcweir 				ModifiedHdl_Impl( this );
224cdf0e10cSrcweir 			}
225cdf0e10cSrcweir 
226cdf0e10cSrcweir 			// Ermitteln (evtl. abschneiden) des Namens und in
227cdf0e10cSrcweir 			// der GroupBox darstellen
228cdf0e10cSrcweir 			String			aString( CUI_RES( RID_SVXSTR_TABLE ) ); aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
229c7be74b1SArmin Le Grand 			INetURLObject	aURL( maGradientList->GetPath() );
230cdf0e10cSrcweir 
231c7be74b1SArmin Le Grand 			aURL.Append( maGradientList->GetName() );
232cdf0e10cSrcweir 			DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
233cdf0e10cSrcweir 
234cdf0e10cSrcweir 			if ( aURL.getBase().getLength() > 18 )
235cdf0e10cSrcweir 			{
236cdf0e10cSrcweir 				aString += String(aURL.getBase()).Copy( 0, 15 );
237cdf0e10cSrcweir 				aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) );
238cdf0e10cSrcweir 			}
239cdf0e10cSrcweir 			else
240cdf0e10cSrcweir 				aString += String(aURL.getBase());
241cdf0e10cSrcweir 
242cdf0e10cSrcweir 			if ( *pPageType == PT_GRADIENT && *pPos != LISTBOX_ENTRY_NOTFOUND )
243cdf0e10cSrcweir 			{
244cdf0e10cSrcweir 				aLbGradients.SelectEntryPos( *pPos );
245cdf0e10cSrcweir 			}
246cdf0e10cSrcweir 			// Farben koennten geloescht worden sein
247cdf0e10cSrcweir 			ChangeGradientHdl_Impl( this );
248cdf0e10cSrcweir 
249cdf0e10cSrcweir 			*pPageType = PT_GRADIENT;
250cdf0e10cSrcweir 			*pPos = LISTBOX_ENTRY_NOTFOUND;
251cdf0e10cSrcweir 		}
252cdf0e10cSrcweir 	}
253cdf0e10cSrcweir }
254cdf0e10cSrcweir 
255cdf0e10cSrcweir // -----------------------------------------------------------------------
256cdf0e10cSrcweir 
DeactivatePage(SfxItemSet * _pSet)257cdf0e10cSrcweir int SvxGradientTabPage::DeactivatePage( SfxItemSet* _pSet )
258cdf0e10cSrcweir {
259cdf0e10cSrcweir 	if( CheckChanges_Impl() == -1L )
260cdf0e10cSrcweir 		return KEEP_PAGE;
261cdf0e10cSrcweir 
262cdf0e10cSrcweir     if( _pSet )
263cdf0e10cSrcweir         FillItemSet( *_pSet );
264cdf0e10cSrcweir 
265cdf0e10cSrcweir 	return LEAVE_PAGE;
266cdf0e10cSrcweir }
267cdf0e10cSrcweir 
268cdf0e10cSrcweir // -----------------------------------------------------------------------
269cdf0e10cSrcweir 
CheckChanges_Impl()270cdf0e10cSrcweir long SvxGradientTabPage::CheckChanges_Impl()
271cdf0e10cSrcweir {
272cdf0e10cSrcweir 	// wird hier benutzt, um Aenderungen NICHT zu verlieren
273cdf0e10cSrcweir 	XGradient aTmpGradient( aLbColorFrom.GetSelectEntryColor(),
274cdf0e10cSrcweir 						  aLbColorTo.GetSelectEntryColor(),
275cdf0e10cSrcweir 						  (XGradientStyle) aLbGradientType.GetSelectEntryPos(),
276cdf0e10cSrcweir 						  static_cast<long>(aMtrAngle.GetValue() * 10), // sollte in Resource geaendert werden
277cdf0e10cSrcweir 						  (sal_uInt16) aMtrCenterX.GetValue(),
278cdf0e10cSrcweir 						  (sal_uInt16) aMtrCenterY.GetValue(),
279cdf0e10cSrcweir 						  (sal_uInt16) aMtrBorder.GetValue(),
280cdf0e10cSrcweir 						  (sal_uInt16) aMtrColorFrom.GetValue(),
281cdf0e10cSrcweir 						  (sal_uInt16) aMtrColorTo.GetValue() );
282cdf0e10cSrcweir 
283cdf0e10cSrcweir 	sal_uInt16 nPos = aLbGradients.GetSelectEntryPos();
284cdf0e10cSrcweir 	if( nPos != LISTBOX_ENTRY_NOTFOUND )
285cdf0e10cSrcweir 	{
286c7be74b1SArmin Le Grand         XGradient aGradient = maGradientList->GetGradient( nPos )->GetGradient();
287cdf0e10cSrcweir 		String aString = aLbGradients.GetSelectEntry();
288cdf0e10cSrcweir 
289cdf0e10cSrcweir 		if( !( aTmpGradient == aGradient ) )
290cdf0e10cSrcweir 		{
291cdf0e10cSrcweir 			ResMgr& rMgr = CUI_MGR();
292cdf0e10cSrcweir             Image aWarningBoxImage = WarningBox::GetStandardImage();
293cdf0e10cSrcweir 			SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
294cdf0e10cSrcweir 			DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001
295cdf0e10cSrcweir 			AbstractSvxMessDialog* aMessDlg = pFact->CreateSvxMessDialog( DLGWIN, RID_SVXDLG_MESSBOX,
296cdf0e10cSrcweir 														SVX_RESSTR( RID_SVXSTR_GRADIENT ),
297cdf0e10cSrcweir 														CUI_RESSTR( RID_SVXSTR_ASK_CHANGE_GRADIENT ),
298cdf0e10cSrcweir 														&aWarningBoxImage );
299cdf0e10cSrcweir 			DBG_ASSERT(aMessDlg, "Dialogdiet fail!");//CHINA001
300cdf0e10cSrcweir 			aMessDlg->SetButtonText( MESS_BTN_1, //CHINA001 aMessDlg.SetButtonText( MESS_BTN_1,
301cdf0e10cSrcweir 									String( ResId( RID_SVXSTR_CHANGE, rMgr ) ) );
302cdf0e10cSrcweir 			aMessDlg->SetButtonText( MESS_BTN_2, //CHINA001 aMessDlg.SetButtonText( MESS_BTN_2,
303cdf0e10cSrcweir 									String( ResId( RID_SVXSTR_ADD, rMgr ) ) );
304cdf0e10cSrcweir 
305cdf0e10cSrcweir 			short nRet = aMessDlg->Execute(); //CHINA001 short nRet = aMessDlg.Execute();
306cdf0e10cSrcweir 
307cdf0e10cSrcweir 			switch( nRet )
308cdf0e10cSrcweir 			{
309cdf0e10cSrcweir 				case RET_BTN_1: // Aendern
310cdf0e10cSrcweir 				{
311cdf0e10cSrcweir 					ClickModifyHdl_Impl( this );
312c7be74b1SArmin Le Grand                     aGradient = maGradientList->GetGradient( nPos )->GetGradient();
313cdf0e10cSrcweir 				}
314cdf0e10cSrcweir 				break;
315cdf0e10cSrcweir 
316cdf0e10cSrcweir 				case RET_BTN_2: // Hinzufuegen
317cdf0e10cSrcweir 				{
318cdf0e10cSrcweir 					ClickAddHdl_Impl( this );
319cdf0e10cSrcweir 					nPos = aLbGradients.GetSelectEntryPos();
320c7be74b1SArmin Le Grand                     aGradient = maGradientList->GetGradient( nPos )->GetGradient();
321cdf0e10cSrcweir 				}
322cdf0e10cSrcweir 				break;
323cdf0e10cSrcweir 
324cdf0e10cSrcweir 				case RET_CANCEL:
325cdf0e10cSrcweir 					// return( -1L ); <-- wuerde die Seite nicht verlassen
326cdf0e10cSrcweir 				break;
327cdf0e10cSrcweir 				// return( sal_True ); // Abbruch
328cdf0e10cSrcweir 			}
329cdf0e10cSrcweir 			delete aMessDlg; //add by CHINA001
330cdf0e10cSrcweir 		}
331cdf0e10cSrcweir 	}
332cdf0e10cSrcweir 	nPos = aLbGradients.GetSelectEntryPos();
333cdf0e10cSrcweir 	if( nPos != LISTBOX_ENTRY_NOTFOUND )
334cdf0e10cSrcweir 	{
335cdf0e10cSrcweir 		*pPos = nPos;
336cdf0e10cSrcweir 	}
337cdf0e10cSrcweir 	return 0L;
338cdf0e10cSrcweir }
339cdf0e10cSrcweir 
340cdf0e10cSrcweir // -----------------------------------------------------------------------
341cdf0e10cSrcweir 
FillItemSet(SfxItemSet & rSet)342cdf0e10cSrcweir sal_Bool SvxGradientTabPage::FillItemSet( SfxItemSet& rSet )
343cdf0e10cSrcweir {
344cdf0e10cSrcweir 	if( *pDlgType == 0 && *pPageType == PT_GRADIENT && *pbAreaTP == sal_False )
345cdf0e10cSrcweir 	{
346cdf0e10cSrcweir 		// CheckChanges(); <-- doppelte Abfrage ?
347cdf0e10cSrcweir 
348cdf0e10cSrcweir 		XGradient*	pXGradient = NULL;
349cdf0e10cSrcweir 		String	  	aString;
350cdf0e10cSrcweir 		sal_uInt16	  	nPos = aLbGradients.GetSelectEntryPos();
351cdf0e10cSrcweir 		if( nPos != LISTBOX_ENTRY_NOTFOUND )
352cdf0e10cSrcweir 		{
353c7be74b1SArmin Le Grand             pXGradient = new XGradient( maGradientList->GetGradient( nPos )->GetGradient() );
354cdf0e10cSrcweir 			aString = aLbGradients.GetSelectEntry();
355cdf0e10cSrcweir 
356cdf0e10cSrcweir 		}
357cdf0e10cSrcweir 		else
358cdf0e10cSrcweir 		// Farbverlauf wurde (unbekannt) uebergeben
359cdf0e10cSrcweir 		{
360cdf0e10cSrcweir 			pXGradient = new XGradient( aLbColorFrom.GetSelectEntryColor(),
361cdf0e10cSrcweir 						aLbColorTo.GetSelectEntryColor(),
362cdf0e10cSrcweir 						(XGradientStyle) aLbGradientType.GetSelectEntryPos(),
363cdf0e10cSrcweir 						static_cast<long>(aMtrAngle.GetValue() * 10), // sollte in Resource geaendert werden
364cdf0e10cSrcweir 						(sal_uInt16) aMtrCenterX.GetValue(),
365cdf0e10cSrcweir 						(sal_uInt16) aMtrCenterY.GetValue(),
366cdf0e10cSrcweir 						(sal_uInt16) aMtrBorder.GetValue(),
367cdf0e10cSrcweir 						(sal_uInt16) aMtrColorFrom.GetValue(),
368cdf0e10cSrcweir 						(sal_uInt16) aMtrColorTo.GetValue() );
369cdf0e10cSrcweir 		}
370cdf0e10cSrcweir 		DBG_ASSERT( pXGradient, "XGradient konnte nicht erzeugt werden" );
371cdf0e10cSrcweir         rSet.Put( XFillStyleItem( XFILL_GRADIENT ) );
372cdf0e10cSrcweir         rSet.Put( XFillGradientItem( aString, *pXGradient ) );
373cdf0e10cSrcweir 
374cdf0e10cSrcweir 		delete pXGradient;
375cdf0e10cSrcweir 	}
376cdf0e10cSrcweir 	return sal_True;
377cdf0e10cSrcweir }
378cdf0e10cSrcweir 
379cdf0e10cSrcweir // -----------------------------------------------------------------------
380cdf0e10cSrcweir 
Reset(const SfxItemSet &)381cdf0e10cSrcweir void SvxGradientTabPage::Reset( const SfxItemSet& )
382cdf0e10cSrcweir {
383cdf0e10cSrcweir 	// aLbGradients.SelectEntryPos( 0 );
384cdf0e10cSrcweir 	ChangeGradientHdl_Impl( this );
385cdf0e10cSrcweir 
386cdf0e10cSrcweir 	// Status der Buttons ermitteln
387c7be74b1SArmin Le Grand 	if( maGradientList->Count() )
388cdf0e10cSrcweir 	{
389cdf0e10cSrcweir 		aBtnModify.Enable();
390cdf0e10cSrcweir 		aBtnDelete.Enable();
391cdf0e10cSrcweir 		aBtnSave.Enable();
392cdf0e10cSrcweir 	}
393cdf0e10cSrcweir 	else
394cdf0e10cSrcweir 	{
395cdf0e10cSrcweir 		aBtnModify.Disable();
396cdf0e10cSrcweir 		aBtnDelete.Disable();
397cdf0e10cSrcweir 		aBtnSave.Disable();
398cdf0e10cSrcweir 	}
399cdf0e10cSrcweir }
400cdf0e10cSrcweir 
401cdf0e10cSrcweir // -----------------------------------------------------------------------
402cdf0e10cSrcweir 
Create(Window * pWindow,const SfxItemSet & rOutAttrs)403cdf0e10cSrcweir SfxTabPage* SvxGradientTabPage::Create( Window* pWindow,
404cdf0e10cSrcweir 				const SfxItemSet& rOutAttrs )
405cdf0e10cSrcweir {
406cdf0e10cSrcweir 	return new SvxGradientTabPage( pWindow, rOutAttrs );
407cdf0e10cSrcweir }
408cdf0e10cSrcweir 
409cdf0e10cSrcweir //------------------------------------------------------------------------
410cdf0e10cSrcweir 
IMPL_LINK(SvxGradientTabPage,ModifiedHdl_Impl,void *,pControl)411cdf0e10cSrcweir IMPL_LINK( SvxGradientTabPage, ModifiedHdl_Impl, void *, pControl )
412cdf0e10cSrcweir {
413cdf0e10cSrcweir 	XGradientStyle eXGS = (XGradientStyle) aLbGradientType.GetSelectEntryPos();
414cdf0e10cSrcweir 
415cdf0e10cSrcweir 	XGradient aXGradient( aLbColorFrom.GetSelectEntryColor(),
416cdf0e10cSrcweir 						  aLbColorTo.GetSelectEntryColor(),
417cdf0e10cSrcweir 						  eXGS,
418cdf0e10cSrcweir 						  static_cast<long>(aMtrAngle.GetValue() * 10), // sollte in Resource geaendert werden
419cdf0e10cSrcweir 						  (sal_uInt16) aMtrCenterX.GetValue(),
420cdf0e10cSrcweir 						  (sal_uInt16) aMtrCenterY.GetValue(),
421cdf0e10cSrcweir 						  (sal_uInt16) aMtrBorder.GetValue(),
422cdf0e10cSrcweir 						  (sal_uInt16) aMtrColorFrom.GetValue(),
423cdf0e10cSrcweir 						  (sal_uInt16) aMtrColorTo.GetValue() );
424cdf0e10cSrcweir 
425cdf0e10cSrcweir 	// Enablen/Disablen von Controls
426cdf0e10cSrcweir 	if( pControl == &aLbGradientType || pControl == this )
427cdf0e10cSrcweir 		SetControlState_Impl( eXGS );
428cdf0e10cSrcweir 
429cdf0e10cSrcweir 	// Anzeigen im XOutDev
430cdf0e10cSrcweir 	rXFSet.Put( XFillGradientItem( String(), aXGradient ) );
431cdf0e10cSrcweir 	aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() );
432cdf0e10cSrcweir 
433cdf0e10cSrcweir 	aCtlPreview.Invalidate();
434cdf0e10cSrcweir 
435cdf0e10cSrcweir 	return 0L;
436cdf0e10cSrcweir }
437cdf0e10cSrcweir 
438cdf0e10cSrcweir //------------------------------------------------------------------------
439cdf0e10cSrcweir 
IMPL_LINK(SvxGradientTabPage,ClickAddHdl_Impl,void *,EMPTYARG)440cdf0e10cSrcweir IMPL_LINK( SvxGradientTabPage, ClickAddHdl_Impl, void *, EMPTYARG )
441cdf0e10cSrcweir {
442cdf0e10cSrcweir 	ResMgr& rMgr = CUI_MGR();
443cdf0e10cSrcweir 	String aNewName( SVX_RES( RID_SVXSTR_GRADIENT ) );
444cdf0e10cSrcweir 	String aDesc( CUI_RES( RID_SVXSTR_DESC_GRADIENT ) );
445cdf0e10cSrcweir 	String aName;
446cdf0e10cSrcweir 
447c7be74b1SArmin Le Grand 	long nCount = maGradientList.get() ? maGradientList->Count() : 0;
448cdf0e10cSrcweir 	long j = 1;
449cdf0e10cSrcweir 	sal_Bool bDifferent = sal_False;
450cdf0e10cSrcweir 
451cdf0e10cSrcweir 	while( !bDifferent )
452cdf0e10cSrcweir 	{
453cdf0e10cSrcweir 		aName  = aNewName;
454cdf0e10cSrcweir 		aName += sal_Unicode(' ');
455cdf0e10cSrcweir 		aName += UniString::CreateFromInt32( j++ );
456cdf0e10cSrcweir 		bDifferent = sal_True;
457cdf0e10cSrcweir 
458cdf0e10cSrcweir 		for( long i = 0; i < nCount && bDifferent; i++ )
459c7be74b1SArmin Le Grand             if( aName == maGradientList->GetGradient( i )->GetName() )
460cdf0e10cSrcweir 				bDifferent = sal_False;
461cdf0e10cSrcweir 	}
462cdf0e10cSrcweir 
463cdf0e10cSrcweir 	SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
464cdf0e10cSrcweir 	DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001
465cdf0e10cSrcweir 	AbstractSvxNameDialog* pDlg = pFact->CreateSvxNameDialog( DLGWIN, aName, aDesc );
466cdf0e10cSrcweir 	DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001
467cdf0e10cSrcweir 	WarningBox*    pWarnBox = NULL;
468cdf0e10cSrcweir 	sal_uInt16         nError   = RID_SVXSTR_WARN_NAME_DUPLICATE;
469cdf0e10cSrcweir 
470cdf0e10cSrcweir 	while( pDlg->Execute() == RET_OK )
471cdf0e10cSrcweir 	{
472cdf0e10cSrcweir 		pDlg->GetName( aName );
473cdf0e10cSrcweir 
474cdf0e10cSrcweir 		bDifferent = sal_True;
475cdf0e10cSrcweir 
476cdf0e10cSrcweir 		for( long i = 0; i < nCount && bDifferent; i++ )
477c7be74b1SArmin Le Grand             if( aName == maGradientList->GetGradient( i )->GetName() )
478cdf0e10cSrcweir 				bDifferent = sal_False;
479cdf0e10cSrcweir 
480cdf0e10cSrcweir 		if( bDifferent )
481cdf0e10cSrcweir 		{
482cdf0e10cSrcweir 			nError = 0;
483cdf0e10cSrcweir 			break;
484cdf0e10cSrcweir 		}
485cdf0e10cSrcweir 
486cdf0e10cSrcweir 		if( !pWarnBox )
487cdf0e10cSrcweir 		{
488cdf0e10cSrcweir 			pWarnBox = new WarningBox( DLGWIN,
489cdf0e10cSrcweir 									   WinBits( WB_OK_CANCEL ),
490cdf0e10cSrcweir 									   String( ResId( nError, rMgr ) ) );
491cdf0e10cSrcweir 			pWarnBox->SetHelpId( HID_WARN_NAME_DUPLICATE );
492cdf0e10cSrcweir 		}
493cdf0e10cSrcweir 
494cdf0e10cSrcweir 		if( pWarnBox->Execute() != RET_OK )
495cdf0e10cSrcweir 			break;
496cdf0e10cSrcweir 	}
497cdf0e10cSrcweir 	//Rectangle aDlgRect( pDlg->GetPosPixel(), pDlg->GetSizePixel() );
498cdf0e10cSrcweir 	delete pDlg;
499cdf0e10cSrcweir 	delete pWarnBox;
500cdf0e10cSrcweir 
501cdf0e10cSrcweir 	if( !nError )
502cdf0e10cSrcweir 	{
503cdf0e10cSrcweir 		XGradient aXGradient( aLbColorFrom.GetSelectEntryColor(),
504cdf0e10cSrcweir 							  aLbColorTo.GetSelectEntryColor(),
505cdf0e10cSrcweir 							  (XGradientStyle) aLbGradientType.GetSelectEntryPos(),
506cdf0e10cSrcweir 							  static_cast<long>(aMtrAngle.GetValue() * 10), // sollte in Resource geaendert werden
507cdf0e10cSrcweir 							  (sal_uInt16) aMtrCenterX.GetValue(),
508cdf0e10cSrcweir 							  (sal_uInt16) aMtrCenterY.GetValue(),
509cdf0e10cSrcweir 							  (sal_uInt16) aMtrBorder.GetValue(),
510cdf0e10cSrcweir 							  (sal_uInt16) aMtrColorFrom.GetValue(),
511cdf0e10cSrcweir 							  (sal_uInt16) aMtrColorTo.GetValue() );
512cdf0e10cSrcweir 		XGradientEntry* pEntry = new XGradientEntry( aXGradient, aName );
513cdf0e10cSrcweir 
514c7be74b1SArmin Le Grand 		maGradientList->Insert( pEntry, nCount );
515cdf0e10cSrcweir 
516*3e407bd8SArmin Le Grand 		aLbGradients.Append( *pEntry, maGradientList->GetUiBitmap( nCount ) );
517cdf0e10cSrcweir 
518cdf0e10cSrcweir 		aLbGradients.SelectEntryPos( aLbGradients.GetEntryCount() - 1 );
519cdf0e10cSrcweir 
520cdf0e10cSrcweir #ifdef WNT
521cdf0e10cSrcweir 		// hack: #31355# W.P.
522cdf0e10cSrcweir 		Rectangle aRect( aLbGradients.GetPosPixel(), aLbGradients.GetSizePixel() );
523cdf0e10cSrcweir 		if( sal_True ) {				// ??? overlapped with pDlg
524cdf0e10cSrcweir 									// and srolling
525cdf0e10cSrcweir 			Invalidate( aRect );
526cdf0e10cSrcweir 			//aLbGradients.Invalidate();
527cdf0e10cSrcweir 		}
528cdf0e10cSrcweir #endif
529cdf0e10cSrcweir 
530cdf0e10cSrcweir 		// Flag fuer modifiziert setzen
531cdf0e10cSrcweir 		*pnGradientListState |= CT_MODIFIED;
532cdf0e10cSrcweir 
533cdf0e10cSrcweir 		ChangeGradientHdl_Impl( this );
534cdf0e10cSrcweir 	}
535cdf0e10cSrcweir 
536cdf0e10cSrcweir 	// Status der Buttons ermitteln
537c7be74b1SArmin Le Grand 	if( maGradientList.get() && maGradientList->Count() )
538cdf0e10cSrcweir 	{
539cdf0e10cSrcweir 		aBtnModify.Enable();
540cdf0e10cSrcweir 		aBtnDelete.Enable();
541cdf0e10cSrcweir 		aBtnSave.Enable();
542cdf0e10cSrcweir 	}
543cdf0e10cSrcweir 	return 0L;
544cdf0e10cSrcweir }
545cdf0e10cSrcweir 
546cdf0e10cSrcweir //------------------------------------------------------------------------
547cdf0e10cSrcweir 
IMPL_LINK(SvxGradientTabPage,ClickModifyHdl_Impl,void *,EMPTYARG)548cdf0e10cSrcweir IMPL_LINK( SvxGradientTabPage, ClickModifyHdl_Impl, void *, EMPTYARG )
549cdf0e10cSrcweir {
550cdf0e10cSrcweir 	sal_uInt16 nPos = aLbGradients.GetSelectEntryPos();
551cdf0e10cSrcweir 
552cdf0e10cSrcweir 	if ( nPos != LISTBOX_ENTRY_NOTFOUND )
553cdf0e10cSrcweir 	{
554cdf0e10cSrcweir 		ResMgr& rMgr = CUI_MGR();
555cdf0e10cSrcweir 		String aNewName( SVX_RES( RID_SVXSTR_GRADIENT ) );
556cdf0e10cSrcweir 		String aDesc( CUI_RES( RID_SVXSTR_DESC_GRADIENT ) );
557c7be74b1SArmin Le Grand         String aName( maGradientList->GetGradient( nPos )->GetName() );
558cdf0e10cSrcweir 		String aOldName = aName;
559cdf0e10cSrcweir 
560cdf0e10cSrcweir 		SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
561cdf0e10cSrcweir 		DBG_ASSERT(pFact, "Dialogdiet fail!");//CHINA001
562cdf0e10cSrcweir 		AbstractSvxNameDialog* pDlg = pFact->CreateSvxNameDialog( DLGWIN, aName, aDesc );
563cdf0e10cSrcweir 		DBG_ASSERT(pDlg, "Dialogdiet fail!");//CHINA001
564cdf0e10cSrcweir 
565c7be74b1SArmin Le Grand 		long nCount = maGradientList.get() ? maGradientList->Count() : 0;
566cdf0e10cSrcweir 		sal_Bool bDifferent = sal_False;
567cdf0e10cSrcweir 		sal_Bool bLoop = sal_True;
568cdf0e10cSrcweir 
569cdf0e10cSrcweir 		while( bLoop && pDlg->Execute() == RET_OK )
570cdf0e10cSrcweir 		{
571cdf0e10cSrcweir 			pDlg->GetName( aName );
572cdf0e10cSrcweir 			bDifferent = sal_True;
573cdf0e10cSrcweir 
574cdf0e10cSrcweir 			for( long i = 0; i < nCount && bDifferent; i++ )
575cdf0e10cSrcweir 			{
576c7be74b1SArmin Le Grand                 if( aName == maGradientList->GetGradient( i )->GetName() &&
577cdf0e10cSrcweir 					aName != aOldName )
578cdf0e10cSrcweir 					bDifferent = sal_False;
579cdf0e10cSrcweir 			}
580cdf0e10cSrcweir 
581cdf0e10cSrcweir 			if( bDifferent )
582cdf0e10cSrcweir 			{
583cdf0e10cSrcweir 				bLoop = sal_False;
584cdf0e10cSrcweir 				XGradient aXGradient( aLbColorFrom.GetSelectEntryColor(),
585cdf0e10cSrcweir 									  aLbColorTo.GetSelectEntryColor(),
586cdf0e10cSrcweir 									  (XGradientStyle) aLbGradientType.GetSelectEntryPos(),
587cdf0e10cSrcweir 									  static_cast<long>(aMtrAngle.GetValue() * 10), // sollte in Resource geaendert werden
588cdf0e10cSrcweir 									  (sal_uInt16) aMtrCenterX.GetValue(),
589cdf0e10cSrcweir 									  (sal_uInt16) aMtrCenterY.GetValue(),
590cdf0e10cSrcweir 									  (sal_uInt16) aMtrBorder.GetValue(),
591cdf0e10cSrcweir 									  (sal_uInt16) aMtrColorFrom.GetValue(),
592cdf0e10cSrcweir 									  (sal_uInt16) aMtrColorTo.GetValue() );
593cdf0e10cSrcweir 
594cdf0e10cSrcweir 				XGradientEntry* pEntry = new XGradientEntry( aXGradient, aName );
595cdf0e10cSrcweir 
596c7be74b1SArmin Le Grand 				delete maGradientList->Replace( pEntry, nPos );
597cdf0e10cSrcweir 
598*3e407bd8SArmin Le Grand 				aLbGradients.Modify( *pEntry, nPos, maGradientList->GetUiBitmap( nPos ) );
599cdf0e10cSrcweir 
600cdf0e10cSrcweir 				aLbGradients.SelectEntryPos( nPos );
601cdf0e10cSrcweir 
602cdf0e10cSrcweir 				// Flag fuer modifiziert setzen
603cdf0e10cSrcweir 				*pnGradientListState |= CT_MODIFIED;
604cdf0e10cSrcweir 			}
605cdf0e10cSrcweir 			else
606cdf0e10cSrcweir 			{
607cdf0e10cSrcweir 				WarningBox aBox( DLGWIN, WinBits( WB_OK ),String( ResId( RID_SVXSTR_WARN_NAME_DUPLICATE, rMgr ) ) );
608cdf0e10cSrcweir 				aBox.SetHelpId( HID_WARN_NAME_DUPLICATE );
609cdf0e10cSrcweir 				aBox.Execute();
610cdf0e10cSrcweir 			}
611cdf0e10cSrcweir 
612cdf0e10cSrcweir 		}
613cdf0e10cSrcweir 		delete pDlg;
614cdf0e10cSrcweir 	}
615cdf0e10cSrcweir 	return 0L;
616cdf0e10cSrcweir }
617cdf0e10cSrcweir 
618cdf0e10cSrcweir //------------------------------------------------------------------------
619cdf0e10cSrcweir 
IMPL_LINK(SvxGradientTabPage,ClickDeleteHdl_Impl,void *,EMPTYARG)620cdf0e10cSrcweir IMPL_LINK( SvxGradientTabPage, ClickDeleteHdl_Impl, void *, EMPTYARG )
621cdf0e10cSrcweir {
622cdf0e10cSrcweir 	sal_uInt16 nPos = aLbGradients.GetSelectEntryPos();
623cdf0e10cSrcweir 
624cdf0e10cSrcweir 	if( nPos != LISTBOX_ENTRY_NOTFOUND )
625cdf0e10cSrcweir 	{
626cdf0e10cSrcweir 		QueryBox aQueryBox( DLGWIN, WinBits( WB_YES_NO | WB_DEF_NO ),
627cdf0e10cSrcweir 			String( CUI_RES( RID_SVXSTR_ASK_DEL_GRADIENT ) ) );
628cdf0e10cSrcweir 
629cdf0e10cSrcweir 		if ( aQueryBox.Execute() == RET_YES )
630cdf0e10cSrcweir 		{
631c7be74b1SArmin Le Grand 			delete maGradientList->Remove( nPos );
632cdf0e10cSrcweir 			aLbGradients.RemoveEntry( nPos );
633cdf0e10cSrcweir 			aLbGradients.SelectEntryPos( 0 );
634cdf0e10cSrcweir 
635cdf0e10cSrcweir 			aCtlPreview.Invalidate();
636cdf0e10cSrcweir 
637cdf0e10cSrcweir 			ChangeGradientHdl_Impl( this );
638cdf0e10cSrcweir 
639cdf0e10cSrcweir 			// Flag fuer modifiziert setzen
640cdf0e10cSrcweir 			*pnGradientListState |= CT_MODIFIED;
641cdf0e10cSrcweir 		}
642cdf0e10cSrcweir 	}
643cdf0e10cSrcweir 	// Status der Buttons ermitteln
644c7be74b1SArmin Le Grand 	if( !maGradientList.get() || !maGradientList->Count() )
645cdf0e10cSrcweir 	{
646cdf0e10cSrcweir 		aBtnModify.Disable();
647cdf0e10cSrcweir 		aBtnDelete.Disable();
648cdf0e10cSrcweir 		aBtnSave.Disable();
649cdf0e10cSrcweir 	}
650cdf0e10cSrcweir 	return 0L;
651cdf0e10cSrcweir }
652cdf0e10cSrcweir 
653cdf0e10cSrcweir // -----------------------------------------------------------------------
654cdf0e10cSrcweir 
IMPL_LINK(SvxGradientTabPage,ClickLoadHdl_Impl,void *,EMPTYARG)655cdf0e10cSrcweir IMPL_LINK( SvxGradientTabPage, ClickLoadHdl_Impl, void *, EMPTYARG )
656cdf0e10cSrcweir {
657cdf0e10cSrcweir 	ResMgr& rMgr = CUI_MGR();
658cdf0e10cSrcweir 	sal_uInt16 nReturn = RET_YES;
659cdf0e10cSrcweir 
660cdf0e10cSrcweir 	if ( *pnGradientListState & CT_MODIFIED )
661cdf0e10cSrcweir 	{
662cdf0e10cSrcweir 		nReturn = WarningBox( DLGWIN, WinBits( WB_YES_NO_CANCEL ),
663cdf0e10cSrcweir 			String( ResId( RID_SVXSTR_WARN_TABLE_OVERWRITE, rMgr ) ) ).Execute();
664cdf0e10cSrcweir 
665cdf0e10cSrcweir 		if ( nReturn == RET_YES )
666c7be74b1SArmin Le Grand 			maGradientList->Save();
667cdf0e10cSrcweir 	}
668cdf0e10cSrcweir 
669cdf0e10cSrcweir 	if ( nReturn != RET_CANCEL )
670cdf0e10cSrcweir 	{
671cdf0e10cSrcweir     	::sfx2::FileDialogHelper aDlg(
672cdf0e10cSrcweir             com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE,
673cdf0e10cSrcweir             0 );
674cdf0e10cSrcweir 		String aStrFilterType( RTL_CONSTASCII_USTRINGPARAM( "*.sog" ) );
675cdf0e10cSrcweir 		aDlg.AddFilter( aStrFilterType, aStrFilterType );
676cdf0e10cSrcweir 		INetURLObject aFile( SvtPathOptions().GetPalettePath() );
677cdf0e10cSrcweir 		aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
678cdf0e10cSrcweir 
679cdf0e10cSrcweir 		if( aDlg.Execute() == ERRCODE_NONE )
680cdf0e10cSrcweir 		{
681cdf0e10cSrcweir 			EnterWait();
682cdf0e10cSrcweir 
683cdf0e10cSrcweir 			INetURLObject aURL( aDlg.GetPath() );
684cdf0e10cSrcweir 			INetURLObject aPathURL( aURL );
685cdf0e10cSrcweir 
686cdf0e10cSrcweir 			aPathURL.removeSegment();
687cdf0e10cSrcweir 			aPathURL.removeFinalSlash();
688cdf0e10cSrcweir 
689cdf0e10cSrcweir 			// Liste speichern
690c7be74b1SArmin Le Grand 			XGradientListSharedPtr aGrdList(XPropertyListFactory::CreateSharedXGradientList(aPathURL.GetMainURL(INetURLObject::NO_DECODE)));
691c7be74b1SArmin Le Grand 			aGrdList->SetName( aURL.getName() );
692cdf0e10cSrcweir 
693c7be74b1SArmin Le Grand 			if ( aGrdList->Load() )
694cdf0e10cSrcweir 			{
695c7be74b1SArmin Le Grand 				if ( aGrdList )
696cdf0e10cSrcweir 				{
697c7be74b1SArmin Le Grand 					maGradientList = aGrdList;
698c7be74b1SArmin Le Grand 					( (SvxAreaTabDialog*) DLGWIN )->SetNewGradientList( maGradientList );
699cdf0e10cSrcweir 
700cdf0e10cSrcweir 					aLbGradients.Clear();
701c7be74b1SArmin Le Grand 					aLbGradients.Fill( maGradientList );
702cdf0e10cSrcweir 					Reset( rOutAttrs );
703cdf0e10cSrcweir 
704c7be74b1SArmin Le Grand 					maGradientList->SetName( aURL.getName() );
705cdf0e10cSrcweir 
706cdf0e10cSrcweir 					// Ermitteln (evtl. abschneiden) des Namens und in
707cdf0e10cSrcweir 					// der GroupBox darstellen
708cdf0e10cSrcweir 					String aString( ResId( RID_SVXSTR_TABLE, rMgr ) );
709cdf0e10cSrcweir 					aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
710cdf0e10cSrcweir 
711cdf0e10cSrcweir 					if ( aURL.getBase().getLength() > 18 )
712cdf0e10cSrcweir 					{
713cdf0e10cSrcweir 						aString += String(aURL.getBase()).Copy( 0, 15 );
714cdf0e10cSrcweir 						aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) );
715cdf0e10cSrcweir 					}
716cdf0e10cSrcweir 					else
717cdf0e10cSrcweir 						aString += String(aURL.getBase());
718cdf0e10cSrcweir 
719cdf0e10cSrcweir 					// Flag fuer gewechselt setzen
720cdf0e10cSrcweir 					*pnGradientListState |= CT_CHANGED;
721cdf0e10cSrcweir 					// Flag fuer modifiziert entfernen
722cdf0e10cSrcweir 					*pnGradientListState &= ~CT_MODIFIED;
723cdf0e10cSrcweir 				}
724cdf0e10cSrcweir 				LeaveWait();
725cdf0e10cSrcweir 			}
726cdf0e10cSrcweir 			else
727cdf0e10cSrcweir 			{
728cdf0e10cSrcweir 				LeaveWait();
729cdf0e10cSrcweir 				//aIStream.Close();
730cdf0e10cSrcweir 				ErrorBox( DLGWIN, WinBits( WB_OK ),
731cdf0e10cSrcweir 					String( ResId( RID_SVXSTR_READ_DATA_ERROR, rMgr ) ) ).Execute();
732cdf0e10cSrcweir 			}
733cdf0e10cSrcweir 		}
734cdf0e10cSrcweir 	}
735cdf0e10cSrcweir 
736cdf0e10cSrcweir 	// Status der Buttons ermitteln
737c7be74b1SArmin Le Grand 	if( maGradientList.get() && maGradientList->Count() )
738cdf0e10cSrcweir 	{
739cdf0e10cSrcweir 		aBtnModify.Enable();
740cdf0e10cSrcweir 		aBtnDelete.Enable();
741cdf0e10cSrcweir 		aBtnSave.Enable();
742cdf0e10cSrcweir 	}
743cdf0e10cSrcweir 	else
744cdf0e10cSrcweir 	{
745cdf0e10cSrcweir 		aBtnModify.Disable();
746cdf0e10cSrcweir 		aBtnDelete.Disable();
747cdf0e10cSrcweir 		aBtnSave.Disable();
748cdf0e10cSrcweir 	}
749cdf0e10cSrcweir 	return 0L;
750cdf0e10cSrcweir }
751cdf0e10cSrcweir 
752cdf0e10cSrcweir // -----------------------------------------------------------------------
753cdf0e10cSrcweir 
IMPL_LINK(SvxGradientTabPage,ClickSaveHdl_Impl,void *,EMPTYARG)754cdf0e10cSrcweir IMPL_LINK( SvxGradientTabPage, ClickSaveHdl_Impl, void *, EMPTYARG )
755cdf0e10cSrcweir {
756cdf0e10cSrcweir    	::sfx2::FileDialogHelper aDlg(
757cdf0e10cSrcweir         com::sun::star::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, 0 );
758cdf0e10cSrcweir 	String aStrFilterType( RTL_CONSTASCII_USTRINGPARAM( "*.sog" ) );
759cdf0e10cSrcweir 	aDlg.AddFilter( aStrFilterType, aStrFilterType );
760cdf0e10cSrcweir 
761cdf0e10cSrcweir 	INetURLObject aFile( SvtPathOptions().GetPalettePath() );
762cdf0e10cSrcweir 	DBG_ASSERT( aFile.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
763cdf0e10cSrcweir 
764c7be74b1SArmin Le Grand 	if( maGradientList->GetName().Len() )
765cdf0e10cSrcweir 	{
766c7be74b1SArmin Le Grand 		aFile.Append( maGradientList->GetName() );
767cdf0e10cSrcweir 
768cdf0e10cSrcweir 		if( !aFile.getExtension().getLength() )
769cdf0e10cSrcweir 			aFile.SetExtension( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "sog" ) ) );
770cdf0e10cSrcweir 	}
771cdf0e10cSrcweir 
772cdf0e10cSrcweir 	aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
773cdf0e10cSrcweir 	if ( aDlg.Execute() == ERRCODE_NONE )
774cdf0e10cSrcweir 	{
775cdf0e10cSrcweir 		INetURLObject	aURL( aDlg.GetPath() );
776cdf0e10cSrcweir 		INetURLObject	aPathURL( aURL );
777cdf0e10cSrcweir 
778cdf0e10cSrcweir 		aPathURL.removeSegment();
779cdf0e10cSrcweir 		aPathURL.removeFinalSlash();
780cdf0e10cSrcweir 
781c7be74b1SArmin Le Grand 		maGradientList->SetName( aURL.getName() );
782c7be74b1SArmin Le Grand 		maGradientList->SetPath( aPathURL.GetMainURL( INetURLObject::NO_DECODE ) );
783cdf0e10cSrcweir 
784c7be74b1SArmin Le Grand 		if( maGradientList->Save() )
785cdf0e10cSrcweir 		{
786cdf0e10cSrcweir 			// Ermitteln (evtl. abschneiden) des Namens und in
787cdf0e10cSrcweir 			// der GroupBox darstellen
788cdf0e10cSrcweir 			String aString( CUI_RES( RID_SVXSTR_TABLE ) );
789cdf0e10cSrcweir 			aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
790cdf0e10cSrcweir 
791cdf0e10cSrcweir 			if ( aURL.getBase().getLength() > 18 )
792cdf0e10cSrcweir 			{
793cdf0e10cSrcweir 				aString += String(aURL.getBase()).Copy( 0, 15 );
794cdf0e10cSrcweir 				aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "..." ) );
795cdf0e10cSrcweir 			}
796cdf0e10cSrcweir 			else
797cdf0e10cSrcweir 				aString += String(aURL.getBase());
798cdf0e10cSrcweir 
799cdf0e10cSrcweir 			// Flag fuer gespeichert setzen
800cdf0e10cSrcweir 			*pnGradientListState |= CT_SAVED;
801cdf0e10cSrcweir 			// Flag fuer modifiziert entfernen
802cdf0e10cSrcweir 			*pnGradientListState &= ~CT_MODIFIED;
803cdf0e10cSrcweir 		}
804cdf0e10cSrcweir 		else
805cdf0e10cSrcweir 		{
806cdf0e10cSrcweir 			ErrorBox( DLGWIN, WinBits( WB_OK ),
807cdf0e10cSrcweir 				String( CUI_RES( RID_SVXSTR_WRITE_DATA_ERROR ) ) ).Execute();
808cdf0e10cSrcweir 		}
809cdf0e10cSrcweir 	}
810cdf0e10cSrcweir 
811cdf0e10cSrcweir 	return 0L;
812cdf0e10cSrcweir }
813cdf0e10cSrcweir 
814cdf0e10cSrcweir //------------------------------------------------------------------------
815cdf0e10cSrcweir 
IMPL_LINK(SvxGradientTabPage,ChangeGradientHdl_Impl,void *,EMPTYARG)816cdf0e10cSrcweir IMPL_LINK( SvxGradientTabPage, ChangeGradientHdl_Impl, void *, EMPTYARG )
817cdf0e10cSrcweir {
818cdf0e10cSrcweir 	XGradient* pGradient = NULL;
819cdf0e10cSrcweir 	int nPos = aLbGradients.GetSelectEntryPos();
820cdf0e10cSrcweir 
821cdf0e10cSrcweir 	if( nPos != LISTBOX_ENTRY_NOTFOUND )
822c7be74b1SArmin Le Grand         pGradient = new XGradient( ( (XGradientEntry*) maGradientList->GetGradient( nPos ) )->GetGradient() );
823cdf0e10cSrcweir 	else
824cdf0e10cSrcweir 	{
825cdf0e10cSrcweir 		const SfxPoolItem* pPoolItem = NULL;
826cdf0e10cSrcweir 		if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLSTYLE ), sal_True, &pPoolItem ) )
827cdf0e10cSrcweir 		{
828cdf0e10cSrcweir 			if( ( XFILL_GRADIENT == (XFillStyle) ( ( const XFillStyleItem* ) pPoolItem )->GetValue() ) &&
829cdf0e10cSrcweir 				( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLGRADIENT ), sal_True, &pPoolItem ) ) )
830cdf0e10cSrcweir 			{
831cdf0e10cSrcweir                 pGradient = new XGradient( ( ( const XFillGradientItem* ) pPoolItem )->GetGradientValue() );
832cdf0e10cSrcweir 			}
833cdf0e10cSrcweir 		}
834cdf0e10cSrcweir 		if( !pGradient )
835cdf0e10cSrcweir 		{
836cdf0e10cSrcweir 			aLbGradients.SelectEntryPos( 0 );
837cdf0e10cSrcweir 			nPos = aLbGradients.GetSelectEntryPos();
838cdf0e10cSrcweir 			if( nPos != LISTBOX_ENTRY_NOTFOUND )
839c7be74b1SArmin Le Grand                 pGradient = new XGradient( ( (XGradientEntry*) maGradientList->GetGradient( nPos ) )->GetGradient() );
840cdf0e10cSrcweir 		}
841cdf0e10cSrcweir 	}
842cdf0e10cSrcweir 
843cdf0e10cSrcweir 	if( pGradient )
844cdf0e10cSrcweir 	{
845cdf0e10cSrcweir 		XGradientStyle eXGS = pGradient->GetGradientStyle();
846cdf0e10cSrcweir 
847cdf0e10cSrcweir 		aLbGradientType.SelectEntryPos(
848cdf0e10cSrcweir             sal::static_int_cast< sal_uInt16 >( eXGS ) );
849cdf0e10cSrcweir 		// Wenn der EIntrag nicht in der Listbox ist, werden die Farben
850cdf0e10cSrcweir 		// temporaer hinzugenommen
851cdf0e10cSrcweir 		aLbColorFrom.SetNoSelection();
852cdf0e10cSrcweir 		aLbColorFrom.SelectEntry( pGradient->GetStartColor() );
853cdf0e10cSrcweir 
854cdf0e10cSrcweir 		if ( aLbColorFrom.GetSelectEntryCount() == 0 )
855cdf0e10cSrcweir 		{
856cdf0e10cSrcweir 			aLbColorFrom.InsertEntry( pGradient->GetStartColor(),
857cdf0e10cSrcweir 									  String() );
858cdf0e10cSrcweir 			aLbColorFrom.SelectEntry( pGradient->GetStartColor() );
859cdf0e10cSrcweir 		}
860cdf0e10cSrcweir 		aLbColorTo.SetNoSelection();
861cdf0e10cSrcweir 		aLbColorTo.SelectEntry( pGradient->GetEndColor() );
862cdf0e10cSrcweir 
863cdf0e10cSrcweir 		if ( aLbColorTo.GetSelectEntryCount() == 0 )
864cdf0e10cSrcweir 		{
865cdf0e10cSrcweir 			aLbColorTo.InsertEntry( pGradient->GetEndColor(), String() );
866cdf0e10cSrcweir 			aLbColorTo.SelectEntry( pGradient->GetEndColor() );
867cdf0e10cSrcweir 		}
868cdf0e10cSrcweir 
869cdf0e10cSrcweir 		aMtrAngle.SetValue( pGradient->GetAngle() / 10 ); // sollte in Resource geaendert werden
870cdf0e10cSrcweir 		aMtrBorder.SetValue( pGradient->GetBorder() );
871cdf0e10cSrcweir 		aMtrCenterX.SetValue( pGradient->GetXOffset() );
872cdf0e10cSrcweir 		aMtrCenterY.SetValue( pGradient->GetYOffset() );
873cdf0e10cSrcweir 		aMtrColorFrom.SetValue( pGradient->GetStartIntens() );
874cdf0e10cSrcweir 		aMtrColorTo.SetValue( pGradient->GetEndIntens() );
875cdf0e10cSrcweir 
876cdf0e10cSrcweir 		// Controls Disablen/Enablen
877cdf0e10cSrcweir 		SetControlState_Impl( eXGS );
878cdf0e10cSrcweir 
879cdf0e10cSrcweir 		// ItemSet fuellen und an aCtlPreview weiterleiten
880cdf0e10cSrcweir 		rXFSet.Put( XFillGradientItem( String(), *pGradient ) );
881cdf0e10cSrcweir 		aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() );
882cdf0e10cSrcweir 
883cdf0e10cSrcweir 		aCtlPreview.Invalidate();
884cdf0e10cSrcweir 		delete pGradient;
885cdf0e10cSrcweir 	}
886cdf0e10cSrcweir 	return 0L;
887cdf0e10cSrcweir }
888cdf0e10cSrcweir 
889cdf0e10cSrcweir //------------------------------------------------------------------------
890cdf0e10cSrcweir 
SetControlState_Impl(XGradientStyle eXGS)891cdf0e10cSrcweir void SvxGradientTabPage::SetControlState_Impl( XGradientStyle eXGS )
892cdf0e10cSrcweir {
893cdf0e10cSrcweir 	switch( eXGS )
894cdf0e10cSrcweir 	{
895cdf0e10cSrcweir 		case XGRAD_LINEAR:
896cdf0e10cSrcweir 		case XGRAD_AXIAL:
897cdf0e10cSrcweir 			aFtCenterX.Disable();
898cdf0e10cSrcweir 			aMtrCenterX.Disable();
899cdf0e10cSrcweir 			aFtCenterY.Disable();
900cdf0e10cSrcweir 			aMtrCenterY.Disable();
901cdf0e10cSrcweir 			aFtAngle.Enable();
902cdf0e10cSrcweir 			aMtrAngle.Enable();
903cdf0e10cSrcweir 			break;
904cdf0e10cSrcweir 
905cdf0e10cSrcweir 		case XGRAD_RADIAL:
906cdf0e10cSrcweir 			aFtCenterX.Enable();
907cdf0e10cSrcweir 			aMtrCenterX.Enable();
908cdf0e10cSrcweir 			aFtCenterY.Enable();
909cdf0e10cSrcweir 			aMtrCenterY.Enable();
910cdf0e10cSrcweir 			aFtAngle.Disable();
911cdf0e10cSrcweir 			aMtrAngle.Disable();
912cdf0e10cSrcweir 			break;
913cdf0e10cSrcweir 
914cdf0e10cSrcweir 		case XGRAD_ELLIPTICAL:
915cdf0e10cSrcweir 			aFtCenterX.Enable();
916cdf0e10cSrcweir 			aMtrCenterX.Enable();
917cdf0e10cSrcweir 			aFtCenterY.Enable();
918cdf0e10cSrcweir 			aMtrCenterY.Enable();
919cdf0e10cSrcweir 			aFtAngle.Enable();
920cdf0e10cSrcweir 			aMtrAngle.Enable();
921cdf0e10cSrcweir 			break;
922cdf0e10cSrcweir 
923cdf0e10cSrcweir 		case XGRAD_SQUARE:
924cdf0e10cSrcweir 		case XGRAD_RECT:
925cdf0e10cSrcweir 			aFtCenterX.Enable();
926cdf0e10cSrcweir 			aMtrCenterX.Enable();
927cdf0e10cSrcweir 			aFtCenterY.Enable();
928cdf0e10cSrcweir 			aMtrCenterY.Enable();
929cdf0e10cSrcweir 			aFtAngle.Enable();
930cdf0e10cSrcweir 			aMtrAngle.Enable();
931cdf0e10cSrcweir 			break;
932cdf0e10cSrcweir 	}
933cdf0e10cSrcweir }
934cdf0e10cSrcweir 
935cdf0e10cSrcweir 
936