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_sc.hxx"
26
27 #undef SC_DLLIMPLEMENTATION
28
29
30
31 //------------------------------------------------------------------
32
33 #define _TPHFEDIT_CXX
34 #include "scitems.hxx"
35 #include <editeng/eeitem.hxx>
36
37 //CHINA001 #include <svx/chardlg.hxx>
38 #include <editeng/editobj.hxx>
39 #include <editeng/editstat.hxx>
40 #include <editeng/editview.hxx>
41 #include <editeng/flditem.hxx>
42 #include <sfx2/basedlgs.hxx>
43 #include <sfx2/objsh.hxx>
44 #include <vcl/msgbox.hxx>
45 #include <vcl/svapp.hxx>
46 #include <unotools/useroptions.hxx>
47 #define _SVSTDARR_USHORTS
48 #include <svl/svstdarr.hxx>
49
50 //CHINA001 #include "tphfedit.hxx"
51 #include "editutil.hxx"
52 #include "global.hxx"
53 #include "attrib.hxx"
54 #include "patattr.hxx"
55 #include "scresid.hxx"
56 #include "sc.hrc"
57 #include "globstr.hrc"
58 #include "tabvwsh.hxx"
59 #include "prevwsh.hxx"
60 #include "hfedtdlg.hrc"
61 #include "textdlgs.hxx"
62 #include "AccessibleEditObject.hxx"
63
64 #include "scuitphfedit.hxx" //CHINA001
65 #include <memory> // header file for auto_ptr
66
67 // STATIC DATA -----------------------------------------------------------
68
69 static sal_uInt16 pPageRightHeaderRanges[] = { SID_SCATTR_PAGE_HEADERRIGHT,
70 SID_SCATTR_PAGE_HEADERRIGHT,
71 0 };
72
73 static sal_uInt16 pPageRightFooterRanges[] = { SID_SCATTR_PAGE_FOOTERRIGHT,
74 SID_SCATTR_PAGE_FOOTERRIGHT,
75 0 };
76
77 static sal_uInt16 pPageLeftHeaderRanges[] = { SID_SCATTR_PAGE_HEADERLEFT,
78 SID_SCATTR_PAGE_HEADERLEFT,
79 0 };
80
81 static sal_uInt16 pPageLeftFooterRanges[] = { SID_SCATTR_PAGE_FOOTERLEFT,
82 SID_SCATTR_PAGE_FOOTERLEFT,
83 0 };
84
85
86 static ScEditWindow* pActiveEdWnd = NULL;
87
88
89 //========================================================================
90 // class ScHFEditPage
91 //
92
ScHFEditPage(Window * pParent,sal_uInt16 nResId,const SfxItemSet & rCoreAttrs,sal_uInt16 nWhichId,bool bHeader)93 ScHFEditPage::ScHFEditPage( Window* pParent,
94 sal_uInt16 nResId,
95 const SfxItemSet& rCoreAttrs,
96 sal_uInt16 nWhichId,
97 bool bHeader )
98
99 : SfxTabPage ( pParent, ScResId( nResId ), rCoreAttrs ),
100
101 aFtLeft ( this, ScResId( FT_LEFT ) ),
102 aWndLeft ( this, ScResId( WND_LEFT ), Left ),
103 aFtCenter ( this, ScResId( FT_CENTER ) ),
104 aWndCenter ( this, ScResId( WND_CENTER ), Center ),
105 aFtRight ( this, ScResId( FT_RIGHT ) ),
106 aWndRight ( this, ScResId( WND_RIGHT ), Right ),
107 maFtDefinedHF ( this, ScResId( FT_HF_DEFINED ) ),
108 maLbDefined ( this, ScResId( LB_DEFINED ) ),
109 maFtCustomHF ( this, ScResId( FT_HF_CUSTOM ) ),
110 aBtnText ( this, ScResId( BTN_TEXT ) ),
111 aBtnFile ( this, ScResId( BTN_FILE ) ),
112 aBtnTable ( this, ScResId( BTN_TABLE ) ),
113 aBtnPage ( this, ScResId( BTN_PAGE ) ),
114 aBtnLastPage ( this, ScResId( BTN_PAGES ) ),
115 aBtnDate ( this, ScResId( BTN_DATE ) ),
116 aBtnTime ( this, ScResId( BTN_TIME ) ),
117 aFlInfo ( this, ScResId( FL_INFO ) ),
118 aFtInfo ( this, ScResId( FT_INFO ) ),
119 aPopUpFile ( ScResId( RID_POPUP_FCOMMAND) ),
120 nWhich ( nWhichId )
121 {
122 //! use default style from current document?
123 //! if font color is used, header/footer background color must be set
124
125 ScPatternAttr aPatAttr( rCoreAttrs.GetPool() );
126
127
128 aBtnFile.SetPopupMenu(&aPopUpFile);
129
130 maLbDefined.SetSelectHdl( LINK( this, ScHFEditPage, ListHdl_Impl ) );
131 aBtnFile.SetMenuHdl( LINK( this, ScHFEditPage, MenuHdl ) );
132 aBtnText .SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
133 aBtnPage .SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
134 aBtnLastPage.SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
135 aBtnDate .SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
136 aBtnTime .SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
137 aBtnFile .SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
138 aBtnTable .SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
139
140 aBtnText .SetModeImage( Image( ScResId( IMG_TEXT_H ) ), BMP_COLOR_HIGHCONTRAST );
141 aBtnFile .SetModeImage( Image( ScResId( IMG_FILE_H ) ), BMP_COLOR_HIGHCONTRAST );
142 aBtnTable .SetModeImage( Image( ScResId( IMG_TABLE_H ) ), BMP_COLOR_HIGHCONTRAST );
143 aBtnPage .SetModeImage( Image( ScResId( IMG_PAGE_H ) ), BMP_COLOR_HIGHCONTRAST );
144 aBtnLastPage.SetModeImage( Image( ScResId( IMG_PAGES_H ) ), BMP_COLOR_HIGHCONTRAST );
145 aBtnDate .SetModeImage( Image( ScResId( IMG_DATE_H ) ), BMP_COLOR_HIGHCONTRAST );
146 aBtnTime .SetModeImage( Image( ScResId( IMG_TIME_H ) ), BMP_COLOR_HIGHCONTRAST );
147
148 if(!bHeader)
149 {
150 maFtDefinedHF.SetText(ScGlobal::GetRscString( STR_FOOTER ));
151 maFtCustomHF.SetText(ScGlobal::GetRscString( STR_HF_CUSTOM_FOOTER ));
152 }
153 if( Application::GetSettings().GetLayoutRTL() )
154 {
155 Point pt1 = aWndLeft.GetPosPixel();
156 Point pt2 = aWndRight.GetPosPixel();
157 aWndLeft.SetPosPixel(pt2);
158 aWndRight.SetPosPixel(pt1);
159
160 pt1 = aFtLeft.GetPosPixel();
161 pt2 = aFtRight.GetPosPixel();
162 aFtLeft.SetPosPixel(pt2);
163 aFtRight.SetPosPixel(pt1);
164 }
165 aWndLeft. SetFont( aPatAttr );
166 aWndCenter. SetFont( aPatAttr );
167 aWndRight. SetFont( aPatAttr );
168
169 aWndLeft.SetObjectSelectHdl( LINK(this,ScHFEditPage,ObjectSelectHdl) );
170 aWndCenter.SetObjectSelectHdl( LINK(this,ScHFEditPage,ObjectSelectHdl) );
171 aWndRight.SetObjectSelectHdl( LINK(this,ScHFEditPage,ObjectSelectHdl) );
172 aBtnText.SetAccessibleRelationMemberOf( &maFtCustomHF );
173 aBtnFile.SetAccessibleRelationMemberOf( &maFtCustomHF );
174 aBtnTable.SetAccessibleRelationMemberOf( &maFtCustomHF );
175 aBtnPage.SetAccessibleRelationMemberOf( &maFtCustomHF );
176 aBtnLastPage.SetAccessibleRelationMemberOf( &maFtCustomHF );
177 aBtnDate.SetAccessibleRelationMemberOf( &maFtCustomHF );
178 aBtnTime.SetAccessibleRelationMemberOf( &maFtCustomHF );
179 FillCmdArr();
180
181 aWndLeft.GrabFocus();
182
183 InitPreDefinedList();
184
185 FreeResource();
186 }
IMPL_LINK(ScHFEditPage,ObjectSelectHdl,ScEditWindow *,pEdit)187 IMPL_LINK( ScHFEditPage, ObjectSelectHdl, ScEditWindow*, pEdit )
188 {
189 (void)pEdit;
190 aBtnText.GrabFocus();
191 return NULL;
192 }
193
194 // -----------------------------------------------------------------------
195
~ScHFEditPage()196 __EXPORT ScHFEditPage::~ScHFEditPage()
197 {
198 }
199
SetNumType(SvxNumType eNumType)200 void ScHFEditPage::SetNumType(SvxNumType eNumType)
201 {
202 aWndLeft.SetNumType(eNumType);
203 aWndCenter.SetNumType(eNumType);
204 aWndRight.SetNumType(eNumType);
205 }
206
207 // -----------------------------------------------------------------------
208
209 #define IS_AVAILABLE(w)(rCoreSet.GetItemState( (w) ) >= SFX_ITEM_AVAILABLE)
210
Reset(const SfxItemSet & rCoreSet)211 void __EXPORT ScHFEditPage::Reset( const SfxItemSet& rCoreSet )
212 {
213 if ( IS_AVAILABLE( nWhich ) )
214 {
215 const ScPageHFItem& rItem = (const ScPageHFItem&)(rCoreSet.Get( nWhich ));
216
217 if( const EditTextObject* pLeft = rItem.GetLeftArea() )
218 aWndLeft.SetText( *pLeft );
219 if( const EditTextObject* pCenter = rItem.GetCenterArea() )
220 aWndCenter.SetText( *pCenter );
221 if( const EditTextObject* pRight = rItem.GetRightArea() )
222 aWndRight.SetText( *pRight );
223
224 SetSelectDefinedList();
225 }
226 }
227
228 #undef IS_AVAILABLE
229
230 // -----------------------------------------------------------------------
231
FillItemSet(SfxItemSet & rCoreSet)232 sal_Bool __EXPORT ScHFEditPage::FillItemSet( SfxItemSet& rCoreSet )
233 {
234 ScPageHFItem aItem( nWhich );
235 EditTextObject* pLeft = aWndLeft .CreateTextObject();
236 EditTextObject* pCenter = aWndCenter.CreateTextObject();
237 EditTextObject* pRight = aWndRight .CreateTextObject();
238
239 aItem.SetLeftArea ( *pLeft );
240 aItem.SetCenterArea( *pCenter );
241 aItem.SetRightArea ( *pRight );
242 delete pLeft;
243 delete pCenter;
244 delete pRight;
245
246 rCoreSet.Put( aItem );
247
248 return sal_True;
249 }
250
251 // -----------------------------------------------------------------------
252
253 #define SET_CMD(i,id) \
254 aCmd = aDel; \
255 aCmd += ScGlobal::GetRscString( id ); \
256 aCmd += aDel; \
257 aCmdArr[i] = aCmd;
258
259 // -----------------------------------------------------------------------
260
FillCmdArr()261 void ScHFEditPage::FillCmdArr()
262 {
263 String aDel( ScGlobal::GetRscString( STR_HFCMD_DELIMITER ) );
264 String aCmd;
265
266 SET_CMD( 0, STR_HFCMD_PAGE )
267 SET_CMD( 1, STR_HFCMD_PAGES )
268 SET_CMD( 2, STR_HFCMD_DATE )
269 SET_CMD( 3, STR_HFCMD_TIME )
270 SET_CMD( 4, STR_HFCMD_FILE )
271 SET_CMD( 5, STR_HFCMD_TABLE )
272 }
273
274 #undef SET_CMD
275
InitPreDefinedList()276 void ScHFEditPage::InitPreDefinedList()
277 {
278 SvtUserOptions aUserOpt;
279
280 Color* pTxtColour = NULL;
281 Color* pFldColour = NULL;
282
283 // Get the all field values at the outset.
284 String aPageFieldValue(aWndLeft.GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
285 String aSheetFieldValue(aWndLeft.GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
286 String aFileFieldValue(aWndLeft.GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxFileField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
287 String aExtFileFieldValue(aWndLeft.GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxExtFileField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
288 String aDateFieldValue(aWndLeft.GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxDateField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
289
290 maLbDefined.Clear();
291
292 maLbDefined.InsertEntry( ScGlobal::GetRscString( STR_HF_NONE_IN_BRACKETS ));
293
294 String aPageEntry(ScGlobal::GetRscString( STR_PAGE ) );
295 aPageEntry += ' ';
296 aPageEntry += aPageFieldValue;
297 maLbDefined.InsertEntry(aPageEntry);
298
299 String aPageOfEntry(aPageEntry);
300 aPageOfEntry += ' ';
301 aPageOfEntry += ScGlobal::GetRscString( STR_HF_OF_QUESTION );
302 maLbDefined.InsertEntry( aPageOfEntry);
303
304 maLbDefined.InsertEntry(aSheetFieldValue);
305
306 String aConfidentialEntry(aUserOpt.GetCompany());
307 aConfidentialEntry += ' ';
308 aConfidentialEntry += ScGlobal::GetRscString( STR_HF_CONFIDENTIAL );
309 aConfidentialEntry.AppendAscii(RTL_CONSTASCII_STRINGPARAM(", "));
310 aConfidentialEntry += aDateFieldValue;
311 aConfidentialEntry.AppendAscii(RTL_CONSTASCII_STRINGPARAM(", "));
312 aConfidentialEntry += aPageEntry;
313 maLbDefined.InsertEntry( aConfidentialEntry);
314
315 String aFileNamePageEntry(aFileFieldValue);
316 aFileNamePageEntry.AppendAscii(RTL_CONSTASCII_STRINGPARAM(", "));
317 aFileNamePageEntry += aPageEntry;
318 maLbDefined.InsertEntry( aFileNamePageEntry);
319
320 maLbDefined.InsertEntry( aExtFileFieldValue);
321
322 String aPageSheetNameEntry(aPageEntry);
323 aPageSheetNameEntry.AppendAscii(RTL_CONSTASCII_STRINGPARAM(", "));
324 aPageSheetNameEntry += aSheetFieldValue;
325 maLbDefined.InsertEntry( aPageSheetNameEntry);
326
327 String aPageFileNameEntry(aPageEntry);
328 aPageFileNameEntry.AppendAscii(RTL_CONSTASCII_STRINGPARAM(", "));
329 aPageFileNameEntry += aFileFieldValue;
330 maLbDefined.InsertEntry( aPageFileNameEntry);
331
332 String aPagePathNameEntry(aPageEntry);
333 aPagePathNameEntry.AppendAscii(RTL_CONSTASCII_STRINGPARAM(", "));
334 aPagePathNameEntry += aExtFileFieldValue;
335 maLbDefined.InsertEntry( aPagePathNameEntry);
336
337 String aUserNameEntry(aUserOpt.GetFirstName());
338 aUserNameEntry += ' ';
339 aUserNameEntry += (String)aUserOpt.GetLastName();
340 aUserNameEntry.AppendAscii(RTL_CONSTASCII_STRINGPARAM(", "));
341 aUserNameEntry += aPageEntry;
342 aUserNameEntry.AppendAscii(RTL_CONSTASCII_STRINGPARAM(", "));
343 aUserNameEntry += aDateFieldValue;
344 maLbDefined.InsertEntry( aUserNameEntry);
345
346 String aCreatedByEntry(ScGlobal::GetRscString( STR_HF_CREATED_BY ) );
347 aCreatedByEntry += ' ';
348 aCreatedByEntry += (String)aUserOpt.GetFirstName();
349 aCreatedByEntry += ' ';
350 aCreatedByEntry += (String)aUserOpt.GetLastName();
351 aCreatedByEntry.AppendAscii(RTL_CONSTASCII_STRINGPARAM(", "));
352 aCreatedByEntry += aDateFieldValue;
353 aCreatedByEntry.AppendAscii(RTL_CONSTASCII_STRINGPARAM(", "));
354 aCreatedByEntry += aPageEntry;
355 maLbDefined.InsertEntry( aCreatedByEntry);
356 }
357
InsertToDefinedList()358 void ScHFEditPage::InsertToDefinedList()
359 {
360 sal_uInt16 nCount = maLbDefined.GetEntryCount();
361 if(nCount == eEntryCount)
362 {
363 String aCustomizedEntry(ScGlobal::GetRscString( STR_HF_CUSTOMIZED ) );
364 maLbDefined.InsertEntry( aCustomizedEntry);
365 maLbDefined.SelectEntryPos(eEntryCount);
366 }
367 }
368
RemoveFromDefinedList()369 void ScHFEditPage::RemoveFromDefinedList()
370 {
371 sal_uInt16 nCount = maLbDefined.GetEntryCount();
372 if(nCount > eEntryCount )
373 maLbDefined.RemoveEntry( nCount-1);
374 }
375
376 // determine if the header/footer exists in our predefined list and set select to it.
SetSelectDefinedList()377 void ScHFEditPage::SetSelectDefinedList()
378 {
379 SvtUserOptions aUserOpt;
380
381 // default to customized
382 ScHFEntryId eSelectEntry = eEntryCount;
383
384 ::std::auto_ptr< EditTextObject > pLeftObj;
385 ::std::auto_ptr< EditTextObject > pCenterObj;
386 ::std::auto_ptr< EditTextObject > pRightObj;
387
388 XubString aLeftEntry;
389 XubString aCenterEntry;
390 XubString aRightEntry;
391
392 pLeftObj.reset(aWndLeft.GetEditEngine()->CreateTextObject());
393 pCenterObj.reset(aWndCenter.GetEditEngine()->CreateTextObject());
394 pRightObj.reset(aWndRight.GetEditEngine()->CreateTextObject());
395
396 bool bFound = false;
397
398 sal_uInt16 i;
399 sal_uInt16 nCount = maLbDefined.GetEntryCount();
400 for(i = 0; i < nCount && !bFound; i++)
401 {
402 switch(static_cast<ScHFEntryId>(i))
403 {
404 case eNoneEntry:
405 {
406 aLeftEntry = pLeftObj->GetText(0);
407 aCenterEntry = pCenterObj->GetText(0);
408 aRightEntry = pRightObj->GetText(0);
409 if(aLeftEntry == EMPTY_STRING && aCenterEntry == EMPTY_STRING
410 && aRightEntry == EMPTY_STRING)
411 {
412 eSelectEntry = eNoneEntry;
413 bFound = true;
414 }
415 }
416 break;
417
418 case ePageEntry:
419 {
420 aLeftEntry = pLeftObj->GetText(0);
421 aRightEntry = pRightObj->GetText(0);
422 if(aLeftEntry == EMPTY_STRING && aRightEntry == EMPTY_STRING)
423 {
424 if(IsPageEntry(aWndCenter.GetEditEngine(), pCenterObj.get()))
425 {
426 eSelectEntry = ePageEntry;
427 bFound = true;
428 }
429 }
430 }
431 break;
432
433
434 //TODO
435 case ePagesEntry:
436 {
437 }
438 break;
439
440 case eSheetEntry:
441 {
442 aLeftEntry = pLeftObj->GetText(0);
443 aRightEntry = pRightObj->GetText(0);
444 if(aLeftEntry == EMPTY_STRING && aRightEntry == EMPTY_STRING)
445 {
446 if(pCenterObj->IsFieldObject())
447 {
448 const SvxFieldItem* pFieldItem = pCenterObj->GetField();
449 if(pFieldItem)
450 {
451 const SvxFieldData* pField = pFieldItem->GetField();
452 if(pField && pField->ISA(SvxTableField))
453 {
454 eSelectEntry = eSheetEntry;
455 bFound = true;
456 }
457 }
458 }
459 }
460 }
461 break;
462
463 case eConfidentialEntry:
464 {
465 if(IsDateEntry(pCenterObj.get()) && IsPageEntry(aWndRight.GetEditEngine(), pRightObj.get()))
466 {
467 String aConfidentialEntry(aUserOpt.GetCompany());
468 aConfidentialEntry += ' ';
469 aConfidentialEntry += ScGlobal::GetRscString( STR_HF_CONFIDENTIAL );
470 if(aConfidentialEntry == aWndLeft.GetEditEngine()->GetText(0))
471 {
472 eSelectEntry = eConfidentialEntry;
473 bFound = true;
474 }
475 }
476 }
477 break;
478
479 //TODO
480 case eFileNamePageEntry:
481 {
482 }
483 break;
484
485 case eExtFileNameEntry:
486 {
487 aLeftEntry = pLeftObj->GetText(0);
488 aRightEntry = pRightObj->GetText(0);
489 if(IsExtFileNameEntry(pCenterObj.get()) && aLeftEntry == EMPTY_STRING
490 && aRightEntry == EMPTY_STRING)
491 {
492 eSelectEntry = eExtFileNameEntry;
493 bFound = true;
494 }
495 }
496 break;
497
498 //TODO
499 case ePageSheetEntry:
500 {
501 }
502 break;
503
504 //TODO
505 case ePageFileNameEntry:
506 {
507 }
508 break;
509
510 case ePageExtFileNameEntry:
511 {
512 aLeftEntry = pLeftObj->GetText(0);
513 if(IsPageEntry(aWndCenter.GetEditEngine(), pCenterObj.get()) &&
514 IsExtFileNameEntry(pRightObj.get()) && aLeftEntry == EMPTY_STRING)
515 {
516 eSelectEntry = ePageExtFileNameEntry;
517 bFound = true;
518 }
519 }
520 break;
521
522 case eUserNameEntry:
523 {
524 if(IsDateEntry(pRightObj.get()) && IsPageEntry(aWndCenter.GetEditEngine(), pCenterObj.get()))
525 {
526 String aUserNameEntry(aUserOpt.GetFirstName());
527 aUserNameEntry += ' ';
528 aUserNameEntry += (String)aUserOpt.GetLastName();
529 if(aUserNameEntry == aWndLeft.GetEditEngine()->GetText(0))
530 {
531 eSelectEntry = eUserNameEntry;
532 bFound = true;
533 }
534 }
535 }
536 break;
537
538 case eCreatedByEntry:
539 {
540 if(IsDateEntry(pCenterObj.get()) && IsPageEntry(aWndRight.GetEditEngine(), pRightObj.get()))
541 {
542 String aCreatedByEntry(ScGlobal::GetRscString( STR_HF_CREATED_BY ) );
543 aCreatedByEntry += ' ';
544 aCreatedByEntry += (String)aUserOpt.GetFirstName();
545 aCreatedByEntry += ' ';
546 aCreatedByEntry += (String)aUserOpt.GetLastName();
547 if(aCreatedByEntry == aWndLeft.GetEditEngine()->GetText(0))
548 {
549 eSelectEntry = eCreatedByEntry;
550 bFound = true;
551 }
552 }
553 }
554 break;
555
556 default:
557 {
558 // added to avoid warnings
559 }
560 }
561 }
562
563 if(eSelectEntry == eEntryCount)
564 InsertToDefinedList();
565
566 maLbDefined.SelectEntryPos( sal::static_int_cast<sal_uInt16>( eSelectEntry ) );
567 }
568
IsPageEntry(EditEngine * pEngine,EditTextObject * pTextObj)569 bool ScHFEditPage::IsPageEntry(EditEngine*pEngine, EditTextObject* pTextObj)
570 {
571 if(!pEngine && !pTextObj)
572 return false;
573
574 bool bReturn = false;
575
576 if(!pTextObj->IsFieldObject())
577 {
578 SvUShorts aPosList;
579 pEngine->GetPortions(0,aPosList);
580 if(aPosList.Count() == 2)
581 {
582 String aPageEntry(ScGlobal::GetRscString( STR_PAGE ) );
583 aPageEntry += ' ';
584 ESelection aSel(0,0,0,0);
585 aSel.nEndPos = aPageEntry.Len();
586 if(aPageEntry == pEngine->GetText(aSel))
587 {
588 aSel.nStartPos = aSel.nEndPos;
589 aSel.nEndPos++;
590 ::std::auto_ptr< EditTextObject > pPageObj;
591 pPageObj.reset(pEngine->CreateTextObject(aSel));
592 if(pPageObj.get() && pPageObj->IsFieldObject() )
593 {
594 const SvxFieldItem* pFieldItem = pPageObj->GetField();
595 if(pFieldItem)
596 {
597 const SvxFieldData* pField = pFieldItem->GetField();
598 if(pField && pField->ISA(SvxPageField))
599 bReturn = true;
600 }
601 }
602 }
603 }
604 }
605 return bReturn;
606 }
607
IsDateEntry(EditTextObject * pTextObj)608 bool ScHFEditPage::IsDateEntry(EditTextObject* pTextObj)
609 {
610 if(!pTextObj)
611 return false;
612
613 bool bReturn = false;
614 if(pTextObj->IsFieldObject())
615 {
616 const SvxFieldItem* pFieldItem = pTextObj->GetField();
617 if(pFieldItem)
618 {
619 const SvxFieldData* pField = pFieldItem->GetField();
620 if(pField && pField->ISA(SvxDateField))
621 bReturn = true;
622 }
623 }
624 return bReturn;
625 }
626
IsExtFileNameEntry(EditTextObject * pTextObj)627 bool ScHFEditPage::IsExtFileNameEntry(EditTextObject* pTextObj)
628 {
629 if(!pTextObj)
630 return false;
631 bool bReturn = false;
632 if(pTextObj->IsFieldObject())
633 {
634 const SvxFieldItem* pFieldItem = pTextObj->GetField();
635 if(pFieldItem)
636 {
637 const SvxFieldData* pField = pFieldItem->GetField();
638 if(pField && pField->ISA(SvxExtFileField))
639 bReturn = true;
640 }
641 }
642 return bReturn;
643 }
644
ProcessDefinedListSel(ScHFEntryId eSel,bool bTravelling)645 void ScHFEditPage::ProcessDefinedListSel(ScHFEntryId eSel, bool bTravelling)
646 {
647 SvtUserOptions aUserOpt;
648 ::std::auto_ptr< EditTextObject > pTextObj;
649
650 switch(eSel)
651 {
652 case eNoneEntry:
653 ClearTextAreas();
654 if(!bTravelling)
655 aWndLeft.GrabFocus();
656 break;
657
658 case ePageEntry:
659 {
660 ClearTextAreas();
661 String aPageEntry(ScGlobal::GetRscString( STR_PAGE ) );
662 aPageEntry += ' ';
663 aWndCenter.GetEditEngine()->SetText(aPageEntry);
664 aWndCenter.InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD) );
665 if(!bTravelling)
666 aWndCenter.GrabFocus();
667 }
668 break;
669
670 case ePagesEntry:
671 {
672 ClearTextAreas();
673 ESelection aSel(0,0,0,0);
674 String aPageEntry(ScGlobal::GetRscString( STR_PAGE ) );
675 aPageEntry += ' ';
676 aWndCenter.GetEditEngine()->SetText(aPageEntry);
677 aSel.nEndPos = aPageEntry.Len();
678 aWndCenter.GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
679 ++aSel.nEndPos;
680 String aPageOfEntry = ' ';
681 aPageOfEntry += ScGlobal::GetRscString( STR_HF_OF );
682 aPageOfEntry += ' ';
683 aWndCenter.GetEditEngine()->QuickInsertText(aPageOfEntry,ESelection(aSel.nEndPara,aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
684 aSel.nEndPos = sal::static_int_cast<xub_StrLen>( aSel.nEndPos + aPageOfEntry.Len() );
685 aWndCenter.GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPagesField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara,aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
686 pTextObj.reset(aWndCenter.GetEditEngine()->CreateTextObject());
687 aWndCenter.SetText(*pTextObj);
688 XubString aEntry(pTextObj.get()->GetText(0));
689 if(!bTravelling)
690 aWndCenter.GrabFocus();
691 }
692 break;
693
694 case eSheetEntry:
695 ClearTextAreas();
696 aWndCenter.InsertField( SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD) );
697 if(!bTravelling)
698 aWndCenter.GrabFocus();
699 break;
700
701 case eConfidentialEntry:
702 {
703 ClearTextAreas();
704 String aConfidentialEntry(aUserOpt.GetCompany());
705 aConfidentialEntry += ' ';
706 aConfidentialEntry += ScGlobal::GetRscString( STR_HF_CONFIDENTIAL );
707 aWndLeft.GetEditEngine()->SetText(aConfidentialEntry);
708 aWndCenter.InsertField( SvxFieldItem(SvxDateField(Date(),SVXDATETYPE_VAR), EE_FEATURE_FIELD) );
709 String aPageEntry(ScGlobal::GetRscString( STR_PAGE ) );
710 aPageEntry += ' ';
711 aWndRight.GetEditEngine()->SetText(aPageEntry);
712 aWndRight.InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD) );
713 if(!bTravelling)
714 aWndRight.GrabFocus();
715 }
716 break;
717
718 case eFileNamePageEntry:
719 {
720 ClearTextAreas();
721 ESelection aSel(0,0,0,0);
722 aWndCenter.GetEditEngine()->QuickInsertField(SvxFieldItem( SvxFileField(), EE_FEATURE_FIELD ), aSel );
723 ++aSel.nEndPos;
724 String aPageEntry(RTL_CONSTASCII_STRINGPARAM(", "));
725 aPageEntry += ScGlobal::GetRscString( STR_PAGE ) ;
726 aPageEntry += ' ';
727 aWndCenter.GetEditEngine()->QuickInsertText(aPageEntry, ESelection(aSel.nEndPara,aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
728 aSel.nStartPos = aSel.nEndPos;
729 aSel.nEndPos = sal::static_int_cast<xub_StrLen>( aSel.nEndPos + aPageEntry.Len() );
730 aWndCenter.GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara,aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
731 pTextObj.reset(aWndCenter.GetEditEngine()->CreateTextObject());
732 aWndCenter.SetText(*pTextObj);
733 XubString aEntry2(pTextObj.get()->GetText(0));
734 if(!bTravelling)
735 aWndCenter.GrabFocus();
736 }
737 break;
738
739 case eExtFileNameEntry:
740 ClearTextAreas();
741 aWndCenter.InsertField( SvxFieldItem( SvxExtFileField(
742 EMPTY_STRING, SVXFILETYPE_VAR, SVXFILEFORMAT_FULLPATH ), EE_FEATURE_FIELD ) );
743 if(!bTravelling)
744 aWndCenter.GrabFocus();
745 break;
746
747 case ePageSheetEntry:
748 {
749 ClearTextAreas();
750 ESelection aSel(0,0,0,0);
751 String aPageEntry(ScGlobal::GetRscString( STR_PAGE ) );
752 aPageEntry += ' ';
753 aWndCenter.GetEditEngine()->SetText(aPageEntry);
754 aSel.nEndPos = aPageEntry.Len();
755 aWndCenter.GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
756 ++aSel.nEndPos;
757 String aCommaSpace(RTL_CONSTASCII_STRINGPARAM(", "));
758 aWndCenter.GetEditEngine()->QuickInsertText(aCommaSpace,ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
759 aSel.nEndPos = sal::static_int_cast<xub_StrLen>( aSel.nEndPos + aCommaSpace.Len() );
760 aWndCenter.GetEditEngine()->QuickInsertField( SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
761 pTextObj.reset(aWndCenter.GetEditEngine()->CreateTextObject());
762 aWndCenter.SetText(*pTextObj);
763 if(!bTravelling)
764 aWndCenter.GrabFocus();
765 }
766 break;
767
768 case ePageFileNameEntry:
769 {
770 ClearTextAreas();
771 ESelection aSel(0,0,0,0);
772 String aPageEntry(ScGlobal::GetRscString( STR_PAGE ) );
773 aPageEntry += ' ';
774 aWndCenter.GetEditEngine()->SetText(aPageEntry);
775 aSel.nEndPos = aPageEntry.Len();
776 aWndCenter.GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
777 ++aSel.nEndPos;
778 String aCommaSpace(RTL_CONSTASCII_STRINGPARAM(", "));
779 aWndCenter.GetEditEngine()->QuickInsertText(aCommaSpace,ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
780 aSel.nEndPos = sal::static_int_cast<xub_StrLen>( aSel.nEndPos + aCommaSpace.Len() );
781 aWndCenter.GetEditEngine()->QuickInsertField( SvxFieldItem(SvxFileField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
782 pTextObj.reset(aWndCenter.GetEditEngine()->CreateTextObject());
783 aWndCenter.SetText(*pTextObj);
784 if(!bTravelling)
785 aWndCenter.GrabFocus();
786 }
787 break;
788
789 case ePageExtFileNameEntry:
790 {
791 ClearTextAreas();
792 String aPageEntry(ScGlobal::GetRscString( STR_PAGE ) );
793 aPageEntry += ' ';
794 aWndCenter.GetEditEngine()->SetText(aPageEntry);
795 aWndCenter.InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD) );
796 aWndRight.InsertField( SvxFieldItem( SvxExtFileField(
797 EMPTY_STRING, SVXFILETYPE_VAR, SVXFILEFORMAT_FULLPATH ), EE_FEATURE_FIELD ) );
798 if(!bTravelling)
799 aWndRight.GrabFocus();
800 }
801 break;
802
803 case eUserNameEntry:
804 {
805 ClearTextAreas();
806 String aUserNameEntry(aUserOpt.GetFirstName());
807 aUserNameEntry += ' ';
808 aUserNameEntry += (String)aUserOpt.GetLastName();
809 aWndLeft.GetEditEngine()->SetText(aUserNameEntry);
810 String aPageEntry(ScGlobal::GetRscString( STR_PAGE ) );
811 aPageEntry += ' ';
812 aWndCenter.GetEditEngine()->SetText(aPageEntry);
813 aWndCenter.InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD) );
814 aWndRight.InsertField( SvxFieldItem(SvxDateField(Date(),SVXDATETYPE_VAR), EE_FEATURE_FIELD) );
815 if(!bTravelling)
816 aWndRight.GrabFocus();
817 }
818 break;
819
820 case eCreatedByEntry:
821 {
822 ClearTextAreas();
823 String aCreatedByEntry(ScGlobal::GetRscString( STR_HF_CREATED_BY ) );
824 aCreatedByEntry += ' ';
825 aCreatedByEntry += (String)aUserOpt.GetFirstName();
826 aCreatedByEntry += ' ';
827 aCreatedByEntry += (String)aUserOpt.GetLastName();
828 aWndLeft.GetEditEngine()->SetText(aCreatedByEntry);
829 aWndCenter.InsertField( SvxFieldItem(SvxDateField(Date(),SVXDATETYPE_VAR), EE_FEATURE_FIELD) );
830 String aPageEntry(ScGlobal::GetRscString( STR_PAGE ) );
831 aPageEntry += ' ';
832 aWndRight.GetEditEngine()->SetText(aPageEntry);
833 aWndRight.InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD) );
834 if(!bTravelling)
835 aWndRight.GrabFocus();
836 }
837 break;
838
839 default :
840 break;
841 }
842 }
843
ClearTextAreas()844 void ScHFEditPage::ClearTextAreas()
845 {
846 aWndLeft.GetEditEngine()->SetText(EMPTY_STRING);
847 aWndLeft.Invalidate();
848 aWndCenter.GetEditEngine()->SetText(EMPTY_STRING);
849 aWndCenter.Invalidate();
850 aWndRight.GetEditEngine()->SetText(EMPTY_STRING);
851 aWndRight.Invalidate();
852 }
853
854 //-----------------------------------------------------------------------
855 // Handler:
856 //-----------------------------------------------------------------------
857
IMPL_LINK(ScHFEditPage,ListHdl_Impl,ListBox *,pList)858 IMPL_LINK( ScHFEditPage, ListHdl_Impl, ListBox*, pList )
859 {
860 if ( pList && pList == &maLbDefined )
861 {
862 ScHFEntryId eSel = static_cast<ScHFEntryId>(maLbDefined.GetSelectEntryPos());
863 if(!maLbDefined.IsTravelSelect())
864 {
865 ProcessDefinedListSel(eSel);
866
867 // check if we need to remove the customized entry.
868 if(eSel < eEntryCount)
869 RemoveFromDefinedList();
870 }
871 else
872 {
873 ProcessDefinedListSel(eSel, true);
874 }
875 }
876 return 0;
877 }
878
IMPL_LINK(ScHFEditPage,ClickHdl,ImageButton *,pBtn)879 IMPL_LINK( ScHFEditPage, ClickHdl, ImageButton*, pBtn )
880 {
881 pActiveEdWnd = ::GetScEditWindow(); //CHINA001
882 if ( !pActiveEdWnd )
883 return 0;
884
885 if ( pBtn == &aBtnText )
886 {
887 pActiveEdWnd->SetCharAttriutes();
888 }
889 else
890 {
891 if ( pBtn == &aBtnPage )
892 pActiveEdWnd->InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD) );
893 else if ( pBtn == &aBtnLastPage )
894 pActiveEdWnd->InsertField( SvxFieldItem(SvxPagesField(), EE_FEATURE_FIELD) );
895 else if ( pBtn == &aBtnDate )
896 pActiveEdWnd->InsertField( SvxFieldItem(SvxDateField(Date(),SVXDATETYPE_VAR), EE_FEATURE_FIELD) );
897 else if ( pBtn == &aBtnTime )
898 pActiveEdWnd->InsertField( SvxFieldItem(SvxTimeField(), EE_FEATURE_FIELD) );
899 else if ( pBtn == &aBtnFile )
900 {
901 pActiveEdWnd->InsertField( SvxFieldItem( SvxFileField(), EE_FEATURE_FIELD ) );
902 }
903 else if ( pBtn == &aBtnTable )
904 pActiveEdWnd->InsertField( SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD) );
905 }
906 InsertToDefinedList();
907 pActiveEdWnd->GrabFocus();
908
909 return 0;
910 }
911
IMPL_LINK(ScHFEditPage,MenuHdl,ScExtIButton *,pBtn)912 IMPL_LINK( ScHFEditPage, MenuHdl, ScExtIButton*, pBtn )
913 {
914 pActiveEdWnd = ::GetScEditWindow(); //CHINA001
915 if ( !pActiveEdWnd )
916 return 0;
917
918 if(pBtn!=NULL)
919 {
920 switch(pBtn->GetSelected())
921 {
922 case FILE_COMMAND_TITEL:
923 pActiveEdWnd->InsertField( SvxFieldItem( SvxFileField(), EE_FEATURE_FIELD ) );
924 break;
925 case FILE_COMMAND_FILENAME:
926 pActiveEdWnd->InsertField( SvxFieldItem( SvxExtFileField(
927 EMPTY_STRING, SVXFILETYPE_VAR, SVXFILEFORMAT_NAME_EXT ), EE_FEATURE_FIELD ) );
928 break;
929 case FILE_COMMAND_PATH:
930 pActiveEdWnd->InsertField( SvxFieldItem( SvxExtFileField(
931 EMPTY_STRING, SVXFILETYPE_VAR, SVXFILEFORMAT_FULLPATH ), EE_FEATURE_FIELD ) );
932 break;
933 }
934 }
935 return 0;
936 }
937
938 //========================================================================
939 // class ScRightHeaderEditPage
940 //========================================================================
941
ScRightHeaderEditPage(Window * pParent,const SfxItemSet & rCoreSet)942 ScRightHeaderEditPage::ScRightHeaderEditPage( Window* pParent, const SfxItemSet& rCoreSet )
943 : ScHFEditPage( pParent, RID_SCPAGE_HFED_HR, rCoreSet,
944 rCoreSet.GetPool()->GetWhich(SID_SCATTR_PAGE_HEADERRIGHT ), true )
945 {}
946
947 // -----------------------------------------------------------------------
948
GetRanges()949 sal_uInt16* __EXPORT ScRightHeaderEditPage::GetRanges()
950 { return pPageRightHeaderRanges; }
951
952 // -----------------------------------------------------------------------
953
Create(Window * pParent,const SfxItemSet & rCoreSet)954 SfxTabPage* __EXPORT ScRightHeaderEditPage::Create( Window* pParent, const SfxItemSet& rCoreSet )
955 { return ( new ScRightHeaderEditPage( pParent, rCoreSet ) ); };
956
957
958 //========================================================================
959 // class ScLeftHeaderEditPage
960 //========================================================================
961
ScLeftHeaderEditPage(Window * pParent,const SfxItemSet & rCoreSet)962 ScLeftHeaderEditPage::ScLeftHeaderEditPage( Window* pParent, const SfxItemSet& rCoreSet )
963 : ScHFEditPage( pParent, RID_SCPAGE_HFED_HL, rCoreSet,
964 rCoreSet.GetPool()->GetWhich(SID_SCATTR_PAGE_HEADERLEFT ), true )
965 {}
966
967 // -----------------------------------------------------------------------
968
GetRanges()969 sal_uInt16* __EXPORT ScLeftHeaderEditPage::GetRanges()
970 { return pPageLeftHeaderRanges; }
971
972 // -----------------------------------------------------------------------
973
Create(Window * pParent,const SfxItemSet & rCoreSet)974 SfxTabPage* __EXPORT ScLeftHeaderEditPage::Create( Window* pParent, const SfxItemSet& rCoreSet )
975 { return ( new ScLeftHeaderEditPage( pParent, rCoreSet ) ); };
976
977 //========================================================================
978 // class ScRightFooterEditPage
979 //========================================================================
980
ScRightFooterEditPage(Window * pParent,const SfxItemSet & rCoreSet)981 ScRightFooterEditPage::ScRightFooterEditPage( Window* pParent, const SfxItemSet& rCoreSet )
982 : ScHFEditPage( pParent, RID_SCPAGE_HFED_FR, rCoreSet,
983 rCoreSet.GetPool()->GetWhich(SID_SCATTR_PAGE_FOOTERRIGHT ), false )
984 {}
985
986 // -----------------------------------------------------------------------
987
GetRanges()988 sal_uInt16* __EXPORT ScRightFooterEditPage::GetRanges()
989 { return pPageRightFooterRanges; }
990
991 // -----------------------------------------------------------------------
992
Create(Window * pParent,const SfxItemSet & rCoreSet)993 SfxTabPage* __EXPORT ScRightFooterEditPage::Create( Window* pParent, const SfxItemSet& rCoreSet )
994 { return ( new ScRightFooterEditPage( pParent, rCoreSet ) ); };
995
996 //========================================================================
997 // class ScLeftFooterEditPage
998 //========================================================================
999
ScLeftFooterEditPage(Window * pParent,const SfxItemSet & rCoreSet)1000 ScLeftFooterEditPage::ScLeftFooterEditPage( Window* pParent, const SfxItemSet& rCoreSet )
1001 : ScHFEditPage( pParent, RID_SCPAGE_HFED_FL, rCoreSet,
1002 rCoreSet.GetPool()->GetWhich(SID_SCATTR_PAGE_FOOTERLEFT ), false )
1003 {}
1004
1005 // -----------------------------------------------------------------------
1006
GetRanges()1007 sal_uInt16* __EXPORT ScLeftFooterEditPage::GetRanges()
1008 { return pPageLeftFooterRanges; }
1009
1010 // -----------------------------------------------------------------------
1011
Create(Window * pParent,const SfxItemSet & rCoreSet)1012 SfxTabPage* __EXPORT ScLeftFooterEditPage::Create( Window* pParent, const SfxItemSet& rCoreSet )
1013 { return ( new ScLeftFooterEditPage( pParent, rCoreSet ) ); };
1014