22 #include <string_view>
25 #include <svx/svxids.hrc>
27 #include <strings.hrc>
28 #include <bitmaps.hlst>
34 #include <dialmgr.hxx>
45 #include <com/sun/star/lang/XServiceInfo.hpp>
50 using ::com::sun::star::uno::Reference;
51 using ::com::sun::star::lang::XServiceInfo;
52 using ::com::sun::star::uno::UNO_QUERY;
73 SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_SHADOW,
74 SID_ATTR_ALIGN_MARGIN, SID_ATTR_ALIGN_MARGIN,
75 SID_ATTR_BORDER_CONNECT, SID_ATTR_BORDER_CONNECT,
76 SID_SW_COLLAPSING_BORDERS, SID_SW_COLLAPSING_BORDERS,
77 SID_ATTR_BORDER_DIAG_TLBR, SID_ATTR_BORDER_DIAG_BLTR,
93 case SvxBorderLineStyle::NONE:
96 case SvxBorderLineStyle::SOLID:
97 case SvxBorderLineStyle::DOTTED:
98 case SvxBorderLineStyle::DASHED:
99 case SvxBorderLineStyle::FINE_DASHED:
100 case SvxBorderLineStyle::DASH_DOT:
101 case SvxBorderLineStyle::DASH_DOT_DOT:
105 case SvxBorderLineStyle::DOUBLE:
return 22;
106 case SvxBorderLineStyle::DOUBLE_THIN:
return 22;
107 case SvxBorderLineStyle::THINTHICK_SMALLGAP:
return 20;
108 case SvxBorderLineStyle::THINTHICK_MEDIUMGAP:
return 15;
109 case SvxBorderLineStyle::THINTHICK_LARGEGAP:
return 15;
110 case SvxBorderLineStyle::THICKTHIN_SMALLGAP:
return 20;
111 case SvxBorderLineStyle::THICKTHIN_MEDIUMGAP:
return 15;
112 case SvxBorderLineStyle::THICKTHIN_LARGEGAP:
return 15;
114 case SvxBorderLineStyle::EMBOSSED:
return 15;
115 case SvxBorderLineStyle::ENGRAVED:
return 15;
117 case SvxBorderLineStyle::OUTSET:
return 10;
118 case SvxBorderLineStyle::INSET:
return 10;
134 , mrLbColor(rLbColor)
179 case SvxShadowLocation::NONE:
182 case SvxShadowLocation::BottomRight:
185 case SvxShadowLocation::TopRight:
188 case SvxShadowLocation::BottomLeft:
191 case SvxShadowLocation::TopLeft:
222 , mrRightWrp(rMfRight)
224 , mrBottomWrp(rMfBottom)
272 :
SfxTabPage(pPage, pController,
"cui/ui/borderpage.ui",
"BorderPage", &rCoreAttrs)
275 , mnBoxSlot(SID_ATTR_BORDER_OUTER)
276 , mnShadowSlot(SID_ATTR_BORDER_SHADOW)
277 , mbHorEnabled(false)
278 , mbVerEnabled(false)
279 , mbTLBREnabled(false)
280 , mbBLTREnabled(false)
281 , mbUseMarginItem(false)
282 , mbLeftModified(false)
283 , mbRightModified(false)
284 , mbTopModified(false)
285 , mbBottomModified(false)
287 , mbRemoveAdjacentCellBorders(false)
289 , m_xWndPresets(new
ValueSet(nullptr))
290 , m_xWndPresetsWin(new
weld::CustomWeld(*m_xBuilder,
"presets", *m_xWndPresets))
291 , m_xUserDefFT(m_xBuilder->weld_label(
"userdefft"))
292 , m_xFrameSelWin(new
weld::CustomWeld(*m_xBuilder,
"framesel", m_aFrameSel))
293 , m_xLbLineStyle(new
SvtLineListBox(m_xBuilder->weld_menu_button(
"linestylelb")))
294 , m_xLbLineColor(new
ColorListBox(m_xBuilder->weld_menu_button(
"linecolorlb"), pController->getDialog()))
295 , m_xLineWidthMF(m_xBuilder->weld_metric_spin_button(
"linewidthmf",
FieldUnit::
POINT))
296 , m_xSpacingFrame(m_xBuilder->weld_container(
"spacing"))
297 , m_xLeftFT(m_xBuilder->weld_label(
"leftft"))
298 , m_xLeftMF(m_xBuilder->weld_metric_spin_button(
"leftmf",
FieldUnit::
MM))
299 , m_xRightFT(m_xBuilder->weld_label(
"rightft"))
300 , m_xRightMF(m_xBuilder->weld_metric_spin_button(
"rightmf",
FieldUnit::
MM))
301 , m_xTopFT(m_xBuilder->weld_label(
"topft"))
302 , m_xTopMF(m_xBuilder->weld_metric_spin_button(
"topmf",
FieldUnit::
MM))
303 , m_xBottomFT(m_xBuilder->weld_label(
"bottomft"))
304 , m_xBottomMF(m_xBuilder->weld_metric_spin_button(
"bottommf",
FieldUnit::
MM))
305 , m_xSynchronizeCB(m_xBuilder->weld_check_button(
"sync"))
306 , m_xShadowFrame(m_xBuilder->weld_container(
"shadow"))
307 , m_xWndShadows(new
ValueSet(nullptr))
308 , m_xWndShadowsWin(new
weld::CustomWeld(*m_xBuilder,
"shadows", *m_xWndShadows))
309 , m_xFtShadowSize(m_xBuilder->weld_label(
"distanceft"))
310 , m_xEdShadowSize(m_xBuilder->weld_metric_spin_button(
"distancemf",
FieldUnit::
MM))
311 , m_xFtShadowColor(m_xBuilder->weld_label(
"shadowcolorft"))
312 , m_xLbShadowColor(new
ColorListBox(m_xBuilder->weld_menu_button(
"shadowcolorlb"), pController->getDialog()))
313 , m_xPropertiesFrame(m_xBuilder->weld_container(
"properties"))
314 , m_xMergeWithNextCB(m_xBuilder->weld_check_button(
"mergewithnext"))
315 , m_xMergeAdjacentBordersCB(m_xBuilder->weld_check_button(
"mergeadjacent"))
316 , m_xRemoveAdjacentCellBordersCB(m_xBuilder->weld_check_button(
"rmadjcellborders"))
317 , m_xRemoveAdjacentCellBordersFT(m_xBuilder->weld_label(
"rmadjcellbordersft"))
319 static std::vector<std::u16string_view> aBorderImageIds;
321 if (aBorderImageIds.empty())
325 aBorderImageIds.insert(aBorderImageIds.end(), {
326 u"" RID_SVXBMP_CELL_NONE_32,
327 u"" RID_SVXBMP_CELL_ALL_32,
328 u"" RID_SVXBMP_CELL_LR_32,
329 u"" RID_SVXBMP_CELL_TB_32,
330 u"" RID_SVXBMP_CELL_L_32,
331 u"" RID_SVXBMP_CELL_DIAG_32
336 aBorderImageIds.insert(aBorderImageIds.end(), {
337 u"" RID_SVXBMP_CELL_NONE,
338 u"" RID_SVXBMP_CELL_ALL,
339 u"" RID_SVXBMP_CELL_LR,
340 u"" RID_SVXBMP_CELL_TB,
341 u"" RID_SVXBMP_CELL_L,
342 u"" RID_SVXBMP_CELL_DIAG
345 aBorderImageIds.insert(aBorderImageIds.end(), {
346 u"" RID_SVXBMP_HOR_NONE,
347 u"" RID_SVXBMP_HOR_OUTER,
348 u"" RID_SVXBMP_HOR_HOR,
349 u"" RID_SVXBMP_HOR_ALL,
350 u"" RID_SVXBMP_HOR_OUTER2,
351 u"" RID_SVXBMP_VER_NONE,
352 u"" RID_SVXBMP_VER_OUTER,
353 u"" RID_SVXBMP_VER_VER,
354 u"" RID_SVXBMP_VER_ALL,
355 u"" RID_SVXBMP_VER_OUTER2,
356 u"" RID_SVXBMP_TABLE_NONE,
357 u"" RID_SVXBMP_TABLE_OUTER,
358 u"" RID_SVXBMP_TABLE_OUTERH,
359 u"" RID_SVXBMP_TABLE_ALL,
360 u"" RID_SVXBMP_TABLE_OUTER2
364 for (
auto const & rImageId : aBorderImageIds)
367 static std::vector<std::u16string_view> aShadowImageIds;
368 if (aShadowImageIds.empty())
372 aShadowImageIds.insert(aShadowImageIds.end(), {
373 u"" RID_SVXBMP_SHADOWNONE_32,
374 u"" RID_SVXBMP_SHADOW_BOT_RIGHT_32,
375 u"" RID_SVXBMP_SHADOW_TOP_RIGHT_32,
376 u"" RID_SVXBMP_SHADOW_BOT_LEFT_32,
377 u"" RID_SVXBMP_SHADOW_TOP_LEFT_32
382 aShadowImageIds.insert(aShadowImageIds.end(), {
383 u"" RID_SVXBMP_SHADOWNONE,
384 u"" RID_SVXBMP_SHADOW_BOT_RIGHT,
385 u"" RID_SVXBMP_SHADOW_TOP_RIGHT,
386 u"" RID_SVXBMP_SHADOW_BOT_LEFT,
387 u"" RID_SVXBMP_SHADOW_TOP_LEFT
392 for (
auto const & rImageId : aShadowImageIds)
406 if (rCoreAttrs.
HasItem(SID_ATTR_BORDER_STYLES, &pItem))
409 std::vector<sal_Int32> aUsedStyles = p->
GetList();
410 for (
int aUsedStyle : aUsedStyles)
414 if (rCoreAttrs.
HasItem(SID_ATTR_BORDER_DEFAULT_WIDTH, &pItem))
431 case FieldUnit::PICA:
432 case FieldUnit::INCH:
433 case FieldUnit::FOOT:
434 case FieldUnit::MILE:
435 eFUnit = FieldUnit::POINT;
441 eFUnit = FieldUnit::MM;
452 eFUnit = FieldUnit::MM;
460 sal_uInt16 nWhich =
GetWhich( SID_ATTR_BORDER_INNER,
false );
461 bool bIsDontCare =
true;
463 if ( rCoreAttrs.
GetItemState( nWhich ) >= SfxItemState::DEFAULT )
490 bIsDontCare = !pBoxInfo->
IsValid( SvxBoxInfoItemValidFlags::DISABLE );
504 nFlags |= FrameSelFlags::InnerHorizontal;
506 nFlags |= FrameSelFlags::InnerVertical;
508 nFlags |= FrameSelFlags::DiagonalTLBR;
510 nFlags |= FrameSelFlags::DiagonalBLTR;
512 nFlags |= FrameSelFlags::DontCare;
529 auto it = pGrabBag->
GetGrabBag().find(
"DialogUseCharAttr");
532 bool bDialogUseCharAttr =
false;
533 it->second >>= bDialogUseCharAttr;
534 if (bDialogUseCharAttr)
543 if( bSupportsShadow )
559 Reference< XServiceInfo > xSI( pDocSh->
GetModel(), UNO_QUERY );
561 bIsCalcDoc = xSI->supportsService(
"com.sun.star.sheet.SpreadsheetDocument");
591 return std::make_unique<SvxBorderTabPage>(pPage, pController, *rAttrSet);
620 sal_uInt16 nBorderDiagId = pPool->
GetWhich(SID_ATTR_BORDER_DIAG_TLBR);
621 if (
const SvxLineItem* pLineItem = static_cast<const SvxLineItem*>(rSet->
GetItem(nBorderDiagId)))
629 sal_uInt16 nBorderDiagId = pPool->
GetWhich(SID_ATTR_BORDER_DIAG_BLTR);
630 if (
const SvxLineItem* pLineItem = static_cast<const SvxLineItem*>(rSet->
GetItem(nBorderDiagId)))
648 sal_uInt16 nAlignMarginId = pPool->
GetWhich(SID_ATTR_ALIGN_MARGIN);
656 sal_uInt16 nMergeAdjacentBordersId = pPool->
GetWhich(SID_SW_COLLAPSING_BORDERS);
658 if (!pMergeAdjacentBorders)
664 sal_uInt16 nMergeWithNextId = pPool->
GetWhich(SID_ATTR_BORDER_CONNECT);
679 pBoxInfoItem =
GetItem( *rSet, SID_ATTR_BORDER_INNER,
false );
681 eCoreUnit = pPool->
GetMetric( nWhichBox );
683 if ( pBoxItem && pBoxInfoItem )
706 if ( pBoxInfoItem->
IsDist() )
708 if( rSet->
GetItemState( nWhichBox ) >= SfxItemState::DEFAULT )
711 if( !bIsAnyBorderVisible || !pBoxInfoItem->
IsMinDist() )
715 m_xTopMF->set_min(0, FieldUnit::NONE);
731 bool bDiffDist = (nDefDist != nLeftDist ||
732 nDefDist != nRightDist ||
733 nDefDist != nTopDist ||
734 nDefDist != nBottomDist);
780 MapUnit::MapTwip, FieldUnit::POINT ));
801 if( bWidthEq && bColorEq )
819 if (
m_xLbLineStyle->GetSelectEntryStyle() == SvxBorderLineStyle::NONE)
827 if(SfxItemState::SET == rSet->
GetItemState(SID_HTML_MODE,
false, &pItem) ||
829 nullptr != (pItem = pShell->
GetItem(SID_HTML_MODE))))
837 if( !(
nSWMode & SwBorderModes::TABLE) )
848 LinesChanged_Impl(
nullptr );
879 return DeactivateRC::LeavePage;
884 bool bAttrsChanged =
false;
893 SvxLineItem aLineItem(*static_cast<const SvxLineItem*>(pOldItem));
895 rCoreAttrs->
Put(aLineItem);
896 bAttrsChanged =
true;
905 SvxLineItem aLineItem(*static_cast<const SvxLineItem*>(pOldItem));
907 rCoreAttrs->
Put(aLineItem);
908 bAttrsChanged =
true;
918 bAttrsChanged =
true;
928 bAttrsChanged =
true;
937 sal_uInt16 nMergeAdjacentBordersId = pPool->
GetWhich(SID_SW_COLLAPSING_BORDERS);
938 rCoreAttrs->
ClearItem(nMergeAdjacentBordersId);
944 std::unique_ptr<SfxBoolItem> xNewItem(static_cast<SfxBoolItem*>(pOldItem->Clone()));
945 xNewItem->SetValue(static_cast<bool>(
nState));
946 rCoreAttrs->
Put(std::move(xNewItem));
949 bAttrsChanged =
true;
957 sal_uInt16 nMergeWithNextId = pPool->
GetWhich(SID_ATTR_BORDER_CONNECT);
964 std::unique_ptr<SfxBoolItem> xNewItem(static_cast<SfxBoolItem*>(pOldItem->Clone()));
965 xNewItem->SetValue(static_cast<bool>(
nState));
966 rCoreAttrs->
Put(std::move(xNewItem));
969 bAttrsChanged =
true;
974 sal_uInt16 nBoxInfoWhich = pPool->
GetWhich( SID_ATTR_BORDER_INNER,
false );
985 std::pair<svx::FrameBorderType,SvxBoxItemLine> eTypes1[] = {
992 for (std::pair<svx::FrameBorderType,SvxBoxItemLine>
const &
i : eTypes1)
999 std::pair<svx::FrameBorderType,SvxBoxInfoItemLine> eTypes2[] = {
1003 for (std::pair<svx::FrameBorderType,SvxBoxInfoItemLine>
const & j : eTypes2)
1026 m_xLeftMF->get_value_changed_from_saved() ||
1027 m_xRightMF->get_value_changed_from_saved() ||
1028 m_xTopMF->get_value_changed_from_saved() ||
1034 (pOldBoxInfoItem && !pOldBoxInfoItem->
IsValid(SvxBoxInfoItemValidFlags::DISTANCE))
1049 aBoxInfoItem.
SetValid( SvxBoxInfoItemValidFlags::DISTANCE );
1069 if ( SfxItemState::DEFAULT == rOldSet.
GetItemState( nBoxWhich,
false ))
1071 bPut = aBoxItem !=
static_cast<const SvxBoxItem&
>(rOldSet.
Get(nBoxWhich));
1073 if( SfxItemState::DEFAULT == rOldSet.
GetItemState( nBoxInfoWhich,
false ) )
1076 rOldSet.
Get(nBoxInfoWhich));
1080 bPut |= (aBoxInfoItem != rOldBoxInfo );
1085 if ( !pOldBoxItem || *pOldBoxItem != aBoxItem )
1087 rCoreAttrs->
Put( aBoxItem );
1088 bAttrsChanged =
true;
1092 if ( !pOld || *static_cast<const SvxBoxInfoItem*>(pOld) != aBoxInfoItem )
1094 rCoreAttrs->
Put( aBoxInfoItem );
1095 bAttrsChanged =
true;
1104 return bAttrsChanged;
1112 #define IID_PRE_CELL_NONE 1
1113 #define IID_PRE_CELL_ALL 2
1114 #define IID_PRE_CELL_LR 3
1115 #define IID_PRE_CELL_TB 4
1116 #define IID_PRE_CELL_L 5
1117 #define IID_PRE_CELL_DIAG 6
1118 #define IID_PRE_HOR_NONE 7
1119 #define IID_PRE_HOR_OUTER 8
1120 #define IID_PRE_HOR_HOR 9
1121 #define IID_PRE_HOR_ALL 10
1122 #define IID_PRE_HOR_OUTER2 11
1123 #define IID_PRE_VER_NONE 12
1124 #define IID_PRE_VER_OUTER 13
1125 #define IID_PRE_VER_VER 14
1126 #define IID_PRE_VER_ALL 15
1127 #define IID_PRE_VER_OUTER2 16
1128 #define IID_PRE_TABLE_NONE 17
1129 #define IID_PRE_TABLE_OUTER 18
1130 #define IID_PRE_TABLE_OUTERH 19
1131 #define IID_PRE_TABLE_ALL 20
1132 #define IID_PRE_TABLE_OUTER2 21
1143 { HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE },
1144 { SHOW, SHOW, SHOW, SHOW, HIDE, HIDE, HIDE, HIDE },
1145 { SHOW, SHOW, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE },
1146 { HIDE, HIDE, SHOW, SHOW, HIDE, HIDE, HIDE, HIDE },
1147 { SHOW, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE },
1148 { HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, SHOW, SHOW },
1149 { HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE },
1150 { SHOW, SHOW, SHOW, SHOW, HIDE, HIDE, HIDE, HIDE },
1151 { HIDE, HIDE, SHOW, SHOW, SHOW, HIDE, HIDE, HIDE },
1152 { SHOW, SHOW, SHOW, SHOW, SHOW, HIDE, HIDE, HIDE },
1153 { SHOW, SHOW, SHOW, SHOW, DONT, HIDE, HIDE, HIDE },
1154 { HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE },
1155 { SHOW, SHOW, SHOW, SHOW, HIDE, HIDE, HIDE, HIDE },
1156 { SHOW, SHOW, HIDE, HIDE, HIDE, SHOW, HIDE, HIDE },
1157 { SHOW, SHOW, SHOW, SHOW, HIDE, SHOW, HIDE, HIDE },
1158 { SHOW, SHOW, SHOW, SHOW, HIDE, DONT, HIDE, HIDE },
1159 { HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE, HIDE },
1160 { SHOW, SHOW, SHOW, SHOW, HIDE, HIDE, HIDE, HIDE },
1161 { SHOW, SHOW, SHOW, SHOW, SHOW, HIDE, HIDE, HIDE },
1162 { SHOW, SHOW, SHOW, SHOW, SHOW, SHOW, HIDE, HIDE },
1163 { SHOW, SHOW, SHOW, SHOW, DONT, DONT, HIDE, HIDE }
1167 m_aFrameSel.HideAllBorders();
1168 m_aFrameSel.DeselectAllBorders();
1171 sal_uInt16 nLine = GetPresetImageId( m_xWndPresets->GetSelectedItemId() ) - 1;
1177 switch( ppeStates[ nLine ][
nBorder ] )
1179 case SHOW: m_aFrameSel.SelectBorder( eBorder );
break;
1181 case DONT: m_aFrameSel.SetBorderDontCare( eBorder );
break;
1186 if( m_aFrameSel.IsAnyBorderSelected() )
1189 if (m_xLbLineStyle->GetSelectEntryStyle() == SvxBorderLineStyle::NONE)
1190 m_xLbLineStyle->SelectEntry(SvxBorderLineStyle::SOLID);
1193 SelStyleHdl_Impl(*m_xLbLineStyle);
1194 SelColHdl_Impl(*m_xLbLineColor);
1198 m_xWndPresets->SetNoSelection();
1200 LinesChanged_Impl(
nullptr );
1201 UpdateRemoveAdjCellBorderCB( nLine + 1 );
1206 bool bEnable = m_xWndShadows->GetSelectedItemId() > 1;
1207 m_xFtShadowSize->set_sensitive(bEnable);
1208 m_xEdShadowSize->set_sensitive(bEnable);
1209 m_xFtShadowColor->set_sensitive(bEnable);
1210 m_xLbShadowColor->set_sensitive(bEnable);
1215 Color aColor = rColorBox.GetSelectEntryColor();
1216 m_aFrameSel.SetColorToSelection(aColor);
1221 sal_Int64 nVal = m_xLineWidthMF->get_value(FieldUnit::NONE);
1224 m_xLineWidthMF->get_digits(),
1225 FieldUnit::POINT, MapUnit::MapTwip ));
1226 m_xLbLineStyle->SetWidth( nVal );
1228 m_aFrameSel.SetStyleToSelection( nVal,
1229 m_xLbLineStyle->GetSelectEntryStyle() );
1234 sal_Int64 nOldWidth = m_xLineWidthMF->get_value(FieldUnit::NONE);
1237 m_xLineWidthMF->get_digits(),
1241 const sal_Int64 nOldMinWidth =
lcl_GetMinLineWidth(m_aFrameSel.getCurrentStyleLineStyle());
1242 const sal_Int64 nNewMinWidth =
lcl_GetMinLineWidth(m_xLbLineStyle->GetSelectEntryStyle());
1246 const sal_Int64 nNewWidth = (nOldMinWidth == nOldWidth)? nNewMinWidth : nOldWidth;
1249 if (nOldWidth != nNewWidth)
1253 m_xLineWidthMF->get_digits(),
1256 m_xLineWidthMF->set_value(nNewWidthPt, FieldUnit::POINT);
1260 m_aFrameSel.SetStyleToSelection( nNewWidth,
1261 m_xLbLineStyle->GetSelectEntryStyle() );
1295 "SvxBorderTabPage::GetPresetImageId - wrong index" );
1296 return ppnImgIds[ nLine ][ nValueSetIdx - 1 ];
1302 static const char* pnStrIds[] =
1304 RID_SVXSTR_TABLE_PRESET_NONE,
1305 RID_SVXSTR_PARA_PRESET_ALL,
1306 RID_SVXSTR_PARA_PRESET_LEFTRIGHT,
1307 RID_SVXSTR_PARA_PRESET_TOPBOTTOM,
1308 RID_SVXSTR_PARA_PRESET_ONLYLEFT,
1309 RID_SVXSTR_PARA_PRESET_DIAGONAL,
1311 RID_SVXSTR_TABLE_PRESET_NONE,
1312 RID_SVXSTR_TABLE_PRESET_ONLYOUTER,
1313 RID_SVXSTR_HOR_PRESET_ONLYHOR,
1314 RID_SVXSTR_TABLE_PRESET_OUTERALL,
1315 RID_SVXSTR_TABLE_PRESET_OUTERINNER,
1317 RID_SVXSTR_TABLE_PRESET_NONE,
1318 RID_SVXSTR_TABLE_PRESET_ONLYOUTER,
1319 RID_SVXSTR_VER_PRESET_ONLYVER,
1320 RID_SVXSTR_TABLE_PRESET_OUTERALL,
1321 RID_SVXSTR_TABLE_PRESET_OUTERINNER,
1323 RID_SVXSTR_TABLE_PRESET_NONE,
1324 RID_SVXSTR_TABLE_PRESET_ONLYOUTER,
1325 RID_SVXSTR_TABLE_PRESET_OUTERHORI,
1326 RID_SVXSTR_TABLE_PRESET_OUTERALL,
1327 RID_SVXSTR_TABLE_PRESET_OUTERINNER
1360 { RID_SVXSTR_SHADOW_STYLE_NONE, RID_SVXSTR_SHADOW_STYLE_BOTTOMRIGHT, RID_SVXSTR_SHADOW_STYLE_TOPRIGHT, RID_SVXSTR_SHADOW_STYLE_BOTTOMLEFT, RID_SVXSTR_SHADOW_STYLE_TOPLEFT };
1386 return SvxBorderLine::threeDMediumColor( aMain );
1391 using namespace ::com::sun::star::table::BorderLineStyle;
1398 }
const aLines[] = {
1417 { SvxBorderLineStyle::EMBOSSED, &SvxBorderLine::threeDLightColor, &SvxBorderLine::threeDDarkColor, &
lcl_mediumColor },
1418 { SvxBorderLineStyle::ENGRAVED, &SvxBorderLine::threeDDarkColor, &SvxBorderLine::threeDLightColor, &
lcl_mediumColor },
1420 { SvxBorderLineStyle::OUTSET, &SvxBorderLine::lightColor, &SvxBorderLine::darkColor, &
sameDistColor },
1421 { SvxBorderLineStyle::INSET, &SvxBorderLine::darkColor, &SvxBorderLine::lightColor, &
sameDistColor }
1432 SvxBorderLine::getWidthImpl(aLines[
i].mnStyle),
1435 aLines[
i].mpColor1Fn,
1436 aLines[
i].mpColor2Fn,
1437 aLines[
i].mpColorDistFn);
1449 if (!mbUseMarginItem && m_xLeftMF->get_visible())
1451 bool bLineSet = m_aFrameSel.IsAnyBorderVisible();
1452 bool bSpaceModified = mbLeftModified ||
1461 m_xLeftMF->set_value(nMinValue, FieldUnit::NONE);
1462 m_xRightMF->set_value(nMinValue, FieldUnit::NONE);
1463 m_xTopMF->set_value(nMinValue, FieldUnit::NONE);
1464 m_xBottomMF->set_value(nMinValue, FieldUnit::NONE);
1469 m_xLeftMF->set_min(0, FieldUnit::NONE);
1470 m_xRightMF->set_min(0, FieldUnit::NONE);
1471 m_xTopMF->set_min(0, FieldUnit::NONE);
1472 m_xBottomMF->set_min(0, FieldUnit::NONE);
1475 SvxBoxInfoItemValidFlags nValid = SvxBoxInfoItemValidFlags::TOP|SvxBoxInfoItemValidFlags::BOTTOM|SvxBoxInfoItemValidFlags::LEFT|SvxBoxInfoItemValidFlags::RIGHT;
1477 m_xLeftFT->set_sensitive(
bool(nValid & SvxBoxInfoItemValidFlags::LEFT) );
1478 m_xRightFT->set_sensitive(
bool(nValid & SvxBoxInfoItemValidFlags::RIGHT) );
1479 m_xTopFT->set_sensitive(
bool(nValid & SvxBoxInfoItemValidFlags::TOP) );
1480 m_xBottomFT->set_sensitive(
bool(nValid & SvxBoxInfoItemValidFlags::BOTTOM) );
1481 m_xLeftMF->set_sensitive(
bool(nValid & SvxBoxInfoItemValidFlags::LEFT) );
1482 m_xRightMF->set_sensitive(
bool(nValid & SvxBoxInfoItemValidFlags::RIGHT) );
1483 m_xTopMF->set_sensitive(
bool(nValid & SvxBoxInfoItemValidFlags::TOP) );
1484 m_xBottomMF->set_sensitive(
bool(nValid & SvxBoxInfoItemValidFlags::BOTTOM) );
1485 m_xSynchronizeCB->set_sensitive(m_xRightMF->get_sensitive() || m_xTopMF->get_sensitive() ||
1486 m_xBottomMF->get_sensitive() || m_xLeftMF->get_sensitive());
1494 if (&rField == m_xLeftMF.get())
1495 mbLeftModified =
true;
1496 else if (&rField == m_xRightMF.get())
1497 mbRightModified =
true;
1498 else if (&rField == m_xTopMF.get())
1499 mbTopModified =
true;
1500 else if (&rField == m_xBottomMF.get())
1501 mbBottomModified =
true;
1505 const auto nVal = rField.get_value(FieldUnit::NONE);
1506 if (&rField != m_xLeftMF.get())
1507 m_xLeftMF->set_value(nVal, FieldUnit::NONE);
1508 if (&rField != m_xRightMF.get())
1509 m_xRightMF->set_value(nVal, FieldUnit::NONE);
1510 if (&rField != m_xTopMF.get())
1511 m_xTopMF->set_value(nVal, FieldUnit::NONE);
1512 if (&rField != m_xBottomMF.get())
1513 m_xBottomMF->set_value(nVal, FieldUnit::NONE);
1519 mbSync = rBox.get_active();
1524 mbRemoveAdjacentCellBorders = rBox.get_active();
1534 if( !pOldBoxInfoItem || !pOldBoxItem )
1536 std::pair<svx::FrameBorderType, SvxBoxInfoItemValidFlags> eTypes1[] = {
1543 SvxBoxItemLine::TOP,
1544 SvxBoxItemLine::BOTTOM,
1545 SvxBoxItemLine::LEFT,
1546 SvxBoxItemLine::RIGHT,
1550 bool bBorderDeletionReq =
false;
1553 if( pOldBoxItem->
GetLine( eTypes2[
i] ) || !( pOldBoxInfoItem->
IsValid( eTypes1[i].second ) ) )
1557 bBorderDeletionReq =
true;
1564 bBorderDeletionReq =
true;
1568 if( !bBorderDeletionReq )
1584 if (
nSWMode == SwBorderModes::PARA )
1590 else if (
nSWMode == SwBorderModes::TABLE )
1603 nSWMode = SwBorderModes::TABLE;
#define LINK(Instance, Class, Member)
virtual ~SvxBorderTabPage() override
bool mbHorEnabled
true = Inner horizontal border enabled.
std::unique_ptr< ValueSet > m_xWndShadows
void SetFieldUnit(weld::MetricSpinButton &rField, FieldUnit eUnit, bool bAll)
std::unique_ptr< ShadowControlsWrapper > m_xShadowControls
FrameBorderType GetFrameBorderTypeFromIndex(size_t nIndex)
static Color lcl_mediumColor(Color aMain, Color)
static const sal_uInt16 pRanges[]
bool get_value_changed_from_saved() const
void SetLeftMargin(sal_Int16 nLeft)
void SetDefDist(sal_uInt16 nNew)
std::unique_ptr< weld::CheckButton > m_xMergeWithNextCB
bool IsNoSelection() const
weld::MetricSpinButton & mrRightWrp
tools::Long nMinValue
minimum distance
bool mbRemoveAdjacentCellBorders
void SetMinDist(bool bNew)
#define IID_PRE_TABLE_OUTERH
Color(* ColorFunc)(Color)
bool IsHorEnabled() const
void SetColor(const Color &rNew)
const StyleSettings & GetStyleSettings() const
static const AllSettings & GetSettings()
const editeng::SvxBorderLine * GetVert() const
sal_uInt16 GetValue() const
virtual void ChangesApplied() override
sal_uInt16 GetDistance(SvxBoxItemLine nLine) const
#define IID_PRE_HOR_OUTER
sal_uInt16 GetPresetImageId(sal_uInt16 nValueSetIdx) const
std::unique_ptr< weld::Container > m_xSpacingFrame
virtual void Reset(const SfxItemSet *) override
sal_uInt16 GetDefDist() const
static std::unique_ptr< SfxTabPage > Create(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet *rAttrSet)
std::unique_ptr< ColorListBox > m_xLbLineColor
sal_uInt16 GetSelectedItemId() const
static SfxObjectShell * Current()
sal_Int16 GetRightMargin() const
virtual void PageCreated(const SfxAllItemSet &aSet) override
void SetLine(const editeng::SvxBorderLine *pNew)
css::uno::Reference< css::frame::XModel > GetModel() const
SvxBorderTabPage(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet &rCoreAttrs)
const editeng::SvxBorderLine * GetRight() const
std::vector< Image > m_aShadowImgVec
void ResetFrameLine_Impl(svx::FrameBorderType eBorder, const editeng::SvxBorderLine *pCurLine, bool bValid)
share for individual Frame-/Core-Line
std::unique_ptr< weld::Container > m_xShadowFrame
static const SfxPoolItem * GetItem(const SfxItemSet &rSet, sal_uInt16 nSlot, bool bDeep=true)
IMPL_LINK_NOARG(SvxBorderTabPage, SelPreHdl_Impl, ValueSet *, void)
std::unique_ptr< weld::Label > m_xRemoveAdjacentCellBordersFT
std::unique_ptr< weld::CheckButton > m_xSynchronizeCB
FieldUnit GetModuleFieldUnit(const SfxItemSet &rSet)
void SetSelectHdl(const Link< LinkParamNone *, void > &rHdl)
void Initialize(FrameSelFlags nFlags)
std::unique_ptr< weld::CustomWeld > m_xWndShadowsWin
void SetControlDontKnow()
virtual MapUnit GetMetric(sal_uInt16 nWhich) const
IMPL_LINK(SvxBorderTabPage, SelColHdl_Impl, ColorListBox &, rColorBox, void)
bool IsNoSelection() const
SvxShadowLocation GetLocation() const
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
std::unique_ptr< weld::CustomWeld > m_xFrameSelWin
void SetExchangeSupport()
bool get_value_changed_from_saved() const
std::unique_ptr< weld::Label > m_xFtShadowColor
bool mbBLTREnabled
true = Bottom-left to top-right border enabled.
enum SvxBorderLineStyle sal_Int16 typedef::std::vector< FontMetric > ImplFontList Color sameColor(Color rMain)
bool IsAnyBorderVisible() const
std::unique_ptr< weld::Container > m_xPropertiesFrame
properties - "Merge with next paragraph" in Writer
const editeng::SvxBorderLine * GetLine(SvxBoxItemLine nLine) const
void EnableHor(bool bEnable)
std::unique_ptr< weld::MetricSpinButton > m_xBottomMF
std::unique_ptr< weld::MetricSpinButton > m_xRightMF
#define IID_PRE_TABLE_NONE
static sal_Int64 lcl_GetMinLineWidth(SvxBorderLineStyle aStyle)
std::vector< Image > m_aBorderImgVec
const SfxItemSet & GetItemSet() const
#define SAL_N_ELEMENTS(arr)
Color(* ColorDistFunc)(Color, Color)
std::unique_ptr< weld::CheckButton > m_xRemoveAdjacentCellBordersCB
void SetTopMargin(sal_Int16 nTop)
virtual DeactivateRC DeactivatePage(SfxItemSet *pSet) override
weld::MetricSpinButton & mrLeftWrp
const SfxPoolItem * GetItem(sal_uInt16 nSlotId) const
const editeng::SvxBorderLine * GetHori() const
const SfxPoolItem * GetOldItem(const SfxItemSet &rSet, sal_uInt16 nSlot, bool bDeep=true)
void SelectEntry(const NamedColor &rColor)
void SetRemoveAdjacentCellBorder(bool bSet)
const Color & GetColor() const
std::set< SvxBorderLineStyle > maUsedBorderStyles
SwBorderModes nSWMode
table, textframe, paragraph
const editeng::SvxBorderLine * GetTop() const
sal_uInt16 ClearItem(sal_uInt16 nWhich=0)
const editeng::SvxBorderLine * GetLeft() const
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
#define DBG_ASSERT(sCon, aError)
weld::MetricSpinButton & mrBottomWrp
std::unique_ptr< weld::MetricSpinButton > m_xEdShadowSize
bool GetVisibleWidth(tools::Long &rnWidth, SvxBorderLineStyle &rnStyle) const
void SetRightMargin(sal_Int16 nRight)
bool IsBorderLineStyleAllowed(SvxBorderLineStyle nStyle) const
bool IsValueChangedFromSaved() const
std::unique_ptr< ColorListBox > m_xLbShadowColor
std::unique_ptr< weld::MetricSpinButton > m_xTopMF
Color sameDistColor(Color, Color rDefault)
bool mbVerEnabled
true = Inner vertical border enabled.
int GetCoreValue(const weld::MetricSpinButton &rField, MapUnit eUnit)
bool IsBorderEnabled(FrameBorderType eBorder) const
weld::MetricSpinButton & mrTopWrp
void SetLine(const editeng::SvxBorderLine *pNew, SvxBoxInfoItemLine nLine)
bool IsValueChangedFromSaved() const
const char * GetPresetStringId(sal_uInt16 nValueSetIdx) const
const std::map< OUString, css::uno::Any > & GetGrabBag() const
virtual bool FillItemSet(SfxItemSet *rCoreAttrs) override
#define IID_PRE_HOR_OUTER2
void SetControlValue(const SvxMarginItem &rItem)
void SetBottomMargin(sal_Int16 nBottom)
#define IID_PRE_VER_OUTER2
void SetDistance(sal_uInt16 nNew, SvxBoxItemLine nLine)
const editeng::SvxBorderLine * GetFrameBorderStyle(FrameBorderType eBorder) const
SvxShadowItem GetControlValue(const SvxShadowItem &rItem) const
const sal_uInt16 SVX_BORDER_PRESET_COUNT
void SetMetricValue(weld::MetricSpinButton &rField, int nCoreValue, MapUnit eUnit)
#define IID_PRE_VER_OUTER
SfxItemPool * GetPool() const
OUString CuiResId(const char *pKey)
sal_Int16 GetBottomMargin() const
static bool IsSlot(sal_uInt16 nId)
void EnableVer(bool bEnable)
sal_Int64 GetValue() const
std::unique_ptr< weld::MetricSpinButton > m_xLeftMF
bool GetVisibleColor(Color &rColor) const
SvxMarginItem GetControlValue(const SvxMarginItem &rItem) const
bool IsValid(SvxBoxInfoItemValidFlags nValid) const
void SelectItem(sal_uInt16 nItemId)
tools::Long const nBorder
#define IID_PRE_TABLE_OUTER
void SelectAllVisibleBorders()
void ShowBorder(FrameBorderType eBorder, const editeng::SvxBorderLine *pStyle)
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
std::unique_ptr< weld::Label > m_xFtShadowSize
MarginControlsWrapper(weld::MetricSpinButton &rMfLeft, weld::MetricSpinButton &rMfRight, weld::MetricSpinButton &rMfTop, weld::MetricSpinButton &rMfBottom)
svx::FrameSelector m_aFrameSel
std::unique_ptr< weld::CustomWeld > m_xWndPresetsWin
Color const & GetSelectEntryColor() const
std::unique_ptr< ValueSet > m_xWndPresets
std::unique_ptr< SvtLineListBox > m_xLbLineStyle
#define IID_PRE_CELL_NONE
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
sal_uInt16 GetWhich(sal_uInt16 nSlot, bool bDeep=true) const
ShadowControlsWrapper(ValueSet &rVsPos, weld::MetricSpinButton &rMfSize, ColorListBox &rLbColor)
void SetWidth(sal_uInt16 nNew)
void SetLocation(SvxShadowLocation eNew)
#define SVX_HIDESHADOWCTL
bool mbTLBREnabled
true = Top-left to bottom-right border enabled.
const int FRAMEBORDERTYPE_COUNT
sal_Int16 GetLeftMargin() const
bool HasItem(sal_uInt16 nWhich, const SfxPoolItem **ppItem=nullptr) const
#define IID_PRE_TABLE_OUTER2
const ::std::vector< Color > ImpSvNumberformatScan::StandardColor COL_BLACK
std::unique_ptr< weld::Label > m_xUserDefFT
std::unique_ptr< weld::MetricSpinButton > m_xLineWidthMF
void HideShadowControls()
void SetControlValue(const SvxShadowItem &rItem)
const sal_uInt16 SVX_BORDER_SHADOW_COUNT
void SetValid(SvxBoxInfoItemValidFlags nValid, bool bValid=true)
void FillLineListBox_Impl()
FrameBorderState GetFrameBorderState(FrameBorderType eBorder) const
double ConvertDoubleValue(double nValue, sal_Int64 mnBaseValue, sal_uInt16 nDecDigits, FieldUnit eInUnit, FieldUnit eOutUnit)
#define IID_PRE_CELL_DIAG
#define IID_PRE_TABLE_ALL
std::unique_ptr< MarginControlsWrapper > m_xMarginControls
void SetBorderDontCare(FrameBorderType eBorder)
std::unique_ptr< weld::CheckButton > m_xMergeAdjacentBordersCB
sal_uInt16 GetSmallestDistance() const
const SfxPoolItem * GetItem(sal_uInt16 nWhich, bool bSearchInParent=true) const
const std::vector< sal_Int32 > & GetList() const
void UpdateRemoveAdjCellBorderCB(sal_uInt16 nPreset)
weld::MetricSpinButton & mrMfSize
const editeng::SvxBorderLine * GetBottom() const
void DeselectAllBorders()
const Color & GetWindowTextColor() const
void SetControlDontKnow()
sal_uInt16 GetWhich(sal_uInt16 nSlot, bool bDeep=true) const
bool IsVerEnabled() const
sal_uInt16 GetWidth() const
void SetLine(const editeng::SvxBorderLine *pNew, SvxBoxItemLine nLine)
sal_Int16 GetTopMargin() const
static void lcl_SetDecimalDigitsTo1(weld::MetricSpinButton &rField)