xref: /aoo42x/main/sd/source/ui/dlg/masterlayoutdlg.cxx (revision cdf0e10c)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_sd.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #ifdef SD_DLLIMPLEMENTATION
32*cdf0e10cSrcweir #undef SD_DLLIMPLEMENTATION
33*cdf0e10cSrcweir #endif
34*cdf0e10cSrcweir 
35*cdf0e10cSrcweir #ifndef _SVX_DIALOGS_HRC
36*cdf0e10cSrcweir #include <svx/dialogs.hrc>
37*cdf0e10cSrcweir #endif
38*cdf0e10cSrcweir 
39*cdf0e10cSrcweir #ifndef _SD_SDRESID_HXX
40*cdf0e10cSrcweir #include "sdresid.hxx"
41*cdf0e10cSrcweir #endif
42*cdf0e10cSrcweir 
43*cdf0e10cSrcweir #include "strings.hrc"
44*cdf0e10cSrcweir #include "dialogs.hrc"
45*cdf0e10cSrcweir #include "masterlayoutdlg.hxx"
46*cdf0e10cSrcweir #include "masterlayoutdlg.hrc"
47*cdf0e10cSrcweir #include "drawdoc.hxx"
48*cdf0e10cSrcweir 
49*cdf0e10cSrcweir using namespace ::sd;
50*cdf0e10cSrcweir 
51*cdf0e10cSrcweir MasterLayoutDialog::MasterLayoutDialog( Window* pParent, SdDrawDocument* pDoc, SdPage* pCurrentPage )
52*cdf0e10cSrcweir :	ModalDialog( pParent, SdResId( RID_SD_DLG_MASTER_LAYOUT ) ),
53*cdf0e10cSrcweir 	mpDoc( pDoc ),
54*cdf0e10cSrcweir 	mpCurrentPage( pCurrentPage ),
55*cdf0e10cSrcweir 	maFLPlaceholders( this, SdResId( FL_PLACEHOLDERS ) ),
56*cdf0e10cSrcweir 	maCBDate( this, SdResId( CB_DATE ) ),
57*cdf0e10cSrcweir 	maCBPageNumber( this, SdResId( CB_PAGE_NUMBER ) ),
58*cdf0e10cSrcweir 	maCBHeader( this, SdResId( CB_HEADER ) ),
59*cdf0e10cSrcweir 	maCBFooter( this, SdResId( CB_FOOTER ) ),
60*cdf0e10cSrcweir 	maPBOK( this, SdResId( BT_OK ) ),
61*cdf0e10cSrcweir 	maPBCancel( this, SdResId( BT_CANCEL ) )
62*cdf0e10cSrcweir {
63*cdf0e10cSrcweir 	if( mpCurrentPage && !mpCurrentPage->IsMasterPage() )
64*cdf0e10cSrcweir 	{
65*cdf0e10cSrcweir         mpCurrentPage = (SdPage*)(&(mpCurrentPage->TRG_GetMasterPage()));
66*cdf0e10cSrcweir 	}
67*cdf0e10cSrcweir 
68*cdf0e10cSrcweir 	if( mpCurrentPage == 0 )
69*cdf0e10cSrcweir 	{
70*cdf0e10cSrcweir 		mpCurrentPage = pDoc->GetMasterSdPage( 0, PK_STANDARD );
71*cdf0e10cSrcweir 		DBG_ERROR( "MasterLayoutDialog::MasterLayoutDialog() - no current page?" );
72*cdf0e10cSrcweir 	}
73*cdf0e10cSrcweir 
74*cdf0e10cSrcweir 	switch( mpCurrentPage->GetPageKind() )
75*cdf0e10cSrcweir 	{
76*cdf0e10cSrcweir 	case PK_STANDARD:
77*cdf0e10cSrcweir 	{
78*cdf0e10cSrcweir         //		aTitle = String( SdResId( STR_MASTER_LAYOUT_TITLE ) );
79*cdf0e10cSrcweir 		maCBHeader.Enable( sal_False );
80*cdf0e10cSrcweir 	String aSlideNumberStr( SdResId( STR_SLIDE_NUMBER ) );
81*cdf0e10cSrcweir 		maCBPageNumber.SetText( aSlideNumberStr );
82*cdf0e10cSrcweir 		break;
83*cdf0e10cSrcweir 	}
84*cdf0e10cSrcweir 	case PK_NOTES:
85*cdf0e10cSrcweir         //		aTitle = String( SdResId( STR_NOTES_MASTER_LAYOUT_TITLE ) );
86*cdf0e10cSrcweir 		break;
87*cdf0e10cSrcweir 	case PK_HANDOUT:
88*cdf0e10cSrcweir         //		aTitle = String( SdResId( STR_HANDOUT_TEMPLATE_LAYOUT_TITLE ) );
89*cdf0e10cSrcweir 		break;
90*cdf0e10cSrcweir 	}
91*cdf0e10cSrcweir 	String aTitle (SdResId( STR_MASTER_LAYOUT_TITLE ) );
92*cdf0e10cSrcweir 
93*cdf0e10cSrcweir 	SetText( aTitle );
94*cdf0e10cSrcweir 
95*cdf0e10cSrcweir 	FreeResource();
96*cdf0e10cSrcweir 
97*cdf0e10cSrcweir 	mbOldHeader = mpCurrentPage->GetPresObj( PRESOBJ_HEADER ) != NULL;
98*cdf0e10cSrcweir 	mbOldDate = mpCurrentPage->GetPresObj( PRESOBJ_DATETIME ) != NULL;
99*cdf0e10cSrcweir 	mbOldFooter = mpCurrentPage->GetPresObj( PRESOBJ_FOOTER ) != NULL;
100*cdf0e10cSrcweir 	mbOldPageNumber = mpCurrentPage->GetPresObj( PRESOBJ_SLIDENUMBER ) != NULL;
101*cdf0e10cSrcweir 
102*cdf0e10cSrcweir 	maCBHeader.Check( mbOldHeader );
103*cdf0e10cSrcweir 	maCBDate.Check( mbOldDate );
104*cdf0e10cSrcweir 	maCBFooter.Check( mbOldFooter );
105*cdf0e10cSrcweir 	maCBPageNumber.Check( mbOldPageNumber );
106*cdf0e10cSrcweir }
107*cdf0e10cSrcweir 
108*cdf0e10cSrcweir MasterLayoutDialog::~MasterLayoutDialog()
109*cdf0e10cSrcweir {
110*cdf0e10cSrcweir }
111*cdf0e10cSrcweir 
112*cdf0e10cSrcweir short MasterLayoutDialog::Execute()
113*cdf0e10cSrcweir {
114*cdf0e10cSrcweir 	if ( ModalDialog::Execute() )
115*cdf0e10cSrcweir 		applyChanges();
116*cdf0e10cSrcweir     return 1;
117*cdf0e10cSrcweir }
118*cdf0e10cSrcweir 
119*cdf0e10cSrcweir void MasterLayoutDialog::applyChanges()
120*cdf0e10cSrcweir {
121*cdf0e10cSrcweir 	mpDoc->BegUndo(GetText());
122*cdf0e10cSrcweir 
123*cdf0e10cSrcweir 	if( (mpCurrentPage->GetPageKind() != PK_STANDARD) && (mbOldHeader != maCBHeader.IsChecked() ) )
124*cdf0e10cSrcweir 	{
125*cdf0e10cSrcweir 		if( mbOldHeader )
126*cdf0e10cSrcweir 			remove( PRESOBJ_HEADER );
127*cdf0e10cSrcweir 		else
128*cdf0e10cSrcweir 			create( PRESOBJ_HEADER );
129*cdf0e10cSrcweir 	}
130*cdf0e10cSrcweir 
131*cdf0e10cSrcweir 	if( mbOldFooter != maCBFooter.IsChecked() )
132*cdf0e10cSrcweir 	{
133*cdf0e10cSrcweir 		if( mbOldFooter )
134*cdf0e10cSrcweir 			remove( PRESOBJ_FOOTER );
135*cdf0e10cSrcweir 		else
136*cdf0e10cSrcweir 			create( PRESOBJ_FOOTER );
137*cdf0e10cSrcweir 	}
138*cdf0e10cSrcweir 
139*cdf0e10cSrcweir 	if( mbOldDate != maCBDate.IsChecked() )
140*cdf0e10cSrcweir 	{
141*cdf0e10cSrcweir 		if( mbOldDate )
142*cdf0e10cSrcweir 			remove( PRESOBJ_DATETIME );
143*cdf0e10cSrcweir 		else
144*cdf0e10cSrcweir 			create( PRESOBJ_DATETIME );
145*cdf0e10cSrcweir 	}
146*cdf0e10cSrcweir 
147*cdf0e10cSrcweir 	if( mbOldPageNumber != maCBPageNumber.IsChecked() )
148*cdf0e10cSrcweir 	{
149*cdf0e10cSrcweir 		if( mbOldPageNumber )
150*cdf0e10cSrcweir 			remove( PRESOBJ_SLIDENUMBER );
151*cdf0e10cSrcweir 		else
152*cdf0e10cSrcweir 			create( PRESOBJ_SLIDENUMBER );
153*cdf0e10cSrcweir 	}
154*cdf0e10cSrcweir 
155*cdf0e10cSrcweir 	mpDoc->EndUndo();
156*cdf0e10cSrcweir }
157*cdf0e10cSrcweir 
158*cdf0e10cSrcweir void MasterLayoutDialog::create( PresObjKind eKind )
159*cdf0e10cSrcweir {
160*cdf0e10cSrcweir     mpCurrentPage->CreateDefaultPresObj( eKind, true );
161*cdf0e10cSrcweir }
162*cdf0e10cSrcweir 
163*cdf0e10cSrcweir void MasterLayoutDialog::remove( PresObjKind eKind )
164*cdf0e10cSrcweir {
165*cdf0e10cSrcweir 	SdrObject* pObject = mpCurrentPage->GetPresObj( eKind );
166*cdf0e10cSrcweir 
167*cdf0e10cSrcweir 	if( pObject )
168*cdf0e10cSrcweir 	{
169*cdf0e10cSrcweir 		const bool bUndo = mpDoc->IsUndoEnabled();
170*cdf0e10cSrcweir 		if( bUndo )
171*cdf0e10cSrcweir 			mpDoc->AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoDeleteObject(*pObject));
172*cdf0e10cSrcweir 		SdrObjList* pOL =pObject->GetObjList();
173*cdf0e10cSrcweir 		sal_uInt32 nOrdNum=pObject->GetOrdNumDirect();
174*cdf0e10cSrcweir 		pOL->RemoveObject(nOrdNum);
175*cdf0e10cSrcweir 
176*cdf0e10cSrcweir 		if( !bUndo )
177*cdf0e10cSrcweir 			SdrObject::Free(pObject);
178*cdf0e10cSrcweir 	}
179*cdf0e10cSrcweir }
180