xref: /AOO41X/main/sd/source/ui/app/sdpopup.cxx (revision 79aad27f7f29270c03e208e3d687e8e3850af11d)
1*5b190011SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
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
10cdf0e10cSrcweir  *
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.
19cdf0e10cSrcweir  *
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 
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 |*
46cdf0e10cSrcweir |* PopupMenu zum Bearbeiten von Feldbefehlen
47cdf0e10cSrcweir |*
48cdf0e10cSrcweir \************************************************************************/
49cdf0e10cSrcweir 
SdFieldPopup(const SvxFieldData * pInField,LanguageType eLanguage)50cdf0e10cSrcweir SdFieldPopup::SdFieldPopup( const SvxFieldData* pInField, LanguageType eLanguage ) :
51cdf0e10cSrcweir         PopupMenu   (),
52cdf0e10cSrcweir         pField      ( pInField )
53cdf0e10cSrcweir {
54cdf0e10cSrcweir     Fill( eLanguage );
55cdf0e10cSrcweir }
56cdf0e10cSrcweir 
57cdf0e10cSrcweir /*************************************************************************
58cdf0e10cSrcweir |*
59cdf0e10cSrcweir |* Dtor
60cdf0e10cSrcweir |*
61cdf0e10cSrcweir \************************************************************************/
62cdf0e10cSrcweir 
~SdFieldPopup()63cdf0e10cSrcweir SdFieldPopup::~SdFieldPopup()
64cdf0e10cSrcweir {
65cdf0e10cSrcweir }
66cdf0e10cSrcweir 
67cdf0e10cSrcweir /*************************************************************************
68cdf0e10cSrcweir |*
69cdf0e10cSrcweir |* Fill
70cdf0e10cSrcweir |*
71cdf0e10cSrcweir \************************************************************************/
72cdf0e10cSrcweir 
Fill(LanguageType eLanguage)73cdf0e10cSrcweir void SdFieldPopup::Fill( LanguageType eLanguage )
74cdf0e10cSrcweir {
75cdf0e10cSrcweir     sal_uInt16 nID = 1;
76cdf0e10cSrcweir     sal_uInt16 nStyle = MIB_RADIOCHECK | MIB_AUTOCHECK;
77cdf0e10cSrcweir     InsertItem( nID++, String( SdResId( STR_FIX ) ), nStyle );
78cdf0e10cSrcweir     InsertItem( nID++, String( SdResId( STR_VAR ) ), nStyle );
79cdf0e10cSrcweir     InsertSeparator();
80cdf0e10cSrcweir 
81cdf0e10cSrcweir     if( pField->ISA( SvxDateField ) )
82cdf0e10cSrcweir     {
83cdf0e10cSrcweir         const SvxDateField* pDateField = (const SvxDateField*) pField;
84cdf0e10cSrcweir         SvxDateField aDateField( *pDateField );
85cdf0e10cSrcweir 
86cdf0e10cSrcweir         if( pDateField->GetType() == SVXDATETYPE_FIX )
87cdf0e10cSrcweir             CheckItem( 1 );
88cdf0e10cSrcweir         else
89cdf0e10cSrcweir             CheckItem( 2 );
90cdf0e10cSrcweir 
91cdf0e10cSrcweir         //SVXDATEFORMAT_APPDEFAULT,     // Wird nicht benutzt
92cdf0e10cSrcweir         //SVXDATEFORMAT_SYSTEM,         // Wird nicht benutzt
93cdf0e10cSrcweir         InsertItem( nID++, String( SdResId( STR_STANDARD_SMALL ) ), nStyle );
94cdf0e10cSrcweir         InsertItem( nID++, String( SdResId( STR_STANDARD_BIG ) ), nStyle );
95cdf0e10cSrcweir 
96cdf0e10cSrcweir         SvNumberFormatter* pNumberFormatter = SD_MOD()->GetNumberFormatter();
97cdf0e10cSrcweir         aDateField.SetFormat( SVXDATEFORMAT_A );    // 13.02.96
98cdf0e10cSrcweir         InsertItem( nID++, aDateField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
99cdf0e10cSrcweir         aDateField.SetFormat( SVXDATEFORMAT_B );    // 13.02.1996
100cdf0e10cSrcweir         InsertItem( nID++, aDateField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
101cdf0e10cSrcweir         aDateField.SetFormat( SVXDATEFORMAT_C );    // 13.Feb 1996
102cdf0e10cSrcweir         InsertItem( nID++, aDateField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
103cdf0e10cSrcweir 
104cdf0e10cSrcweir         aDateField.SetFormat( SVXDATEFORMAT_D );    // 13.Februar 1996
105cdf0e10cSrcweir         InsertItem( nID++, aDateField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
106cdf0e10cSrcweir         aDateField.SetFormat( SVXDATEFORMAT_E );    // Die, 13.Februar 1996
107cdf0e10cSrcweir         InsertItem( nID++, aDateField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
108cdf0e10cSrcweir         aDateField.SetFormat( SVXDATEFORMAT_F );    // Dienstag, 13.Februar 1996
109cdf0e10cSrcweir         InsertItem( nID++, aDateField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
110cdf0e10cSrcweir 
111cdf0e10cSrcweir         CheckItem( (sal_uInt16) ( pDateField->GetFormat() ) + 1 ); // - 2 + 3 !
112cdf0e10cSrcweir     }
113cdf0e10cSrcweir     else if( pField->ISA( SvxExtTimeField ) )
114cdf0e10cSrcweir     {
115cdf0e10cSrcweir         const SvxExtTimeField* pTimeField = (const SvxExtTimeField*) pField;
116cdf0e10cSrcweir         SvxExtTimeField aTimeField( *pTimeField );
117cdf0e10cSrcweir 
118cdf0e10cSrcweir         if( pTimeField->GetType() == SVXTIMETYPE_FIX )
119cdf0e10cSrcweir             CheckItem( 1 );
120cdf0e10cSrcweir         else
121cdf0e10cSrcweir             CheckItem( 2 );
122cdf0e10cSrcweir 
123cdf0e10cSrcweir         //SVXTIMEFORMAT_APPDEFAULT,     // Wird nicht benutzt
124cdf0e10cSrcweir         //SVXTIMEFORMAT_SYSTEM,         // Wird nicht benutzt
125cdf0e10cSrcweir         InsertItem( nID++, String( SdResId( STR_STANDARD_NORMAL ) ), nStyle );
126cdf0e10cSrcweir 
127cdf0e10cSrcweir         SvNumberFormatter* pNumberFormatter = SD_MOD()->GetNumberFormatter();
128cdf0e10cSrcweir         aTimeField.SetFormat( SVXTIMEFORMAT_24_HM );    // 13:49
129cdf0e10cSrcweir         InsertItem( nID++, aTimeField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
130cdf0e10cSrcweir         aTimeField.SetFormat( SVXTIMEFORMAT_24_HMS );   // 13:49:38
131cdf0e10cSrcweir         InsertItem( nID++, aTimeField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
132cdf0e10cSrcweir         aTimeField.SetFormat( SVXTIMEFORMAT_24_HMSH );  // 13:49:38.78
133cdf0e10cSrcweir         InsertItem( nID++, aTimeField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
134cdf0e10cSrcweir 
135cdf0e10cSrcweir         aTimeField.SetFormat( SVXTIMEFORMAT_12_HM );    // 01:49
136cdf0e10cSrcweir         InsertItem( nID++, aTimeField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
137cdf0e10cSrcweir         aTimeField.SetFormat( SVXTIMEFORMAT_12_HMS );   // 01:49:38
138cdf0e10cSrcweir         InsertItem( nID++, aTimeField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
139cdf0e10cSrcweir         aTimeField.SetFormat( SVXTIMEFORMAT_12_HMSH );  // 01:49:38.78
140cdf0e10cSrcweir         InsertItem( nID++, aTimeField.GetFormatted( *pNumberFormatter, eLanguage ), nStyle );
141cdf0e10cSrcweir         //SVXTIMEFORMAT_AM_HM,  // 01:49 PM
142cdf0e10cSrcweir         //SVXTIMEFORMAT_AM_HMS, // 01:49:38 PM
143cdf0e10cSrcweir         //SVXTIMEFORMAT_AM_HMSH // 01:49:38.78 PM
144cdf0e10cSrcweir 
145cdf0e10cSrcweir         CheckItem( (sal_uInt16) ( pTimeField->GetFormat() ) + 1 ); // - 2 + 3 !
146cdf0e10cSrcweir     }
147cdf0e10cSrcweir     else if( pField->ISA( SvxExtFileField ) )
148cdf0e10cSrcweir     {
149cdf0e10cSrcweir         const SvxExtFileField* pFileField = (const SvxExtFileField*) pField;
150cdf0e10cSrcweir         //SvxExtFileField aFileField( *pFileField );
151cdf0e10cSrcweir 
152cdf0e10cSrcweir         if( pFileField->GetType() == SVXFILETYPE_FIX )
153cdf0e10cSrcweir             CheckItem( 1 );
154cdf0e10cSrcweir         else
155cdf0e10cSrcweir             CheckItem( 2 );
156cdf0e10cSrcweir 
157cdf0e10cSrcweir         InsertItem( nID++, String( SdResId( STR_FILEFORMAT_NAME_EXT ) ), nStyle );
158cdf0e10cSrcweir         InsertItem( nID++, String( SdResId( STR_FILEFORMAT_FULLPATH ) ), nStyle );
159cdf0e10cSrcweir         InsertItem( nID++, String( SdResId( STR_FILEFORMAT_PATH ) ), nStyle );
160cdf0e10cSrcweir         InsertItem( nID++, String( SdResId( STR_FILEFORMAT_NAME ) ), nStyle );
161cdf0e10cSrcweir 
162cdf0e10cSrcweir         CheckItem( (sal_uInt16) ( pFileField->GetFormat() ) + 3 );
163cdf0e10cSrcweir     }
164cdf0e10cSrcweir     else if( pField->ISA( SvxAuthorField ) )
165cdf0e10cSrcweir     {
166cdf0e10cSrcweir         const SvxAuthorField* pAuthorField = (const SvxAuthorField*) pField;
167cdf0e10cSrcweir         SvxAuthorField aAuthorField( *pAuthorField );
168cdf0e10cSrcweir 
169cdf0e10cSrcweir         if( pAuthorField->GetType() == SVXAUTHORTYPE_FIX )
170cdf0e10cSrcweir             CheckItem( 1 );
171cdf0e10cSrcweir         else
172cdf0e10cSrcweir             CheckItem( 2 );
173cdf0e10cSrcweir 
174cdf0e10cSrcweir         for( sal_uInt16 i = 0; i < 4; i++ )
175cdf0e10cSrcweir         {
176cdf0e10cSrcweir             aAuthorField.SetFormat( (SvxAuthorFormat) i );
177cdf0e10cSrcweir             InsertItem( nID++, aAuthorField.GetFormatted(), nStyle );
178cdf0e10cSrcweir         }
179cdf0e10cSrcweir         CheckItem( (sal_uInt16) ( pAuthorField->GetFormat() ) + 3 );
180cdf0e10cSrcweir     }
181cdf0e10cSrcweir }
182cdf0e10cSrcweir 
183cdf0e10cSrcweir /*************************************************************************
184cdf0e10cSrcweir |*
185cdf0e10cSrcweir |* Gibt das neue Feld zurueck, gehoert dem Caller.
186cdf0e10cSrcweir |* Liefert NULL, wenn sich nichts geaendert hat.
187cdf0e10cSrcweir |*
188cdf0e10cSrcweir \************************************************************************/
189cdf0e10cSrcweir 
GetField()190cdf0e10cSrcweir SvxFieldData* SdFieldPopup::GetField()
191cdf0e10cSrcweir {
192cdf0e10cSrcweir     SvxFieldData* pNewField = NULL;
193cdf0e10cSrcweir     sal_uInt16 nCount = GetItemCount();
194cdf0e10cSrcweir 
195cdf0e10cSrcweir     if( pField->ISA( SvxDateField ) )
196cdf0e10cSrcweir     {
197cdf0e10cSrcweir         const SvxDateField* pDateField = (const SvxDateField*) pField;
198cdf0e10cSrcweir         SvxDateType   eType;
199cdf0e10cSrcweir         SvxDateFormat eFormat;
200cdf0e10cSrcweir         sal_uInt16 i;
201cdf0e10cSrcweir 
202cdf0e10cSrcweir         if( IsItemChecked( 1 ) )
203cdf0e10cSrcweir             eType = SVXDATETYPE_FIX;
204cdf0e10cSrcweir         else
205cdf0e10cSrcweir             eType = SVXDATETYPE_VAR;
206cdf0e10cSrcweir 
207cdf0e10cSrcweir         for( i = 3; i <= nCount; i++ )
208cdf0e10cSrcweir         {
209cdf0e10cSrcweir             if( IsItemChecked( i ) )
210cdf0e10cSrcweir                 break;
211cdf0e10cSrcweir         }
212cdf0e10cSrcweir         eFormat = (SvxDateFormat) ( i - 1 );
213cdf0e10cSrcweir 
214cdf0e10cSrcweir         if( pDateField->GetFormat() != eFormat ||
215cdf0e10cSrcweir             pDateField->GetType() != eType )
216cdf0e10cSrcweir         {
217cdf0e10cSrcweir             pNewField = new SvxDateField( *pDateField );
218cdf0e10cSrcweir             ( (SvxDateField*) pNewField )->SetType( eType );
219cdf0e10cSrcweir             ( (SvxDateField*) pNewField )->SetFormat( eFormat );
220cdf0e10cSrcweir 
221cdf0e10cSrcweir             if( (pDateField->GetType() == SVXDATETYPE_VAR) && (eType == SVXDATETYPE_FIX) )
222cdf0e10cSrcweir             {
223cdf0e10cSrcweir                 Date aDate;
224cdf0e10cSrcweir                 ( (SvxDateField*) pNewField )->SetFixDate( aDate );
225cdf0e10cSrcweir             }
226cdf0e10cSrcweir         }
227cdf0e10cSrcweir     }
228cdf0e10cSrcweir     else if( pField->ISA( SvxExtTimeField ) )
229cdf0e10cSrcweir     {
230cdf0e10cSrcweir         const SvxExtTimeField* pTimeField = (const SvxExtTimeField*) pField;
231cdf0e10cSrcweir         SvxTimeType   eType;
232cdf0e10cSrcweir         SvxTimeFormat eFormat;
233cdf0e10cSrcweir         sal_uInt16 i;
234cdf0e10cSrcweir 
235cdf0e10cSrcweir         if( IsItemChecked( 1 ) )
236cdf0e10cSrcweir             eType = SVXTIMETYPE_FIX;
237cdf0e10cSrcweir         else
238cdf0e10cSrcweir             eType = SVXTIMETYPE_VAR;
239cdf0e10cSrcweir 
240cdf0e10cSrcweir         for( i = 3; i <= nCount; i++ )
241cdf0e10cSrcweir         {
242cdf0e10cSrcweir             if( IsItemChecked( i ) )
243cdf0e10cSrcweir                 break;
244cdf0e10cSrcweir         }
245cdf0e10cSrcweir         eFormat = (SvxTimeFormat) ( i - 1 );
246cdf0e10cSrcweir 
247cdf0e10cSrcweir         if( pTimeField->GetFormat() != eFormat ||
248cdf0e10cSrcweir             pTimeField->GetType() != eType )
249cdf0e10cSrcweir         {
250cdf0e10cSrcweir             pNewField = new SvxExtTimeField( *pTimeField );
251cdf0e10cSrcweir             ( (SvxExtTimeField*) pNewField )->SetType( eType );
252cdf0e10cSrcweir             ( (SvxExtTimeField*) pNewField )->SetFormat( eFormat );
253cdf0e10cSrcweir 
254cdf0e10cSrcweir             if( (pTimeField->GetType() == SVXTIMETYPE_VAR) && (eType == SVXTIMETYPE_FIX) )
255cdf0e10cSrcweir             {
256cdf0e10cSrcweir                 Time aTime;
257cdf0e10cSrcweir                 ( (SvxExtTimeField*) pNewField )->SetFixTime( aTime );
258cdf0e10cSrcweir             }
259cdf0e10cSrcweir 
260cdf0e10cSrcweir         }
261cdf0e10cSrcweir     }
262cdf0e10cSrcweir     else if( pField->ISA( SvxExtFileField ) )
263cdf0e10cSrcweir     {
264cdf0e10cSrcweir         const SvxExtFileField* pFileField = (const SvxExtFileField*) pField;
265cdf0e10cSrcweir         SvxFileType   eType;
266cdf0e10cSrcweir         SvxFileFormat eFormat;
267cdf0e10cSrcweir         sal_uInt16 i;
268cdf0e10cSrcweir 
269cdf0e10cSrcweir         if( IsItemChecked( 1 ) )
270cdf0e10cSrcweir             eType = SVXFILETYPE_FIX;
271cdf0e10cSrcweir         else
272cdf0e10cSrcweir             eType = SVXFILETYPE_VAR;
273cdf0e10cSrcweir 
274cdf0e10cSrcweir         for( i = 3; i <= nCount; i++ )
275cdf0e10cSrcweir         {
276cdf0e10cSrcweir             if( IsItemChecked( i ) )
277cdf0e10cSrcweir                 break;
278cdf0e10cSrcweir         }
279cdf0e10cSrcweir         eFormat = (SvxFileFormat) ( i - 3 );
280cdf0e10cSrcweir 
281cdf0e10cSrcweir         if( pFileField->GetFormat() != eFormat ||
282cdf0e10cSrcweir             pFileField->GetType() != eType )
283cdf0e10cSrcweir         {
284cdf0e10cSrcweir             ::sd::DrawDocShell* pDocSh = PTR_CAST(::sd::DrawDocShell,
285cdf0e10cSrcweir                 SfxObjectShell::Current() );
286cdf0e10cSrcweir 
287cdf0e10cSrcweir             if( pDocSh )
288cdf0e10cSrcweir             {
289cdf0e10cSrcweir                 SvxExtFileField aFileField( *pFileField );
290cdf0e10cSrcweir 
291cdf0e10cSrcweir                 String aName;
292cdf0e10cSrcweir                 if( pDocSh->HasName() )
293cdf0e10cSrcweir                     aName = pDocSh->GetMedium()->GetName();
294cdf0e10cSrcweir 
295cdf0e10cSrcweir                 // #91225# Get current filename, not the one stored in the old field
296cdf0e10cSrcweir                 pNewField = new SvxExtFileField( aName );
297cdf0e10cSrcweir                 ( (SvxExtFileField*) pNewField )->SetType( eType );
298cdf0e10cSrcweir                 ( (SvxExtFileField*) pNewField )->SetFormat( eFormat );
299cdf0e10cSrcweir             }
300cdf0e10cSrcweir         }
301cdf0e10cSrcweir     }
302cdf0e10cSrcweir     else if( pField->ISA( SvxAuthorField ) )
303cdf0e10cSrcweir     {
304cdf0e10cSrcweir         const SvxAuthorField* pAuthorField = (const SvxAuthorField*) pField;
305cdf0e10cSrcweir         SvxAuthorType   eType;
306cdf0e10cSrcweir         SvxAuthorFormat eFormat;
307cdf0e10cSrcweir         sal_uInt16 i;
308cdf0e10cSrcweir 
309cdf0e10cSrcweir         if( IsItemChecked( 1 ) )
310cdf0e10cSrcweir             eType = SVXAUTHORTYPE_FIX;
311cdf0e10cSrcweir         else
312cdf0e10cSrcweir             eType = SVXAUTHORTYPE_VAR;
313cdf0e10cSrcweir 
314cdf0e10cSrcweir         for( i = 3; i <= nCount; i++ )
315cdf0e10cSrcweir         {
316cdf0e10cSrcweir             if( IsItemChecked( i ) )
317cdf0e10cSrcweir                 break;
318cdf0e10cSrcweir         }
319cdf0e10cSrcweir         eFormat = (SvxAuthorFormat) ( i - 3 );
320cdf0e10cSrcweir 
321cdf0e10cSrcweir         if( pAuthorField->GetFormat() != eFormat ||
322cdf0e10cSrcweir             pAuthorField->GetType() != eType )
323cdf0e10cSrcweir         {
324cdf0e10cSrcweir             // #91225# Get current state of address, not the old one
325cdf0e10cSrcweir             SvtUserOptions aUserOptions;
326cdf0e10cSrcweir             pNewField = new SvxAuthorField( aUserOptions.GetFirstName(), aUserOptions.GetLastName(), aUserOptions.GetID() );
327cdf0e10cSrcweir             ( (SvxAuthorField*) pNewField )->SetType( eType );
328cdf0e10cSrcweir             ( (SvxAuthorField*) pNewField )->SetFormat( eFormat );
329cdf0e10cSrcweir         }
330cdf0e10cSrcweir     }
331cdf0e10cSrcweir     return( pNewField );
332cdf0e10cSrcweir }
333cdf0e10cSrcweir 
334cdf0e10cSrcweir 
335