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