27 #include <strings.hrc>
39 #include <svx/strings.hrc>
40 #include <svx/svxids.hrc>
47 :
SfxTabPage(pPage, pController,
"cui/ui/hatchpage.ui",
"HatchPage", &rInAttrs)
48 , m_rOutAttrs(rInAttrs)
49 , m_pnHatchingListState(nullptr)
50 , m_pnColorListState(nullptr)
51 , m_aXFillAttr(rInAttrs.GetPool())
53 , m_xMtrDistance(m_xBuilder->weld_metric_spin_button(
"distancemtr",
FieldUnit::
MM))
54 , m_xMtrAngle(m_xBuilder->weld_metric_spin_button(
"anglemtr",
FieldUnit::
DEGREE))
55 , m_xSliderAngle(m_xBuilder->weld_scale(
"angleslider"))
56 , m_xLbLineType(m_xBuilder->weld_combo_box(
"linetypelb"))
57 , m_xLbLineColor(new
ColorListBox(m_xBuilder->weld_menu_button(
"linecolorlb"), pController->getDialog()))
58 , m_xCbBackgroundColor(m_xBuilder->weld_check_button(
"backgroundcolor"))
59 , m_xLbBackgroundColor(new
ColorListBox(m_xBuilder->weld_menu_button(
"backgroundcolorlb"), pController->getDialog()))
60 , m_xHatchLB(new
SvxPresetListBox(m_xBuilder->weld_scrolled_window(
"hatchpresetlistwin", true)))
61 , m_xBtnAdd(m_xBuilder->weld_button(
"add"))
62 , m_xBtnModify(m_xBuilder->weld_button(
"modify"))
63 , m_xHatchLBWin(new
weld::CustomWeld(*m_xBuilder,
"hatchpresetlist", *m_xHatchLB))
64 , m_xCtlPreview(new
weld::CustomWeld(*m_xBuilder,
"previewctl", m_aCtlPreview))
80 eFUnit = FieldUnit::MM;
88 assert( pPool &&
"Where is the pool?" );
148 OUString aString =
CuiResId( RID_SVXSTR_TABLE ) +
": ";
152 SAL_WARN_IF(
aURL.GetProtocol() == INetProtocol::NotValid,
"cui.tabpages",
"invalid URL" );
154 if (
aURL.getBase().getLength() > 18 )
156 aString += OUString::Concat(
aURL.getBase().subView( 0, 15 )) +
"...";
159 aString +=
aURL.getBase();
164 sal_uInt16
nId =
m_xHatchLB->GetItemId( static_cast<size_t>( nPos ) );
174 if (aBckItem.GetValue())
178 Color aColor(aColorItem.GetColorValue());
199 return DeactivateRC::LeavePage;
205 bool bValidHatchName =
true;
213 bValidHatchName =
false;
221 std::unique_ptr<XHatch> pXHatch;
233 static_cast<css::drawing::HatchStyle
>(
m_xLbLineType->get_active()),
237 assert( pXHatch &&
"XHatch couldn't be created" );
258 if(aBckItem.GetValue())
271 return std::make_unique<SvxHatchTabPage>(pPage, pController, *rSet);
276 ModifiedHdl_Impl(&rListBox);
278 m_xHatchLB->SetNoSelection();
283 ModifiedHdl_Impl(&rListBox);
284 m_xHatchLB->SetNoSelection();
289 if (m_xCbBackgroundColor->get_active())
290 m_xLbBackgroundColor->set_sensitive(
true);
292 m_xLbBackgroundColor->set_sensitive(
false);
294 ModifiedBackgroundHdl_Impl(*m_xLbBackgroundColor);
300 if (m_xCbBackgroundColor->get_active())
302 aColor = m_xLbBackgroundColor->GetSelectEntryColor();
303 m_aCtlPreview.SetAttributes( m_aXFillAttr.GetItemSet() );
304 m_aCtlPreview.Invalidate();
308 m_aCtlPreview.SetAttributes( m_aXFillAttr.GetItemSet() );
309 m_aCtlPreview.Invalidate();
314 ModifiedHdl_Impl(&
rEdit);
315 m_xHatchLB->SetNoSelection();
320 ModifiedHdl_Impl(&rSlider);
321 m_xHatchLB->SetNoSelection();
333 static_cast<css::drawing::HatchStyle
>(
m_xLbLineType->get_active()),
345 ChangeHatchHdl_Impl();
350 std::unique_ptr<XHatch> pHatch;
360 if( ( drawing::FillStyle_HATCH == static_cast<const XFillStyleItem*>( pPoolItem )->
GetValue() ) &&
363 pHatch.reset(
new XHatch( static_cast<const XFillHatchItem*>( pPoolItem )->GetHatchValue() ));
368 sal_uInt16 nPosition =
m_xHatchLB->GetItemId( 0 );
377 sal::static_int_cast< sal_Int32 >( pHatch->GetHatchStyle() ) );
381 tools::Long nHatchAngle = pHatch->GetAngle().get() / 10;
382 m_xMtrAngle->set_value(nHatchAngle, FieldUnit::NONE);
401 OUString aNewName(
SvxResId( RID_SVXSTR_HATCH ) );
402 OUString aDesc(
CuiResId( RID_SVXSTR_DESC_HATCH ) );
407 bool bValidHatchName =
false;
409 while( !bValidHatchName )
411 aName = aNewName +
" " + OUString::number( j++ );
412 bValidHatchName = (SearchHatchList(aName) == -1);
417 sal_uInt16 nError = 1;
419 while( pDlg->Execute() ==
RET_OK )
421 pDlg->GetName( aName );
423 bValidHatchName = (SearchHatchList(aName) == -1);
424 if( bValidHatchName )
431 std::unique_ptr<weld::MessageDialog> xWarnBox(xBuilder->weld_message_dialog(
"DuplicateNameDialog"));
432 if (xWarnBox->run() !=
RET_OK)
435 pDlg.disposeAndClear();
440 XHatch aXHatch( m_xLbLineColor->GetSelectEntryColor(),
441 static_cast<css::drawing::HatchStyle
>(m_xLbLineType->get_active()),
443 Degree10(static_cast<sal_Int16>(m_xMtrAngle->get_value(FieldUnit::NONE) * 10)) );
445 m_pHatchingList->Insert(std::make_unique<XHatchEntry>(aXHatch, aName), nCount);
447 sal_Int32
nId = m_xHatchLB->GetItemId(nCount - 1);
448 BitmapEx aBitmap = m_pHatchingList->GetBitmapForPreview( nCount, m_xHatchLB->GetIconSize() );
450 m_xHatchLB->InsertItem( nId + 1,
Image(aBitmap), aName );
451 m_xHatchLB->SelectItem( nId + 1 );
452 m_xHatchLB->Resize();
454 *m_pnHatchingListState |= ChangeType::MODIFIED;
456 ChangeHatchHdl_Impl();
461 sal_uInt16
nId = m_xHatchLB->GetSelectedItemId();
462 size_t nPos = m_xHatchLB->GetSelectItemPos();
467 OUString
aName( m_pHatchingList->GetHatch( static_cast<sal_uInt16>(nPos) )->GetName() );
469 XHatch aXHatch( m_xLbLineColor->GetSelectEntryColor(),
470 static_cast<css::drawing::HatchStyle
>(m_xLbLineType->get_active()),
472 Degree10(static_cast<sal_Int16>(m_xMtrAngle->get_value(FieldUnit::NONE) * 10)) );
474 m_pHatchingList->Replace(std::make_unique<XHatchEntry>(aXHatch,
aName), nPos);
476 BitmapEx aBitmap = m_pHatchingList->GetBitmapForPreview( static_cast<sal_uInt16>(nPos), m_xHatchLB->GetIconSize() );
477 m_xHatchLB->RemoveItem( nId );
478 m_xHatchLB->InsertItem( nId,
Image(aBitmap),
aName, static_cast<sal_uInt16>(nPos) );
479 m_xHatchLB->SelectItem( nId );
482 m_xMtrDistance->save_value();
483 m_xMtrAngle->save_value();
484 m_xLbLineType->save_value();
485 m_xLbLineColor->SaveValue();
486 m_xLbBackgroundColor->SaveValue();
488 *m_pnHatchingListState |= ChangeType::MODIFIED;
493 sal_uInt16
nId = m_xHatchLB->GetSelectedItemId();
494 size_t nPos = m_xHatchLB->GetSelectItemPos();
500 std::unique_ptr<weld::MessageDialog> xQueryBox(xBuilder->weld_message_dialog(
"AskDelHatchDialog"));
501 if (xQueryBox->run() !=
RET_YES)
504 m_pHatchingList->Remove(nPos);
505 m_xHatchLB->RemoveItem( nId );
506 nId = m_xHatchLB->GetItemId(0);
507 m_xHatchLB->SelectItem( nId );
508 m_xHatchLB->Resize();
510 m_aCtlPreview.Invalidate();
512 ChangeHatchHdl_Impl();
514 *m_pnHatchingListState |= ChangeType::MODIFIED;
519 sal_uInt16
nId = m_xHatchLB->GetSelectedItemId();
520 size_t nPos = m_xHatchLB->GetSelectItemPos();
525 OUString aDesc(
CuiResId( RID_SVXSTR_DESC_HATCH ) );
526 OUString
aName( m_pHatchingList->GetHatch( nPos )->GetName() );
532 while( bLoop && pDlg->Execute() ==
RET_OK )
534 pDlg->GetName(
aName );
535 sal_Int32 nHatchPos = SearchHatchList(
aName );
536 bool bValidHatchName = (nHatchPos ==
static_cast<sal_Int32
>(nPos) ) || (nHatchPos == -1);
541 m_pHatchingList->GetHatch(nPos)->SetName(
aName);
543 m_xHatchLB->SetItemText(nId,
aName);
544 m_xHatchLB->SelectItem( nId );
546 *m_pnHatchingListState |= ChangeType::MODIFIED;
551 std::unique_ptr<weld::MessageDialog> xBox(xBuilder->weld_message_dialog(
"DuplicateNameDialog"));
#define LINK(Instance, Class, Member)
void SetFieldUnit(weld::MetricSpinButton &rField, FieldUnit eUnit, bool bAll)
std::pair< Color, OUString > NamedColor
void ChangeHatchHdl_Impl()
Size getDrawPreviewOptimalSize(const OutputDevice &rReference)
const XColorListRef & GetNewColorList() const
std::unique_ptr< weld::Button > m_xBtnModify
#define VALUESET_ITEM_NOTFOUND
const DrawModeFlags OUTPUT_DRAWMODE_COLOR
sal_Int32 SearchHatchList(std::u16string_view rHatchName)
static SvxAbstractDialogFactory * Create()
constexpr::Color COL_TRANSPARENT(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
static const AllSettings & GetSettings()
constexpr TypedWhichId< XFillStyleItem > XATTR_FILLSTYLE(XATTR_FILL_FIRST)
constexpr::Color COL_AUTO(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
const DrawModeFlags OUTPUT_DRAWMODE_CONTRAST
static weld::Builder * CreateBuilder(weld::Widget *pParent, const OUString &rUIFile, bool bMobile=false)
constexpr TypedWhichId< XFillHatchItem > XATTR_FILLHATCH(XATTR_FILL_FIRST+3)
constexpr TypedWhichId< XFillBackgroundItem > XATTR_FILLBACKGROUND(XATTR_FILL_FIRST+19)
FieldUnit GetModuleFieldUnit(const SfxItemSet &rSet)
virtual MapUnit GetMetric(sal_uInt16 nWhich) const
std::unique_ptr< weld::CustomWeld > m_xCtlPreview
virtual VclPtr< AbstractSvxNameDialog > CreateSvxNameDialog(weld::Window *pParent, const OUString &rName, const OUString &rDesc)=0
virtual void ActivatePage(const SfxItemSet &rSet) override
std::unique_ptr< weld::CheckButton > m_xCbBackgroundColor
OUString SvxResId(const char *pId)
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
virtual void Reset(const SfxItemSet *) override
std::unique_ptr< weld::Button > m_xBtnAdd
void SetExchangeSupport()
IMPL_LINK_NOARG(SvxHatchTabPage, ToggleHatchBackgroundColor_Impl, weld::ToggleButton &, void)
XColorListRef m_pColorList
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
std::unique_ptr< ColorListBox > m_xLbBackgroundColor
std::unique_ptr< weld::Scale > m_xSliderAngle
const SfxItemSet & m_rOutAttrs
int GetCoreValue(const weld::MetricSpinButton &rField, MapUnit eUnit)
virtual bool FillItemSet(SfxItemSet *) override
tools::Long Width() const
void SetAttributes(const SfxItemSet &rItemSet)
SvxXRectPreview m_aCtlPreview
ChangeType * m_pnColorListState
void SetMetricValue(weld::MetricSpinButton &rField, int nCoreValue, MapUnit eUnit)
SfxItemPool * GetPool() const
OUString CuiResId(const char *pKey)
std::unique_ptr< weld::ComboBox > m_xLbLineType
virtual ~SvxHatchTabPage() override
constexpr TypedWhichId< XFillColorItem > XATTR_FILLCOLOR(XATTR_FILL_FIRST+1)
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
XHatchListRef m_pHatchingList
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
std::unique_ptr< ColorListBox > m_xLbLineColor
IMPL_LINK(SvxHatchTabPage, ModifiedListBoxHdl_Impl, weld::ComboBox &, rListBox, void)
#define SAL_WARN_IF(condition, area, stream)
static std::unique_ptr< SfxTabPage > Create(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet *)
std::unique_ptr< weld::MetricSpinButton > m_xMtrDistance
virtual DeactivateRC DeactivatePage(SfxItemSet *pSet) override
tools::Long Height() const
SfxOkDialogController * GetDialogController() const
SvxHatchTabPage(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet &rInAttrs)
std::unique_ptr< SvxPresetListBox > m_xHatchLB
void SetDrawMode(DrawModeFlags nDrawMode)
std::unique_ptr< weld::CustomWeld > m_xHatchLBWin
std::unique_ptr< weld::MetricSpinButton > m_xMtrAngle
void ModifiedHdl_Impl(void const *)
weld::Window * GetFrameWeld(const SfxFrame *pFrame)
XFillAttrSetItem m_aXFillAttr
sal_uInt16 GetWhich(sal_uInt16 nSlot, bool bDeep=true) const