Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : :
30 : : #ifdef SD_DLLIMPLEMENTATION
31 : : #undef SD_DLLIMPLEMENTATION
32 : : #endif
33 : :
34 : :
35 : :
36 : : #include <editeng/editeng.hxx>
37 : : #include <editeng/eeitem.hxx>
38 : : #include <editeng/flditem.hxx>
39 : : #include <svl/zforlist.hxx>
40 : : #include <sfx2/objsh.hxx>
41 : : #include <sfx2/docfile.hxx>
42 : : #include <svl/itemset.hxx>
43 : : #include <editeng/langitem.hxx>
44 : : #include <unotools/useroptions.hxx>
45 : :
46 : : #include "strings.hrc"
47 : : #include "dlgfield.hrc"
48 : : #include "sdattr.hxx"
49 : : #include "sdresid.hxx"
50 : : #include "sdmod.hxx"
51 : : #include "dlgfield.hxx"
52 : : #include "drawdoc.hxx"
53 : : #include "DrawDocShell.hxx"
54 : :
55 : : /*************************************************************************
56 : : |*
57 : : |* Dialog zum Bearbeiten von Feldbefehlen
58 : : |*
59 : : \************************************************************************/
60 : :
61 : 0 : SdModifyFieldDlg::SdModifyFieldDlg( Window* pWindow, const SvxFieldData* pInField, const SfxItemSet& rSet ) :
62 : : ModalDialog ( pWindow, SdResId( DLG_FIELD_MODIFY ) ),
63 : : aGrpType ( this, SdResId( GRP_TYPE ) ),
64 : : aRbtFix ( this, SdResId( RBT_FIX ) ),
65 : : aRbtVar ( this, SdResId( RBT_VAR ) ),
66 : : maFtLanguage( this, SdResId( FT_LANGUAGE ) ),
67 : : maLbLanguage( this, SdResId( LB_LANGUAGE ) ),
68 : : aFtFormat ( this, SdResId( FT_FORMAT ) ),
69 : : aLbFormat ( this, SdResId( LB_FORMAT ) ),
70 : : aBtnOK ( this, SdResId( BTN_OK ) ),
71 : : aBtnCancel ( this, SdResId( BTN_CANCEL ) ),
72 : : aBtnHelp ( this, SdResId( BTN_HELP ) ),
73 : : maInputSet ( rSet ),
74 : 0 : pField ( pInField )
75 : : {
76 : 0 : FreeResource();
77 : :
78 : 0 : maLbLanguage.SetLanguageList( LANG_LIST_ALL|LANG_LIST_ONLY_KNOWN, false );
79 : 0 : maLbLanguage.SetSelectHdl( LINK( this, SdModifyFieldDlg, LanguageChangeHdl ) );
80 : 0 : FillControls();
81 : 0 : }
82 : :
83 : : /*************************************************************************
84 : : |*
85 : : |* Gibt das neue Feld zurueck, gehoert dem Caller.
86 : : |* Liefert NULL, wenn sich nichts geaendert hat.
87 : : |*
88 : : \************************************************************************/
89 : :
90 : 0 : SvxFieldData* SdModifyFieldDlg::GetField()
91 : : {
92 : 0 : SvxFieldData* pNewField = NULL;
93 : :
94 : 0 : if( aRbtFix.IsChecked() != aRbtFix.GetSavedValue() ||
95 : 0 : aRbtVar.IsChecked() != aRbtVar.GetSavedValue() ||
96 : 0 : aLbFormat.GetSelectEntryPos() != aLbFormat.GetSavedValue() )
97 : : {
98 : 0 : if( pField->ISA( SvxDateField ) )
99 : : {
100 : 0 : const SvxDateField* pDateField = (const SvxDateField*) pField;
101 : : SvxDateType eType;
102 : : SvxDateFormat eFormat;
103 : :
104 : 0 : if( aRbtFix.IsChecked() )
105 : 0 : eType = SVXDATETYPE_FIX;
106 : : else
107 : 0 : eType = SVXDATETYPE_VAR;
108 : :
109 : 0 : eFormat = (SvxDateFormat) ( aLbFormat.GetSelectEntryPos() + 2 );
110 : :
111 : 0 : pNewField = new SvxDateField( *pDateField );
112 : 0 : ( (SvxDateField*) pNewField )->SetType( eType );
113 : 0 : ( (SvxDateField*) pNewField )->SetFormat( eFormat );
114 : : }
115 : 0 : else if( pField->ISA( SvxExtTimeField ) )
116 : : {
117 : 0 : const SvxExtTimeField* pTimeField = (const SvxExtTimeField*) pField;
118 : : SvxTimeType eType;
119 : : SvxTimeFormat eFormat;
120 : :
121 : 0 : if( aRbtFix.IsChecked() )
122 : 0 : eType = SVXTIMETYPE_FIX;
123 : : else
124 : 0 : eType = SVXTIMETYPE_VAR;
125 : :
126 : 0 : eFormat = (SvxTimeFormat) ( aLbFormat.GetSelectEntryPos() + 2 );
127 : :
128 : 0 : pNewField = new SvxExtTimeField( *pTimeField );
129 : 0 : ( (SvxExtTimeField*) pNewField )->SetType( eType );
130 : 0 : ( (SvxExtTimeField*) pNewField )->SetFormat( eFormat );
131 : : }
132 : 0 : else if( pField->ISA( SvxExtFileField ) )
133 : : {
134 : 0 : const SvxExtFileField* pFileField = (const SvxExtFileField*) pField;
135 : : SvxFileType eType;
136 : : SvxFileFormat eFormat;
137 : :
138 : 0 : if( aRbtFix.IsChecked() )
139 : 0 : eType = SVXFILETYPE_FIX;
140 : : else
141 : 0 : eType = SVXFILETYPE_VAR;
142 : :
143 : 0 : eFormat = (SvxFileFormat) ( aLbFormat.GetSelectEntryPos() );
144 : :
145 : 0 : ::sd::DrawDocShell* pDocSh = PTR_CAST( ::sd::DrawDocShell,
146 : : SfxObjectShell::Current() );
147 : :
148 : 0 : if( pDocSh )
149 : : {
150 : 0 : SvxExtFileField aFileField( *pFileField );
151 : :
152 : 0 : String aName;
153 : 0 : if( pDocSh->HasName() )
154 : 0 : aName = pDocSh->GetMedium()->GetName();
155 : :
156 : : // Get current filename, not the one stored in the old field
157 : 0 : pNewField = new SvxExtFileField( aName );
158 : 0 : ( (SvxExtFileField*) pNewField )->SetType( eType );
159 : 0 : ( (SvxExtFileField*) pNewField )->SetFormat( eFormat );
160 : : }
161 : : }
162 : 0 : else if( pField->ISA( SvxAuthorField ) )
163 : : {
164 : : SvxAuthorType eType;
165 : : SvxAuthorFormat eFormat;
166 : :
167 : 0 : if( aRbtFix.IsChecked() )
168 : 0 : eType = SVXAUTHORTYPE_FIX;
169 : : else
170 : 0 : eType = SVXAUTHORTYPE_VAR;
171 : :
172 : 0 : eFormat = (SvxAuthorFormat) ( aLbFormat.GetSelectEntryPos() );
173 : :
174 : : // Get current state of address, not the old one
175 : 0 : SvtUserOptions aUserOptions;
176 : 0 : pNewField = new SvxAuthorField( aUserOptions.GetFirstName(), aUserOptions.GetLastName(), aUserOptions.GetID() );
177 : 0 : ( (SvxAuthorField*) pNewField )->SetType( eType );
178 : 0 : ( (SvxAuthorField*) pNewField )->SetFormat( eFormat );
179 : : }
180 : : }
181 : :
182 : 0 : return( pNewField );
183 : : }
184 : :
185 : 0 : void SdModifyFieldDlg::FillFormatList()
186 : : {
187 : 0 : LanguageType eLangType = maLbLanguage.GetSelectLanguage();
188 : :
189 : 0 : aLbFormat.Clear();
190 : :
191 : 0 : if( pField->ISA( SvxDateField ) )
192 : : {
193 : 0 : const SvxDateField* pDateField = (const SvxDateField*) pField;
194 : 0 : SvxDateField aDateField( *pDateField );
195 : :
196 : : //SVXDATEFORMAT_APPDEFAULT, // Wird nicht benutzt
197 : : //SVXDATEFORMAT_SYSTEM, // Wird nicht benutzt
198 : 0 : aLbFormat.InsertEntry( String( SdResId( STR_STANDARD_SMALL ) ) );
199 : 0 : aLbFormat.InsertEntry( String( SdResId( STR_STANDARD_BIG ) ) );
200 : :
201 : 0 : SvNumberFormatter* pNumberFormatter = SD_MOD()->GetNumberFormatter();
202 : 0 : aDateField.SetFormat( SVXDATEFORMAT_A ); // 13.02.96
203 : 0 : aLbFormat.InsertEntry( aDateField.GetFormatted( *pNumberFormatter, eLangType ) );
204 : 0 : aDateField.SetFormat( SVXDATEFORMAT_B ); // 13.02.1996
205 : 0 : aLbFormat.InsertEntry( aDateField.GetFormatted( *pNumberFormatter, eLangType ) );
206 : 0 : aDateField.SetFormat( SVXDATEFORMAT_C ); // 13.Feb 1996
207 : 0 : aLbFormat.InsertEntry( aDateField.GetFormatted( *pNumberFormatter, eLangType ) );
208 : 0 : aDateField.SetFormat( SVXDATEFORMAT_D ); // 13.Februar 1996
209 : 0 : aLbFormat.InsertEntry( aDateField.GetFormatted( *pNumberFormatter, eLangType ) );
210 : 0 : aDateField.SetFormat( SVXDATEFORMAT_E ); // Die, 13.Februar 1996
211 : 0 : aLbFormat.InsertEntry( aDateField.GetFormatted( *pNumberFormatter, eLangType ) );
212 : 0 : aDateField.SetFormat( SVXDATEFORMAT_F ); // Dienstag, 13.Februar 1996
213 : 0 : aLbFormat.InsertEntry( aDateField.GetFormatted( *pNumberFormatter, eLangType ) );
214 : :
215 : 0 : aLbFormat.SelectEntryPos( (sal_uInt16) ( pDateField->GetFormat() - 2 ) );
216 : : }
217 : 0 : else if( pField->ISA( SvxExtTimeField ) )
218 : : {
219 : 0 : const SvxExtTimeField* pTimeField = (const SvxExtTimeField*) pField;
220 : 0 : SvxExtTimeField aTimeField( *pTimeField );
221 : :
222 : : //SVXTIMEFORMAT_APPDEFAULT, // Wird nicht benutzt
223 : : //SVXTIMEFORMAT_SYSTEM, // Wird nicht benutzt
224 : 0 : aLbFormat.InsertEntry( String( SdResId( STR_STANDARD_NORMAL ) ) );
225 : :
226 : 0 : SvNumberFormatter* pNumberFormatter = SD_MOD()->GetNumberFormatter();
227 : 0 : aTimeField.SetFormat( SVXTIMEFORMAT_24_HM ); // 13:49
228 : 0 : aLbFormat.InsertEntry( aTimeField.GetFormatted( *pNumberFormatter, eLangType ) );
229 : 0 : aTimeField.SetFormat( SVXTIMEFORMAT_24_HMS ); // 13:49:38
230 : 0 : aLbFormat.InsertEntry( aTimeField.GetFormatted( *pNumberFormatter, eLangType ) );
231 : 0 : aTimeField.SetFormat( SVXTIMEFORMAT_24_HMSH ); // 13:49:38.78
232 : 0 : aLbFormat.InsertEntry( aTimeField.GetFormatted( *pNumberFormatter, eLangType ) );
233 : 0 : aTimeField.SetFormat( SVXTIMEFORMAT_12_HM ); // 01:49
234 : 0 : aLbFormat.InsertEntry( aTimeField.GetFormatted( *pNumberFormatter, eLangType ) );
235 : 0 : aTimeField.SetFormat( SVXTIMEFORMAT_12_HMS ); // 01:49:38
236 : 0 : aLbFormat.InsertEntry( aTimeField.GetFormatted( *pNumberFormatter, eLangType ) );
237 : 0 : aTimeField.SetFormat( SVXTIMEFORMAT_12_HMSH ); // 01:49:38.78
238 : 0 : aLbFormat.InsertEntry( aTimeField.GetFormatted( *pNumberFormatter, eLangType ) );
239 : : //SVXTIMEFORMAT_AM_HM, // 01:49 PM
240 : : //SVXTIMEFORMAT_AM_HMS, // 01:49:38 PM
241 : : //SVXTIMEFORMAT_AM_HMSH // 01:49:38.78 PM
242 : :
243 : 0 : aLbFormat.SelectEntryPos( (sal_uInt16) ( pTimeField->GetFormat() - 2 ) );
244 : : }
245 : 0 : else if( pField->ISA( SvxExtFileField ) )
246 : : {
247 : 0 : const SvxExtFileField* pFileField = (const SvxExtFileField*) pField;
248 : 0 : SvxExtFileField aFileField( *pFileField );
249 : :
250 : 0 : aLbFormat.InsertEntry( String( SdResId( STR_FILEFORMAT_NAME_EXT ) ) );
251 : 0 : aLbFormat.InsertEntry( String( SdResId( STR_FILEFORMAT_FULLPATH ) ) );
252 : 0 : aLbFormat.InsertEntry( String( SdResId( STR_FILEFORMAT_PATH ) ) );
253 : 0 : aLbFormat.InsertEntry( String( SdResId( STR_FILEFORMAT_NAME ) ) );
254 : :
255 : 0 : aLbFormat.SelectEntryPos( (sal_uInt16) ( pFileField->GetFormat() ) );
256 : : }
257 : 0 : else if( pField->ISA( SvxAuthorField ) )
258 : : {
259 : 0 : const SvxAuthorField* pAuthorField = (const SvxAuthorField*) pField;
260 : 0 : SvxAuthorField aAuthorField( *pAuthorField );
261 : :
262 : 0 : for( sal_uInt16 i = 0; i < 4; i++ )
263 : : {
264 : 0 : aAuthorField.SetFormat( (SvxAuthorFormat) i );
265 : 0 : aLbFormat.InsertEntry( aAuthorField.GetFormatted() );
266 : : }
267 : :
268 : 0 : aLbFormat.SelectEntryPos( (sal_uInt16) ( pAuthorField->GetFormat() ) );
269 : :
270 : : }
271 : :
272 : :
273 : 0 : }
274 : :
275 : 0 : void SdModifyFieldDlg::FillControls()
276 : : {
277 : 0 : aLbFormat.Clear();
278 : :
279 : 0 : if( pField->ISA( SvxDateField ) )
280 : : {
281 : 0 : const SvxDateField* pDateField = (const SvxDateField*) pField;
282 : 0 : SvxDateField aDateField( *pDateField );
283 : :
284 : 0 : if( pDateField->GetType() == SVXDATETYPE_FIX )
285 : 0 : aRbtFix.Check();
286 : : else
287 : 0 : aRbtVar.Check();
288 : : }
289 : 0 : else if( pField->ISA( SvxExtTimeField ) )
290 : : {
291 : 0 : const SvxExtTimeField* pTimeField = (const SvxExtTimeField*) pField;
292 : 0 : SvxExtTimeField aTimeField( *pTimeField );
293 : :
294 : 0 : if( pTimeField->GetType() == SVXTIMETYPE_FIX )
295 : 0 : aRbtFix.Check();
296 : : else
297 : 0 : aRbtVar.Check();
298 : : }
299 : 0 : else if( pField->ISA( SvxExtFileField ) )
300 : : {
301 : 0 : const SvxExtFileField* pFileField = (const SvxExtFileField*) pField;
302 : 0 : SvxExtFileField aFileField( *pFileField );
303 : :
304 : 0 : if( pFileField->GetType() == SVXFILETYPE_FIX )
305 : 0 : aRbtFix.Check();
306 : : else
307 : 0 : aRbtVar.Check();
308 : : }
309 : 0 : else if( pField->ISA( SvxAuthorField ) )
310 : : {
311 : 0 : const SvxAuthorField* pAuthorField = (const SvxAuthorField*) pField;
312 : 0 : SvxAuthorField aAuthorField( *pAuthorField );
313 : :
314 : 0 : if( pAuthorField->GetType() == SVXAUTHORTYPE_FIX )
315 : 0 : aRbtFix.Check();
316 : : else
317 : 0 : aRbtVar.Check();
318 : : }
319 : 0 : aRbtFix.SaveValue();
320 : 0 : aRbtVar.SaveValue();
321 : :
322 : : const SfxPoolItem* pItem;
323 : 0 : if( SFX_ITEM_SET == maInputSet.GetItemState(EE_CHAR_LANGUAGE, sal_True, &pItem ) )
324 : 0 : maLbLanguage.SelectLanguage( static_cast<const SvxLanguageItem*>(pItem)->GetLanguage() );
325 : :
326 : 0 : maLbLanguage.SaveValue();
327 : :
328 : 0 : FillFormatList();
329 : 0 : aLbFormat.SaveValue();
330 : 0 : }
331 : :
332 : :
333 : 0 : IMPL_LINK_NOARG(SdModifyFieldDlg, LanguageChangeHdl)
334 : : {
335 : 0 : FillFormatList();
336 : :
337 : 0 : return 0L;
338 : : }
339 : :
340 : 0 : SfxItemSet SdModifyFieldDlg::GetItemSet()
341 : : {
342 : 0 : SfxItemSet aOutput( *maInputSet.GetPool(), EE_CHAR_LANGUAGE, EE_CHAR_LANGUAGE_CTL );
343 : :
344 : 0 : if( maLbLanguage.GetSelectEntryPos() != maLbLanguage.GetSavedValue() )
345 : : {
346 : 0 : LanguageType eLangType = maLbLanguage.GetSelectLanguage();
347 : 0 : SvxLanguageItem aItem( eLangType, EE_CHAR_LANGUAGE );
348 : 0 : aOutput.Put( aItem );
349 : :
350 : 0 : SvxLanguageItem aItemCJK( eLangType, EE_CHAR_LANGUAGE_CJK );
351 : 0 : aOutput.Put( aItemCJK );
352 : :
353 : 0 : SvxLanguageItem aItemCTL( eLangType, EE_CHAR_LANGUAGE_CTL );
354 : 0 : aOutput.Put( aItemCTL );
355 : : }
356 : :
357 : 0 : return aOutput;
358 : : }
359 : :
360 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|