/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include <strings.hrc>
#include <dialmgr.hxx>
#include <sfx2/app.hxx>
#include <sfx2/module.hxx>
#include <sfx2/request.hxx>
#include <svx/connctrl.hxx>
#include <svx/dialogs.hrc>
#include <svx/dlgutil.hxx>
#include <svx/ofaitem.hxx>
#include <svx/svdattr.hxx>
#include <svx/svdoedge.hxx>
#include <svx/svdview.hxx>
#include <svx/sxekitm.hxx>
#include <svx/sxelditm.hxx>
#include <svx/sxenditm.hxx>
#include <connect.hxx>
const sal_uInt16 SvxConnectionPage::pRanges[] =
{
SDRATTR_EDGE_FIRST,
SDRATTR_EDGE_LAST,
0
};
/*************************************************************************
|*
|* dialog for changing connectors
|*
\************************************************************************/
SvxConnectionDialog::SvxConnectionDialog( vcl::Window* pParent, const SfxItemSet& rInAttrs,
const SdrView* pSdrView )
: SfxSingleTabDialog(pParent, rInAttrs)
{
VclPtrInstance<SvxConnectionPage> _pPage( get_content_area(), rInAttrs );
_pPage->SetView( pSdrView );
_pPage->Construct();
SetTabPage( _pPage );
SetText(CuiResId( RID_SVXSTR_CONNECTOR ));
}
/*************************************************************************
|*
|* page for changing connectors
|*
\************************************************************************/
SvxConnectionPage::SvxConnectionPage( vcl::Window* pWindow, const SfxItemSet& rInAttrs )
: SfxTabPage(pWindow ,"ConnectorTabPage" ,"cui/ui/connectortabpage.ui"
,&rInAttrs)
, rOutAttrs(rInAttrs)
, aAttrSet(*rInAttrs.GetPool())
, pView(nullptr)
{
get(m_pLbType,"LB_TYPE");
get(m_pFtLine1,"FT_LINE_1");
get(m_pMtrFldLine1,"MTR_FLD_LINE_1");
get(m_pFtLine2,"FT_LINE_2");
get(m_pMtrFldLine2,"MTR_FLD_LINE_2");
get(m_pFtLine3,"FT_LINE_3");
get(m_pMtrFldLine3,"MTR_FLD_LINE_3");
get(m_pMtrFldHorz1,"MTR_FLD_HORZ_1");
get(m_pMtrFldVert1,"MTR_FLD_VERT_1");
get(m_pMtrFldHorz2,"MTR_FLD_HORZ_2");
get(m_pMtrFldVert2,"MTR_FLD_VERT_2");
get(m_pCtlPreview,"CTL_PREVIEW");
SfxItemPool* pPool = rOutAttrs.GetPool();
DBG_ASSERT( pPool, "Where is the pool" );
eUnit = pPool->GetMetric( SDRATTR_EDGENODE1HORZDIST );
FillTypeLB();
const FieldUnit eFUnit = GetModuleFieldUnit( rInAttrs );
SetFieldUnit( *m_pMtrFldHorz1, eFUnit );
SetFieldUnit( *m_pMtrFldHorz2, eFUnit );
SetFieldUnit( *m_pMtrFldVert1, eFUnit );
SetFieldUnit( *m_pMtrFldVert2, eFUnit );
SetFieldUnit( *m_pMtrFldLine1, eFUnit );
SetFieldUnit( *m_pMtrFldLine2, eFUnit );
SetFieldUnit( *m_pMtrFldLine3, eFUnit );
if( eFUnit == FUNIT_MM )
{
m_pMtrFldHorz1->SetSpinSize( 50 );
m_pMtrFldHorz2->SetSpinSize( 50 );
m_pMtrFldVert1->SetSpinSize( 50 );
m_pMtrFldVert2->SetSpinSize( 50 );
m_pMtrFldLine1->SetSpinSize( 50 );
m_pMtrFldLine2->SetSpinSize( 50 );
m_pMtrFldLine3->SetSpinSize( 50 );
}
// disable 3D border
m_pCtlPreview->SetBorderStyle(WindowBorderStyle::MONO);
Link<Edit&,void> aLink( LINK( this, SvxConnectionPage, ChangeAttrEditHdl_Impl ) );
m_pMtrFldHorz1->SetModifyHdl( aLink );
m_pMtrFldVert1->SetModifyHdl( aLink );
m_pMtrFldHorz2->SetModifyHdl( aLink );
m_pMtrFldVert2->SetModifyHdl( aLink );
m_pMtrFldLine1->SetModifyHdl( aLink );
m_pMtrFldLine2->SetModifyHdl( aLink );
m_pMtrFldLine3->SetModifyHdl( aLink );
m_pLbType->SetSelectHdl( LINK( this, SvxConnectionPage, ChangeAttrListBoxHdl_Impl ) );
}
SvxConnectionPage::~SvxConnectionPage()
{
disposeOnce();
}
void SvxConnectionPage::dispose()
{
m_pLbType.clear();
m_pFtLine1.clear();
m_pMtrFldLine1.clear();
m_pFtLine2.clear();
m_pMtrFldLine2.clear();
m_pFtLine3.clear();
m_pMtrFldLine3.clear();
m_pMtrFldHorz1.clear();
m_pMtrFldVert1.clear();
m_pMtrFldHorz2.clear();
m_pMtrFldVert2.clear();
m_pCtlPreview.clear();
SfxTabPage::dispose();
}
/*************************************************************************
|*
|* reads passed Item-Set
|*
\************************************************************************/
void SvxConnectionPage::Reset( const SfxItemSet* rAttrs )
{
const SfxPoolItem* pItem = GetItem( *rAttrs, SDRATTR_EDGENODE1HORZDIST );
const SfxItemPool* pPool = rAttrs->GetPool();
// SdrEdgeNode1HorzDistItem
if( !pItem )
pItem = &pPool->GetDefaultItem( SDRATTR_EDGENODE1HORZDIST );
if( pItem )
{
long nValue = static_cast<const SdrEdgeNode1HorzDistItem*>( pItem )->GetValue();
SetMetricValue( *m_pMtrFldHorz1, nValue, eUnit );
}
else
m_pMtrFldHorz1->SetEmptyFieldValue();
m_pMtrFldHorz1->SaveValue();
// SdrEdgeNode2HorzDistItem
pItem = GetItem( *rAttrs, SDRATTR_EDGENODE2HORZDIST );
if( !pItem )
pItem = &pPool->GetDefaultItem( SDRATTR_EDGENODE2HORZDIST );
if( pItem )
{
long nValue = static_cast<const SdrEdgeNode2HorzDistItem*>( pItem )->GetValue();
SetMetricValue( *m_pMtrFldHorz2, nValue, eUnit );
}
else
m_pMtrFldHorz2->SetEmptyFieldValue();
m_pMtrFldHorz2->SaveValue();
// SdrEdgeNode1VertDistItem
pItem = GetItem( *rAttrs, SDRATTR_EDGENODE1VERTDIST );
if( !pItem )
pItem = &pPool->GetDefaultItem( SDRATTR_EDGENODE1VERTDIST );
if( pItem )
{
long nValue = static_cast<const SdrEdgeNode1VertDistItem*>( pItem )->GetValue();
SetMetricValue( *m_pMtrFldVert1, nValue, eUnit );
}
else
m_pMtrFldVert1->SetEmptyFieldValue();
m_pMtrFldVert1->SaveValue();
// SdrEdgeNode2VertDistItem
pItem = GetItem( *rAttrs, SDRATTR_EDGENODE2VERTDIST );
if( !pItem )
pItem = &pPool->GetDefaultItem( SDRATTR_EDGENODE2VERTDIST );
if( pItem )
{
long nValue = static_cast<const SdrEdgeNode2VertDistItem*>( pItem )->GetValue();
SetMetricValue( *m_pMtrFldVert2, nValue, eUnit );
}
else
m_pMtrFldVert2->SetEmptyFieldValue();
m_pMtrFldVert2->SaveValue();
// SdrEdgeLine1DeltaItem
pItem = GetItem( *rAttrs, SDRATTR_EDGELINE1DELTA );
if( !pItem )
pItem = &pPool->GetDefaultItem( SDRATTR_EDGELINE1DELTA );
if( pItem )
{
long nValue = static_cast<const SdrMetricItem*>( pItem )->GetValue();
SetMetricValue( *m_pMtrFldLine1, nValue, eUnit );
}
else
m_pMtrFldLine1->SetEmptyFieldValue();
m_pMtrFldLine1->SaveValue();
// SdrEdgeLine2DeltaItem
pItem = GetItem( *rAttrs, SDRATTR_EDGELINE2DELTA );
if( !pItem )
pItem = &pPool->GetDefaultItem( SDRATTR_EDGELINE2DELTA );
if( pItem )
{
long nValue = static_cast<const SdrMetricItem*>( pItem )->GetValue();
SetMetricValue( *m_pMtrFldLine2, nValue, eUnit );
}
else
m_pMtrFldLine2->SetEmptyFieldValue();
m_pMtrFldLine2->SaveValue();
// SdrEdgeLine3DeltaItem
pItem = GetItem( *rAttrs, SDRATTR_EDGELINE3DELTA );
if( !pItem )
pItem = &pPool->GetDefaultItem( SDRATTR_EDGELINE3DELTA );
if( pItem )
{
long nValue = static_cast<const SdrMetricItem*>( pItem )->GetValue();
SetMetricValue( *m_pMtrFldLine3, nValue, eUnit );
}
else
m_pMtrFldLine3->SetEmptyFieldValue();
m_pMtrFldLine3->SaveValue();
// SdrEdgeLineDeltaAnzItem
pItem = GetItem( *rAttrs, SDRATTR_EDGELINEDELTACOUNT );
if( !pItem )
pItem = &pPool->GetDefaultItem( SDRATTR_EDGELINEDELTACOUNT );
if( pItem )
{
sal_uInt16 nValue = static_cast<const SdrEdgeLineDeltaCountItem*>( pItem )->GetValue();
if( nValue <= 2 )
{
m_pFtLine3->Enable( false );
m_pMtrFldLine3->Enable( false );
m_pMtrFldLine3->SetEmptyFieldValue();
}
if( nValue <= 1 )
{
m_pFtLine2->Enable( false );
m_pMtrFldLine2->Enable( false );
m_pMtrFldLine2->SetEmptyFieldValue();
}
if( nValue == 0 )
{
m_pFtLine1->Enable( false );
m_pMtrFldLine1->Enable( false );
m_pMtrFldLine1->SetEmptyFieldValue();
}
}
// SdrEdgeKindItem
pItem = GetItem( *rAttrs, SDRATTR_EDGEKIND );
if( !pItem )
pItem = &pPool->GetDefaultItem( SDRATTR_EDGEKIND );
if( pItem )
{
SdrEdgeKind nValue = static_cast<const SdrEdgeKindItem*>( pItem )->GetValue();
m_pLbType->SelectEntryPos( sal::static_int_cast< sal_uInt16 >(nValue) );
}
else
m_pLbType->SetNoSelection();
m_pLbType->SaveValue();
}
/*************************************************************************
|*
|* fills the passed Item-Set width Dialogbox attributes
|*
\************************************************************************/
bool SvxConnectionPage::FillItemSet( SfxItemSet* rAttrs)
{
bool bModified = false;
sal_Int32 nValue;
if( m_pMtrFldHorz1->IsValueChangedFromSaved() )
{
nValue = GetCoreValue( *m_pMtrFldHorz1, eUnit );
rAttrs->Put( SdrEdgeNode1HorzDistItem( nValue ) );
bModified = true;
}
if( m_pMtrFldHorz2->IsValueChangedFromSaved() )
{
nValue = GetCoreValue( *m_pMtrFldHorz2, eUnit );
rAttrs->Put( SdrEdgeNode2HorzDistItem( nValue ) );
bModified = true;
}
if( m_pMtrFldVert1->IsValueChangedFromSaved() )
{
nValue = GetCoreValue( *m_pMtrFldVert1, eUnit );
rAttrs->Put( SdrEdgeNode1VertDistItem( nValue ) );
bModified = true;
}
if( m_pMtrFldVert2->IsValueChangedFromSaved() )
{
nValue = GetCoreValue( *m_pMtrFldVert2, eUnit );
rAttrs->Put( SdrEdgeNode2VertDistItem( nValue ) );
bModified = true;
}
if( m_pMtrFldLine1->IsValueChangedFromSaved() )
{
nValue = GetCoreValue( *m_pMtrFldLine1, eUnit );
rAttrs->Put( makeSdrEdgeLine1DeltaItem( nValue ) );
bModified = true;
}
if( m_pMtrFldLine2->IsValueChangedFromSaved() )
{
nValue = GetCoreValue( *m_pMtrFldLine2, eUnit );
rAttrs->Put( makeSdrEdgeLine2DeltaItem( nValue ) );
bModified = true;
}
if( m_pMtrFldLine3->IsValueChangedFromSaved() )
{
nValue = GetCoreValue( *m_pMtrFldLine3, eUnit );
rAttrs->Put( makeSdrEdgeLine3DeltaItem( nValue ) );
bModified = true;
}
sal_Int32 nPos = m_pLbType->GetSelectedEntryPos();
if( m_pLbType->IsValueChangedFromSaved() )
{
if( nPos != LISTBOX_ENTRY_NOTFOUND )
{
rAttrs->Put( SdrEdgeKindItem( static_cast<SdrEdgeKind>(nPos) ) );
bModified = true;
}
}
return bModified;
}
void SvxConnectionPage::Construct()
{
DBG_ASSERT( pView, "No valid View transfer!" );
m_pCtlPreview->SetView( pView );
m_pCtlPreview->Construct();
}
/*************************************************************************
|*
|* creates the page
|*
\************************************************************************/
VclPtr<SfxTabPage> SvxConnectionPage::Create( TabPageParent pWindow,
const SfxItemSet* rAttrs )
{
return VclPtr<SvxConnectionPage>::Create( pWindow.pParent, *rAttrs );
}
IMPL_LINK( SvxConnectionPage, ChangeAttrListBoxHdl_Impl, ListBox&, r, void )
{
ChangeAttrHdl_Impl(&r);
}
IMPL_LINK( SvxConnectionPage, ChangeAttrEditHdl_Impl, Edit&, r, void )
{
ChangeAttrHdl_Impl(&r);
}
void SvxConnectionPage::ChangeAttrHdl_Impl(void const * p)
{
if( p == m_pMtrFldHorz1 )
{
sal_Int32 nValue = GetCoreValue( *m_pMtrFldHorz1, eUnit );
aAttrSet.Put( SdrEdgeNode1HorzDistItem( nValue ) );
}
if( p == m_pMtrFldHorz2 )
{
sal_Int32 nValue = GetCoreValue( *m_pMtrFldHorz2, eUnit );
aAttrSet.Put( SdrEdgeNode2HorzDistItem( nValue ) );
}
if( p == m_pMtrFldVert1 )
{
sal_Int32 nValue = GetCoreValue( *m_pMtrFldVert1, eUnit );
aAttrSet.Put( SdrEdgeNode1VertDistItem( nValue ) );
}
if( p == m_pMtrFldVert2 )
{
sal_Int32 nValue = GetCoreValue( *m_pMtrFldVert2, eUnit );
aAttrSet.Put( SdrEdgeNode2VertDistItem( nValue ) );
}
if( p == m_pMtrFldLine1 )
{
sal_Int32 nValue = GetCoreValue( *m_pMtrFldLine1, eUnit );
aAttrSet.Put( makeSdrEdgeLine1DeltaItem( nValue ) );
}
if( p == m_pMtrFldLine2 )
{
sal_Int32 nValue = GetCoreValue( *m_pMtrFldLine2, eUnit );
aAttrSet.Put( makeSdrEdgeLine2DeltaItem( nValue ) );
}
if( p == m_pMtrFldLine3 )
{
sal_Int32 nValue = GetCoreValue( *m_pMtrFldLine3, eUnit );
aAttrSet.Put( makeSdrEdgeLine3DeltaItem( nValue ) );
}
if( p == m_pLbType )
{
sal_Int32 nPos = m_pLbType->GetSelectedEntryPos();
if( nPos != LISTBOX_ENTRY_NOTFOUND )
{
aAttrSet.Put( SdrEdgeKindItem( static_cast<SdrEdgeKind>(nPos) ) );
}
}
m_pCtlPreview->SetAttributes( aAttrSet );
if( p == m_pLbType )
{
// get the number of line displacements
sal_uInt16 nCount = m_pCtlPreview->GetLineDeltaCount();
m_pFtLine3->Enable( nCount > 2 );
m_pMtrFldLine3->Enable( nCount > 2 );
if( nCount > 2 )
m_pMtrFldLine3->SetValue( m_pMtrFldLine3->GetValue() );
else
m_pMtrFldLine3->SetEmptyFieldValue();
m_pFtLine2->Enable( nCount > 1 );
m_pMtrFldLine2->Enable( nCount > 1 );
if( nCount > 1 )
m_pMtrFldLine2->SetValue( m_pMtrFldLine2->GetValue() );
else
m_pMtrFldLine2->SetEmptyFieldValue();
m_pFtLine1->Enable( nCount > 0 );
m_pMtrFldLine1->Enable( nCount > 0 );
if( nCount > 0 )
m_pMtrFldLine1->SetValue( m_pMtrFldLine1->GetValue() );
else
m_pMtrFldLine1->SetEmptyFieldValue();
}
}
void SvxConnectionPage::FillTypeLB()
{
// fill ListBox with connector names
const SfxPoolItem* pItem = GetItem( rOutAttrs, SDRATTR_EDGEKIND );
const SfxItemPool* pPool = rOutAttrs.GetPool();
if( !pItem )
pItem = &pPool->GetDefaultItem( SDRATTR_EDGEKIND );
if( pItem )
{
const SdrEdgeKindItem* pEdgeKindItem = static_cast<const SdrEdgeKindItem*>( pItem );
sal_uInt16 nCount = pEdgeKindItem->GetValueCount();
OUString aStr;
for( sal_uInt16 i = 0; i < nCount; i++ )
{
aStr = pEdgeKindItem->GetValueTextByPos( i );
m_pLbType->InsertEntry( aStr );
}
}
}
void SvxConnectionPage::PageCreated(const SfxAllItemSet& aSet)
{
const OfaPtrItem* pOfaPtrItem = aSet.GetItem<OfaPtrItem>(SID_OBJECT_LIST, false);
if (pOfaPtrItem)
SetView( static_cast<SdrView *>(pOfaPtrItem->GetValue()) );
Construct();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
↑ V547 Expression 'pItem' is always true.
↑ V547 Expression 'pItem' is always true.
↑ V547 Expression 'pItem' is always true.
↑ V547 Expression 'pItem' is always true.
↑ V547 Expression 'pItem' is always true.
↑ V547 Expression 'pItem' is always true.
↑ V547 Expression 'pItem' is always true.
↑ V547 Expression 'pItem' is always true.
↑ V547 Expression 'pItem' is always true.
↑ V547 Expression 'pItem' is always true.