1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #undef SC_DLLIMPLEMENTATION
22 #include <scitems.hxx>
23 #include <editeng/eeitem.hxx>
25 #include <editeng/editobj.hxx>
26 #include <editeng/flditem.hxx>
28 #include <sfx2/tabdlg.hxx>
29 #include <vcl/settings.hxx>
31 #include <unotools/useroptions.hxx>
33 #include <editutil.hxx>
36 #include <patattr.hxx>
38 #include <scuitphfedit.hxx>
42 ScHFEditPage::ScHFEditPage(weld::Container
* pPage
, weld::DialogController
* pController
,
43 const SfxItemSet
& rCoreAttrs
,
46 : SfxTabPage(pPage
, pController
, "modules/scalc/ui/headerfootercontent.ui", "HeaderFooterContent", &rCoreAttrs
)
48 , m_bDropDownActive(false)
50 , m_xFtDefinedHF(m_xBuilder
->weld_label(!bHeader
? "labelFT_F_DEFINED" : "labelFT_H_DEFINED"))
51 , m_xLbDefined(m_xBuilder
->weld_combo_box("comboLB_DEFINED"))
52 , m_xFtCustomHF(m_xBuilder
->weld_label(!bHeader
? "labelFT_F_CUSTOM" : "labelFT_H_CUSTOM"))
53 , m_xBtnText(m_xBuilder
->weld_button("buttonBTN_TEXT"))
54 , m_xBtnFile(m_xBuilder
->weld_menu_button("buttonBTN_FILE"))
55 , m_xBtnTable(m_xBuilder
->weld_button("buttonBTN_TABLE"))
56 , m_xBtnPage(m_xBuilder
->weld_button("buttonBTN_PAGE"))
57 , m_xBtnLastPage(m_xBuilder
->weld_button("buttonBTN_PAGES"))
58 , m_xBtnDate(m_xBuilder
->weld_button("buttonBTN_DATE"))
59 , m_xBtnTime(m_xBuilder
->weld_button("buttonBTN_TIME"))
60 , m_xFtConfidential(m_xBuilder
->weld_label("labelSTR_HF_CONFIDENTIAL"))
61 , m_xFtPage(m_xBuilder
->weld_label("labelSTR_PAGE"))
62 , m_xFtOfQuestion(m_xBuilder
->weld_label("labelSTR_HF_OF_QUESTION"))
63 , m_xFtOf(m_xBuilder
->weld_label("labelSTR_HF_OF"))
64 , m_xFtNone(m_xBuilder
->weld_label("labelSTR_HF_NONE_IN_BRACKETS"))
65 , m_xFtCreatedBy(m_xBuilder
->weld_label("labelSTR_HF_CREATED_BY"))
66 , m_xFtCustomized(m_xBuilder
->weld_label("labelSTR_HF_CUSTOMIZED"))
67 , m_xLeft(m_xBuilder
->weld_widget("labelFT_LEFT"))
68 , m_xRight(m_xBuilder
->weld_widget("labelFT_RIGHT"))
69 , m_xWndLeft(new ScEditWindow(Left
, pController
->getDialog()))
70 , m_xWndCenter(new ScEditWindow(Center
, pController
->getDialog()))
71 , m_xWndRight(new ScEditWindow(Right
, pController
->getDialog()))
72 , m_xWndLeftWnd(new weld::CustomWeld(*m_xBuilder
, "textviewWND_LEFT", *m_xWndLeft
))
73 , m_xWndCenterWnd(new weld::CustomWeld(*m_xBuilder
, "textviewWND_CENTER", *m_xWndCenter
))
74 , m_xWndRightWnd(new weld::CustomWeld(*m_xBuilder
, "textviewWND_RIGHT", *m_xWndRight
))
75 , m_pEditFocus(nullptr)
77 // tdf#114695 override natural size with a small value
78 // we expect this to get stretched to some larger but
79 // limited size based on surrounding widgets
80 m_xLbDefined
->set_size_request(m_xLbDefined
->get_approximate_digit_width() * 20, -1);
82 //! use default style from current document?
83 //! if font color is used, header/footer background color must be set
85 ScPatternAttr
aPatAttr( rCoreAttrs
.GetPool() );
87 m_xLbDefined
->connect_popup_toggled( LINK( this, ScHFEditPage
, ListToggleHdl_Impl
) );
88 m_xLbDefined
->connect_changed( LINK( this, ScHFEditPage
, ListHdl_Impl
) );
89 m_xBtnFile
->connect_selected( LINK( this, ScHFEditPage
, MenuHdl
) );
90 m_xBtnText
->connect_clicked( LINK( this, ScHFEditPage
, ClickHdl
) );
91 m_xBtnPage
->connect_clicked( LINK( this, ScHFEditPage
, ClickHdl
) );
92 m_xBtnLastPage
->connect_clicked( LINK( this, ScHFEditPage
, ClickHdl
) );
93 m_xBtnDate
->connect_clicked( LINK( this, ScHFEditPage
, ClickHdl
) );
94 m_xBtnTime
->connect_clicked( LINK( this, ScHFEditPage
, ClickHdl
) );
95 m_xBtnTable
->connect_clicked( LINK( this, ScHFEditPage
, ClickHdl
) );
97 m_xFtDefinedHF
->show();
98 m_xFtCustomHF
->show();
100 //swap left/right areas and their labels in RTL mode
101 if( AllSettings::GetLayoutRTL() )
103 sal_Int32 nOldLeftAttach
= m_xLeft
->get_grid_left_attach();
104 sal_Int32 nOldRightAttach
= m_xRight
->get_grid_left_attach();
105 m_xLeft
->set_grid_left_attach(nOldRightAttach
);
106 m_xRight
->set_grid_left_attach(nOldLeftAttach
);
108 nOldLeftAttach
= m_xWndLeftWnd
->get_grid_left_attach();
109 nOldRightAttach
= m_xWndRightWnd
->get_grid_left_attach();
110 m_xWndLeftWnd
->set_grid_left_attach(nOldRightAttach
);
111 m_xWndRightWnd
->set_grid_left_attach(nOldLeftAttach
);
113 m_xWndLeft
->SetFont( aPatAttr
);
114 m_xWndCenter
->SetFont( aPatAttr
);
115 m_xWndRight
->SetFont( aPatAttr
);
117 m_xWndLeft
->SetObjectSelectHdl( LINK(this,ScHFEditPage
,ObjectSelectHdl
) );
118 m_xWndCenter
->SetObjectSelectHdl( LINK(this,ScHFEditPage
,ObjectSelectHdl
) );
119 m_xWndRight
->SetObjectSelectHdl( LINK(this,ScHFEditPage
,ObjectSelectHdl
) );
120 auto setEditFocus
= [this](ScEditWindow
& rEdit
) { this->m_pEditFocus
= &rEdit
; };
121 m_xWndLeft
->SetGetFocusHdl(setEditFocus
);
122 m_xWndCenter
->SetGetFocusHdl(setEditFocus
);
123 m_xWndRight
->SetGetFocusHdl(setEditFocus
);
125 m_xWndLeft
->GrabFocus();
126 m_pEditFocus
= m_xWndLeft
.get(); // there's no event from grab_focus()
128 InitPreDefinedList();
132 IMPL_LINK_NOARG( ScHFEditPage
, ObjectSelectHdl
, ScEditWindow
&, void )
134 m_xBtnText
->grab_focus();
137 ScHFEditPage::~ScHFEditPage()
141 void ScHFEditPage::SetNumType(SvxNumType eNumType
)
143 m_xWndLeft
->SetNumType(eNumType
);
144 m_xWndCenter
->SetNumType(eNumType
);
145 m_xWndRight
->SetNumType(eNumType
);
148 void ScHFEditPage::Reset( const SfxItemSet
* rCoreSet
)
150 const SfxPoolItem
* pItem
= nullptr;
151 if ( !rCoreSet
->HasItem(nWhich
, &pItem
) )
154 const ScPageHFItem
& rItem
= static_cast<const ScPageHFItem
&>(*pItem
);
156 if( const EditTextObject
* pLeft
= rItem
.GetLeftArea() )
157 m_xWndLeft
->SetText( *pLeft
);
158 if( const EditTextObject
* pCenter
= rItem
.GetCenterArea() )
159 m_xWndCenter
->SetText( *pCenter
);
160 if( const EditTextObject
* pRight
= rItem
.GetRightArea() )
161 m_xWndRight
->SetText( *pRight
);
163 SetSelectDefinedList();
166 bool ScHFEditPage::FillItemSet( SfxItemSet
* rCoreSet
)
168 ScPageHFItem
aItem( nWhich
);
169 std::unique_ptr
<EditTextObject
> pLeft
= m_xWndLeft
->CreateTextObject();
170 std::unique_ptr
<EditTextObject
> pCenter
= m_xWndCenter
->CreateTextObject();
171 std::unique_ptr
<EditTextObject
> pRight
= m_xWndRight
->CreateTextObject();
173 aItem
.SetLeftArea ( *pLeft
);
174 aItem
.SetCenterArea( *pCenter
);
175 aItem
.SetRightArea ( *pRight
);
177 rCoreSet
->Put( aItem
);
182 void ScHFEditPage::InitPreDefinedList()
184 SvtUserOptions aUserOpt
;
186 std::optional
<Color
> pTxtColour
;
187 std::optional
<Color
> pFldColour
;
189 // Get the all field values at the outset.
190 OUString
aPageFieldValue(m_xWndLeft
->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD
), 0,0, pTxtColour
, pFldColour
));
191 OUString
aSheetFieldValue(m_xWndLeft
->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD
), 0,0, pTxtColour
, pFldColour
));
192 OUString
aFileFieldValue(m_xWndLeft
->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxFileField(), EE_FEATURE_FIELD
), 0,0, pTxtColour
, pFldColour
));
193 OUString
aExtFileFieldValue(m_xWndLeft
->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxExtFileField(), EE_FEATURE_FIELD
), 0,0, pTxtColour
, pFldColour
));
194 OUString
aDateFieldValue(m_xWndLeft
->GetEditEngine()->CalcFieldValue(SvxFieldItem(SvxDateField(), EE_FEATURE_FIELD
), 0,0, pTxtColour
, pFldColour
));
196 m_xLbDefined
->clear();
198 m_xLbDefined
->append_text(m_xFtNone
->get_label());
200 OUString
aPageEntry(m_xFtPage
->get_label() + " " + aPageFieldValue
);
201 m_xLbDefined
->append_text(aPageEntry
);
203 OUString
aPageOfEntry(aPageEntry
+ " " + m_xFtOfQuestion
->get_label());
204 m_xLbDefined
->append_text( aPageOfEntry
);
206 m_xLbDefined
->append_text(aSheetFieldValue
);
208 OUString
aConfidentialEntry(aUserOpt
.GetCompany() + " " + m_xFtConfidential
->get_label() + ", " + aDateFieldValue
+ ", " + aPageEntry
);
209 m_xLbDefined
->append_text( aConfidentialEntry
);
211 OUString
aFileNamePageEntry(aFileFieldValue
+ ", " + aPageEntry
);
212 m_xLbDefined
->append_text( aFileNamePageEntry
);
214 m_xLbDefined
->append_text( aExtFileFieldValue
);
216 OUString
aPageSheetNameEntry(aPageEntry
+ ", " + aSheetFieldValue
);
217 m_xLbDefined
->append_text( aPageSheetNameEntry
);
219 OUString
aPageFileNameEntry(aPageEntry
+ ", " + aFileFieldValue
);
220 m_xLbDefined
->append_text( aPageFileNameEntry
);
222 OUString
aPagePathNameEntry(aPageEntry
+ ", " + aExtFileFieldValue
);
223 m_xLbDefined
->append_text( aPagePathNameEntry
);
225 OUString
aUserNameEntry(aUserOpt
.GetFirstName() + " " + aUserOpt
.GetLastName() + ", " + aPageEntry
+ ", " + aDateFieldValue
);
226 m_xLbDefined
->append_text( aUserNameEntry
);
228 OUString aCreatedByEntry
= m_xFtCreatedBy
->get_label() + " " + aUserOpt
.GetFirstName() + " " + aUserOpt
.GetLastName() + ", " +
229 aDateFieldValue
+ ", " + aPageEntry
;
230 m_xLbDefined
->append_text( aCreatedByEntry
);
233 void ScHFEditPage::InsertToDefinedList()
235 const sal_Int32 nCount
= m_xLbDefined
->get_count();
236 if(nCount
== eEntryCount
)
238 m_xLbDefined
->append_text( m_xFtCustomized
->get_label() );
239 m_xLbDefined
->set_active(eEntryCount
);
243 void ScHFEditPage::RemoveFromDefinedList()
245 const sal_Int32 nCount
= m_xLbDefined
->get_count();
246 if(nCount
> eEntryCount
)
247 m_xLbDefined
->remove( nCount
-1);
250 // determine if the header/footer exists in our predefined list and set select to it.
251 void ScHFEditPage::SetSelectDefinedList()
253 SvtUserOptions aUserOpt
;
255 // default to customized
256 ScHFEntryId eSelectEntry
= eEntryCount
;
258 std::unique_ptr
< EditTextObject
> pLeftObj
;
259 std::unique_ptr
< EditTextObject
> pCenterObj
;
260 std::unique_ptr
< EditTextObject
> pRightObj
;
263 OUString aCenterEntry
;
264 OUString aRightEntry
;
266 pLeftObj
= m_xWndLeft
->GetEditEngine()->CreateTextObject();
267 pCenterObj
= m_xWndCenter
->GetEditEngine()->CreateTextObject();
268 pRightObj
= m_xWndRight
->GetEditEngine()->CreateTextObject();
272 const sal_Int32 nCount
= m_xLbDefined
->get_count();
273 for(sal_Int32 i
= 0; i
< nCount
&& !bFound
; ++i
)
275 switch(static_cast<ScHFEntryId
>(i
))
279 aLeftEntry
= pLeftObj
->GetText(0);
280 aCenterEntry
= pCenterObj
->GetText(0);
281 aRightEntry
= pRightObj
->GetText(0);
282 if(aLeftEntry
== EMPTY_OUSTRING
&& aCenterEntry
== EMPTY_OUSTRING
283 && aRightEntry
== EMPTY_OUSTRING
)
285 eSelectEntry
= eNoneEntry
;
293 aLeftEntry
= pLeftObj
->GetText(0);
294 aRightEntry
= pRightObj
->GetText(0);
295 if(aLeftEntry
== EMPTY_OUSTRING
&& aRightEntry
== EMPTY_OUSTRING
)
297 if(IsPageEntry(m_xWndCenter
->GetEditEngine(), pCenterObj
.get()))
299 eSelectEntry
= ePageEntry
;
314 aLeftEntry
= pLeftObj
->GetText(0);
315 aRightEntry
= pRightObj
->GetText(0);
316 if(aLeftEntry
== EMPTY_OUSTRING
&& aRightEntry
== EMPTY_OUSTRING
)
318 if(pCenterObj
->IsFieldObject())
320 const SvxFieldItem
* pFieldItem
= pCenterObj
->GetField();
323 const SvxFieldData
* pField
= pFieldItem
->GetField();
324 if(dynamic_cast<const SvxTableField
*>( pField
))
326 eSelectEntry
= eSheetEntry
;
335 case eConfidentialEntry
:
337 if(IsDateEntry(pCenterObj
.get()) && IsPageEntry(m_xWndRight
->GetEditEngine(), pRightObj
.get()))
339 OUString
aConfidentialEntry(aUserOpt
.GetCompany() + " " + m_xFtConfidential
->get_label());
340 if(aConfidentialEntry
== m_xWndLeft
->GetEditEngine()->GetText(0))
342 eSelectEntry
= eConfidentialEntry
;
350 case eFileNamePageEntry
:
355 case eExtFileNameEntry
:
357 aLeftEntry
= pLeftObj
->GetText(0);
358 aRightEntry
= pRightObj
->GetText(0);
359 if(IsExtFileNameEntry(pCenterObj
.get()) && aLeftEntry
== EMPTY_OUSTRING
360 && aRightEntry
== EMPTY_OUSTRING
)
362 eSelectEntry
= eExtFileNameEntry
;
369 case ePageSheetEntry
:
375 case ePageFileNameEntry
:
380 case ePageExtFileNameEntry
:
382 aLeftEntry
= pLeftObj
->GetText(0);
383 if(IsPageEntry(m_xWndCenter
->GetEditEngine(), pCenterObj
.get()) &&
384 IsExtFileNameEntry(pRightObj
.get()) && aLeftEntry
== EMPTY_OUSTRING
)
386 eSelectEntry
= ePageExtFileNameEntry
;
394 if(IsDateEntry(pRightObj
.get()) && IsPageEntry(m_xWndCenter
->GetEditEngine(), pCenterObj
.get()))
396 OUString
aUserNameEntry(aUserOpt
.GetFirstName() + " " + aUserOpt
.GetLastName());
398 if(aUserNameEntry
== m_xWndLeft
->GetEditEngine()->GetText(0))
400 eSelectEntry
= eUserNameEntry
;
407 case eCreatedByEntry
:
409 if(IsDateEntry(pCenterObj
.get()) && IsPageEntry(m_xWndRight
->GetEditEngine(), pRightObj
.get()))
411 OUString
aCreatedByEntry(m_xFtCreatedBy
->get_label() + " " + aUserOpt
.GetFirstName() + " " + aUserOpt
.GetLastName());
413 if(aCreatedByEntry
== m_xWndLeft
->GetEditEngine()->GetText(0))
415 eSelectEntry
= eCreatedByEntry
;
424 // added to avoid warnings
429 if(eSelectEntry
== eEntryCount
)
430 InsertToDefinedList();
432 m_xLbDefined
->set_active( sal::static_int_cast
<sal_uInt16
>( eSelectEntry
) );
435 bool ScHFEditPage::IsPageEntry(EditEngine
*pEngine
, const EditTextObject
* pTextObj
)
437 if(!pEngine
|| !pTextObj
)
440 bool bReturn
= false;
442 if(!pTextObj
->IsFieldObject())
444 std::vector
<sal_Int32
> aPosList
;
445 pEngine
->GetPortions(0,aPosList
);
446 if(aPosList
.size() == 2)
448 OUString
aPageEntry(m_xFtPage
->get_label() + " ");
449 ESelection
aSel(0,0,0,0);
450 aSel
.nEndPos
= aPageEntry
.getLength();
451 if(aPageEntry
== pEngine
->GetText(aSel
))
453 aSel
.nStartPos
= aSel
.nEndPos
;
455 std::unique_ptr
< EditTextObject
> pPageObj
= pEngine
->CreateTextObject(aSel
);
456 if(pPageObj
&& pPageObj
->IsFieldObject() )
458 const SvxFieldItem
* pFieldItem
= pPageObj
->GetField();
461 const SvxFieldData
* pField
= pFieldItem
->GetField();
462 if(dynamic_cast<const SvxPageField
*>( pField
))
472 bool ScHFEditPage::IsDateEntry(const EditTextObject
* pTextObj
)
477 bool bReturn
= false;
478 if(pTextObj
->IsFieldObject())
480 const SvxFieldItem
* pFieldItem
= pTextObj
->GetField();
483 const SvxFieldData
* pField
= pFieldItem
->GetField();
484 if(dynamic_cast<const SvxDateField
*>( pField
))
491 bool ScHFEditPage::IsExtFileNameEntry(const EditTextObject
* pTextObj
)
495 bool bReturn
= false;
496 if(pTextObj
->IsFieldObject())
498 const SvxFieldItem
* pFieldItem
= pTextObj
->GetField();
501 const SvxFieldData
* pField
= pFieldItem
->GetField();
502 if(dynamic_cast<const SvxExtFileField
*>( pField
))
509 void ScHFEditPage::ProcessDefinedListSel(ScHFEntryId eSel
, bool bTravelling
)
511 SvtUserOptions aUserOpt
;
512 std::unique_ptr
< EditTextObject
> pTextObj
;
519 m_xWndLeft
->GrabFocus();
525 OUString
aPageEntry( m_xFtPage
->get_label() + " " );
526 m_xWndCenter
->GetEditEngine()->SetTextCurrentDefaults(aPageEntry
);
527 m_xWndCenter
->InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD
) );
529 m_xWndCenter
->GrabFocus();
536 ESelection
aSel(0,0,0,0);
537 OUString
aPageEntry( m_xFtPage
->get_label() + " ");
538 m_xWndCenter
->GetEditEngine()->SetTextCurrentDefaults(aPageEntry
);
539 aSel
.nEndPos
= aPageEntry
.getLength();
540 m_xWndCenter
->GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD
), ESelection(aSel
.nEndPara
, aSel
.nEndPos
, aSel
.nEndPara
, aSel
.nEndPos
));
543 OUString
aPageOfEntry(" " + m_xFtOf
->get_label() + " ");
544 m_xWndCenter
->GetEditEngine()->QuickInsertText(aPageOfEntry
,ESelection(aSel
.nEndPara
,aSel
.nEndPos
, aSel
.nEndPara
, aSel
.nEndPos
));
545 aSel
.nEndPos
= aSel
.nEndPos
+ aPageOfEntry
.getLength();
546 m_xWndCenter
->GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPagesField(), EE_FEATURE_FIELD
), ESelection(aSel
.nEndPara
,aSel
.nEndPos
, aSel
.nEndPara
, aSel
.nEndPos
));
547 pTextObj
= m_xWndCenter
->GetEditEngine()->CreateTextObject();
548 m_xWndCenter
->SetText(*pTextObj
);
550 m_xWndCenter
->GrabFocus();
556 m_xWndCenter
->InsertField( SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD
) );
558 m_xWndCenter
->GrabFocus();
561 case eConfidentialEntry
:
564 OUString
aConfidentialEntry(aUserOpt
.GetCompany() + " " + m_xFtConfidential
->get_label());
565 m_xWndLeft
->GetEditEngine()->SetTextCurrentDefaults(aConfidentialEntry
);
566 m_xWndCenter
->InsertField( SvxFieldItem(SvxDateField(Date( Date::SYSTEM
),SvxDateType::Var
), EE_FEATURE_FIELD
) );
568 OUString
aPageEntry( m_xFtPage
->get_label() + " ");
569 m_xWndRight
->GetEditEngine()->SetTextCurrentDefaults(aPageEntry
);
570 m_xWndRight
->InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD
) );
572 m_xWndRight
->GrabFocus();
576 case eFileNamePageEntry
:
579 ESelection
aSel(0,0,0,0);
580 m_xWndCenter
->GetEditEngine()->QuickInsertField(SvxFieldItem( SvxFileField(), EE_FEATURE_FIELD
), aSel
);
582 OUString
aPageEntry(", " + m_xFtPage
->get_label() + " ");
583 m_xWndCenter
->GetEditEngine()->QuickInsertText(aPageEntry
, ESelection(aSel
.nEndPara
,aSel
.nEndPos
, aSel
.nEndPara
, aSel
.nEndPos
));
584 aSel
.nStartPos
= aSel
.nEndPos
;
585 aSel
.nEndPos
= aSel
.nEndPos
+ aPageEntry
.getLength();
586 m_xWndCenter
->GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD
), ESelection(aSel
.nEndPara
,aSel
.nEndPos
, aSel
.nEndPara
, aSel
.nEndPos
));
587 pTextObj
= m_xWndCenter
->GetEditEngine()->CreateTextObject();
588 m_xWndCenter
->SetText(*pTextObj
);
590 m_xWndCenter
->GrabFocus();
594 case eExtFileNameEntry
:
596 m_xWndCenter
->InsertField( SvxFieldItem( SvxExtFileField(
597 EMPTY_OUSTRING
, SvxFileType::Var
, SvxFileFormat::PathFull
), EE_FEATURE_FIELD
) );
599 m_xWndCenter
->GrabFocus();
602 case ePageSheetEntry
:
605 ESelection
aSel(0,0,0,0);
606 OUString
aPageEntry( m_xFtPage
->get_label() + " " );
607 m_xWndCenter
->GetEditEngine()->SetTextCurrentDefaults(aPageEntry
);
608 aSel
.nEndPos
= aPageEntry
.getLength();
609 m_xWndCenter
->GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD
), ESelection(aSel
.nEndPara
, aSel
.nEndPos
, aSel
.nEndPara
, aSel
.nEndPos
));
612 OUString
aCommaSpace(", ");
613 m_xWndCenter
->GetEditEngine()->QuickInsertText(aCommaSpace
,ESelection(aSel
.nEndPara
, aSel
.nEndPos
, aSel
.nEndPara
, aSel
.nEndPos
));
614 aSel
.nEndPos
= aSel
.nEndPos
+ aCommaSpace
.getLength();
615 m_xWndCenter
->GetEditEngine()->QuickInsertField( SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD
), ESelection(aSel
.nEndPara
, aSel
.nEndPos
, aSel
.nEndPara
, aSel
.nEndPos
));
616 pTextObj
= m_xWndCenter
->GetEditEngine()->CreateTextObject();
617 m_xWndCenter
->SetText(*pTextObj
);
619 m_xWndCenter
->GrabFocus();
623 case ePageFileNameEntry
:
626 ESelection
aSel(0,0,0,0);
627 OUString
aPageEntry( m_xFtPage
->get_label() + " " );
628 m_xWndCenter
->GetEditEngine()->SetTextCurrentDefaults(aPageEntry
);
629 aSel
.nEndPos
= aPageEntry
.getLength();
630 m_xWndCenter
->GetEditEngine()->QuickInsertField(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD
), ESelection(aSel
.nEndPara
, aSel
.nEndPos
, aSel
.nEndPara
, aSel
.nEndPos
));
632 OUString
aCommaSpace(", ");
633 m_xWndCenter
->GetEditEngine()->QuickInsertText(aCommaSpace
,ESelection(aSel
.nEndPara
, aSel
.nEndPos
, aSel
.nEndPara
, aSel
.nEndPos
));
634 aSel
.nEndPos
= aSel
.nEndPos
+ aCommaSpace
.getLength();
635 m_xWndCenter
->GetEditEngine()->QuickInsertField( SvxFieldItem(SvxFileField(), EE_FEATURE_FIELD
), ESelection(aSel
.nEndPara
, aSel
.nEndPos
, aSel
.nEndPara
, aSel
.nEndPos
));
636 pTextObj
= m_xWndCenter
->GetEditEngine()->CreateTextObject();
637 m_xWndCenter
->SetText(*pTextObj
);
639 m_xWndCenter
->GrabFocus();
643 case ePageExtFileNameEntry
:
646 OUString
aPageEntry( m_xFtPage
->get_label() + " " );
647 m_xWndCenter
->GetEditEngine()->SetTextCurrentDefaults(aPageEntry
);
648 m_xWndCenter
->InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD
) );
649 m_xWndRight
->InsertField( SvxFieldItem( SvxExtFileField(
650 EMPTY_OUSTRING
, SvxFileType::Var
, SvxFileFormat::PathFull
), EE_FEATURE_FIELD
) );
652 m_xWndRight
->GrabFocus();
659 OUString
aUserNameEntry(aUserOpt
.GetFirstName() + " " + aUserOpt
.GetLastName());
660 m_xWndLeft
->GetEditEngine()->SetTextCurrentDefaults(aUserNameEntry
);
661 OUString
aPageEntry( m_xFtPage
->get_label() + " ");
663 m_xWndCenter
->GetEditEngine()->SetTextCurrentDefaults(aPageEntry
);
664 m_xWndCenter
->InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD
) );
665 m_xWndRight
->InsertField( SvxFieldItem(SvxDateField(Date( Date::SYSTEM
),SvxDateType::Var
), EE_FEATURE_FIELD
) );
667 m_xWndRight
->GrabFocus();
671 case eCreatedByEntry
:
674 OUString
aCreatedByEntry( m_xFtCreatedBy
->get_label() + " " + aUserOpt
.GetFirstName() + " " + aUserOpt
.GetLastName());
675 m_xWndLeft
->GetEditEngine()->SetTextCurrentDefaults(aCreatedByEntry
);
676 m_xWndCenter
->InsertField( SvxFieldItem(SvxDateField(Date( Date::SYSTEM
),SvxDateType::Var
), EE_FEATURE_FIELD
) );
677 OUString
aPageEntry( m_xFtPage
->get_label() + " " );
678 m_xWndRight
->GetEditEngine()->SetTextCurrentDefaults(aPageEntry
);
679 m_xWndRight
->InsertField( SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD
) );
681 m_xWndRight
->GrabFocus();
690 void ScHFEditPage::ClearTextAreas()
692 m_xWndLeft
->GetEditEngine()->SetTextCurrentDefaults(EMPTY_OUSTRING
);
693 m_xWndLeft
->Invalidate();
694 m_xWndCenter
->GetEditEngine()->SetTextCurrentDefaults(EMPTY_OUSTRING
);
695 m_xWndCenter
->Invalidate();
696 m_xWndRight
->GetEditEngine()->SetTextCurrentDefaults(EMPTY_OUSTRING
);
697 m_xWndRight
->Invalidate();
701 IMPL_LINK_NOARG(ScHFEditPage
, ListToggleHdl_Impl
, weld::ComboBox
&, void)
703 m_bDropDownActive
= !m_bDropDownActive
;
705 osl_getSystemTime(&aNow
);
706 m_nTimeToggled
= sal_Int64(aNow
.Seconds
) * 1000000000L + aNow
.Nanosec
;
709 IMPL_LINK_NOARG(ScHFEditPage
, ListHdl_Impl
, weld::ComboBox
&, void)
711 ScHFEntryId eSel
= static_cast<ScHFEntryId
>(m_xLbDefined
->get_active());
714 osl_getSystemTime(&aNow
);
715 sal_Int64 nNow
= sal_Int64(aNow
.Seconds
) * 1000000000L + aNow
.Nanosec
;
717 // order of dropdown vs select not guaranteed
718 bool bDiscrepancy
= m_xLbDefined
->get_popup_shown() != m_bDropDownActive
;
720 ListToggleHdl_Impl(*m_xLbDefined
);
722 bool bFocusToTarget
= !m_xLbDefined
->get_popup_shown() && m_nTimeToggled
!= -1 && (nNow
- m_nTimeToggled
< 800000000L);
723 ProcessDefinedListSel(eSel
, !bFocusToTarget
);
724 // check if we need to remove the customized entry.
725 if (!m_bDropDownActive
&& eSel
< eEntryCount
)
726 RemoveFromDefinedList();
730 ListToggleHdl_Impl(*m_xLbDefined
);
733 IMPL_LINK( ScHFEditPage
, ClickHdl
, weld::Button
&, rBtn
, void )
738 if (&rBtn
== m_xBtnText
.get())
740 m_pEditFocus
->SetCharAttributes();
744 if ( &rBtn
== m_xBtnPage
.get() )
745 m_pEditFocus
->InsertField(SvxFieldItem(SvxPageField(), EE_FEATURE_FIELD
));
746 else if ( &rBtn
== m_xBtnLastPage
.get() )
747 m_pEditFocus
->InsertField(SvxFieldItem(SvxPagesField(), EE_FEATURE_FIELD
));
748 else if ( &rBtn
== m_xBtnDate
.get() )
749 m_pEditFocus
->InsertField(SvxFieldItem(SvxDateField(Date(Date::SYSTEM
),SvxDateType::Var
), EE_FEATURE_FIELD
));
750 else if ( &rBtn
== m_xBtnTime
.get() )
751 m_pEditFocus
->InsertField(SvxFieldItem(SvxTimeField(), EE_FEATURE_FIELD
));
752 else if ( &rBtn
== m_xBtnTable
.get() )
753 m_pEditFocus
->InsertField(SvxFieldItem(SvxTableField(), EE_FEATURE_FIELD
));
755 InsertToDefinedList();
756 m_pEditFocus
->GrabFocus();
759 IMPL_LINK(ScHFEditPage
, MenuHdl
, const OString
&, rSelectedId
, void)
764 if (rSelectedId
== "title")
766 m_pEditFocus
->InsertField(SvxFieldItem(SvxFileField(), EE_FEATURE_FIELD
));
768 else if (rSelectedId
== "filename")
770 m_pEditFocus
->InsertField( SvxFieldItem( SvxExtFileField(
771 OUString(), SvxFileType::Var
, SvxFileFormat::NameAndExt
), EE_FEATURE_FIELD
) );
773 else if (rSelectedId
== "pathname")
775 m_pEditFocus
->InsertField( SvxFieldItem( SvxExtFileField(
776 OUString(), SvxFileType::Var
, SvxFileFormat::PathFull
), EE_FEATURE_FIELD
) );
781 ScRightHeaderEditPage::ScRightHeaderEditPage( weld::Container
* pPage
, weld::DialogController
* pController
, const SfxItemSet
& rCoreSet
)
782 : ScHFEditPage( pPage
, pController
,
784 rCoreSet
.GetPool()->GetWhich(SID_SCATTR_PAGE_HEADERRIGHT
),
788 std::unique_ptr
<SfxTabPage
> ScRightHeaderEditPage::Create( weld::Container
* pPage
, weld::DialogController
* pController
, const SfxItemSet
* rCoreSet
)
790 return std::make_unique
<ScRightHeaderEditPage
>( pPage
, pController
, *rCoreSet
);
794 ScLeftHeaderEditPage::ScLeftHeaderEditPage( weld::Container
* pPage
, weld::DialogController
* pController
, const SfxItemSet
& rCoreSet
)
795 : ScHFEditPage( pPage
, pController
,
797 rCoreSet
.GetPool()->GetWhich(SID_SCATTR_PAGE_HEADERLEFT
),
801 std::unique_ptr
<SfxTabPage
> ScLeftHeaderEditPage::Create( weld::Container
* pPage
, weld::DialogController
* pController
, const SfxItemSet
* rCoreSet
)
803 return std::make_unique
<ScLeftHeaderEditPage
>( pPage
, pController
, *rCoreSet
);
807 ScRightFooterEditPage::ScRightFooterEditPage( weld::Container
* pPage
, weld::DialogController
* pController
, const SfxItemSet
& rCoreSet
)
808 : ScHFEditPage( pPage
, pController
,
810 rCoreSet
.GetPool()->GetWhich(SID_SCATTR_PAGE_FOOTERRIGHT
),
814 std::unique_ptr
<SfxTabPage
> ScRightFooterEditPage::Create( weld::Container
* pPage
, weld::DialogController
* pController
, const SfxItemSet
* rCoreSet
)
816 return std::make_unique
<ScRightFooterEditPage
>( pPage
, pController
, *rCoreSet
);
820 ScLeftFooterEditPage::ScLeftFooterEditPage( weld::Container
* pPage
, weld::DialogController
* pController
, const SfxItemSet
& rCoreSet
)
821 : ScHFEditPage( pPage
, pController
,
823 rCoreSet
.GetPool()->GetWhich(SID_SCATTR_PAGE_FOOTERLEFT
),
827 std::unique_ptr
<SfxTabPage
> ScLeftFooterEditPage::Create( weld::Container
* pPage
, weld::DialogController
* pController
, const SfxItemSet
* rCoreSet
)
829 return std::make_unique
<ScLeftFooterEditPage
>( pPage
, pController
, *rCoreSet
);
832 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */