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 0 : static VclPtr<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 labels in RTL mode
115 0 : if( AllSettings::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 : // Set size request of 1 widget, the other two will follow as they are
136 : // in the same grid
137 0 : Size aSize = LogicToPixel(Size(80, 120), MAP_APPFONT);
138 0 : m_pWndLeft->set_width_request(aSize.Width());
139 0 : m_pWndLeft->set_height_request(aSize.Height());
140 :
141 0 : m_pWndLeft->SetObjectSelectHdl( LINK(this,ScHFEditPage,ObjectSelectHdl) );
142 0 : m_pWndCenter->SetObjectSelectHdl( LINK(this,ScHFEditPage,ObjectSelectHdl) );
143 0 : m_pWndRight->SetObjectSelectHdl( LINK(this,ScHFEditPage,ObjectSelectHdl) );
144 0 : FillCmdArr();
145 :
146 0 : m_pWndLeft->GrabFocus();
147 :
148 0 : InitPreDefinedList();
149 :
150 0 : }
151 :
152 0 : IMPL_LINK( ScHFEditPage, ObjectSelectHdl, ScEditWindow*, pEdit )
153 : {
154 : (void)pEdit;
155 0 : m_pBtnText->GrabFocus();
156 0 : return 0;
157 : }
158 :
159 0 : ScHFEditPage::~ScHFEditPage()
160 : {
161 0 : disposeOnce();
162 0 : }
163 :
164 0 : void ScHFEditPage::dispose()
165 : {
166 0 : m_pWndLeft.clear();
167 0 : m_pWndCenter.clear();
168 0 : m_pWndRight.clear();
169 0 : m_pFtDefinedHF.clear();
170 0 : m_pLbDefined.clear();
171 0 : m_pFtCustomHF.clear();
172 0 : m_pBtnText.clear();
173 0 : m_pBtnFile.clear();
174 0 : m_pBtnTable.clear();
175 0 : m_pBtnPage.clear();
176 0 : m_pBtnLastPage.clear();
177 0 : m_pBtnDate.clear();
178 0 : m_pBtnTime.clear();
179 0 : m_pFtConfidential.clear();
180 0 : m_pFtPage.clear();
181 0 : m_pFtOfQuestion.clear();
182 0 : m_pFtOf.clear();
183 0 : m_pFtNone.clear();
184 0 : m_pFtCreatedBy.clear();
185 0 : m_pFtCustomized.clear();
186 0 : SfxTabPage::dispose();
187 0 : }
188 :
189 0 : void ScHFEditPage::SetNumType(SvxNumType eNumType)
190 : {
191 0 : m_pWndLeft->SetNumType(eNumType);
192 0 : m_pWndCenter->SetNumType(eNumType);
193 0 : m_pWndRight->SetNumType(eNumType);
194 0 : }
195 :
196 0 : void ScHFEditPage::Reset( const SfxItemSet* rCoreSet )
197 : {
198 0 : const SfxPoolItem* pItem = NULL;
199 0 : if ( rCoreSet->HasItem(nWhich, &pItem) )
200 : {
201 0 : const ScPageHFItem& rItem = static_cast<const ScPageHFItem&>(*pItem);
202 :
203 0 : if( const EditTextObject* pLeft = rItem.GetLeftArea() )
204 0 : m_pWndLeft->SetText( *pLeft );
205 0 : if( const EditTextObject* pCenter = rItem.GetCenterArea() )
206 0 : m_pWndCenter->SetText( *pCenter );
207 0 : if( const EditTextObject* pRight = rItem.GetRightArea() )
208 0 : m_pWndRight->SetText( *pRight );
209 :
210 0 : SetSelectDefinedList();
211 : }
212 0 : }
213 :
214 0 : bool ScHFEditPage::FillItemSet( SfxItemSet* rCoreSet )
215 : {
216 0 : ScPageHFItem aItem( nWhich );
217 0 : EditTextObject* pLeft = m_pWndLeft->CreateTextObject();
218 0 : EditTextObject* pCenter = m_pWndCenter->CreateTextObject();
219 0 : EditTextObject* pRight = m_pWndRight->CreateTextObject();
220 :
221 0 : aItem.SetLeftArea ( *pLeft );
222 0 : aItem.SetCenterArea( *pCenter );
223 0 : aItem.SetRightArea ( *pRight );
224 0 : delete pLeft;
225 0 : delete pCenter;
226 0 : delete pRight;
227 :
228 0 : rCoreSet->Put( aItem );
229 :
230 0 : return true;
231 : }
232 :
233 : #define SET_CMD(i,id) \
234 : aCmd = aDel; \
235 : aCmd += ScGlobal::GetRscString( id ); \
236 : aCmd += aDel; \
237 : aCmdArr[i] = aCmd;
238 :
239 0 : void ScHFEditPage::FillCmdArr()
240 : {
241 0 : OUString aDel( ScGlobal::GetRscString( STR_HFCMD_DELIMITER ) );
242 0 : OUString aCmd;
243 :
244 0 : SET_CMD( 0, STR_HFCMD_PAGE )
245 0 : SET_CMD( 1, STR_HFCMD_PAGES )
246 0 : SET_CMD( 2, STR_HFCMD_DATE )
247 0 : SET_CMD( 3, STR_HFCMD_TIME )
248 0 : SET_CMD( 4, STR_HFCMD_FILE )
249 0 : SET_CMD( 5, STR_HFCMD_TABLE )
250 0 : }
251 :
252 : #undef SET_CMD
253 :
254 0 : void ScHFEditPage::InitPreDefinedList()
255 : {
256 0 : SvtUserOptions aUserOpt;
257 :
258 0 : Color* pTxtColour = NULL;
259 0 : Color* pFldColour = NULL;
260 :
261 : // Get the all field values at the outset.
262 0 : OUString aPageFieldValue(m_pWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
263 0 : OUString aSheetFieldValue(m_pWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
264 0 : OUString aFileFieldValue(m_pWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxFileField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
265 0 : OUString aExtFileFieldValue(m_pWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxExtFileField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
266 0 : OUString aDateFieldValue(m_pWndLeft->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxDateField(), EE_FEATURE_FIELD), 0,0, pTxtColour, pFldColour));
267 :
268 0 : m_pLbDefined->Clear();
269 :
270 0 : m_pLbDefined->InsertEntry(m_pFtNone->GetText());
271 :
272 0 : OUString aPageEntry(m_pFtPage->GetText() + " " + aPageFieldValue);
273 0 : m_pLbDefined->InsertEntry(aPageEntry);
274 :
275 0 : OUString aPageOfEntry(aPageEntry + " " + m_pFtOfQuestion->GetText());
276 0 : m_pLbDefined->InsertEntry( aPageOfEntry);
277 :
278 0 : m_pLbDefined->InsertEntry(aSheetFieldValue);
279 :
280 0 : OUString aConfidentialEntry(aUserOpt.GetCompany() + " " + m_pFtConfidential->GetText() + ", " + aDateFieldValue + ", " + aPageEntry);
281 0 : m_pLbDefined->InsertEntry( aConfidentialEntry);
282 :
283 0 : OUString aFileNamePageEntry(aFileFieldValue + ", " + aPageEntry);
284 0 : m_pLbDefined->InsertEntry( aFileNamePageEntry);
285 :
286 0 : m_pLbDefined->InsertEntry( aExtFileFieldValue);
287 :
288 0 : OUString aPageSheetNameEntry(aPageEntry + ", " + aSheetFieldValue);
289 0 : m_pLbDefined->InsertEntry( aPageSheetNameEntry);
290 :
291 0 : OUString aPageFileNameEntry(aPageEntry + ", " + aFileFieldValue);
292 0 : m_pLbDefined->InsertEntry( aPageFileNameEntry);
293 :
294 0 : OUString aPagePathNameEntry(aPageEntry + ", " + aExtFileFieldValue);
295 0 : m_pLbDefined->InsertEntry( aPagePathNameEntry);
296 :
297 0 : OUString aUserNameEntry(aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName() + ", " + aPageEntry + ", " + aDateFieldValue);
298 0 : m_pLbDefined->InsertEntry( aUserNameEntry);
299 :
300 0 : OUString aCreatedByEntry( m_pFtCreatedBy->GetText() + " " + aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName() + ", ");
301 0 : aCreatedByEntry += aDateFieldValue + ", " + aPageEntry;
302 0 : m_pLbDefined->InsertEntry( aCreatedByEntry);
303 0 : }
304 :
305 0 : void ScHFEditPage::InsertToDefinedList()
306 : {
307 0 : sal_uInt16 nCount = m_pLbDefined->GetEntryCount();
308 0 : if(nCount == eEntryCount)
309 : {
310 0 : m_pLbDefined->InsertEntry( m_pFtCustomized->GetText() );
311 0 : m_pLbDefined->SelectEntryPos(eEntryCount);
312 : }
313 0 : }
314 :
315 0 : void ScHFEditPage::RemoveFromDefinedList()
316 : {
317 0 : sal_uInt16 nCount = m_pLbDefined->GetEntryCount();
318 0 : if(nCount > eEntryCount )
319 0 : m_pLbDefined->RemoveEntry( nCount-1);
320 0 : }
321 :
322 : // determine if the header/footer exists in our predefined list and set select to it.
323 0 : void ScHFEditPage::SetSelectDefinedList()
324 : {
325 0 : SvtUserOptions aUserOpt;
326 :
327 : // default to customized
328 0 : ScHFEntryId eSelectEntry = eEntryCount;
329 :
330 0 : boost::scoped_ptr< EditTextObject > pLeftObj;
331 0 : boost::scoped_ptr< EditTextObject > pCenterObj;
332 0 : boost::scoped_ptr< EditTextObject > pRightObj;
333 :
334 0 : OUString aLeftEntry;
335 0 : OUString aCenterEntry;
336 0 : OUString aRightEntry;
337 :
338 0 : pLeftObj.reset(m_pWndLeft->GetEditEngine()->CreateTextObject());
339 0 : pCenterObj.reset(m_pWndCenter->GetEditEngine()->CreateTextObject());
340 0 : pRightObj.reset(m_pWndRight->GetEditEngine()->CreateTextObject());
341 :
342 0 : bool bFound = false;
343 :
344 : sal_uInt16 i;
345 0 : sal_uInt16 nCount = m_pLbDefined->GetEntryCount();
346 0 : for(i = 0; i < nCount && !bFound; i++)
347 : {
348 0 : switch(static_cast<ScHFEntryId>(i))
349 : {
350 : case eNoneEntry:
351 : {
352 0 : aLeftEntry = pLeftObj->GetText(0);
353 0 : aCenterEntry = pCenterObj->GetText(0);
354 0 : aRightEntry = pRightObj->GetText(0);
355 0 : if(aLeftEntry == EMPTY_OUSTRING && aCenterEntry == EMPTY_OUSTRING
356 0 : && aRightEntry == EMPTY_OUSTRING)
357 : {
358 0 : eSelectEntry = eNoneEntry;
359 0 : bFound = true;
360 : }
361 : }
362 0 : break;
363 :
364 : case ePageEntry:
365 : {
366 0 : aLeftEntry = pLeftObj->GetText(0);
367 0 : aRightEntry = pRightObj->GetText(0);
368 0 : if(aLeftEntry == EMPTY_OUSTRING && aRightEntry == EMPTY_OUSTRING)
369 : {
370 0 : if(IsPageEntry(m_pWndCenter->GetEditEngine(), pCenterObj.get()))
371 : {
372 0 : eSelectEntry = ePageEntry;
373 0 : bFound = true;
374 : }
375 : }
376 : }
377 0 : break;
378 :
379 : //TODO
380 : case ePagesEntry:
381 : {
382 : }
383 0 : break;
384 :
385 : case eSheetEntry:
386 : {
387 0 : aLeftEntry = pLeftObj->GetText(0);
388 0 : aRightEntry = pRightObj->GetText(0);
389 0 : if(aLeftEntry == EMPTY_OUSTRING && aRightEntry == EMPTY_OUSTRING)
390 : {
391 0 : if(pCenterObj->IsFieldObject())
392 : {
393 0 : const SvxFieldItem* pFieldItem = pCenterObj->GetField();
394 0 : if(pFieldItem)
395 : {
396 0 : const SvxFieldData* pField = pFieldItem->GetField();
397 0 : if(pField && pField->ISA(SvxTableField))
398 : {
399 0 : eSelectEntry = eSheetEntry;
400 0 : bFound = true;
401 : }
402 : }
403 : }
404 : }
405 : }
406 0 : break;
407 :
408 : case eConfidentialEntry:
409 : {
410 0 : if(IsDateEntry(pCenterObj.get()) && IsPageEntry(m_pWndRight->GetEditEngine(), pRightObj.get()))
411 : {
412 0 : OUString aConfidentialEntry(aUserOpt.GetCompany() + " " + m_pFtConfidential->GetText());
413 0 : if(aConfidentialEntry == m_pWndLeft->GetEditEngine()->GetText(0))
414 : {
415 0 : eSelectEntry = eConfidentialEntry;
416 0 : bFound = true;
417 0 : }
418 : }
419 : }
420 0 : break;
421 :
422 : //TODO
423 : case eFileNamePageEntry:
424 : {
425 : }
426 0 : break;
427 :
428 : case eExtFileNameEntry:
429 : {
430 0 : aLeftEntry = pLeftObj->GetText(0);
431 0 : aRightEntry = pRightObj->GetText(0);
432 0 : if(IsExtFileNameEntry(pCenterObj.get()) && aLeftEntry == EMPTY_OUSTRING
433 0 : && aRightEntry == EMPTY_OUSTRING)
434 : {
435 0 : eSelectEntry = eExtFileNameEntry;
436 0 : bFound = true;
437 : }
438 : }
439 0 : break;
440 :
441 : //TODO
442 : case ePageSheetEntry:
443 : {
444 : }
445 0 : break;
446 :
447 : //TODO
448 : case ePageFileNameEntry:
449 : {
450 : }
451 0 : break;
452 :
453 : case ePageExtFileNameEntry:
454 : {
455 0 : aLeftEntry = pLeftObj->GetText(0);
456 0 : if(IsPageEntry(m_pWndCenter->GetEditEngine(), pCenterObj.get()) &&
457 0 : IsExtFileNameEntry(pRightObj.get()) && aLeftEntry == EMPTY_OUSTRING)
458 : {
459 0 : eSelectEntry = ePageExtFileNameEntry;
460 0 : bFound = true;
461 : }
462 : }
463 0 : break;
464 :
465 : case eUserNameEntry:
466 : {
467 0 : if(IsDateEntry(pRightObj.get()) && IsPageEntry(m_pWndCenter->GetEditEngine(), pCenterObj.get()))
468 : {
469 0 : OUString aUserNameEntry(aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName());
470 :
471 0 : if(aUserNameEntry == m_pWndLeft->GetEditEngine()->GetText(0))
472 : {
473 0 : eSelectEntry = eUserNameEntry;
474 0 : bFound = true;
475 0 : }
476 : }
477 : }
478 0 : break;
479 :
480 : case eCreatedByEntry:
481 : {
482 0 : if(IsDateEntry(pCenterObj.get()) && IsPageEntry(m_pWndRight->GetEditEngine(), pRightObj.get()))
483 : {
484 0 : OUString aCreatedByEntry(m_pFtCreatedBy->GetText() + " " + aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName());
485 :
486 0 : if(aCreatedByEntry == m_pWndLeft->GetEditEngine()->GetText(0))
487 : {
488 0 : eSelectEntry = eCreatedByEntry;
489 0 : bFound = true;
490 0 : }
491 : }
492 : }
493 0 : break;
494 :
495 : default:
496 : {
497 : // added to avoid warnings
498 : }
499 : }
500 : }
501 :
502 0 : if(eSelectEntry == eEntryCount)
503 0 : InsertToDefinedList();
504 :
505 0 : m_pLbDefined->SelectEntryPos( sal::static_int_cast<sal_uInt16>( eSelectEntry ) );
506 0 : }
507 :
508 0 : bool ScHFEditPage::IsPageEntry(EditEngine*pEngine, EditTextObject* pTextObj)
509 : {
510 0 : if(!pEngine || !pTextObj)
511 0 : return false;
512 :
513 0 : bool bReturn = false;
514 :
515 0 : if(!pTextObj->IsFieldObject())
516 : {
517 0 : std::vector<sal_Int32> aPosList;
518 0 : pEngine->GetPortions(0,aPosList);
519 0 : if(aPosList.size() == 2)
520 : {
521 0 : OUString aPageEntry(m_pFtPage->GetText() + " ");
522 0 : ESelection aSel(0,0,0,0);
523 0 : aSel.nEndPos = aPageEntry.getLength();
524 0 : if(aPageEntry == pEngine->GetText(aSel))
525 : {
526 0 : aSel.nStartPos = aSel.nEndPos;
527 0 : aSel.nEndPos++;
528 0 : boost::scoped_ptr< EditTextObject > pPageObj;
529 0 : pPageObj.reset(pEngine->CreateTextObject(aSel));
530 0 : if(pPageObj.get() && pPageObj->IsFieldObject() )
531 : {
532 0 : const SvxFieldItem* pFieldItem = pPageObj->GetField();
533 0 : if(pFieldItem)
534 : {
535 0 : const SvxFieldData* pField = pFieldItem->GetField();
536 0 : if(pField && pField->ISA(SvxPageField))
537 0 : bReturn = true;
538 : }
539 0 : }
540 0 : }
541 0 : }
542 : }
543 0 : return bReturn;
544 : }
545 :
546 0 : bool ScHFEditPage::IsDateEntry(EditTextObject* pTextObj)
547 : {
548 0 : if(!pTextObj)
549 0 : return false;
550 :
551 0 : bool bReturn = false;
552 0 : if(pTextObj->IsFieldObject())
553 : {
554 0 : const SvxFieldItem* pFieldItem = pTextObj->GetField();
555 0 : if(pFieldItem)
556 : {
557 0 : const SvxFieldData* pField = pFieldItem->GetField();
558 0 : if(pField && pField->ISA(SvxDateField))
559 0 : bReturn = true;
560 : }
561 : }
562 0 : return bReturn;
563 : }
564 :
565 0 : bool ScHFEditPage::IsExtFileNameEntry(EditTextObject* pTextObj)
566 : {
567 0 : if(!pTextObj)
568 0 : return false;
569 0 : bool bReturn = false;
570 0 : if(pTextObj->IsFieldObject())
571 : {
572 0 : const SvxFieldItem* pFieldItem = pTextObj->GetField();
573 0 : if(pFieldItem)
574 : {
575 0 : const SvxFieldData* pField = pFieldItem->GetField();
576 0 : if(pField && pField->ISA(SvxExtFileField))
577 0 : bReturn = true;
578 : }
579 : }
580 0 : return bReturn;
581 : }
582 :
583 0 : void ScHFEditPage::ProcessDefinedListSel(ScHFEntryId eSel, bool bTravelling)
584 : {
585 0 : SvtUserOptions aUserOpt;
586 0 : boost::scoped_ptr< EditTextObject > pTextObj;
587 :
588 0 : switch(eSel)
589 : {
590 : case eNoneEntry:
591 0 : ClearTextAreas();
592 0 : if(!bTravelling)
593 0 : m_pWndLeft->GrabFocus();
594 0 : break;
595 :
596 : case ePageEntry:
597 : {
598 0 : ClearTextAreas();
599 0 : OUString aPageEntry( m_pFtPage->GetText() + " " );
600 0 : m_pWndCenter->GetEditEngine()->SetText(aPageEntry);
601 0 : m_pWndCenter->InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD) );
602 0 : if(!bTravelling)
603 0 : m_pWndCenter->GrabFocus();
604 : }
605 0 : break;
606 :
607 : case ePagesEntry:
608 : {
609 0 : ClearTextAreas();
610 0 : ESelection aSel(0,0,0,0);
611 0 : OUString aPageEntry( m_pFtPage->GetText() + " ");
612 0 : m_pWndCenter->GetEditEngine()->SetText(aPageEntry);
613 0 : aSel.nEndPos = aPageEntry.getLength();
614 0 : m_pWndCenter->GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
615 0 : ++aSel.nEndPos;
616 :
617 0 : OUString aPageOfEntry(" " + m_pFtOf->GetText() + " ");
618 0 : m_pWndCenter->GetEditEngine()->QuickInsertText(aPageOfEntry,ESelection(aSel.nEndPara,aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
619 0 : aSel.nEndPos = aSel.nEndPos + aPageOfEntry.getLength();
620 0 : m_pWndCenter->GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPagesField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara,aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
621 0 : pTextObj.reset(m_pWndCenter->GetEditEngine()->CreateTextObject());
622 0 : m_pWndCenter->SetText(*pTextObj);
623 0 : if(!bTravelling)
624 0 : m_pWndCenter->GrabFocus();
625 : }
626 0 : break;
627 :
628 : case eSheetEntry:
629 0 : ClearTextAreas();
630 0 : m_pWndCenter->InsertField( SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD) );
631 0 : if(!bTravelling)
632 0 : m_pWndCenter->GrabFocus();
633 0 : break;
634 :
635 : case eConfidentialEntry:
636 : {
637 0 : ClearTextAreas();
638 0 : OUString aConfidentialEntry(aUserOpt.GetCompany() + " " + m_pFtConfidential->GetText());
639 0 : m_pWndLeft->GetEditEngine()->SetText(aConfidentialEntry);
640 0 : m_pWndCenter->InsertField( SvxFieldItem(SvxDateField(Date( Date::SYSTEM ),SVXDATETYPE_VAR), EE_FEATURE_FIELD) );
641 :
642 0 : OUString aPageEntry( m_pFtPage->GetText() + " ");
643 0 : m_pWndRight->GetEditEngine()->SetText(aPageEntry);
644 0 : m_pWndRight->InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD) );
645 0 : if(!bTravelling)
646 0 : m_pWndRight->GrabFocus();
647 : }
648 0 : break;
649 :
650 : case eFileNamePageEntry:
651 : {
652 0 : ClearTextAreas();
653 0 : ESelection aSel(0,0,0,0);
654 0 : m_pWndCenter->GetEditEngine()->QuickInsertField(SvxFieldItem( SvxFileField(), EE_FEATURE_FIELD ), aSel );
655 0 : ++aSel.nEndPos;
656 0 : OUString aPageEntry(", " + m_pFtPage->GetText() + " ");
657 0 : m_pWndCenter->GetEditEngine()->QuickInsertText(aPageEntry, ESelection(aSel.nEndPara,aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
658 0 : aSel.nStartPos = aSel.nEndPos;
659 0 : aSel.nEndPos = aSel.nEndPos + aPageEntry.getLength();
660 0 : m_pWndCenter->GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara,aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
661 0 : pTextObj.reset(m_pWndCenter->GetEditEngine()->CreateTextObject());
662 0 : m_pWndCenter->SetText(*pTextObj);
663 0 : if(!bTravelling)
664 0 : m_pWndCenter->GrabFocus();
665 : }
666 0 : break;
667 :
668 : case eExtFileNameEntry:
669 0 : ClearTextAreas();
670 : m_pWndCenter->InsertField( SvxFieldItem( SvxExtFileField(
671 0 : EMPTY_OUSTRING, SVXFILETYPE_VAR, SVXFILEFORMAT_FULLPATH ), EE_FEATURE_FIELD ) );
672 0 : if(!bTravelling)
673 0 : m_pWndCenter->GrabFocus();
674 0 : break;
675 :
676 : case ePageSheetEntry:
677 : {
678 0 : ClearTextAreas();
679 0 : ESelection aSel(0,0,0,0);
680 0 : OUString aPageEntry( m_pFtPage->GetText() + " " );
681 0 : m_pWndCenter->GetEditEngine()->SetText(aPageEntry);
682 0 : aSel.nEndPos = aPageEntry.getLength();
683 0 : m_pWndCenter->GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
684 0 : ++aSel.nEndPos;
685 :
686 0 : OUString aCommaSpace(", ");
687 0 : m_pWndCenter->GetEditEngine()->QuickInsertText(aCommaSpace,ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
688 0 : aSel.nEndPos = aSel.nEndPos + aCommaSpace.getLength();
689 0 : m_pWndCenter->GetEditEngine()->QuickInsertField( SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
690 0 : pTextObj.reset(m_pWndCenter->GetEditEngine()->CreateTextObject());
691 0 : m_pWndCenter->SetText(*pTextObj);
692 0 : if(!bTravelling)
693 0 : m_pWndCenter->GrabFocus();
694 : }
695 0 : break;
696 :
697 : case ePageFileNameEntry:
698 : {
699 0 : ClearTextAreas();
700 0 : ESelection aSel(0,0,0,0);
701 0 : OUString aPageEntry( m_pFtPage->GetText() + " " );
702 0 : m_pWndCenter->GetEditEngine()->SetText(aPageEntry);
703 0 : aSel.nEndPos = aPageEntry.getLength();
704 0 : m_pWndCenter->GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
705 0 : ++aSel.nEndPos;
706 0 : OUString aCommaSpace(", ");
707 0 : m_pWndCenter->GetEditEngine()->QuickInsertText(aCommaSpace,ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
708 0 : aSel.nEndPos = aSel.nEndPos + aCommaSpace.getLength();
709 0 : m_pWndCenter->GetEditEngine()->QuickInsertField( SvxFieldItem(SvxFileField(), EE_FEATURE_FIELD), ESelection(aSel.nEndPara, aSel.nEndPos, aSel.nEndPara, aSel.nEndPos));
710 0 : pTextObj.reset(m_pWndCenter->GetEditEngine()->CreateTextObject());
711 0 : m_pWndCenter->SetText(*pTextObj);
712 0 : if(!bTravelling)
713 0 : m_pWndCenter->GrabFocus();
714 : }
715 0 : break;
716 :
717 : case ePageExtFileNameEntry:
718 : {
719 0 : ClearTextAreas();
720 0 : OUString aPageEntry( m_pFtPage->GetText() + " " );
721 0 : m_pWndCenter->GetEditEngine()->SetText(aPageEntry);
722 0 : m_pWndCenter->InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD) );
723 : m_pWndRight->InsertField( SvxFieldItem( SvxExtFileField(
724 0 : EMPTY_OUSTRING, SVXFILETYPE_VAR, SVXFILEFORMAT_FULLPATH ), EE_FEATURE_FIELD ) );
725 0 : if(!bTravelling)
726 0 : m_pWndRight->GrabFocus();
727 : }
728 0 : break;
729 :
730 : case eUserNameEntry:
731 : {
732 0 : ClearTextAreas();
733 0 : OUString aUserNameEntry(aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName());
734 0 : m_pWndLeft->GetEditEngine()->SetText(aUserNameEntry);
735 0 : OUString aPageEntry( m_pFtPage->GetText() + " ");
736 : //aPageEntry += " ";
737 0 : m_pWndCenter->GetEditEngine()->SetText(aPageEntry);
738 0 : m_pWndCenter->InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD) );
739 0 : m_pWndRight->InsertField( SvxFieldItem(SvxDateField(Date( Date::SYSTEM ),SVXDATETYPE_VAR), EE_FEATURE_FIELD) );
740 0 : if(!bTravelling)
741 0 : m_pWndRight->GrabFocus();
742 : }
743 0 : break;
744 :
745 : case eCreatedByEntry:
746 : {
747 0 : ClearTextAreas();
748 0 : OUString aCreatedByEntry( m_pFtCreatedBy->GetText() + " " + aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName());
749 0 : m_pWndLeft->GetEditEngine()->SetText(aCreatedByEntry);
750 0 : m_pWndCenter->InsertField( SvxFieldItem(SvxDateField(Date( Date::SYSTEM ),SVXDATETYPE_VAR), EE_FEATURE_FIELD) );
751 0 : OUString aPageEntry( m_pFtPage->GetText() );
752 0 : aPageEntry += " ";
753 0 : m_pWndRight->GetEditEngine()->SetText(aPageEntry);
754 0 : m_pWndRight->InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD) );
755 0 : if(!bTravelling)
756 0 : m_pWndRight->GrabFocus();
757 : }
758 0 : break;
759 :
760 : default :
761 0 : break;
762 0 : }
763 0 : }
764 :
765 0 : void ScHFEditPage::ClearTextAreas()
766 : {
767 0 : m_pWndLeft->GetEditEngine()->SetText(EMPTY_OUSTRING);
768 0 : m_pWndLeft->Invalidate();
769 0 : m_pWndCenter->GetEditEngine()->SetText(EMPTY_OUSTRING);
770 0 : m_pWndCenter->Invalidate();
771 0 : m_pWndRight->GetEditEngine()->SetText(EMPTY_OUSTRING);
772 0 : m_pWndRight->Invalidate();
773 0 : }
774 :
775 : // Handler:
776 :
777 0 : IMPL_LINK( ScHFEditPage, ListHdl_Impl, ListBox*, pList )
778 : {
779 0 : if ( pList && pList == m_pLbDefined )
780 : {
781 0 : ScHFEntryId eSel = static_cast<ScHFEntryId>(m_pLbDefined->GetSelectEntryPos());
782 0 : if(!m_pLbDefined->IsTravelSelect())
783 : {
784 0 : ProcessDefinedListSel(eSel);
785 :
786 : // check if we need to remove the customized entry.
787 0 : if(eSel < eEntryCount)
788 0 : RemoveFromDefinedList();
789 : }
790 : else
791 : {
792 0 : ProcessDefinedListSel(eSel, true);
793 : }
794 : }
795 0 : return 0;
796 : }
797 :
798 0 : IMPL_LINK( ScHFEditPage, ClickHdl, PushButton*, pBtn )
799 : {
800 0 : pActiveEdWnd = ::GetScEditWindow();
801 0 : if ( !pActiveEdWnd )
802 0 : return 0;
803 :
804 0 : if ( pBtn == m_pBtnText )
805 : {
806 0 : pActiveEdWnd->SetCharAttributes();
807 : }
808 : else
809 : {
810 0 : if ( pBtn == m_pBtnPage )
811 0 : pActiveEdWnd->InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD) );
812 0 : else if ( pBtn == m_pBtnLastPage )
813 0 : pActiveEdWnd->InsertField( SvxFieldItem(SvxPagesField(), EE_FEATURE_FIELD) );
814 0 : else if ( pBtn == m_pBtnDate )
815 0 : pActiveEdWnd->InsertField( SvxFieldItem(SvxDateField(Date( Date::SYSTEM ),SVXDATETYPE_VAR), EE_FEATURE_FIELD) );
816 0 : else if ( pBtn == m_pBtnTime )
817 0 : pActiveEdWnd->InsertField( SvxFieldItem(SvxTimeField(), EE_FEATURE_FIELD) );
818 0 : else if ( pBtn == m_pBtnFile )
819 : {
820 0 : pActiveEdWnd->InsertField( SvxFieldItem( SvxFileField(), EE_FEATURE_FIELD ) );
821 : }
822 0 : else if ( pBtn == m_pBtnTable )
823 0 : pActiveEdWnd->InsertField( SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD) );
824 : }
825 0 : InsertToDefinedList();
826 0 : pActiveEdWnd->GrabFocus();
827 :
828 0 : return 0;
829 : }
830 :
831 0 : IMPL_STATIC_LINK( ScHFEditPage, MenuHdl, ScExtIButton*, pBtn )
832 : {
833 0 : pActiveEdWnd = ::GetScEditWindow();
834 0 : if ( !pActiveEdWnd )
835 0 : return 0;
836 :
837 0 : if(pBtn!=NULL)
838 : {
839 : SAL_WARN_IF(pBtn->GetSelected() == 0, "sc.ui", "nothing selected");
840 0 : OString sSelectedId = pBtn->GetSelectedIdent();
841 :
842 0 : if (sSelectedId == "title")
843 : {
844 0 : pActiveEdWnd->InsertField( SvxFieldItem( SvxFileField(), EE_FEATURE_FIELD ) );
845 : }
846 0 : else if (sSelectedId == "filename")
847 : {
848 : pActiveEdWnd->InsertField( SvxFieldItem( SvxExtFileField(
849 0 : OUString(), SVXFILETYPE_VAR, SVXFILEFORMAT_NAME_EXT ), EE_FEATURE_FIELD ) );
850 : }
851 0 : else if (sSelectedId == "pathname")
852 : {
853 : pActiveEdWnd->InsertField( SvxFieldItem( SvxExtFileField(
854 0 : OUString(), SVXFILETYPE_VAR, SVXFILEFORMAT_FULLPATH ), EE_FEATURE_FIELD ) );
855 0 : }
856 : }
857 0 : return 0;
858 : }
859 :
860 : // class ScRightHeaderEditPage
861 :
862 0 : ScRightHeaderEditPage::ScRightHeaderEditPage( vcl::Window* pParent, const SfxItemSet& rCoreSet )
863 : : ScHFEditPage( pParent,
864 : rCoreSet,
865 0 : rCoreSet.GetPool()->GetWhich(SID_SCATTR_PAGE_HEADERRIGHT ),
866 0 : true )
867 0 : {}
868 :
869 0 : VclPtr<SfxTabPage> ScRightHeaderEditPage::Create( vcl::Window* pParent, const SfxItemSet* rCoreSet )
870 : {
871 0 : return VclPtr<ScRightHeaderEditPage>::Create( pParent, *rCoreSet );
872 : }
873 :
874 : // class ScLeftHeaderEditPage
875 :
876 0 : ScLeftHeaderEditPage::ScLeftHeaderEditPage( vcl::Window* pParent, const SfxItemSet& rCoreSet )
877 : : ScHFEditPage( pParent,
878 : rCoreSet,
879 0 : rCoreSet.GetPool()->GetWhich(SID_SCATTR_PAGE_HEADERLEFT ),
880 0 : true )
881 0 : {}
882 :
883 0 : VclPtr<SfxTabPage> ScLeftHeaderEditPage::Create( vcl::Window* pParent, const SfxItemSet* rCoreSet )
884 : {
885 0 : return VclPtr<ScLeftHeaderEditPage>::Create( pParent, *rCoreSet );
886 : }
887 :
888 : // class ScRightFooterEditPage
889 :
890 0 : ScRightFooterEditPage::ScRightFooterEditPage( vcl::Window* pParent, const SfxItemSet& rCoreSet )
891 : : ScHFEditPage( pParent,
892 : rCoreSet,
893 0 : rCoreSet.GetPool()->GetWhich(SID_SCATTR_PAGE_FOOTERRIGHT ),
894 0 : false )
895 0 : {}
896 :
897 0 : VclPtr<SfxTabPage> ScRightFooterEditPage::Create( vcl::Window* pParent, const SfxItemSet* rCoreSet )
898 : {
899 0 : return VclPtr<ScRightFooterEditPage>::Create( pParent, *rCoreSet );
900 : }
901 :
902 : // class ScLeftFooterEditPage
903 :
904 0 : ScLeftFooterEditPage::ScLeftFooterEditPage( vcl::Window* pParent, const SfxItemSet& rCoreSet )
905 : : ScHFEditPage( pParent,
906 : rCoreSet,
907 0 : rCoreSet.GetPool()->GetWhich(SID_SCATTR_PAGE_FOOTERLEFT ),
908 0 : false )
909 0 : {}
910 :
911 0 : VclPtr<SfxTabPage> ScLeftFooterEditPage::Create( vcl::Window* pParent, const SfxItemSet* rCoreSet )
912 : {
913 0 : return VclPtr<ScLeftFooterEditPage>::Create( pParent, *rCoreSet );
914 0 : };
915 :
916 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|