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