LCOV - code coverage report
Current view: top level - cui/source/tabpages - tplneend.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 0 336 0.0 %
Date: 2015-06-13 12:38:46 Functions: 0 28 0.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 <tools/urlobj.hxx>
      21             : #include <vcl/msgbox.hxx>
      22             : #include <vcl/settings.hxx>
      23             : #include <unotools/pathoptions.hxx>
      24             : #include <sfx2/app.hxx>
      25             : #include <sfx2/filedlghelper.hxx>
      26             : #include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
      27             : 
      28             : #include <cuires.hrc>
      29             : #include "helpid.hrc"
      30             : #include <svx/dialmgr.hxx>
      31             : #include <svx/svdobj.hxx>
      32             : #include <svx/svdopath.hxx>
      33             : #include "svx/drawitem.hxx"
      34             : #include <svx/xpool.hxx>
      35             : #include <svx/xtable.hxx>
      36             : #include "cuitabline.hxx"
      37             : #include <svx/svxdlg.hxx>
      38             : #include <dialmgr.hxx>
      39             : #include "svx/dlgutil.hxx"
      40             : #include <basegfx/range/b2drange.hxx>
      41             : #include <basegfx/polygon/b2dpolygontools.hxx>
      42             : #include <basegfx/matrix/b2dhommatrix.hxx>
      43             : #include <basegfx/polygon/b2dpolygon.hxx>
      44             : #include <basegfx/polygon/b2dpolypolygontools.hxx>
      45             : #include <basegfx/matrix/b2dhommatrixtools.hxx>
      46             : #include <svx/dialogs.hrc>
      47             : #include <boost/scoped_ptr.hpp>
      48             : 
      49             : #define XOUT_WIDTH    150
      50             : 
      51           0 : SvxLineEndDefTabPage::SvxLineEndDefTabPage
      52             : (
      53             :     vcl::Window* pParent,
      54             :     const SfxItemSet& rInAttrs
      55             : ) :
      56             : 
      57             :     SfxTabPage( pParent
      58             :               , "LineEndPage"
      59             :               , "cui/ui/lineendstabpage.ui"
      60             :               , &rInAttrs ),
      61             :     rOutAttrs           ( rInAttrs ),
      62             :     pPolyObj            ( NULL ),
      63             :     bObjSelected        ( false ),
      64             : 
      65           0 :     pXPool              ( static_cast<XOutdevItemPool*>(rInAttrs.GetPool()) ),
      66             :     aXLStyle            ( com::sun::star::drawing::LineStyle_SOLID ),
      67             :     aXWidth             ( XOUT_WIDTH ),
      68             :     aXColor             ( OUString(), COL_BLACK ),
      69             :     aXLineAttr          ( pXPool ),
      70           0 :     rXLSet              ( aXLineAttr.GetItemSet() ),
      71             :     pLineEndList        ( NULL ),
      72             :     pnLineEndListState  ( NULL ),
      73             :     pPageType           ( NULL ),
      74             :     nDlgType            ( 0 ),
      75           0 :     pPosLineEndLb       ( NULL )
      76             : {
      77           0 :     get(m_pEdtName,"EDT_NAME");
      78           0 :     get(m_pLbLineEnds,"LB_LINEENDS");
      79           0 :     get(m_pBtnAdd,"BTN_ADD");
      80           0 :     get(m_pBtnModify,"BTN_MODIFY");
      81           0 :     get(m_pBtnDelete,"BTN_DELETE");
      82           0 :     get(m_pBtnLoad,"BTN_LOAD");
      83           0 :     get(m_pBtnSave,"BTN_SAVE");
      84           0 :     get(m_pCtlPreview,"CTL_PREVIEW");
      85             : 
      86             :     // this page needs ExchangeSupport
      87           0 :     SetExchangeSupport();
      88             : 
      89           0 :     rXLSet.Put( aXLStyle );
      90           0 :     rXLSet.Put( aXWidth );
      91           0 :     rXLSet.Put( aXColor );
      92           0 :     rXLSet.Put( XLineStartWidthItem( m_pCtlPreview->GetOutputSize().Height()  / 2 ) );
      93           0 :     rXLSet.Put( XLineEndWidthItem( m_pCtlPreview->GetOutputSize().Height() / 2 ) );
      94             : 
      95             :     // #i34740#
      96           0 :     m_pCtlPreview->SetLineAttributes(aXLineAttr.GetItemSet());
      97             : 
      98           0 :     m_pBtnAdd->SetClickHdl( LINK( this, SvxLineEndDefTabPage, ClickAddHdl_Impl ) );
      99           0 :     m_pBtnModify->SetClickHdl( LINK( this, SvxLineEndDefTabPage, ClickModifyHdl_Impl ) );
     100           0 :     m_pBtnDelete->SetClickHdl( LINK( this, SvxLineEndDefTabPage, ClickDeleteHdl_Impl ) );
     101           0 :     m_pBtnLoad->SetClickHdl( LINK( this, SvxLineEndDefTabPage, ClickLoadHdl_Impl ) );
     102           0 :     m_pBtnSave->SetClickHdl( LINK( this, SvxLineEndDefTabPage, ClickSaveHdl_Impl ) );
     103             : 
     104           0 :     m_pLbLineEnds->SetSelectHdl( LINK( this, SvxLineEndDefTabPage, SelectLineEndHdl_Impl ) );
     105             : 
     106           0 : }
     107             : 
     108           0 : SvxLineEndDefTabPage::~SvxLineEndDefTabPage()
     109             : {
     110           0 :     disposeOnce();
     111           0 : }
     112             : 
     113           0 : void SvxLineEndDefTabPage::dispose()
     114             : {
     115           0 :     m_pEdtName.clear();
     116           0 :     m_pLbLineEnds.clear();
     117           0 :     m_pBtnAdd.clear();
     118           0 :     m_pBtnModify.clear();
     119           0 :     m_pBtnDelete.clear();
     120           0 :     m_pBtnLoad.clear();
     121           0 :     m_pBtnSave.clear();
     122           0 :     m_pCtlPreview.clear();
     123           0 :     SfxTabPage::dispose();
     124           0 : }
     125             : 
     126           0 : void SvxLineEndDefTabPage::Resize()
     127             : {
     128           0 :     rXLSet.Put(XLineStartWidthItem(m_pCtlPreview->GetOutputSize().Height()  / 2 ));
     129           0 :     rXLSet.Put(XLineEndWidthItem(m_pCtlPreview->GetOutputSize().Height() / 2 ));
     130           0 :     SfxTabPage::Resize();
     131           0 : }
     132             : 
     133             : 
     134             : 
     135           0 : void SvxLineEndDefTabPage::Construct()
     136             : {
     137           0 :     m_pLbLineEnds->Fill( pLineEndList );
     138             : 
     139           0 :     bool bCreateArrowPossible = true;
     140             : 
     141           0 :     if( !pPolyObj )
     142             :     {
     143           0 :         bCreateArrowPossible = false;
     144             :     }
     145           0 :     else if( !pPolyObj->ISA( SdrPathObj ) )
     146             :     {
     147           0 :         SdrObjTransformInfoRec aInfoRec;
     148           0 :         pPolyObj->TakeObjInfo( aInfoRec );
     149           0 :         SdrObject* pNewObj = 0;
     150           0 :         if( aInfoRec.bCanConvToPath )
     151           0 :             pNewObj = pPolyObj->ConvertToPolyObj( true, false );
     152             : 
     153           0 :         bCreateArrowPossible = pNewObj && pNewObj->ISA( SdrPathObj );
     154           0 :         SdrObject::Free( pNewObj );
     155             :     }
     156             : 
     157           0 :     if( !bCreateArrowPossible )
     158           0 :         m_pBtnAdd->Disable();
     159           0 : }
     160             : 
     161             : 
     162             : 
     163           0 : void SvxLineEndDefTabPage::ActivatePage( const SfxItemSet& )
     164             : {
     165           0 :     if( nDlgType == 0 ) // area dialog
     166             :     {
     167             :         // ActivatePage() is called before the dialog receives PageCreated() !!!
     168           0 :         if( pLineEndList.is() )
     169             :         {
     170           0 :             if( *pPosLineEndLb != LISTBOX_ENTRY_NOTFOUND )
     171             :             {
     172           0 :                 m_pLbLineEnds->SelectEntryPos( *pPosLineEndLb );
     173           0 :                 SelectLineEndHdl_Impl( this );
     174             :             }
     175           0 :             INetURLObject   aURL( pLineEndList->GetPath() );
     176             : 
     177           0 :             aURL.Append( pLineEndList->GetName() );
     178             :             DBG_ASSERT( aURL.GetProtocol() != INetProtocol::NotValid, "invalid URL" );
     179           0 :             *pPageType = 0; // 3
     180           0 :             *pPosLineEndLb = LISTBOX_ENTRY_NOTFOUND;
     181             :         }
     182             :     }
     183           0 : }
     184             : 
     185             : 
     186             : 
     187           0 : SfxTabPage::sfxpg SvxLineEndDefTabPage::DeactivatePage( SfxItemSet* _pSet )
     188             : {
     189           0 :     CheckChanges_Impl();
     190             : 
     191           0 :     if( _pSet )
     192           0 :         FillItemSet( _pSet );
     193             : 
     194           0 :     return LEAVE_PAGE;
     195             : }
     196             : 
     197             : 
     198             : 
     199           0 : void SvxLineEndDefTabPage::CheckChanges_Impl()
     200             : {
     201           0 :     sal_Int32 nPos = m_pLbLineEnds->GetSelectEntryPos();
     202             : 
     203           0 :     if ( nPos != LISTBOX_ENTRY_NOTFOUND )
     204             :     {
     205           0 :         OUString aString = m_pEdtName->GetText();
     206             : 
     207           0 :         if( aString != m_pLbLineEnds->GetSelectEntry() )
     208             :         {
     209           0 :             ScopedVclPtrInstance<MessageDialog> aQueryBox( GetParentDialog()
     210             :                                                            ,"AskChangeLineEndDialog"
     211           0 :                                                            ,"cui/ui/querychangelineenddialog.ui" );
     212           0 :             if ( aQueryBox->Execute() == RET_YES )
     213           0 :                 ClickModifyHdl_Impl( this );
     214           0 :         }
     215             :     }
     216           0 :     nPos = m_pLbLineEnds->GetSelectEntryPos();
     217             : 
     218           0 :     if ( nPos != LISTBOX_ENTRY_NOTFOUND )
     219           0 :         *pPosLineEndLb = nPos;
     220           0 : }
     221             : 
     222             : 
     223             : 
     224           0 : bool SvxLineEndDefTabPage::FillItemSet( SfxItemSet* rSet )
     225             : {
     226           0 :     if( nDlgType == 0 ) // line dialog
     227             :     {
     228           0 :         if( *pPageType == 3 )
     229             :         {
     230           0 :             CheckChanges_Impl();
     231             : 
     232           0 :             long nPos = m_pLbLineEnds->GetSelectEntryPos();
     233           0 :             XLineEndEntry* pEntry = pLineEndList->GetLineEnd( nPos );
     234             : 
     235           0 :             rSet->Put( XLineStartItem( pEntry->GetName(), pEntry->GetLineEnd() ) );
     236           0 :             rSet->Put( XLineEndItem( pEntry->GetName(), pEntry->GetLineEnd() ) );
     237             :         }
     238             :     }
     239           0 :     return true;
     240             : }
     241             : 
     242             : 
     243             : 
     244           0 : void SvxLineEndDefTabPage::Reset( const SfxItemSet* )
     245             : {
     246           0 :     m_pLbLineEnds->SelectEntryPos( 0 );
     247             : 
     248             :     // Update lineend
     249           0 :     if( pLineEndList->Count() > 0 )
     250             :     {
     251           0 :         int nPos = m_pLbLineEnds->GetSelectEntryPos();
     252             : 
     253           0 :         XLineEndEntry* pEntry = pLineEndList->GetLineEnd( nPos );
     254             : 
     255           0 :         m_pEdtName->SetText( m_pLbLineEnds->GetSelectEntry() );
     256             : 
     257           0 :         rXLSet.Put( XLineStartItem( OUString(), pEntry->GetLineEnd() ) );
     258           0 :         rXLSet.Put( XLineEndItem( OUString(), pEntry->GetLineEnd() ) );
     259             : 
     260             :         // #i34740#
     261           0 :         m_pCtlPreview->SetLineAttributes(aXLineAttr.GetItemSet());
     262             : 
     263           0 :         m_pCtlPreview->Invalidate();
     264             :     }
     265             : 
     266             :     // determine button state
     267           0 :     if( pLineEndList->Count() )
     268             :     {
     269           0 :         m_pBtnModify->Enable();
     270           0 :         m_pBtnDelete->Enable();
     271           0 :         m_pBtnSave->Enable();
     272             :     }
     273             :     else
     274             :     {
     275           0 :         m_pBtnModify->Disable();
     276           0 :         m_pBtnDelete->Disable();
     277           0 :         m_pBtnSave->Disable();
     278             :     }
     279           0 : }
     280             : 
     281             : 
     282             : 
     283           0 : VclPtr<SfxTabPage> SvxLineEndDefTabPage::Create( vcl::Window* pWindow, const SfxItemSet* rSet )
     284             : {
     285           0 :     return VclPtr<SvxLineEndDefTabPage>::Create( pWindow, *rSet );
     286             : }
     287             : 
     288             : 
     289             : 
     290           0 : IMPL_LINK_NOARG(SvxLineEndDefTabPage, SelectLineEndHdl_Impl)
     291             : {
     292           0 :     if( pLineEndList->Count() > 0 )
     293             :     {
     294           0 :         int nPos = m_pLbLineEnds->GetSelectEntryPos();
     295             : 
     296           0 :         XLineEndEntry* pEntry = pLineEndList->GetLineEnd( nPos );
     297             : 
     298           0 :         m_pEdtName->SetText( m_pLbLineEnds->GetSelectEntry() );
     299             : 
     300           0 :         rXLSet.Put( XLineStartItem( OUString(), pEntry->GetLineEnd() ) );
     301           0 :         rXLSet.Put( XLineEndItem( OUString(), pEntry->GetLineEnd() ) );
     302             : 
     303             :         // #i34740#
     304           0 :         m_pCtlPreview->SetLineAttributes(aXLineAttr.GetItemSet());
     305             : 
     306           0 :         m_pCtlPreview->Invalidate();
     307             : 
     308             :         // Is not set before, in order to only take the new style,
     309             :         // if there is an entry selected in the ListBox
     310           0 :         *pPageType = 3;
     311             :     }
     312           0 :     return 0L;
     313             : }
     314             : 
     315             : 
     316             : 
     317           0 : long SvxLineEndDefTabPage::ChangePreviewHdl_Impl( void* )
     318             : {
     319           0 :     m_pCtlPreview->Invalidate();
     320           0 :     return 0L;
     321             : }
     322             : 
     323             : 
     324             : 
     325           0 : IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickModifyHdl_Impl)
     326             : {
     327           0 :     sal_Int32 nPos = m_pLbLineEnds->GetSelectEntryPos();
     328             : 
     329           0 :     if( nPos != LISTBOX_ENTRY_NOTFOUND )
     330             :     {
     331           0 :         ResMgr& rMgr = CUI_MGR();
     332           0 :         OUString aDesc( ResId( RID_SVXSTR_DESC_LINEEND, rMgr ) );
     333           0 :         OUString aName( m_pEdtName->GetText() );
     334           0 :         long nCount = pLineEndList->Count();
     335           0 :         bool bDifferent = true;
     336             : 
     337             :         // check whether the name is existing already
     338           0 :         for ( long i = 0; i < nCount && bDifferent; i++ )
     339           0 :             if ( aName == pLineEndList->GetLineEnd( i )->GetName() )
     340           0 :                 bDifferent = false;
     341             : 
     342             :         // if yes, repeat and demand a new name
     343           0 :         if ( !bDifferent )
     344             :         {
     345           0 :             ScopedVclPtrInstance<MessageDialog> aWarningBox( GetParentDialog()
     346             :                                                              ,"DuplicateNameDialog"
     347           0 :                                                              ,"cui/ui/queryduplicatedialog.ui" );
     348           0 :             aWarningBox->Execute();
     349             : 
     350           0 :             SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
     351             :             DBG_ASSERT(pFact, "Dialog creation failed!");
     352           0 :             boost::scoped_ptr<AbstractSvxNameDialog> pDlg(pFact->CreateSvxNameDialog( GetParentDialog(), aName, aDesc ));
     353             :             DBG_ASSERT(pDlg, "Dialog creation failed!");
     354           0 :             bool bLoop = true;
     355             : 
     356           0 :             while( !bDifferent && bLoop && pDlg->Execute() == RET_OK )
     357             :             {
     358           0 :                 pDlg->GetName( aName );
     359           0 :                 bDifferent = true;
     360             : 
     361           0 :                 for( long i = 0; i < nCount && bDifferent; i++ )
     362             :                 {
     363           0 :                     if( aName == pLineEndList->GetLineEnd( i )->GetName() )
     364           0 :                         bDifferent = false;
     365             :                 }
     366             : 
     367           0 :                 if( bDifferent )
     368           0 :                     bLoop = false;
     369             :                 else
     370           0 :                     aWarningBox->Execute();
     371           0 :             }
     372             :         }
     373             : 
     374             :         // if not existing, enter the entry
     375           0 :         if( bDifferent )
     376             :         {
     377           0 :             const XLineEndEntry* pOldEntry = pLineEndList->GetLineEnd( nPos );
     378             : 
     379           0 :             if(pOldEntry)
     380             :             {
     381             :                 // #123497# Need to replace the existing entry with a new one (old returned needs to be deleted)
     382           0 :                 XLineEndEntry* pEntry = new XLineEndEntry(pOldEntry->GetLineEnd(), aName);
     383           0 :                 delete pLineEndList->Replace(pEntry, nPos);
     384             : 
     385           0 :                 m_pEdtName->SetText( aName );
     386             : 
     387           0 :                 m_pLbLineEnds->Modify( *pEntry, nPos, pLineEndList->GetUiBitmap( nPos ) );
     388           0 :                 m_pLbLineEnds->SelectEntryPos( nPos );
     389             : 
     390             :                 // Flag fuer modifiziert setzen
     391           0 :                 *pnLineEndListState |= ChangeType::MODIFIED;
     392             : 
     393           0 :                 *pPageType = 3;
     394             :             }
     395             :             else
     396             :             {
     397             :                 OSL_ENSURE(false, "LineEnd to be modified not existing (!)");
     398             :             }
     399           0 :         }
     400             :     }
     401           0 :     return 0L;
     402             : }
     403             : 
     404             : 
     405             : 
     406           0 : IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickAddHdl_Impl)
     407             : {
     408           0 :     if( pPolyObj )
     409             :     {
     410             :         const SdrObject* pNewObj;
     411           0 :         SdrObject* pConvPolyObj = NULL;
     412             : 
     413           0 :         if( pPolyObj->ISA( SdrPathObj ) )
     414             :         {
     415           0 :             pNewObj = pPolyObj;
     416             :         }
     417             :         else
     418             :         {
     419           0 :             SdrObjTransformInfoRec aInfoRec;
     420           0 :             pPolyObj->TakeObjInfo( aInfoRec );
     421             : 
     422           0 :             if( aInfoRec.bCanConvToPath )
     423             :             {
     424           0 :                 pNewObj = pConvPolyObj = pPolyObj->ConvertToPolyObj( true, false );
     425             : 
     426           0 :                 if( !pNewObj || !pNewObj->ISA( SdrPathObj ) )
     427           0 :                     return 0L; // cancel, additional safety, which
     428             :                             // has no use for group objects though.
     429             :             }
     430           0 :             else return 0L; // cancel
     431             :         }
     432             : 
     433           0 :         basegfx::B2DPolyPolygon aNewPolyPolygon(static_cast<const SdrPathObj*>(pNewObj)->GetPathPoly());
     434           0 :         basegfx::B2DRange aNewRange(basegfx::tools::getRange(aNewPolyPolygon));
     435             : 
     436             :         // normalize
     437           0 :         aNewPolyPolygon.transform(basegfx::tools::createTranslateB2DHomMatrix( -aNewRange.getMinX(), -aNewRange.getMinY()));
     438             : 
     439           0 :         SdrObject::Free( pConvPolyObj );
     440             : 
     441             :         XLineEndEntry* pEntry;
     442             : 
     443           0 :         ResMgr& rMgr = CUI_MGR();
     444           0 :         OUString aNewName( SVX_RES( RID_SVXSTR_LINEEND ) );
     445           0 :         OUString aDesc( ResId( RID_SVXSTR_DESC_LINEEND, rMgr ) );
     446           0 :         OUString aName;
     447             : 
     448           0 :         long nCount = pLineEndList->Count();
     449           0 :         long j = 1;
     450           0 :         bool bDifferent = false;
     451             : 
     452           0 :         while ( !bDifferent )
     453             :         {
     454           0 :             aName = aNewName;
     455           0 :             aName += " ";
     456           0 :             aName += OUString::number( j++ );
     457           0 :             bDifferent = true;
     458             : 
     459           0 :             for( long i = 0; i < nCount && bDifferent; i++ )
     460           0 :                 if ( aName == pLineEndList->GetLineEnd( i )->GetName() )
     461           0 :                     bDifferent = false;
     462             :         }
     463             : 
     464           0 :         SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
     465             :         DBG_ASSERT(pFact, "Dialog creation failed!");
     466           0 :         boost::scoped_ptr<AbstractSvxNameDialog> pDlg(pFact->CreateSvxNameDialog( GetParentDialog(), aName, aDesc ));
     467             :         DBG_ASSERT(pDlg, "Dialog creation failed!");
     468           0 :         bool bLoop = true;
     469             : 
     470           0 :         while ( bLoop && pDlg->Execute() == RET_OK )
     471             :         {
     472           0 :             pDlg->GetName( aName );
     473           0 :             bDifferent = true;
     474             : 
     475           0 :             for( long i = 0; i < nCount && bDifferent; i++ )
     476             :             {
     477           0 :                 if( aName == pLineEndList->GetLineEnd( i )->GetName() )
     478           0 :                     bDifferent = false;
     479             :             }
     480             : 
     481           0 :             if( bDifferent )
     482             :             {
     483           0 :                 bLoop = false;
     484           0 :                 pEntry = new XLineEndEntry( aNewPolyPolygon, aName );
     485             : 
     486           0 :                 long nLineEndCount = pLineEndList->Count();
     487           0 :                 pLineEndList->Insert( pEntry, nLineEndCount );
     488             : 
     489             :                 // add to the ListBox
     490           0 :                 m_pLbLineEnds->Append( *pEntry, pLineEndList->GetUiBitmap( nLineEndCount ) );
     491           0 :                 m_pLbLineEnds->SelectEntryPos( m_pLbLineEnds->GetEntryCount() - 1 );
     492             : 
     493           0 :                 *pnLineEndListState |= ChangeType::MODIFIED;
     494             : 
     495           0 :                 SelectLineEndHdl_Impl( this );
     496             :             }
     497             :             else
     498             :             {
     499           0 :                 ScopedVclPtrInstance<MessageDialog> aBox( GetParentDialog()
     500             :                                                           ,"DuplicateNameDialog"
     501           0 :                                                           ,"cui/ui/queryduplicatedialog.ui" );
     502           0 :                 aBox->Execute();
     503             :             }
     504           0 :         }
     505             :     }
     506             :     else
     507           0 :         m_pBtnAdd->Disable();
     508             : 
     509             :     // determine button state
     510           0 :     if ( pLineEndList->Count() )
     511             :     {
     512           0 :         m_pBtnModify->Enable();
     513           0 :         m_pBtnDelete->Enable();
     514           0 :         m_pBtnSave->Enable();
     515             :     }
     516           0 :     return 0L;
     517             : }
     518             : 
     519             : 
     520             : 
     521           0 : IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickDeleteHdl_Impl)
     522             : {
     523           0 :     sal_Int32 nPos = m_pLbLineEnds->GetSelectEntryPos();
     524             : 
     525           0 :     if( nPos != LISTBOX_ENTRY_NOTFOUND )
     526             :     {
     527           0 :         ScopedVclPtrInstance<MessageDialog> aQueryBox( GetParentDialog()
     528             :                                                        ,"AskDelLineEndDialog"
     529           0 :                                                        ,"cui/ui/querydeletelineenddialog.ui" );
     530             : 
     531           0 :         if ( aQueryBox->Execute() == RET_YES )
     532             :         {
     533           0 :             delete pLineEndList->Remove( nPos );
     534           0 :             m_pLbLineEnds->RemoveEntry( nPos );
     535           0 :             m_pLbLineEnds->SelectEntryPos( 0 );
     536             : 
     537           0 :             SelectLineEndHdl_Impl( this );
     538           0 :             *pPageType = 0; // LineEnd shall not be taken over
     539             : 
     540           0 :             *pnLineEndListState |= ChangeType::MODIFIED;
     541             : 
     542           0 :             ChangePreviewHdl_Impl( this );
     543           0 :         }
     544             :     }
     545             :     // determine button state
     546           0 :     if( !pLineEndList->Count() )
     547             :     {
     548           0 :         m_pBtnModify->Disable();
     549           0 :         m_pBtnDelete->Disable();
     550           0 :         m_pBtnSave->Disable();
     551             :     }
     552           0 :     return 0L;
     553             : }
     554             : 
     555             : 
     556             : 
     557           0 : IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickLoadHdl_Impl)
     558             : {
     559           0 :     sal_uInt16 nReturn = RET_YES;
     560             : 
     561           0 :     if ( *pnLineEndListState & ChangeType::MODIFIED )
     562             :     {
     563           0 :         nReturn = ScopedVclPtrInstance<MessageDialog>::Create( GetParentDialog()
     564             :                                 ,"AskSaveList"
     565           0 :                                 ,"cui/ui/querysavelistdialog.ui")->Execute();
     566             : 
     567           0 :         if ( nReturn == RET_YES )
     568           0 :             pLineEndList->Save();
     569             :     }
     570             : 
     571           0 :     if ( nReturn != RET_CANCEL )
     572             :     {
     573           0 :         ::sfx2::FileDialogHelper aDlg(com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 0 );
     574           0 :         OUString aStrFilterType( "*.soe" );
     575           0 :         aDlg.AddFilter( aStrFilterType, aStrFilterType );
     576             : 
     577           0 :         OUString aPalettePath(SvtPathOptions().GetPalettePath());
     578           0 :         OUString aLastDir;
     579           0 :         sal_Int32 nIndex = 0;
     580           0 :         do
     581             :         {
     582           0 :             aLastDir = aPalettePath.getToken(0, ';', nIndex);
     583             :         }
     584           0 :         while (nIndex >= 0);
     585             : 
     586           0 :         INetURLObject aFile(aLastDir);
     587           0 :         aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
     588             : 
     589           0 :         if( aDlg.Execute() == ERRCODE_NONE )
     590             :         {
     591           0 :             INetURLObject aURL( aDlg.GetPath() );
     592           0 :             INetURLObject aPathURL( aURL );
     593             : 
     594           0 :             aPathURL.removeSegment();
     595           0 :             aPathURL.removeFinalSlash();
     596             : 
     597             :             XLineEndListRef pLeList = XPropertyList::AsLineEndList(
     598             :                 XPropertyList::CreatePropertyList(
     599             :                     XLINE_END_LIST,
     600           0 :                     aPathURL.GetMainURL(INetURLObject::NO_DECODE), ""));
     601           0 :             pLeList->SetName( aURL.getName() );
     602           0 :             if( pLeList->Load() )
     603             :             {
     604           0 :                 pLineEndList = pLeList;
     605           0 :                 static_cast<SvxLineTabDialog*>( GetParentDialog() )->SetNewLineEndList( pLineEndList );
     606           0 :                 m_pLbLineEnds->Clear();
     607           0 :                 m_pLbLineEnds->Fill( pLineEndList );
     608           0 :                 Reset( &rOutAttrs );
     609             : 
     610           0 :                 pLineEndList->SetName( aURL.getName() );
     611             : 
     612           0 :                 *pnLineEndListState |= ChangeType::CHANGED;
     613           0 :                 *pnLineEndListState &= ~ChangeType::MODIFIED;
     614             :             }
     615             :             else
     616           0 :                 ScopedVclPtrInstance<MessageDialog>::Create( GetParentDialog()
     617             :                               ,"NoLoadedFileDialog"
     618           0 :                               ,"cui/ui/querynoloadedfiledialog.ui")->Execute();
     619           0 :         }
     620             :     }
     621             : 
     622             :     // determine button state
     623           0 :     if ( pLineEndList->Count() )
     624             :     {
     625           0 :         m_pBtnModify->Enable();
     626           0 :         m_pBtnDelete->Enable();
     627           0 :         m_pBtnSave->Enable();
     628             :     }
     629             :     else
     630             :     {
     631           0 :         m_pBtnModify->Disable();
     632           0 :         m_pBtnDelete->Disable();
     633           0 :         m_pBtnSave->Disable();
     634             :     }
     635           0 :     return 0L;
     636             : }
     637             : 
     638             : 
     639             : 
     640           0 : IMPL_LINK_NOARG(SvxLineEndDefTabPage, ClickSaveHdl_Impl)
     641             : {
     642           0 :     ::sfx2::FileDialogHelper aDlg( com::sun::star::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, 0 );
     643           0 :     OUString aStrFilterType( "*.soe" );
     644           0 :     aDlg.AddFilter( aStrFilterType, aStrFilterType );
     645             : 
     646           0 :     OUString aPalettePath(SvtPathOptions().GetPalettePath());
     647           0 :     OUString aLastDir;
     648           0 :     sal_Int32 nIndex = 0;
     649           0 :     do
     650             :     {
     651           0 :         aLastDir = aPalettePath.getToken(0, ';', nIndex);
     652             :     }
     653           0 :     while (nIndex >= 0);
     654             : 
     655           0 :     INetURLObject aFile(aLastDir);
     656             :     DBG_ASSERT( aFile.GetProtocol() != INetProtocol::NotValid, "invalid URL" );
     657             : 
     658           0 :     if( !pLineEndList->GetName().isEmpty() )
     659             :     {
     660           0 :         aFile.Append( pLineEndList->GetName() );
     661             : 
     662           0 :         if( aFile.getExtension().isEmpty() )
     663           0 :             aFile.SetExtension( "soe" );
     664             :     }
     665             : 
     666           0 :     aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
     667           0 :     if ( aDlg.Execute() == ERRCODE_NONE )
     668             :     {
     669           0 :         INetURLObject   aURL( aDlg.GetPath() );
     670           0 :         INetURLObject   aPathURL( aURL );
     671             : 
     672           0 :         aPathURL.removeSegment();
     673           0 :         aPathURL.removeFinalSlash();
     674             : 
     675           0 :         pLineEndList->SetName( aURL.getName() );
     676           0 :         pLineEndList->SetPath( aPathURL.GetMainURL( INetURLObject::NO_DECODE ) );
     677             : 
     678           0 :         if( pLineEndList->Save() )
     679             :         {
     680           0 :             *pnLineEndListState |= ChangeType::SAVED;
     681           0 :             *pnLineEndListState &= ~ChangeType::MODIFIED;
     682             :         }
     683             :         else
     684             :         {
     685           0 :             ScopedVclPtrInstance<MessageDialog>::Create( GetParentDialog()
     686             :                           ,"NoSaveFileDialog"
     687           0 :                           ,"cui/ui/querynosavefiledialog.ui")->Execute();
     688           0 :         }
     689             :     }
     690           0 :     return 0L;
     691             : }
     692             : 
     693           0 : void SvxLineEndDefTabPage::DataChanged( const DataChangedEvent& rDCEvt )
     694             : {
     695           0 :     SfxTabPage::DataChanged( rDCEvt );
     696             : 
     697           0 :     if ( (rDCEvt.GetType() == DataChangedEventType::SETTINGS) && (rDCEvt.GetFlags() & AllSettingsFlags::STYLE) )
     698             :     {
     699           0 :         sal_Int32 nOldSelect = m_pLbLineEnds->GetSelectEntryPos();
     700           0 :         m_pLbLineEnds->Clear();
     701           0 :         m_pLbLineEnds->Fill( pLineEndList );
     702           0 :         m_pLbLineEnds->SelectEntryPos( nOldSelect );
     703             :     }
     704           0 : }
     705             : 
     706             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11