sw/source/core/inc/flyfrm.hxx | 13 + sw/source/core/inc/frame.hxx | 2 sw/source/core/layout/calcmove.cxx | 15 ++ sw/source/core/layout/fly.cxx | 181 ++++++++++++++++++--------- sw/source/core/layout/flylay.cxx | 8 + sw/source/ui/frmdlg/frmpage.cxx | 36 +++++ sw/source/ui/inc/frmpage.hxx | 3 sw/uiconfig/swriter/ui/frmaddpage.ui | 233 +++++++++++++++++++++++++---------- 8 files changed, 367 insertions(+), 124 deletions(-)
New commits: commit cb19042f4395c97d123a27c6960d5e30d666c010 Author: Zolnai Tamás <tamas.zol...@collabora.com> Date: Wed Mar 5 22:15:09 2014 +0100 New feature: vertical alignment for text frames: Layout part - Introduce a new attribute (content position) for fly frames. Content position specify the top-left corner of the content area (where frame content can be placed). Add methods and members for invalidation. - Extract content's height calculation from SwFlyFrm::Format() to a funtction so we can use this inside SwFlyFrm::MakeContentPos. Change-Id: I64abb70afb652ad5c11aa69b5ba12a85210e215b diff --git a/sw/source/core/inc/flyfrm.hxx b/sw/source/core/inc/flyfrm.hxx index 234e94d..a666a9d 100644 --- a/sw/source/core/inc/flyfrm.hxx +++ b/sw/source/core/inc/flyfrm.hxx @@ -118,8 +118,12 @@ protected: friend class SwNoTxtFrm; // is allowed to call NotifyBackground + Point m_aContentPos; // content area's position relatively to Frm + bool m_bValidContentPos; + virtual void Format( const SwBorderAttrs *pAttrs = 0 ); void MakePrtArea( const SwBorderAttrs &rAttrs ); + void MakeContentPos( const SwBorderAttrs &rAttrs ); void Lock() { bLocked = sal_True; } void Unlock() { bLocked = sal_False; } @@ -147,6 +151,8 @@ protected: virtual const IDocumentDrawModelAccess* getIDocumentDrawModelAccess( ); + SwTwips CalcContentHeight(const SwBorderAttrs *pAttrs, const SwTwips nMinHeight, const SwTwips nUL); + public: // #i26791# TYPEINFO(); @@ -279,6 +285,13 @@ public: virtual SwFlyFrmFmt *GetFmt(); virtual void dumpAsXml( xmlTextWriterPtr writer ) { SwLayoutFrm::dumpAsXml( writer ); }; + + virtual void Calc() const; + + const Point& ContentPos() const { return m_aContentPos; } + Point& ContentPos() { return m_aContentPos; } + + void InvalidateContentPos(); }; #endif diff --git a/sw/source/core/inc/frame.hxx b/sw/source/core/inc/frame.hxx index c78614a..73b32f8 100644 --- a/sw/source/core/inc/frame.hxx +++ b/sw/source/core/inc/frame.hxx @@ -682,7 +682,7 @@ public: inline SwLayoutFrm *GetPrevLayoutLeaf(); inline SwLayoutFrm *GetNextLayoutLeaf(); - inline void Calc() const; // here might be "formatted" + virtual void Calc() const; // here might be "formatted" inline void OptCalc() const; // here we assume (for optimization) that // the predecessors are already formatted diff --git a/sw/source/core/layout/calcmove.cxx b/sw/source/core/layout/calcmove.cxx index b8e9b12..88be7b6 100644 --- a/sw/source/core/layout/calcmove.cxx +++ b/sw/source/core/layout/calcmove.cxx @@ -25,6 +25,7 @@ #include "fmtftn.hxx" #include <editeng/ulspitem.hxx> #include <editeng/keepitem.hxx> +#include <svx/sdtaitm.hxx> #include <fmtfsize.hxx> #include <fmtanchr.hxx> @@ -581,7 +582,11 @@ void SwFrm::MakePos() else { maFrm.Pos( GetUpper()->Frm().Pos() ); - maFrm.Pos() += GetUpper()->Prt().Pos(); + if( GetUpper()->IsFlyFrm() ) + maFrm.Pos() += static_cast<SwFlyFrm*>(GetUpper())->ContentPos(); + else + maFrm.Pos() += GetUpper()->Prt().Pos(); + if( FRM_NEIGHBOUR & nMyType && IsRightToLeft() ) { if( bVert ) @@ -1335,6 +1340,14 @@ void SwCntntFrm::MakeAll() if ( nConsequetiveFormatsWithoutChange <= cnStopFormat ) { Format(); + + // When a lower of a vertically aligned fly frame changes it's size we need to recalculate content pos. + if( GetUpper() && GetUpper()->IsFlyFrm() && + GetUpper()->GetFmt()->GetTextVertAdjust().GetValue() != SDRTEXTVERTADJUST_TOP ) + { + static_cast<SwFlyFrm*>(GetUpper())->InvalidateContentPos(); + GetUpper()->SetCompletePaint(); + } } #if OSL_DEBUG_LEVEL > 0 else diff --git a/sw/source/core/layout/fly.cxx b/sw/source/core/layout/fly.cxx index df97a35..5d0aede 100644 --- a/sw/source/core/layout/fly.cxx +++ b/sw/source/core/layout/fly.cxx @@ -72,7 +72,8 @@ SwFlyFrm::SwFlyFrm( SwFlyFrmFmt *pFmt, SwFrm* pSib, SwFrm *pAnch ) : bLayout( sal_False ), bAutoPosition( sal_False ), bNoShrink( sal_False ), - bLockDeleteContent( sal_False ) + bLockDeleteContent( sal_False ), + m_bValidContentPos( false ) { mnType = FRMC_FLY; @@ -931,6 +932,13 @@ void SwFlyFrm::_UpdateAttr( const SfxPoolItem *pOld, const SfxPoolItem *pNew, } break; + case RES_TEXT_VERT_ADJUST: + { + InvalidateContentPos(); + rInvFlags |= 0x10; + } + break; + case RES_BOX: case RES_SHADOW: rInvFlags |= 0x17; @@ -1232,7 +1240,7 @@ void SwFlyFrm::Format( const SwBorderAttrs *pAttrs ) const SwTwips nUL = pAttrs->CalcTopLine() + pAttrs->CalcBottomLine(); const SwTwips nLR = pAttrs->CalcLeftLine() + pAttrs->CalcRightLine(); const SwFmtFrmSize &rFrmSz = GetFmt()->GetFrmSize(); - Size aRelSize( CalcRel( rFrmSz ) ); + Size aRelSize( CalcRel( rFrmSz ) ); OSL_ENSURE( pAttrs->GetSize().Height() != 0 || rFrmSz.GetHeightPercent(), "FrameAttr height is 0." ); OSL_ENSURE( pAttrs->GetSize().Width() != 0 || rFrmSz.GetWidthPercent(), "FrameAttr width is 0." ); @@ -1240,62 +1248,11 @@ void SwFlyFrm::Format( const SwBorderAttrs *pAttrs ) SWRECTFN( this ) if( !HasFixSize() ) { - SwTwips nRemaining = 0; - long nMinHeight = 0; if( IsMinHeight() ) nMinHeight = bVert ? aRelSize.Width() : aRelSize.Height(); - if ( Lower() ) - { - if ( Lower()->IsColumnFrm() ) - { - FormatWidthCols( *pAttrs, nUL, nMinHeight ); - nRemaining = (Lower()->Frm().*fnRect->fnGetHeight)(); - } - else - { - SwFrm *pFrm = Lower(); - while ( pFrm ) - { - nRemaining += (pFrm->Frm().*fnRect->fnGetHeight)(); - if( pFrm->IsTxtFrm() && ((SwTxtFrm*)pFrm)->IsUndersized() ) - // This TxtFrm would like to be a bit larger - nRemaining += ((SwTxtFrm*)pFrm)->GetParHeight() - - (pFrm->Prt().*fnRect->fnGetHeight)(); - else if( pFrm->IsSctFrm() && ((SwSectionFrm*)pFrm)->IsUndersized() ) - nRemaining += ((SwSectionFrm*)pFrm)->Undersize(); - pFrm = pFrm->GetNext(); - } - } - if ( GetDrawObjs() ) - { - sal_uInt32 nCnt = GetDrawObjs()->Count(); - SwTwips nTop = (Frm().*fnRect->fnGetTop)(); - SwTwips nBorder = (Frm().*fnRect->fnGetHeight)() - - (Prt().*fnRect->fnGetHeight)(); - for ( sal_uInt16 i = 0; i < nCnt; ++i ) - { - SwAnchoredObject* pAnchoredObj = (*GetDrawObjs())[i]; - if ( pAnchoredObj->ISA(SwFlyFrm) ) - { - SwFlyFrm* pFly = static_cast<SwFlyFrm*>(pAnchoredObj); - // OD 06.11.2003 #i22305# - consider - // only Writer fly frames, which follow the text flow. - if ( pFly->IsFlyLayFrm() && - pFly->Frm().Top() != FAR_AWAY && - pFly->GetFmt()->GetFollowTextFlow().GetValue() ) - { - SwTwips nDist = -(pFly->Frm().*fnRect-> - fnBottomDist)( nTop ); - if( nDist > nBorder + nRemaining ) - nRemaining = nDist - nBorder; - } - } - } - } - } - + SwTwips nRemaining = CalcContentHeight(pAttrs, nMinHeight, nUL); if( IsMinHeight() && (nRemaining + nUL) < nMinHeight ) nRemaining = nMinHeight - nUL; // Because the Grow/Shrink of the Flys does not directly @@ -1304,8 +1261,10 @@ void SwFlyFrm::Format( const SwBorderAttrs *pAttrs ) // Notification is running along already. // As we already got a lot of zeros per attribute, we block them // from now on. + if ( nRemaining < MINFLY ) nRemaining = MINFLY; + (Prt().*fnRect->fnSetHeight)( nRemaining ); nRemaining -= (Frm().*fnRect->fnGetHeight)(); (Frm().*fnRect->fnAddBottom)( nRemaining + nUL ); @@ -1715,7 +1674,6 @@ void SwFlyFrm::MakeObjPos() void SwFlyFrm::MakePrtArea( const SwBorderAttrs &rAttrs ) { - if ( !mbValidPrtArea ) { mbValidPrtArea = sal_True; @@ -1729,6 +1687,55 @@ void SwFlyFrm::MakePrtArea( const SwBorderAttrs &rAttrs ) } } +void SwFlyFrm::MakeContentPos( const SwBorderAttrs &rAttrs ) +{ + if ( !m_bValidContentPos ) + { + m_bValidContentPos = true; + + const SwTwips nUL = rAttrs.CalcTopLine() + rAttrs.CalcBottomLine(); + Size aRelSize( CalcRel( GetFmt()->GetFrmSize() ) ); + + SWRECTFN( this ) + long nMinHeight = 0; + if( IsMinHeight() ) + nMinHeight = bVert ? aRelSize.Width() : aRelSize.Height(); + + Point aNewContentPos; + aNewContentPos = Prt().Pos(); + const SdrTextVertAdjust nAdjust = GetFmt()->GetTextVertAdjust().GetValue(); + if( nAdjust != SDRTEXTVERTADJUST_TOP ) + { + SwTwips nDiff = (Prt().*fnRect->fnGetHeight)() - CalcContentHeight(&rAttrs, nMinHeight, nUL); + if( nDiff > 0 ) + { + if( nAdjust == SDRTEXTVERTADJUST_CENTER ) + { + aNewContentPos.setY(aNewContentPos.getY() + nDiff/2); + } + else if( nAdjust == SDRTEXTVERTADJUST_BOTTOM ) + { + aNewContentPos.setY(aNewContentPos.getY() + nDiff); + } + } + } + if( aNewContentPos != ContentPos() ) + { + ContentPos() = aNewContentPos; + for( SwFrm *pFrm = Lower(); pFrm; pFrm = pFrm->GetNext()) + { + pFrm->InvalidatePos(); + } + } + } +} + +void SwFlyFrm::InvalidateContentPos() +{ + m_bValidContentPos = false; + _Invalidate(); +} + SwTwips SwFlyFrm::_Grow( SwTwips nDist, sal_Bool bTst ) { SWRECTFN( this ) @@ -2613,4 +2620,68 @@ SwFlyFrmFmt * SwFlyFrm::GetFmt() return static_cast< SwFlyFrmFmt * >( GetDep() ); } +void SwFlyFrm::Calc() const +{ + if ( !m_bValidContentPos ) + ((SwFlyFrm*)this)->PrepareMake(); + else + SwLayoutFrm::Calc(); +} + +SwTwips SwFlyFrm::CalcContentHeight(const SwBorderAttrs *pAttrs, const SwTwips nMinHeight, const SwTwips nUL) +{ + SWRECTFN( this ) + SwTwips nHeight = 0; + if ( Lower() ) + { + if ( Lower()->IsColumnFrm() ) + { + FormatWidthCols( *pAttrs, nUL, nMinHeight ); + nHeight = (Lower()->Frm().*fnRect->fnGetHeight)(); + } + else + { + SwFrm *pFrm = Lower(); + while ( pFrm ) + { + nHeight += (pFrm->Frm().*fnRect->fnGetHeight)(); + if( pFrm->IsTxtFrm() && ((SwTxtFrm*)pFrm)->IsUndersized() ) + // This TxtFrm would like to be a bit larger + nHeight += ((SwTxtFrm*)pFrm)->GetParHeight() + - (pFrm->Prt().*fnRect->fnGetHeight)(); + else if( pFrm->IsSctFrm() && ((SwSectionFrm*)pFrm)->IsUndersized() ) + nHeight += ((SwSectionFrm*)pFrm)->Undersize(); + pFrm = pFrm->GetNext(); + } + } + if ( GetDrawObjs() ) + { + sal_uInt32 nCnt = GetDrawObjs()->Count(); + SwTwips nTop = (Frm().*fnRect->fnGetTop)(); + SwTwips nBorder = (Frm().*fnRect->fnGetHeight)() - + (Prt().*fnRect->fnGetHeight)(); + for ( sal_uInt16 i = 0; i < nCnt; ++i ) + { + SwAnchoredObject* pAnchoredObj = (*GetDrawObjs())[i]; + if ( pAnchoredObj->ISA(SwFlyFrm) ) + { + SwFlyFrm* pFly = static_cast<SwFlyFrm*>(pAnchoredObj); + // OD 06.11.2003 #i22305# - consider + // only Writer fly frames, which follow the text flow. + if ( pFly->IsFlyLayFrm() && + pFly->Frm().Top() != FAR_AWAY && + pFly->GetFmt()->GetFollowTextFlow().GetValue() ) + { + SwTwips nDist = -(pFly->Frm().*fnRect-> + fnBottomDist)( nTop ); + if( nDist > nBorder + nHeight ) + nHeight = nDist - nBorder; + } + } + } + } + } + return nHeight; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/core/layout/flylay.cxx b/sw/source/core/layout/flylay.cxx index ce7e0e9..554f3a4 100644 --- a/sw/source/core/layout/flylay.cxx +++ b/sw/source/core/layout/flylay.cxx @@ -140,7 +140,7 @@ void SwFlyFreeFrm::MakeAll() sal_uInt16 nLoopControlRuns = 0; const sal_uInt16 nLoopControlMax = 10; - while ( !mbValidPos || !mbValidSize || !mbValidPrtArea || bFormatHeightOnly ) + while ( !mbValidPos || !mbValidSize || !mbValidPrtArea || bFormatHeightOnly || !m_bValidContentPos ) { SWRECTFN( this ) const SwFmtFrmSize *pSz; @@ -157,7 +157,10 @@ void SwFlyFreeFrm::MakeAll() } if ( !mbValidPrtArea ) + { MakePrtArea( rAttrs ); + m_bValidContentPos = false; + } if ( !mbValidSize || bFormatHeightOnly ) { @@ -185,6 +188,9 @@ void SwFlyFreeFrm::MakeAll() else mbValidSize = sal_False; } + + if ( !m_bValidContentPos ) + MakeContentPos( rAttrs ); } if ( mbValidPos && mbValidSize ) commit 80d1a46e0f3b57f1bbaf7bc4c8aac81195ea8f4d Author: Zolnai Tamás <tamas.zol...@collabora.com> Date: Wed Mar 5 18:21:20 2014 +0100 New feature: vertical alignment for text frames: UI part Add a new combobox to the Options tab page of Frame dialog, which works with RES_TEXT_VERT_ADJUST attribute. The combobox is placed to the right side of the dialog, to follow ux-advise suggestion. Change-Id: I47cec8e9dea748b8e9d23fc51cacbeec1c890a4e diff --git a/sw/source/ui/frmdlg/frmpage.cxx b/sw/source/ui/frmdlg/frmpage.cxx index b67ab00..3150515 100644 --- a/sw/source/ui/frmdlg/frmpage.cxx +++ b/sw/source/ui/frmdlg/frmpage.cxx @@ -57,6 +57,8 @@ #include <grfatr.hxx> #include <uiitems.hxx> #include <fmtfollowtextflow.hxx> +#include <editeng/adjustitem.hxx> +#include <svx/sdtaitm.hxx> #include <frmui.hrc> #include <sfx2/filedlghelper.hxx> @@ -2883,6 +2885,9 @@ SwFrmAddPage::SwFrmAddPage(Window *pParent, const SfxItemSet &rSet) get(pProtectFrameCB,"protectframe"); get(pProtectSizeCB,"protectsize"); + get(m_pContentAlignFrame, "contentalign"); + get(m_pVertAlignLB,"vertalign"); + get(pPropertiesFrame,"properties"); get(pEditInReadonlyCB,"editinreadonly"); get(pPrintFrameCB,"printframe"); @@ -2918,6 +2923,7 @@ void SwFrmAddPage::Reset(const SfxItemSet &rSet ) { pPropertiesFrame->Hide(); } + m_pContentAlignFrame->Hide(); } if(SFX_ITEM_SET == rSet.GetItemState(FN_SET_FRM_ALT_NAME, false, &pItem)) @@ -3064,6 +3070,22 @@ void SwFrmAddPage::Reset(const SfxItemSet &rSet ) pTextFlowFT->Hide(); pTextFlowLB->Hide(); } + + // Content alignment + if ( rSet.GetItemState(RES_TEXT_VERT_ADJUST) > SFX_ITEM_AVAILABLE ) + { + SdrTextVertAdjust nAdjust = ((const SdrTextVertAdjustItem&)rSet.Get(RES_TEXT_VERT_ADJUST)).GetValue(); + sal_uInt16 nPos = 0; + switch(nAdjust) + { + case SDRTEXTVERTADJUST_TOP: nPos = 0; break; + case SDRTEXTVERTADJUST_CENTER: + case SDRTEXTVERTADJUST_BLOCK: nPos = 1; break; + case SDRTEXTVERTADJUST_BOTTOM: nPos = 2; break; + } + m_pVertAlignLB->SelectEntryPos(nPos); + } + m_pVertAlignLB->SaveValue(); } sal_Bool SwFrmAddPage::FillItemSet(SfxItemSet &rSet) @@ -3125,6 +3147,20 @@ sal_Bool SwFrmAddPage::FillItemSet(SfxItemSet &rSet) bRet |= 0 != rSet.Put(SfxStringItem(FN_PARAM_CHAIN_NEXT, sCurrentNextChain)); } } + + if(m_pVertAlignLB->GetSelectEntryPos() != m_pVertAlignLB->GetSavedValue()) + { + SdrTextVertAdjust nAdjust; + switch(m_pVertAlignLB->GetSelectEntryPos()) + { + default: + case 0 : nAdjust = SDRTEXTVERTADJUST_TOP; break; + case 1 : nAdjust = SDRTEXTVERTADJUST_CENTER; break; + case 2 : nAdjust = SDRTEXTVERTADJUST_BOTTOM; break; + } + bRet |= 0 != rSet.Put(SdrTextVertAdjustItem(nAdjust, RES_TEXT_VERT_ADJUST)); + } + return bRet; } diff --git a/sw/source/ui/inc/frmpage.hxx b/sw/source/ui/inc/frmpage.hxx index 5949195..4f47b2c 100644 --- a/sw/source/ui/inc/frmpage.hxx +++ b/sw/source/ui/inc/frmpage.hxx @@ -286,6 +286,9 @@ class SwFrmAddPage : public SfxTabPage CheckBox* pProtectFrameCB; CheckBox* pProtectSizeCB; + VclContainer* m_pContentAlignFrame; + ListBox* m_pVertAlignLB; + VclContainer* pPropertiesFrame; CheckBox* pEditInReadonlyCB; CheckBox* pPrintFrameCB; diff --git a/sw/uiconfig/swriter/ui/frmaddpage.ui b/sw/uiconfig/swriter/ui/frmaddpage.ui index b668b2e..dcbf12a 100644 --- a/sw/uiconfig/swriter/ui/frmaddpage.ui +++ b/sw/uiconfig/swriter/ui/frmaddpage.ui @@ -1,6 +1,28 @@ <?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> + <object class="GtkListStore" id="liststore"> + <columns> + <!-- column-name gchararray1 --> + <column type="gchararray"/> + <!-- column-name gint1 --> + <column type="gint"/> + </columns> + <data> + <row> + <col id="0" translatable="yes">Top</col> + <col id="1">0</col> + </row> + <row> + <col id="0" translatable="yes">Centered</col> + <col id="1">1</col> + </row> + <row> + <col id="0" translatable="yes">Bottom</col> + <col id="1">2</col> + </row> + </data> + </object> <object class="GtkBox" id="FrmAddPage"> <property name="visible">True</property> <property name="can_focus">False</property> @@ -177,91 +199,170 @@ </packing> </child> <child> - <object class="GtkFrame" id="protect"> + <object class="GtkGrid" id="grid2"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="label_xalign">0</property> - <property name="shadow_type">none</property> + <property name="column_homogeneous">True</property> <child> - <object class="GtkAlignment" id="alignment2"> + <object class="GtkFrame" id="contentalign"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="vexpand">True</property> - <property name="top_padding">6</property> - <property name="left_padding">12</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> <child> - <object class="GtkGrid" id="grid2"> + <object class="GtkAlignment" id="alignment2"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="hexpand">True</property> - <property name="row_spacing">6</property> - <property name="column_spacing">12</property> + <property name="top_padding">6</property> + <property name="left_padding">12</property> <child> - <object class="GtkCheckButton" id="protectcontent"> - <property name="label" translatable="yes">_Contents</property> + <object class="GtkGrid" id="grid8"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="protectframe"> - <property name="label" translatable="yes">P_osition</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">1</property> - <property name="width">1</property> - <property name="height">1</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="protectsize"> - <property name="label" translatable="yes">_Size</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> + <property name="can_focus">False</property> + <property name="column_spacing">12</property> + <child> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">_Vertical alignment</property> + <property name="use_underline">True</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="vertalign"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="model">liststore</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">2</property> - <property name="width">1</property> - <property name="height">1</property> - </packing> </child> </object> </child> + <child type="label"> + <object class="GtkLabel" id="label7"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Content alignment</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + </child> </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> </child> - <child type="label"> - <object class="GtkLabel" id="label2"> + <child> + <object class="GtkFrame" id="protect"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="label" translatable="yes">Protect</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> + <property name="hexpand">True</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkAlignment" id="alignment6"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="top_padding">6</property> + <property name="left_padding">12</property> + <child> + <object class="GtkGrid" id="grid9"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="hexpand">True</property> + <property name="row_spacing">5</property> + <property name="column_spacing">12</property> + <child> + <object class="GtkCheckButton" id="protectcontent"> + <property name="label" translatable="yes">_Contents</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="protectframe"> + <property name="label" translatable="yes">P_osition</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">1</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="protectsize"> + <property name="label" translatable="yes">_Size</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="xalign">0</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">2</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel" id="label8"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Protect</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + </child> </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + <property name="width">1</property> + <property name="height">1</property> + </packing> </child> </object> <packing>
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits