xref: /aoo42x/main/sd/source/ui/dlg/custsdlg.cxx (revision 79aad27f)
1*5b190011SAndrew Rist /**************************************************************
2*5b190011SAndrew Rist  *
3*5b190011SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*5b190011SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*5b190011SAndrew Rist  * distributed with this work for additional information
6*5b190011SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*5b190011SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*5b190011SAndrew Rist  * "License"); you may not use this file except in compliance
9*5b190011SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*5b190011SAndrew Rist  *
11*5b190011SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*5b190011SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*5b190011SAndrew Rist  * software distributed under the License is distributed on an
15*5b190011SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*5b190011SAndrew Rist  * KIND, either express or implied.  See the License for the
17*5b190011SAndrew Rist  * specific language governing permissions and limitations
18*5b190011SAndrew Rist  * under the License.
19*5b190011SAndrew Rist  *
20*5b190011SAndrew Rist  *************************************************************/
21*5b190011SAndrew Rist 
22*5b190011SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sd.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #ifdef SD_DLLIMPLEMENTATION
28cdf0e10cSrcweir #undef SD_DLLIMPLEMENTATION
29cdf0e10cSrcweir #endif
30cdf0e10cSrcweir 
31cdf0e10cSrcweir #include "custsdlg.hxx"
32cdf0e10cSrcweir #include "custsdlg.hrc"
33cdf0e10cSrcweir 
34cdf0e10cSrcweir #include "strings.hrc"
35cdf0e10cSrcweir #include "sdresid.hxx"
36cdf0e10cSrcweir 
37cdf0e10cSrcweir #include "drawdoc.hxx"
38cdf0e10cSrcweir #include "sdpage.hxx"
39cdf0e10cSrcweir #include "cusshow.hxx"
40cdf0e10cSrcweir #include "app.hxx"
41cdf0e10cSrcweir #include <vcl/msgbox.hxx>
42cdf0e10cSrcweir 
43cdf0e10cSrcweir 
44cdf0e10cSrcweir /////////////////////
45cdf0e10cSrcweir // SdCustomShowDlg //
46cdf0e10cSrcweir /////////////////////
47cdf0e10cSrcweir 
48cdf0e10cSrcweir 
49cdf0e10cSrcweir /*************************************************************************
50cdf0e10cSrcweir |* Konstruktor
51cdf0e10cSrcweir \************************************************************************/
SdCustomShowDlg(Window * pWindow,SdDrawDocument & rDrawDoc)52cdf0e10cSrcweir SdCustomShowDlg::SdCustomShowDlg( Window* pWindow,
53cdf0e10cSrcweir 							SdDrawDocument& rDrawDoc ) :
54cdf0e10cSrcweir 	ModalDialog		( pWindow, SdResId( DLG_CUSTOMSHOW ) ),
55cdf0e10cSrcweir 
56cdf0e10cSrcweir 	aLbCustomShows	( this, SdResId( LB_CUSTOMSHOWS ) ),
57cdf0e10cSrcweir 	aCbxUseCustomShow( this, SdResId( CBX_USE_CUSTOMSHOW ) ),
58cdf0e10cSrcweir 	aBtnNew			( this, SdResId( BTN_NEW ) ),
59cdf0e10cSrcweir 	aBtnEdit		( this, SdResId( BTN_EDIT ) ),
60cdf0e10cSrcweir 	aBtnRemove		( this, SdResId( BTN_REMOVE ) ),
61cdf0e10cSrcweir 	aBtnCopy  		( this, SdResId( BTN_COPY ) ),
62cdf0e10cSrcweir 	aBtnHelp        ( this, SdResId( BTN_HELP ) ),
63cdf0e10cSrcweir 	aBtnStartShow	( this, SdResId( BTN_STARTSHOW ) ),
64cdf0e10cSrcweir 	aBtnOK          ( this, SdResId( BTN_OK ) ),
65cdf0e10cSrcweir 
66cdf0e10cSrcweir 	rDoc			( rDrawDoc ),
67cdf0e10cSrcweir 	pCustomShowList	( NULL ),
68cdf0e10cSrcweir 	pCustomShow		( NULL ),
69cdf0e10cSrcweir 	bModified		( sal_False )
70cdf0e10cSrcweir {
71cdf0e10cSrcweir 	FreeResource();
72cdf0e10cSrcweir 
73cdf0e10cSrcweir 	Link aLink( LINK( this, SdCustomShowDlg, ClickButtonHdl ) );
74cdf0e10cSrcweir 	aBtnNew.SetClickHdl( aLink );
75cdf0e10cSrcweir 	aBtnEdit.SetClickHdl( aLink );
76cdf0e10cSrcweir 	aBtnRemove.SetClickHdl( aLink );
77cdf0e10cSrcweir 	aBtnCopy.SetClickHdl( aLink );
78cdf0e10cSrcweir 	aCbxUseCustomShow.SetClickHdl( aLink );
79cdf0e10cSrcweir 	aLbCustomShows.SetSelectHdl( aLink );
80cdf0e10cSrcweir 
81cdf0e10cSrcweir 	aBtnStartShow.SetClickHdl( LINK( this, SdCustomShowDlg, StartShowHdl ) ); // Testweise
82cdf0e10cSrcweir 
83cdf0e10cSrcweir 	// CustomShow-Liste des Docs abrufen
84cdf0e10cSrcweir 	pCustomShowList = rDoc.GetCustomShowList();
85cdf0e10cSrcweir 	if( pCustomShowList )
86cdf0e10cSrcweir 	{
87cdf0e10cSrcweir 		long nPosToSelect = pCustomShowList->GetCurPos();
88cdf0e10cSrcweir 		// ListBox mit CustomShows fuellen
89cdf0e10cSrcweir 		for( pCustomShow = (SdCustomShow*) pCustomShowList->First();
90cdf0e10cSrcweir 			 pCustomShow != NULL;
91cdf0e10cSrcweir 			 pCustomShow = (SdCustomShow*) pCustomShowList->Next() )
92cdf0e10cSrcweir 		{
93cdf0e10cSrcweir 			aLbCustomShows.InsertEntry( pCustomShow->GetName() );
94cdf0e10cSrcweir 		}
95cdf0e10cSrcweir 		aLbCustomShows.SelectEntryPos( (sal_uInt16)nPosToSelect );
96cdf0e10cSrcweir 		pCustomShowList->Seek( nPosToSelect );
97cdf0e10cSrcweir 	}
98cdf0e10cSrcweir 
99cdf0e10cSrcweir 	aCbxUseCustomShow.Check( pCustomShowList && rDoc.getPresentationSettings().mbCustomShow );
100cdf0e10cSrcweir 
101cdf0e10cSrcweir 	CheckState();
102cdf0e10cSrcweir }
103cdf0e10cSrcweir 
104cdf0e10cSrcweir /*************************************************************************
105cdf0e10cSrcweir |* Dtor
106cdf0e10cSrcweir \************************************************************************/
~SdCustomShowDlg()107cdf0e10cSrcweir SdCustomShowDlg::~SdCustomShowDlg()
108cdf0e10cSrcweir {
109cdf0e10cSrcweir }
110cdf0e10cSrcweir 
111cdf0e10cSrcweir /*************************************************************************
112cdf0e10cSrcweir |* CheckState
113cdf0e10cSrcweir \************************************************************************/
CheckState()114cdf0e10cSrcweir void SdCustomShowDlg::CheckState()
115cdf0e10cSrcweir {
116cdf0e10cSrcweir 	sal_uInt16 nPos = aLbCustomShows.GetSelectEntryPos();
117cdf0e10cSrcweir 
118cdf0e10cSrcweir 	sal_Bool bEnable = nPos != LISTBOX_ENTRY_NOTFOUND;
119cdf0e10cSrcweir 	aBtnEdit.Enable( bEnable );
120cdf0e10cSrcweir 	aBtnRemove.Enable( bEnable );
121cdf0e10cSrcweir 	aBtnCopy.Enable( bEnable );
122cdf0e10cSrcweir 	aCbxUseCustomShow.Enable( bEnable );
123cdf0e10cSrcweir 	aBtnStartShow.Enable( true );
124cdf0e10cSrcweir 
125cdf0e10cSrcweir 	if( bEnable )
126cdf0e10cSrcweir 		pCustomShowList->Seek( nPos );
127cdf0e10cSrcweir }
128cdf0e10cSrcweir 
129cdf0e10cSrcweir /*************************************************************************
130cdf0e10cSrcweir |* ButtonHdl()
131cdf0e10cSrcweir \************************************************************************/
IMPL_LINK(SdCustomShowDlg,ClickButtonHdl,void *,p)132cdf0e10cSrcweir IMPL_LINK( SdCustomShowDlg, ClickButtonHdl, void *, p )
133cdf0e10cSrcweir {
134cdf0e10cSrcweir 	// Neue CustomShow
135cdf0e10cSrcweir 	if( p == &aBtnNew )
136cdf0e10cSrcweir 	{
137cdf0e10cSrcweir 		pCustomShow = NULL;
138cdf0e10cSrcweir 		SdDefineCustomShowDlg aDlg( this, rDoc, pCustomShow );
139cdf0e10cSrcweir 		if( aDlg.Execute() == RET_OK )
140cdf0e10cSrcweir 		{
141cdf0e10cSrcweir 			if( pCustomShow )
142cdf0e10cSrcweir 			{
143cdf0e10cSrcweir 				if( !pCustomShowList )
144cdf0e10cSrcweir 					pCustomShowList = rDoc.GetCustomShowList( sal_True );
145cdf0e10cSrcweir 
146cdf0e10cSrcweir 				pCustomShowList->Insert( pCustomShow, LIST_APPEND );
147cdf0e10cSrcweir 				pCustomShowList->Last();
148cdf0e10cSrcweir 				aLbCustomShows.InsertEntry( pCustomShow->GetName() );
149cdf0e10cSrcweir 				aLbCustomShows.SelectEntry( pCustomShow->GetName() );
150cdf0e10cSrcweir 			}
151cdf0e10cSrcweir 
152cdf0e10cSrcweir 			if( aDlg.IsModified() )
153cdf0e10cSrcweir 				bModified = sal_True;
154cdf0e10cSrcweir 		}
155cdf0e10cSrcweir 		else if( pCustomShow )
156cdf0e10cSrcweir 			DELETEZ( pCustomShow );
157cdf0e10cSrcweir 	}
158cdf0e10cSrcweir 	// CustomShow bearbeiten
159cdf0e10cSrcweir 	else if( p == &aBtnEdit )
160cdf0e10cSrcweir 	{
161cdf0e10cSrcweir 		sal_uInt16 nPos = aLbCustomShows.GetSelectEntryPos();
162cdf0e10cSrcweir 		if( nPos != LISTBOX_ENTRY_NOTFOUND )
163cdf0e10cSrcweir 		{
164cdf0e10cSrcweir 			DBG_ASSERT( pCustomShowList, "pCustomShowList existiert nicht" );
165cdf0e10cSrcweir 			pCustomShow = (SdCustomShow*) pCustomShowList->GetObject( nPos );
166cdf0e10cSrcweir 			SdDefineCustomShowDlg aDlg( this, rDoc, pCustomShow );
167cdf0e10cSrcweir 
168cdf0e10cSrcweir 			if( aDlg.Execute() == RET_OK )
169cdf0e10cSrcweir 			{
170cdf0e10cSrcweir 				if( pCustomShow )
171cdf0e10cSrcweir 				{
172cdf0e10cSrcweir 					pCustomShowList->Replace( pCustomShow, nPos );
173cdf0e10cSrcweir 					pCustomShowList->Seek( nPos );
174cdf0e10cSrcweir 					aLbCustomShows.RemoveEntry( nPos );
175cdf0e10cSrcweir 					aLbCustomShows.InsertEntry( pCustomShow->GetName(), nPos );
176cdf0e10cSrcweir 					aLbCustomShows.SelectEntryPos( nPos );
177cdf0e10cSrcweir 				}
178cdf0e10cSrcweir 				if( aDlg.IsModified() )
179cdf0e10cSrcweir 					bModified = sal_True;
180cdf0e10cSrcweir 			}
181cdf0e10cSrcweir 		}
182cdf0e10cSrcweir 	}
183cdf0e10cSrcweir 	// CustomShow loeschen
184cdf0e10cSrcweir 	else if( p == &aBtnRemove )
185cdf0e10cSrcweir 	{
186cdf0e10cSrcweir 		sal_uInt16 nPos = aLbCustomShows.GetSelectEntryPos();
187cdf0e10cSrcweir 		if( nPos != LISTBOX_ENTRY_NOTFOUND )
188cdf0e10cSrcweir 		{
189cdf0e10cSrcweir 			delete (SdCustomShow*) pCustomShowList->Remove( nPos );
190cdf0e10cSrcweir 			aLbCustomShows.RemoveEntry( nPos );
191cdf0e10cSrcweir 			aLbCustomShows.SelectEntryPos( nPos == 0 ? nPos : nPos - 1 );
192cdf0e10cSrcweir 			bModified = sal_True;
193cdf0e10cSrcweir 		}
194cdf0e10cSrcweir 	}
195cdf0e10cSrcweir 	// CustomShow kopieren
196cdf0e10cSrcweir 	else if( p == &aBtnCopy )
197cdf0e10cSrcweir 	{
198cdf0e10cSrcweir 		sal_uInt16 nPos = aLbCustomShows.GetSelectEntryPos();
199cdf0e10cSrcweir 		if( nPos != LISTBOX_ENTRY_NOTFOUND )
200cdf0e10cSrcweir 		{
201cdf0e10cSrcweir 			SdCustomShow* pShow = new SdCustomShow( *(SdCustomShow*) pCustomShowList->GetObject( nPos ) );
202cdf0e10cSrcweir 			String aStr( pShow->GetName() );
203cdf0e10cSrcweir 			String aStrCopy( SdResId( STR_COPY_CUSTOMSHOW ) );
204cdf0e10cSrcweir 
205cdf0e10cSrcweir 			sal_uInt16 nStrPos = aStr.Search( aStrCopy );
206cdf0e10cSrcweir 			sal_uInt16 nNum = 1;
207cdf0e10cSrcweir 			if( nStrPos == STRING_NOTFOUND )
208cdf0e10cSrcweir 			{
209cdf0e10cSrcweir 				aStr.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " (" ) );
210cdf0e10cSrcweir 				aStr.Append( aStrCopy );
211cdf0e10cSrcweir 				aStr.Append( UniString::CreateFromInt32( nNum ) );
212cdf0e10cSrcweir 				aStr.Append( sal_Unicode(')') );
213cdf0e10cSrcweir 				nStrPos = aStr.Search( aStrCopy );
214cdf0e10cSrcweir 			}
215cdf0e10cSrcweir 			nStrPos = nStrPos + (sal_uInt16)aStrCopy.Len();
216cdf0e10cSrcweir 			// Um nicht ins Nirvana zu greifen (--> Endlosschleife)
217cdf0e10cSrcweir 			if( nStrPos >= aStr.Len() )
218cdf0e10cSrcweir 			{
219cdf0e10cSrcweir 				aStr.Append( sal_Unicode(' ') );
220cdf0e10cSrcweir 				aStr.Append( UniString::CreateFromInt32( nNum ) );
221cdf0e10cSrcweir 			}
222cdf0e10cSrcweir 
223cdf0e10cSrcweir 			// Name ueberpruefen...
224cdf0e10cSrcweir 			sal_Bool bDifferent = sal_False;
225cdf0e10cSrcweir 			//long nPosToSelect = pCustomShowList->GetCurPos();
226cdf0e10cSrcweir 			while( !bDifferent )
227cdf0e10cSrcweir 			{
228cdf0e10cSrcweir 				bDifferent = sal_True;
229cdf0e10cSrcweir 				for( pCustomShow = (SdCustomShow*) pCustomShowList->First();
230cdf0e10cSrcweir 					 pCustomShow != NULL && bDifferent;
231cdf0e10cSrcweir 					 pCustomShow = (SdCustomShow*) pCustomShowList->Next() )
232cdf0e10cSrcweir 				{
233cdf0e10cSrcweir 					if( aStr == pCustomShow->GetName() )
234cdf0e10cSrcweir 						bDifferent = sal_False;
235cdf0e10cSrcweir 				}
236cdf0e10cSrcweir 				if( !bDifferent )
237cdf0e10cSrcweir 				{
238cdf0e10cSrcweir 					// Nummer entfernen und durch um 1 erhoehte ersetzen
239cdf0e10cSrcweir 
240cdf0e10cSrcweir 					const CharClass* pCharClass = rDoc.GetCharClass();
241cdf0e10cSrcweir 					while( pCharClass->isDigit( aStr, nStrPos ) )
242cdf0e10cSrcweir 						aStr.Erase( nStrPos, 1 );
243cdf0e10cSrcweir 					aStr.Insert( UniString::CreateFromInt32( ++nNum ), nStrPos);
244cdf0e10cSrcweir 				}
245cdf0e10cSrcweir 
246cdf0e10cSrcweir 			}
247cdf0e10cSrcweir 			//pCustomShowList->Seek( nPosToSelect );
248cdf0e10cSrcweir 			pShow->SetName( aStr );
249cdf0e10cSrcweir 
250cdf0e10cSrcweir 			pCustomShowList->Insert( pShow, LIST_APPEND );
251cdf0e10cSrcweir 			pCustomShowList->Last();
252cdf0e10cSrcweir 			aLbCustomShows.InsertEntry( pShow->GetName() );
253cdf0e10cSrcweir 			aLbCustomShows.SelectEntry( pShow->GetName() );
254cdf0e10cSrcweir 
255cdf0e10cSrcweir 
256cdf0e10cSrcweir 			bModified = sal_True;
257cdf0e10cSrcweir 		}
258cdf0e10cSrcweir 	}
259cdf0e10cSrcweir 	else if( p == &aLbCustomShows )
260cdf0e10cSrcweir 	{
261cdf0e10cSrcweir 		sal_uInt16 nPos = aLbCustomShows.GetSelectEntryPos();
262cdf0e10cSrcweir 		if( nPos != LISTBOX_ENTRY_NOTFOUND )
263cdf0e10cSrcweir 			pCustomShowList->Seek( nPos );
264cdf0e10cSrcweir 
265cdf0e10cSrcweir 		bModified = sal_True;
266cdf0e10cSrcweir 	}
267cdf0e10cSrcweir 	else if( p == &aCbxUseCustomShow )
268cdf0e10cSrcweir 	{
269cdf0e10cSrcweir 		bModified = sal_True;
270cdf0e10cSrcweir 	}
271cdf0e10cSrcweir 
272cdf0e10cSrcweir 	CheckState();
273cdf0e10cSrcweir 
274cdf0e10cSrcweir 	return( 0L );
275cdf0e10cSrcweir }
276cdf0e10cSrcweir 
277cdf0e10cSrcweir /*************************************************************************
278cdf0e10cSrcweir |* StartShow-Hdl
279cdf0e10cSrcweir \************************************************************************/
IMPL_LINK(SdCustomShowDlg,StartShowHdl,Button *,EMPTYARG)280cdf0e10cSrcweir IMPL_LINK( SdCustomShowDlg, StartShowHdl, Button *, EMPTYARG )
281cdf0e10cSrcweir {
282cdf0e10cSrcweir 	EndDialog( RET_YES );
283cdf0e10cSrcweir 
284cdf0e10cSrcweir 	return 0;
285cdf0e10cSrcweir }
286cdf0e10cSrcweir 
287cdf0e10cSrcweir /*************************************************************************
288cdf0e10cSrcweir |* CheckState
289cdf0e10cSrcweir \************************************************************************/
IsCustomShow() const290cdf0e10cSrcweir sal_Bool SdCustomShowDlg::IsCustomShow() const
291cdf0e10cSrcweir {
292cdf0e10cSrcweir 	return( aCbxUseCustomShow.IsEnabled() && aCbxUseCustomShow.IsChecked() );
293cdf0e10cSrcweir }
294cdf0e10cSrcweir 
295cdf0e10cSrcweir 
296cdf0e10cSrcweir 
297cdf0e10cSrcweir ///////////////////////////
298cdf0e10cSrcweir // SdDefineCustomShowDlg //
299cdf0e10cSrcweir ///////////////////////////
300cdf0e10cSrcweir 
301cdf0e10cSrcweir 
302cdf0e10cSrcweir /*************************************************************************
303cdf0e10cSrcweir |*
304cdf0e10cSrcweir |* Konstruktor
305cdf0e10cSrcweir |*
306cdf0e10cSrcweir \************************************************************************/
SdDefineCustomShowDlg(Window * pWindow,SdDrawDocument & rDrawDoc,SdCustomShow * & rpCS)307cdf0e10cSrcweir SdDefineCustomShowDlg::SdDefineCustomShowDlg( Window* pWindow,
308cdf0e10cSrcweir 						SdDrawDocument& rDrawDoc, SdCustomShow*& rpCS ) :
309cdf0e10cSrcweir 	ModalDialog		( pWindow, SdResId( DLG_DEFINE_CUSTOMSHOW ) ),
310cdf0e10cSrcweir 
311cdf0e10cSrcweir 	aFtName			( this, SdResId( FT_NAME ) ),
312cdf0e10cSrcweir 	aEdtName		( this, SdResId( EDT_NAME ) ),
313cdf0e10cSrcweir 	aFtPages		( this, SdResId( FT_PAGES ) ),
314cdf0e10cSrcweir 	aLbPages		( this, SdResId( LB_PAGES ) ),
315cdf0e10cSrcweir 	aBtnAdd			( this, SdResId( BTN_ADD ) ),
316cdf0e10cSrcweir 	aBtnRemove		( this, SdResId( BTN_REMOVE ) ),
317cdf0e10cSrcweir 	aFtCustomPages	( this, SdResId( FT_CUSTOM_PAGES ) ),
318cdf0e10cSrcweir 	aLbCustomPages	( this, SdResId( LB_CUSTOM_PAGES ) ),
319cdf0e10cSrcweir 	aBtnOK          ( this, SdResId( BTN_OK ) ),
320cdf0e10cSrcweir 	aBtnCancel		( this, SdResId( BTN_CANCEL ) ),
321cdf0e10cSrcweir 	aBtnHelp        ( this, SdResId( BTN_HELP ) ),
322cdf0e10cSrcweir 
323cdf0e10cSrcweir 	rDoc			( rDrawDoc ),
324cdf0e10cSrcweir 	rpCustomShow	( rpCS ),
325cdf0e10cSrcweir 	bModified		( sal_False )
326cdf0e10cSrcweir {
327cdf0e10cSrcweir 	FreeResource();
328cdf0e10cSrcweir 
329cdf0e10cSrcweir 	Link aLink = LINK( this, SdDefineCustomShowDlg, ClickButtonHdl );
330cdf0e10cSrcweir 	aBtnAdd.SetClickHdl( aLink );
331cdf0e10cSrcweir 	aBtnRemove.SetClickHdl( aLink );
332cdf0e10cSrcweir 	aEdtName.SetModifyHdl( aLink );
333cdf0e10cSrcweir 	aLbPages.SetSelectHdl( aLink ); // wegen Status
334cdf0e10cSrcweir 	aLbCustomPages.SetSelectHdl( aLink ); // wegen Status
335cdf0e10cSrcweir 
336cdf0e10cSrcweir 	aBtnOK.SetClickHdl( LINK( this, SdDefineCustomShowDlg, OKHdl ) );
337cdf0e10cSrcweir 
338cdf0e10cSrcweir 	SdPage* pPage;
339cdf0e10cSrcweir 	// Listbox mit Seitennamen des Docs fuellen
340cdf0e10cSrcweir 	for( long nPage = 0L;
341cdf0e10cSrcweir 		 nPage < rDoc.GetSdPageCount( PK_STANDARD );
342cdf0e10cSrcweir 		 nPage++ )
343cdf0e10cSrcweir 	{
344cdf0e10cSrcweir 		pPage = rDoc.GetSdPage( (sal_uInt16) nPage, PK_STANDARD );
345cdf0e10cSrcweir 		String aStr( pPage->GetName() );
346cdf0e10cSrcweir 		aLbPages.InsertEntry( aStr );
347cdf0e10cSrcweir 	}
348cdf0e10cSrcweir 	//aLbPages.SelectEntryPos( 0 );
349cdf0e10cSrcweir 
350cdf0e10cSrcweir 	if( rpCustomShow )
351cdf0e10cSrcweir 	{
352cdf0e10cSrcweir 		aOldName = rpCustomShow->GetName();
353cdf0e10cSrcweir 		aEdtName.SetText( aOldName );
354cdf0e10cSrcweir 
355cdf0e10cSrcweir 		// ListBox mit CustomShow-Seiten fuellen
356cdf0e10cSrcweir 		for( pPage = (SdPage*) rpCustomShow->First();
357cdf0e10cSrcweir 			 pPage != NULL;
358cdf0e10cSrcweir 			 pPage = (SdPage*) rpCustomShow->Next() )
359cdf0e10cSrcweir 		{
360cdf0e10cSrcweir 			SvLBoxEntry* pEntry = aLbCustomPages.InsertEntry( pPage->GetName() );
361cdf0e10cSrcweir 			pEntry->SetUserData( pPage );
362cdf0e10cSrcweir 		}
363cdf0e10cSrcweir 	}
364cdf0e10cSrcweir 	else
365cdf0e10cSrcweir 	{
366cdf0e10cSrcweir 		rpCustomShow = new SdCustomShow( &rDoc );
367cdf0e10cSrcweir 		aEdtName.SetText( String( SdResId( STR_NEW_CUSTOMSHOW ) ) );
368cdf0e10cSrcweir 		aEdtName.SetSelection( Selection( SELECTION_MIN, SELECTION_MAX ) );
369cdf0e10cSrcweir 		rpCustomShow->SetName( aEdtName.GetText() );
370cdf0e10cSrcweir 	}
371cdf0e10cSrcweir 
372cdf0e10cSrcweir 	aLbCustomPages.SetDragDropMode( SV_DRAGDROP_CTRL_MOVE );
373cdf0e10cSrcweir 	aLbCustomPages.SetHighlightRange();
374cdf0e10cSrcweir 
375cdf0e10cSrcweir 	aBtnOK.Enable( sal_False );
376cdf0e10cSrcweir 	CheckState();
377cdf0e10cSrcweir }
378cdf0e10cSrcweir 
379cdf0e10cSrcweir /*************************************************************************
380cdf0e10cSrcweir |*
381cdf0e10cSrcweir |* Dtor
382cdf0e10cSrcweir |*
383cdf0e10cSrcweir \************************************************************************/
~SdDefineCustomShowDlg()384cdf0e10cSrcweir SdDefineCustomShowDlg::~SdDefineCustomShowDlg()
385cdf0e10cSrcweir {
386cdf0e10cSrcweir }
387cdf0e10cSrcweir 
388cdf0e10cSrcweir /*************************************************************************
389cdf0e10cSrcweir |* CheckState
390cdf0e10cSrcweir \************************************************************************/
CheckState()391cdf0e10cSrcweir void SdDefineCustomShowDlg::CheckState()
392cdf0e10cSrcweir {
393cdf0e10cSrcweir 	sal_Bool bPages = aLbPages.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND;
394cdf0e10cSrcweir 	//sal_Bool bCSPages = aLbCustomPages.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND;
395cdf0e10cSrcweir 	sal_Bool bCSPages = aLbCustomPages.FirstSelected() != NULL;
396cdf0e10cSrcweir 	sal_Bool bCount = aLbCustomPages.GetEntryCount() > 0;
397cdf0e10cSrcweir 
398cdf0e10cSrcweir 	aBtnOK.Enable( bCount );
399cdf0e10cSrcweir 	aBtnAdd.Enable( bPages );
400cdf0e10cSrcweir 	aBtnRemove.Enable( bCSPages );
401cdf0e10cSrcweir }
402cdf0e10cSrcweir 
403cdf0e10cSrcweir /*************************************************************************
404cdf0e10cSrcweir |* ButtonHdl()
405cdf0e10cSrcweir \************************************************************************/
IMPL_LINK(SdDefineCustomShowDlg,ClickButtonHdl,void *,p)406cdf0e10cSrcweir IMPL_LINK( SdDefineCustomShowDlg, ClickButtonHdl, void *, p )
407cdf0e10cSrcweir {
408cdf0e10cSrcweir 	if( p == &aBtnAdd )
409cdf0e10cSrcweir 	{
410cdf0e10cSrcweir 		sal_uInt16 nCount = aLbPages.GetSelectEntryCount();
411cdf0e10cSrcweir 		if( nCount > 0 )
412cdf0e10cSrcweir 		{
413cdf0e10cSrcweir 			sal_uLong nPosCP = LIST_APPEND;
414cdf0e10cSrcweir 			SvLBoxEntry* pEntry = aLbCustomPages.FirstSelected();
415cdf0e10cSrcweir 			if( pEntry )
416cdf0e10cSrcweir 				nPosCP = aLbCustomPages.GetModel()->GetAbsPos( pEntry ) + 1L;
417cdf0e10cSrcweir 
418cdf0e10cSrcweir 			for( sal_uInt16 i = 0; i < nCount; i++ )
419cdf0e10cSrcweir 			{
420cdf0e10cSrcweir 				String aStr = aLbPages.GetSelectEntry( i );
421cdf0e10cSrcweir 				pEntry = aLbCustomPages.InsertEntry( aStr,
422cdf0e10cSrcweir 											0, sal_False, nPosCP );
423cdf0e10cSrcweir 
424cdf0e10cSrcweir 				aLbCustomPages.Select( pEntry );
425cdf0e10cSrcweir 				SdPage* pPage = rDoc.GetSdPage( (sal_uInt16) aLbPages.
426cdf0e10cSrcweir 									GetSelectEntryPos( i ), PK_STANDARD );
427cdf0e10cSrcweir 				pEntry->SetUserData( pPage );
428cdf0e10cSrcweir 
429cdf0e10cSrcweir 				if( nPosCP != LIST_APPEND )
430cdf0e10cSrcweir 					nPosCP++;
431cdf0e10cSrcweir 			}
432cdf0e10cSrcweir 			bModified = sal_True;
433cdf0e10cSrcweir 		}
434cdf0e10cSrcweir 	}
435cdf0e10cSrcweir 	else if( p == &aBtnRemove )
436cdf0e10cSrcweir 	{
437cdf0e10cSrcweir 		//sal_uInt16 nPos = aLbCustomPages.GetSelectEntryPos();
438cdf0e10cSrcweir 		SvLBoxEntry* pEntry = aLbCustomPages.FirstSelected();
439cdf0e10cSrcweir 		if( pEntry )
440cdf0e10cSrcweir 		{
441cdf0e10cSrcweir 			sal_uLong nPos = aLbCustomPages.GetModel()->GetAbsPos( pEntry );
442cdf0e10cSrcweir 			//rpCustomShow->Remove( nPos );
443cdf0e10cSrcweir 			//aLbCustomPages.RemoveEntry( nPos );
444cdf0e10cSrcweir 			aLbCustomPages.GetModel()->Remove( aLbCustomPages.GetModel()->GetEntryAtAbsPos( nPos ) );
445cdf0e10cSrcweir 
446cdf0e10cSrcweir 			bModified = sal_True;
447cdf0e10cSrcweir 		}
448cdf0e10cSrcweir 	}
449cdf0e10cSrcweir 	else if( p == &aEdtName )
450cdf0e10cSrcweir 	{
451cdf0e10cSrcweir 		//rpCustomShow->SetName( aEdtName.GetText() );
452cdf0e10cSrcweir 
453cdf0e10cSrcweir 		bModified = sal_True;
454cdf0e10cSrcweir 	}
455cdf0e10cSrcweir 
456cdf0e10cSrcweir 	CheckState();
457cdf0e10cSrcweir 
458cdf0e10cSrcweir 	return( 0L );
459cdf0e10cSrcweir }
460cdf0e10cSrcweir 
461cdf0e10cSrcweir /*************************************************************************
462cdf0e10cSrcweir |* CheckCustomShow():
463cdf0e10cSrcweir |* Ueberprueft die Page-Pointer der Show, da die Eintraege ueber die
464cdf0e10cSrcweir |* TreeLB verschoben und kopiert werden k�nnen
465cdf0e10cSrcweir \************************************************************************/
CheckCustomShow()466cdf0e10cSrcweir void SdDefineCustomShowDlg::CheckCustomShow()
467cdf0e10cSrcweir {
468cdf0e10cSrcweir 	sal_Bool bDifferent = sal_False;
469cdf0e10cSrcweir 	SdPage* pPage = NULL;
470cdf0e10cSrcweir 	SvLBoxEntry* pEntry = NULL;
471cdf0e10cSrcweir 
472cdf0e10cSrcweir 	// Anzahl vergleichen
473cdf0e10cSrcweir 	if( rpCustomShow->Count() != aLbCustomPages.GetEntryCount() )
474cdf0e10cSrcweir 	{
475cdf0e10cSrcweir 		rpCustomShow->Clear();
476cdf0e10cSrcweir 		bDifferent = sal_True;
477cdf0e10cSrcweir 	}
478cdf0e10cSrcweir 
479cdf0e10cSrcweir 	// Seiten-Pointer vergleichen
480cdf0e10cSrcweir 	if( !bDifferent )
481cdf0e10cSrcweir 	{
482cdf0e10cSrcweir 		for( pPage = (SdPage*) rpCustomShow->First(), pEntry = aLbCustomPages.First();
483cdf0e10cSrcweir 			 pPage != NULL && pEntry != NULL && !bDifferent;
484cdf0e10cSrcweir 			 pPage = (SdPage*) rpCustomShow->Next(), pEntry = aLbCustomPages.Next( pEntry ) )
485cdf0e10cSrcweir 		{
486cdf0e10cSrcweir 			if( pPage != pEntry->GetUserData() )
487cdf0e10cSrcweir 			{
488cdf0e10cSrcweir 				rpCustomShow->Clear();
489cdf0e10cSrcweir 				bDifferent = sal_True;
490cdf0e10cSrcweir 			}
491cdf0e10cSrcweir 		}
492cdf0e10cSrcweir 	}
493cdf0e10cSrcweir 
494cdf0e10cSrcweir 	// Seiten-Pointer neu setzen
495cdf0e10cSrcweir 	if( bDifferent )
496cdf0e10cSrcweir 	{
497cdf0e10cSrcweir 		for( pEntry = aLbCustomPages.First();
498cdf0e10cSrcweir 			 pEntry != NULL;
499cdf0e10cSrcweir 			 pEntry = aLbCustomPages.Next( pEntry ) )
500cdf0e10cSrcweir 		{
501cdf0e10cSrcweir 			pPage = (SdPage*) pEntry->GetUserData();
502cdf0e10cSrcweir 			rpCustomShow->Insert( pPage, LIST_APPEND );
503cdf0e10cSrcweir 		}
504cdf0e10cSrcweir 		bModified = sal_True;
505cdf0e10cSrcweir 	}
506cdf0e10cSrcweir 
507cdf0e10cSrcweir 	// Name vergleichen und ggfs. setzen
508cdf0e10cSrcweir 	String aStr( aEdtName.GetText() );
509cdf0e10cSrcweir 	if( rpCustomShow->GetName() != aStr )
510cdf0e10cSrcweir 	{
511cdf0e10cSrcweir 		rpCustomShow->SetName( aStr );
512cdf0e10cSrcweir 		bModified = sal_True;
513cdf0e10cSrcweir 	}
514cdf0e10cSrcweir }
515cdf0e10cSrcweir 
516cdf0e10cSrcweir /*************************************************************************
517cdf0e10cSrcweir |* OK-Hdl
518cdf0e10cSrcweir \************************************************************************/
IMPL_LINK(SdDefineCustomShowDlg,OKHdl,Button *,EMPTYARG)519cdf0e10cSrcweir IMPL_LINK( SdDefineCustomShowDlg, OKHdl, Button *, EMPTYARG )
520cdf0e10cSrcweir {
521cdf0e10cSrcweir 	// Name ueberpruefen...
522cdf0e10cSrcweir 	sal_Bool bDifferent = sal_True;
523cdf0e10cSrcweir 	List* pCustomShowList = rDoc.GetCustomShowList();
524cdf0e10cSrcweir 	if( pCustomShowList )
525cdf0e10cSrcweir 	{
526cdf0e10cSrcweir 		String aName( aEdtName.GetText() );
527cdf0e10cSrcweir 		SdCustomShow* pCustomShow;
528cdf0e10cSrcweir 
529cdf0e10cSrcweir 		long nPosToSelect = pCustomShowList->GetCurPos();
530cdf0e10cSrcweir 		for( pCustomShow = (SdCustomShow*) pCustomShowList->First();
531cdf0e10cSrcweir 			 pCustomShow != NULL;
532cdf0e10cSrcweir 			 pCustomShow = (SdCustomShow*) pCustomShowList->Next() )
533cdf0e10cSrcweir 		{
534cdf0e10cSrcweir 			if( aName == pCustomShow->GetName() && aName != aOldName )
535cdf0e10cSrcweir 				bDifferent = sal_False;
536cdf0e10cSrcweir 		}
537cdf0e10cSrcweir 		pCustomShowList->Seek( nPosToSelect );
538cdf0e10cSrcweir 	}
539cdf0e10cSrcweir 
540cdf0e10cSrcweir 	if( bDifferent )
541cdf0e10cSrcweir 	{
542cdf0e10cSrcweir 		CheckCustomShow();
543cdf0e10cSrcweir 
544cdf0e10cSrcweir 		EndDialog( RET_OK );
545cdf0e10cSrcweir 	}
546cdf0e10cSrcweir 	else
547cdf0e10cSrcweir 	{
548cdf0e10cSrcweir 		WarningBox( this, WinBits( WB_OK ),
549cdf0e10cSrcweir 					String( SdResId( STR_WARN_NAME_DUPLICATE ) ) ).Execute();
550cdf0e10cSrcweir 
551cdf0e10cSrcweir 		aEdtName.GrabFocus();
552cdf0e10cSrcweir 	}
553cdf0e10cSrcweir 
554cdf0e10cSrcweir 	return 0;
555cdf0e10cSrcweir }
556cdf0e10cSrcweir 
557