33 #include <svx/dialogs.hrc>
34 #include <svx/svxids.hrc>
35 #include <svx/strings.hrc>
53 #include <bitmaps.hlst>
55 #include <com/sun/star/frame/XDispatchProvider.hpp>
63 #define TOOLBOX_NAME u"colorbar"
64 #define RID_SVXSTR_UNDO_GRAFCROP RID_SVXSTR_GRAFCROP
74 std::unique_ptr<weld::Image> mxImage;
75 std::unique_ptr<weld::MetricSpinButton> mxField;
83 virtual ~ImplGrafControl()
override;
84 virtual void dispose()
override;
87 void set_field_text(
const OUString& rStr) { mxField->set_text(rStr); }
88 void set_sensitive(
bool bSensitive)
91 mxImage->set_sensitive(bSensitive);
92 mxField->set_sensitive(bSensitive);
105 const sal_Int64 nVal = mxField->get_value(FieldUnit::NONE);
109 if ( maCommand ==
".uno:GrafRed" ||
110 maCommand ==
".uno:GrafGreen" ||
111 maCommand ==
".uno:GrafBlue" ||
112 maCommand ==
".uno:GrafLuminance" ||
113 maCommand ==
".uno:GrafContrast" )
114 a <<= sal_Int16( nVal );
115 else if ( maCommand ==
".uno:GrafGamma" ||
116 maCommand ==
".uno:GrafTransparence" )
117 a <<= sal_Int32( nVal );
124 Sequence< PropertyValue > aArgs( 1 );
129 Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
134 void ImplGrafControl::Update(
const SfxPoolItem* pItem )
140 if ( maCommand ==
".uno:GrafTransparence" )
142 else if ( maCommand ==
".uno:GrafGamma" )
147 mxField->set_value(nValue, FieldUnit::NONE);
150 mxField->set_text(OUString());
157 const char* pCommand;
165 static const CommandToRID aImplCommandToResMap[] =
167 {
".uno:GrafRed", RID_SVXBMP_GRAF_RED },
168 {
".uno:GrafGreen", RID_SVXBMP_GRAF_GREEN },
169 {
".uno:GrafBlue", RID_SVXBMP_GRAF_BLUE },
170 {
".uno:GrafLuminance", RID_SVXBMP_GRAF_LUMINANCE },
171 {
".uno:GrafContrast", RID_SVXBMP_GRAF_CONTRAST },
172 {
".uno:GrafGamma", RID_SVXBMP_GRAF_GAMMA },
173 {
".uno:GrafTransparence", RID_SVXBMP_GRAF_TRANSPARENCE },
180 while ( aImplCommandToResMap[ i ].pCommand )
182 if ( aCommand.equalsAscii( aImplCommandToResMap[ i ].pCommand ))
184 sRID = OUString::createFromAscii(aImplCommandToResMap[i].sResId);
193 ImplGrafControl::ImplGrafControl(
195 const OUString& rCmd,
200 , mxImage(m_xBuilder->weld_image(
"image"))
201 , mxField(m_xBuilder->weld_metric_spin_button(
"spinfield",
FieldUnit::
NONE))
203 InitControlBase(&mxField->get_widget());
206 mxImage->set_from_icon_name(sResId);
207 mxImage->set_toolbar_background();
212 mxField->get_widget().connect_key_press(
LINK(
this, ImplGrafControl, KeyInputHdl));
213 mxField->connect_value_changed(
LINK(
this, ImplGrafControl, ValueChangedHdl));
215 if (maCommand ==
".uno:GrafGamma")
217 mxField->set_digits(2);
219 mxField->set_range(10, 1000, FieldUnit::NONE);
220 mxField->set_increments(10, 100, FieldUnit::NONE);
224 const tools::Long nMinVal = maCommand ==
".uno:GrafTransparence" ? 0 : -100;
226 mxField->set_unit(FieldUnit::PERCENT);
227 mxField->set_digits(0);
229 mxField->set_range(nMinVal, 100, FieldUnit::PERCENT);
230 mxField->set_increments(1, 10, FieldUnit::PERCENT);
233 maIdle.SetInvokeHandler(
LINK(
this, ImplGrafControl, ImplModifyHdl ) );
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()
324 Sequence< PropertyValue > aArgs( 1 );
325 aArgs[0].Name =
"GrafMode";
326 aArgs[0].Value <<= sal_Int16(rBox.get_active());
334 Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
341 bool bHandled(
false);
343 if (rKEvt.GetKeyCode().GetCode() ==
KEY_ESCAPE)
345 m_xWidget->set_active(mnCurPos);
350 return bHandled || ChildKeyInput(rKEvt);
355 mnCurPos = m_xWidget->get_active();
358 void ImplGrafModeControl::ImplReleaseFocus()
369 void ImplGrafModeControl::Update(
const SfxPoolItem* pItem )
372 m_xWidget->set_active(static_cast<const SfxUInt16Item*>(pItem)->
GetValue());
374 m_xWidget->set_active(-1);
393 if( eState == SfxItemState::DISABLED )
395 pCtrl->set_sensitive(
false);
396 pCtrl->set_field_text( OUString() );
400 pCtrl->set_sensitive(
true);
402 if( eState == SfxItemState::DEFAULT )
403 pCtrl->Update( pState );
405 pCtrl->Update(
nullptr );
480 if( eState == SfxItemState::DISABLED )
482 pCtrl->set_sensitive(
false);
483 pCtrl->set_active(-1);
487 pCtrl->set_sensitive(
true);
489 if( eState == SfxItemState::DEFAULT )
490 pCtrl->Update( pState );
492 pCtrl->Update(
nullptr );
515 sal_uInt16 nSlot = rReq.
GetSlot();
517 if( !pArgs || SfxItemState::SET != pArgs->
GetItemState( nSlot,
false, &pItem ))
522 case SID_ATTR_GRAF_RED:
526 aSet.Put( SdrGrafRedItem( static_cast<const SfxInt16Item*>(pItem)->
GetValue() ));
528 aUndoStr +=
SvxResId( RID_SVXSTR_UNDO_GRAFRED );
533 case SID_ATTR_GRAF_GREEN:
537 aSet.Put( SdrGrafGreenItem( static_cast<const SfxInt16Item*>(pItem)->
GetValue() ));
539 aUndoStr +=
SvxResId( RID_SVXSTR_UNDO_GRAFGREEN );
544 case SID_ATTR_GRAF_BLUE:
548 aSet.Put( SdrGrafBlueItem( static_cast<const SfxInt16Item*>(pItem)->
GetValue() ));
550 aUndoStr +=
SvxResId( RID_SVXSTR_UNDO_GRAFBLUE );
555 case SID_ATTR_GRAF_LUMINANCE:
561 aUndoStr +=
SvxResId( RID_SVXSTR_UNDO_GRAFLUMINANCE );
566 case SID_ATTR_GRAF_CONTRAST:
572 aUndoStr +=
SvxResId( RID_SVXSTR_UNDO_GRAFCONTRAST );
577 case SID_ATTR_GRAF_GAMMA:
583 aUndoStr +=
SvxResId( RID_SVXSTR_UNDO_GRAFGAMMA );
588 case SID_ATTR_GRAF_TRANSPARENCE:
592 aSet.Put( SdrGrafTransparenceItem( static_cast<const SfxUInt16Item*>(pItem)->
GetValue() ));
594 aUndoStr +=
SvxResId( RID_SVXSTR_UNDO_GRAFTRANSPARENCY );
599 case SID_ATTR_GRAF_MODE:
603 aSet.Put(
SdrGrafModeItem( static_cast<GraphicDrawMode>(static_cast<const SfxUInt16Item*>(pItem)->
GetValue()) ));
605 aUndoStr +=
SvxResId( RID_SVXSTR_UNDO_GRAFMODE );
610 case SID_ATTR_GRAF_CROP:
623 const MapMode aMap100( MapUnit::Map100thMM );
624 const MapMode aMapTwip( MapUnit::MapTwip );
633 SID_ATTR_PAGE_SIZE, SID_ATTR_PAGE_SIZE,
634 SID_ATTR_GRAF_CROP, SID_ATTR_GRAF_FRMSIZE,
635 SID_ATTR_GRAF_GRAPHIC, SID_ATTR_GRAF_GRAPHIC>{});
640 Size( 200000, 200000 ), aMap100, aMapTwip ) ) );
646 Size( rCrop.GetLeft(), rCrop.GetTop() ), aMap100, aMapTwip ) );
648 Size( rCrop.GetRight(), rCrop.GetBottom() ), aMap100, aMapTwip ) );
650 aCropDlgAttr.Put( SdrGrafCropItem( aLTSize.Width(), aLTSize.Height(),
651 aRBSize.Width(), aRBSize.Height() ) );
656 const OUString aCropStr(
SvxResId(RID_SVXSTR_GRAFCROP));
660 std::unique_ptr<SfxTabPage> xTabPage = (*fnCreatePage)(aCropDialog.get_content_area(), &aCropDialog, &aCropDlgAttr);
661 xTabPage->SetPageTitle(aCropStr);
662 aCropDialog.SetTabPage(std::move(xTabPage));
664 if (aCropDialog.run() ==
RET_OK)
666 const SfxItemSet* pOutAttr = aCropDialog.GetOutputItemSet();
679 aSet.Put( SdrGrafCropItem( aLTSize.Width(), aLTSize.Height(), aRBSize.Width(), aRBSize.Height() ) );
683 if( SfxItemState::SET <= pOutAttr->GetItemState( SID_ATTR_GRAF_FRMSIZE ) )
686 const Size& rGrfSize =
static_cast<const SvxSizeItem&
>( pOutAttr->
Get( SID_ATTR_GRAF_FRMSIZE ) ).GetSize();
691 Point aOffset( (aNewGrfSize.
Width() - aOldGrfSize.Width()) >> 1,
692 (aNewGrfSize.
Height() - aOldGrfSize.Height()) >> 1 );
718 aPol.
Move( -aOffset.X(), -aOffset.Y() );
723 aNewRect.
Move( -aOffset.X(), -aOffset.Y() );
752 case SID_COLOR_SETTINGS:
783 bool bEnableColors =
true;
784 bool bEnableTransparency =
true;
795 bEnableColors = bEnableTransparency = bEnableCrop =
false;
800 bEnableTransparency =
false;
812 case SID_ATTR_GRAF_MODE:
829 case SID_ATTR_GRAF_RED:
845 case SID_ATTR_GRAF_GREEN:
861 case SID_ATTR_GRAF_BLUE:
877 case SID_ATTR_GRAF_LUMINANCE:
893 case SID_ATTR_GRAF_CONTRAST:
910 case SID_ATTR_GRAF_GAMMA:
927 case SID_ATTR_GRAF_TRANSPARENCE:
931 if( bEnableTransparency )
944 case SID_ATTR_GRAF_CROP:
951 case SID_COLOR_SETTINGS :
#define LINK(Instance, Class, Member)
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()
Point LogicToLogic(const Point &rPtSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
OUString GetURLPath(DecodeMechanism eMechanism=DecodeMechanism::ToIUri, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
bool IsUndoEnabled() const
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
void ShearPoly(tools::Polygon &rPoly, const Point &rRef, double tn)
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
OUString SvxResId(const char *pId)
static void GetGrafAttrState(SfxItemSet &rSet, SdrView const &rView)
The transformation of a rectangle into a polygon, by using angle parameters from GeoStat.
static SfxViewShell * Current()
const GeoStat & GetGeoStat() const
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
SdrObject * GetMarkedSdrObj() const
constexpr TypedWhichId< SdrGrafTransparenceItem > SDRATTR_GRAFTRANSPARENCE(SDRATTR_GRAF_FIRST+6)
void AddUndo(std::unique_ptr< SdrUndoAction > pUndo)
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)
DECL_LINK(DoLayout, Timer *, void)
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)
tools::Long Width() const
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 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)
tools::Long Height() const
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)
const SfxItemPool & GetItemPool() const
void SetMarkedObjRect(const tools::Rectangle &rRect)
SdrModel * GetModel() const
static OUString ImplGetRID(const OUString &aCommand)
static bool IsWhich(sal_uInt16 nId)
virtual const tools::Rectangle & GetLogicRect() const override