37 #include <svx/dialogs.hrc>
38 #include <svx/svxids.hrc>
39 #include <svx/strings.hrc>
57 #include <bitmaps.hlst>
59 #include <com/sun/star/frame/XDispatchProvider.hpp>
68 #define RID_SVXSTR_UNDO_GRAFCROP RID_SVXSTR_GRAFCROP
77 std::unique_ptr<weld::Image> mxImage;
78 std::unique_ptr<weld::MetricSpinButton> mxField;
86 virtual ~ImplGrafControl()
override;
87 virtual void dispose()
override;
90 void set_field_text(
const OUString& rStr) { mxField->set_text(rStr); }
91 void set_sensitive(
bool bSensitive)
94 mxImage->set_sensitive(bSensitive);
95 mxField->set_sensitive(bSensitive);
106 void ImplGrafControl::ImplModify()
108 const sal_Int64 nVal = mxField->get_value(FieldUnit::NONE);
112 if ( maCommand ==
".uno:GrafRed" ||
113 maCommand ==
".uno:GrafGreen" ||
114 maCommand ==
".uno:GrafBlue" ||
115 maCommand ==
".uno:GrafLuminance" ||
116 maCommand ==
".uno:GrafContrast" )
117 a <<= sal_Int16( nVal );
118 else if ( maCommand ==
".uno:GrafGamma" ||
119 maCommand ==
".uno:GrafTransparence" )
120 a <<= sal_Int32( nVal );
130 Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
135 void ImplGrafControl::Update(
const SfxPoolItem* pItem )
141 if ( maCommand ==
".uno:GrafTransparence" )
143 else if ( maCommand ==
".uno:GrafGamma" )
148 mxField->set_value(nValue, FieldUnit::NONE);
151 mxField->set_text(OUString());
158 const char* pCommand;
159 rtl::OUStringConstExpr sResId;
166 static constexpr OUStringLiteral
EMPTY =
u"";
167 static const CommandToRID aImplCommandToResMap[] =
169 {
".uno:GrafRed", RID_SVXBMP_GRAF_RED },
170 {
".uno:GrafGreen", RID_SVXBMP_GRAF_GREEN },
171 {
".uno:GrafBlue", RID_SVXBMP_GRAF_BLUE },
172 {
".uno:GrafLuminance", RID_SVXBMP_GRAF_LUMINANCE },
173 {
".uno:GrafContrast", RID_SVXBMP_GRAF_CONTRAST },
174 {
".uno:GrafGamma", RID_SVXBMP_GRAF_GAMMA },
175 {
".uno:GrafTransparence", RID_SVXBMP_GRAF_TRANSPARENCE },
182 while ( aImplCommandToResMap[ i ].pCommand )
186 sRID = aImplCommandToResMap[i].sResId;
195 ImplGrafControl::ImplGrafControl(
197 const OUString& rCmd,
202 , mxImage(m_xBuilder->weld_image(
"image"))
203 , mxField(m_xBuilder->weld_metric_spin_button(
"spinfield",
FieldUnit::
NONE))
205 InitControlBase(&mxField->get_widget());
208 mxImage->set_from_icon_name(sResId);
209 mxImage->set_toolbar_background();
214 mxField->get_widget().connect_key_press(
LINK(
this, ImplGrafControl, KeyInputHdl));
215 mxField->connect_value_changed(
LINK(
this, ImplGrafControl, ValueChangedHdl));
217 if (maCommand ==
".uno:GrafGamma")
219 mxField->set_digits(2);
221 mxField->set_range(10, 1000, FieldUnit::NONE);
222 mxField->set_increments(10, 100, FieldUnit::NONE);
226 const tools::Long nMinVal = maCommand ==
".uno:GrafTransparence" ? 0 : -100;
228 mxField->set_unit(FieldUnit::PERCENT);
229 mxField->set_digits(0);
231 mxField->set_range(nMinVal, 100, FieldUnit::PERCENT);
232 mxField->set_increments(1, 10, FieldUnit::PERCENT);
240 return ChildKeyInput(rKEvt);
243 ImplGrafControl::~ImplGrafControl()
248 void ImplGrafControl::dispose()
262 std::unique_ptr<weld::ComboBox>
m_xWidget;
268 static void ImplReleaseFocus();
272 virtual void dispose()
override;
273 virtual ~ImplGrafModeControl()
override;
275 void set_sensitive(
bool bSensitive)
278 m_xWidget->set_sensitive(
true);
281 void set_active(
int nActive)
283 m_xWidget->set_active(nActive);
295 , m_xWidget(m_xBuilder->weld_combo_box(
"grafmode"))
297 InitControlBase(m_xWidget.get());
299 m_xWidget->append_text(
SvxResId( RID_SVXSTR_GRAFMODE_STANDARD ) );
300 m_xWidget->append_text(
SvxResId( RID_SVXSTR_GRAFMODE_GREYS ) );
301 m_xWidget->append_text(
SvxResId( RID_SVXSTR_GRAFMODE_MONO ) );
302 m_xWidget->append_text(
SvxResId( RID_SVXSTR_GRAFMODE_WATERMARK ) );
304 m_xWidget->connect_changed(
LINK(
this, ImplGrafModeControl, SelectHdl));
305 m_xWidget->connect_key_press(
LINK(
this, ImplGrafModeControl, KeyInputHdl));
306 m_xWidget->connect_focus_in(
LINK(
this, ImplGrafModeControl, FocusInHdl));
308 SetSizePixel(m_xWidget->get_preferred_size());
311 void ImplGrafModeControl::dispose()
317 ImplGrafModeControl::~ImplGrafModeControl()
325 sal_Int16(rBox.get_active())) };
333 Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
340 bool bHandled(
false);
342 if (rKEvt.GetKeyCode().GetCode() ==
KEY_ESCAPE)
344 m_xWidget->set_active(mnCurPos);
349 return bHandled || ChildKeyInput(rKEvt);
354 mnCurPos = m_xWidget->get_active();
357 void ImplGrafModeControl::ImplReleaseFocus()
368 void ImplGrafModeControl::Update(
const SfxPoolItem* pItem )
371 m_xWidget->set_active(static_cast<const SfxUInt16Item*>(pItem)->
GetValue());
373 m_xWidget->set_active(-1);
392 if( eState == SfxItemState::DISABLED )
394 pCtrl->set_sensitive(
false);
395 pCtrl->set_field_text( OUString() );
399 pCtrl->set_sensitive(
true);
401 if( eState == SfxItemState::DEFAULT )
402 pCtrl->Update( pState );
404 pCtrl->Update(
nullptr );
479 if( eState == SfxItemState::DISABLED )
481 pCtrl->set_sensitive(
false);
482 pCtrl->set_active(-1);
486 pCtrl->set_sensitive(
true);
488 if( eState == SfxItemState::DEFAULT )
489 pCtrl->Update( pState );
491 pCtrl->Update(
nullptr );
514 sal_uInt16 nSlot = rReq.
GetSlot();
516 if( !pArgs || SfxItemState::SET != pArgs->
GetItemState( nSlot,
false, &pItem ))
521 case SID_ATTR_GRAF_RED:
525 aSet.
Put( SdrGrafRedItem( static_cast<const SfxInt16Item*>(pItem)->
GetValue() ));
527 aUndoStr +=
SvxResId( RID_SVXSTR_UNDO_GRAFRED );
532 case SID_ATTR_GRAF_GREEN:
536 aSet.
Put( SdrGrafGreenItem( static_cast<const SfxInt16Item*>(pItem)->
GetValue() ));
538 aUndoStr +=
SvxResId( RID_SVXSTR_UNDO_GRAFGREEN );
543 case SID_ATTR_GRAF_BLUE:
547 aSet.
Put( SdrGrafBlueItem( static_cast<const SfxInt16Item*>(pItem)->
GetValue() ));
549 aUndoStr +=
SvxResId( RID_SVXSTR_UNDO_GRAFBLUE );
554 case SID_ATTR_GRAF_LUMINANCE:
560 aUndoStr +=
SvxResId( RID_SVXSTR_UNDO_GRAFLUMINANCE );
565 case SID_ATTR_GRAF_CONTRAST:
571 aUndoStr +=
SvxResId( RID_SVXSTR_UNDO_GRAFCONTRAST );
576 case SID_ATTR_GRAF_GAMMA:
582 aUndoStr +=
SvxResId( RID_SVXSTR_UNDO_GRAFGAMMA );
587 case SID_ATTR_GRAF_TRANSPARENCE:
591 aSet.
Put( SdrGrafTransparenceItem( static_cast<const SfxUInt16Item*>(pItem)->
GetValue() ));
593 aUndoStr +=
SvxResId( RID_SVXSTR_UNDO_GRAFTRANSPARENCY );
598 case SID_ATTR_GRAF_MODE:
604 aUndoStr +=
SvxResId( RID_SVXSTR_UNDO_GRAFMODE );
609 case SID_ATTR_GRAF_CROP:
628 SID_ATTR_PAGE_SIZE, SID_ATTR_PAGE_SIZE,
629 SID_ATTR_GRAF_CROP, SID_ATTR_GRAF_FRMSIZE,
630 SID_ATTR_GRAF_GRAPHIC, SID_ATTR_GRAF_GRAPHIC>
636 aCropDlgAttr.Put(
SvxSizeItem( SID_ATTR_GRAF_FRMSIZE,
639 const SdrGrafCropItem& rCrop = aGrfAttr.
Get( SDRATTR_GRAFCROP );
643 aCropDlgAttr.Put( SdrGrafCropItem( aLTSize.
Width(), aLTSize.
Height(),
649 const OUString aCropStr(
SvxResId(RID_SVXSTR_GRAFCROP));
653 std::unique_ptr<SfxTabPage> xTabPage = (*fnCreatePage)(aCropDialog.get_content_area(), &aCropDialog, &aCropDlgAttr);
655 xTabPage->getAdditionalProperties().emplace(
"PreferredDPI", css::uno::Any(nPreferredDPI));
656 xTabPage->SetPageTitle(aCropStr);
657 aCropDialog.SetTabPage(std::move(xTabPage));
659 if (aCropDialog.run() ==
RET_OK)
661 const SfxItemSet* pOutAttr = aCropDialog.GetOutputItemSet();
668 if( SfxItemState::SET <= pOutAttr->GetItemState( SDRATTR_GRAFCROP ) )
670 const SdrGrafCropItem& rNewCrop = pOutAttr->
Get( SDRATTR_GRAFCROP );
678 if( SfxItemState::SET <= pOutAttr->GetItemState( SID_ATTR_GRAF_FRMSIZE ) )
681 const Size& rGrfSize = pOutAttr->
Get( SID_ATTR_GRAF_FRMSIZE ).GetSize();
686 Point aOffset( (aNewGrfSize.
Width() - aOldGrfSize.Width()) >> 1,
687 (aNewGrfSize.
Height() - aOldGrfSize.Height()) >> 1 );
713 aPol.
Move( -aOffset.X(), -aOffset.Y() );
718 aNewRect.
Move( -aOffset.X(), -aOffset.Y() );
747 case SID_COLOR_SETTINGS:
778 bool bEnableColors =
true;
779 bool bEnableTransparency =
true;
790 bEnableColors = bEnableTransparency = bEnableCrop =
false;
795 bEnableTransparency =
false;
807 case SID_ATTR_GRAF_MODE:
824 case SID_ATTR_GRAF_RED:
840 case SID_ATTR_GRAF_GREEN:
856 case SID_ATTR_GRAF_BLUE:
872 case SID_ATTR_GRAF_LUMINANCE:
888 case SID_ATTR_GRAF_CONTRAST:
905 case SID_ATTR_GRAF_GAMMA:
922 case SID_ATTR_GRAF_TRANSPARENCE:
926 if( bEnableTransparency )
939 case SID_ATTR_GRAF_CROP:
946 case SID_COLOR_SETTINGS :
#define LINK(Instance, Class, Member)
DECL_LINK(CheckNameHdl, SvxNameDialog &, bool)
constexpr TypedWhichId< SdrGrafGamma100Item > SDRATTR_GRAFGAMMA(SDRATTR_GRAF_FIRST+5)
size_t GetMarkCount() const
void ShearPoint(Point &rPnt, const Point &rRef, double tn, bool bVShear=false)
static SfxAbstractDialogFactory * Create()
bool IsUndoEnabled() const
constexpr OUStringLiteral TOOLBOX_NAME
css::beans::PropertyValue makePropertyValue(const OUString &rName, T &&rValue)
constexpr Point convert(const Point &rPoint, o3tl::Length eFrom, o3tl::Length eTo)
double mfSinRotationAngle
css::uno::Reference< css::lang::XComponent > m_xFrame
constexpr TypedWhichId< SdrGrafRedItem > SDRATTR_GRAFRED(SDRATTR_GRAF_FIRST+0)
void RotatePoly(tools::Polygon &rPoly, const Point &rRef, double sn, double cs)
void Done(bool bRemove=false)
SdrMark * GetMark(size_t nNum) const
const SfxItemSet * GetArgs() const
GraphicType GetGraphicType() const
bool equalsAscii(std::u16string_view s1, const char *s2)
void ShearPoly(tools::Polygon &rPoly, const Point &rRef, double tn)
constexpr tools::Long Width() const
virtual MapUnit GetMetric(sal_uInt16 nWhich) const
weld::Window * GetFrameWeld() const
Reference< XNameAccess > m_xContainer
void Enable(bool bEnable=true, bool bChild=true)
IMPL_LINK(ImplGrafControl, KeyInputHdl, const KeyEvent &, rKEvt, bool)
virtual CreateTabPage GetTabPageCreatorFunc(sal_uInt16 nId)=0
static void GetGrafAttrState(SfxItemSet &rSet, SdrView const &rView)
virtual sal_Int32 getImagePreferredDPI() const
The transformation of a rectangle into a polygon, by using angle parameters from GeoStat.
OUString SvxResId(TranslateId aId)
static SfxViewShell * Current()
const GeoStat & GetGeoStat() const
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
static OUString ImplGetRID(std::u16string_view aCommand)
SdrObject * GetMarkedSdrObj() const
constexpr TypedWhichId< SdrGrafTransparenceItem > SDRATTR_GRAFTRANSPARENCE(SDRATTR_GRAF_FIRST+6)
void AddUndo(std::unique_ptr< SdrUndoAction > pUndo)
sal_uInt16 ClearItem(sal_uInt16 nWhich=0)
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
#define DBG_ASSERT(sCon, aError)
constexpr TypedWhichId< SdrGrafLuminanceItem > SDRATTR_GRAFLUMINANCE(SDRATTR_GRAF_FIRST+3)
constexpr OUStringLiteral EMPTY
const Graphic & GetGraphic() const
OUString const & GetDescriptionOfMarkedObjects() const
constexpr TypedWhichId< SdrGrafBlueItem > SDRATTR_GRAFBLUE(SDRATTR_GRAF_FIRST+2)
virtual void Invalidate(InvalidateFlags nFlags=InvalidateFlags::NONE)
const SdrMarkList & GetMarkedObjectList() const
bool SetAttributes(const SfxItemSet &rSet, bool bReplaceAll=false)
constexpr TypedWhichId< SdrGrafModeItem > SDRATTR_GRAFMODE(SDRATTR_GRAF_FIRST+8)
sal_uInt16 GetSlotId(sal_uInt16 nWhich) const
This class represents an embedded or linked bitmap graphic object.
constexpr TypedWhichId< SdrGrafCropItem > SDRATTR_GRAFCROP(SDRATTR_GRAF_FIRST+9)
SdrUndoFactory & GetSdrUndoFactory() const
returns the models undo factory.
virtual std::unique_ptr< SdrUndoAction > CreateUndoGeoObject(SdrObject &rObject)
#define RID_SVXSTR_UNDO_GRAFCROP
constexpr TypedWhichId< SdrGrafGreenItem > SDRATTR_GRAFGREEN(SDRATTR_GRAF_FIRST+1)
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
sal_uInt16 GetSlot() const
void RotatePoint(Point &rPnt, const Point &rRef, double sn, double cs)
void SetDefaultMetric(MapUnit eNewMetric)
SFX_IMPL_TOOLBOX_CONTROL(SvxGrafRedToolBoxControl, SfxInt16Item)
void DisableItem(sal_uInt16 nWhich)
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
constexpr tools::Long Height() const
constexpr sal_uInt16 KEY_ESCAPE
static void ExecuteGrafAttr(SfxRequest &rReq, SdrView &rView)
virtual void dispose() override
const SfxItemSet & GetMergedItemSet() const
void GetAttributes(SfxItemSet &rTargetSet, bool bOnlyHardAttr=false) const
bool HasGDIMetaFile() const
double mfCosRotationAngle
static VclPtr< reference_type > Create(Arg &&...arg)
vcl::Window * GetWindow() const
IMPL_LINK_NOARG(ImplGrafControl, ValueChangedHdl, weld::MetricSpinButton &, void)
virtual void SetSnapRect(const tools::Rectangle &rRect)
constexpr TypedWhichId< SdrGrafContrastItem > SDRATTR_GRAFCONTRAST(SDRATTR_GRAF_FIRST+4)
SdrModel & getSdrModelFromSdrView() const
const SfxItemPool & GetItemPool() const
void SetMarkedObjRect(const tools::Rectangle &rRect)
SdrModel * GetModel() const
static bool IsWhich(sal_uInt16 nId)
virtual const tools::Rectangle & GetLogicRect() const override