summaryrefslogtreecommitdiff
path: root/cui/source
diff options
context:
space:
mode:
authorDennis Francis <dennisfrancis.in@gmail.com>2015-11-01 03:49:38 +0530
committerEike Rathke <erack@redhat.com>2015-12-07 13:49:53 +0000
commit2e512174f2116d86682037459fd5ab5164e9f510 (patch)
treef28b135f29c1246a7a1f6a766de1214ab49f3bf6 /cui/source
parent1a032dcfebc2702f0612c470d6b9c3e3cf4fb637 (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.hxx5
-rw-r--r--cui/source/tabpages/border.cxx86
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) )