summaryrefslogtreecommitdiff
path: root/sw/source/ui/frmdlg/column.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/ui/frmdlg/column.cxx')
-rw-r--r--sw/source/ui/frmdlg/column.cxx1463
1 files changed, 1463 insertions, 0 deletions
diff --git a/sw/source/ui/frmdlg/column.cxx b/sw/source/ui/frmdlg/column.cxx
new file mode 100644
index 000000000000..0a3c8cc33623
--- /dev/null
+++ b/sw/source/ui/frmdlg/column.cxx
@@ -0,0 +1,1463 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sw.hxx"
+
+#ifdef SW_DLLIMPLEMENTATION
+#undef SW_DLLIMPLEMENTATION
+#endif
+
+#include "column.hxx"
+
+#include "hintids.hxx"
+#include <svx/htmlmode.hxx>
+#include <editeng/borderline.hxx>
+#include <editeng/boxitem.hxx>
+#include <editeng/lrspitem.hxx>
+#include <editeng/sizeitem.hxx>
+#include "editeng/frmdiritem.hxx"
+#include <svl/ctloptions.hxx>
+#include <sfx2/dispatch.hxx>
+#include <vcl/msgbox.hxx>
+#include <swmodule.hxx>
+
+#include <helpid.h>
+#include "globals.hrc"
+#include "swtypes.hxx"
+#include "wrtsh.hxx"
+#include "view.hxx"
+#include "docsh.hxx"
+#include "uitool.hxx"
+#include "cmdid.h"
+#include "viewopt.hxx"
+#include "format.hxx"
+#include "frmmgr.hxx"
+#include "frmdlg.hxx"
+#include "colmgr.hxx"
+#include "prcntfld.hxx"
+#include "paratr.hxx"
+#include "frmui.hrc"
+#include "poolfmt.hrc"
+#include "column.hrc"
+#include <section.hxx>
+#include <docary.hxx>
+#include <pagedesc.hxx>
+
+#define FRAME_FORMAT_WIDTH 1000
+
+// sw/inc/fmtclds.hxx
+SV_IMPL_PTRARR( SwColumns, SwColumnPtr )
+
+/*--------------------------------------------------------------------
+ Beschreibung: Statische Daten
+ --------------------------------------------------------------------*/
+
+static const USHORT __FAR_DATA nLines[] = {
+ DEF_LINE_WIDTH_0,
+ DEF_LINE_WIDTH_1,
+ DEF_LINE_WIDTH_2,
+ DEF_LINE_WIDTH_3,
+ DEF_LINE_WIDTH_4
+};
+
+static const USHORT nLineCount = sizeof(nLines) / sizeof(nLines[0]);
+static const USHORT nVisCols = 3;
+
+inline BOOL IsMarkInSameSection( SwWrtShell& rWrtSh, const SwSection* pSect )
+{
+ rWrtSh.SwapPam();
+ BOOL bRet = pSect == rWrtSh.GetCurrSection();
+ rWrtSh.SwapPam();
+ return bRet;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+SwColumnDlg::SwColumnDlg(Window* pParent, SwWrtShell& rSh) :
+ SfxModalDialog(pParent, SW_RES(DLG_COLUMN)),
+ aOK(this, SW_RES(PB_OK)),
+ aCancel(this, SW_RES(PB_CANCEL)),
+ aHelp(this, SW_RES(PB_HELP)),
+ aApplyToFT(this, SW_RES(FT_APPLY_TO)),
+ aApplyToLB(this, SW_RES(LB_APPLY_TO)),
+ rWrtShell(rSh),
+ pPageSet(0),
+ pSectionSet(0),
+ pSelectionSet(0),
+ pFrameSet(0),
+ nOldSelection(0),
+ nSelectionWidth(0),
+ bPageChanged(FALSE),
+ bSectionChanged(FALSE),
+ bSelSectionChanged(FALSE),
+ bFrameChanged(FALSE)
+{
+ FreeResource();
+
+ SwRect aRect;
+ rWrtShell.CalcBoundRect(aRect, FLY_AS_CHAR);
+
+ nSelectionWidth = aRect.Width();
+
+ SfxItemSet* pColPgSet = 0;
+ static USHORT __READONLY_DATA aSectIds[] = { RES_COL, RES_COL,
+ RES_FRM_SIZE, RES_FRM_SIZE,
+ RES_COLUMNBALANCE, RES_FRAMEDIR,
+ 0 };
+
+ const SwSection* pCurrSection = rWrtShell.GetCurrSection();
+ USHORT nFullSectCnt = rWrtShell.GetFullSelectedSectionCount();
+ if( pCurrSection && ( !rWrtShell.HasSelection() || 0 != nFullSectCnt ))
+ {
+ nSelectionWidth = rSh.GetSectionWidth(*pCurrSection->GetFmt());
+ if ( !nSelectionWidth )
+ nSelectionWidth = USHRT_MAX;
+ pSectionSet = new SfxItemSet( rWrtShell.GetAttrPool(), aSectIds );
+ pSectionSet->Put( pCurrSection->GetFmt()->GetAttrSet() );
+ pColPgSet = pSectionSet;
+ aApplyToLB.RemoveEntry( aApplyToLB.GetEntryPos(
+ (void*)( 1 >= nFullSectCnt
+ ? LISTBOX_SECTIONS
+ : LISTBOX_SECTION )));
+ }
+ else
+ {
+ aApplyToLB.RemoveEntry(aApplyToLB.GetEntryPos( (void*) LISTBOX_SECTION ));
+ aApplyToLB.RemoveEntry(aApplyToLB.GetEntryPos( (void*) LISTBOX_SECTIONS ));
+ }
+
+ if( rWrtShell.HasSelection() && rWrtShell.IsInsRegionAvailable() &&
+ ( !pCurrSection || ( 1 != nFullSectCnt &&
+ IsMarkInSameSection( rWrtShell, pCurrSection ) )))
+ {
+ pSelectionSet = new SfxItemSet( rWrtShell.GetAttrPool(), aSectIds );
+ pColPgSet = pSelectionSet;
+ }
+ else
+ aApplyToLB.RemoveEntry(aApplyToLB.GetEntryPos( (void*) LISTBOX_SELECTION ));
+
+ if( rWrtShell.GetFlyFrmFmt() )
+ {
+ const SwFrmFmt* pFmt = rSh.GetFlyFrmFmt() ;
+ pFrameSet = new SfxItemSet(rWrtShell.GetAttrPool(), aSectIds );
+ pFrameSet->Put(pFmt->GetFrmSize());
+ pFrameSet->Put(pFmt->GetCol());
+ pColPgSet = pFrameSet;
+ }
+ else
+ aApplyToLB.RemoveEntry(aApplyToLB.GetEntryPos( (void*) LISTBOX_FRAME ));
+
+
+ USHORT nPagePos = aApplyToLB.GetEntryPos( (void*) LISTBOX_PAGE );
+ const SwPageDesc* pPageDesc = rWrtShell.GetSelectedPageDescs();
+ if( pPageDesc )
+ {
+ pPageSet = new SfxItemSet( rWrtShell.GetAttrPool(),
+ RES_COL, RES_COL,
+ RES_FRM_SIZE, RES_FRM_SIZE,
+ RES_LR_SPACE, RES_LR_SPACE,
+ 0 );
+
+ String sPageStr = aApplyToLB.GetEntry(nPagePos);
+ aApplyToLB.RemoveEntry( nPagePos );
+ sPageStr += pPageDesc->GetName();
+ aApplyToLB.InsertEntry( sPageStr, nPagePos );
+ aApplyToLB.SetEntryData( nPagePos, (void*) LISTBOX_PAGE);
+
+ const SwFrmFmt &rFmt = pPageDesc->GetMaster();
+ nPageWidth = rFmt.GetFrmSize().GetSize().Width();
+
+ const SvxLRSpaceItem& rLRSpace = (const SvxLRSpaceItem&)rFmt.GetLRSpace();
+ const SvxBoxItem& rBox = (const SvxBoxItem&) rFmt.GetBox();
+ nPageWidth -= rLRSpace.GetLeft() + rLRSpace.GetRight() + rBox.GetDistance();
+
+ pPageSet->Put(rFmt.GetCol());
+ pPageSet->Put(rFmt.GetLRSpace());
+ pColPgSet = pPageSet;
+ }
+ else
+ aApplyToLB.RemoveEntry( nPagePos );
+
+
+ ASSERT( pColPgSet, "" );
+ // TabPage erzeugen
+ SwColumnPage* pPage = (SwColumnPage*) SwColumnPage::Create( this,
+ *pColPgSet );
+ pTabPage = pPage;
+
+ //Groesse anpassen
+ Size aPageSize(pTabPage->GetSizePixel());
+ Size aDlgSize(GetOutputSizePixel());
+ aDlgSize.Height() = aPageSize.Height();
+ SetOutputSizePixel(aDlgSize);
+ pTabPage->Show();
+
+ aApplyToLB.SelectEntryPos(0);
+ ObjectHdl(0);
+
+ aApplyToLB.SetSelectHdl(LINK(this, SwColumnDlg, ObjectHdl));
+ aOK.SetClickHdl(LINK(this, SwColumnDlg, OkHdl));
+ //#i80458# if no columns can be set then disable OK
+ if( !aApplyToLB.GetEntryCount() )
+ aOK.Enable( sal_False );
+ //#i97810# set focus to the TabPage
+ pTabPage->ActivateColumnControl();
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+SwColumnDlg::~SwColumnDlg()
+{
+ delete pTabPage;
+ delete pPageSet;
+ delete pSectionSet;
+ delete pSelectionSet;
+}
+
+/* -----------------26.05.99 11:40-------------------
+ *
+ * --------------------------------------------------*/
+IMPL_LINK(SwColumnDlg, ObjectHdl, ListBox*, pBox)
+{
+ SfxItemSet* pSet = 0;
+ switch(nOldSelection)
+ {
+ case LISTBOX_SELECTION :
+ pSet = pSelectionSet;
+ break;
+ case LISTBOX_SECTION :
+ pSet = pSectionSet;
+ bSectionChanged = TRUE;
+ break;
+ case LISTBOX_SECTIONS :
+ pSet = pSectionSet;
+ bSelSectionChanged = TRUE;
+ break;
+ case LISTBOX_PAGE :
+ pSet = pPageSet;
+ bPageChanged = TRUE;
+ break;
+ case LISTBOX_FRAME:
+ pSet = pFrameSet;
+ bFrameChanged = TRUE;
+ break;
+ }
+ if(pBox)
+ {
+ pTabPage->FillItemSet(*pSet);
+ }
+ nOldSelection = (long)aApplyToLB.GetEntryData(aApplyToLB.GetSelectEntryPos());
+ long nWidth = nSelectionWidth;
+ switch(nOldSelection)
+ {
+ case LISTBOX_SELECTION :
+ pSet = pSelectionSet;
+ if( pSelectionSet )
+ pSet->Put(SwFmtFrmSize(ATT_VAR_SIZE, nWidth, nWidth));
+ break;
+ case LISTBOX_SECTION :
+ case LISTBOX_SECTIONS :
+ pSet = pSectionSet;
+ pSet->Put(SwFmtFrmSize(ATT_VAR_SIZE, nWidth, nWidth));
+ break;
+ case LISTBOX_PAGE :
+ nWidth = nPageWidth;
+ pSet = pPageSet;
+ pSet->Put(SwFmtFrmSize(ATT_VAR_SIZE, nWidth, nWidth));
+ break;
+ case LISTBOX_FRAME:
+ pSet = pFrameSet;
+ break;
+ }
+
+ BOOL bIsSection = pSet == pSectionSet || pSet == pSelectionSet;
+ pTabPage->ShowBalance(bIsSection);
+ pTabPage->SetInSection(bIsSection);
+ pTabPage->SetFrmMode(TRUE);
+ pTabPage->SetPageWidth(nWidth);
+ if( pSet )
+ pTabPage->Reset(*pSet);
+ return 0;
+}
+/* -----------------26.05.99 12:32-------------------
+ *
+ * --------------------------------------------------*/
+IMPL_LINK(SwColumnDlg, OkHdl, OKButton*, EMPTYARG)
+{
+ //aktuelle Selektion auswerten
+ SfxItemSet* pSet = 0;
+ switch(nOldSelection)
+ {
+ case LISTBOX_SELECTION :
+ pSet = pSelectionSet;
+ break;
+ case LISTBOX_SECTION :
+ pSet = pSectionSet;
+ bSectionChanged = TRUE;
+ break;
+ case LISTBOX_SECTIONS :
+ pSet = pSectionSet;
+ bSelSectionChanged = TRUE;
+ break;
+ case LISTBOX_PAGE :
+ pSet = pPageSet;
+ bPageChanged = TRUE;
+ break;
+ case LISTBOX_FRAME:
+ pSet = pFrameSet;
+ bFrameChanged = TRUE;
+ break;
+ }
+ pTabPage->FillItemSet(*pSet);
+
+ if(pSelectionSet && SFX_ITEM_SET == pSelectionSet->GetItemState(RES_COL))
+ {
+ //Bereich mit Spalten einfuegen
+ const SwFmtCol& rColItem = (const SwFmtCol&)pSelectionSet->Get(RES_COL);
+ //nur, wenn es auch Spalten gibt!
+ if(rColItem.GetNumCols() > 1)
+ rWrtShell.GetView().GetViewFrame()->GetDispatcher()->Execute(
+ FN_INSERT_REGION, SFX_CALLMODE_ASYNCHRON, *pSelectionSet );
+ }
+
+ if(pSectionSet && pSectionSet->Count() && bSectionChanged )
+ {
+ const SwSection* pCurrSection = rWrtShell.GetCurrSection();
+ const SwSectionFmt* pFmt = pCurrSection->GetFmt();
+ USHORT nNewPos = rWrtShell.GetSectionFmtPos( *pFmt );
+ SwSectionData aData(*pCurrSection);
+ rWrtShell.UpdateSection( nNewPos, aData, pSectionSet );
+ }
+
+ if(pSectionSet && pSectionSet->Count() && bSelSectionChanged )
+ {
+ rWrtShell.SetSectionAttr( *pSectionSet );
+ }
+
+ if(pPageSet && SFX_ITEM_SET == pPageSet->GetItemState(RES_COL) && bPageChanged)
+ {
+ // aktuellen PageDescriptor ermitteln und damit den Set fuellen
+ const USHORT nCurIdx = rWrtShell.GetCurPageDesc();
+ SwPageDesc aPageDesc(rWrtShell.GetPageDesc(nCurIdx));
+ SwFrmFmt &rFmt = aPageDesc.GetMaster();
+ rFmt.SetFmtAttr(pPageSet->Get(RES_COL));
+ rWrtShell.ChgPageDesc(nCurIdx, aPageDesc);
+ }
+ if(pFrameSet && SFX_ITEM_SET == pFrameSet->GetItemState(RES_COL) && bFrameChanged)
+ {
+ SfxItemSet aTmp(*pFrameSet->GetPool(), RES_COL, RES_COL);
+ aTmp.Put(*pFrameSet);
+ rWrtShell.StartAction();
+ rWrtShell.Push();
+ rWrtShell.SetFlyFrmAttr( aTmp );
+ //die Rahmenselektion wieder aufheben
+ if(rWrtShell.IsFrmSelected())
+ {
+ rWrtShell.UnSelectFrm();
+ rWrtShell.LeaveSelFrmMode();
+ }
+ rWrtShell.Pop();
+ rWrtShell.EndAction();
+ }
+ EndDialog(RET_OK);
+ return 0;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+#if OSL_DEBUG_LEVEL < 2
+inline
+#endif
+USHORT GetMaxWidth( SwColMgr* pColMgr, USHORT nCols )
+{
+ USHORT nMax = pColMgr->GetActualSize();
+ if( --nCols )
+ nMax -= pColMgr->GetGutterWidth() * nCols;
+ return nMax;
+}
+
+static USHORT __FAR_DATA aPageRg[] = {
+ RES_COL, RES_COL,
+ 0
+};
+
+
+DBG_NAME(columnhdl)
+
+
+
+USHORT lcl_LineWidthToPos(ULONG nWidth)
+{
+ const USHORT nUShortWidth = (USHORT)nWidth;
+ for(USHORT i = 0; i < nLineCount; ++i)
+ if(nUShortWidth == nLines[i])
+ return i;
+ return 0;
+}
+
+
+
+void SwColumnPage::ResetColWidth()
+{
+ if( nCols )
+ {
+ USHORT nWidth = GetMaxWidth( pColMgr, nCols );
+ nWidth = nWidth / nCols;
+
+ for(USHORT i = 0; i < nCols; ++i)
+ nColWidth[i] = (long) nWidth;
+ }
+
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Jetzt als TabPage
+ --------------------------------------------------------------------*/
+
+
+
+SwColumnPage::SwColumnPage(Window *pParent, const SfxItemSet &rSet)
+
+ : SfxTabPage(pParent, SW_RES(TP_COLUMN), rSet),
+
+ aClNrLbl(this, SW_RES(FT_NUMBER )),
+ aCLNrEdt(this, SW_RES(ED_NUMBER )),
+ aDefaultVS(this, SW_RES(VS_DEFAULTS)),
+ aBalanceColsCB(this, SW_RES(CB_BALANCECOLS)),
+ aFLGroup(this, SW_RES(FL_COLUMNS )),
+
+ aBtnUp(this, SW_RES(BTN_DOWN)),
+ aColumnFT(this, SW_RES(FT_COLUMN)),
+ aWidthFT(this, SW_RES(FT_WIDTH)),
+ aDistFT(this, SW_RES(FT_DIST)),
+ aLbl1(this, SW_RES(FT_1)),
+ aEd1(this, SW_RES(ED_1)),
+ aDistEd1(this, SW_RES(ED_DIST1)),
+ aLbl2(this, SW_RES(FT_2)),
+ aEd2(this, SW_RES(ED_2)),
+ aDistEd2(this, SW_RES(ED_DIST2)),
+ aLbl3(this, SW_RES(FT_3)),
+ aEd3(this, SW_RES(ED_3)),
+ aBtnDown(this, SW_RES(BTN_UP)),
+ aAutoWidthBox(this, SW_RES(CB_AUTO_WIDTH)),
+
+ aFLLayout(this, SW_RES(FL_LAYOUT)),
+
+ aLineTypeLbl(this, SW_RES(FT_STYLE)),
+ aLineTypeDLB(this, SW_RES(LB_STYLE)),
+ aLineHeightLbl(this, SW_RES(FT_HEIGHT)),
+ aLineHeightEdit(this, SW_RES(ED_HEIGHT)),
+ aLinePosLbl(this, SW_RES(FT_POSITION)),
+ aLinePosDLB(this, SW_RES(LB_POSITION)),
+ aFLLineType(this, SW_RES(FL_LINETYPE)),
+
+ aVertFL(this, SW_RES(FL_VERT)),
+ aPropertiesFL( this, SW_RES( FL_PROPERTIES )),
+ aTextDirectionFT( this, SW_RES( FT_TEXTDIRECTION )),
+ aTextDirectionLB( this, SW_RES( LB_TEXTDIRECTION )),
+
+ aPgeExampleWN(this, SW_RES(WN_BSP)),
+ aFrmExampleWN(this, SW_RES(WN_BSP)),
+
+ pColMgr(0),
+
+ nFirstVis(0),
+ nMinWidth(MINLAY),
+ pModifiedField(0),
+ bFormat(FALSE),
+ bFrm(FALSE),
+ bHtmlMode(FALSE),
+ bLockUpdate(FALSE)
+{
+ USHORT i;
+
+ FreeResource();
+ SetExchangeSupport();
+
+ aDefaultVS.SetHelpId(HID_COLUMN_VALUESET);
+ aDefaultVS.SetColCount( 5 );
+ aDefaultVS.SetStyle( aDefaultVS.GetStyle()
+ | WB_ITEMBORDER
+ | WB_DOUBLEBORDER );
+
+ for( i = 0; i < 5; i++)
+ aDefaultVS.InsertItem( i + 1, i );
+
+ aDefaultVS.SetSelectHdl(LINK(this, SwColumnPage, SetDefaultsHdl));
+
+ // Controls fuer Zusaetzebereich beim MoreButton anmelden
+ Link aCLNrLk = LINK(this, SwColumnPage, ColModify);
+ aCLNrEdt.SetLoseFocusHdl(aCLNrLk);
+ aCLNrEdt.SetUpHdl(aCLNrLk);
+ aCLNrEdt.SetDownHdl(aCLNrLk);
+ Link aLk = LINK(this, SwColumnPage, GapModify);
+ aDistEd1.SetUpHdl(aLk);
+ aDistEd1.SetDownHdl(aLk);
+ aDistEd1.SetLoseFocusHdl(aLk);
+ aDistEd2.SetUpHdl(aLk);
+ aDistEd2.SetDownHdl(aLk);
+ aDistEd2.SetLoseFocusHdl(aLk);
+
+ aLk = LINK(this, SwColumnPage, EdModify);
+
+ aEd1.SetUpHdl(aLk);
+ aEd1.SetDownHdl(aLk);
+ aEd1.SetLoseFocusHdl(aLk);
+
+ aEd2.SetUpHdl(aLk);
+ aEd2.SetDownHdl(aLk);
+ aEd2.SetLoseFocusHdl(aLk);
+
+ aEd3.SetUpHdl(aLk);
+ aEd3.SetDownHdl(aLk);
+ aEd3.SetLoseFocusHdl(aLk);
+
+ aBtnUp.SetClickHdl(LINK(this, SwColumnPage, Up));
+ aBtnDown.SetClickHdl(LINK(this, SwColumnPage, Down));
+ aAutoWidthBox.SetClickHdl(LINK(this, SwColumnPage, AutoWidthHdl));
+
+ aLk = LINK( this, SwColumnPage, UpdateColMgr );
+ aLineTypeDLB.SetSelectHdl( aLk );
+ aLineHeightEdit.SetModifyHdl( aLk );
+ aLinePosDLB.SetSelectHdl( aLk );
+
+ // Trennlinie
+ aLineTypeDLB.SetUnit( FUNIT_POINT );
+ aLineTypeDLB.SetSourceUnit( FUNIT_TWIP );
+ for( i = 0; i < nLineCount; ++i )
+ aLineTypeDLB.InsertEntry( 100 * nLines[ i ] );
+}
+
+
+
+SwColumnPage::~SwColumnPage()
+{
+ delete pColMgr;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+
+void SwColumnPage::SetPageWidth(long nPageWidth)
+{
+ long nNewMaxWidth = static_cast< long >(aEd1.NormalizePercent(nPageWidth));
+
+ aDistEd1.SetMax(nNewMaxWidth, FUNIT_TWIP);
+ aDistEd2.SetMax(nNewMaxWidth, FUNIT_TWIP);
+ aEd1.SetMax(nNewMaxWidth, FUNIT_TWIP);
+ aEd2.SetMax(nNewMaxWidth, FUNIT_TWIP);
+ aEd3.SetMax(nNewMaxWidth, FUNIT_TWIP);
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+
+
+void SwColumnPage::Reset(const SfxItemSet &rSet)
+{
+ USHORT nHtmlMode = ::GetHtmlMode((const SwDocShell*)SfxObjectShell::Current());
+ if(nHtmlMode & HTMLMODE_ON)
+ {
+ bHtmlMode = TRUE;
+ aAutoWidthBox.Enable(FALSE);
+ }
+ FieldUnit aMetric = ::GetDfltMetric(bHtmlMode);
+ SetMetric(aEd1, aMetric);
+ SetMetric(aEd2, aMetric);
+ SetMetric(aEd3, aMetric);
+ SetMetric(aDistEd1, aMetric);
+ SetMetric(aDistEd2, aMetric);
+
+ delete pColMgr;
+ pColMgr = new SwColMgr(rSet);
+ nCols = pColMgr->GetCount() ;
+ aCLNrEdt.SetMax(Max((USHORT)aCLNrEdt.GetMax(), (USHORT)nCols));
+ aCLNrEdt.SetLast(Max(nCols,(USHORT)aCLNrEdt.GetMax()));
+
+ if(bFrm)
+ {
+ if(bFormat) // hier gibt es keine Size
+ pColMgr->SetActualWidth(FRAME_FORMAT_WIDTH);
+ else
+ {
+ const SwFmtFrmSize& rSize = (const SwFmtFrmSize&)rSet.Get(RES_FRM_SIZE);
+ const SvxBoxItem& rBox = (const SvxBoxItem&) rSet.Get(RES_BOX);
+ pColMgr->SetActualWidth((USHORT)rSize.GetSize().Width() - rBox.GetDistance());
+ }
+ }
+ if(aBalanceColsCB.IsVisible())
+ {
+ const SfxPoolItem* pItem;
+ if( SFX_ITEM_SET == rSet.GetItemState( RES_COLUMNBALANCE, FALSE, &pItem ))
+ aBalanceColsCB.Check(!((const SwFmtNoBalancedColumns*)pItem)->GetValue());
+ else
+ aBalanceColsCB.Check( TRUE );
+ }
+
+ //text direction
+ if( SFX_ITEM_AVAILABLE <= rSet.GetItemState( RES_FRAMEDIR ) )
+ {
+ const SvxFrameDirectionItem& rItem = (const SvxFrameDirectionItem&)rSet.Get(RES_FRAMEDIR);
+ sal_uInt32 nVal = rItem.GetValue();
+ USHORT nPos = aTextDirectionLB.GetEntryPos( (void*) nVal );
+ aTextDirectionLB.SelectEntryPos( nPos );
+ aTextDirectionLB.SaveValue();
+ }
+
+ Init();
+ ActivatePage( rSet );
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: TabPage erzeugen
+ --------------------------------------------------------------------*/
+
+
+
+SfxTabPage* SwColumnPage::Create(Window *pParent, const SfxItemSet &rSet)
+{
+ return new SwColumnPage(pParent, rSet);
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Attribute in den Set stopfen bei OK
+ --------------------------------------------------------------------*/
+
+
+
+BOOL SwColumnPage::FillItemSet(SfxItemSet &rSet)
+{
+ if(aCLNrEdt.HasChildPathFocus())
+ aCLNrEdt.GetDownHdl().Call(&aCLNrEdt);
+ // Im ItemSet setzen
+ // Die aktuellen Einstellungen sind
+ // schon vorhanden
+ //
+ const SfxPoolItem* pOldItem;
+ const SwFmtCol& rCol = pColMgr->GetColumns();
+ if(0 == (pOldItem = GetOldItem( rSet, RES_COL )) ||
+ rCol != *pOldItem )
+ rSet.Put(rCol);
+
+ if(aBalanceColsCB.IsVisible() )
+ {
+ rSet.Put(SwFmtNoBalancedColumns(!aBalanceColsCB.IsChecked() ));
+ }
+ USHORT nPos;
+ if( aTextDirectionLB.IsVisible() &&
+ ( nPos = aTextDirectionLB.GetSelectEntryPos() ) !=
+ aTextDirectionLB.GetSavedValue() )
+ {
+ sal_uInt32 nDirection = (sal_uInt32)(sal_IntPtr)aTextDirectionLB.GetEntryData( nPos );
+ rSet.Put( SvxFrameDirectionItem( (SvxFrameDirection)nDirection, RES_FRAMEDIR));
+ }
+ return TRUE;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: ColumnManager updaten
+ --------------------------------------------------------------------*/
+
+
+
+IMPL_LINK( SwColumnPage, UpdateColMgr, void *, /*pField*/ )
+{
+ long nGutterWidth = pColMgr->GetGutterWidth();
+ if(nCols > 1)
+ {
+ // Ermitteln, ob die schmalste Spalte zu schmal ist
+ // fuer den eingestellten Spaltenabstand
+ long nMin = nColWidth[0];
+ USHORT i;
+
+ for( i = 1; i < nCols; ++i)
+ nMin = Min(nMin, nColWidth[i]);
+
+ BOOL bAutoWidth = aAutoWidthBox.IsChecked();
+ if(!bAutoWidth)
+ {
+ pColMgr->SetAutoWidth(FALSE);
+ // falls der Benutzer nicht die Gesamtbreite vergeben hat,
+ // den fehlenden Betrag auf die letzte Spalte addieren.
+ long nSum = 0;
+ for(i = 0; i < nCols; ++i)
+ nSum += nColWidth[i];
+ nGutterWidth = 0;
+ for(i = 0; i < nCols - 1; ++i)
+ nGutterWidth += nColDist[i];
+ nSum += nGutterWidth;
+
+ long nMaxW = pColMgr->GetActualSize();
+
+ if( nSum < nMaxW )
+ nColWidth[nCols - 1] += nMaxW - nSum;
+
+ pColMgr->SetColWidth( 0, static_cast< USHORT >(nColWidth[0] + (USHORT)nColDist[0]/2) );
+ for( i = 1; i < nCols-1; ++i )
+ {
+ long nActDist = (nColDist[i] + nColDist[i - 1]) / 2;
+ pColMgr->SetColWidth( i, (USHORT)nColWidth[i] + (USHORT)nActDist );
+ }
+ pColMgr->SetColWidth( nCols-1, static_cast< USHORT >(nColWidth[nCols-1] + nColDist[nCols -2]/2) );
+
+ }
+
+ // keins ist ausgeschaltet
+ const USHORT nPos = aLineTypeDLB.GetSelectEntryPos();
+ BOOL bEnable = 0 != nPos;
+ aLineHeightEdit.Enable( bEnable );
+ aLineHeightLbl.Enable( bEnable );
+ if( !bEnable )
+ pColMgr->SetNoLine();
+ else if( LISTBOX_ENTRY_NOTFOUND != nPos )
+ {
+ pColMgr->SetLineWidthAndColor(nLines[nPos - 1], Color(COL_BLACK) );
+ pColMgr->SetAdjust( SwColLineAdj(
+ aLinePosDLB.GetSelectEntryPos() + 1) );
+ pColMgr->SetLineHeightPercent((short)aLineHeightEdit.GetValue());
+ bEnable = pColMgr->GetLineHeightPercent() != 100;
+ }
+ aLinePosLbl.Enable( bEnable );
+ aLinePosDLB.Enable( bEnable );
+ }
+ else
+ {
+ pColMgr->NoCols();
+ nCols = 0;
+ }
+
+ //Maximalwerte setzen
+ aCLNrEdt.SetMax(Max(1L,
+ Min(long(nMaxCols), long( pColMgr->GetActualSize() / (nGutterWidth + MINLAY)) )));
+ aCLNrEdt.SetLast(aCLNrEdt.GetMax());
+ aCLNrEdt.Reformat();
+
+ //Beispielfenster anregen
+ if(!bLockUpdate)
+ {
+ if(bFrm)
+ {
+ aFrmExampleWN.SetColumns( pColMgr->GetColumns() );
+ aFrmExampleWN.Invalidate();
+ }
+ else
+ aPgeExampleWN.Invalidate();
+ }
+
+ return 0;
+}
+
+/*------------------------------------------------------------------------
+ Beschreibung: Initialisierung
+------------------------------------------------------------------------*/
+
+
+
+void SwColumnPage::Init()
+{
+ aCLNrEdt.SetValue(nCols);
+
+ BOOL bAutoWidth = pColMgr->IsAutoWidth() || bHtmlMode;
+ aAutoWidthBox.Check( bAutoWidth );
+
+ sal_Int32 nColumnWidthSum = 0;
+ // Setzen der Breiten
+ USHORT i;
+ for(i = 0; i < nCols; ++i)
+ {
+ nColWidth[i] = pColMgr->GetColWidth(i);
+ nColumnWidthSum += nColWidth[i];
+ if(i < nCols - 1)
+ nColDist[i] = pColMgr->GetGutterWidth(i);
+ }
+
+ if( 1 < nCols )
+ {
+ // #97495# make sure that the automatic column widht's are always equal
+ if(bAutoWidth)
+ {
+ nColumnWidthSum /= nCols;
+ for(i = 0; i < nCols; ++i)
+ nColWidth[i] = nColumnWidthSum;
+ }
+ SwColLineAdj eAdj = pColMgr->GetAdjust();
+ if( COLADJ_NONE == eAdj ) // der Dialog kennt kein NONE!
+ {
+ eAdj = COLADJ_TOP;
+ //ohne Adjust auch kein Linientyp
+ aLineTypeDLB.SelectEntryPos( 0 );
+ aLineHeightEdit.SetValue( 100 );
+ }
+ else
+ {
+ aLineTypeDLB.SelectEntryPos( lcl_LineWidthToPos(( pColMgr->GetLineWidth() )) + 1);
+ aLineHeightEdit.SetValue( pColMgr->GetLineHeightPercent() );
+ }
+ aLinePosDLB.SelectEntryPos( static_cast< USHORT >(eAdj - 1) );
+ }
+ else
+ {
+ aLinePosDLB.SelectEntryPos( 0 );
+ aLineTypeDLB.SelectEntryPos( 0 );
+ aLineHeightEdit.SetValue( 100 );
+ }
+
+ UpdateCols();
+ Update();
+
+ // Maximale Spaltenzahl setzen
+ // Werte kleiner als 1 sind nicht erlaubt
+ aCLNrEdt.SetMax(Max(1L,
+ Min(long(nMaxCols), long( pColMgr->GetActualSize() / nMinWidth) )));
+}
+
+/*------------------------------------------------------------------------
+ Beschreibung: Die Anzahl der Spalten hat sich veraendert -- hier werden
+ die Controls fuer die Bearbeitung der Spalten entsprechend
+ der Spaltenzahl en- oder disabled.
+ Falls es mehr als nVisCols (= 3) Spalten gibt, werden
+ alle Edit enabled und die Buttons fuer das Scrollen
+ ebenfalls.
+ Andernfalls werden die Edits jeweils fuer die entsprechenden
+ Spaltenzahl enabled; eine Spalte kann nicht bearbeitet werden.
+------------------------------------------------------------------------*/
+
+
+
+void SwColumnPage::UpdateCols()
+{
+ BOOL bEnableBtns= FALSE;
+ BOOL bEnable12 = FALSE;
+ BOOL bEnable3 = FALSE;
+ const BOOL bEdit = !aAutoWidthBox.IsChecked();
+ if ( nCols > nVisCols )
+ {
+ bEnableBtns = TRUE && !bHtmlMode;
+ bEnable12 = bEnable3 = bEdit;
+ }
+ else if( bEdit )
+ {
+ // hier gibt es absichtlich kaum noch breaks
+ switch(nCols)
+ {
+ case 3: bEnable3 = TRUE;
+ case 2: bEnable12= TRUE; break;
+ default: /* do nothing */;
+ }
+ }
+ aEd1.Enable( bEnable12 );
+ aDistEd1.Enable(nCols > 1);
+ aEd2.Enable( bEnable12 );
+ aDistEd2.Enable(bEnable3);
+ aEd3.Enable( bEnable3 );
+ aLbl1.Enable(bEnable12 );
+ aLbl2.Enable(bEnable12 );
+ aLbl3.Enable(bEnable3 );
+ aBtnUp.Enable( bEnableBtns );
+ aBtnDown.Enable( bEnableBtns );
+
+ const BOOL bEnable = nCols > 1;
+ if( !bEnable )
+ {
+ aLinePosDLB.Enable( FALSE );
+ aLinePosLbl.Enable( FALSE );
+ }
+ aLineHeightEdit.Enable( bEnable );
+ aLineHeightLbl.Enable( bEnable );
+ aLineTypeDLB.Enable( bEnable );
+ aLineTypeLbl.Enable( bEnable );
+ aAutoWidthBox.Enable( bEnable && !bHtmlMode );
+}
+
+void SwColumnPage::SetLabels( USHORT nVis )
+{
+ String sLbl( '~' );
+
+ String sLbl2( String::CreateFromInt32( nVis + 1 ));
+ sLbl2.Insert(sLbl, sLbl2.Len() - 1);
+ aLbl1.SetText(sLbl2);
+
+ sLbl2 = String::CreateFromInt32( nVis + 2 );
+ sLbl2.Insert(sLbl, sLbl2.Len() - 1);
+ aLbl2.SetText(sLbl2);
+
+ sLbl2 = String::CreateFromInt32( nVis + 3 );
+ sLbl2.Insert(sLbl, sLbl2.Len() - 1);
+ aLbl3.SetText(sLbl2);
+}
+
+/*------------------------------------------------------------------------
+ Beschreibung: Handler, der bei einer Veraenderung der Spaltenzahl
+ gerufen wird.
+ Eine Aenderung der Spaltenzahl ueberschreibt eventuelle
+ Breiteneinstellungen des Benutzers; alle Spalten sind
+ gleich breit.
+------------------------------------------------------------------------*/
+
+IMPL_LINK( SwColumnPage, ColModify, NumericField *, pNF )
+{
+ nCols = (USHORT)aCLNrEdt.GetValue();
+ //#107890# the handler is also called from LoseFocus()
+ //then no change has been made and thus no action should be taken
+ // #i17816# changing the displayed types within the ValueSet
+ //from two columns to two columns with different settings doesn't invalidate the
+ // example windows in ::ColModify()
+ if(!pNF ||(pColMgr->GetCount() != nCols))
+ {
+ if(pNF)
+ aDefaultVS.SetNoSelection();
+ long nDist = static_cast< long >(aDistEd1.DenormalizePercent(aDistEd1.GetValue(FUNIT_TWIP)));
+ pColMgr->SetCount(nCols, (USHORT)nDist);
+ for(USHORT i = 0; i < nCols; i++)
+ nColDist[i] = nDist;
+ nFirstVis = 0;
+ SetLabels( nFirstVis );
+ UpdateCols();
+ ResetColWidth();
+ Update();
+ }
+
+ return 0;
+}
+
+/*------------------------------------------------------------------------
+ Beschreibung: Modify- Handler fuer eine Aenderung der Spaltenbreite
+ oder des Spaltenabstandes.
+ Diese Aenderungen wirken sich erst zeitversetzt aus.
+ Durch eine Aenderung der Spaltenbreite wird die automatische
+ Berechnung der Spaltenbreite ausser Kraft gesetzt; erst
+ eine Aenderung der Spaltenzahl kehrt wieder zu diesem
+ Default zurueck.
+------------------------------------------------------------------------*/
+
+
+
+IMPL_LINK( SwColumnPage, GapModify, PercentField *, pFld )
+{
+ long nActValue = static_cast< long >(pFld->DenormalizePercent(pFld->GetValue(FUNIT_TWIP)));
+ if(nCols < 2)
+ return 0;
+ if(aAutoWidthBox.IsChecked())
+ {
+ USHORT nMaxGap = pColMgr->GetActualSize() - nCols * MINLAY;
+ DBG_ASSERT(nCols, "Abstand kann nicht ohne Spalten eingestellt werden");
+ nMaxGap /= nCols - 1;
+ if(nActValue > nMaxGap)
+ {
+ nActValue = nMaxGap;
+ aDistEd1.SetPrcntValue(aDistEd1.NormalizePercent(nMaxGap), FUNIT_TWIP);
+ }
+ pColMgr->SetGutterWidth((USHORT)nActValue);
+ for(USHORT i = 0; i < nCols; i++)
+ nColDist[i] = nActValue;
+
+ ResetColWidth();
+ UpdateCols();
+ }
+ else
+
+ {
+ USHORT nOffset = 0;
+ if(pFld == &aDistEd2)
+ {
+ nOffset = 1;
+ }
+ long nDiff = nActValue - nColDist[nFirstVis + nOffset];
+ if(nDiff)
+ {
+ long nLeft = nColWidth[nFirstVis + nOffset];
+ long nRight = nColWidth[nFirstVis + nOffset + 1];
+ if(nLeft + nRight + 2 * MINLAY < nDiff)
+ nDiff = nLeft + nRight - 2 * MINLAY;
+ if(nDiff < nRight - MINLAY)
+ {
+ nRight -= nDiff;
+ }
+ else
+ {
+ long nTemp = nDiff - nRight + MINLAY;
+ nRight = MINLAY;
+ if(nLeft > nTemp - MINLAY)
+ {
+ nLeft -= nTemp;
+ nTemp = 0;
+ }
+ else
+ {
+ nTemp -= nLeft + MINLAY;
+ nLeft = MINLAY;
+ }
+ nDiff = nTemp;
+ }
+ nColWidth[nFirstVis + nOffset] = nLeft;
+ nColWidth[nFirstVis + nOffset + 1] = nRight;
+ nColDist[nFirstVis + nOffset] += nDiff;
+
+ pColMgr->SetColWidth( nFirstVis + nOffset, USHORT(nLeft) );
+ pColMgr->SetColWidth( nFirstVis + nOffset + 1, USHORT(nRight) );
+ pColMgr->SetGutterWidth( USHORT(nColDist[nFirstVis + nOffset]), nFirstVis + nOffset );
+ }
+
+ }
+ Update();
+ return 0;
+}
+
+/*------------------------------------------------------------------------
+ Beschreibung:
+------------------------------------------------------------------------*/
+
+
+
+IMPL_LINK( SwColumnPage, EdModify, PercentField *, pField )
+{
+ pModifiedField = pField;
+ Timeout(0);
+ return 0;
+}
+/*------------------------------------------------------------------------
+ Beschreibung: Handler hinter der Checkbox fuer automatische Breite.
+ Ist die Box gecheckt, koennen keine expliziten Werte
+ fuer die Spaltenbreite eingegeben werden.
+------------------------------------------------------------------------*/
+
+
+
+IMPL_LINK( SwColumnPage, AutoWidthHdl, CheckBox *, pBox )
+{
+ long nDist = static_cast< long >(aDistEd1.DenormalizePercent(aDistEd1.GetValue(FUNIT_TWIP)));
+ pColMgr->SetCount(nCols, (USHORT)nDist);
+ for(USHORT i = 0; i < nCols; i++)
+ nColDist[i] = nDist;
+ if(pBox->IsChecked())
+ {
+ pColMgr->SetGutterWidth(USHORT(nDist));
+ ResetColWidth();
+ }
+ pColMgr->SetAutoWidth(pBox->IsChecked(), USHORT(nDist));
+ UpdateCols();
+ Update();
+ return 0;
+}
+
+/*------------------------------------------------------------------------
+ Beschreibung: Raufscrollen der Inhalte der Edits.
+------------------------------------------------------------------------*/
+
+IMPL_LINK( SwColumnPage, Up, Button *, EMPTYARG )
+{
+ if( nFirstVis )
+ {
+ --nFirstVis;
+ SetLabels( nFirstVis );
+ Update();
+ }
+ return 0;
+}
+/*------------------------------------------------------------------------
+ Beschreibung: Runterscrollen der Inhalte der Edits.
+------------------------------------------------------------------------*/
+
+IMPL_LINK( SwColumnPage, Down, Button *, EMPTYARG )
+{
+ if( nFirstVis + nVisCols < nCols )
+ {
+ ++nFirstVis;
+ SetLabels( nFirstVis );
+ Update();
+ }
+ return 0;
+}
+/*------------------------------------------------------------------------
+ Beschreibung: Relikt aus alten Zeiten - jetzt direkt ohne time
+ * Timer- Handler; angetriggert durch eine Aenderung der
+ Spaltenbreite oder des Spaltenabstandes.
+------------------------------------------------------------------------*/
+
+IMPL_LINK( SwColumnPage, Timeout, Timer *, EMPTYARG )
+{
+ DBG_PROFSTART(columnhdl) ;
+ if(pModifiedField)
+ {
+ // Finden der veraenderten Spalte
+ USHORT nChanged = nFirstVis;
+ if(pModifiedField == &aEd2)
+ ++nChanged;
+ else if(pModifiedField == &aEd3)
+ nChanged += 2;
+ /*else if(pModifiedField == &aEd4)
+ nChanged += 3;*/
+
+ long nNewWidth = (USHORT)
+ pModifiedField->DenormalizePercent(pModifiedField->GetValue(FUNIT_TWIP));
+ long nDiff = nNewWidth - nColWidth[nChanged];
+
+ // wenn es die letzte Spalte ist
+ if(nChanged == nCols - 1)
+ {
+ nColWidth[0] -= nDiff;
+ if(nColWidth[0] < (long)nMinWidth)
+ {
+ nNewWidth -= nMinWidth - nColWidth[0];
+ nColWidth[0] = nMinWidth;
+ }
+
+ }
+ else if(nDiff)
+ {
+ nColWidth[nChanged + 1] -= nDiff;
+ if(nColWidth[nChanged + 1] < (long) nMinWidth)
+ {
+ nNewWidth -= nMinWidth - nColWidth[nChanged + 1];
+ nColWidth[nChanged + 1] = nMinWidth;
+ }
+ }
+ nColWidth[nChanged] = nNewWidth;
+ pModifiedField = 0;
+ }
+ Update();
+ DBG_PROFSTOP(columnhdl) ;
+ return 0;
+}
+/*------------------------------------------------------------------------
+ Beschreibung: Aktualisierung der Anzeige
+------------------------------------------------------------------------*/
+
+
+
+void SwColumnPage::Update()
+{
+ aBalanceColsCB.Enable(nCols > 1);
+ if(nCols >= 2)
+ {
+ aEd1.SetPrcntValue(aEd1.NormalizePercent(nColWidth[nFirstVis]), FUNIT_TWIP);
+ aDistEd1.SetPrcntValue(aDistEd1.NormalizePercent(nColDist[nFirstVis]), FUNIT_TWIP);
+ aEd2.SetPrcntValue(aEd2.NormalizePercent(nColWidth[nFirstVis + 1]), FUNIT_TWIP);
+ if(nCols >= 3)
+ {
+ aDistEd2.SetPrcntValue(aDistEd2.NormalizePercent(nColDist[nFirstVis + 1]), FUNIT_TWIP);
+ aEd3.SetPrcntValue(aEd3.NormalizePercent(nColWidth[nFirstVis + 2]), FUNIT_TWIP);
+ }
+ else
+ {
+ aEd3.SetText(aEmptyStr);
+ aDistEd2.SetText(aEmptyStr);
+ }
+ }
+ else
+ {
+ aEd1.SetText(aEmptyStr);
+ aEd2.SetText(aEmptyStr);
+ aEd3.SetText(aEmptyStr);
+ aDistEd1.SetText(aEmptyStr);
+ aDistEd2.SetText(aEmptyStr);
+ }
+ UpdateColMgr(0);
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Update Bsp
+ --------------------------------------------------------------------*/
+
+
+
+void SwColumnPage::ActivatePage(const SfxItemSet& rSet)
+{
+ if(!bFrm)
+ {
+ if( SFX_ITEM_SET == rSet.GetItemState( SID_ATTR_PAGE_SIZE ))
+ {
+ const SvxSizeItem& rSize = (const SvxSizeItem&)rSet.Get(
+ SID_ATTR_PAGE_SIZE);
+ const SvxLRSpaceItem& rLRSpace = (const SvxLRSpaceItem&)rSet.Get(
+ RES_LR_SPACE );
+ const SvxBoxItem& rBox = (const SvxBoxItem&) rSet.Get(RES_BOX);
+ USHORT nActWidth = static_cast< USHORT >(rSize.GetSize().Width()
+ - rLRSpace.GetLeft() - rLRSpace.GetRight() - rBox.GetDistance());
+
+ if( pColMgr->GetActualSize() != nActWidth)
+ {
+ pColMgr->SetActualWidth(nActWidth);
+ ColModify( 0 );
+ UpdateColMgr( 0 );
+ }
+ }
+ aFrmExampleWN.Hide();
+ aPgeExampleWN.UpdateExample( rSet, pColMgr );
+ aPgeExampleWN.Show();
+
+ }
+ else
+ {
+ aPgeExampleWN.Hide();
+ aFrmExampleWN.Show();
+
+ // Size
+ const SwFmtFrmSize& rSize = (const SwFmtFrmSize&)rSet.Get(RES_FRM_SIZE);
+ const SvxBoxItem& rBox = (const SvxBoxItem&) rSet.Get(RES_BOX);
+
+ long nDistance = rBox.GetDistance();
+ const USHORT nTotalWish = bFormat ? FRAME_FORMAT_WIDTH : USHORT(rSize.GetWidth() - 2 * nDistance);
+
+ // Maximalwerte der Spaltenbreiten setzen
+ SetPageWidth(nTotalWish);
+
+ if(pColMgr->GetActualSize() != nTotalWish)
+ {
+ pColMgr->SetActualWidth(nTotalWish);
+ Init();
+ }
+ BOOL bPercent;
+ // im Rahmenformat nur relative Angaben
+ if ( bFormat || (rSize.GetWidthPercent() && rSize.GetWidthPercent() != 0xff) )
+ {
+ // Wert fuer 100% setzen
+ aEd1.SetRefValue(nTotalWish);
+ aEd2.SetRefValue(nTotalWish);
+ aEd3.SetRefValue(nTotalWish);
+ aDistEd1.SetRefValue(nTotalWish);
+ aDistEd2.SetRefValue(nTotalWish);
+
+ // Auf %-Darstellung umschalten
+ bPercent = TRUE;
+ }
+ else
+ bPercent = FALSE;
+
+ aEd1.ShowPercent(bPercent);
+ aEd2.ShowPercent(bPercent);
+ aEd3.ShowPercent(bPercent);
+ aDistEd1.ShowPercent(bPercent);
+ aDistEd2.ShowPercent(bPercent);
+ aDistEd1.MetricField::SetMin(0);
+ aDistEd2.MetricField::SetMin(0);
+ }
+ Update();
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+
+
+int SwColumnPage::DeactivatePage(SfxItemSet *_pSet)
+{
+ if(_pSet)
+ FillItemSet(*_pSet);
+
+ return TRUE;
+}
+
+
+
+USHORT* SwColumnPage::GetRanges()
+{
+ return aPageRg;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+
+
+IMPL_LINK( SwColumnPage, SetDefaultsHdl, ValueSet *, pVS )
+{
+ USHORT nItem = pVS->GetSelectItemId();
+ if( nItem < 4 )
+ {
+ aCLNrEdt.SetValue( nItem );
+ aAutoWidthBox.Check();
+ aDistEd1.SetPrcntValue(0);
+ ColModify(0);
+ }
+ else
+ {
+ bLockUpdate = TRUE;
+ aCLNrEdt.SetValue( 2 );
+ aAutoWidthBox.Check(FALSE);
+ aDistEd1.SetPrcntValue(0);
+ ColModify(0);
+ // jetzt noch das Breitenverhaeltnisse auf 2 : 1 bzw. 1 : 2 stellen
+ USHORT nSmall = pColMgr->GetActualSize() / 3;
+ if(nItem == 4)
+ {
+ aEd2.SetPrcntValue(aEd2.NormalizePercent(long(nSmall)), FUNIT_TWIP);
+ pModifiedField = &aEd2;
+ }
+ else
+ {
+ aEd1.SetPrcntValue(aEd1.NormalizePercent(long(nSmall)), FUNIT_TWIP);
+ pModifiedField = &aEd1;
+ }
+ bLockUpdate = FALSE;
+ Timeout(0);
+
+ }
+ return 0;
+}
+
+/*-----------------25.10.96 11.41-------------------
+
+--------------------------------------------------*/
+
+
+void SwColumnPage::SetFrmMode(BOOL bMod)
+{
+ bFrm = bMod;
+}
+/* -----------------------------2002/06/19 13:08------------------------------
+
+ ---------------------------------------------------------------------------*/
+void SwColumnPage::SetInSection(BOOL bSet)
+{
+ if(!SW_MOD()->GetCTLOptions().IsCTLFontEnabled())
+ return;
+
+ aVertFL.Show(bSet);
+ aPropertiesFL.Show(bSet);
+ aTextDirectionFT.Show(bSet);
+ aTextDirectionLB.Show(bSet);
+ if(bSet)
+ {
+ //resize line type FixedLine
+ Point aLtPos = aFLLineType.GetPosPixel();
+ Point aPropPos = aPropertiesFL.GetPosPixel();
+ Size aSz = aFLLineType.GetSizePixel();
+ aSz.Width() = aPropPos.X() - aLtPos.X() - LogicToPixel(Size(8, 8), MAP_APPFONT).Width();
+ aFLLineType.SetSizePixel(aSz);
+ }
+ else
+ {
+ Size aSz = aFLLineType.GetSizePixel();
+ aSz.Width() = LogicToPixel(Size(248, 248), MAP_APPFONT).Width();
+ aFLLineType.SetSizePixel(aSz);
+ }
+}
+
+/*-----------------07.03.97 08.33-------------------
+
+--------------------------------------------------*/
+
+
+void ColumnValueSet::UserDraw( const UserDrawEvent& rUDEvt )
+{
+ OutputDevice* pDev = rUDEvt.GetDevice();
+ const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
+
+ Rectangle aRect = rUDEvt.GetRect();
+ USHORT nItemId = rUDEvt.GetItemId();
+ long nRectWidth = aRect.GetWidth();
+ long nRectHeight = aRect.GetHeight();
+
+ Point aBLPos = aRect.TopLeft();
+ Color aFillColor(pDev->GetFillColor());
+ Color aLineColor(pDev->GetLineColor());
+ pDev->SetFillColor(rStyleSettings.GetFieldColor());
+ pDev->SetLineColor(SwViewOption::GetFontColor());
+
+ long nStep = Abs(Abs(nRectHeight * 95 /100) / 11);
+ long nTop = (nRectHeight - 11 * nStep ) / 2;
+ USHORT nCols = 0;
+ long nStarts[3];
+ long nEnds[3];
+ nStarts[0] = nRectWidth * 10 / 100;
+ switch( nItemId )
+ {
+ case 1:
+ nEnds[0] = nRectWidth * 9 / 10;
+ nCols = 1;
+ break;
+ case 2: nCols = 2;
+ nEnds[0] = nRectWidth * 45 / 100;
+ nStarts[1] = nEnds[0] + nStep;
+ nEnds[1] = nRectWidth * 9 / 10;
+ break;
+ case 3: nCols = 3;
+ nEnds[0] = nRectWidth * 30 / 100;
+ nStarts[1] = nEnds[0] + nStep;
+ nEnds[1] = nRectWidth * 63 / 100;
+ nStarts[2] = nEnds[1] + nStep;
+ nEnds[2] = nRectWidth * 9 / 10;
+ break;
+ case 4: nCols = 2;
+ nEnds[0] = nRectWidth * 63 / 100;
+ nStarts[1] = nEnds[0] + nStep;
+ nEnds[1] = nRectWidth * 9 / 10;
+ break;
+ case 5: nCols = 2;
+ nEnds[0] = nRectWidth * 30 / 100;
+ nStarts[1] = nEnds[0] + nStep;
+ nEnds[1] = nRectWidth * 9 / 10;
+ break;
+ }
+ for(USHORT j = 0; j < nCols; j++ )
+ {
+ Point aStart(aBLPos.X() + nStarts[j], 0);
+ Point aEnd(aBLPos.X() + nEnds[j], 0);
+ for( USHORT i = 0; i < 12; i ++)
+ {
+ aStart.Y() = aEnd.Y() = aBLPos.Y() + nTop + i * nStep;
+ pDev->DrawLine(aStart, aEnd);
+ }
+ }
+ pDev->SetFillColor(aFillColor);
+ pDev->SetLineColor(aLineColor);
+}
+
+/*-----------------07.03.97 08.48-------------------
+
+--------------------------------------------------*/
+
+ColumnValueSet::~ColumnValueSet()
+{
+}
+/* -----------------------------02.04.2002 16:01------------------------------
+
+ ---------------------------------------------------------------------------*/
+void ColumnValueSet::DataChanged( const DataChangedEvent& rDCEvt )
+{
+ if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
+ (rDCEvt.GetFlags() & SETTINGS_STYLE) )
+ {
+ Format();
+ }
+ ValueSet::DataChanged( rDCEvt );
+}
+