Index: sw/source/ui/inc/pggrid.hxx =================================================================== RCS file: /cvs/sw/sw/source/ui/inc/pggrid.hxx,v --- sw/source/ui/inc/pggrid.hxx 9 Sep 2005 09:57:18 -0000 1.6 +++ sw/source/ui/inc/pggrid.hxx 24 Jan 2008 16:42:50 -0000 @@ -101,7 +101,16 @@ DECL_LINK(GridTypeHdl, RadioButton*); DECL_LINK(CharSizeChangedHdl, SpinField*); +#if TORA_PATCH_FLEXIBILITY_IN_GRID_LAYOUT_53425 + sal_Bool TextSizeChangeHandle(); + sal_Bool RubySizeChangeHandle(); + sal_Bool TextSizeChangeHandle_(); + sal_Bool CharsPerLineChangeHandle(); + sal_Bool LinesPerPageChangeHandle(); + DECL_LINK(GridModifyHdl, SpinField*); +#else DECL_LINK(GridModifyHdl, void*); +#endif DECL_LINK(DisplayGridHdl, CheckBox*); public: static SfxTabPage *Create(Window *pParent, const SfxItemSet &rSet); Index: sw/source/ui/misc/pggrid.cxx =================================================================== RCS file: /cvs/sw/sw/source/ui/misc/pggrid.cxx,v --- sw/source/ui/misc/pggrid.cxx 10 May 2007 16:21:04 -0000 1.16 +++ sw/source/ui/misc/pggrid.cxx 24 Jan 2008 16:43:39 -0000 @@ -346,6 +346,11 @@ ---------------------------------------------------------------------------*/ IMPL_LINK(SwTextGridPage, CharSizeChangedHdl, SpinField*, pField) { +#if 1 + GridModifyHdl(pField); + return 0; +#endif + if(&aCharsPerLineNF == pField) { long nWidth = m_aPageSize.Width() / aCharsPerLineNF.GetValue(); @@ -390,6 +395,157 @@ /* -----------------------------08.02.2002 11:54------------------------------ ---------------------------------------------------------------------------*/ + +#if TORA_PATCH_FLEXIBILITY_IN_GRID_LAYOUT_53425 +sal_Bool SwTextGridPage::TextSizeChangeHandle() +{ + sal_Int32 nTextSize = aTextSizeMF.Denormalize(aTextSizeMF.GetValue(FUNIT_TWIP)); + sal_Int32 nLinesPerPage = aLinesPerPageNF.GetValue(); + sal_Int32 nPageHeight = m_aPageSize.Height(); + sal_Int32 nLineHeight = nPageHeight / nLinesPerPage; + sal_Int32 nRubySize = nLineHeight - nTextSize; + sal_Bool bRet = true; + + if(nRubySize<1) + { + nRubySize = 1; + nLineHeight = nTextSize + nRubySize; + nLinesPerPage = nPageHeight / nLineHeight; + if (nLinesPerPage<1) + { + nLinesPerPage = 1; + nLineHeight = nPageHeight / nLinesPerPage; + nTextSize = nLineHeight - nRubySize; + aTextSizeMF.SetValue(aTextSizeMF.Normalize(nTextSize), FUNIT_TWIP); + bRet = false; + } + aLinesPerPageNF.SetValue(nLinesPerPage); + } + aRubySizeMF.SetValue(aRubySizeMF.Normalize(nRubySize), FUNIT_TWIP); + return bRet; +} + +sal_Bool SwTextGridPage::RubySizeChangeHandle() +{ + sal_Int32 nRubySize = aRubySizeMF.Denormalize(aRubySizeMF.GetValue(FUNIT_TWIP)); + sal_Int32 nLinesPerPage = aLinesPerPageNF.GetValue(); + sal_Int32 nPageHeight = m_aPageSize.Height(); + sal_Int32 nLineHeight = nPageHeight / nLinesPerPage; + sal_Int32 nTextSize = nLineHeight - nRubySize; + sal_Bool bRet = true; + + if(nTextSize<1) + { + nTextSize = 1; + nLineHeight = nTextSize + nRubySize; + nLinesPerPage = nPageHeight / nLineHeight; + if (nLinesPerPage<1) + { + nLinesPerPage = 1; + nLineHeight = nPageHeight / nLinesPerPage; + nRubySize = nLineHeight - nTextSize; + aRubySizeMF.SetValue(aRubySizeMF.Normalize(nRubySize), FUNIT_TWIP); + bRet = false; + } + aLinesPerPageNF.SetValue(nLinesPerPage); + } + aTextSizeMF.SetValue(aTextSizeMF.Normalize(nTextSize), FUNIT_TWIP); + return bRet; +} + +sal_Bool SwTextGridPage::TextSizeChangeHandle_() +{ + sal_Int32 nTextSize = aTextSizeMF.Denormalize(aTextSizeMF.GetValue(FUNIT_TWIP)); + sal_Int32 nPageWidth = m_aPageSize.Width(); + sal_Int32 nCharsPerLine = nPageWidth / nTextSize; + sal_Bool bRet = true; + + if (nCharsPerLine<1) + { + nCharsPerLine = 1; + nTextSize = nPageWidth / nCharsPerLine; + aTextSizeMF.SetValue(aTextSizeMF.Normalize(nTextSize), FUNIT_TWIP); + bRet = false; + } + aCharsPerLineNF.SetValue(nCharsPerLine); + m_bRubyUserValue = sal_False; + return bRet; +} + +sal_Bool SwTextGridPage::CharsPerLineChangeHandle() +{ + sal_Int32 nCharsPerLine = aCharsPerLineNF.GetValue(); + sal_Int32 nPageWidth = m_aPageSize.Width(); + sal_Int32 nTextSize = nPageWidth / nCharsPerLine; + sal_Bool bRet = true; + + if (nTextSize<1) + { + nTextSize = 1; + nCharsPerLine = nPageWidth / nTextSize; + aCharsPerLineNF.SetValue(nCharsPerLine); + + bRet = false; + } + aTextSizeMF.SetValue(aTextSizeMF.Normalize(nTextSize), FUNIT_TWIP); + m_nRubyUserValue = nTextSize; + m_bRubyUserValue = sal_True; + return bRet; +} + +sal_Bool SwTextGridPage::LinesPerPageChangeHandle() +{ + sal_Int32 nLinesPerPage = aLinesPerPageNF.GetValue(); + sal_Int32 nTextSize = aTextSizeMF.Denormalize(aTextSizeMF.GetValue(FUNIT_TWIP)); + sal_Int32 nPageHeight = m_aPageSize.Height(); + sal_Int32 nLineHeight = nPageHeight / nLinesPerPage; + sal_Int32 nRubySize = nLineHeight - nTextSize; + sal_Bool bRet = true; + + if(nRubySize<1) + { + nRubySize = 1; + nTextSize = nLineHeight - nRubySize; + if (nTextSize<1) + { + nTextSize = 1; + nLineHeight = nTextSize + nRubySize; + nLinesPerPage = nPageHeight / nLineHeight; + aLinesPerPageNF.SetValue(nLinesPerPage); + bRet = false; + } + aTextSizeMF.SetValue(aTextSizeMF.Normalize(nTextSize), FUNIT_TWIP); + + } + aRubySizeMF.SetValue(aRubySizeMF.Normalize(nRubySize), FUNIT_TWIP); + return bRet; +} +#endif + +#if TORA_PATCH_FLEXIBILITY_IN_GRID_LAYOUT_53425 +IMPL_LINK(SwTextGridPage, GridModifyHdl, SpinField*, pField) +{ + if(&aTextSizeMF == pField) + { + TextSizeChangeHandle(); + TextSizeChangeHandle_(); + } + else if(&aRubySizeMF == pField) + { + RubySizeChangeHandle(); + TextSizeChangeHandle_(); + } + else if(&aCharsPerLineNF == pField) + { + CharsPerLineChangeHandle(); + TextSizeChangeHandle(); + } + else if(&aLinesPerPageNF == pField) + { + LinesPerPageChangeHandle(); + TextSizeChangeHandle_(); + } +#else IMPL_LINK(SwTextGridPage, GridModifyHdl, void*, EMPTYARG) { //set maximum for Lines per page @@ -397,6 +553,7 @@ ( aTextSizeMF.Denormalize(aTextSizeMF.GetValue(FUNIT_TWIP)) + aRubySizeMF.Denormalize(aRubySizeMF.GetValue(FUNIT_TWIP))); aLinesPerPageNF.SetMax(nMaxLines); +#endif const SfxItemSet& rOldSet = GetItemSet(); SfxItemSet aSet(rOldSet); const SfxItemSet* pExSet = GetTabDialog()->GetExampleSet();