blob: 00e368c5415577cf89238377ea770dcd02d64f76 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sw.hxx"
#include "hintids.hxx"
#include <editeng/lrspitem.hxx>
#include "frmmgr.hxx"
#include "frmfmt.hxx"
#include "colmgr.hxx"
// PRIVATE METHODES ------------------------------------------------------
/*------------------------------------------------------------------------
Beschreibung: Spaltenbreite auf aktuelle Breite einstellen
------------------------------------------------------------------------*/
void FitToActualSize(SwFmtCol& rCol, sal_uInt16 nWidth)
{
const sal_uInt16 nCount = rCol.GetColumns().Count();
for(sal_uInt16 i = 0; i < nCount; ++i)
{
const sal_uInt16 nTmp = rCol.CalcColWidth(i, nWidth);
rCol.GetColumns()[i]->SetWishWidth(nTmp);
}
rCol.SetWishWidth(nWidth);
}
// PUBLIC METHODES -------------------------------------------------------
/*------------------------------------------------------------------------
Beschreibung: Setzen Spaltenanzahl und Gutterwidth
------------------------------------------------------------------------*/
void SwColMgr::SetCount(sal_uInt16 nCount, sal_uInt16 nGutterWidth)
{
aFmtCol.Init(nCount, nGutterWidth, nWidth);
aFmtCol.SetWishWidth(nWidth);
aFmtCol.SetGutterWidth(nGutterWidth, nWidth);
}
sal_uInt16 SwColMgr::GetGutterWidth( sal_uInt16 nPos ) const
{
sal_uInt16 nRet;
if(nPos == USHRT_MAX )
nRet = GetCount() > 1 ? aFmtCol.GetGutterWidth() : DEF_GUTTER_WIDTH;
else
{
DBG_ASSERT(nPos < GetCount() - 1, "Spalte ueberindiziert" );
const SwColumns& rCols = aFmtCol.GetColumns();
nRet = rCols.GetObject(nPos)->GetRight() + rCols.GetObject(nPos + 1)->GetLeft();
}
return nRet;
}
/*-----------------22.10.96 14.28-------------------
--------------------------------------------------*/
void SwColMgr::SetGutterWidth(sal_uInt16 nGutterWidth, sal_uInt16 nPos )
{
if(nPos == USHRT_MAX)
aFmtCol.SetGutterWidth(nGutterWidth, nWidth);
else
{
DBG_ASSERT(nPos < GetCount() - 1, "Spalte ueberindiziert" );
SwColumns& rCols = aFmtCol.GetColumns();
sal_uInt16 nGutterWidth2 = nGutterWidth / 2;
rCols.GetObject(nPos)->SetRight(nGutterWidth2);
rCols.GetObject(nPos + 1)->SetLeft(nGutterWidth2);
}
}
/*------------------------------------------------------------------------
Beschreibung: Hoehe Trennlinie
------------------------------------------------------------------------*/
short SwColMgr::GetLineHeightPercent() const
{
return (short)aFmtCol.GetLineHeight();
}
void SwColMgr::SetLineHeightPercent(short nPercent)
{
ASSERT(nPercent <= 100, LineHeight darf nur bis 100 % gross sein);
aFmtCol.SetLineHeight((sal_uInt8)nPercent);
}
/*------------------------------------------------------------------------
Beschreibung: Spaltenbreite
------------------------------------------------------------------------*/
sal_uInt16 SwColMgr::GetColWidth(sal_uInt16 nIdx) const
{
ASSERT(nIdx < GetCount(), Spaltenarray ueberindiziert.);
return aFmtCol.CalcPrtColWidth(nIdx, nWidth);
}
void SwColMgr::SetColWidth(sal_uInt16 nIdx, sal_uInt16 nWd)
{
ASSERT(nIdx < GetCount(), Spaltenarray ueberindiziert.);
aFmtCol.GetColumns()[nIdx]->SetWishWidth(nWd);
}
/*--------------------------------------------------------------------
Beschreibung: Groesse neu setzen
--------------------------------------------------------------------*/
void SwColMgr::SetActualWidth(sal_uInt16 nW)
{
nWidth = nW;
::FitToActualSize(aFmtCol, nW);
}
/*--------------------------------------------------------------------
Beschreibung: ctor
--------------------------------------------------------------------*/
SwColMgr::SwColMgr(const SfxItemSet& rSet, sal_uInt16 nActWidth) :
aFmtCol((const SwFmtCol&)rSet.Get(RES_COL)),
nWidth(nActWidth)
{
if(nWidth == USHRT_MAX)
{
nWidth = (sal_uInt16)((const SwFmtFrmSize&)rSet.Get(RES_FRM_SIZE)).GetWidth();
if (nWidth < MINLAY)
nWidth = USHRT_MAX;
const SvxLRSpaceItem &rLR = (const SvxLRSpaceItem&)rSet.Get(RES_LR_SPACE);
nWidth = nWidth - (sal_uInt16)rLR.GetLeft();
nWidth = nWidth - (sal_uInt16)rLR.GetRight();
}
::FitToActualSize(aFmtCol, nWidth);
}
SwColMgr::~SwColMgr() {}