summaryrefslogtreecommitdiff
path: root/sw/source/ui/misc/docfnote.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/ui/misc/docfnote.cxx')
-rw-r--r--sw/source/ui/misc/docfnote.cxx503
1 files changed, 503 insertions, 0 deletions
diff --git a/sw/source/ui/misc/docfnote.cxx b/sw/source/ui/misc/docfnote.cxx
new file mode 100644
index 000000000000..731e1451bd32
--- /dev/null
+++ b/sw/source/ui/misc/docfnote.cxx
@@ -0,0 +1,503 @@
+/*************************************************************************
+ *
+ * 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 <svl/style.hxx>
+#include <errhdl.hxx>
+#include <wrtsh.hxx>
+#ifndef _VIEW_HXX
+#include <view.hxx>
+#endif
+#ifndef _DOCSH_HXX
+#include <docsh.hxx>
+#endif
+#include <docfnote.hxx>
+#include <impfnote.hxx>
+#include <ftninfo.hxx>
+#include <fmtcol.hxx>
+#include <pagedesc.hxx>
+#include <charfmt.hxx>
+#include <docstyle.hxx>
+#include <wdocsh.hxx>
+#include <uitool.hxx>
+#include <poolfmt.hxx>
+#include <swstyle.h>
+#ifndef _HELPID_H
+#include <helpid.h>
+#endif
+#ifndef _MISC_HRC
+#include <misc.hrc>
+#endif
+#ifndef _DOCFNOTE_HRC
+#include <docfnote.hrc>
+#endif
+#ifndef _FRMUI_HRC
+#include <frmui.hrc>
+#endif
+#include <SwStyleNameMapper.hxx>
+
+SwFootNoteOptionDlg::SwFootNoteOptionDlg( Window *pParent, SwWrtShell &rS ) :
+ SfxTabDialog( pParent, SW_RES(DLG_DOC_FOOTNOTE) ),
+ rSh( rS )
+{
+ FreeResource();
+ RemoveResetButton();
+
+ aOldOkHdl = GetOKButton().GetClickHdl();
+ GetOKButton().SetClickHdl( LINK( this, SwFootNoteOptionDlg, OkHdl ) );
+
+ AddTabPage( TP_FOOTNOTEOPTION, SwFootNoteOptionPage::Create, 0 );
+ AddTabPage( TP_ENDNOTEOPTION, SwEndNoteOptionPage::Create, 0 );
+}
+
+void SwFootNoteOptionDlg::PageCreated( sal_uInt16 /*nId*/, SfxTabPage &rPage )
+{
+ ((SwEndNoteOptionPage&)rPage).SetShell( rSh );
+}
+
+SwFootNoteOptionDlg::~SwFootNoteOptionDlg()
+{
+}
+
+IMPL_LINK( SwFootNoteOptionDlg, OkHdl, Button *, pBtn )
+{
+ SfxItemSet aDummySet(rSh.GetAttrPool(), 1, 1 );
+ SfxTabPage *pPage = GetTabPage( TP_FOOTNOTEOPTION );
+ if ( pPage )
+ pPage->FillItemSet( aDummySet );
+ pPage = GetTabPage( TP_ENDNOTEOPTION );
+ if ( pPage )
+ pPage->FillItemSet( aDummySet );
+ aOldOkHdl.Call( pBtn );
+ return 0;
+}
+
+
+//----------------------------------------------------------------------
+
+
+SwEndNoteOptionPage::SwEndNoteOptionPage( Window *pParent, sal_Bool bEN,
+ const SfxItemSet &rSet ) :
+ SfxTabPage( pParent, SW_RES(bEN ? TP_ENDNOTEOPTION : TP_FOOTNOTEOPTION), rSet ),
+ aNumFL (this, SW_RES( FL_NUM )),
+
+ aNumTypeFT (this, SW_RES( FT_NUMTYPE )),
+ aNumViewBox (this, SW_RES( LB_NUMVIEW ), INSERT_NUM_EXTENDED_TYPES),
+ aOffsetLbl (this, SW_RES( FT_OFFSET )),
+ aOffsetFld (this, SW_RES( FLD_OFFSET )),
+ aNumCountFT (this, SW_RES( FT_NUMCOUNT )),
+ aNumCountBox (this, SW_RES( LB_NUMCOUNT )),
+ aPrefixFT (this, SW_RES( FT_PREFIX )),
+ aPrefixED (this, SW_RES( ED_PREFIX )),
+ aSuffixFT (this, SW_RES( FT_SUFFIX )),
+ aSuffixED (this, SW_RES( ED_SUFFIX )),
+ aPosFT (this, SW_RES( FT_POS )),
+ aPosPageBox (this, SW_RES( RB_POS_PAGE )),
+ aPosChapterBox (this, SW_RES( RB_POS_CHAPTER)),
+
+ aTemplFL (this, SW_RES( FL_TEMPL )),
+ aParaTemplLbl (this, SW_RES( FT_PARA_TEMPL)),
+ aParaTemplBox (this, SW_RES( LB_PARA_TEMPL)),
+ aPageTemplLbl (this, SW_RES( FT_PAGE_TEMPL)),
+ aPageTemplBox (this, SW_RES( LB_PAGE_TEMPL)),
+
+ aCharTemplFL( this, SW_RES(FL_CHAR_TEMPL)),
+ aFtnCharAnchorTemplLbl( this, SW_RES( FT_ANCHR_CHARFMT)),
+ aFtnCharAnchorTemplBox( this, SW_RES( LB_ANCHR_CHARFMT)),
+ aFtnCharTextTemplLbl( this, SW_RES( FT_TEXT_CHARFMT)),
+ aFtnCharTextTemplBox( this, SW_RES( LB_TEXT_CHARFMT)),
+
+ aContFL (this, SW_RES( FL_CONT )),
+ aContLbl (this, SW_RES( FT_CONT )),
+ aContEdit (this, SW_RES( ED_CONT )),
+ aContFromLbl (this, SW_RES( FT_CONT_FROM )),
+ aContFromEdit (this, SW_RES( ED_CONT_FROM )),
+
+ aNumDoc(aNumCountBox.GetEntry(FTNNUM_DOC)),
+ aNumPage(aNumCountBox.GetEntry(FTNNUM_PAGE)),
+ aNumChapter(aNumCountBox.GetEntry(FTNNUM_CHAPTER)),
+ pSh( 0 ),
+ bPosDoc(sal_False),
+ bEndNote( bEN )
+{
+ FreeResource();
+
+ aPosPageBox.SetClickHdl(LINK(this, SwEndNoteOptionPage, PosPageHdl));
+ aPosChapterBox.SetClickHdl(LINK(this, SwEndNoteOptionPage, PosChapterHdl));
+ aNumCountBox.SetSelectHdl(LINK(this, SwEndNoteOptionPage, NumCountHdl));
+
+ aPosPageBox.SetAccessibleRelationMemberOf(&aPosFT);
+ aPosChapterBox.SetAccessibleRelationMemberOf(&aPosFT);
+}
+
+void SwEndNoteOptionPage::Reset( const SfxItemSet& )
+{
+ SwEndNoteInfo *pInf = bEndNote ? new SwEndNoteInfo( pSh->GetEndNoteInfo() )
+ : new SwFtnInfo( pSh->GetFtnInfo() );
+ SfxObjectShell * pDocSh = SfxObjectShell::Current();
+ sal_uInt16 i;
+
+ if(PTR_CAST(SwWebDocShell, pDocSh))
+ {
+ aParaTemplLbl .Hide();
+ aParaTemplBox .Hide();
+ aPageTemplLbl .Hide();
+ aPageTemplBox .Hide();
+ aFtnCharTextTemplLbl.Hide();
+ aFtnCharTextTemplBox.Hide();
+ aFtnCharAnchorTemplLbl.Hide();
+ aFtnCharAnchorTemplBox.Hide();
+ aCharTemplFL .Hide();
+ aTemplFL .Hide();
+ }
+ if ( bEndNote )
+ {
+ aPosPageBox.Hide();
+ aPosChapterBox.Hide();
+ aNumCountBox.Hide();
+ aContLbl.Hide();
+ aContEdit.Hide();
+ aContFromLbl.Hide();
+ aContFromEdit.Hide();
+ aContFL.Hide();
+ bPosDoc = sal_True;
+ }
+ else
+ {
+ const SwFtnInfo &rInf = pSh->GetFtnInfo();
+ // Position (Seite, Kapitel) setzen
+ if ( rInf.ePos == FTNPOS_PAGE )
+ {
+ aPosPageBox.Check();
+ aPageTemplLbl.Enable(sal_False);
+ aPageTemplBox.Enable(sal_False);
+ }
+ else // if ( rInf.ePos == FTNPOS_CHAPTER )
+ {
+ aPosChapterBox.Check();
+ aNumCountBox.RemoveEntry(aNumPage);
+ aNumCountBox.RemoveEntry(aNumChapter);
+ bPosDoc = sal_True;
+ }
+ // Verweistexte
+ aContEdit.SetText(rInf.aQuoVadis);
+ aContFromEdit.SetText(rInf.aErgoSum);
+
+ // gesammelt wo
+ SelectNumbering(rInf.eNum);
+ }
+
+ // Numerierung
+ // Art
+ aNumViewBox.SelectNumberingType( pInf->aFmt.GetNumberingType());
+ aOffsetFld.SetValue(pInf->nFtnOffset + 1);
+ aPrefixED.SetText(pInf->GetPrefix());
+ aSuffixED.SetText(pInf->GetSuffix());
+
+ const SwCharFmt* pCharFmt = pInf->GetCharFmt(
+ *pSh->GetView().GetDocShell()->GetDoc());
+ aFtnCharTextTemplBox.SelectEntry(pCharFmt->GetName());
+ aFtnCharTextTemplBox.SaveValue();
+
+ pCharFmt = pInf->GetAnchorCharFmt( *pSh->GetDoc() );
+ aFtnCharAnchorTemplBox.SelectEntry( pCharFmt->GetName() );
+ aFtnCharAnchorTemplBox.SaveValue();
+
+ // Vorlagen - Sonderbereiche
+ // Absatz
+ SfxStyleSheetBasePool* pStyleSheetPool = pSh->GetView().GetDocShell()->GetStyleSheetPool();
+ pStyleSheetPool->SetSearchMask(SFX_STYLE_FAMILY_PARA, SWSTYLEBIT_EXTRA);
+ SfxStyleSheetBase *pStyle = pStyleSheetPool->First();
+ while(pStyle)
+ {
+ aParaTemplBox.InsertEntry(pStyle->GetName());
+ pStyle = pStyleSheetPool->Next();
+ }
+
+ String sStr;
+ SwStyleNameMapper::FillUIName( static_cast< sal_uInt16 >(bEndNote ? RES_POOLCOLL_ENDNOTE
+ : RES_POOLCOLL_FOOTNOTE), sStr );
+ if(LISTBOX_ENTRY_NOTFOUND == aParaTemplBox.GetEntryPos( sStr ) )
+ aParaTemplBox.InsertEntry( sStr );
+
+ SwTxtFmtColl* pColl = pInf->GetFtnTxtColl();
+ if( !pColl )
+ aParaTemplBox.SelectEntry( sStr ); // Default
+ else
+ {
+ ASSERT(!pColl->IsDefault(), "Defaultvorlage fuer Fussnoten ist falsch.");
+ const sal_uInt16 nPos = aParaTemplBox.GetEntryPos(pColl->GetName());
+ if( LISTBOX_ENTRY_NOTFOUND != nPos )
+ aParaTemplBox.SelectEntryPos( nPos );
+ else
+ {
+ aParaTemplBox.InsertEntry(pColl->GetName());
+ aParaTemplBox.SelectEntry(pColl->GetName());
+ }
+ }
+
+ // Seite
+ for( i = RES_POOLPAGE_BEGIN; i < RES_POOLPAGE_END; ++i )
+ aPageTemplBox.InsertEntry(SwStyleNameMapper::GetUIName( i, aEmptyStr ));
+
+ sal_uInt16 nCount = pSh->GetPageDescCnt();
+ for(i = 0; i < nCount; ++i)
+ {
+ const SwPageDesc &rPageDesc = pSh->GetPageDesc(i);
+ if(LISTBOX_ENTRY_NOTFOUND == aPageTemplBox.GetEntryPos(rPageDesc.GetName()))
+ aPageTemplBox.InsertEntry(rPageDesc.GetName());
+ }
+
+ aPageTemplBox.SelectEntry( pInf->GetPageDesc( *pSh->GetDoc() )->GetName());
+ delete pInf;
+}
+
+SwEndNoteOptionPage::~SwEndNoteOptionPage()
+{
+}
+
+SfxTabPage *SwEndNoteOptionPage::Create( Window *pParent, const SfxItemSet &rSet )
+{
+ return new SwEndNoteOptionPage( pParent, sal_True, rSet );
+}
+
+/*------------------------------------------------------------------------
+ Beschreibung: Unterschiedliche Arten der Numerierung; da die Listbox
+ unterschiedlich viele Eintraege hat, hier Funktionen
+ fuer das Setzen und Erfragen der gemeinten Art
+ der Numerierung.
+------------------------------------------------------------------------*/
+void SwEndNoteOptionPage::SelectNumbering(int eNum)
+{
+ String sSelect;
+ switch(eNum)
+ {
+ case FTNNUM_DOC:
+ sSelect = aNumDoc;
+ break;
+ case FTNNUM_PAGE:
+ sSelect = aNumPage;
+ break;
+ case FTNNUM_CHAPTER:
+ sSelect = aNumChapter;
+ break;
+#ifdef DBG_UTIL
+ default:
+ DBG_ERROR("Which numbering type?");
+#endif
+ }
+ aNumCountBox.SelectEntry(sSelect);
+ NumCountHdl( &aNumCountBox );
+}
+
+
+
+int SwEndNoteOptionPage::GetNumbering() const
+{
+ const sal_uInt16 nPos = aNumCountBox.GetSelectEntryPos();
+ return (int) bPosDoc? nPos + 1: nPos;
+}
+
+/*-----------------09.02.98 11:17-------------------
+
+--------------------------------------------------*/
+void SwEndNoteOptionPage::SetShell( SwWrtShell &rShell )
+{
+ pSh = &rShell;
+ // Zeichenvorlagen sammeln
+ aFtnCharTextTemplBox.Clear();
+ aFtnCharAnchorTemplBox.Clear();
+ ::FillCharStyleListBox(aFtnCharTextTemplBox,
+ pSh->GetView().GetDocShell());
+
+ ::FillCharStyleListBox(aFtnCharAnchorTemplBox,
+ pSh->GetView().GetDocShell());
+}
+
+/*------------------------------------------------------------------------
+ Beschreibung: Handler hinter dem Button fuer Sammeln der Fussnote
+ auf der Seite.
+ In diesem Fall koennen alle Numerierungsarten verwendet
+ werden.
+------------------------------------------------------------------------*/
+
+
+IMPL_LINK( SwEndNoteOptionPage, PosPageHdl, Button *, EMPTYARG )
+{
+ const SwFtnNum eNum = (const SwFtnNum)GetNumbering();
+ bPosDoc = sal_False;
+ if(LISTBOX_ENTRY_NOTFOUND == aNumCountBox.GetEntryPos(aNumPage))
+ {
+ aNumCountBox.InsertEntry(aNumPage, FTNNUM_PAGE);
+ aNumCountBox.InsertEntry(aNumChapter, FTNNUM_CHAPTER);
+ SelectNumbering(eNum);
+ }
+ aPageTemplLbl.Enable(sal_False);
+ aPageTemplBox.Enable(sal_False);
+
+ return 0;
+}
+
+/*------------------------------------------------------------------------
+ Beschreibung:
+------------------------------------------------------------------------*/
+
+
+IMPL_LINK( SwEndNoteOptionPage, NumCountHdl, ListBox*, EMPTYARG )
+{
+ sal_Bool bEnable = sal_True;
+ if( aNumCountBox.GetEntryCount() - 1 != aNumCountBox.GetSelectEntryPos() )
+ {
+ bEnable = sal_False;
+ aOffsetFld.SetValue(1);
+ }
+ aOffsetLbl.Enable(bEnable);
+ aOffsetFld.Enable(bEnable);
+ return 0;
+}
+
+/*------------------------------------------------------------------------
+ Beschreibung: Handler hinter dem Button fuer Sammeln der Fussnote
+ am Kapitel oder Dokumentende.
+ In diesem Fall kann keine seitenweise Numerierung verwendet
+ werden.
+------------------------------------------------------------------------*/
+
+
+IMPL_LINK_INLINE_START( SwEndNoteOptionPage, PosChapterHdl, Button *, EMPTYARG )
+{
+ if ( !bPosDoc )
+ SelectNumbering(FTNNUM_DOC);
+
+ bPosDoc = sal_True;
+ aNumCountBox.RemoveEntry(aNumPage);
+ aNumCountBox.RemoveEntry(aNumChapter);
+ aPageTemplLbl.Enable();
+ aPageTemplBox.Enable();
+ return 0;
+}
+IMPL_LINK_INLINE_END( SwEndNoteOptionPage, PosChapterHdl, Button *, EMPTYARG )
+
+SwCharFmt* lcl_GetCharFormat( SwWrtShell* pSh, const String& rCharFmtName )
+{
+ SwCharFmt* pFmt = 0;
+ sal_uInt16 nChCount = pSh->GetCharFmtCount();
+ for(sal_uInt16 i = 0; i< nChCount; i++)
+ {
+ SwCharFmt& rChFmt = pSh->GetCharFmt(i);
+ if(rChFmt.GetName() == rCharFmtName )
+ {
+ pFmt = &rChFmt;
+ break;
+ }
+ }
+ if(!pFmt)
+ {
+ SfxStyleSheetBasePool* pPool = pSh->GetView().GetDocShell()->GetStyleSheetPool();
+ SfxStyleSheetBase* pBase;
+ pBase = pPool->Find(rCharFmtName, SFX_STYLE_FAMILY_CHAR);
+ if(!pBase)
+ pBase = &pPool->Make(rCharFmtName, SFX_STYLE_FAMILY_CHAR);
+ pFmt = ((SwDocStyleSheet*)pBase)->GetCharFmt();
+ }
+ return pFmt;
+}
+
+sal_Bool SwEndNoteOptionPage::FillItemSet( SfxItemSet & )
+{
+ SwEndNoteInfo *pInf = bEndNote ? new SwEndNoteInfo() : new SwFtnInfo();
+
+ pInf->nFtnOffset = static_cast< sal_uInt16 >(aOffsetFld.GetValue() -1);
+ pInf->aFmt.SetNumberingType(aNumViewBox.GetSelectedNumberingType() );
+ pInf->SetPrefix(aPrefixED.GetText());
+ pInf->SetSuffix(aSuffixED.GetText());
+
+ pInf->SetCharFmt( lcl_GetCharFormat( pSh,
+ aFtnCharTextTemplBox.GetSelectEntry() ) );
+ pInf->SetAnchorCharFmt( lcl_GetCharFormat( pSh,
+ aFtnCharAnchorTemplBox.GetSelectEntry() ) );
+
+ // Absatzvorlage
+ sal_uInt16 nPos = aParaTemplBox.GetSelectEntryPos();
+ if(LISTBOX_ENTRY_NOTFOUND != nPos)
+ {
+ const String aFmtName( aParaTemplBox.GetSelectEntry() );
+ SwTxtFmtColl *pColl = pSh->GetParaStyle(aFmtName, SwWrtShell::GETSTYLE_CREATEANY);
+ ASSERT(pColl, "Absatzvorlage nicht gefunden.");
+ pInf->SetFtnTxtColl(*pColl);
+ }
+
+ // Seitenvorlage
+ pInf->ChgPageDesc( pSh->FindPageDescByName(
+ aPageTemplBox.GetSelectEntry(), sal_True ) );
+
+ if ( bEndNote )
+ {
+ if ( !(*pInf == pSh->GetEndNoteInfo()) )
+ pSh->SetEndNoteInfo( *pInf );
+ }
+ else
+ {
+ SwFtnInfo *pI = (SwFtnInfo*)pInf;
+ pI->ePos = aPosPageBox.IsChecked() ? FTNPOS_PAGE : FTNPOS_CHAPTER;
+ pI->eNum = (SwFtnNum)GetNumbering();
+ pI->aQuoVadis = aContEdit.GetText();
+ pI->aErgoSum = aContFromEdit.GetText();
+ if ( !(*pI == pSh->GetFtnInfo()) )
+ pSh->SetFtnInfo( *pI );
+ }
+ delete pInf;
+ return sal_True;
+}
+
+SwFootNoteOptionPage::SwFootNoteOptionPage( Window *pParent, const SfxItemSet &rSet ) :
+ SwEndNoteOptionPage( pParent, sal_False, rSet )
+{
+}
+
+SwFootNoteOptionPage::~SwFootNoteOptionPage()
+{
+}
+
+SfxTabPage *SwFootNoteOptionPage::Create(Window *pParent, const SfxItemSet &rSet )
+{
+ return new SwFootNoteOptionPage( pParent, rSet );
+}
+
+
+
+
+
+
+