[Libreoffice-commits] .: sw/inc sw/sdi sw/source sw/uiconfig sw/util

Caolán McNamara caolan at kemper.freedesktop.org
Mon Oct 18 06:54:45 PDT 2010


 sw/inc/cmdid.h                          |    2 
 sw/inc/globals.hrc                      |    5 
 sw/inc/helpid.h                         |    1 
 sw/inc/rcid.hrc                         |    2 
 sw/inc/swabstdlg.hxx                    |    1 
 sw/sdi/_basesh.sdi                      |    6 
 sw/sdi/swriter.sdi                      |   25 ++
 sw/source/ui/dialog/swdlgfact.cxx       |    9 
 sw/source/ui/dialog/swdlgfact.hxx       |    1 
 sw/source/ui/inc/swmn_tmpl.hrc          |    7 
 sw/source/ui/inc/titlepage.hxx          |   99 ++++++++
 sw/source/ui/misc/makefile.mk           |    4 
 sw/source/ui/misc/titlepage.cxx         |  363 ++++++++++++++++++++++++++++++++
 sw/source/ui/misc/titlepage.hrc         |   50 ++++
 sw/source/ui/misc/titlepage.src         |  248 +++++++++++++++++++++
 sw/source/ui/shells/basesh.cxx          |    8 
 sw/uiconfig/swriter/menubar/menubar.xml |    1 
 sw/util/makefile.mk                     |    1 
 18 files changed, 829 insertions(+), 4 deletions(-)

New commits:
commit 293edc6cdb4cb302920731287b98d3eac4194b16
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Mon Oct 18 14:01:21 2010 +0100

    #i7065# add Title Page dialog

diff --git a/sw/inc/cmdid.h b/sw/inc/cmdid.h
index 894d622..cd9df50 100644
--- a/sw/inc/cmdid.h
+++ b/sw/inc/cmdid.h
@@ -533,6 +533,8 @@ Achtung: Ab sofort sind in diesem File keine C++-Kommentare (//) mehr
 
 #define FN_SET_PAGE_STYLE			(FN_FORMAT + 93)  /* Anwenden Seitenv. */
 
+#define FN_FORMAT_TITLEPAGE_DLG		(FN_FORMAT + 98)  /* Title Page */
+
 
 #define FN_TABLE_REP                (FN_FORMAT + 99)  /* TableRepresentation */
 #define FN_CONVERT_TEXT_TABLE		(FN_FORMAT + 100)  /* Konvertierung Text <-> Tabelle */
diff --git a/sw/inc/globals.hrc b/sw/inc/globals.hrc
index 39b7b7f..984bac6 100644
--- a/sw/inc/globals.hrc
+++ b/sw/inc/globals.hrc
@@ -275,7 +275,9 @@
 #define TP_SECTION_INDENTS          (RC_GLOBALS_BEGIN +  102)
 #define TP_OPTCOMPATIBILITY_PAGE	(RC_GLOBALS_BEGIN +  103)
 #define TP_MAILCONFIG               (RC_GLOBALS_BEGIN +  104)
-//maximum: RC_GLOBALS_BEGIN +  119
+#define TP_TITLEPAGE                (RC_GLOBALS_BEGIN +  105)
+//maximum: RC_GLOBALS_BEGIN +  120
+
 
 #if STR_DOC_STAT > RC_GLOBALS_END
 #error Resource-Id Ueberlauf in #file, #line
@@ -287,4 +289,5 @@
 #define SID_WRT_SHELL               (RC_GLOBALS_BEGIN +  117)
 
 #define DLG_LINE_NUMBERING          (RC_GLOBALS_BEGIN +  118)
+#define DLG_TITLEPAGE               (RC_GLOBALS_BEGIN +  119)
 #endif // _GLOBALS_HRC
diff --git a/sw/inc/helpid.h b/sw/inc/helpid.h
index 0ff576a..a021ee4 100644
--- a/sw/inc/helpid.h
+++ b/sw/inc/helpid.h
@@ -981,3 +981,4 @@
 #define HID_MM_HEADER_12                            (HID_BASE + 2279)
 #define HID_MM_HEADER_13                            (HID_BASE + 2280)
 
+#define HID_TITLEPAGE 						  		(HID_BASE + 2281)
diff --git a/sw/inc/rcid.hrc b/sw/inc/rcid.hrc
index e5cd3e1..f5fe008 100644
--- a/sw/inc/rcid.hrc
+++ b/sw/inc/rcid.hrc
@@ -130,7 +130,7 @@
 
 // globale Ressourcen
 #define RC_GLOBALS_BEGIN        	RC_GLOBALS
-#define RC_GLOBALS_END          	(RC_GLOBALS_BEGIN + 119)
+#define RC_GLOBALS_END          	(RC_GLOBALS_BEGIN + 120)
 
 // Format-Vorlagen
 #define RC_FMTUI_BEGIN          	RC_FMTUI
diff --git a/sw/inc/swabstdlg.hxx b/sw/inc/swabstdlg.hxx
index a9293a8..57609db 100644
--- a/sw/inc/swabstdlg.hxx
+++ b/sw/inc/swabstdlg.hxx
@@ -434,6 +434,7 @@ public:
                                                 SwField* pField, BOOL bNextButton = FALSE ) = 0; //add for SwFldInputDlg
     virtual AbstractInsFootNoteDlg*		CreateInsFootNoteDlg( int nResId,
                                                 Window * pParent, SwWrtShell &rSh, BOOL bEd = FALSE) = 0; //add for SwInsFootNoteDlg
+    virtual VclAbstractDialog*          CreateTitlePageDlg ( Window * pParent ) = 0;
     virtual VclAbstractDialog *			CreateVclSwViewDialog( int nResId,
                                                 SwView& rView, BOOL bCol = FALSE ) = 0; //add for SwInsRowColDlg, SwLineNumberingDlg
     virtual AbstractInsertGrfRulerDlg*		CreateInsertGrfRulerDlg( int nResId,
diff --git a/sw/sdi/_basesh.sdi b/sw/sdi/_basesh.sdi
index 23ec6b0..9ee0c71 100644
--- a/sw/sdi/_basesh.sdi
+++ b/sw/sdi/_basesh.sdi
@@ -247,6 +247,12 @@ interface BaseTextSelection
         DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
     ]
 
+    FN_FORMAT_TITLEPAGE_DLG  // status(final|play)
+    [
+        ExecMethod = ExecDlg ;
+        DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
+    ]
+
     FN_FORMAT_PAGE_COLUMN_DLG  // status(final|play)
     [
         ExecMethod = ExecDlg ;
diff --git a/sw/sdi/swriter.sdi b/sw/sdi/swriter.sdi
index aae7ec7..5863907 100644
--- a/sw/sdi/swriter.sdi
+++ b/sw/sdi/swriter.sdi
@@ -6329,6 +6329,31 @@ SfxVoidItem PageDialog FN_FORMAT_PAGE_DLG
 ]
 
 //--------------------------------------------------------------------------
+SfxVoidItem TitlePageDialog FN_FORMAT_TITLEPAGE_DLG
+()
+[
+    /* flags: */
+    AutoUpdate = FALSE,
+    Cachable = Cachable,
+    FastCall = FALSE,
+    HasCoreId = FALSE,
+    HasDialog = TRUE,
+    ReadOnlyDoc = FALSE,
+    Toggle = FALSE,
+    Container = FALSE,
+    RecordAbsolute = FALSE,
+    RecordPerItem;
+    Asynchron;
+
+    /* config: */
+    AccelConfig = TRUE,
+    MenuConfig = TRUE,
+    StatusBarConfig = FALSE,
+    ToolBoxConfig = TRUE,
+    GroupId = GID_FORMAT;
+]
+
+//--------------------------------------------------------------------------
 SfxVoidItem PageDown FN_PAGEDOWN
 ()
 [
diff --git a/sw/source/ui/dialog/swdlgfact.cxx b/sw/source/ui/dialog/swdlgfact.cxx
index 428f392..0247680 100644
--- a/sw/source/ui/dialog/swdlgfact.cxx
+++ b/sw/source/ui/dialog/swdlgfact.cxx
@@ -93,6 +93,7 @@
 #include <instable.hxx> //add for SwInsTableDlg
 #include <javaedit.hxx> //add for SwJavaEditDialog
 #include <linenum.hxx> //add for SwLineNumberingDlg
+#include <titlepage.hxx> //add for SwTitlePageDlg
 #include <mailmrge.hxx> //add for SwMailMergeDlg, SwMailMergeCreateFromDlg, SwMailMergeFieldConnectionsDlg
 #include <mergetbl.hxx> //add for SwMergeTblDlg
 #include <multmrk.hxx> //add for SwMultiTOXMarkDlg
@@ -1267,6 +1268,14 @@ AbstractInsFootNoteDlg* SwAbstractDialogFactory_Impl::CreateInsFootNoteDlg( int
     return 0;
 }
 
+VclAbstractDialog * SwAbstractDialogFactory_Impl::CreateTitlePageDlg ( Window *pParent )
+{
+    Dialog* pDlg = new SwTitlePageDlg( pParent );
+    if ( pDlg )
+        return new VclAbstractDialog_Impl( pDlg );
+    return 0;
+}
+
 VclAbstractDialog * SwAbstractDialogFactory_Impl::CreateVclSwViewDialog( int nResId, 
                                             SwView& rView, BOOL /*bCol*/ ) //add for SwInsRowColDlg, SwLineNumberingDlg
 {
diff --git a/sw/source/ui/dialog/swdlgfact.hxx b/sw/source/ui/dialog/swdlgfact.hxx
index 6d9b13b..8646231 100644
--- a/sw/source/ui/dialog/swdlgfact.hxx
+++ b/sw/source/ui/dialog/swdlgfact.hxx
@@ -515,6 +515,7 @@ public:
                                                 SwField* pField, BOOL bNextButton = FALSE ); //add for SwFldInputDlg
     virtual AbstractInsFootNoteDlg*		CreateInsFootNoteDlg( int nResId,
                                                 Window * pParent, SwWrtShell &rSh, BOOL bEd = FALSE); //add for SwInsFootNoteDlg
+   virtual VclAbstractDialog *         CreateTitlePageDlg ( Window * pParent );
     virtual VclAbstractDialog *			CreateVclSwViewDialog( int nResId, 
                                                 SwView& rView, BOOL bCol = FALSE ); //add for SwInsRowColDlg, SwLineNumberingDlg
     virtual AbstractInsertGrfRulerDlg*		CreateInsertGrfRulerDlg( int nResId,
diff --git a/sw/source/ui/inc/swmn_tmpl.hrc b/sw/source/ui/inc/swmn_tmpl.hrc
index 631f4a8..697617a 100644
--- a/sw/source/ui/inc/swmn_tmpl.hrc
+++ b/sw/source/ui/inc/swmn_tmpl.hrc
@@ -58,9 +58,14 @@
         Identifier = FN_FORMAT_PAGE_DLG ; \
         HelpID = FN_FORMAT_PAGE_DLG ; \
         Text [ en-US ] = "Pa~ge..." ; \
+    };\
+    MenuItem\
+    {\
+        Identifier = FN_FORMAT_TITLEPAGE_DLG ; \
+        HelpID = FN_FORMAT_TITLEPAGE_DLG ; \
+        Text [ en-US ] = "~Title Page..." ; \
     };
 
-
 #define MN_TEXT_ATTR\
     MenuItem\
     {\
diff --git a/sw/source/ui/inc/titlepage.hxx b/sw/source/ui/inc/titlepage.hxx
new file mode 100644
index 0000000..f72ee66
--- /dev/null
+++ b/sw/source/ui/inc/titlepage.hxx
@@ -0,0 +1,99 @@
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public 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.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Initial Developer of the Original Code is
+ *        Caolán McNamara <caolanm at redhat.com> (Red Hat, Inc.)
+ * Portions created by the Initial Developer are Copyright (C) 2010 the
+ * Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s): Caolán McNamara <caolanm at redhat.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+#ifndef _SWTITLEPAGE_HXX
+#define _SWTITLEPAGE_HXX
+
+#include <sfx2/basedlgs.hxx>
+#include <sfx2/tabdlg.hxx>
+#include <vcl/fixed.hxx>
+#include <vcl/field.hxx>
+#include <vcl/lstbox.hxx>
+#include <numberingtypelistbox.hxx>
+
+class Window;
+class SfxItemSet;
+class SwView;
+class SwWrtShell;
+class SwPageDesc;
+
+class SwTitlePageDlg : public SfxModalDialog
+{
+private:
+    FixedLine   aMakeInsertFL;
+    RadioButton aUseExistingPagesRB;
+    RadioButton aInsertNewPagesRB;
+    FixedText   aPageCountFT;
+    NumericField    aPageCountNF;
+    FixedText   aPagePagesFT;
+
+    FixedText   aPageStartFT;
+    RadioButton aDocumentStartRB;
+    RadioButton aPageStartRB;
+    NumericField    aPageStartNF;
+
+    FixedLine   aNumberingFL;
+    CheckBox    aRestartNumberingCB;
+    FixedText   aRestartNumberingFT;
+    NumericField    aRestartNumberingNF;
+    CheckBox    aSetPageNumberCB;
+    FixedText   aSetPageNumberFT;
+    NumericField    aSetPageNumberNF;
+
+    FixedLine   aPagePropertiesFL;
+    ListBox     aPagePropertiesLB;
+    PushButton  aPagePropertiesPB;
+
+    FixedLine   aBottomFL;
+    OKButton    aOkPB;
+    CancelButton    aCancelPB;
+    HelpButton  aHelpPB;
+
+    SwWrtShell *mpSh;
+
+    const SwFmtPageDesc *mpPageFmtDesc;
+
+    SwPageDesc *mpTitleDesc;
+    const SwPageDesc *mpIndexDesc;
+    const SwPageDesc *mpNormalDesc;
+
+    void FillList();
+
+    USHORT GetInsertPosition() const;
+
+    DECL_LINK( OKHdl, Button * );
+    DECL_LINK( EditHdl, Button * );
+    DECL_LINK( RestartNumberingHdl, CheckBox* );
+    DECL_LINK( SetPageNumberHdl, CheckBox* );
+    DECL_LINK( UpHdl, NumericField * );
+    DECL_LINK( DownHdl, NumericField * );
+    DECL_LINK( StartPageHdl, RadioButton * );
+public:
+    SwTitlePageDlg( Window *pParent );
+    ~SwTitlePageDlg();
+};
+
+#endif
diff --git a/sw/source/ui/misc/makefile.mk b/sw/source/ui/misc/makefile.mk
index 72d9f80..d2ed28a 100644
--- a/sw/source/ui/misc/makefile.mk
+++ b/sw/source/ui/misc/makefile.mk
@@ -52,7 +52,8 @@ SRC1FILES=\
     pgfnote.src \
     pggrid.src \
     redlndlg.src \
-    srtdlg.src
+    srtdlg.src \
+    titlepage.src
 
 EXCEPTIONSFILES = \
         $(SLO)$/glossary.obj \
@@ -73,6 +74,7 @@ SLOFILES =	\
         $(SLO)$/insfnote.obj \
         $(SLO)$/insrule.obj \
         $(SLO)$/linenum.obj \
+        $(SLO)$/titlepage.obj \
         $(SLO)$/num.obj \
         $(SLO)$/numberingtypelistbox.obj \
         $(SLO)$/outline.obj \
diff --git a/sw/source/ui/misc/titlepage.cxx b/sw/source/ui/misc/titlepage.cxx
new file mode 100644
index 0000000..8c39bbb
--- /dev/null
+++ b/sw/source/ui/misc/titlepage.cxx
@@ -0,0 +1,363 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public 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.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Initial Developer of the Original Code is
+ *        Caolán McNamara <caolanm at redhat.com> (Red Hat, Inc.)
+ * Portions created by the Initial Developer are Copyright (C) 2010 the
+ * Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s): Caolán McNamara <caolanm at redhat.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sw.hxx"
+
+#ifdef SW_DLLIMPLEMENTATION
+#undef SW_DLLIMPLEMENTATION
+#endif
+
+#include <sfx2/viewfrm.hxx>
+#include <vcl/msgbox.hxx>
+#include <view.hxx>
+#include <swmodule.hxx>
+#include <wrtsh.hxx>
+#include <poolfmt.hxx>
+#include <docsh.hxx>
+#include <charfmt.hxx>
+#include <docstyle.hxx>
+
+#include "fldbas.hxx"
+#include "lineinfo.hxx"
+#include "globals.hrc"
+#include "titlepage.hrc"
+#include "titlepage.hxx"
+#include "uitool.hxx"
+#include "fmtpdsc.hxx"
+#include "pagedesc.hxx"
+
+#include <IDocumentStylePoolAccess.hxx>
+
+namespace
+{
+    bool lcl_GetPageDesc(SwWrtShell *pSh, USHORT &rPageNo, const SwFmtPageDesc **ppPageFmtDesc)
+    {
+        bool bRet = false;
+        SfxItemSet aSet( pSh->GetAttrPool(), RES_PAGEDESC, RES_PAGEDESC );
+        if (pSh->GetCurAttr( aSet ))
+        {
+            const SfxPoolItem* pItem(0);
+            if (SFX_ITEM_SET == aSet.GetItemState( RES_PAGEDESC, TRUE, &pItem ) && pItem)
+            {
+                rPageNo = ((const SwFmtPageDesc *)pItem)->GetNumOffset();
+                if (ppPageFmtDesc)
+                    (*ppPageFmtDesc) = (const SwFmtPageDesc *)(pItem->Clone());
+                bRet = true;
+            }
+        }
+        return bRet;
+    }
+
+    bool lcl_SkipNPages(SwWrtShell *pSh, USHORT nNoPages)
+    {
+        bool bAllOk = true;
+        for (USHORT nI = 0; nI < nNoPages && bAllOk; ++nI)
+            bAllOk = pSh->SttNxtPg();
+        return bAllOk;
+    }
+
+    void lcl_ChangePage(SwWrtShell *pSh, USHORT nNewNumber,
+        const SwPageDesc *pNewDesc)
+    {
+        const USHORT nCurIdx = pSh->GetCurPageDesc();
+        const SwPageDesc &rCurrentDesc = pSh->GetPageDesc( nCurIdx );
+
+        const SwFmtPageDesc *pPageFmtDesc(0);
+        USHORT nDontCare;
+        lcl_GetPageDesc(pSh, nDontCare, &pPageFmtDesc);
+
+        //If we want a new number then set it, otherwise reuse the existing one
+        USHORT nPgNo = nNewNumber ?
+            nNewNumber : ( pPageFmtDesc ? pPageFmtDesc->GetNumOffset() : 0 );
+
+        //If we want a new descriptior then set it, otherwise reuse the existing one
+        if (!pNewDesc)
+        {
+            SwFmtPageDesc aPageFmtDesc(pPageFmtDesc ? *pPageFmtDesc : &rCurrentDesc);
+            if (nPgNo) aPageFmtDesc.SetNumOffset(nPgNo);
+            pSh->SetAttr(aPageFmtDesc);
+        }
+        else
+        {
+            SwFmtPageDesc aPageFmtDesc(pNewDesc);
+            if (nPgNo) aPageFmtDesc.SetNumOffset(nPgNo);
+            pSh->SetAttr(aPageFmtDesc);
+        }
+
+        delete pPageFmtDesc;
+    }
+
+    void lcl_PushCursor(SwWrtShell *pSh)
+    {
+        pSh->LockView( TRUE );
+        pSh->StartAllAction();
+        pSh->SwCrsrShell::Push();
+    }
+
+    void lcl_PopCursor(SwWrtShell *pSh)
+    {
+        pSh->SwCrsrShell::Pop( FALSE );
+        pSh->EndAllAction();
+        pSh->LockView( FALSE );
+    }
+
+    USHORT lcl_GetCurrentPage(SwWrtShell *pSh)
+    {
+        String sDummy;
+        USHORT nPhyNum=1, nVirtNum=1;
+        pSh->GetPageNumber(0, true, nPhyNum, nVirtNum, sDummy);
+        return nPhyNum;
+    }
+}
+
+/*
+ * Only include the Index page in the list if the page count implies one
+ * to reduce confusing things
+ */
+void SwTitlePageDlg::FillList()
+{
+    USHORT nTitlePages = aPageCountNF.GetValue();
+    aPagePropertiesLB.Clear();
+    if (mpTitleDesc)
+        aPagePropertiesLB.InsertEntry(mpTitleDesc->GetName());
+    if (nTitlePages > 1 && mpIndexDesc)
+        aPagePropertiesLB.InsertEntry(mpIndexDesc->GetName());
+    if (mpNormalDesc)
+        aPagePropertiesLB.InsertEntry(mpNormalDesc->GetName());
+    aPagePropertiesLB.SelectEntryPos(0);
+}
+
+USHORT SwTitlePageDlg::GetInsertPosition() const
+{
+    USHORT nPage = 1;
+    if (aPageStartNF.IsEnabled())
+        nPage = aPageStartNF.GetValue();
+    return nPage;
+}
+
+SwTitlePageDlg::SwTitlePageDlg( Window *pParent ) :
+    SfxModalDialog( pParent, SW_RES(DLG_TITLEPAGE) ),
+#pragma warning (disable : 4355)
+    aMakeInsertFL       ( this, SW_RES( FL_MAKEINSERT )),
+    aUseExistingPagesRB ( this, SW_RES( RB_USE_EXISTING_PAGES )),
+    aInsertNewPagesRB   ( this, SW_RES( RB_INSERT_NEW_PAGES )),
+    aPageCountFT        ( this, SW_RES( FT_PAGE_COUNT )),
+    aPageCountNF        ( this, SW_RES( NF_PAGE_COUNT )),
+    aPagePagesFT        ( this, SW_RES( FT_PAGE_PAGES )),
+    aPageStartFT        ( this, SW_RES( FT_PAGE_START )),
+    aDocumentStartRB    ( this, SW_RES( RB_DOCUMENT_START )),
+    aPageStartRB        ( this, SW_RES( RB_PAGE_START )),
+    aPageStartNF        ( this, SW_RES( NF_PAGE_START )),
+    aNumberingFL        ( this, SW_RES( FL_NUMBERING )),
+    aRestartNumberingCB ( this, SW_RES( CB_RESTART_NUMBERING )),
+    aRestartNumberingFT ( this, SW_RES( FT_RESTART_NUMBERING )),
+    aRestartNumberingNF ( this, SW_RES( NF_RESTART_NUMBERING )),
+    aSetPageNumberCB    ( this, SW_RES( CB_SET_PAGE_NUMBER )),
+    aSetPageNumberFT    ( this, SW_RES( FT_SET_PAGE_NUMBER )),
+    aSetPageNumberNF    ( this, SW_RES( NF_SET_PAGE_NUMBER )),
+    aPagePropertiesFL   ( this, SW_RES( FL_PAGE_PROPERTIES )),
+    aPagePropertiesLB   ( this, SW_RES( LB_PAGE_PROPERTIES )),
+    aPagePropertiesPB   ( this, SW_RES( PB_PAGE_PROPERTIES )),
+    aBottomFL           ( this, SW_RES( FL_BOTTOM )),
+    aOkPB               ( this, SW_RES( PB_OK )),
+    aCancelPB           ( this, SW_RES( PB_CANCEL )),
+    aHelpPB             ( this, SW_RES( PB_HELP )),
+    mpPageFmtDesc       (0)
+#pragma warning (default : 4355)
+{
+    FreeResource();
+
+    aOkPB.SetClickHdl(LINK(this, SwTitlePageDlg, OKHdl));
+    aRestartNumberingCB.SetClickHdl(LINK(this, SwTitlePageDlg, RestartNumberingHdl));
+    aSetPageNumberCB.SetClickHdl(LINK(this, SwTitlePageDlg, SetPageNumberHdl));
+
+    USHORT nSetPage = 1;
+    USHORT nResetPage = 1;
+    USHORT nTitlePages = 1;
+    mpSh = ::GetActiveView()->GetWrtShellPtr();
+    lcl_PushCursor(mpSh);
+
+    SwView& rView = mpSh->GetView();
+    rView.InvalidateRulerPos();
+
+    bool bMaybeResetNumbering = false;
+
+    mpTitleDesc = mpSh->GetPageDescFromPool(RES_POOLPAGE_FIRST);
+    mpIndexDesc = mpSh->GetPageDescFromPool(RES_POOLPAGE_REGISTER);
+    mpNormalDesc = mpSh->GetPageDescFromPool(RES_POOLPAGE_STANDARD);
+
+    mpSh->SttDoc();
+    if (lcl_GetPageDesc( mpSh, nSetPage, &mpPageFmtDesc ))
+    {
+        if (mpPageFmtDesc->GetPageDesc() == mpTitleDesc)
+        {
+            while (mpSh->SttNxtPg())
+            {
+                const USHORT nCurIdx = mpSh->GetCurPageDesc();
+                const SwPageDesc &rPageDesc = mpSh->GetPageDesc( nCurIdx );
+
+                if (mpIndexDesc != &rPageDesc)
+                {
+                    mpNormalDesc = &rPageDesc;
+                    bMaybeResetNumbering = lcl_GetPageDesc(mpSh, nResetPage, NULL);
+                    break;
+                }
+                ++nTitlePages;
+            }
+        }
+    }
+    lcl_PopCursor(mpSh);
+
+    aUseExistingPagesRB.Check();
+    aPageCountNF.SetValue(nTitlePages);
+    aPageCountNF.SetUpHdl(LINK(this, SwTitlePageDlg, UpHdl));
+    aPageCountNF.SetDownHdl(LINK(this, SwTitlePageDlg, DownHdl));
+
+    aDocumentStartRB.Check();
+    aPageStartNF.Enable(false);
+    aPageStartNF.SetValue(lcl_GetCurrentPage(mpSh));
+    Link aStartPageHdl = LINK(this, SwTitlePageDlg, StartPageHdl);
+    aDocumentStartRB.SetClickHdl(aStartPageHdl);
+    aPageStartRB.SetClickHdl(aStartPageHdl);
+
+    if (bMaybeResetNumbering && nResetPage > 0)
+    {
+        aRestartNumberingCB.Check();
+        aRestartNumberingNF.SetValue(nResetPage);
+    }
+    aRestartNumberingNF.Enable(aRestartNumberingCB.IsChecked());
+
+    aSetPageNumberNF.SetValue(nSetPage);
+    if (nSetPage > 1)
+        aSetPageNumberCB.Check();
+    aSetPageNumberNF.Enable(aSetPageNumberCB.IsChecked());
+
+    FillList();
+    aPagePropertiesPB.SetClickHdl(LINK(this, SwTitlePageDlg, EditHdl));
+}
+
+IMPL_LINK(SwTitlePageDlg, UpHdl, NumericField *, EMPTYARG)
+{
+    if (aPageCountNF.GetValue() == 2)
+        FillList();
+    return 0;
+}
+
+IMPL_LINK(SwTitlePageDlg, DownHdl, NumericField *, EMPTYARG)
+{
+    if (aPageCountNF.GetValue() == 1)
+        FillList();
+    return 0;
+}
+
+IMPL_LINK(SwTitlePageDlg, RestartNumberingHdl, CheckBox*, EMPTYARG)
+{
+    aRestartNumberingNF.Enable(aRestartNumberingCB.IsChecked());
+    return 0;
+}
+
+IMPL_LINK(SwTitlePageDlg, SetPageNumberHdl, CheckBox*, EMPTYARG)
+{
+    aSetPageNumberNF.Enable(aSetPageNumberCB.IsChecked());
+    return 0;
+}
+
+IMPL_LINK(SwTitlePageDlg, StartPageHdl, RadioButton*, EMPTYARG)
+{
+    aPageStartNF.Enable(aPageStartRB.IsChecked());
+    return 0;
+}
+
+__EXPORT SwTitlePageDlg::~SwTitlePageDlg()
+{
+    delete mpPageFmtDesc;
+}
+
+IMPL_LINK( SwTitlePageDlg, EditHdl, Button *, /*pBtn*/ )
+{
+    SwView& rView = mpSh->GetView();
+    rView.GetDocShell()->FormatPage(aPagePropertiesLB.GetSelectEntry(), false, mpSh);
+    rView.InvalidateRulerPos();
+
+    return 0;
+}
+
+IMPL_LINK( SwTitlePageDlg, OKHdl, Button *, /*pBtn*/ )
+{
+    lcl_PushCursor(mpSh);
+
+    mpSh->StartUndo();
+
+    SwFmtPageDesc aTitleDesc(mpTitleDesc);
+
+    if (aSetPageNumberCB.IsChecked())
+        aTitleDesc.SetNumOffset(aSetPageNumberNF.GetValue());
+    else if (mpPageFmtDesc)
+        aTitleDesc.SetNumOffset(mpPageFmtDesc->GetNumOffset());
+
+    USHORT nNoPages = aPageCountNF.GetValue();
+    if (!aUseExistingPagesRB.IsChecked())
+    {
+        mpSh->GotoPage(GetInsertPosition(), false);
+        for (USHORT nI=0; nI < nNoPages; ++nI)
+            mpSh->InsertPageBreak();
+    }
+
+    mpSh->GotoPage(GetInsertPosition(), false);
+    for (USHORT nI=1; nI < nNoPages; ++nI)
+    {
+        if (mpSh->SttNxtPg())
+            lcl_ChangePage(mpSh, 0, mpIndexDesc);
+    }
+
+    mpSh->GotoPage(GetInsertPosition(), false);
+    mpSh->SetAttr(aTitleDesc);
+
+    if (nNoPages > 1 && mpSh->GotoPage(GetInsertPosition() + nNoPages, false))
+    {
+        SwFmtPageDesc aPageFmtDesc(mpNormalDesc);
+        mpSh->SetAttr(aPageFmtDesc);
+    }
+
+    if (aRestartNumberingCB.IsChecked() || nNoPages > 1)
+    {
+        USHORT nPgNo = aRestartNumberingCB.IsChecked() ? aRestartNumberingNF.GetValue() : 0;
+        const SwPageDesc *pNewDesc = nNoPages > 1 ? mpNormalDesc : 0;
+        mpSh->GotoPage(GetInsertPosition() + nNoPages, false);
+        lcl_ChangePage(mpSh, nPgNo, pNewDesc);
+    }
+
+    mpSh->EndUndo();
+    lcl_PopCursor(mpSh);
+    if (!aUseExistingPagesRB.IsChecked())
+        mpSh->GotoPage(GetInsertPosition(), false);
+    EndDialog( RET_OK );
+    return 0;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/ui/misc/titlepage.hrc b/sw/source/ui/misc/titlepage.hrc
new file mode 100644
index 0000000..6367842
--- /dev/null
+++ b/sw/source/ui/misc/titlepage.hrc
@@ -0,0 +1,50 @@
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public 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.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Initial Developer of the Original Code is
+ *        Caolán McNamara <caolanm at redhat.com> (Red Hat, Inc.)
+ * Portions created by the Initial Developer are Copyright (C) 2010 the
+ * Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s): Caolán McNamara <caolanm at redhat.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+#define FL_MAKEINSERT         1
+#define RB_USE_EXISTING_PAGES 2
+#define RB_INSERT_NEW_PAGES   3
+#define FT_PAGE_COUNT         4
+#define NF_PAGE_COUNT         5
+#define FT_PAGE_PAGES         6
+#define FT_PAGE_START         7
+#define RB_DOCUMENT_START     8
+#define RB_PAGE_START         9
+#define NF_PAGE_START        10
+#define FL_NUMBERING         11
+#define CB_RESTART_NUMBERING 12
+#define FT_RESTART_NUMBERING 13
+#define NF_RESTART_NUMBERING 14
+#define CB_SET_PAGE_NUMBER   15
+#define FT_SET_PAGE_NUMBER   16
+#define NF_SET_PAGE_NUMBER   17
+#define FL_PAGE_PROPERTIES   18
+#define LB_PAGE_PROPERTIES   19
+#define PB_PAGE_PROPERTIES   20
+#define FL_BOTTOM            21
+#define PB_OK                22
+#define PB_CANCEL            23
+#define PB_HELP              24
diff --git a/sw/source/ui/misc/titlepage.src b/sw/source/ui/misc/titlepage.src
new file mode 100644
index 0000000..57b9075
--- /dev/null
+++ b/sw/source/ui/misc/titlepage.src
@@ -0,0 +1,248 @@
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public 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.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Initial Developer of the Original Code is
+ *        Caolán McNamara <caolanm at redhat.com> (Red Hat, Inc.)
+ * Portions created by the Initial Developer are Copyright (C) 2010 the
+ * Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s): Caolán McNamara <caolanm at redhat.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+/* StarView ressource file */
+
+#include <sfx2/sfx.hrc>
+#include <svx/dialogs.hrc>
+#include "globals.hrc"
+#include "misc.hrc"
+#include "titlepage.hrc"
+#include "helpid.h"
+/**************************************************************************/
+/*                                                                        */
+/**************************************************************************/
+ModalDialog DLG_TITLEPAGE
+{
+    HelpID = HID_TITLEPAGE ;
+    OutputSize = TRUE ;
+    SVLook = TRUE ;
+    Size = MAP_APPFONT ( 216 , 201 ) ;
+    Text [ en-US ] = "Title Pages" ;
+    Moveable = TRUE ;
+
+    FixedLine FL_MAKEINSERT
+    {
+        Pos = MAP_APPFONT ( 6 , 5 ) ;
+        Size = MAP_APPFONT ( 204 , 8 ) ;
+        Text [ en-US ] = "Make Title Pages" ;
+        Text [ x-comment ] = " ";
+    };
+    RadioButton RB_USE_EXISTING_PAGES
+    {
+        Pos = MAP_APPFONT ( 12 , 18 ) ;
+        Size = MAP_APPFONT ( 150 , 10 ) ;
+        Text [ en-US ] = "Convert existing pages to title pages" ;
+        TabStop = TRUE ;
+        Check = TRUE ;
+        Text [ x-comment ] = " ";
+    };
+    RadioButton RB_INSERT_NEW_PAGES
+    {
+        Pos = MAP_APPFONT ( 12 , 34 ) ;
+        Size = MAP_APPFONT ( 150 , 10 ) ;
+        Text [ en-US ] = "Insert new title pages" ;
+        Text [ x-comment ] = " ";
+    };
+    FixedText FT_PAGE_COUNT
+    {
+        Pos = MAP_APPFONT ( 12 , 50 ) ;
+        Size = MAP_APPFONT ( 80 , 8 ) ;
+        Text [ en-US ] = "Number of title pages" ;
+        Text [ x-comment ] = " ";
+    };
+    NumericField NF_PAGE_COUNT
+    {
+        Pos = MAP_APPFONT ( 80 , 50 ) ;
+        Size = MAP_APPFONT ( 30 , 12 ) ;
+        Border = TRUE ;
+        TabStop = TRUE ;
+        Left = TRUE ;
+        Repeat = TRUE ;
+        Spin = TRUE ;
+        Minimum = 1 ;
+        Maximum = 65535;
+        First = 1 ;
+        Last = 65535;
+        SpinSize = 1 ;
+    };
+    FixedText FT_PAGE_PAGES
+    {
+        Pos = MAP_APPFONT ( 116 , 50 ) ;
+        Size = MAP_APPFONT ( 80 , 10 ) ;
+        Text [ en-US ] = "pages" ;
+        Text [ x-comment ] = " ";
+    };
+    FixedText FT_PAGE_START
+    {
+        Pos = MAP_APPFONT ( 12 , 66 ) ;
+        Size = MAP_APPFONT ( 58 , 8 ) ;
+        Text [ en-US ] = "Place title pages at" ;
+        Text [ x-comment ] = " ";
+    };
+    RadioButton RB_DOCUMENT_START
+    {
+        Pos = MAP_APPFONT ( 70 , 66 ) ;
+        Size = MAP_APPFONT ( 80 , 10 ) ;
+        Text [ en-US ] = "Document Start" ;
+        TabStop = TRUE ;
+        Check = TRUE ;
+        Text [ x-comment ] = " ";
+    };
+    RadioButton RB_PAGE_START
+    {
+        Pos = MAP_APPFONT ( 70 , 78 ) ;
+        Size = MAP_APPFONT ( 30 , 10 ) ;
+        Text [ en-US ] = "Page" ;
+        Text [ x-comment ] = " ";
+    };
+    NumericField NF_PAGE_START
+    {
+        Pos = MAP_APPFONT ( 95 , 78 ) ;
+        Size = MAP_APPFONT ( 30 , 12 ) ;
+        Border = TRUE ;
+        TabStop = TRUE ;
+        Left = TRUE ;
+        Repeat = TRUE ;
+        Spin = TRUE ;
+        Minimum = 1 ;
+        Maximum = 65535;
+        First = 1 ;
+        Last = 65535;
+        SpinSize = 1 ;
+    };
+    FixedLine FL_NUMBERING
+    {
+        Pos = MAP_APPFONT ( 6 , 98 ) ;
+        Size = MAP_APPFONT ( 204 , 8 ) ;
+        Text [ en-US ] = "Page Numbering" ;
+        Text [ x-comment ] = " ";
+    };
+    CheckBox CB_RESTART_NUMBERING
+    {
+        Pos = MAP_APPFONT ( 12, 111  ) ;
+        Size = MAP_APPFONT ( 150 , 10 ) ;
+        TabStop = TRUE ;
+        Text [ en-US ] = "Reset Page Numbering after title pages" ;
+        Text [ x-comment ] = " ";
+    };
+    FixedText FT_RESTART_NUMBERING
+    {
+        Pos = MAP_APPFONT ( 140 , 111 ) ;
+        Size = MAP_APPFONT ( 50 , 10 ) ;
+        Text [ en-US ] = "Page Number" ;
+        Text [ x-comment ] = " ";
+    };
+    NumericField NF_RESTART_NUMBERING
+    {
+        Pos = MAP_APPFONT ( 180 , 111 ) ;
+        Size = MAP_APPFONT ( 30 , 12 ) ;
+        Border = TRUE ;
+        TabStop = TRUE ;
+        Left = TRUE ;
+        Repeat = TRUE ;
+        Spin = TRUE ;
+        Minimum = 1 ;
+        Maximum = 65535;
+        First = 1 ;
+        Last = 65535;
+        SpinSize = 1 ;
+    };
+    CheckBox CB_SET_PAGE_NUMBER
+    {
+        Pos = MAP_APPFONT ( 12 , 125 ) ;
+        Size = MAP_APPFONT ( 150 , 10 ) ;
+        TabStop = TRUE ;
+        Text [ en-US ] = "Set Page Number for first title page" ;
+        Text [ x-comment ] = " ";
+    };
+    FixedText FT_SET_PAGE_NUMBER
+    {
+        Pos = MAP_APPFONT ( 140 , 125 ) ;
+        Size = MAP_APPFONT ( 50 , 10 ) ;
+        Text [ en-US ] = "Page Number" ;
+        Text [ x-comment ] = " ";
+    };
+    NumericField NF_SET_PAGE_NUMBER
+    {
+        Pos = MAP_APPFONT ( 180 , 125 ) ;
+        Size = MAP_APPFONT ( 30 , 12 ) ;
+        Border = TRUE ;
+        TabStop = TRUE ;
+        Left = TRUE ;
+        Repeat = TRUE ;
+        Spin = TRUE ;
+        Minimum = 1 ;
+        Maximum = 65535;
+        First = 1 ;
+        Last = 65535;
+        SpinSize = 1 ;
+    };
+    FixedLine FL_PAGE_PROPERTIES
+    {
+        Pos = MAP_APPFONT ( 6 , 141 ) ;
+        Size = MAP_APPFONT ( 204 , 8 ) ;
+        Text [ en-US ] = "Edit Page Properties" ;
+        Text [ x-comment ] = " ";
+    };
+    ListBox LB_PAGE_PROPERTIES
+    {
+        Border = TRUE ;
+        Pos = MAP_APPFONT ( 12 , 154 ) ;
+        Size = MAP_APPFONT ( 150 , 80 ) ;
+        TabStop = TRUE ;
+        DropDown = TRUE ;
+        CurPos = 0 ;
+    };
+    PushButton PB_PAGE_PROPERTIES
+    {
+                Pos = MAP_APPFONT ( 170 , 154 ) ;
+        Size = MAP_APPFONT ( 30 , 12 ) ;
+        Text [ en-US ] = "Edit..." ;
+    };
+    FixedLine FL_BOTTOM
+    {
+        Pos = MAP_APPFONT ( 6 , 170 ) ;
+        Size = MAP_APPFONT ( 204 , 8 ) ;
+    };
+    OKButton PB_OK
+    {
+        Pos = MAP_APPFONT ( 54 , 181 ) ;
+        Size = MAP_APPFONT ( 50 , 14 ) ;
+        DefButton = TRUE ;
+    };
+    CancelButton PB_CANCEL
+    {
+        Pos = MAP_APPFONT ( 107 , 181 ) ;
+        Size = MAP_APPFONT ( 50 , 14 ) ;
+        DefButton = TRUE ;
+    };
+    HelpButton PB_HELP
+    {
+        Pos = MAP_APPFONT ( 160 , 181 ) ;
+        Size = MAP_APPFONT ( 50 , 14 ) ;
+    };
+};
diff --git a/sw/source/ui/shells/basesh.cxx b/sw/source/ui/shells/basesh.cxx
index 894d261..6eb7d31 100644
--- a/sw/source/ui/shells/basesh.cxx
+++ b/sw/source/ui/shells/basesh.cxx
@@ -2394,6 +2394,14 @@ void SwBaseShell::ExecDlg(SfxRequest &rReq)
 
     switch ( nSlot )
     {
+        case FN_FORMAT_TITLEPAGE_DLG:
+        {
+            SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
+            VclAbstractDialog* pDlg = pFact->CreateTitlePageDlg( pMDI );
+            pDlg->Execute();
+            delete pDlg;
+        }
+        break;
         case FN_FORMAT_PAGE_COLUMN_DLG:
         case FN_FORMAT_PAGE_DLG:
         {
diff --git a/sw/uiconfig/swriter/menubar/menubar.xml b/sw/uiconfig/swriter/menubar/menubar.xml
index e32578c..82993b0 100644
--- a/sw/uiconfig/swriter/menubar/menubar.xml
+++ b/sw/uiconfig/swriter/menubar/menubar.xml
@@ -217,6 +217,7 @@
       <menu:menuitem menu:id=".uno:ParagraphDialog"/>
       <menu:menuitem menu:id=".uno:BulletsAndNumberingDialog"/>
       <menu:menuitem menu:id=".uno:PageDialog"/>
+      <menu:menuitem menu:id=".uno:TitlePageDialog"/>
       <menu:menuseparator/>
       <menu:menu menu:id=".uno:TransliterateMenu">
         <menu:menupopup>
diff --git a/sw/util/makefile.mk b/sw/util/makefile.mk
index 39fa183..72f2420 100644
--- a/sw/util/makefile.mk
+++ b/sw/util/makefile.mk
@@ -256,6 +256,7 @@ LIB3OBJFILES = \
     $(SLO)$/instable.obj \
     $(SLO)$/insrule.obj \
     $(SLO)$/javaedit.obj \
+    $(SLO)$/titlepage.obj \
     $(SLO)$/linenum.obj \
     $(SLO)$/mailmrge.obj \
     $(SLO)$/multmrk.obj \


More information about the Libreoffice-commits mailing list