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