diff options
author | Dennis Francis <dennisfrancis.in@gmail.com> | 2015-11-01 03:49:38 +0530 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2015-12-07 13:49:53 +0000 |
commit | 2e512174f2116d86682037459fd5ab5164e9f510 (patch) | |
tree | f28b135f29c1246a7a1f6a766de1214ab49f3bf6 /cui/source | |
parent | 1a032dcfebc2702f0612c470d6b9c3e3cf4fb637 (diff) |
tdf#34449 : ability of deleting borders of a cell from adjacent cell
Change-Id: Ieb13a9ea88faa220d1ee352b0e47268a7fda5f38
Reviewed-on: https://gerrit.libreoffice.org/19715
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Eike Rathke <erack@redhat.com>
Diffstat (limited to 'cui/source')
-rw-r--r-- | cui/source/inc/border.hxx | 5 | ||||
-rw-r--r-- | cui/source/tabpages/border.cxx | 86 |
2 files changed, 89 insertions, 2 deletions
diff --git a/cui/source/inc/border.hxx b/cui/source/inc/border.hxx index 81fee6486a53..ba780e1aa41a 100644 --- a/cui/source/inc/border.hxx +++ b/cui/source/inc/border.hxx @@ -98,6 +98,7 @@ private: VclPtr<CheckBox> m_pMergeWithNextCB; // #i29550# VclPtr<CheckBox> m_pMergeAdjacentBordersCB; + VclPtr<CheckBox> m_pRemoveAdjcentCellBordersCB; ImageList aShadowImgLstH; ImageList aShadowImgLst; @@ -113,6 +114,8 @@ private: bool mbBLTREnabled; ///< true = Bottom-left to top-right border enabled. bool mbUseMarginItem; bool mbSync; + bool mbRemoveAdjacentCellBorders; + bool bIsCalcDoc; std::set<sal_Int16> maUsedBorderStyles; @@ -125,6 +128,7 @@ private: DECL_LINK_TYPED( ModifyDistanceHdl_Impl, Edit&, void); DECL_LINK_TYPED( ModifyWidthHdl_Impl, Edit&, void); DECL_LINK_TYPED( SyncHdl_Impl, Button*, void); + DECL_LINK_TYPED( RemoveAdjacentCellBorderHdl_Impl, Button*, void); sal_uInt16 GetPresetImageId( sal_uInt16 nValueSetIdx ) const; sal_uInt16 GetPresetStringId( sal_uInt16 nValueSetIdx ) const; @@ -142,6 +146,7 @@ private: bool bValid ); bool IsBorderLineStyleAllowed( sal_Int16 nStyle ) const; + void UpdateRemoveAdjCellBorderCB( sal_uInt16 nPreset ); }; diff --git a/cui/source/tabpages/border.cxx b/cui/source/tabpages/border.cxx index 180fd28238b2..a4853ba56fa8 100644 --- a/cui/source/tabpages/border.cxx +++ b/cui/source/tabpages/border.cxx @@ -44,10 +44,13 @@ #include <svl/int64item.hxx> #include <sfx2/itemconnect.hxx> #include <sal/macros.h> +#include <com/sun/star/lang/XServiceInfo.hpp> #include "borderconn.hxx" using namespace ::editeng; - +using ::com::sun::star::uno::Reference; +using ::com::sun::star::lang::XServiceInfo; +using ::com::sun::star::uno::UNO_QUERY; /* @@ -99,7 +102,9 @@ SvxBorderTabPage::SvxBorderTabPage(vcl::Window* pParent, const SfxItemSet& rCore mbTLBREnabled( false ), mbBLTREnabled( false ), mbUseMarginItem( false ), - mbSync(true) + mbSync(true), + mbRemoveAdjacentCellBorders( false ), + bIsCalcDoc( false ) { get(m_pWndPresets, "presets"); @@ -130,6 +135,7 @@ SvxBorderTabPage::SvxBorderTabPage(vcl::Window* pParent, const SfxItemSet& rCore get(m_pPropertiesFrame, "properties"); get(m_pMergeWithNextCB, "mergewithnext"); get(m_pMergeAdjacentBordersCB, "mergeadjacent"); + get(m_pRemoveAdjcentCellBordersCB, "rmadjcellborders"); if ( GetDPIScaleFactor() > 1 ) { @@ -331,6 +337,21 @@ SvxBorderTabPage::SvxBorderTabPage(vcl::Window* pParent, const SfxItemSet& rCore // checkbox "Merge adjacent line styles" only visible for Writer dialog format.table AddItemConnection( new sfx::CheckBoxConnection( SID_SW_COLLAPSING_BORDERS, *m_pMergeAdjacentBordersCB, sfx::ITEMCONN_DEFAULT ) ); m_pMergeAdjacentBordersCB->Hide(); + + if( pDocSh ) + { + Reference< XServiceInfo > xSI( pDocSh->GetModel(), UNO_QUERY ); + if ( xSI.is() ) + bIsCalcDoc = xSI->supportsService("com.sun.star.sheet.SpreadsheetDocument"); + } + if( bIsCalcDoc ) + { + m_pRemoveAdjcentCellBordersCB->SetClickHdl(LINK(this, SvxBorderTabPage, RemoveAdjacentCellBorderHdl_Impl)); + m_pRemoveAdjcentCellBordersCB->Show(); + m_pRemoveAdjcentCellBordersCB->Enable( false ); + } + else + m_pRemoveAdjcentCellBordersCB->Hide(); } SvxBorderTabPage::~SvxBorderTabPage() @@ -365,6 +386,7 @@ void SvxBorderTabPage::dispose() m_pPropertiesFrame.clear(); m_pMergeWithNextCB.clear(); m_pMergeAdjacentBordersCB.clear(); + m_pRemoveAdjcentCellBordersCB.clear(); SfxTabPage::dispose(); } @@ -596,6 +618,10 @@ void SvxBorderTabPage::Reset( const SfxItemSet* rSet ) else mbSync = false; m_pSynchronizeCB->Check(mbSync); + + mbRemoveAdjacentCellBorders = false; + m_pRemoveAdjcentCellBordersCB->Check( false ); + m_pRemoveAdjcentCellBordersCB->Enable( false ); } void SvxBorderTabPage::ChangesApplied() @@ -645,6 +671,7 @@ bool SvxBorderTabPage::FillItemSet( SfxItemSet* rCoreAttrs ) aBoxItem.SetLine( m_pFrameSel->GetFrameBorderStyle( eTypes1[i].first ), eTypes1[i].second ); + aBoxItem.SetRemoveAdjacentCellBorder( mbRemoveAdjacentCellBorders ); // border hor/ver and TableFlag ::std::pair<svx::FrameBorderType,SvxBoxInfoItemLine> eTypes2[] = { @@ -843,6 +870,7 @@ IMPL_LINK_NOARG_TYPED(SvxBorderTabPage, SelPreHdl_Impl, ValueSet*, void) m_pWndPresets->SetNoSelection(); LinesChanged_Impl( nullptr ); + UpdateRemoveAdjCellBorderCB( nLine + 1 ); } @@ -1172,6 +1200,7 @@ IMPL_LINK_NOARG_TYPED(SvxBorderTabPage, LinesChanged_Impl, LinkParamNone*, void) m_pSynchronizeCB->Enable( m_pRightMF->IsEnabled() || m_pTopMF->IsEnabled() || m_pBottomMF->IsEnabled() || m_pLeftMF->IsEnabled() ); } + UpdateRemoveAdjCellBorderCB( -1 ); } @@ -1197,6 +1226,59 @@ IMPL_LINK_TYPED( SvxBorderTabPage, SyncHdl_Impl, Button*, pBox, void) mbSync = static_cast<CheckBox*>(pBox)->IsChecked(); } +IMPL_LINK_TYPED( SvxBorderTabPage, RemoveAdjacentCellBorderHdl_Impl, Button*, pBox, void) +{ + mbRemoveAdjacentCellBorders = static_cast<CheckBox*>(pBox)->IsChecked(); +} + +void SvxBorderTabPage::UpdateRemoveAdjCellBorderCB( sal_uInt16 nPreset ) +{ + if( !bIsCalcDoc ) + return; + const SfxItemSet& rOldSet = GetItemSet(); + const SvxBoxInfoItem* pOldBoxInfoItem = static_cast<const SvxBoxInfoItem*>(GetOldItem( rOldSet, SID_ATTR_BORDER_INNER )); + const SvxBoxItem* pOldBoxItem = static_cast<const SvxBoxItem*>(GetOldItem( rOldSet, SID_ATTR_BORDER_OUTER )); + if( !pOldBoxInfoItem || !pOldBoxItem ) + return; + ::std::pair<svx::FrameBorderType, SvxBoxInfoItemValidFlags> eTypes1[] = { + { svx::FRAMEBORDER_TOP,SvxBoxInfoItemValidFlags::TOP }, + { svx::FRAMEBORDER_BOTTOM,SvxBoxInfoItemValidFlags::BOTTOM }, + { svx::FRAMEBORDER_LEFT,SvxBoxInfoItemValidFlags::LEFT }, + { svx::FRAMEBORDER_RIGHT,SvxBoxInfoItemValidFlags::RIGHT }, + }; + SvxBoxItemLine eTypes2[] = { + SvxBoxItemLine::TOP, + SvxBoxItemLine::BOTTOM, + SvxBoxItemLine::LEFT, + SvxBoxItemLine::RIGHT, + }; + + // Check if current selection involves deletion of at least one border + bool bBorderDeletionReq = false; + for ( sal_uInt32 i=0; i < SAL_N_ELEMENTS( eTypes1 ); ++i ) + { + if( pOldBoxItem->GetLine( eTypes2[i] ) || !( pOldBoxInfoItem->IsValid( eTypes1[i].second ) ) ) + { + if( m_pFrameSel->GetFrameBorderState( eTypes1[i].first ) == svx::FRAMESTATE_HIDE ) + { + bBorderDeletionReq = true; + break; + } + } + } + + if( !bBorderDeletionReq && ( nPreset == IID_PRE_CELL_NONE || nPreset == IID_PRE_TABLE_NONE ) ) + bBorderDeletionReq = true; + + m_pRemoveAdjcentCellBordersCB->Enable( bBorderDeletionReq ); + + if( !bBorderDeletionReq ) + { + mbRemoveAdjacentCellBorders = false; + m_pRemoveAdjcentCellBordersCB->Check( false ); + } +} + void SvxBorderTabPage::DataChanged( const DataChangedEvent& rDCEvt ) { if( (rDCEvt.GetType() == DataChangedEventType::SETTINGS) && (rDCEvt.GetFlags() & AllSettingsFlags::STYLE) ) |