summaryrefslogtreecommitdiff
path: root/sw/source/ui/misc/linenum.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/ui/misc/linenum.cxx')
-rw-r--r--sw/source/ui/misc/linenum.cxx431
1 files changed, 431 insertions, 0 deletions
diff --git a/sw/source/ui/misc/linenum.cxx b/sw/source/ui/misc/linenum.cxx
new file mode 100644
index 000000000000..4513deaae704
--- /dev/null
+++ b/sw/source/ui/misc/linenum.cxx
@@ -0,0 +1,431 @@
+/*************************************************************************
+ *
+ * $RCSfile: linenum.cxx,v $
+ *
+ * $Revision: 1.1.1.1 $
+ *
+ * last change: $Author: hr $ $Date: 2000-09-18 17:14:45 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library 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 for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (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.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+#ifdef PRECOMPILED
+#include "ui_pch.hxx"
+#endif
+
+#pragma hdrstop
+
+#ifndef _SFXVIEWFRM_HXX //autogen
+#include <sfx2/viewfrm.hxx>
+#endif
+
+#ifndef _SFXSTYLE_HXX //autogen
+#include <svtools/style.hxx>
+#endif
+
+#ifndef _SV_MSGBOX_HXX //autogen
+#include <vcl/msgbox.hxx>
+#endif
+
+#ifndef _SWVIEW_HXX //autogen
+#include <view.hxx>
+#endif
+
+#ifndef _WRTSH_HXX //autogen
+#include <wrtsh.hxx>
+#endif
+
+#ifndef _SWDOCSH_HXX //autogen
+#include <docsh.hxx>
+#endif
+
+#ifndef _CHARFMT_HXX //autogen
+#include <charfmt.hxx>
+#endif
+
+#ifndef _FLDMGR_HXX //autogen
+#include <fldmgr.hxx>
+#endif
+
+#ifndef _DOC_HXX //autogen
+#include <doc.hxx>
+#endif
+
+#ifndef _DOCSTYLE_HXX //autogen
+#include <docstyle.hxx>
+#endif
+
+#include "fldbas.hxx"
+#include "lineinfo.hxx"
+#include "globals.hrc"
+#include "linenum.hrc"
+#include "linenum.hxx"
+#include "uitool.hxx"
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+SwLineNumberingDlg::SwLineNumberingDlg(SwView *pVw) :
+ SfxSingleTabDialog(&pVw->GetViewFrame()->GetWindow(), 0, 0),
+ pSh(pVw->GetWrtShellPtr())
+{
+ // TabPage erzeugen
+ SfxTabPage* pPage = SwLineNumberingPage::Create(this, *(SfxItemSet*)0);
+ SetTabPage(pPage);
+
+ GetOKButton()->SetClickHdl(LINK(this, SwLineNumberingDlg, OKHdl));
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+__EXPORT SwLineNumberingDlg::~SwLineNumberingDlg()
+{
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+IMPL_LINK( SwLineNumberingDlg, OKHdl, Button *, pBtn )
+{
+ if (GetOKButton()->IsEnabled())
+ {
+ SfxTabPage* pPage = GetTabPage();
+ if (pPage)
+ pPage->FillItemSet(*(SfxItemSet*)0);
+
+ EndDialog( RET_OK );
+ }
+
+ return 0;
+}
+
+/*-----------------------------------------------------------------------
+ Beschreibung:
+ -----------------------------------------------------------------------*/
+
+SwLineNumberingPage::SwLineNumberingPage( Window* pParent,
+ const SfxItemSet& rSet )
+ : SfxTabPage(pParent, SW_RES(TP_LINENUMBERING), rSet),
+ aNumberingOnCB ( this, SW_RES( CB_NUMBERING_ON )),
+ aCharStyleFT ( this, SW_RES( FT_CHAR_STYLE )),
+ aCharStyleLB ( this, SW_RES( LB_CHAR_STYLE )),
+ aFormatFT ( this, SW_RES( FT_FORMAT )),
+ aFormatLB ( this, SW_RES( LB_FORMAT )),
+ aPosFT ( this, SW_RES( FT_POS )),
+ aPosLB ( this, SW_RES( LB_POS )),
+ aOffsetFT ( this, SW_RES( FT_OFFSET )),
+ aOffsetMF ( this, SW_RES( MF_OFFSET )),
+ aNumIntervalFT ( this, SW_RES( FT_NUM_INVERVAL )),
+ aNumIntervalNF ( this, SW_RES( NF_NUM_INVERVAL )),
+ aNumRowsFT ( this, SW_RES( FT_NUM_ROWS )),
+ aDisplayGB ( this, SW_RES( GB_DISPLAY )),
+ aDivisorFT ( this, SW_RES( FT_DIVISOR )),
+ aDivisorED ( this, SW_RES( ED_DIVISOR )),
+ aDivIntervalFT ( this, SW_RES( FT_DIV_INTERVAL )),
+ aDivIntervalNF ( this, SW_RES( NF_DIV_INTERVAL )),
+ aDivRowsFT ( this, SW_RES( FT_DIV_ROWS )),
+ aDivisorGB ( this, SW_RES( GB_DIVISOR )),
+ aCountEmptyLinesCB ( this, SW_RES( CB_COUNT_EMPTYLINES )),
+ aCountFrameLinesCB ( this, SW_RES( CB_COUNT_FRAMELINES )),
+ aRestartEachPageCB ( this, SW_RES( CB_RESTART_PAGE )),
+ aCountGB ( this, SW_RES( GB_COUNT ))
+
+{
+ FreeResource();
+ SwLineNumberingDlg *pDlg = (SwLineNumberingDlg *)GetParent();
+ pSh = pDlg->GetWrtShell();
+ // Zeichenvorlagen
+ ::FillCharStyleListBox(aCharStyleLB, pSh->GetView().GetDocShell());
+}
+
+/*-----------------------------------------------------------------------
+ Beschreibung:
+ -----------------------------------------------------------------------*/
+
+__EXPORT SwLineNumberingPage::~SwLineNumberingPage()
+{
+}
+
+/*-----------------------------------------------------------------------
+ Beschreibung:
+ -----------------------------------------------------------------------*/
+
+SfxTabPage* __EXPORT SwLineNumberingPage::Create( Window* pParent, const SfxItemSet& rSet )
+{
+ return new SwLineNumberingPage( pParent, rSet );
+}
+
+/*-----------------------------------------------------------------------
+ Beschreibung:
+ -----------------------------------------------------------------------*/
+
+void __EXPORT SwLineNumberingPage::Reset( const SfxItemSet& rSet )
+{
+ const SwLineNumberInfo &rInf = pSh->GetLineNumberInfo();
+
+ String sStyleName(rInf.GetCharFmt(*pSh->GetDoc())->GetName());
+ const USHORT nPos = aCharStyleLB.GetEntryPos(sStyleName);
+
+ if (nPos != LISTBOX_ENTRY_NOTFOUND)
+ aCharStyleLB.SelectEntryPos(nPos);
+ else
+ {
+ if (sStyleName.Len())
+ {
+ aCharStyleLB.InsertEntry(sStyleName);
+ aCharStyleLB.SelectEntry(sStyleName);
+ }
+ }
+
+ // Format
+ SwFldMgr aMgr( pSh );
+ USHORT nSelFmt = rInf.GetNumType().eType;
+ USHORT nCnt = aMgr.GetFormatCount( TYP_SEQFLD, FALSE );
+
+ for( USHORT i = 0; i < nCnt; i++)
+ {
+ aFormatLB.InsertEntry(aMgr.GetFormatStr( TYP_SEQFLD, i));
+ USHORT nFmtId = aMgr.GetFormatId( TYP_SEQFLD, i );
+ aFormatLB.SetEntryData( i, (void*)nFmtId );
+ if( nFmtId == nSelFmt )
+ aFormatLB.SelectEntryPos( i );
+ }
+
+ if ( !aFormatLB.GetSelectEntryCount() )
+ aFormatLB.SelectEntryPos(aFormatLB.GetEntryCount() - 1);
+
+ // Position
+ aPosLB.SelectEntryPos((USHORT)rInf.GetPos());
+
+ // Offset
+ USHORT nOffset = rInf.GetPosFromLeft();
+ if (nOffset == USHRT_MAX)
+ nOffset = 0;
+
+ aOffsetMF.SetValue(aOffsetMF.Normalize(nOffset), FUNIT_TWIP);
+
+ // Numerierungsoffset
+ aNumIntervalNF.SetValue(rInf.GetCountBy());
+
+ // Teiler
+ aDivisorED.SetText(rInf.GetDivider());
+
+ // Teileroffset
+ aDivIntervalNF.SetValue(rInf.GetDividerCountBy());
+
+ // Zaehlen
+ aCountEmptyLinesCB.Check(rInf.IsCountBlankLines());
+ aCountFrameLinesCB.Check(rInf.IsCountInFlys());
+ aRestartEachPageCB.Check(rInf.IsRestartEachPage());
+
+ aNumberingOnCB.Check(rInf.IsPaintLineNumbers());
+
+ aNumberingOnCB.SetClickHdl(LINK(this, SwLineNumberingPage, LineOnOffHdl));
+ aDivisorED.SetModifyHdl(LINK(this, SwLineNumberingPage, ModifyHdl));
+ ModifyHdl();
+ LineOnOffHdl();
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Modify
+ --------------------------------------------------------------------*/
+
+IMPL_LINK( SwLineNumberingPage, ModifyHdl, Edit *, EMPTYARG )
+{
+ BOOL bHasValue = aDivisorED.GetText().Len() != 0;
+
+ aDivIntervalFT.Enable(bHasValue);
+ aDivIntervalNF.Enable(bHasValue);
+ aDivRowsFT.Enable(bHasValue);
+
+ return 0;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: On/Off
+ --------------------------------------------------------------------*/
+
+IMPL_LINK( SwLineNumberingPage, LineOnOffHdl, CheckBox *, EMPTYARG )
+{
+ BOOL bEnable = aNumberingOnCB.IsChecked();
+
+ aCharStyleFT.Enable(bEnable);
+ aCharStyleLB.Enable(bEnable);
+ aFormatFT.Enable(bEnable);
+ aFormatLB.Enable(bEnable);
+ aPosFT.Enable(bEnable);
+ aPosLB.Enable(bEnable);
+ aOffsetFT.Enable(bEnable);
+ aOffsetMF.Enable(bEnable);
+ aNumIntervalFT.Enable(bEnable);
+ aNumIntervalNF.Enable(bEnable);
+ aNumRowsFT.Enable(bEnable);
+ aDisplayGB.Enable(bEnable);
+ aDivisorFT.Enable(bEnable);
+ aDivisorED.Enable(bEnable);
+ aDivIntervalFT.Enable(bEnable);
+ aDivIntervalNF.Enable(bEnable);
+ aDivRowsFT.Enable(bEnable);
+ aDivisorGB.Enable(bEnable);
+ aCountEmptyLinesCB.Enable(bEnable);
+ aCountFrameLinesCB.Enable(bEnable);
+ aRestartEachPageCB.Enable(bEnable);
+ aCountGB.Enable(bEnable);
+
+ return 0;
+}
+
+/*-----------------------------------------------------------------------
+ Beschreibung:
+ -----------------------------------------------------------------------*/
+
+BOOL __EXPORT SwLineNumberingPage::FillItemSet( SfxItemSet& rSet )
+{
+ SwLineNumberInfo aInf(pSh->GetLineNumberInfo());
+
+ // Zeichenvorlagen
+ String sCharFmtName(aCharStyleLB.GetSelectEntry());
+ SwCharFmt *pCharFmt = pSh->FindCharFmtByName(sCharFmtName);
+
+ if (!pCharFmt)
+ {
+ SfxStyleSheetBasePool* pPool = pSh->GetView().GetDocShell()->GetStyleSheetPool();
+ SfxStyleSheetBase* pBase;
+ pBase = pPool->Find(sCharFmtName, SFX_STYLE_FAMILY_CHAR);
+ if(!pBase)
+ pBase = &pPool->Make(sCharFmtName, SFX_STYLE_FAMILY_CHAR);
+ pCharFmt = ((SwDocStyleSheet*)pBase)->GetCharFmt();
+ }
+
+ if (pCharFmt)
+ aInf.SetCharFmt(pCharFmt);
+
+ // Format
+ SwNumType aType;
+ aType.eType = (SvxExtNumType)(USHORT)(ULONG)aFormatLB.GetEntryData(
+ aFormatLB.GetSelectEntryPos() );
+ aInf.SetNumType(aType);
+
+ // Position
+ aInf.SetPos((LineNumberPosition)aPosLB.GetSelectEntryPos());
+
+ // Offset
+ aInf.SetPosFromLeft((USHORT)aOffsetMF.Denormalize(aOffsetMF.GetValue(FUNIT_TWIP)));
+
+ // Numerierungsoffset
+ aInf.SetCountBy((USHORT)aNumIntervalNF.GetValue());
+
+ // Teiler
+ aInf.SetDivider(aDivisorED.GetText());
+
+ // Teileroffset
+ aInf.SetDividerCountBy((USHORT)aDivIntervalNF.GetValue());
+
+ // Zaehlen
+ aInf.SetCountBlankLines(aCountEmptyLinesCB.IsChecked());
+ aInf.SetCountInFlys(aCountFrameLinesCB.IsChecked());
+ aInf.SetRestartEachPage(aRestartEachPageCB.IsChecked());
+
+ aInf.SetPaintLineNumbers(aNumberingOnCB.IsChecked());
+
+ pSh->SetLineNumberInfo(aInf);
+
+ return FALSE;
+}
+
+/*------------------------------------------------------------------------
+
+ $Log: not supported by cvs2svn $
+ Revision 1.11 2000/09/18 16:05:57 willem.vandorp
+ OpenOffice header added.
+
+ Revision 1.10 2000/08/14 12:50:15 ma
+ optional restart at each page for line numbering
+
+ Revision 1.9 2000/04/26 14:55:46 os
+ GetName() returns const String&
+
+ Revision 1.8 2000/02/11 14:56:26 hr
+ #70473# changes for unicode ( patched by automated patchtool )
+
+ Revision 1.7 1998/11/17 09:57:52 OS
+ #58263# NumType durch SvxExtNumType ersetzt
+
+
+ Rev 1.6 17 Nov 1998 10:57:52 OS
+ #58263# NumType durch SvxExtNumType ersetzt
+
+ Rev 1.5 11 Aug 1998 14:26:30 HR
+ void* kann nicht direkt nach USHORT gecastet werden
+
+ Rev 1.4 10 Aug 1998 16:42:10 JP
+ Bug #54796#: neue NumerierungsTypen (WW97 kompatibel)
+
+ Rev 1.3 15 Apr 1998 14:34:08 OS
+ CharStyles sortiert
+
+ Rev 1.2 20 Feb 1998 11:23:22 MA
+ Restarbeiten Zeilennummerierung
+
+ Rev 1.1 19 Feb 1998 13:51:32 OM
+ Zeilennumerierung
+
+ Rev 1.0 18 Feb 1998 18:56:48 OM
+ Initial revision.
+
+------------------------------------------------------------------------*/
+