LibreOffice Module cui (master) 1
tplneend.cxx
Go to the documentation of this file.
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#include <tools/urlobj.hxx>
21#include <vcl/svapp.hxx>
22#include <vcl/weld.hxx>
25#include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
26
27#include <strings.hrc>
28#include <svx/dialmgr.hxx>
29#include <svx/dlgctrl.hxx>
30#include <svx/svdobj.hxx>
31#include <svx/svdopath.hxx>
32#include <svx/xtable.hxx>
33#include <svx/xlineit0.hxx>
34#include <svx/xlnwtit.hxx>
35#include <svx/xlnclit.hxx>
36#include <svx/xlnstwit.hxx>
37#include <svx/xlnedwit.hxx>
38#include <svx/xlnstit.hxx>
39#include <svx/xlnedit.hxx>
40#include <cuitabline.hxx>
41#include <cuitabarea.hxx>
42#include <svx/svxdlg.hxx>
43#include <dialmgr.hxx>
47#include <svx/strings.hrc>
48#include <osl/diagnose.h>
49
50#define XOUT_WIDTH 150
51
53 : SfxTabPage(pPage, pController, "cui/ui/lineendstabpage.ui", "LineEndPage", &rInAttrs)
54 , rOutAttrs(rInAttrs)
55 , pPolyObj(nullptr)
56 , aXLineAttr(rInAttrs.GetPool())
57 , rXLSet(aXLineAttr.GetItemSet())
58 , pnLineEndListState(nullptr)
59 , pPageType(nullptr)
60 , nDlgType(0)
61 , pPosLineEndLb(nullptr)
62 , m_xEdtName(m_xBuilder->weld_entry("EDT_NAME"))
63 , m_xLbLineEnds(new SvxLineEndLB(m_xBuilder->weld_combo_box("LB_LINEENDS")))
64 , m_xBtnAdd(m_xBuilder->weld_button("BTN_ADD"))
65 , m_xBtnModify(m_xBuilder->weld_button("BTN_MODIFY"))
66 , m_xBtnDelete(m_xBuilder->weld_button("BTN_DELETE"))
67 , m_xBtnLoad(m_xBuilder->weld_button("BTN_LOAD"))
68 , m_xBtnSave(m_xBuilder->weld_button("BTN_SAVE"))
69 , m_xCtlPreview(new weld::CustomWeld(*m_xBuilder, "CTL_PREVIEW", m_aCtlPreview))
70{
71 // this page needs ExchangeSupport
73
74 rXLSet.Put( XLineStyleItem(css::drawing::LineStyle_SOLID) );
76 rXLSet.Put( XLineColorItem( OUString(), COL_BLACK ) );
79
80 // #i34740#
82
83 m_xBtnAdd->connect_clicked(LINK(this, SvxLineEndDefTabPage, ClickAddHdl_Impl));
84 m_xBtnModify->connect_clicked(LINK( this, SvxLineEndDefTabPage, ClickModifyHdl_Impl));
85 m_xBtnDelete->connect_clicked(LINK( this, SvxLineEndDefTabPage, ClickDeleteHdl_Impl));
86 m_xBtnLoad->connect_clicked(LINK( this, SvxLineEndDefTabPage, ClickLoadHdl_Impl));
87 m_xBtnSave->connect_clicked(LINK( this, SvxLineEndDefTabPage, ClickSaveHdl_Impl));
88
90}
91
93{
94 m_xCtlPreview.reset();
95 m_xLbLineEnds.reset();
96}
97
99{
101
102 bool bCreateArrowPossible = true;
103
104 if( !pPolyObj )
105 {
106 bCreateArrowPossible = false;
107 }
108 else if( nullptr == dynamic_cast<const SdrPathObj*>( pPolyObj) )
109 {
110 SdrObjTransformInfoRec aInfoRec;
111 pPolyObj->TakeObjInfo( aInfoRec );
113 if( aInfoRec.bCanConvToPath )
114 pNewObj = pPolyObj->ConvertToPolyObj( true, false );
115
116 bCreateArrowPossible = nullptr != dynamic_cast<const SdrPathObj*>( pNewObj.get());
117 }
118
119 if( !bCreateArrowPossible )
120 m_xBtnAdd->set_sensitive(false);
121}
122
124{
125 if( nDlgType != 0 ) // area dialog
126 return;
127
128 // ActivatePage() is called before the dialog receives PageCreated() !!!
129 if( !pLineEndList.is() )
130 return;
131
132 if( *pPosLineEndLb != -1)
133 {
134 m_xLbLineEnds->set_active(*pPosLineEndLb);
136 }
137 INetURLObject aURL( pLineEndList->GetPath() );
138
139 aURL.Append( pLineEndList->GetName() );
140 DBG_ASSERT( aURL.GetProtocol() != INetProtocol::NotValid, "invalid URL" );
142 *pPosLineEndLb = -1;
143}
144
145
147{
149
150 if( _pSet )
151 FillItemSet( _pSet );
152
153 return DeactivateRC::LeavePage;
154}
155
156
158{
159 int nPos = m_xLbLineEnds->get_active();
160
161 if (nPos != -1)
162 {
163 OUString aString = m_xEdtName->get_text();
164
165 if( aString != m_xLbLineEnds->get_active_text() )
166 {
167 std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/querychangelineenddialog.ui"));
168 std::unique_ptr<weld::MessageDialog> xQueryBox(xBuilder->weld_message_dialog("AskChangeLineEndDialog"));
169 if (xQueryBox->run() == RET_YES)
170 ClickModifyHdl_Impl(*m_xBtnModify);
171 }
172 }
173 nPos = m_xLbLineEnds->get_active();
174
175 if (nPos != -1)
177}
178
179
181{
182 if( nDlgType == 0 ) // line dialog
183 {
185 {
187
188 int nPos = m_xLbLineEnds->get_active();
189 const XLineEndEntry* pEntry = pLineEndList->GetLineEnd(nPos);
190
191 rSet->Put( XLineStartItem( pEntry->GetName(), pEntry->GetLineEnd() ) );
192 rSet->Put( XLineEndItem( pEntry->GetName(), pEntry->GetLineEnd() ) );
193 }
194 }
195 return true;
196}
197
199{
200 m_xLbLineEnds->set_active(0);
201
202 // Update lineend
203 if( pLineEndList->Count() > 0 )
204 {
205 int nPos = m_xLbLineEnds->get_active();
206
207 const XLineEndEntry* pEntry = pLineEndList->GetLineEnd(nPos);
208
209 m_xEdtName->set_text(m_xLbLineEnds->get_active_text());
210
211 rXLSet.Put( XLineStartItem( OUString(), pEntry->GetLineEnd() ) );
212 rXLSet.Put( XLineEndItem( OUString(), pEntry->GetLineEnd() ) );
213
214 // #i34740#
216 m_aCtlPreview.Invalidate();
217 }
218
219 // determine button state
220 if( pLineEndList->Count() )
221 {
222 m_xBtnModify->set_sensitive(true);
223 m_xBtnDelete->set_sensitive(true);
224 m_xBtnSave->set_sensitive(true);
225 }
226 else
227 {
228 m_xBtnModify->set_sensitive(false);
229 m_xBtnDelete->set_sensitive(false);
230 m_xBtnSave->set_sensitive(false);
231 }
232}
233
234std::unique_ptr<SfxTabPage> SvxLineEndDefTabPage::Create(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* rSet)
235{
236 return std::make_unique<SvxLineEndDefTabPage>(pPage, pController, *rSet );
237}
238
240{
241 if( pLineEndList->Count() <= 0 )
242 return;
243
244 int nPos = m_xLbLineEnds->get_active();
245
246 const XLineEndEntry* pEntry = pLineEndList->GetLineEnd(nPos);
247
248 m_xEdtName->set_text(m_xLbLineEnds->get_active_text());
249
250 rXLSet.Put( XLineStartItem( OUString(), pEntry->GetLineEnd() ) );
251 rXLSet.Put( XLineEndItem( OUString(), pEntry->GetLineEnd() ) );
252
253 // #i34740#
255 m_aCtlPreview.Invalidate();
256
257 // Is not set before, in order to only take the new style,
258 // if there is an entry selected in the ListBox
260}
261
263{
264 SelectLineEndHdl_Impl();
265}
266
268{
269 int nPos = m_xLbLineEnds->get_active();
270 if (nPos == -1)
271 return;
272
273 OUString aDesc(CuiResId(RID_CUISTR_DESC_LINEEND));
274 OUString aName(m_xEdtName->get_text());
275 tools::Long nCount = pLineEndList->Count();
276 bool bDifferent = true;
277
278 // check whether the name is existing already
279 for ( tools::Long i = 0; i < nCount && bDifferent; i++ )
280 if ( aName == pLineEndList->GetLineEnd( i )->GetName() )
281 bDifferent = false;
282
283 // if yes, repeat and demand a new name
284 if ( !bDifferent )
285 {
286 std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/queryduplicatedialog.ui"));
287 std::unique_ptr<weld::MessageDialog> xWarningBox(xBuilder->weld_message_dialog("DuplicateNameDialog"));
288 xWarningBox->run();
289
292 bool bLoop = true;
293
294 while( !bDifferent && bLoop && pDlg->Execute() == RET_OK )
295 {
296 pDlg->GetName( aName );
297 bDifferent = true;
298
299 for( tools::Long i = 0; i < nCount && bDifferent; i++ )
300 {
301 if( aName == pLineEndList->GetLineEnd( i )->GetName() )
302 bDifferent = false;
303 }
304
305 if( bDifferent )
306 bLoop = false;
307 else
308 xWarningBox->run();
309 }
310 }
311
312 // if not existing, enter the entry
313 if( !bDifferent )
314 return;
315
316 const XLineEndEntry* pOldEntry = pLineEndList->GetLineEnd(nPos);
317
318 if(pOldEntry)
319 {
320 // #123497# Need to replace the existing entry with a new one
321 pLineEndList->Replace(std::make_unique<XLineEndEntry>(pOldEntry->GetLineEnd(), aName), nPos);
322
323 m_xEdtName->set_text(aName);
324
325 m_xLbLineEnds->Modify(*pLineEndList->GetLineEnd(nPos), nPos, pLineEndList->GetUiBitmap(nPos));
326 m_xLbLineEnds->set_active(nPos);
327
328 // set flag for modified
329 *pnLineEndListState |= ChangeType::MODIFIED;
330
331 *pPageType = PageType::Bitmap;
332 }
333 else
334 {
335 OSL_ENSURE(false, "LineEnd to be modified not existing (!)");
336 }
337}
338
340{
341 if( pPolyObj )
342 {
343 const SdrObject* pNewObj;
344 rtl::Reference<SdrObject> pConvPolyObj;
345
346 if( nullptr != dynamic_cast<const SdrPathObj*>( pPolyObj) )
347 {
348 pNewObj = pPolyObj;
349 }
350 else
351 {
352 SdrObjTransformInfoRec aInfoRec;
353 pPolyObj->TakeObjInfo( aInfoRec );
354
355 if( aInfoRec.bCanConvToPath )
356 {
357 pConvPolyObj = pPolyObj->ConvertToPolyObj( true, false );
358 pNewObj = pConvPolyObj.get();
359
360 if( !pNewObj || nullptr == dynamic_cast<const SdrPathObj*>( pNewObj) )
361 return; // cancel, additional safety, which
362 // has no use for group objects though.
363 }
364 else return; // cancel
365 }
366
367 basegfx::B2DPolyPolygon aNewPolyPolygon(static_cast<const SdrPathObj*>(pNewObj)->GetPathPoly());
368 basegfx::B2DRange aNewRange(basegfx::utils::getRange(aNewPolyPolygon));
369
370 // normalize
371 aNewPolyPolygon.transform(basegfx::utils::createTranslateB2DHomMatrix( -aNewRange.getMinX(), -aNewRange.getMinY()));
372
373 pConvPolyObj.clear();
374
375 OUString aNewName(SvxResId(RID_SVXSTR_LINEEND));
376 OUString aDesc(CuiResId(RID_CUISTR_DESC_LINEEND));
377 OUString aName;
378
379 tools::Long nCount = pLineEndList->Count();
380 tools::Long j = 1;
381 bool bDifferent = false;
382
383 while ( !bDifferent )
384 {
385 aName = aNewName + " " + OUString::number( j++ );
386 bDifferent = true;
387
388 for( tools::Long i = 0; i < nCount && bDifferent; i++ )
389 if ( aName == pLineEndList->GetLineEnd( i )->GetName() )
390 bDifferent = false;
391 }
392
395 bool bLoop = true;
396
397 while ( bLoop && pDlg->Execute() == RET_OK )
398 {
399 pDlg->GetName( aName );
400 bDifferent = true;
401
402 for( tools::Long i = 0; i < nCount && bDifferent; i++ )
403 {
404 if( aName == pLineEndList->GetLineEnd( i )->GetName() )
405 bDifferent = false;
406 }
407
408 if( bDifferent )
409 {
410 bLoop = false;
411
412 auto nLineEndCount = pLineEndList->Count();
413 pLineEndList->Insert(std::make_unique<XLineEndEntry>(aNewPolyPolygon, aName), nLineEndCount);
414
415 // add to the ListBox
416 m_xLbLineEnds->Append(*pLineEndList->GetLineEnd(nLineEndCount), pLineEndList->GetUiBitmap(nLineEndCount));
417 m_xLbLineEnds->set_active(m_xLbLineEnds->get_count() - 1);
418
419 *pnLineEndListState |= ChangeType::MODIFIED;
420
421 SelectLineEndHdl_Impl();
422 }
423 else
424 {
425 std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/queryduplicatedialog.ui"));
426 std::unique_ptr<weld::MessageDialog> xWarningBox(xBuilder->weld_message_dialog("DuplicateNameDialog"));
427 xWarningBox->run();
428 }
429 }
430 }
431 else
432 m_xBtnAdd->set_sensitive(false);
433
434 // determine button state
435 if ( pLineEndList->Count() )
436 {
437 m_xBtnModify->set_sensitive(true);
438 m_xBtnDelete->set_sensitive(true);
439 m_xBtnSave->set_sensitive(true);
440 }
441}
442
444{
445 int nPos = m_xLbLineEnds->get_active();
446
447 if (nPos != -1)
448 {
449 std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/querydeletelineenddialog.ui"));
450 std::unique_ptr<weld::MessageDialog> xQueryBox(xBuilder->weld_message_dialog("AskDelLineEndDialog"));
451
452 if (xQueryBox->run() == RET_YES)
453 {
454 pLineEndList->Remove(nPos);
455 m_xLbLineEnds->remove(nPos);
456 m_xLbLineEnds->set_active(0);
457
458 SelectLineEndHdl_Impl();
459 *pPageType = PageType::Area; // LineEnd shall not be taken over
460
461 *pnLineEndListState |= ChangeType::MODIFIED;
462
463 m_aCtlPreview.Invalidate();
464 }
465 }
466 // determine button state
467 if( !pLineEndList->Count() )
468 {
469 m_xBtnModify->set_sensitive(false);
470 m_xBtnDelete->set_sensitive(false);
471 m_xBtnSave->set_sensitive(false);
472 }
473}
474
476{
477 sal_uInt16 nReturn = RET_YES;
478
479 if ( *pnLineEndListState & ChangeType::MODIFIED )
480 {
481 std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/querysavelistdialog.ui"));
482 std::unique_ptr<weld::MessageDialog> xBox(xBuilder->weld_message_dialog("AskSaveList"));
483
484 nReturn = xBox->run();
485
486 if ( nReturn == RET_YES )
487 pLineEndList->Save();
488 }
489
490 if ( nReturn != RET_CANCEL )
491 {
492 ::sfx2::FileDialogHelper aDlg(css::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE,
493 FileDialogFlags::NONE, GetFrameWeld());
494 OUString aStrFilterType( "*.soe" );
495 aDlg.AddFilter( aStrFilterType, aStrFilterType );
496
497 OUString aPalettePath(SvtPathOptions().GetPalettePath());
498 OUString aLastDir;
499 sal_Int32 nIndex = 0;
500 do
501 {
502 aLastDir = aPalettePath.getToken(0, ';', nIndex);
503 }
504 while (nIndex >= 0);
505
506 INetURLObject aFile(aLastDir);
508
509 if( aDlg.Execute() == ERRCODE_NONE )
510 {
511 INetURLObject aURL( aDlg.GetPath() );
512 INetURLObject aPathURL( aURL );
513
514 aPathURL.removeSegment();
515 aPathURL.removeFinalSlash();
516
519 XPropertyListType::LineEnd,
521 pLeList->SetName( aURL.getName() );
522 if( pLeList->Load() )
523 {
524 pLineEndList = pLeList;
525 static_cast<SvxLineTabDialog*>(GetDialogController())->SetNewLineEndList( pLineEndList );
526 m_xLbLineEnds->clear();
527 m_xLbLineEnds->Fill( pLineEndList );
528 Reset( &rOutAttrs );
529
530 pLineEndList->SetName( aURL.getName() );
531
532 *pnLineEndListState |= ChangeType::CHANGED;
533 *pnLineEndListState &= ~ChangeType::MODIFIED;
534 }
535 else
536 {
537 std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/querynoloadedfiledialog.ui"));
538 std::unique_ptr<weld::MessageDialog> xBox(xBuilder->weld_message_dialog("NoLoadedFileDialog"));
539 xBox->run();
540 }
541 }
542 }
543
544 // determine button state
545 if ( pLineEndList->Count() )
546 {
547 m_xBtnModify->set_sensitive(true);
548 m_xBtnDelete->set_sensitive(true);
549 m_xBtnSave->set_sensitive(true);
550 }
551 else
552 {
553 m_xBtnModify->set_sensitive(false);
554 m_xBtnDelete->set_sensitive(false);
555 m_xBtnSave->set_sensitive(false);
556 }
557}
558
560{
561 ::sfx2::FileDialogHelper aDlg(css::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, FileDialogFlags::NONE, GetFrameWeld());
562 OUString aStrFilterType( "*.soe" );
563 aDlg.AddFilter( aStrFilterType, aStrFilterType );
564
565 OUString aPalettePath(SvtPathOptions().GetPalettePath());
566 OUString aLastDir;
567 sal_Int32 nIndex = 0;
568 do
569 {
570 aLastDir = aPalettePath.getToken(0, ';', nIndex);
571 }
572 while (nIndex >= 0);
573
574 INetURLObject aFile(aLastDir);
575 DBG_ASSERT( aFile.GetProtocol() != INetProtocol::NotValid, "invalid URL" );
576
577 if( !pLineEndList->GetName().isEmpty() )
578 {
579 aFile.Append( pLineEndList->GetName() );
580
581 if( aFile.getExtension().isEmpty() )
582 aFile.SetExtension( u"soe" );
583 }
584
586 if ( aDlg.Execute() != ERRCODE_NONE )
587 return;
588
589 INetURLObject aURL( aDlg.GetPath() );
590 INetURLObject aPathURL( aURL );
591
592 aPathURL.removeSegment();
593 aPathURL.removeFinalSlash();
594
595 pLineEndList->SetName( aURL.getName() );
596 pLineEndList->SetPath( aPathURL.GetMainURL( INetURLObject::DecodeMechanism::NONE ) );
597
598 if( pLineEndList->Save() )
599 {
600 *pnLineEndListState &= ~ChangeType::MODIFIED;
601 }
602 else
603 {
604 std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/querynosavefiledialog.ui"));
605 std::unique_ptr<weld::MessageDialog> xBox(xBuilder->weld_message_dialog("NoSaveFileDialog"));
606 xBox->run();
607 }
608}
609
610/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
static std::unique_ptr< weld::Builder > CreateBuilder(weld::Widget *pParent, const OUString &rUIFile, bool bMobile=false, sal_uInt64 nLOKWindowId=0)
void SetExtension(std::u16string_view rTheExtension)
OUString GetMainURL(DecodeMechanism eMechanism, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
bool removeFinalSlash()
OUString getExtension(sal_Int32 nIndex=LAST_SEGMENT, bool bIgnoreFinalSlash=true, DecodeMechanism eMechanism=DecodeMechanism::ToIUri, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
bool removeSegment(sal_Int32 nIndex=LAST_SEGMENT, bool bIgnoreFinalSlash=true)
INetProtocol GetProtocol() const
bool Append(std::u16string_view rTheSegment, EncodeMechanism eMechanism=EncodeMechanism::WasEncoded, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8)
rtl::Reference< SdrObject > ConvertToPolyObj(bool bBezier, bool bLineToArea) const
virtual void TakeObjInfo(SdrObjTransformInfoRec &rInfo) const
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
void SetExchangeSupport()
weld::Window * GetFrameWeld() const
constexpr tools::Long Height() const
virtual VclPtr< AbstractSvxNameDialog > CreateSvxNameDialog(weld::Window *pParent, const OUString &rName, const OUString &rDesc)=0
static SvxAbstractDialogFactory * Create()
SfxItemSet & rXLSet
Definition: cuitabline.hxx:324
virtual ~SvxLineEndDefTabPage() override
Definition: tplneend.cxx:92
std::unique_ptr< weld::Entry > m_xEdtName
Definition: cuitabline.hxx:334
XLineAttrSetItem aXLineAttr
Definition: cuitabline.hxx:323
std::unique_ptr< weld::Button > m_xBtnAdd
Definition: cuitabline.hxx:336
SvxLineEndDefTabPage(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet &rInAttrs)
Definition: tplneend.cxx:52
std::unique_ptr< SvxLineEndLB > m_xLbLineEnds
Definition: cuitabline.hxx:335
virtual DeactivateRC DeactivatePage(SfxItemSet *pSet) override
Definition: tplneend.cxx:146
std::unique_ptr< weld::CustomWeld > m_xCtlPreview
Definition: cuitabline.hxx:341
XLineEndListRef pLineEndList
Definition: cuitabline.hxx:326
void SelectLineEndHdl_Impl()
Definition: tplneend.cxx:239
std::unique_ptr< weld::Button > m_xBtnLoad
Definition: cuitabline.hxx:339
std::unique_ptr< weld::Button > m_xBtnModify
Definition: cuitabline.hxx:337
SvxXLinePreview m_aCtlPreview
Definition: cuitabline.hxx:333
sal_Int32 * pPosLineEndLb
Definition: cuitabline.hxx:331
static std::unique_ptr< SfxTabPage > Create(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet *)
Definition: tplneend.cxx:234
const SdrObject * pPolyObj
Definition: cuitabline.hxx:321
virtual void ActivatePage(const SfxItemSet &rSet) override
Definition: tplneend.cxx:123
std::unique_ptr< weld::Button > m_xBtnSave
Definition: cuitabline.hxx:340
virtual bool FillItemSet(SfxItemSet *) override
Definition: tplneend.cxx:180
std::unique_ptr< weld::Button > m_xBtnDelete
Definition: cuitabline.hxx:338
virtual void Reset(const SfxItemSet *) override
Definition: tplneend.cxx:198
Size GetOutputSize() const
void SetLineAttributes(const SfxItemSet &rItemSet)
const basegfx::B2DPolyPolygon & GetLineEnd() const
const OUString & GetName() const
static XPropertyListRef CreatePropertyList(XPropertyListType t, const OUString &rPath, const OUString &rReferer)
static XLineEndListRef AsLineEndList(rtl::Reference< XPropertyList > const &plist)
void transform(const basegfx::B2DHomMatrix &rMatrix)
TYPE getMinX() const
TYPE getMinY() const
OUString GetPath() const
void AddFilter(const OUString &rFilterName, const OUString &rExtension)
void SetDisplayDirectory(const OUString &rPath)
constexpr ::Color COL_BLACK(0x00, 0x00, 0x00)
OUString CuiResId(TranslateId aKey)
Definition: cuiresmgr.cxx:23
int nCount
#define DBG_ASSERT(sCon, aError)
SVXCORE_DLLPUBLIC OUString SvxResId(TranslateId aId)
weld::Window * GetFrameWeld(const SfxFrame *pFrame)
URL aURL
float u
#define ERRCODE_NONE
sal_Int32 nIndex
OUString aName
sal_uInt16 nPos
const SfxItemSet * GetItemSet(const SfxPoolItem &rAttr)
B2DHomMatrix createTranslateB2DHomMatrix(double fTranslateX, double fTranslateY)
B2DRange getRange(const B2DPolygon &rCandidate)
int i
long Long
static SfxItemSet & rSet
ChangeType
DeactivateRC
#define XOUT_WIDTH
Definition: tplneend.cxx:50
IMPL_LINK_NOARG(SvxLineEndDefTabPage, SelectLineEndHdl_Impl, weld::ComboBox &, void)
Definition: tplneend.cxx:262
RET_OK
RET_CANCEL
RET_YES