xref: /aoo42x/main/sd/source/ui/app/sdpopup.cxx (revision 579128bd)
15b190011SAndrew Rist /**************************************************************
2*579128bdSmseidel  *
35b190011SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
45b190011SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
55b190011SAndrew Rist  * distributed with this work for additional information
65b190011SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
75b190011SAndrew Rist  * to you under the Apache License, Version 2.0 (the
85b190011SAndrew Rist  * "License"); you may not use this file except in compliance
95b190011SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*579128bdSmseidel  *
115b190011SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*579128bdSmseidel  *
135b190011SAndrew Rist  * Unless required by applicable law or agreed to in writing,
145b190011SAndrew Rist  * software distributed under the License is distributed on an
155b190011SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
165b190011SAndrew Rist  * KIND, either express or implied.  See the License for the
175b190011SAndrew Rist  * specific language governing permissions and limitations
185b190011SAndrew Rist  * under the License.
19*579128bdSmseidel  *
205b190011SAndrew Rist  *************************************************************/
215b190011SAndrew Rist 
225b190011SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sd.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir 
28cdf0e10cSrcweir #include <editeng/eeitem.hxx>
29cdf0e10cSrcweir 
30cdf0e10cSrcweir #include <editeng/editeng.hxx>
31cdf0e10cSrcweir #include <editeng/flditem.hxx>
32cdf0e10cSrcweir #include <svl/zforlist.hxx>
33cdf0e10cSrcweir #include <sfx2/objsh.hxx>
34cdf0e10cSrcweir #include <sfx2/docfile.hxx>
35cdf0e10cSrcweir #include <unotools/useroptions.hxx>
36cdf0e10cSrcweir 
37cdf0e10cSrcweir #include "strings.hrc"
38cdf0e10cSrcweir #include "sdpopup.hxx"
39cdf0e10cSrcweir #include "sdresid.hxx"
40cdf0e10cSrcweir #include "sdmod.hxx"
41cdf0e10cSrcweir #include "drawdoc.hxx"
42cdf0e10cSrcweir #include "DrawDocShell.hxx"
43cdf0e10cSrcweir 
44cdf0e10cSrcweir /*************************************************************************
45cdf0e10cSrcweir |* PopupMenu zum Bearbeiten von Feldbefehlen
46cdf0e10cSrcweir \************************************************************************/
47cdf0e10cSrcweir 
SdFieldPopup(const SvxFieldData * pInField,LanguageType eLanguage)48cdf0e10cSrcweir SdFieldPopup::SdFieldPopup( const SvxFieldData* pInField, LanguageType eLanguage ) :
49cdf0e10cSrcweir 		PopupMenu	(),
50cdf0e10cSrcweir 		pField		( pInField )
51cdf0e10cSrcweir {
52cdf0e10cSrcweir 	Fill( eLanguage );
53cdf0e10cSrcweir }
54cdf0e10cSrcweir 
55cdf0e10cSrcweir /*************************************************************************
56cdf0e10cSrcweir |* Dtor
57cdf0e10cSrcweir \************************************************************************/
58cdf0e10cSrcweir 
~SdFieldPopup()59cdf0e10cSrcweir SdFieldPopup::~SdFieldPopup()
60cdf0e10cSrcweir {
61cdf0e10cSrcweir }
62cdf0e10cSrcweir 
63cdf0e10cSrcweir /*************************************************************************
64cdf0e10cSrcweir |* Fill
65cdf0e10cSrcweir \************************************************************************/
66cdf0e10cSrcweir 
Fill(LanguageType eLanguage)67cdf0e10cSrcweir void SdFieldPopup::Fill( LanguageType eLanguage )
68cdf0e10cSrcweir {
69cdf0e10cSrcweir 	sal_uInt16 nID = 1;
70cdf0e10cSrcweir 	sal_uInt16 nStyle = MIB_RADIOCHECK | MIB_AUTOCHECK;
71cdf0e10cSrcweir 	InsertItem( nID++, String( SdResId( STR_FIX ) ), nStyle );
72cdf0e10cSrcweir 	InsertItem( nID++, String( SdResId( STR_VAR ) ), nStyle );
73cdf0e10cSrcweir 	InsertSeparator();
74cdf0e10cSrcweir 
75cdf0e10cSrcweir 	if( pField->ISA( SvxDateField ) )
76cdf0e10cSrcweir 	{
77cdf0e10cSrcweir 		const SvxDateField* pDateField = (const SvxDateField*) pField;
78cdf0e10cSrcweir 		SvxDateField aDateField( *pDateField );
79cdf0e10cSrcweir 
80cdf0e10cSrcweir 		if( pDateField->GetType() == SVXDATETYPE_FIX )
81cdf0e10cSrcweir 			CheckItem( 1 );
82cdf0e10cSrcweir 		else
83cdf0e10cSrcweir 			CheckItem( 2 );
84cdf0e10cSrcweir 
85*579128bdSmseidel 		//SVXDATEFORMAT_APPDEFAULT,		// Wird nicht benutzt
86*579128bdSmseidel 		//SVXDATEFORMAT_SYSTEM,			// Wird nicht benutzt
87cdf0e10cSrcweir 		InsertItem( nID++, String( SdResId( STR_STANDARD_SMALL ) ), nStyle );
88cdf0e10cSrcweir 		InsertItem( nID++, String( SdResId( STR_STANDARD_BIG ) ), nStyle );
89cdf0e10cSrcweir 
90cdf0e10cSrcweir 		SvNumberFormatter* pNumberFormatter = SD_MOD()->GetNumberFormatter();
91cdf0e10cSrcweir 		aDateField.SetFormat( SVXDATEFORMAT_A );	// 13.02.96
92cdf0e10cSrcweir 		InsertItem( nID++, aDateField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
93cdf0e10cSrcweir 		aDateField.SetFormat( SVXDATEFORMAT_B );	// 13.02.1996
94cdf0e10cSrcweir 		InsertItem( nID++, aDateField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
95cdf0e10cSrcweir 		aDateField.SetFormat( SVXDATEFORMAT_C );	// 13.Feb 1996
96cdf0e10cSrcweir 		InsertItem( nID++, aDateField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
97cdf0e10cSrcweir 
98cdf0e10cSrcweir 		aDateField.SetFormat( SVXDATEFORMAT_D );	// 13.Februar 1996
99cdf0e10cSrcweir 		InsertItem( nID++, aDateField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
100cdf0e10cSrcweir 		aDateField.SetFormat( SVXDATEFORMAT_E );	// Die, 13.Februar 1996
101cdf0e10cSrcweir 		InsertItem( nID++, aDateField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
102cdf0e10cSrcweir 		aDateField.SetFormat( SVXDATEFORMAT_F );	// Dienstag, 13.Februar 1996
103cdf0e10cSrcweir 		InsertItem( nID++, aDateField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
104cdf0e10cSrcweir 
105cdf0e10cSrcweir 		CheckItem( (sal_uInt16) ( pDateField->GetFormat() ) + 1 ); // - 2 + 3 !
106cdf0e10cSrcweir 	}
107cdf0e10cSrcweir 	else if( pField->ISA( SvxExtTimeField ) )
108cdf0e10cSrcweir 	{
109cdf0e10cSrcweir 		const SvxExtTimeField* pTimeField = (const SvxExtTimeField*) pField;
110cdf0e10cSrcweir 		SvxExtTimeField aTimeField( *pTimeField );
111cdf0e10cSrcweir 
112cdf0e10cSrcweir 		if( pTimeField->GetType() == SVXTIMETYPE_FIX )
113cdf0e10cSrcweir 			CheckItem( 1 );
114cdf0e10cSrcweir 		else
115cdf0e10cSrcweir 			CheckItem( 2 );
116cdf0e10cSrcweir 
117*579128bdSmseidel 		//SVXTIMEFORMAT_APPDEFAULT,		// Wird nicht benutzt
118*579128bdSmseidel 		//SVXTIMEFORMAT_SYSTEM,			// Wird nicht benutzt
119cdf0e10cSrcweir 		InsertItem( nID++, String( SdResId( STR_STANDARD_NORMAL ) ), nStyle );
120cdf0e10cSrcweir 
121cdf0e10cSrcweir 		SvNumberFormatter* pNumberFormatter = SD_MOD()->GetNumberFormatter();
122cdf0e10cSrcweir 		aTimeField.SetFormat( SVXTIMEFORMAT_24_HM );	// 13:49
123cdf0e10cSrcweir 		InsertItem( nID++, aTimeField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
124cdf0e10cSrcweir 		aTimeField.SetFormat( SVXTIMEFORMAT_24_HMS );	// 13:49:38
125cdf0e10cSrcweir 		InsertItem( nID++, aTimeField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
126cdf0e10cSrcweir 		aTimeField.SetFormat( SVXTIMEFORMAT_24_HMSH );	// 13:49:38.78
127cdf0e10cSrcweir 		InsertItem( nID++, aTimeField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
128cdf0e10cSrcweir 
129cdf0e10cSrcweir 		aTimeField.SetFormat( SVXTIMEFORMAT_12_HM );	// 01:49
130cdf0e10cSrcweir 		InsertItem( nID++, aTimeField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
131cdf0e10cSrcweir 		aTimeField.SetFormat( SVXTIMEFORMAT_12_HMS );	// 01:49:38
132cdf0e10cSrcweir 		InsertItem( nID++, aTimeField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
133cdf0e10cSrcweir 		aTimeField.SetFormat( SVXTIMEFORMAT_12_HMSH );	// 01:49:38.78
134cdf0e10cSrcweir 		InsertItem( nID++, aTimeField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
135cdf0e10cSrcweir 		//SVXTIMEFORMAT_AM_HM,	// 01:49 PM
136cdf0e10cSrcweir 		//SVXTIMEFORMAT_AM_HMS,	// 01:49:38 PM
137cdf0e10cSrcweir 		//SVXTIMEFORMAT_AM_HMSH	// 01:49:38.78 PM
138cdf0e10cSrcweir 
139cdf0e10cSrcweir 		CheckItem( (sal_uInt16) ( pTimeField->GetFormat() ) + 1 ); // - 2 + 3 !
140cdf0e10cSrcweir 	}
141cdf0e10cSrcweir 	else if( pField->ISA( SvxExtFileField ) )
142cdf0e10cSrcweir 	{
143cdf0e10cSrcweir 		const SvxExtFileField* pFileField = (const SvxExtFileField*) pField;
144cdf0e10cSrcweir 		//SvxExtFileField aFileField( *pFileField );
145cdf0e10cSrcweir 
146cdf0e10cSrcweir 		if( pFileField->GetType() == SVXFILETYPE_FIX )
147cdf0e10cSrcweir 			CheckItem( 1 );
148cdf0e10cSrcweir 		else
149cdf0e10cSrcweir 			CheckItem( 2 );
150cdf0e10cSrcweir 
151cdf0e10cSrcweir 		InsertItem( nID++, String( SdResId( STR_FILEFORMAT_NAME_EXT ) ), nStyle );
152cdf0e10cSrcweir 		InsertItem( nID++, String( SdResId( STR_FILEFORMAT_FULLPATH ) ), nStyle );
153cdf0e10cSrcweir 		InsertItem( nID++, String( SdResId( STR_FILEFORMAT_PATH ) ), nStyle );
154cdf0e10cSrcweir 		InsertItem( nID++, String( SdResId( STR_FILEFORMAT_NAME ) ), nStyle );
155cdf0e10cSrcweir 
156cdf0e10cSrcweir 		CheckItem( (sal_uInt16) ( pFileField->GetFormat() ) + 3 );
157cdf0e10cSrcweir 	}
158cdf0e10cSrcweir 	else if( pField->ISA( SvxAuthorField ) )
159cdf0e10cSrcweir 	{
160cdf0e10cSrcweir 		const SvxAuthorField* pAuthorField = (const SvxAuthorField*) pField;
161cdf0e10cSrcweir 		SvxAuthorField aAuthorField( *pAuthorField );
162cdf0e10cSrcweir 
163cdf0e10cSrcweir 		if( pAuthorField->GetType() == SVXAUTHORTYPE_FIX )
164cdf0e10cSrcweir 			CheckItem( 1 );
165cdf0e10cSrcweir 		else
166cdf0e10cSrcweir 			CheckItem( 2 );
167cdf0e10cSrcweir 
168cdf0e10cSrcweir 		for( sal_uInt16 i = 0; i < 4; i++ )
169cdf0e10cSrcweir 		{
170cdf0e10cSrcweir 			aAuthorField.SetFormat( (SvxAuthorFormat) i );
171cdf0e10cSrcweir 			InsertItem( nID++, aAuthorField.GetFormatted(), nStyle );
172cdf0e10cSrcweir 		}
173cdf0e10cSrcweir 		CheckItem( (sal_uInt16) ( pAuthorField->GetFormat() ) + 3 );
174cdf0e10cSrcweir 	}
175cdf0e10cSrcweir }
176cdf0e10cSrcweir 
177cdf0e10cSrcweir /*************************************************************************
178cdf0e10cSrcweir |* Gibt das neue Feld zurueck, gehoert dem Caller.
179cdf0e10cSrcweir |* Liefert NULL, wenn sich nichts geaendert hat.
180cdf0e10cSrcweir \************************************************************************/
181cdf0e10cSrcweir 
GetField()182cdf0e10cSrcweir SvxFieldData* SdFieldPopup::GetField()
183cdf0e10cSrcweir {
184cdf0e10cSrcweir 	SvxFieldData* pNewField = NULL;
185cdf0e10cSrcweir 	sal_uInt16 nCount = GetItemCount();
186cdf0e10cSrcweir 
187cdf0e10cSrcweir 	if( pField->ISA( SvxDateField ) )
188cdf0e10cSrcweir 	{
189cdf0e10cSrcweir 		const SvxDateField* pDateField = (const SvxDateField*) pField;
190cdf0e10cSrcweir 		SvxDateType	  eType;
191cdf0e10cSrcweir 		SvxDateFormat eFormat;
192cdf0e10cSrcweir 		sal_uInt16 i;
193cdf0e10cSrcweir 
194cdf0e10cSrcweir 		if( IsItemChecked( 1 ) )
195cdf0e10cSrcweir 			eType = SVXDATETYPE_FIX;
196cdf0e10cSrcweir 		else
197cdf0e10cSrcweir 			eType = SVXDATETYPE_VAR;
198cdf0e10cSrcweir 
199cdf0e10cSrcweir 		for( i = 3; i <= nCount; i++ )
200cdf0e10cSrcweir 		{
201cdf0e10cSrcweir 			if( IsItemChecked( i ) )
202cdf0e10cSrcweir 				break;
203cdf0e10cSrcweir 		}
204cdf0e10cSrcweir 		eFormat = (SvxDateFormat) ( i - 1 );
205cdf0e10cSrcweir 
206cdf0e10cSrcweir 		if( pDateField->GetFormat() != eFormat ||
207cdf0e10cSrcweir 			pDateField->GetType() != eType )
208cdf0e10cSrcweir 		{
209cdf0e10cSrcweir 			pNewField = new SvxDateField( *pDateField );
210cdf0e10cSrcweir 			( (SvxDateField*) pNewField )->SetType( eType );
211cdf0e10cSrcweir 			( (SvxDateField*) pNewField )->SetFormat( eFormat );
212cdf0e10cSrcweir 
213cdf0e10cSrcweir 			if( (pDateField->GetType() == SVXDATETYPE_VAR) && (eType == SVXDATETYPE_FIX) )
214cdf0e10cSrcweir 			{
215cdf0e10cSrcweir 				Date aDate;
216cdf0e10cSrcweir 				( (SvxDateField*) pNewField )->SetFixDate( aDate );
217cdf0e10cSrcweir 			}
218cdf0e10cSrcweir 		}
219cdf0e10cSrcweir 	}
220cdf0e10cSrcweir 	else if( pField->ISA( SvxExtTimeField ) )
221cdf0e10cSrcweir 	{
222cdf0e10cSrcweir 		const SvxExtTimeField* pTimeField = (const SvxExtTimeField*) pField;
223cdf0e10cSrcweir 		SvxTimeType	  eType;
224cdf0e10cSrcweir 		SvxTimeFormat eFormat;
225cdf0e10cSrcweir 		sal_uInt16 i;
226cdf0e10cSrcweir 
227cdf0e10cSrcweir 		if( IsItemChecked( 1 ) )
228cdf0e10cSrcweir 			eType = SVXTIMETYPE_FIX;
229cdf0e10cSrcweir 		else
230cdf0e10cSrcweir 			eType = SVXTIMETYPE_VAR;
231cdf0e10cSrcweir 
232cdf0e10cSrcweir 		for( i = 3; i <= nCount; i++ )
233cdf0e10cSrcweir 		{
234cdf0e10cSrcweir 			if( IsItemChecked( i ) )
235cdf0e10cSrcweir 				break;
236cdf0e10cSrcweir 		}
237cdf0e10cSrcweir 		eFormat = (SvxTimeFormat) ( i - 1 );
238cdf0e10cSrcweir 
239cdf0e10cSrcweir 		if( pTimeField->GetFormat() != eFormat ||
240cdf0e10cSrcweir 			pTimeField->GetType() != eType )
241cdf0e10cSrcweir 		{
242cdf0e10cSrcweir 			pNewField = new SvxExtTimeField( *pTimeField );
243cdf0e10cSrcweir 			( (SvxExtTimeField*) pNewField )->SetType( eType );
244cdf0e10cSrcweir 			( (SvxExtTimeField*) pNewField )->SetFormat( eFormat );
245cdf0e10cSrcweir 
246cdf0e10cSrcweir 			if( (pTimeField->GetType() == SVXTIMETYPE_VAR) && (eType == SVXTIMETYPE_FIX) )
247cdf0e10cSrcweir 			{
248cdf0e10cSrcweir 				Time aTime;
249cdf0e10cSrcweir 				( (SvxExtTimeField*) pNewField )->SetFixTime( aTime );
250cdf0e10cSrcweir 			}
251cdf0e10cSrcweir 
252cdf0e10cSrcweir 		}
253cdf0e10cSrcweir 	}
254cdf0e10cSrcweir 	else if( pField->ISA( SvxExtFileField ) )
255cdf0e10cSrcweir 	{
256cdf0e10cSrcweir 		const SvxExtFileField* pFileField = (const SvxExtFileField*) pField;
257cdf0e10cSrcweir 		SvxFileType	  eType;
258cdf0e10cSrcweir 		SvxFileFormat eFormat;
259cdf0e10cSrcweir 		sal_uInt16 i;
260cdf0e10cSrcweir 
261cdf0e10cSrcweir 		if( IsItemChecked( 1 ) )
262cdf0e10cSrcweir 			eType = SVXFILETYPE_FIX;
263cdf0e10cSrcweir 		else
264cdf0e10cSrcweir 			eType = SVXFILETYPE_VAR;
265cdf0e10cSrcweir 
266cdf0e10cSrcweir 		for( i = 3; i <= nCount; i++ )
267cdf0e10cSrcweir 		{
268cdf0e10cSrcweir 			if( IsItemChecked( i ) )
269cdf0e10cSrcweir 				break;
270cdf0e10cSrcweir 		}
271cdf0e10cSrcweir 		eFormat = (SvxFileFormat) ( i - 3 );
272cdf0e10cSrcweir 
273cdf0e10cSrcweir 		if( pFileField->GetFormat() != eFormat ||
274cdf0e10cSrcweir 			pFileField->GetType() != eType )
275cdf0e10cSrcweir 		{
276cdf0e10cSrcweir 			::sd::DrawDocShell* pDocSh = PTR_CAST(::sd::DrawDocShell,
277*579128bdSmseidel 				SfxObjectShell::Current() );
278cdf0e10cSrcweir 
279cdf0e10cSrcweir 			if( pDocSh )
280cdf0e10cSrcweir 			{
281cdf0e10cSrcweir 				SvxExtFileField aFileField( *pFileField );
282cdf0e10cSrcweir 
283cdf0e10cSrcweir 				String aName;
284cdf0e10cSrcweir 				if( pDocSh->HasName() )
285cdf0e10cSrcweir 					aName = pDocSh->GetMedium()->GetName();
286cdf0e10cSrcweir 
287cdf0e10cSrcweir 				// #91225# Get current filename, not the one stored in the old field
288cdf0e10cSrcweir 				pNewField = new SvxExtFileField( aName );
289cdf0e10cSrcweir 				( (SvxExtFileField*) pNewField )->SetType( eType );
290cdf0e10cSrcweir 				( (SvxExtFileField*) pNewField )->SetFormat( eFormat );
291cdf0e10cSrcweir 			}
292cdf0e10cSrcweir 		}
293cdf0e10cSrcweir 	}
294cdf0e10cSrcweir 	else if( pField->ISA( SvxAuthorField ) )
295cdf0e10cSrcweir 	{
296cdf0e10cSrcweir 		const SvxAuthorField* pAuthorField = (const SvxAuthorField*) pField;
297cdf0e10cSrcweir 		SvxAuthorType	eType;
298cdf0e10cSrcweir 		SvxAuthorFormat eFormat;
299cdf0e10cSrcweir 		sal_uInt16 i;
300cdf0e10cSrcweir 
301cdf0e10cSrcweir 		if( IsItemChecked( 1 ) )
302cdf0e10cSrcweir 			eType = SVXAUTHORTYPE_FIX;
303cdf0e10cSrcweir 		else
304cdf0e10cSrcweir 			eType = SVXAUTHORTYPE_VAR;
305cdf0e10cSrcweir 
306cdf0e10cSrcweir 		for( i = 3; i <= nCount; i++ )
307cdf0e10cSrcweir 		{
308cdf0e10cSrcweir 			if( IsItemChecked( i ) )
309cdf0e10cSrcweir 				break;
310cdf0e10cSrcweir 		}
311cdf0e10cSrcweir 		eFormat = (SvxAuthorFormat) ( i - 3 );
312cdf0e10cSrcweir 
313cdf0e10cSrcweir 		if( pAuthorField->GetFormat() != eFormat ||
314cdf0e10cSrcweir 			pAuthorField->GetType() != eType )
315cdf0e10cSrcweir 		{
316cdf0e10cSrcweir 			// #91225# Get current state of address, not the old one
317*579128bdSmseidel 			SvtUserOptions aUserOptions;
318*579128bdSmseidel 			pNewField = new SvxAuthorField( aUserOptions.GetFirstName(), aUserOptions.GetLastName(), aUserOptions.GetID() );
319cdf0e10cSrcweir 			( (SvxAuthorField*) pNewField )->SetType( eType );
320cdf0e10cSrcweir 			( (SvxAuthorField*) pNewField )->SetFormat( eFormat );
321cdf0e10cSrcweir 		}
322cdf0e10cSrcweir 	}
323cdf0e10cSrcweir 	return( pNewField );
324cdf0e10cSrcweir }
325