LCOV - code coverage report
Current view: top level - libreoffice/cui/source/tabpages - tpgradnt.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 1 466 0.2 %
Date: 2012-12-17 Functions: 2 25 8.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <vcl/wrkwin.hxx>
      21             : #include <tools/shl.hxx>
      22             : #include <tools/urlobj.hxx>
      23             : #include <vcl/msgbox.hxx>
      24             : #include <unotools/pathoptions.hxx>
      25             : #include <sfx2/app.hxx>
      26             : #include <sfx2/filedlghelper.hxx>
      27             : #include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
      28             : 
      29             : #define _SVX_TPGRADNT_CXX
      30             : 
      31             : #include <cuires.hrc>
      32             : #include "helpid.hrc"
      33             : #include "svx/xattr.hxx"
      34             : #include <svx/xtable.hxx>
      35             : #include <svx/xpool.hxx>
      36             : #include "svx/drawitem.hxx"
      37             : #include "cuitabarea.hxx"
      38             : #include "tabarea.hrc"
      39             : #include "defdlgname.hxx"
      40             : #include <svx/svxdlg.hxx>
      41             : #include <dialmgr.hxx>
      42             : #include <svx/dialmgr.hxx>
      43             : #include <svx/dialogs.hrc>
      44             : #include "paragrph.hrc"
      45             : 
      46           0 : SvxGradientTabPage::SvxGradientTabPage
      47             : (
      48             :     Window* pParent,
      49             :     const SfxItemSet& rInAttrs
      50             : ) :
      51           0 :     SfxTabPage          ( pParent, CUI_RES( RID_SVXPAGE_GRADIENT ), rInAttrs ),
      52             : 
      53           0 :     aFlProp             ( this, CUI_RES( FL_PROP ) ),
      54           0 :     aFtType             ( this, CUI_RES( FT_TYPE ) ),
      55           0 :     aLbGradientType     ( this, CUI_RES( LB_GRADIENT_TYPES ) ),
      56           0 :     aFtCenterX          ( this, CUI_RES( FT_CENTER_X ) ),
      57           0 :     aMtrCenterX         ( this, CUI_RES( MTR_CENTER_X ) ),
      58           0 :     aFtCenterY          ( this, CUI_RES( FT_CENTER_Y ) ),
      59           0 :     aMtrCenterY         ( this, CUI_RES( MTR_CENTER_Y ) ),
      60           0 :     aFtAngle            ( this, CUI_RES( FT_ANGLE ) ),
      61           0 :     aMtrAngle           ( this, CUI_RES( MTR_ANGLE ) ),
      62           0 :     aFtBorder           ( this, CUI_RES( FT_BORDER ) ),
      63           0 :     aMtrBorder          ( this, CUI_RES( MTR_BORDER ) ),
      64           0 :     aFtColorFrom        ( this, CUI_RES( FT_COLOR_FROM ) ),
      65           0 :     aLbColorFrom        ( this, CUI_RES( LB_COLOR_FROM ) ),
      66           0 :     aMtrColorFrom       ( this, CUI_RES( MTR_COLOR_FROM ) ),
      67           0 :     aFtColorTo          ( this, CUI_RES( FT_COLOR_TO ) ),
      68           0 :     aLbColorTo          ( this, CUI_RES( LB_COLOR_TO ) ),
      69           0 :     aMtrColorTo         ( this, CUI_RES( MTR_COLOR_TO ) ),
      70           0 :     aLbGradients        ( this, CUI_RES( LB_GRADIENTS ) ),
      71           0 :     aCtlPreview         ( this, CUI_RES( CTL_PREVIEW ) ),
      72           0 :     aBtnAdd             ( this, CUI_RES( BTN_ADD ) ),
      73           0 :     aBtnModify          ( this, CUI_RES( BTN_MODIFY ) ),
      74           0 :     aBtnDelete          ( this, CUI_RES( BTN_DELETE ) ),
      75           0 :     aBtnLoad            ( this, CUI_RES( BTN_LOAD ) ),
      76           0 :     aBtnSave            ( this, CUI_RES( BTN_SAVE ) ),
      77             : 
      78             :     rOutAttrs           ( rInAttrs ),
      79             : 
      80           0 :     pXPool              ( (XOutdevItemPool*) rInAttrs.GetPool() ),
      81             :     aXFStyleItem        ( XFILL_GRADIENT ),
      82             :     aXGradientItem      ( String(), XGradient( COL_BLACK, COL_WHITE ) ),
      83             :     aXFillAttr          ( pXPool ),
      84           0 :     rXFSet              ( aXFillAttr.GetItemSet() )
      85             : {
      86           0 :     FreeResource();
      87             : 
      88           0 :     aCtlPreview.SetAccessibleName(String(CUI_RES(STR_EXAMPLE)));
      89           0 :     aLbGradients.SetAccessibleName( GetText());
      90             : 
      91             : 
      92             :     // this page needs ExchangeSupport
      93           0 :     SetExchangeSupport();
      94             : 
      95             :     // as long as NOT supported by the item
      96             : 
      97           0 :     aMtrColorTo.SetValue( 100 );
      98           0 :     aMtrColorFrom.SetValue( 100 );
      99             : 
     100             :     // setting the output device
     101           0 :     rXFSet.Put( aXFStyleItem );
     102           0 :     rXFSet.Put( aXGradientItem );
     103           0 :     aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() );
     104             : 
     105             :     // overload the handler
     106             :     aLbGradients.SetSelectHdl(
     107           0 :         LINK( this, SvxGradientTabPage, ChangeGradientHdl_Impl ) );
     108           0 :     aBtnAdd.SetClickHdl( LINK( this, SvxGradientTabPage, ClickAddHdl_Impl ) );
     109             :     aBtnModify.SetClickHdl(
     110           0 :         LINK( this, SvxGradientTabPage, ClickModifyHdl_Impl ) );
     111             :     aBtnDelete.SetClickHdl(
     112           0 :         LINK( this, SvxGradientTabPage, ClickDeleteHdl_Impl ) );
     113             : 
     114           0 :     Link aLink = LINK( this, SvxGradientTabPage, ModifiedHdl_Impl );
     115           0 :     aLbGradientType.SetSelectHdl( aLink );
     116           0 :     aMtrCenterX.SetModifyHdl( aLink );
     117           0 :     aMtrCenterY.SetModifyHdl( aLink );
     118           0 :     aMtrAngle.SetModifyHdl( aLink );
     119           0 :     aMtrBorder.SetModifyHdl( aLink );
     120           0 :     aMtrColorFrom.SetModifyHdl( aLink );
     121           0 :     aLbColorFrom.SetSelectHdl( aLink );
     122           0 :     aMtrColorTo.SetModifyHdl( aLink );
     123           0 :     aLbColorTo.SetSelectHdl( aLink );
     124             : 
     125             :     aBtnLoad.SetClickHdl(
     126           0 :         LINK( this, SvxGradientTabPage, ClickLoadHdl_Impl ) );
     127             :     aBtnSave.SetClickHdl(
     128           0 :         LINK( this, SvxGradientTabPage, ClickSaveHdl_Impl ) );
     129             : 
     130           0 :     aBtnAdd.SetAccessibleRelationMemberOf( &aFlProp );
     131           0 :     aBtnModify.SetAccessibleRelationMemberOf( &aFlProp );
     132           0 :     aBtnDelete.SetAccessibleRelationMemberOf( &aFlProp );
     133           0 :     aLbGradients.SetAccessibleRelationLabeledBy(&aLbGradients);
     134             : 
     135             :     // #i76307# always paint the preview in LTR, because this is what the document does
     136           0 :     aCtlPreview.EnableRTL( sal_False );
     137           0 : }
     138             : 
     139             : // -----------------------------------------------------------------------
     140             : 
     141           0 : void SvxGradientTabPage::Construct()
     142             : {
     143           0 :     aLbColorFrom.Fill( pColorList );
     144           0 :     aLbColorTo.CopyEntries( aLbColorFrom );
     145             : 
     146           0 :     aLbGradients.Fill( pGradientList );
     147           0 : }
     148             : 
     149             : // -----------------------------------------------------------------------
     150             : 
     151           0 : void SvxGradientTabPage::ActivatePage( const SfxItemSet&  )
     152             : {
     153             :     sal_uInt16 nPos;
     154             :     sal_uInt16 nCount;
     155             : 
     156           0 :     if( *pDlgType == 0 ) // area dialog
     157             :     {
     158           0 :         *pbAreaTP = sal_False;
     159             : 
     160           0 :         if( pColorList.is() )
     161             :         {
     162             :             // ColorList
     163           0 :             if( *pnColorListState & CT_CHANGED ||
     164             :                 *pnColorListState & CT_MODIFIED )
     165             :             {
     166           0 :                 if( *pnColorListState & CT_CHANGED )
     167           0 :                     pColorList = ( (SvxAreaTabDialog*) GetParentDialog() )->GetNewColorList();
     168             : 
     169             :                 // LbColorFrom
     170           0 :                 nPos = aLbColorFrom.GetSelectEntryPos();
     171           0 :                 aLbColorFrom.Clear();
     172           0 :                 aLbColorFrom.Fill( pColorList );
     173           0 :                 nCount = aLbColorFrom.GetEntryCount();
     174           0 :                 if( nCount == 0 )
     175             :                     ; // this case should not occur
     176           0 :                 else if( nCount <= nPos )
     177           0 :                     aLbColorFrom.SelectEntryPos( 0 );
     178             :                 else
     179           0 :                     aLbColorFrom.SelectEntryPos( nPos );
     180             : 
     181             :                 // LbColorTo
     182           0 :                 nPos = aLbColorTo.GetSelectEntryPos();
     183           0 :                 aLbColorTo.Clear();
     184           0 :                 aLbColorTo.CopyEntries( aLbColorFrom );
     185           0 :                 nCount = aLbColorTo.GetEntryCount();
     186           0 :                 if( nCount == 0 )
     187             :                     ; // this case should not occur
     188           0 :                 else if( nCount <= nPos )
     189           0 :                     aLbColorTo.SelectEntryPos( 0 );
     190             :                 else
     191           0 :                     aLbColorTo.SelectEntryPos( nPos );
     192             : 
     193           0 :                 ModifiedHdl_Impl( this );
     194             :             }
     195             : 
     196             :             // determining (and possibly cutting) the name and
     197             :             // displaying it in the GroupBox
     198           0 :             String          aString( CUI_RES( RID_SVXSTR_TABLE ) ); aString.AppendAscii( ": " );
     199           0 :             INetURLObject   aURL( pGradientList->GetPath() );
     200             : 
     201           0 :             aURL.Append( pGradientList->GetName() );
     202             :             DBG_ASSERT( aURL.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
     203             : 
     204           0 :             if ( aURL.getBase().getLength() > 18 )
     205             :             {
     206           0 :                 aString += String(aURL.getBase()).Copy( 0, 15 );
     207           0 :                 aString.AppendAscii( "..." );
     208             :             }
     209             :             else
     210           0 :                 aString += String(aURL.getBase());
     211             : 
     212           0 :             if ( *pPageType == PT_GRADIENT && *pPos != LISTBOX_ENTRY_NOTFOUND )
     213             :             {
     214           0 :                 aLbGradients.SelectEntryPos( *pPos );
     215             :             }
     216             :             // colors could have been deleted
     217           0 :             ChangeGradientHdl_Impl( this );
     218             : 
     219           0 :             *pPageType = PT_GRADIENT;
     220           0 :             *pPos = LISTBOX_ENTRY_NOTFOUND;
     221             :         }
     222             :     }
     223           0 : }
     224             : 
     225             : // -----------------------------------------------------------------------
     226             : 
     227           0 : int SvxGradientTabPage::DeactivatePage( SfxItemSet* _pSet )
     228             : {
     229           0 :     if( CheckChanges_Impl() == -1L )
     230           0 :         return KEEP_PAGE;
     231             : 
     232           0 :     if( _pSet )
     233           0 :         FillItemSet( *_pSet );
     234             : 
     235           0 :     return LEAVE_PAGE;
     236             : }
     237             : 
     238             : // -----------------------------------------------------------------------
     239             : 
     240           0 : long SvxGradientTabPage::CheckChanges_Impl()
     241             : {
     242             :     // is used here in order to NOT lose changes
     243           0 :     XGradient aTmpGradient( aLbColorFrom.GetSelectEntryColor(),
     244           0 :                           aLbColorTo.GetSelectEntryColor(),
     245           0 :                           (XGradientStyle) aLbGradientType.GetSelectEntryPos(),
     246           0 :                           static_cast<long>(aMtrAngle.GetValue() * 10), // should be changed in resource
     247           0 :                           (sal_uInt16) aMtrCenterX.GetValue(),
     248           0 :                           (sal_uInt16) aMtrCenterY.GetValue(),
     249           0 :                           (sal_uInt16) aMtrBorder.GetValue(),
     250           0 :                           (sal_uInt16) aMtrColorFrom.GetValue(),
     251           0 :                           (sal_uInt16) aMtrColorTo.GetValue() );
     252             : 
     253           0 :     sal_uInt16 nPos = aLbGradients.GetSelectEntryPos();
     254           0 :     if( nPos != LISTBOX_ENTRY_NOTFOUND )
     255             :     {
     256           0 :         XGradient aGradient = pGradientList->GetGradient( nPos )->GetGradient();
     257           0 :         String aString = aLbGradients.GetSelectEntry();
     258             : 
     259           0 :         if( !( aTmpGradient == aGradient ) )
     260             :         {
     261           0 :             ResMgr& rMgr = CUI_MGR();
     262           0 :             Image aWarningBoxImage = WarningBox::GetStandardImage();
     263           0 :             SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
     264             :             DBG_ASSERT(pFact, "Dialogdiet fail!");
     265           0 :             AbstractSvxMessDialog* aMessDlg = pFact->CreateSvxMessDialog( GetParentDialog(), RID_SVXDLG_MESSBOX,
     266           0 :                                                         SVX_RESSTR( RID_SVXSTR_GRADIENT ),
     267           0 :                                                         CUI_RESSTR( RID_SVXSTR_ASK_CHANGE_GRADIENT ),
     268           0 :                                                         &aWarningBoxImage );
     269             :             DBG_ASSERT(aMessDlg, "Dialogdiet fail!");
     270             :             aMessDlg->SetButtonText( MESS_BTN_1,
     271           0 :                                     String( ResId( RID_SVXSTR_CHANGE, rMgr ) ) );
     272             :             aMessDlg->SetButtonText( MESS_BTN_2,
     273           0 :                                     String( ResId( RID_SVXSTR_ADD, rMgr ) ) );
     274             : 
     275           0 :             short nRet = aMessDlg->Execute();
     276             : 
     277           0 :             switch( nRet )
     278             :             {
     279             :                 case RET_BTN_1:
     280             :                 {
     281           0 :                     ClickModifyHdl_Impl( this );
     282           0 :                     aGradient = pGradientList->GetGradient( nPos )->GetGradient();
     283             :                 }
     284           0 :                 break;
     285             : 
     286             :                 case RET_BTN_2:
     287             :                 {
     288           0 :                     ClickAddHdl_Impl( this );
     289           0 :                     nPos = aLbGradients.GetSelectEntryPos();
     290           0 :                     aGradient = pGradientList->GetGradient( nPos )->GetGradient();
     291             :                 }
     292           0 :                 break;
     293             : 
     294             :                 case RET_CANCEL:
     295           0 :                 break;
     296             :             }
     297           0 :             delete aMessDlg;
     298           0 :         }
     299             :     }
     300           0 :     nPos = aLbGradients.GetSelectEntryPos();
     301           0 :     if( nPos != LISTBOX_ENTRY_NOTFOUND )
     302             :     {
     303           0 :         *pPos = nPos;
     304             :     }
     305           0 :     return 0L;
     306             : }
     307             : 
     308             : // -----------------------------------------------------------------------
     309             : 
     310           0 : sal_Bool SvxGradientTabPage::FillItemSet( SfxItemSet& rSet )
     311             : {
     312           0 :     if( *pDlgType == 0 && *pPageType == PT_GRADIENT && *pbAreaTP == sal_False )
     313             :     {
     314             :         // CheckChanges(); <-- duplicate inquiry ?
     315             : 
     316           0 :         XGradient*  pXGradient = NULL;
     317           0 :         String      aString;
     318           0 :         sal_uInt16      nPos = aLbGradients.GetSelectEntryPos();
     319           0 :         if( nPos != LISTBOX_ENTRY_NOTFOUND )
     320             :         {
     321           0 :             pXGradient = new XGradient( pGradientList->GetGradient( nPos )->GetGradient() );
     322           0 :             aString = aLbGradients.GetSelectEntry();
     323             : 
     324             :         }
     325             :         else
     326             :         // gradient was passed (unidentified)
     327             :         {
     328           0 :             pXGradient = new XGradient( aLbColorFrom.GetSelectEntryColor(),
     329           0 :                         aLbColorTo.GetSelectEntryColor(),
     330           0 :                         (XGradientStyle) aLbGradientType.GetSelectEntryPos(),
     331           0 :                         static_cast<long>(aMtrAngle.GetValue() * 10), // should be changed in resource
     332           0 :                         (sal_uInt16) aMtrCenterX.GetValue(),
     333           0 :                         (sal_uInt16) aMtrCenterY.GetValue(),
     334           0 :                         (sal_uInt16) aMtrBorder.GetValue(),
     335           0 :                         (sal_uInt16) aMtrColorFrom.GetValue(),
     336           0 :                         (sal_uInt16) aMtrColorTo.GetValue() );
     337             :         }
     338             :         DBG_ASSERT( pXGradient, "XGradient konnte nicht erzeugt werden" );
     339           0 :         rSet.Put( XFillStyleItem( XFILL_GRADIENT ) );
     340           0 :         rSet.Put( XFillGradientItem( aString, *pXGradient ) );
     341             : 
     342           0 :         delete pXGradient;
     343             :     }
     344           0 :     return sal_True;
     345             : }
     346             : 
     347             : // -----------------------------------------------------------------------
     348             : 
     349           0 : void SvxGradientTabPage::Reset( const SfxItemSet& )
     350             : {
     351             :     // aLbGradients.SelectEntryPos( 0 );
     352           0 :     ChangeGradientHdl_Impl( this );
     353             : 
     354             :     // determine state of the buttons
     355           0 :     if( pGradientList->Count() )
     356             :     {
     357           0 :         aBtnModify.Enable();
     358           0 :         aBtnDelete.Enable();
     359           0 :         aBtnSave.Enable();
     360             :     }
     361             :     else
     362             :     {
     363           0 :         aBtnModify.Disable();
     364           0 :         aBtnDelete.Disable();
     365           0 :         aBtnSave.Disable();
     366             :     }
     367           0 : }
     368             : 
     369             : // -----------------------------------------------------------------------
     370             : 
     371           0 : SfxTabPage* SvxGradientTabPage::Create( Window* pWindow,
     372             :                 const SfxItemSet& rOutAttrs )
     373             : {
     374           0 :     return new SvxGradientTabPage( pWindow, rOutAttrs );
     375             : }
     376             : 
     377             : //------------------------------------------------------------------------
     378             : 
     379           0 : IMPL_LINK( SvxGradientTabPage, ModifiedHdl_Impl, void *, pControl )
     380             : {
     381           0 :     XGradientStyle eXGS = (XGradientStyle) aLbGradientType.GetSelectEntryPos();
     382             : 
     383           0 :     XGradient aXGradient( aLbColorFrom.GetSelectEntryColor(),
     384           0 :                           aLbColorTo.GetSelectEntryColor(),
     385             :                           eXGS,
     386           0 :                           static_cast<long>(aMtrAngle.GetValue() * 10), // should be changed in resource
     387           0 :                           (sal_uInt16) aMtrCenterX.GetValue(),
     388           0 :                           (sal_uInt16) aMtrCenterY.GetValue(),
     389           0 :                           (sal_uInt16) aMtrBorder.GetValue(),
     390           0 :                           (sal_uInt16) aMtrColorFrom.GetValue(),
     391           0 :                           (sal_uInt16) aMtrColorTo.GetValue() );
     392             : 
     393             :     // enable/disable controls
     394           0 :     if( pControl == &aLbGradientType || pControl == this )
     395           0 :         SetControlState_Impl( eXGS );
     396             : 
     397             :     // displaying in XOutDev
     398           0 :     rXFSet.Put( XFillGradientItem( String(), aXGradient ) );
     399           0 :     aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() );
     400             : 
     401           0 :     aCtlPreview.Invalidate();
     402             : 
     403           0 :     return 0L;
     404             : }
     405             : 
     406             : //------------------------------------------------------------------------
     407             : 
     408           0 : IMPL_LINK_NOARG(SvxGradientTabPage, ClickAddHdl_Impl)
     409             : {
     410           0 :     ResMgr& rMgr = CUI_MGR();
     411           0 :     String aNewName( SVX_RES( RID_SVXSTR_GRADIENT ) );
     412           0 :     String aDesc( CUI_RES( RID_SVXSTR_DESC_GRADIENT ) );
     413           0 :     String aName;
     414             : 
     415           0 :     long nCount = pGradientList->Count();
     416           0 :     long j = 1;
     417           0 :     sal_Bool bDifferent = sal_False;
     418             : 
     419           0 :     while( !bDifferent )
     420             :     {
     421           0 :         aName  = aNewName;
     422           0 :         aName += sal_Unicode(' ');
     423           0 :         aName += OUString::valueOf( j++ );
     424           0 :         bDifferent = sal_True;
     425             : 
     426           0 :         for( long i = 0; i < nCount && bDifferent; i++ )
     427           0 :             if( aName == pGradientList->GetGradient( i )->GetName() )
     428           0 :                 bDifferent = sal_False;
     429             :     }
     430             : 
     431           0 :     SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
     432             :     DBG_ASSERT(pFact, "Dialogdiet fail!");
     433           0 :     AbstractSvxNameDialog* pDlg = pFact->CreateSvxNameDialog( GetParentDialog(), aName, aDesc );
     434             :     DBG_ASSERT(pDlg, "Dialogdiet fail!");
     435           0 :     WarningBox*    pWarnBox = NULL;
     436           0 :     sal_uInt16         nError   = RID_SVXSTR_WARN_NAME_DUPLICATE;
     437             : 
     438           0 :     while( pDlg->Execute() == RET_OK )
     439             :     {
     440           0 :         pDlg->GetName( aName );
     441             : 
     442           0 :         bDifferent = sal_True;
     443             : 
     444           0 :         for( long i = 0; i < nCount && bDifferent; i++ )
     445           0 :             if( aName == pGradientList->GetGradient( i )->GetName() )
     446           0 :                 bDifferent = sal_False;
     447             : 
     448           0 :         if( bDifferent )
     449             :         {
     450           0 :             nError = 0;
     451           0 :             break;
     452             :         }
     453             : 
     454           0 :         if( !pWarnBox )
     455             :         {
     456           0 :             pWarnBox = new WarningBox( GetParentDialog(),
     457             :                                        WinBits( WB_OK_CANCEL ),
     458           0 :                                        String( ResId( nError, rMgr ) ) );
     459           0 :             pWarnBox->SetHelpId( HID_WARN_NAME_DUPLICATE );
     460             :         }
     461             : 
     462           0 :         if( pWarnBox->Execute() != RET_OK )
     463           0 :             break;
     464             :     }
     465           0 :     delete pDlg;
     466           0 :     delete pWarnBox;
     467             : 
     468           0 :     if( !nError )
     469             :     {
     470           0 :         XGradient aXGradient( aLbColorFrom.GetSelectEntryColor(),
     471           0 :                               aLbColorTo.GetSelectEntryColor(),
     472           0 :                               (XGradientStyle) aLbGradientType.GetSelectEntryPos(),
     473           0 :                               static_cast<long>(aMtrAngle.GetValue() * 10), // should be changed in resource
     474           0 :                               (sal_uInt16) aMtrCenterX.GetValue(),
     475           0 :                               (sal_uInt16) aMtrCenterY.GetValue(),
     476           0 :                               (sal_uInt16) aMtrBorder.GetValue(),
     477           0 :                               (sal_uInt16) aMtrColorFrom.GetValue(),
     478           0 :                               (sal_uInt16) aMtrColorTo.GetValue() );
     479           0 :         XGradientEntry* pEntry = new XGradientEntry( aXGradient, aName );
     480             : 
     481           0 :         pGradientList->Insert( pEntry, nCount );
     482             : 
     483           0 :         aLbGradients.Append( pEntry );
     484             : 
     485           0 :         aLbGradients.SelectEntryPos( aLbGradients.GetEntryCount() - 1 );
     486             : 
     487             : #ifdef WNT
     488             :         // hack: #31355# W.P.
     489             :         Rectangle aRect( aLbGradients.GetPosPixel(), aLbGradients.GetSizePixel() );
     490             :         if( sal_True ) {                // ??? overlapped with pDlg
     491             :                                     // and srolling
     492             :             Invalidate( aRect );
     493             :         }
     494             : #endif
     495             : 
     496           0 :         *pnGradientListState |= CT_MODIFIED;
     497             : 
     498           0 :         ChangeGradientHdl_Impl( this );
     499             :     }
     500             : 
     501             :     // determine button state
     502           0 :     if( pGradientList->Count() )
     503             :     {
     504           0 :         aBtnModify.Enable();
     505           0 :         aBtnDelete.Enable();
     506           0 :         aBtnSave.Enable();
     507             :     }
     508           0 :     return 0L;
     509             : }
     510             : 
     511             : //------------------------------------------------------------------------
     512             : 
     513           0 : IMPL_LINK_NOARG(SvxGradientTabPage, ClickModifyHdl_Impl)
     514             : {
     515           0 :     sal_uInt16 nPos = aLbGradients.GetSelectEntryPos();
     516             : 
     517           0 :     if ( nPos != LISTBOX_ENTRY_NOTFOUND )
     518             :     {
     519           0 :         ResMgr& rMgr = CUI_MGR();
     520           0 :         String aNewName( SVX_RES( RID_SVXSTR_GRADIENT ) );
     521           0 :         String aDesc( CUI_RES( RID_SVXSTR_DESC_GRADIENT ) );
     522           0 :         String aName( pGradientList->GetGradient( nPos )->GetName() );
     523           0 :         String aOldName = aName;
     524             : 
     525           0 :         SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
     526             :         DBG_ASSERT(pFact, "Dialogdiet fail!");
     527           0 :         AbstractSvxNameDialog* pDlg = pFact->CreateSvxNameDialog( GetParentDialog(), aName, aDesc );
     528             :         DBG_ASSERT(pDlg, "Dialogdiet fail!");
     529             : 
     530           0 :         long nCount = pGradientList->Count();
     531           0 :         sal_Bool bDifferent = sal_False;
     532           0 :         sal_Bool bLoop = sal_True;
     533             : 
     534           0 :         while( bLoop && pDlg->Execute() == RET_OK )
     535             :         {
     536           0 :             pDlg->GetName( aName );
     537           0 :             bDifferent = sal_True;
     538             : 
     539           0 :             for( long i = 0; i < nCount && bDifferent; i++ )
     540             :             {
     541           0 :                 if( aName == pGradientList->GetGradient( i )->GetName() &&
     542           0 :                     aName != aOldName )
     543           0 :                     bDifferent = sal_False;
     544             :             }
     545             : 
     546           0 :             if( bDifferent )
     547             :             {
     548           0 :                 bLoop = sal_False;
     549           0 :                 XGradient aXGradient( aLbColorFrom.GetSelectEntryColor(),
     550           0 :                                       aLbColorTo.GetSelectEntryColor(),
     551           0 :                                       (XGradientStyle) aLbGradientType.GetSelectEntryPos(),
     552           0 :                                       static_cast<long>(aMtrAngle.GetValue() * 10), // should be changed in resource
     553           0 :                                       (sal_uInt16) aMtrCenterX.GetValue(),
     554           0 :                                       (sal_uInt16) aMtrCenterY.GetValue(),
     555           0 :                                       (sal_uInt16) aMtrBorder.GetValue(),
     556           0 :                                       (sal_uInt16) aMtrColorFrom.GetValue(),
     557           0 :                                       (sal_uInt16) aMtrColorTo.GetValue() );
     558             : 
     559           0 :                 XGradientEntry* pEntry = new XGradientEntry( aXGradient, aName );
     560             : 
     561           0 :                 delete pGradientList->Replace( pEntry, nPos );
     562             : 
     563           0 :                 aLbGradients.Modify( pEntry, nPos );
     564             : 
     565           0 :                 aLbGradients.SelectEntryPos( nPos );
     566             : 
     567           0 :                 *pnGradientListState |= CT_MODIFIED;
     568             :             }
     569             :             else
     570             :             {
     571           0 :                 WarningBox aBox( GetParentDialog(), WinBits( WB_OK ),String( ResId( RID_SVXSTR_WARN_NAME_DUPLICATE, rMgr ) ) );
     572           0 :                 aBox.SetHelpId( HID_WARN_NAME_DUPLICATE );
     573           0 :                 aBox.Execute();
     574             :             }
     575             : 
     576             :         }
     577           0 :         delete pDlg;
     578             :     }
     579           0 :     return 0L;
     580             : }
     581             : 
     582             : //------------------------------------------------------------------------
     583             : 
     584           0 : IMPL_LINK_NOARG(SvxGradientTabPage, ClickDeleteHdl_Impl)
     585             : {
     586           0 :     sal_uInt16 nPos = aLbGradients.GetSelectEntryPos();
     587             : 
     588           0 :     if( nPos != LISTBOX_ENTRY_NOTFOUND )
     589             :     {
     590           0 :         QueryBox aQueryBox( GetParentDialog(), WinBits( WB_YES_NO | WB_DEF_NO ),
     591           0 :             String( CUI_RES( RID_SVXSTR_ASK_DEL_GRADIENT ) ) );
     592             : 
     593           0 :         if ( aQueryBox.Execute() == RET_YES )
     594             :         {
     595           0 :             delete pGradientList->Remove( nPos );
     596           0 :             aLbGradients.RemoveEntry( nPos );
     597           0 :             aLbGradients.SelectEntryPos( 0 );
     598             : 
     599           0 :             aCtlPreview.Invalidate();
     600             : 
     601           0 :             ChangeGradientHdl_Impl( this );
     602             : 
     603           0 :             *pnGradientListState |= CT_MODIFIED;
     604           0 :         }
     605             :     }
     606             :     // determine button state
     607           0 :     if( !pGradientList->Count() )
     608             :     {
     609           0 :         aBtnModify.Disable();
     610           0 :         aBtnDelete.Disable();
     611           0 :         aBtnSave.Disable();
     612             :     }
     613           0 :     return 0L;
     614             : }
     615             : 
     616             : // -----------------------------------------------------------------------
     617             : 
     618           0 : IMPL_LINK_NOARG(SvxGradientTabPage, ClickLoadHdl_Impl)
     619             : {
     620           0 :     ResMgr& rMgr = CUI_MGR();
     621           0 :     sal_uInt16 nReturn = RET_YES;
     622             : 
     623           0 :     if ( *pnGradientListState & CT_MODIFIED )
     624             :     {
     625           0 :         nReturn = WarningBox( GetParentDialog(), WinBits( WB_YES_NO_CANCEL ),
     626           0 :             String( ResId( RID_SVXSTR_WARN_TABLE_OVERWRITE, rMgr ) ) ).Execute();
     627             : 
     628           0 :         if ( nReturn == RET_YES )
     629           0 :             pGradientList->Save();
     630             :     }
     631             : 
     632           0 :     if ( nReturn != RET_CANCEL )
     633             :     {
     634             :         ::sfx2::FileDialogHelper aDlg(
     635             :             com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE,
     636           0 :             0 );
     637           0 :         String aStrFilterType( "*.sog" );
     638           0 :         aDlg.AddFilter( aStrFilterType, aStrFilterType );
     639           0 :         INetURLObject aFile( SvtPathOptions().GetPalettePath() );
     640           0 :         aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
     641             : 
     642           0 :         if( aDlg.Execute() == ERRCODE_NONE )
     643             :         {
     644           0 :             EnterWait();
     645             : 
     646           0 :             INetURLObject aURL( aDlg.GetPath() );
     647           0 :             INetURLObject aPathURL( aURL );
     648             : 
     649           0 :             aPathURL.removeSegment();
     650           0 :             aPathURL.removeFinalSlash();
     651             : 
     652             :             // save list
     653             :             XGradientListRef pGrdList = XPropertyList::CreatePropertyList(
     654           0 :                 XGRADIENT_LIST, aPathURL.GetMainURL( INetURLObject::NO_DECODE ), pXPool )->AsGradientList();
     655           0 :             pGrdList->SetName( aURL.getName() );
     656             : 
     657           0 :             if ( pGrdList->Load() )
     658             :             {
     659           0 :                 pGradientList = pGrdList;
     660           0 :                 ( (SvxAreaTabDialog*) GetParentDialog() )->
     661           0 :                     SetNewGradientList( pGradientList );
     662             : 
     663           0 :                 aLbGradients.Clear();
     664           0 :                 aLbGradients.Fill( pGradientList );
     665           0 :                 Reset( rOutAttrs );
     666             : 
     667           0 :                 pGradientList->SetName( aURL.getName() );
     668             : 
     669             :                 // determining (possibly cutting) the name
     670             :                 // and displaying it in the GroupBox
     671           0 :                 String aString( ResId( RID_SVXSTR_TABLE, rMgr ) );
     672           0 :                 aString.AppendAscii( ": " );
     673             : 
     674           0 :                 if ( aURL.getBase().getLength() > 18 )
     675             :                 {
     676           0 :                     aString += String(aURL.getBase()).Copy( 0, 15 );
     677           0 :                     aString.AppendAscii( "..." );
     678             :                 }
     679             :                 else
     680           0 :                     aString += String(aURL.getBase());
     681             : 
     682           0 :                 *pnGradientListState |= CT_CHANGED;
     683           0 :                 *pnGradientListState &= ~CT_MODIFIED;
     684           0 :                 LeaveWait();
     685             :             }
     686             :             else
     687             :             {
     688           0 :                 LeaveWait();
     689           0 :                 ErrorBox( GetParentDialog(), WinBits( WB_OK ),
     690           0 :                     String( ResId( RID_SVXSTR_READ_DATA_ERROR, rMgr ) ) ).Execute();
     691           0 :             }
     692           0 :         }
     693             :     }
     694             : 
     695             :     // determine button state
     696           0 :     if( pGradientList->Count() )
     697             :     {
     698           0 :         aBtnModify.Enable();
     699           0 :         aBtnDelete.Enable();
     700           0 :         aBtnSave.Enable();
     701             :     }
     702             :     else
     703             :     {
     704           0 :         aBtnModify.Disable();
     705           0 :         aBtnDelete.Disable();
     706           0 :         aBtnSave.Disable();
     707             :     }
     708           0 :     return 0L;
     709             : }
     710             : 
     711             : // -----------------------------------------------------------------------
     712             : 
     713           0 : IMPL_LINK_NOARG(SvxGradientTabPage, ClickSaveHdl_Impl)
     714             : {
     715             :     ::sfx2::FileDialogHelper aDlg(
     716           0 :         com::sun::star::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, 0 );
     717           0 :     String aStrFilterType( "*.sog" );
     718           0 :     aDlg.AddFilter( aStrFilterType, aStrFilterType );
     719             : 
     720           0 :     INetURLObject aFile( SvtPathOptions().GetPalettePath() );
     721             :     DBG_ASSERT( aFile.GetProtocol() != INET_PROT_NOT_VALID, "invalid URL" );
     722             : 
     723           0 :     if( pGradientList->GetName().Len() )
     724             :     {
     725           0 :         aFile.Append( pGradientList->GetName() );
     726             : 
     727           0 :         if( aFile.getExtension().isEmpty() )
     728           0 :             aFile.SetExtension( OUString("sog") );
     729             :     }
     730             : 
     731           0 :     aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
     732           0 :     if ( aDlg.Execute() == ERRCODE_NONE )
     733             :     {
     734           0 :         INetURLObject   aURL( aDlg.GetPath() );
     735           0 :         INetURLObject   aPathURL( aURL );
     736             : 
     737           0 :         aPathURL.removeSegment();
     738           0 :         aPathURL.removeFinalSlash();
     739             : 
     740           0 :         pGradientList->SetName( aURL.getName() );
     741           0 :         pGradientList->SetPath( aPathURL.GetMainURL( INetURLObject::NO_DECODE ) );
     742             : 
     743           0 :         if( pGradientList->Save() )
     744             :         {
     745             :             // determining (possibly cutting) the name
     746             :             // and displaying it in the GroupBox
     747           0 :             String aString( CUI_RES( RID_SVXSTR_TABLE ) );
     748           0 :             aString.AppendAscii( ": " );
     749             : 
     750           0 :             if ( aURL.getBase().getLength() > 18 )
     751             :             {
     752           0 :                 aString += String(aURL.getBase()).Copy( 0, 15 );
     753           0 :                 aString.AppendAscii( "..." );
     754             :             }
     755             :             else
     756           0 :                 aString += String(aURL.getBase());
     757             : 
     758           0 :             *pnGradientListState |= CT_SAVED;
     759           0 :             *pnGradientListState &= ~CT_MODIFIED;
     760             :         }
     761             :         else
     762             :         {
     763           0 :             ErrorBox( GetParentDialog(), WinBits( WB_OK ),
     764           0 :                 String( CUI_RES( RID_SVXSTR_WRITE_DATA_ERROR ) ) ).Execute();
     765           0 :         }
     766             :     }
     767             : 
     768           0 :     return 0L;
     769             : }
     770             : 
     771             : //------------------------------------------------------------------------
     772             : 
     773           0 : IMPL_LINK_NOARG(SvxGradientTabPage, ChangeGradientHdl_Impl)
     774             : {
     775           0 :     XGradient* pGradient = NULL;
     776           0 :     int nPos = aLbGradients.GetSelectEntryPos();
     777             : 
     778           0 :     if( nPos != LISTBOX_ENTRY_NOTFOUND )
     779           0 :         pGradient = new XGradient( ( (XGradientEntry*) pGradientList->GetGradient( nPos ) )->GetGradient() );
     780             :     else
     781             :     {
     782           0 :         const SfxPoolItem* pPoolItem = NULL;
     783           0 :         if( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLSTYLE ), sal_True, &pPoolItem ) )
     784             :         {
     785           0 :             if( ( XFILL_GRADIENT == (XFillStyle) ( ( const XFillStyleItem* ) pPoolItem )->GetValue() ) &&
     786           0 :                 ( SFX_ITEM_SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLGRADIENT ), sal_True, &pPoolItem ) ) )
     787             :             {
     788           0 :                 pGradient = new XGradient( ( ( const XFillGradientItem* ) pPoolItem )->GetGradientValue() );
     789             :             }
     790             :         }
     791           0 :         if( !pGradient )
     792             :         {
     793           0 :             aLbGradients.SelectEntryPos( 0 );
     794           0 :             nPos = aLbGradients.GetSelectEntryPos();
     795           0 :             if( nPos != LISTBOX_ENTRY_NOTFOUND )
     796           0 :                 pGradient = new XGradient( ( (XGradientEntry*) pGradientList->GetGradient( nPos ) )->GetGradient() );
     797             :         }
     798             :     }
     799             : 
     800           0 :     if( pGradient )
     801             :     {
     802           0 :         XGradientStyle eXGS = pGradient->GetGradientStyle();
     803             : 
     804             :         aLbGradientType.SelectEntryPos(
     805           0 :             sal::static_int_cast< sal_uInt16 >( eXGS ) );
     806             :         // if the entry is not in the listbox ist,
     807             :         // colors are added temporarily
     808           0 :         aLbColorFrom.SetNoSelection();
     809           0 :         aLbColorFrom.SelectEntry( pGradient->GetStartColor() );
     810             : 
     811           0 :         if ( aLbColorFrom.GetSelectEntryCount() == 0 )
     812             :         {
     813             :             aLbColorFrom.InsertEntry( pGradient->GetStartColor(),
     814           0 :                                       String() );
     815           0 :             aLbColorFrom.SelectEntry( pGradient->GetStartColor() );
     816             :         }
     817           0 :         aLbColorTo.SetNoSelection();
     818           0 :         aLbColorTo.SelectEntry( pGradient->GetEndColor() );
     819             : 
     820           0 :         if ( aLbColorTo.GetSelectEntryCount() == 0 )
     821             :         {
     822           0 :             aLbColorTo.InsertEntry( pGradient->GetEndColor(), String() );
     823           0 :             aLbColorTo.SelectEntry( pGradient->GetEndColor() );
     824             :         }
     825             : 
     826           0 :         aMtrAngle.SetValue( pGradient->GetAngle() / 10 ); // should be changed in resource
     827           0 :         aMtrBorder.SetValue( pGradient->GetBorder() );
     828           0 :         aMtrCenterX.SetValue( pGradient->GetXOffset() );
     829           0 :         aMtrCenterY.SetValue( pGradient->GetYOffset() );
     830           0 :         aMtrColorFrom.SetValue( pGradient->GetStartIntens() );
     831           0 :         aMtrColorTo.SetValue( pGradient->GetEndIntens() );
     832             : 
     833             :         // disable/enable controls
     834           0 :         SetControlState_Impl( eXGS );
     835             : 
     836             :         // fill ItemSet and pass it on to aCtlPreview
     837           0 :         rXFSet.Put( XFillGradientItem( String(), *pGradient ) );
     838           0 :         aCtlPreview.SetAttributes( aXFillAttr.GetItemSet() );
     839             : 
     840           0 :         aCtlPreview.Invalidate();
     841           0 :         delete pGradient;
     842             :     }
     843           0 :     return 0L;
     844             : }
     845             : 
     846             : //------------------------------------------------------------------------
     847             : 
     848           0 : void SvxGradientTabPage::SetControlState_Impl( XGradientStyle eXGS )
     849             : {
     850           0 :     switch( eXGS )
     851             :     {
     852             :         case XGRAD_LINEAR:
     853             :         case XGRAD_AXIAL:
     854           0 :             aFtCenterX.Disable();
     855           0 :             aMtrCenterX.Disable();
     856           0 :             aFtCenterY.Disable();
     857           0 :             aMtrCenterY.Disable();
     858           0 :             aFtAngle.Enable();
     859           0 :             aMtrAngle.Enable();
     860           0 :             break;
     861             : 
     862             :         case XGRAD_RADIAL:
     863           0 :             aFtCenterX.Enable();
     864           0 :             aMtrCenterX.Enable();
     865           0 :             aFtCenterY.Enable();
     866           0 :             aMtrCenterY.Enable();
     867           0 :             aFtAngle.Disable();
     868           0 :             aMtrAngle.Disable();
     869           0 :             break;
     870             : 
     871             :         case XGRAD_ELLIPTICAL:
     872           0 :             aFtCenterX.Enable();
     873           0 :             aMtrCenterX.Enable();
     874           0 :             aFtCenterY.Enable();
     875           0 :             aMtrCenterY.Enable();
     876           0 :             aFtAngle.Enable();
     877           0 :             aMtrAngle.Enable();
     878           0 :             break;
     879             : 
     880             :         case XGRAD_SQUARE:
     881             :         case XGRAD_RECT:
     882           0 :             aFtCenterX.Enable();
     883           0 :             aMtrCenterX.Enable();
     884           0 :             aFtCenterY.Enable();
     885           0 :             aMtrCenterY.Enable();
     886           0 :             aFtAngle.Enable();
     887           0 :             aMtrAngle.Enable();
     888           0 :             break;
     889             :     }
     890           6 : }
     891             : 
     892             : 
     893             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10