Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 :
21 : #undef SC_DLLIMPLEMENTATION
22 :
23 : #include "scitems.hxx"
24 : #include <editeng/eeitem.hxx>
25 :
26 : #include <editeng/editobj.hxx>
27 : #include <editeng/editstat.hxx>
28 : #include <editeng/editview.hxx>
29 : #include <editeng/flditem.hxx>
30 : #include <sfx2/basedlgs.hxx>
31 : #include <sfx2/objsh.hxx>
32 : #include <vcl/msgbox.hxx>
33 : #include <vcl/svapp.hxx>
34 : #include <vcl/settings.hxx>
35 :
36 : #include <unotools/useroptions.hxx>
37 :
38 : #include "editutil.hxx"
39 : #include "global.hxx"
40 : #include "attrib.hxx"
41 : #include "patattr.hxx"
42 : #include "scresid.hxx"
43 : #include "sc.hrc"
44 : #include "globstr.hrc"
45 : #include "tabvwsh.hxx"
46 : #include "prevwsh.hxx"
47 : #include "textdlgs.hxx"
48 : #include "AccessibleEditObject.hxx"
49 :
50 : #include "scuitphfedit.hxx"
51 : #include <boost/scoped_ptr.hpp>
52 :
53 : // STATIC DATA -----------------------------------------------------------
54 :
55 : static ScEditWindow* pActiveEdWnd = NULL;
56 :
57 :
58 : // class ScHFEditPage
59 :
60 :
61 0 : ScHFEditPage::ScHFEditPage( Window* pParent,
62 : const SfxItemSet& rCoreAttrs,
63 : sal_uInt16 nWhichId,
64 : bool bHeader )
65 : : SfxTabPage( pParent, "HeaderFooterContent", "modules/scalc/ui/headerfootercontent.ui", rCoreAttrs )
66 0 : , nWhich( nWhichId )
67 : {
68 0 : get(m_pWndLeft,"textviewWND_LEFT");
69 0 : m_pWndLeft->SetLocation(Left);
70 0 : get(m_pWndCenter,"textviewWND_CENTER");
71 0 : m_pWndCenter->SetLocation(Center);
72 0 : get(m_pWndRight,"textviewWND_RIGHT");
73 0 : m_pWndRight->SetLocation(Right);
74 :
75 0 : get(m_pLbDefined,"comboLB_DEFINED");
76 :
77 0 : get(m_pBtnText,"buttonBTN_TEXT");
78 0 : get(m_pBtnTable,"buttonBTN_TABLE");
79 0 : get(m_pBtnPage,"buttonBTN_PAGE");
80 0 : get(m_pBtnLastPage,"buttonBTN_PAGES");
81 0 : get(m_pBtnDate,"buttonBTN_DATE");
82 0 : get(m_pBtnTime,"buttonBTN_TIME");
83 :
84 0 : get(m_pBtnFile,"buttonBTN_FILE");
85 :
86 0 : get(m_pFtConfidential,"labelSTR_HF_CONFIDENTIAL");
87 0 : get(m_pFtPage,"labelSTR_PAGE");
88 0 : get(m_pFtOfQuestion,"labelSTR_HF_OF_QUESTION");
89 0 : get(m_pFtOf,"labelSTR_HF_OF");
90 0 : get(m_pFtNone,"labelSTR_HF_NONE_IN_BRACKETS");
91 0 : get(m_pFtCreatedBy,"labelSTR_HF_CREATED_BY");
92 0 : get(m_pFtCustomized,"labelSTR_HF_CUSTOMIZED");
93 :
94 :
95 : //! use default style from current document?
96 : //! if font color is used, header/footer background color must be set
97 :
98 0 : ScPatternAttr aPatAttr( rCoreAttrs.GetPool() );
99 :
100 0 : m_pBtnFile->SetPopupMenu(get_menu("popup"));
101 :
102 0 : m_pLbDefined->SetSelectHdl( LINK( this, ScHFEditPage, ListHdl_Impl ) );
103 0 : m_pBtnFile->SetMenuHdl( LINK( this, ScHFEditPage, MenuHdl ) );
104 0 : m_pBtnText->SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
105 0 : m_pBtnPage->SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
106 0 : m_pBtnLastPage->SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
107 0 : m_pBtnDate->SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
108 0 : m_pBtnTime->SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
109 0 : m_pBtnFile->SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
110 0 : m_pBtnTable->SetClickHdl( LINK( this, ScHFEditPage, ClickHdl ) );
111 :
112 0 : get(m_pFtDefinedHF,!bHeader ? "labelFT_F_DEFINED" : "labelFT_H_DEFINED");
113 0 : get(m_pFtCustomHF, !bHeader ? "labelFT_F_CUSTOM" : "labelFT_H_CUSTOM");
114 :
115 0 : m_pFtDefinedHF->Show();
116 0 : m_pFtCustomHF->Show();
117 :
118 : //swap left/right areas and their lables in RTL mode
119 0 : if( Application::GetSettings().GetLayoutRTL() )
120 : {
121 0 : Window *pLeft = get<Window>("labelFT_LEFT");
122 0 : Window *pRight = get<Window>("labelFT_RIGHT");
123 0 : sal_Int32 nOldLeftAttach = pLeft->get_grid_left_attach();
124 0 : sal_Int32 nOldRightAttach = pRight->get_grid_left_attach();
125 0 : pLeft->set_grid_left_attach(nOldRightAttach);
126 0 : pRight->set_grid_left_attach(nOldLeftAttach);
127 :
128 0 : pLeft = m_pWndLeft;
129 0 : pRight = m_pWndRight;
130 0 : nOldLeftAttach = pLeft->get_grid_left_attach();
131 0 : nOldRightAttach = pRight->get_grid_left_attach();
132 0 : pLeft->set_grid_left_attach(nOldRightAttach);
133 0 : pRight->set_grid_left_attach(nOldLeftAttach);
134 : }
135 0 : m_pWndLeft->SetFont( aPatAttr );
136 0 : m_pWndCenter->SetFont( aPatAttr );
137 0 : m_pWndRight->SetFont( aPatAttr );
138 :
139 0 : m_pWndLeft->SetObjectSelectHdl( LINK(this,ScHFEditPage,ObjectSelectHdl) );
140 0 : m_pWndCenter->SetObjectSelectHdl( LINK(this,ScHFEditPage,ObjectSelectHdl) );
141 0 : m_pWndRight->SetObjectSelectHdl( LINK(this,ScHFEditPage,ObjectSelectHdl) );
142 0 : FillCmdArr();
143 :
144 0 : m_pWndLeft->GrabFocus();
145 :
146 0 : InitPreDefinedList();
147 :
148 0 : }
149 :
150 0 : IMPL_LINK( ScHFEditPage, ObjectSelectHdl, ScEditWindow*, pEdit )
151 : {
152 : (void)pEdit;
153 0 : m_pBtnText->GrabFocus();
154 0 : return 0;
155 : }
156 :
157 0 : ScHFEditPage::~ScHFEditPage()
158 : {
159 0 : }
160 :
161 0 : void ScHFEditPage::SetNumType(SvxNumType eNumType)
162 : {
163 0 : m_pWndLeft->SetNumType(eNumType);
164 0 : m_pWndCenter->SetNumType(eNumType);
165 0 : m_pWndRight->SetNumType(eNumType);
166 0 : }
167 :
168 0 : void ScHFEditPage::Reset( const SfxItemSet& rCoreSet )
169 : {
170 0 : const SfxPoolItem* pItem = NULL;
171 0 : if ( rCoreSet.HasItem(nWhich, &pItem) )
172 : {
173 0 : const ScPageHFItem& rItem = static_cast<const ScPageHFItem&>(*pItem);
174 :
175 0 : if( const EditTextObject* pLeft = rItem.GetLeftArea() )
176 0 : m_pWndLeft->SetText( *pLeft );
177 0 : if( const EditTextObject* pCenter = rItem.GetCenterArea() )
178 0 : m_pWndCenter->SetText( *pCenter );
179 0 : if( const EditTextObject* pRight = rItem.GetRightArea() )
180 0 : m_pWndRight->SetText( *pRight );
181 :
182 0 : SetSelectDefinedList();
183 : }
184 0 : }
185 :
186 0 : bool ScHFEditPage::FillItemSet( SfxItemSet& rCoreSet )
187 : {
188 0 : ScPageHFItem aItem( nWhich );
189 0 : EditTextObject* pLeft = m_pWndLeft->CreateTextObject();
190 0 : EditTextObject* pCenter = m_pWndCenter->CreateTextObject();
191 0 : EditTextObject* pRight = m_pWndRight->CreateTextObject();
192 :
193 0 : aItem.SetLeftArea ( *pLeft );
194 0 : aItem.SetCenterArea( *pCenter );
195 0 : aItem.SetRightArea ( *pRight );
196 0 : delete pLeft;
197 0 : delete pCenter;
198 0 : delete pRight;
199 :
200 0 : rCoreSet.Put( aItem );
201 :
202 0 : return true;
203 : }
204 :
205 : #define SET_CMD(i,id) \
206 : aCmd = aDel; \
207 : aCmd += ScGlobal::GetRscString( id ); \
208 : aCmd += aDel; \
209 : aCmdArr[i] = aCmd;
210 :
211 0 : void ScHFEditPage::FillCmdArr()
212 : {
213 0 : OUString aDel( ScGlobal::GetRscString( STR_HFCMD_DELIMITER ) );
214 0 : OUString aCmd;
215 :
216 0 : SET_CMD( 0, STR_HFCMD_PAGE )
217 0 : SET_CMD( 1, STR_HFCMD_PAGES )
218 0 : SET_CMD( 2, STR_HFCMD_DATE )
219 0 : SET_CMD( 3, STR_HFCMD_TIME )
220 0 : SET_CMD( 4, STR_HFCMD_FILE )
221 0 : SET_CMD( 5, STR_HFCMD_TABLE )
222 0 : }
223 :
224 : #undef SET_CMD
225 :
226 0 : void ScHFEditPage::InitPreDefinedList()
227 : {
228 0 : SvtUserOptions aUserOpt;
229 :
230 0 : Color* pTxtColour = NULL;
231 0 : Color* pFldColour = NULL;
232 :
233 : // Get the all field values at the outset.
234 0 : OUString aPageFieldValue(m_pWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
235 0 : OUString aSheetFieldValue(m_pWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
236 0 : OUString aFileFieldValue(m_pWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxFileField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
237 0 : OUString aExtFileFieldValue(m_pWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxExtFileField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
238 0 : OUString aDateFieldValue(m_pWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxDateField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
239 :
240 0 : m_pLbDefined->Clear();
241 :
242 0 : m_pLbDefined->InsertEntry(m_pFtNone->GetText());
243 :
244 0 : OUString aPageEntry(m_pFtPage->GetText() + " " + aPageFieldValue);
245 0 : m_pLbDefined->InsertEntry(aPageEntry);
246 :
247 0 : OUString aPageOfEntry(aPageEntry + " " + m_pFtOfQuestion->GetText());
248 0 : m_pLbDefined->InsertEntry( aPageOfEntry);
249 :
250 0 : m_pLbDefined->InsertEntry(aSheetFieldValue);
251 :
252 0 : OUString aConfidentialEntry(aUserOpt.GetCompany() + " " + m_pFtConfidential->GetText() + ", " + aDateFieldValue + ", " + aPageEntry);
253 0 : m_pLbDefined->InsertEntry( aConfidentialEntry);
254 :
255 0 : OUString aFileNamePageEntry(aFileFieldValue + ", " + aPageEntry);
256 0 : m_pLbDefined->InsertEntry( aFileNamePageEntry);
257 :
258 0 : m_pLbDefined->InsertEntry( aExtFileFieldValue);
259 :
260 0 : OUString aPageSheetNameEntry(aPageEntry + ", " + aSheetFieldValue);
261 0 : m_pLbDefined->InsertEntry( aPageSheetNameEntry);
262 :
263 0 : OUString aPageFileNameEntry(aPageEntry + ", " + aFileFieldValue);
264 0 : m_pLbDefined->InsertEntry( aPageFileNameEntry);
265 :
266 0 : OUString aPagePathNameEntry(aPageEntry + ", " + aExtFileFieldValue);
267 0 : m_pLbDefined->InsertEntry( aPagePathNameEntry);
268 :
269 0 : OUString aUserNameEntry(aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName() + ", " + aPageEntry + ", " + aDateFieldValue);
270 0 : m_pLbDefined->InsertEntry( aUserNameEntry);
271 :
272 0 : OUString aCreatedByEntry( m_pFtCreatedBy->GetText() + " " + aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName() + ", ");
273 0 : aCreatedByEntry += aDateFieldValue + ", " + aPageEntry;
274 0 : m_pLbDefined->InsertEntry( aCreatedByEntry);
275 0 : }
276 :
277 0 : void ScHFEditPage::InsertToDefinedList()
278 : {
279 0 : sal_uInt16 nCount = m_pLbDefined->GetEntryCount();
280 0 : if(nCount == eEntryCount)
281 : {
282 0 : m_pLbDefined->InsertEntry( m_pFtCustomized->GetText() );
283 0 : m_pLbDefined->SelectEntryPos(eEntryCount);
284 : }
285 0 : }
286 :
287 0 : void ScHFEditPage::RemoveFromDefinedList()
288 : {
289 0 : sal_uInt16 nCount = m_pLbDefined->GetEntryCount();
290 0 : if(nCount > eEntryCount )
291 0 : m_pLbDefined->RemoveEntry( nCount-1);
292 0 : }
293 :
294 : // determine if the header/footer exists in our predefined list and set select to it.
295 0 : void ScHFEditPage::SetSelectDefinedList()
296 : {
297 0 : SvtUserOptions aUserOpt;
298 :
299 : // default to customized
300 0 : ScHFEntryId eSelectEntry = eEntryCount;
301 :
302 0 : boost::scoped_ptr< EditTextObject > pLeftObj;
303 0 : boost::scoped_ptr< EditTextObject > pCenterObj;
304 0 : boost::scoped_ptr< EditTextObject > pRightObj;
305 :
306 0 : OUString aLeftEntry;
307 0 : OUString aCenterEntry;
308 0 : OUString aRightEntry;
309 :
310 0 : pLeftObj.reset(m_pWndLeft->GetEditEngine()->CreateTextObject());
311 0 : pCenterObj.reset(m_pWndCenter->GetEditEngine()->CreateTextObject());
312 0 : pRightObj.reset(m_pWndRight->GetEditEngine()->CreateTextObject());
313 :
314 0 : bool bFound = false;
315 :
316 : sal_uInt16 i;
317 0 : sal_uInt16 nCount = m_pLbDefined->GetEntryCount();
318 0 : for(i = 0; i < nCount && !bFound; i++)
319 : {
320 0 : switch(static_cast<ScHFEntryId>(i))
321 : {
322 : case eNoneEntry:
323 : {
324 0 : aLeftEntry = pLeftObj->GetText(0);
325 0 : aCenterEntry = pCenterObj->GetText(0);
326 0 : aRightEntry = pRightObj->GetText(0);
327 0 : if(aLeftEntry == EMPTY_OUSTRING && aCenterEntry == EMPTY_OUSTRING
328 0 : && aRightEntry == EMPTY_OUSTRING)
329 : {
330 0 : eSelectEntry = eNoneEntry;
331 0 : bFound = true;
332 : }
333 : }
334 0 : break;
335 :
336 : case ePageEntry:
337 : {
338 0 : aLeftEntry = pLeftObj->GetText(0);
339 0 : aRightEntry = pRightObj->GetText(0);
340 0 : if(aLeftEntry == EMPTY_OUSTRING && aRightEntry == EMPTY_OUSTRING)
341 : {
342 0 : if(IsPageEntry(m_pWndCenter->GetEditEngine(), pCenterObj.get()))
343 : {
344 0 : eSelectEntry = ePageEntry;
345 0 : bFound = true;
346 : }
347 : }
348 : }
349 0 : break;
350 :
351 :
352 : //TODO
353 : case ePagesEntry:
354 : {
355 : }
356 0 : break;
357 :
358 : case eSheetEntry:
359 : {
360 0 : aLeftEntry = pLeftObj->GetText(0);
361 0 : aRightEntry = pRightObj->GetText(0);
362 0 : if(aLeftEntry == EMPTY_OUSTRING && aRightEntry == EMPTY_OUSTRING)
363 : {
364 0 : if(pCenterObj->IsFieldObject())
365 : {
366 0 : const SvxFieldItem* pFieldItem = pCenterObj->GetField();
367 0 : if(pFieldItem)
368 : {
369 0 : const SvxFieldData* pField = pFieldItem->GetField();
370 0 : if(pField && pField->ISA(SvxTableField))
371 : {
372 0 : eSelectEntry = eSheetEntry;
373 0 : bFound = true;
374 : }
375 : }
376 : }
377 : }
378 : }
379 0 : break;
380 :
381 : case eConfidentialEntry:
382 : {
383 0 : if(IsDateEntry(pCenterObj.get()) && IsPageEntry(m_pWndRight->GetEditEngine(), pRightObj.get()))
384 : {
385 0 : OUString aConfidentialEntry(aUserOpt.GetCompany() + " " + m_pFtConfidential->GetText());
386 0 : if(aConfidentialEntry == m_pWndLeft->GetEditEngine()->GetText(0))
387 : {
388 0 : eSelectEntry = eConfidentialEntry;
389 0 : bFound = true;
390 0 : }
391 : }
392 : }
393 0 : break;
394 :
395 : //TODO
396 : case eFileNamePageEntry:
397 : {
398 : }
399 0 : break;
400 :
401 : case eExtFileNameEntry:
402 : {
403 0 : aLeftEntry = pLeftObj->GetText(0);
404 0 : aRightEntry = pRightObj->GetText(0);
405 0 : if(IsExtFileNameEntry(pCenterObj.get()) && aLeftEntry == EMPTY_OUSTRING
406 0 : && aRightEntry == EMPTY_OUSTRING)
407 : {
408 0 : eSelectEntry = eExtFileNameEntry;
409 0 : bFound = true;
410 : }
411 : }
412 0 : break;
413 :
414 : //TODO
415 : case ePageSheetEntry:
416 : {
417 : }
418 0 : break;
419 :
420 : //TODO
421 : case ePageFileNameEntry:
422 : {
423 : }
424 0 : break;
425 :
426 : case ePageExtFileNameEntry:
427 : {
428 0 : aLeftEntry = pLeftObj->GetText(0);
429 0 : if(IsPageEntry(m_pWndCenter->GetEditEngine(), pCenterObj.get()) &&
430 0 : IsExtFileNameEntry(pRightObj.get()) && aLeftEntry == EMPTY_OUSTRING)
431 : {
432 0 : eSelectEntry = ePageExtFileNameEntry;
433 0 : bFound = true;
434 : }
435 : }
436 0 : break;
437 :
438 : case eUserNameEntry:
439 : {
440 0 : if(IsDateEntry(pRightObj.get()) && IsPageEntry(m_pWndCenter->GetEditEngine(), pCenterObj.get()))
441 : {
442 0 : OUString aUserNameEntry(aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName());
443 :
444 0 : if(aUserNameEntry == m_pWndLeft->GetEditEngine()->GetText(0))
445 : {
446 0 : eSelectEntry = eUserNameEntry;
447 0 : bFound = true;
448 0 : }
449 : }
450 : }
451 0 : break;
452 :
453 : case eCreatedByEntry:
454 : {
455 0 : if(IsDateEntry(pCenterObj.get()) && IsPageEntry(m_pWndRight->GetEditEngine(), pRightObj.get()))
456 : {
457 0 : OUString aCreatedByEntry(m_pFtCreatedBy->GetText() + " " + aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName());
458 :
459 0 : if(aCreatedByEntry == m_pWndLeft->GetEditEngine()->GetText(0))
460 : {
461 0 : eSelectEntry = eCreatedByEntry;
462 0 : bFound = true;
463 0 : }
464 : }
465 : }
466 0 : break;
467 :
468 : default:
469 : {
470 : // added to avoid warnings
471 : }
472 : }
473 : }
474 :
475 0 : if(eSelectEntry == eEntryCount)
476 0 : InsertToDefinedList();
477 :
478 0 : m_pLbDefined->SelectEntryPos( sal::static_int_cast<sal_uInt16>( eSelectEntry ) );
479 0 : }
480 :
481 0 : bool ScHFEditPage::IsPageEntry(EditEngine*pEngine, EditTextObject* pTextObj)
482 : {
483 0 : if(!pEngine || !pTextObj)
484 0 : return false;
485 :
486 0 : bool bReturn = false;
487 :
488 0 : if(!pTextObj->IsFieldObject())
489 : {
490 0 : std::vector<sal_Int32> aPosList;
491 0 : pEngine->GetPortions(0,aPosList);
492 0 : if(aPosList.size() == 2)
493 : {
494 0 : OUString aPageEntry(m_pFtPage->GetText() + " ");
495 0 : ESelection aSel(0,0,0,0);
496 0 : aSel.nEndPos = aPageEntry.getLength();
497 0 : if(aPageEntry == pEngine->GetText(aSel))
498 : {
499 0 : aSel.nStartPos = aSel.nEndPos;
500 0 : aSel.nEndPos++;
501 0 : boost::scoped_ptr< EditTextObject > pPageObj;
502 0 : pPageObj.reset(pEngine->CreateTextObject(aSel));
503 0 : if(pPageObj.get() && pPageObj->IsFieldObject() )
504 : {
505 0 : const SvxFieldItem* pFieldItem = pPageObj->GetField();
506 0 : if(pFieldItem)
507 : {
508 0 : const SvxFieldData* pField = pFieldItem->GetField();
509 0 : if(pField && pField->ISA(SvxPageField))
510 0 : bReturn = true;
511 : }
512 0 : }
513 0 : }
514 0 : }
515 : }
516 0 : return bReturn;
517 : }
518 :
519 0 : bool ScHFEditPage::IsDateEntry(EditTextObject* pTextObj)
520 : {
521 0 : if(!pTextObj)
522 0 : return false;
523 :
524 0 : bool bReturn = false;
525 0 : if(pTextObj->IsFieldObject())
526 : {
527 0 : const SvxFieldItem* pFieldItem = pTextObj->GetField();
528 0 : if(pFieldItem)
529 : {
530 0 : const SvxFieldData* pField = pFieldItem->GetField();
531 0 : if(pField && pField->ISA(SvxDateField))
532 0 : bReturn = true;
533 : }
534 : }
535 0 : return bReturn;
536 : }
537 :
538 0 : bool ScHFEditPage::IsExtFileNameEntry(EditTextObject* pTextObj)
539 : {
540 0 : if(!pTextObj)
541 0 : return false;
542 0 : bool bReturn = false;
543 0 : if(pTextObj->IsFieldObject())
544 : {
545 0 : const SvxFieldItem* pFieldItem = pTextObj->GetField();
546 0 : if(pFieldItem)
547 : {
548 0 : const SvxFieldData* pField = pFieldItem->GetField();
549 0 : if(pField && pField->ISA(SvxExtFileField))
550 0 : bReturn = true;
551 : }
552 : }
553 0 : return bReturn;
554 : }
555 :
556 0 : void ScHFEditPage::ProcessDefinedListSel(ScHFEntryId eSel, bool bTravelling)
557 : {
558 0 : SvtUserOptions aUserOpt;
559 0 : boost::scoped_ptr< EditTextObject > pTextObj;
560 :
561 0 : switch(eSel)
562 : {
563 : case eNoneEntry:
564 0 : ClearTextAreas();
565 0 : if(!bTravelling)
566 0 : m_pWndLeft->GrabFocus();
567 0 : break;
568 :
569 : case ePageEntry:
570 : {
571 0 : ClearTextAreas();
572 0 : OUString aPageEntry( m_pFtPage->GetText() + " " );
573 0 : m_pWndCenter->GetEditEngine()->SetText(aPageEntry);
574 0 : m_pWndCenter->InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD) );
575 0 : if(!bTravelling)
576 0 : m_pWndCenter->GrabFocus();
577 : }
578 0 : break;
579 :
580 : case ePagesEntry:
581 : {
582 0 : ClearTextAreas();
583 0 : ESelection aSel(0,0,0,0);
584 0 : OUString aPageEntry( m_pFtPage->GetText() + " ");
585 0 : m_pWndCenter->GetEditEngine()->SetText(aPageEntry);
586 0 : aSel.nEndPos = aPageEntry.getLength();
587 0 : m_pWndCenter->GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
588 0 : ++aSel.nEndPos;
589 :
590 0 : OUString aPageOfEntry(" " + m_pFtOf->GetText() + " ");
591 0 : m_pWndCenter->GetEditEngine()->QuickInsertText(aPageOfEntry,ESelection(aSel.nEndPara,aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
592 0 : aSel.nEndPos = aSel.nEndPos + aPageOfEntry.getLength();
593 0 : m_pWndCenter->GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPagesField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara,aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
594 0 : pTextObj.reset(m_pWndCenter->GetEditEngine()->CreateTextObject());
595 0 : m_pWndCenter->SetText(*pTextObj);
596 0 : if(!bTravelling)
597 0 : m_pWndCenter->GrabFocus();
598 : }
599 0 : break;
600 :
601 : case eSheetEntry:
602 0 : ClearTextAreas();
603 0 : m_pWndCenter->InsertField( SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD) );
604 0 : if(!bTravelling)
605 0 : m_pWndCenter->GrabFocus();
606 0 : break;
607 :
608 : case eConfidentialEntry:
609 : {
610 0 : ClearTextAreas();
611 0 : OUString aConfidentialEntry(aUserOpt.GetCompany() + " " + m_pFtConfidential->GetText());
612 0 : m_pWndLeft->GetEditEngine()->SetText(aConfidentialEntry);
613 0 : m_pWndCenter->InsertField( SvxFieldItem(SvxDateField(Date( Date::SYSTEM ),SVXDATETYPE_VAR), EE_FEATURE_FIELD) );
614 :
615 0 : OUString aPageEntry( m_pFtPage->GetText() + " ");
616 0 : m_pWndRight->GetEditEngine()->SetText(aPageEntry);
617 0 : m_pWndRight->InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD) );
618 0 : if(!bTravelling)
619 0 : m_pWndRight->GrabFocus();
620 : }
621 0 : break;
622 :
623 : case eFileNamePageEntry:
624 : {
625 0 : ClearTextAreas();
626 0 : ESelection aSel(0,0,0,0);
627 0 : m_pWndCenter->GetEditEngine()->QuickInsertField(SvxFieldItem( SvxFileField(), EE_FEATURE_FIELD ), aSel );
628 0 : ++aSel.nEndPos;
629 0 : OUString aPageEntry(", " + m_pFtPage->GetText() + " ");
630 0 : m_pWndCenter->GetEditEngine()->QuickInsertText(aPageEntry, ESelection(aSel.nEndPara,aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
631 0 : aSel.nStartPos = aSel.nEndPos;
632 0 : aSel.nEndPos = aSel.nEndPos + aPageEntry.getLength();
633 0 : m_pWndCenter->GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara,aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
634 0 : pTextObj.reset(m_pWndCenter->GetEditEngine()->CreateTextObject());
635 0 : m_pWndCenter->SetText(*pTextObj);
636 0 : if(!bTravelling)
637 0 : m_pWndCenter->GrabFocus();
638 : }
639 0 : break;
640 :
641 : case eExtFileNameEntry:
642 0 : ClearTextAreas();
643 : m_pWndCenter->InsertField( SvxFieldItem( SvxExtFileField(
644 0 : EMPTY_OUSTRING, SVXFILETYPE_VAR, SVXFILEFORMAT_FULLPATH ), EE_FEATURE_FIELD ) );
645 0 : if(!bTravelling)
646 0 : m_pWndCenter->GrabFocus();
647 0 : break;
648 :
649 : case ePageSheetEntry:
650 : {
651 0 : ClearTextAreas();
652 0 : ESelection aSel(0,0,0,0);
653 0 : OUString aPageEntry( m_pFtPage->GetText() + " " );
654 0 : m_pWndCenter->GetEditEngine()->SetText(aPageEntry);
655 0 : aSel.nEndPos = aPageEntry.getLength();
656 0 : m_pWndCenter->GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
657 0 : ++aSel.nEndPos;
658 :
659 0 : OUString aCommaSpace(", ");
660 0 : m_pWndCenter->GetEditEngine()->QuickInsertText(aCommaSpace,ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
661 0 : aSel.nEndPos = aSel.nEndPos + aCommaSpace.getLength();
662 0 : m_pWndCenter->GetEditEngine()->QuickInsertField( SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
663 0 : pTextObj.reset(m_pWndCenter->GetEditEngine()->CreateTextObject());
664 0 : m_pWndCenter->SetText(*pTextObj);
665 0 : if(!bTravelling)
666 0 : m_pWndCenter->GrabFocus();
667 : }
668 0 : break;
669 :
670 : case ePageFileNameEntry:
671 : {
672 0 : ClearTextAreas();
673 0 : ESelection aSel(0,0,0,0);
674 0 : OUString aPageEntry( m_pFtPage->GetText() + " " );
675 0 : m_pWndCenter->GetEditEngine()->SetText(aPageEntry);
676 0 : aSel.nEndPos = aPageEntry.getLength();
677 0 : m_pWndCenter->GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
678 0 : ++aSel.nEndPos;
679 0 : OUString aCommaSpace(", ");
680 0 : m_pWndCenter->GetEditEngine()->QuickInsertText(aCommaSpace,ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
681 0 : aSel.nEndPos = aSel.nEndPos + aCommaSpace.getLength();
682 0 : m_pWndCenter->GetEditEngine()->QuickInsertField( SvxFieldItem(SvxFileField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
683 0 : pTextObj.reset(m_pWndCenter->GetEditEngine()->CreateTextObject());
684 0 : m_pWndCenter->SetText(*pTextObj);
685 0 : if(!bTravelling)
686 0 : m_pWndCenter->GrabFocus();
687 : }
688 0 : break;
689 :
690 : case ePageExtFileNameEntry:
691 : {
692 0 : ClearTextAreas();
693 0 : OUString aPageEntry( m_pFtPage->GetText() + " " );
694 0 : m_pWndCenter->GetEditEngine()->SetText(aPageEntry);
695 0 : m_pWndCenter->InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD) );
696 : m_pWndRight->InsertField( SvxFieldItem( SvxExtFileField(
697 0 : EMPTY_OUSTRING, SVXFILETYPE_VAR, SVXFILEFORMAT_FULLPATH ), EE_FEATURE_FIELD ) );
698 0 : if(!bTravelling)
699 0 : m_pWndRight->GrabFocus();
700 : }
701 0 : break;
702 :
703 : case eUserNameEntry:
704 : {
705 0 : ClearTextAreas();
706 0 : OUString aUserNameEntry(aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName());
707 0 : m_pWndLeft->GetEditEngine()->SetText(aUserNameEntry);
708 0 : OUString aPageEntry( m_pFtPage->GetText() + " ");
709 : //aPageEntry += " ";
710 0 : m_pWndCenter->GetEditEngine()->SetText(aPageEntry);
711 0 : m_pWndCenter->InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD) );
712 0 : m_pWndRight->InsertField( SvxFieldItem(SvxDateField(Date( Date::SYSTEM ),SVXDATETYPE_VAR), EE_FEATURE_FIELD) );
713 0 : if(!bTravelling)
714 0 : m_pWndRight->GrabFocus();
715 : }
716 0 : break;
717 :
718 : case eCreatedByEntry:
719 : {
720 0 : ClearTextAreas();
721 0 : OUString aCreatedByEntry( m_pFtCreatedBy->GetText() + " " + aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName());
722 0 : m_pWndLeft->GetEditEngine()->SetText(aCreatedByEntry);
723 0 : m_pWndCenter->InsertField( SvxFieldItem(SvxDateField(Date( Date::SYSTEM ),SVXDATETYPE_VAR), EE_FEATURE_FIELD) );
724 0 : OUString aPageEntry( m_pFtPage->GetText() );
725 0 : aPageEntry += " ";
726 0 : m_pWndRight->GetEditEngine()->SetText(aPageEntry);
727 0 : m_pWndRight->InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD) );
728 0 : if(!bTravelling)
729 0 : m_pWndRight->GrabFocus();
730 : }
731 0 : break;
732 :
733 : default :
734 0 : break;
735 0 : }
736 0 : }
737 :
738 0 : void ScHFEditPage::ClearTextAreas()
739 : {
740 0 : m_pWndLeft->GetEditEngine()->SetText(EMPTY_OUSTRING);
741 0 : m_pWndLeft->Invalidate();
742 0 : m_pWndCenter->GetEditEngine()->SetText(EMPTY_OUSTRING);
743 0 : m_pWndCenter->Invalidate();
744 0 : m_pWndRight->GetEditEngine()->SetText(EMPTY_OUSTRING);
745 0 : m_pWndRight->Invalidate();
746 0 : }
747 :
748 :
749 : // Handler:
750 :
751 :
752 0 : IMPL_LINK( ScHFEditPage, ListHdl_Impl, ListBox*, pList )
753 : {
754 0 : if ( pList && pList == m_pLbDefined )
755 : {
756 0 : ScHFEntryId eSel = static_cast<ScHFEntryId>(m_pLbDefined->GetSelectEntryPos());
757 0 : if(!m_pLbDefined->IsTravelSelect())
758 : {
759 0 : ProcessDefinedListSel(eSel);
760 :
761 : // check if we need to remove the customized entry.
762 0 : if(eSel < eEntryCount)
763 0 : RemoveFromDefinedList();
764 : }
765 : else
766 : {
767 0 : ProcessDefinedListSel(eSel, true);
768 : }
769 : }
770 0 : return 0;
771 : }
772 :
773 0 : IMPL_LINK( ScHFEditPage, ClickHdl, PushButton*, pBtn )
774 : {
775 0 : pActiveEdWnd = ::GetScEditWindow();
776 0 : if ( !pActiveEdWnd )
777 0 : return 0;
778 :
779 0 : if ( pBtn == m_pBtnText )
780 : {
781 0 : pActiveEdWnd->SetCharAttriutes();
782 : }
783 : else
784 : {
785 0 : if ( pBtn == m_pBtnPage )
786 0 : pActiveEdWnd->InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD) );
787 0 : else if ( pBtn == m_pBtnLastPage )
788 0 : pActiveEdWnd->InsertField( SvxFieldItem(SvxPagesField(), EE_FEATURE_FIELD) );
789 0 : else if ( pBtn == m_pBtnDate )
790 0 : pActiveEdWnd->InsertField( SvxFieldItem(SvxDateField(Date( Date::SYSTEM ),SVXDATETYPE_VAR), EE_FEATURE_FIELD) );
791 0 : else if ( pBtn == m_pBtnTime )
792 0 : pActiveEdWnd->InsertField( SvxFieldItem(SvxTimeField(), EE_FEATURE_FIELD) );
793 0 : else if ( pBtn == m_pBtnFile )
794 : {
795 0 : pActiveEdWnd->InsertField( SvxFieldItem( SvxFileField(), EE_FEATURE_FIELD ) );
796 : }
797 0 : else if ( pBtn == m_pBtnTable )
798 0 : pActiveEdWnd->InsertField( SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD) );
799 : }
800 0 : InsertToDefinedList();
801 0 : pActiveEdWnd->GrabFocus();
802 :
803 0 : return 0;
804 : }
805 :
806 0 : IMPL_LINK( ScHFEditPage, MenuHdl, ScExtIButton*, pBtn )
807 : {
808 0 : pActiveEdWnd = ::GetScEditWindow();
809 0 : if ( !pActiveEdWnd )
810 0 : return 0;
811 :
812 0 : if(pBtn!=NULL)
813 : {
814 : OSL_ENSURE( true, pBtn->GetSelected());
815 0 : OString sSelectedId = pBtn->GetSelectedIdent();
816 :
817 0 : if (sSelectedId == "title")
818 : {
819 0 : pActiveEdWnd->InsertField( SvxFieldItem( SvxFileField(), EE_FEATURE_FIELD ) );
820 : }
821 0 : else if (sSelectedId == "filename")
822 : {
823 : pActiveEdWnd->InsertField( SvxFieldItem( SvxExtFileField(
824 0 : OUString(), SVXFILETYPE_VAR, SVXFILEFORMAT_NAME_EXT ), EE_FEATURE_FIELD ) );
825 : }
826 0 : else if (sSelectedId == "pathname")
827 : {
828 : pActiveEdWnd->InsertField( SvxFieldItem( SvxExtFileField(
829 0 : OUString(), SVXFILETYPE_VAR, SVXFILEFORMAT_FULLPATH ), EE_FEATURE_FIELD ) );
830 0 : }
831 : }
832 0 : return 0;
833 : }
834 :
835 :
836 : // class ScRightHeaderEditPage
837 :
838 :
839 0 : ScRightHeaderEditPage::ScRightHeaderEditPage( Window* pParent, const SfxItemSet& rCoreSet )
840 : : ScHFEditPage( pParent,
841 : rCoreSet,
842 0 : rCoreSet.GetPool()->GetWhich(SID_SCATTR_PAGE_HEADERRIGHT ),
843 0 : true )
844 0 : {}
845 :
846 0 : SfxTabPage* ScRightHeaderEditPage::Create( Window* pParent, const SfxItemSet& rCoreSet )
847 0 : { return ( new ScRightHeaderEditPage( pParent, rCoreSet ) ); };
848 :
849 :
850 : // class ScLeftHeaderEditPage
851 :
852 :
853 0 : ScLeftHeaderEditPage::ScLeftHeaderEditPage( Window* pParent, const SfxItemSet& rCoreSet )
854 : : ScHFEditPage( pParent,
855 : rCoreSet,
856 0 : rCoreSet.GetPool()->GetWhich(SID_SCATTR_PAGE_HEADERLEFT ),
857 0 : true )
858 0 : {}
859 :
860 0 : SfxTabPage* ScLeftHeaderEditPage::Create( Window* pParent, const SfxItemSet& rCoreSet )
861 0 : { return ( new ScLeftHeaderEditPage( pParent, rCoreSet ) ); };
862 :
863 :
864 : // class ScRightFooterEditPage
865 :
866 :
867 0 : ScRightFooterEditPage::ScRightFooterEditPage( Window* pParent, const SfxItemSet& rCoreSet )
868 : : ScHFEditPage( pParent,
869 : rCoreSet,
870 0 : rCoreSet.GetPool()->GetWhich(SID_SCATTR_PAGE_FOOTERRIGHT ),
871 0 : false )
872 0 : {}
873 :
874 0 : SfxTabPage* ScRightFooterEditPage::Create( Window* pParent, const SfxItemSet& rCoreSet )
875 0 : { return ( new ScRightFooterEditPage( pParent, rCoreSet ) ); };
876 :
877 :
878 : // class ScLeftFooterEditPage
879 :
880 :
881 0 : ScLeftFooterEditPage::ScLeftFooterEditPage( Window* pParent, const SfxItemSet& rCoreSet )
882 : : ScHFEditPage( pParent,
883 : rCoreSet,
884 0 : rCoreSet.GetPool()->GetWhich(SID_SCATTR_PAGE_FOOTERLEFT ),
885 0 : false )
886 0 : {}
887 :
888 0 : SfxTabPage* ScLeftFooterEditPage::Create( Window* pParent, const SfxItemSet& rCoreSet )
889 0 : { return ( new ScLeftFooterEditPage( pParent, rCoreSet ) ); };
890 :
891 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|