weld SvxIMapDlg
Change-Id: I5418176a015e61ef8eee4c2acd8e84b008f76f82
Reviewed-on: https://gerrit.libreoffice.org/72249
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/cui/source/dialogs/cuiimapwnd.cxx b/cui/source/dialogs/cuiimapwnd.cxx
index c4b41af..1882406 100644
--- a/cui/source/dialogs/cuiimapwnd.cxx
+++ b/cui/source/dialogs/cuiimapwnd.cxx
@@ -43,7 +43,7 @@
|*
\************************************************************************/
URLDlg::URLDlg(weld::Window* pWindow, const OUString& rURL, const OUString& rAlternativeText,
URLDlg::URLDlg(weld::Widget* pWindow, const OUString& rURL, const OUString& rAlternativeText,
const OUString& rDescription, const OUString& rTarget, const OUString& rName,
TargetList& rTargetList)
: GenericDialogController(pWindow, "cui/ui/cuiimapdlg.ui", "IMapDialog")
diff --git a/cui/source/factory/dlgfact.cxx b/cui/source/factory/dlgfact.cxx
index 31e52bc..7cb8b43 100644
--- a/cui/source/factory/dlgfact.cxx
+++ b/cui/source/factory/dlgfact.cxx
@@ -1103,7 +1103,7 @@ VclPtr<VclAbstractDialog> AbstractDialogFactory_Impl::CreateGalleryThemeProperti
pParent, pData, pItemSet));
}
VclPtr<AbstractURLDlg> AbstractDialogFactory_Impl::CreateURLDialog(weld::Window* pParent,
VclPtr<AbstractURLDlg> AbstractDialogFactory_Impl::CreateURLDialog(weld::Widget* pParent,
const OUString& rURL, const OUString& rAltText, const OUString& rDescription,
const OUString& rTarget, const OUString& rName,
TargetList& rTargetList )
@@ -1292,7 +1292,7 @@ VclPtr<SfxAbstractDialog> AbstractDialogFactory_Impl::CreateCharMapDialog(weld::
return VclPtr<AbstractSvxCharacterMapDialog_Impl>::Create(std::make_unique<SvxCharacterMap>(pParent, &rAttr, rDocumentFrame));
}
VclPtr<SfxAbstractDialog> AbstractDialogFactory_Impl::CreateEventConfigDialog(weld::Window* pParent,
VclPtr<SfxAbstractDialog> AbstractDialogFactory_Impl::CreateEventConfigDialog(weld::Widget* pParent,
const SfxItemSet& rAttr,
const Reference< XFrame >& rDocumentFrame)
{
diff --git a/cui/source/factory/dlgfact.hxx b/cui/source/factory/dlgfact.hxx
index 97615f6..f0e7fc9 100644
--- a/cui/source/factory/dlgfact.hxx
+++ b/cui/source/factory/dlgfact.hxx
@@ -685,7 +685,7 @@ public:
virtual VclPtr<SfxAbstractDialog> CreateCharMapDialog(weld::Window* pParent,
const SfxItemSet& rAttr,
const css::uno::Reference< css::frame::XFrame >& rFrame) override;
virtual VclPtr<SfxAbstractDialog> CreateEventConfigDialog(weld::Window* pParent,
virtual VclPtr<SfxAbstractDialog> CreateEventConfigDialog(weld::Widget* pParent,
const SfxItemSet& rAttr,
const css::uno::Reference< css::frame::XFrame >& rFrame) override;
virtual VclPtr<VclAbstractDialog> CreateFrameDialog(vcl::Window* pParent, const css::uno::Reference< css::frame::XFrame >& rxFrame,
@@ -751,7 +751,7 @@ public:
virtual VclPtr<VclAbstractDialog> CreateGalleryThemePropertiesDialog(weld::Window* pParent,
ExchangeData* pData,
SfxItemSet* pItemSet) override;
virtual VclPtr<AbstractURLDlg> CreateURLDialog(weld::Window* pParent,
virtual VclPtr<AbstractURLDlg> CreateURLDialog(weld::Widget* pParent,
const OUString& rURL, const OUString& rAltText, const OUString& rDescription,
const OUString& rTarget, const OUString& rName,
TargetList& rTargetList ) override;
diff --git a/cui/source/inc/cuiimapwnd.hxx b/cui/source/inc/cuiimapwnd.hxx
index bc1eb87..b8fcf10 100644
--- a/cui/source/inc/cuiimapwnd.hxx
+++ b/cui/source/inc/cuiimapwnd.hxx
@@ -32,7 +32,7 @@ class URLDlg : public weld::GenericDialogController
public:
URLDlg(weld::Window* pWindow,
URLDlg(weld::Widget* pWindow,
const OUString& rURL, const OUString& rAlternativeText, const OUString& rDescription,
const OUString& rTarget, const OUString& rName,
TargetList& rTargetList);
diff --git a/cui/source/inc/macroass.hxx b/cui/source/inc/macroass.hxx
index 6822125..0ad8c48 100644
--- a/cui/source/inc/macroass.hxx
+++ b/cui/source/inc/macroass.hxx
@@ -80,7 +80,7 @@ public:
class SfxMacroAssignDlg : public SfxSingleTabDialogController
{
public:
SfxMacroAssignDlg(weld::Window* pParent,
SfxMacroAssignDlg(weld::Widget* pParent,
const css::uno::Reference< css::frame::XFrame >& rxDocumentFrame,
const SfxItemSet& rSet);
SfxMacroTabPage* GetTabPage()
diff --git a/cui/source/tabpages/macroass.cxx b/cui/source/tabpages/macroass.cxx
index 1fc054c..364f947 100644
--- a/cui/source/tabpages/macroass.cxx
+++ b/cui/source/tabpages/macroass.cxx
@@ -384,7 +384,7 @@ VclPtr<SfxTabPage> SfxMacroTabPage::Create(TabPageParent pParent, const SfxItemS
return CreateSfxMacroTabPage(pParent, *rAttrSet);
}
SfxMacroAssignDlg::SfxMacroAssignDlg(weld::Window* pParent,
SfxMacroAssignDlg::SfxMacroAssignDlg(weld::Widget* pParent,
const Reference< XFrame >& rxDocumentFrame, const SfxItemSet& rSet)
: SfxSingleTabDialogController(pParent, &rSet,"cui/ui/eventassigndialog.ui",
"EventAssignDialog")
diff --git a/include/svtools/inettbc.hxx b/include/svtools/inettbc.hxx
index 76858c3..0c19a98 100644
--- a/include/svtools/inettbc.hxx
+++ b/include/svtools/inettbc.hxx
@@ -104,6 +104,7 @@ class SVT_DLLPUBLIC URLBox
bool bHistoryDisabled : 1;
Link<weld::ComboBox&, void> aChangeHdl;
Link<weld::Widget&, void> aFocusOutHdl;
std::unique_ptr<weld::ComboBox> m_xWidget;
@@ -118,26 +119,29 @@ public:
URLBox(std::unique_ptr<weld::ComboBox> pWidget);
~URLBox();
void set_entry_text(const OUString& rStr) { m_xWidget->set_entry_text(rStr); }
void Clear() { m_xWidget->clear(); }
void connect_entry_activate(const Link<weld::ComboBox&, bool>& rLink) { m_xWidget->connect_entry_activate(rLink); }
void connect_changed(const Link<weld::ComboBox&, void>& rLink) { aChangeHdl = rLink; }
void append_text(const OUString& rStr) { m_xWidget->append_text(rStr); }
OUString get_active_text() const { return m_xWidget->get_active_text(); }
void grab_focus() { m_xWidget->grab_focus(); }
void EnableAutocomplete() { m_xWidget->set_entry_completion(true); }
void set_entry_text(const OUString& rStr) { m_xWidget->set_entry_text(rStr); }
void Clear() { m_xWidget->clear(); }
void connect_entry_activate(const Link<weld::ComboBox&, bool>& rLink) { m_xWidget->connect_entry_activate(rLink); }
void connect_changed(const Link<weld::ComboBox&, void>& rLink) { aChangeHdl = rLink; }
void connect_focus_out(const Link<weld::Widget&, void>& rLink) { aFocusOutHdl = rLink; }
void append_text(const OUString& rStr) { m_xWidget->append_text(rStr); }
int find_text(const OUString& rStr) const { return m_xWidget->find_text(rStr); }
OUString get_active_text() const { return m_xWidget->get_active_text(); }
void grab_focus() { m_xWidget->grab_focus(); }
void set_sensitive(bool bSensitive) { m_xWidget->set_sensitive(bSensitive); }
void EnableAutocomplete() { m_xWidget->set_entry_completion(true); }
void SetBaseURL( const OUString& rURL );
void SetSmartProtocol( INetProtocol eProt );
INetProtocol GetSmartProtocol() const { return eSmartProtocol; }
OUString GetURL();
void DisableHistory();
void SetBaseURL( const OUString& rURL );
void SetSmartProtocol( INetProtocol eProt );
INetProtocol GetSmartProtocol() const { return eSmartProtocol; }
OUString GetURL();
void DisableHistory();
weld::Widget* getWidget() { return m_xWidget.get(); }
weld::Widget* getWidget() { return m_xWidget.get(); }
static OUString ParseSmart( const OUString& aText, const OUString& aBaseURL );
static OUString ParseSmart( const OUString& aText, const OUString& aBaseURL );
void SetFilter(const OUString& _sFilter);
void SetFilter(const OUString& _sFilter);
};
#endif
diff --git a/include/svx/fmview.hxx b/include/svx/fmview.hxx
index e23d3a6..2808ba0 100644
--- a/include/svx/fmview.hxx
+++ b/include/svx/fmview.hxx
@@ -106,7 +106,7 @@ public:
virtual SdrPageView* ShowSdrPage(SdrPage* pPage) override;
virtual void HideSdrPage() override;
virtual bool MouseButtonDown( const MouseEvent& _rMEvt, vcl::Window* _pWin ) override;
virtual bool MouseButtonDown( const MouseEvent& _rMEvt, OutputDevice* _pWin ) override;
/** grab the focus to the first form control on the view
*/
diff --git a/include/svx/graphctl.hxx b/include/svx/graphctl.hxx
index 7a2a7fd..b4044d2 100644
--- a/include/svx/graphctl.hxx
+++ b/include/svx/graphctl.hxx
@@ -42,6 +42,21 @@ public:
virtual void Changed(const SdrObject& rObj, SdrUserCallType eType, const tools::Rectangle& rOldBoundRect) override;
};
class SvxGraphCtrl;
class SvxGraphCtrlUserCall : public SdrObjUserCall
{
SvxGraphCtrl& rWin;
public:
SvxGraphCtrlUserCall(SvxGraphCtrl& rGraphWin)
: rWin(rGraphWin)
{}
virtual void Changed(const SdrObject& rObj, SdrUserCallType eType, const tools::Rectangle& rOldBoundRect) override;
};
class SvxGraphCtrlAccessibleContext;
class SVX_DLLPUBLIC GraphCtrl : public Control
@@ -120,23 +135,91 @@ public:
void QueueIdleUpdate();
void SetSdrMode(bool b);
virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessible() override;
};
class SVX_DLLPUBLIC SvxGraphCtrl : public weld::CustomWidgetController
{
MapMode const aMap100;
Graphic aGraphic;
Size aGraphSize;
friend class SvxGraphCtrlView;
friend class SvxGraphCtrlUserCall;
virtual void Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect) override;
Graphic aGraphic;
ScopedVclPtrInstance<VirtualDevice> xVD;
Idle aUpdateIdle;
Link<SvxGraphCtrl*,void> aMousePosLink;
Link<SvxGraphCtrl*,void> aGraphSizeLink;
Link<SvxGraphCtrl*,void> aUpdateLink;
MapMode const aMap100;
Size aGraphSize;
Point aMousePos;
std::unique_ptr<SvxGraphCtrlUserCall> pUserCall;
SdrObjKind eObjKind;
sal_uInt16 nPolyEdit;
bool bEditMode;
bool mbSdrMode;
bool mbInIdleUpdate;
weld::Dialog* mpDialog;
DECL_LINK( UpdateHdl, Timer*, void );
rtl::Reference<SvxGraphCtrlAccessibleContext> mpAccContext;
protected:
std::unique_ptr<SdrModel> pModel;
std::unique_ptr<SdrView> pView;
virtual void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) override;
virtual void Resize() override;
virtual bool KeyInput(const KeyEvent& rKEvt) override;
virtual bool MouseButtonDown(const MouseEvent& rMEvt) override;
virtual bool MouseButtonUp(const MouseEvent& rMEvt) override;
virtual bool MouseMove(const MouseEvent& rMEvt) override;
virtual void InitSdrModel();
virtual void SdrObjCreated( const SdrObject& rObj );
virtual void SdrObjChanged( const SdrObject& rObj );
virtual void MarkListHasChanged();
void GraphicToVD();
SdrObjUserCall* GetSdrUserCall() { return pUserCall.get(); }
public:
SvxGraphCtrl();
SvxGraphCtrl(weld::Dialog* pDialog);
virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override;
virtual ~SvxGraphCtrl() override;
void SetGraphic( const Graphic& rGraphic );
void SetGraphic( const Graphic& rGraphic, bool bNewModel = true );
const Graphic& GetGraphic() const { return aGraphic; }
const Size& GetGraphicSize() const { return aGraphSize; }
const Point& GetMousePos() const { return aMousePos; }
void SetEditMode( const bool bEditMode );
void SetPolyEditMode( const sal_uInt16 nPolyEdit );
sal_uInt16 GetPolyEditMode() const { return nPolyEdit; }
void SetObjKind( const SdrObjKind eObjKind );
SdrModel* GetSdrModel() const { return pModel.get(); }
SdrView* GetSdrView() const { return pView.get(); }
SdrObject* GetSelectedSdrObject() const;
bool IsChanged() const { return mbSdrMode && pModel->IsChanged(); }
void SetMousePosLink( const Link<SvxGraphCtrl*,void>& rLink ) { aMousePosLink = rLink; }
void SetGraphSizeLink( const Link<SvxGraphCtrl*,void>& rLink ) { aGraphSizeLink = rLink; }
void SetUpdateLink( const Link<SvxGraphCtrl*,void>& rLink ) { aUpdateLink = rLink; }
void QueueIdleUpdate();
void SetSdrMode(bool b);
Point GetPositionInDialog() const;
virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessible() override;
};
class GraphCtrlView : public SdrView
@@ -152,15 +235,38 @@ protected:
}
public:
GraphCtrlView(
SdrModel& rSdrModel,
GraphCtrl* pWindow)
: SdrView(rSdrModel, pWindow)
,rGraphCtrl(*pWindow)
GraphCtrlView(SdrModel& rSdrModel, GraphCtrl* pWindow)
: SdrView(rSdrModel, pWindow)
, rGraphCtrl(*pWindow)
{
}
};
class SvxGraphCtrlView : public SdrView
{
SvxGraphCtrl& rGraphCtrl;
protected:
virtual void MarkListHasChanged() override
{
SdrView::MarkListHasChanged();
rGraphCtrl.MarkListHasChanged();
}
public:
SvxGraphCtrlView(SdrModel& rSdrModel, SvxGraphCtrl* pWindow)
: SdrView(rSdrModel, &pWindow->GetDrawingArea()->get_ref_device())
, rGraphCtrl(*pWindow)
{
}
// override these so we can get the occasions SdrPaintView would call Window::Invalidate on its vcl::Window
// if it had one, and route to WidgetController::Invalidate instead
virtual rtl::Reference<sdr::overlay::OverlayManager> CreateOverlayManager(OutputDevice& rDevice) const override;
virtual void InvalidateWindow(const tools::Rectangle& rArea, OutputDevice& rDevice) const override;
};
#endif // INCLUDED_SVX_GRAPHCTL_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/svx/imapdlg.hxx b/include/svx/imapdlg.hxx
index 86b5a9a..d2b1cf6 100644
--- a/include/svx/imapdlg.hxx
+++ b/include/svx/imapdlg.hxx
@@ -24,11 +24,10 @@
#include <sfx2/childwin.hxx>
#include <sfx2/ctrlitem.hxx>
#include <sfx2/basedlgs.hxx>
#include <vcl/fixed.hxx>
#include <vcl/combobox.hxx>
#include <vcl/edit.hxx>
#include <vcl/customweld.hxx>
#include <vcl/toolbox.hxx>
#include <vcl/status.hxx>
#include <vcl/weld.hxx>
#include <svx/svxdllapi.h>
#include <memory>
#include <vector>
@@ -77,69 +76,53 @@ public:
class IMapOwnData;
class IMapWindow;
class GraphCtrl;
class SvxGraphCtrl;
class SVX_DLLPUBLIC SvxIMapDlg : public SfxModelessDialog // SfxFloatingWindow
class SVX_DLLPUBLIC SvxIMapDlg : public SfxModelessDialogController
{
friend class IMapOwnData;
friend class IMapWindow;
VclPtr<ToolBox> m_pTbxIMapDlg1;
VclPtr<FixedText> m_pFtURL;
VclPtr<SvtURLBox> m_pURLBox;
VclPtr<FixedText> m_pFtText;
VclPtr<Edit> m_pEdtText;
VclPtr<FixedText> m_pFtTarget;
VclPtr<ComboBox> m_pCbbTarget;
VclPtr<StatusBar> m_pStbStatus;
sal_uInt16 mnApplyId;
sal_uInt16 mnOpenId;
sal_uInt16 mnSaveAsId;
sal_uInt16 mnSelectId;
sal_uInt16 mnRectId;
sal_uInt16 mnCircleId;
sal_uInt16 mnPolyId;
sal_uInt16 mnFreePolyId;
sal_uInt16 mnPolyEditId;
sal_uInt16 mnPolyMoveId;
sal_uInt16 mnPolyInsertId;
sal_uInt16 mnPolyDeleteId;
sal_uInt16 mnUndoId;
sal_uInt16 mnRedoId;
sal_uInt16 mnActiveId;
sal_uInt16 mnMacroId;
sal_uInt16 mnPropertyId;
sal_uInt16 mnCloseId;
VclPtr<IMapWindow> pIMapWnd;
std::unique_ptr<IMapOwnData> pOwnData;
void* pCheckObj;
SvxIMapDlgItem aIMapItem;
virtual bool Close() override;
std::unique_ptr<IMapWindow> m_xIMapWnd;
std::unique_ptr<weld::Toolbar> m_xTbxIMapDlg1;
std::unique_ptr<weld::Label> m_xFtURL;
std::unique_ptr<URLBox> m_xURLBox;
std::unique_ptr<weld::Label> m_xFtText;
std::unique_ptr<weld::Entry> m_xEdtText;
std::unique_ptr<weld::Label> m_xFtTarget;
std::unique_ptr<weld::ComboBox> m_xCbbTarget;
std::unique_ptr<weld::Button> m_xCancelBtn;
std::unique_ptr<weld::Label> m_xStbStatus1;
std::unique_ptr<weld::Label> m_xStbStatus2;
std::unique_ptr<weld::Label> m_xStbStatus3;
std::unique_ptr<weld::CustomWeld> m_xIMapWndWeld;
DECL_LINK( TbxClickHdl, ToolBox*, void );
DECL_LINK( TbxClickHdl, const OString&, void );
DECL_LINK( InfoHdl, IMapWindow&, void );
DECL_LINK( MousePosHdl, GraphCtrl*, void );
DECL_LINK( GraphSizeHdl, GraphCtrl*, void );
DECL_LINK( URLModifyHdl, Edit&, void );
DECL_LINK( URLModifyComboBoxHdl, ComboBox&, void );
DECL_LINK( URLLoseFocusHdl, Control&, void );
DECL_LINK( MousePosHdl, SvxGraphCtrl*, void );
DECL_LINK( GraphSizeHdl, SvxGraphCtrl*, void );
DECL_LINK( URLModifyHdl, weld::ComboBox&, void );
DECL_LINK( EntryModifyHdl, weld::Entry&, void );
DECL_LINK( URLModifyComboBoxHdl, weld::ComboBox&, void );
DECL_LINK( URLLoseFocusHdl, weld::Widget&, void );
DECL_LINK( UpdateHdl, Timer *, void );
DECL_LINK( StateHdl, GraphCtrl*, void );
DECL_LINK( MiscHdl, LinkParamNone*, void );
DECL_LINK( StateHdl, SvxGraphCtrl*, void );
DECL_LINK( CancelHdl, weld::Button&, void );
void URLModify();
void DoOpen();
bool DoSave();
void SetActiveTool( sal_uInt16 nId );
void SetActiveTool(const OString& rId);
public:
SvxIMapDlg( SfxBindings *pBindings, SfxChildWindow *pCW,
vcl::Window* pParent );
virtual ~SvxIMapDlg() override;
virtual void dispose() override;
SvxIMapDlg(SfxBindings *pBindings, SfxChildWindow *pCW,
weld::Window* pParent);
virtual ~SvxIMapDlg() override;
void SetExecState( bool bEnable );
diff --git a/include/svx/svdcrtv.hxx b/include/svx/svdcrtv.hxx
index d66ba7c..95c7cad 100644
--- a/include/svx/svdcrtv.hxx
+++ b/include/svx/svdcrtv.hxx
@@ -84,7 +84,7 @@ public:
virtual void BrkAction() override;
virtual void TakeActionRect(tools::Rectangle& rRect) const override;
virtual bool MouseMove(const MouseEvent& rMEvt, vcl::Window* pWin) override;
virtual bool MouseMove(const MouseEvent& rMEvt, OutputDevice* pWin) override;
void SetMeasureLayer(const OUString& rName) { maMeasureLayer=rName; }
diff --git a/include/svx/svdedxv.hxx b/include/svx/svdedxv.hxx
index 596e830..aab4e21 100644
--- a/include/svx/svdedxv.hxx
+++ b/include/svx/svdedxv.hxx
@@ -236,9 +236,9 @@ public:
OutlinerView* GetTextEditOutlinerView() { return pTextEditOutlinerView; }
virtual bool KeyInput(const KeyEvent& rKEvt, vcl::Window* pWin) override;
virtual bool MouseButtonDown(const MouseEvent& rMEvt, vcl::Window* pWin) override;
virtual bool MouseButtonUp(const MouseEvent& rMEvt, vcl::Window* pWin) override;
virtual bool MouseMove(const MouseEvent& rMEvt, vcl::Window* pWin) override;
virtual bool MouseButtonDown(const MouseEvent& rMEvt, OutputDevice* pWin) override;
virtual bool MouseButtonUp(const MouseEvent& rMEvt, OutputDevice* pWin) override;
virtual bool MouseMove(const MouseEvent& rMEvt, OutputDevice* pWin) override;
virtual bool Command(const CommandEvent& rCEvt, vcl::Window* pWin) override;
// #97766# make virtual to change implementation e.g. for SdOutlineView
diff --git a/include/svx/svdmrkv.hxx b/include/svx/svdmrkv.hxx
index d974cd8..05d7458 100644
--- a/include/svx/svdmrkv.hxx
+++ b/include/svx/svdmrkv.hxx
@@ -148,7 +148,7 @@ protected:
void SetMarkRects(); // Rects at the PageViews
void CheckMarked(); // Scan MarkList after Del and Lock Layer ...
void AddDragModeHdl(SdrDragMode eMode);
virtual bool MouseMove(const MouseEvent& rMEvt, vcl::Window* pWin) override;
virtual bool MouseMove(const MouseEvent& rMEvt, OutputDevice* pWin) override;
virtual bool RequestHelp(const HelpEvent& rHEvt) override;
// add custom handles (used by other apps, e.g. AnchorPos)
diff --git a/include/svx/svdpntv.hxx b/include/svx/svdpntv.hxx
index bdfa2c7..7fe1a83 100644
--- a/include/svx/svdpntv.hxx
+++ b/include/svx/svdpntv.hxx
@@ -221,7 +221,7 @@ public:
bool IsPagePaintingAllowed() const { return mbPagePaintingAllowed;}
void SetPagePaintingAllowed(bool bNew);
rtl::Reference<sdr::overlay::OverlayManager> CreateOverlayManager(OutputDevice& rDevice) const;
virtual rtl::Reference<sdr::overlay::OverlayManager> CreateOverlayManager(OutputDevice& rDevice) const;
protected:
svtools::ColorConfig maColorConfig;
@@ -238,7 +238,7 @@ public:
SdrPaintWindow* GetPaintWindow(sal_uInt32 nIndex) const;
// Replacement for GetWin(0), may return 0L (!)
OutputDevice* GetFirstOutputDevice() const;
static void InvalidateWindow(const tools::Rectangle& rArea, OutputDevice& rDevice);
virtual void InvalidateWindow(const tools::Rectangle& rArea, OutputDevice& rDevice) const;
private:
SVX_DLLPRIVATE void ImpClearVars();
@@ -465,9 +465,9 @@ public:
void SetSwapAsynchron(bool bJa=true) { mbSwapAsynchron=bJa; }
virtual bool KeyInput(const KeyEvent& rKEvt, vcl::Window* pWin);
virtual bool MouseButtonDown(const MouseEvent& /*rMEvt*/, vcl::Window* /*pWin*/) { return false; }
virtual bool MouseButtonUp(const MouseEvent& /*rMEvt*/, vcl::Window* /*pWin*/) { return false; }
virtual bool MouseMove(const MouseEvent& /*rMEvt*/, vcl::Window* /*pWin*/) { return false; }
virtual bool MouseButtonDown(const MouseEvent& /*rMEvt*/, OutputDevice* /*pWin*/) { return false; }
virtual bool MouseButtonUp(const MouseEvent& /*rMEvt*/, OutputDevice* /*pWin*/) { return false; }
virtual bool MouseMove(const MouseEvent& /*rMEvt*/, OutputDevice* /*pWin*/) { return false; }
virtual bool RequestHelp(const HelpEvent& /*rHEvt*/) { return false; }
virtual bool Command(const CommandEvent& /*rCEvt*/, vcl::Window* /*pWin*/) { return false; }
diff --git a/include/svx/svdview.hxx b/include/svx/svdview.hxx
index 176d6e6..4b14593 100644
--- a/include/svx/svdview.hxx
+++ b/include/svx/svdview.hxx
@@ -183,9 +183,9 @@ public:
bool IsMasterPagePaintCaching() const { return mbMasterPagePaintCaching; }
bool KeyInput(const KeyEvent& rKEvt, vcl::Window* pWin) override;
virtual bool MouseButtonDown(const MouseEvent& rMEvt, vcl::Window* pWin) override;
virtual bool MouseButtonUp(const MouseEvent& rMEvt, vcl::Window* pWin) override;
virtual bool MouseMove(const MouseEvent& rMEvt, vcl::Window* pWin) override;
virtual bool MouseButtonDown(const MouseEvent& rMEvt, OutputDevice* pWin) override;
virtual bool MouseButtonUp(const MouseEvent& rMEvt, OutputDevice* pWin) override;
virtual bool MouseMove(const MouseEvent& rMEvt, OutputDevice* pWin) override;
using SdrCreateView::RequestHelp;
virtual bool Command(const CommandEvent& rCEvt, vcl::Window* pWin) override;
diff --git a/include/svx/svxdlg.hxx b/include/svx/svxdlg.hxx
index 9708710..266eb4c 100644
--- a/include/svx/svxdlg.hxx
+++ b/include/svx/svxdlg.hxx
@@ -351,7 +351,7 @@ public:
virtual VclPtr<VclAbstractDialog> CreateGalleryThemePropertiesDialog(weld::Window* pParent,
ExchangeData* pData,
SfxItemSet* pItemSet ) = 0;
virtual VclPtr<AbstractURLDlg> CreateURLDialog(weld::Window* pParent,
virtual VclPtr<AbstractURLDlg> CreateURLDialog(weld::Widget* pParent,
const OUString& rURL, const OUString& rAltText, const OUString& rDescription,
const OUString& rTarget, const OUString& rName,
TargetList& rTargetList ) = 0;
@@ -427,8 +427,8 @@ public:
sal_uInt32 nResId )=0;
virtual VclPtr<SfxAbstractDialog> CreateCharMapDialog(weld::Window* pParent, const SfxItemSet& rAttr,
const css::uno::Reference<css::frame::XFrame>& rFrame) = 0;
virtual VclPtr<SfxAbstractDialog> CreateEventConfigDialog(weld::Window* pParent, const SfxItemSet& rAttr,
const css::uno::Reference< css::frame::XFrame >& _rxFrame) = 0;
virtual VclPtr<SfxAbstractDialog> CreateEventConfigDialog(weld::Widget* pParent, const SfxItemSet& rAttr,
const css::uno::Reference< css::frame::XFrame >& rFrame) = 0;
virtual VclPtr<AbstractSvxPostItDialog> CreateSvxPostItDialog(weld::Widget* pParent, const SfxItemSet& rCoreSet, bool bPrevNext = false) = 0;
virtual VclPtr<VclAbstractDialog> CreateSvxScriptOrgDialog(weld::Window* pParent, const OUString& rLanguage) override = 0;
diff --git a/include/vcl/customweld.hxx b/include/vcl/customweld.hxx
index a003d6b..07b09b2 100644
--- a/include/vcl/customweld.hxx
+++ b/include/vcl/customweld.hxx
@@ -68,6 +68,7 @@ public:
void EnableRTL(bool bEnable) { m_pDrawingArea->set_direction(bEnable); }
bool IsRTLEnabled() const { return m_pDrawingArea->get_direction(); }
void ReleaseMouse() { m_pDrawingArea->grab_remove(); }
void SetPointer(PointerStyle ePointerStyle) { m_pDrawingArea->set_cursor(ePointerStyle); }
void SetHelpId(const OString& rHelpId) { m_pDrawingArea->set_help_id(rHelpId); }
void SetAccessibleName(const OUString& rName) { m_pDrawingArea->set_accessible_name(rName); }
void set_size_request(int nWidth, int nHeight)
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index e6a28ce..6f01abf 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -56,6 +56,7 @@ class XGraphic;
typedef css::uno::Reference<css::accessibility::XAccessible> a11yref;
typedef css::uno::Reference<css::accessibility::XAccessibleRelationSet> a11yrelationset;
enum class PointerStyle;
class SvNumberFormatter;
class KeyEvent;
class MouseEvent;
@@ -1615,7 +1616,7 @@ public:
virtual void queue_draw_area(int x, int y, int width, int height) = 0;
virtual void queue_resize() = 0;
virtual void set_text_cursor() = 0;
virtual void set_cursor(PointerStyle ePointerStyle) = 0;
// use return here just to generate matching VirtualDevices
virtual OutputDevice& get_ref_device() = 0;
@@ -1663,6 +1664,25 @@ public:
virtual ~Menu() {}
};
class VCL_DLLPUBLIC Toolbar : virtual public Widget
{
protected:
Link<const OString&, void> m_aClickHdl;
void signal_clicked(const OString& rIdent) { m_aClickHdl.Call(rIdent); }
public:
virtual void set_item_sensitive(const OString& rIdent, bool bSensitive) = 0;
virtual bool get_item_sensitive(const OString& rIdent) const = 0;
virtual void set_item_active(const OString& rIdent, bool bActive) = 0;
virtual bool get_item_active(const OString& rIdent) const = 0;
virtual void insert_separator(int pos, const OUString& rId) = 0;
void append_separator(const OUString& rId) { insert_separator(-1, rId); }
void connect_clicked(const Link<const OString&, void>& rLink) { m_aClickHdl = rLink; }
};
class VCL_DLLPUBLIC SizeGroup
{
public:
@@ -1755,6 +1775,8 @@ public:
const OString& treeviewid, bool bTakeOwnership = false)
= 0;
virtual std::unique_ptr<Menu> weld_menu(const OString& id, bool bTakeOwnership = true) = 0;
virtual std::unique_ptr<Toolbar> weld_toolbar(const OString& id, bool bTakeOwnership = true)
= 0;
virtual std::unique_ptr<SizeGroup> create_size_group() = 0;
virtual ~Builder() {}
};
diff --git a/sc/source/ui/pagedlg/tphfedit.cxx b/sc/source/ui/pagedlg/tphfedit.cxx
index dfd7f89..b515ab7 100644
--- a/sc/source/ui/pagedlg/tphfedit.cxx
+++ b/sc/source/ui/pagedlg/tphfedit.cxx
@@ -110,7 +110,7 @@ void ScEditWindow::SetDrawingArea(weld::DrawingArea* pDrawingArea)
pEdView->SetBackgroundColor( aBgColor );
pEdEngine->InsertView( pEdView.get() );
pDrawingArea->set_text_cursor();
pDrawingArea->set_cursor(PointerStyle::Text);
if (pAcc)
{
diff --git a/sd/source/ui/dlg/PhotoAlbumDialog.cxx b/sd/source/ui/dlg/PhotoAlbumDialog.cxx
index 6381c22..cd3918e 100644
--- a/sd/source/ui/dlg/PhotoAlbumDialog.cxx
+++ b/sd/source/ui/dlg/PhotoAlbumDialog.cxx
@@ -42,6 +42,7 @@ namespace sd
SdPhotoAlbumDialog::SdPhotoAlbumDialog(weld::Window* pWindow, SdDrawDocument* pActDoc)
: GenericDialogController(pWindow, "modules/simpress/ui/photoalbum.ui", "PhotoAlbumCreatorDialog")
, m_pDoc(pActDoc)
, m_aImg(m_xDialog.get())
, m_xCancelBtn(m_xBuilder->weld_button("cancel"))
, m_xCreateBtn(m_xBuilder->weld_button("ok"))
, m_xAddBtn(m_xBuilder->weld_button("add_btn"))
diff --git a/sd/source/ui/dlg/vectdlg.cxx b/sd/source/ui/dlg/vectdlg.cxx
index c48b641..6bc0f8d 100644
--- a/sd/source/ui/dlg/vectdlg.cxx
+++ b/sd/source/ui/dlg/vectdlg.cxx
@@ -34,6 +34,8 @@ SdVectorizeDlg::SdVectorizeDlg(weld::Window* pParent, const Bitmap& rBmp, ::sd::
: GenericDialogController(pParent, "modules/sdraw/ui/vectorize.ui", "VectorizeDialog")
, m_pDocSh(pDocShell)
, aBmp(rBmp)
, m_aBmpWin(m_xDialog.get())
, m_aMtfWin(m_xDialog.get())
, m_xNmLayers(m_xBuilder->weld_spin_button("colors"))
, m_xMtReduce(m_xBuilder->weld_metric_spin_button("points", FieldUnit::PIXEL))
, m_xFtFillHoles(m_xBuilder->weld_label("tilesft"))
diff --git a/solenv/sanitizers/ui/svx.suppr b/solenv/sanitizers/ui/svx.suppr
index ad14e76..4548b24 100644
--- a/solenv/sanitizers/ui/svx.suppr
+++ b/solenv/sanitizers/ui/svx.suppr
@@ -40,6 +40,9 @@ svx/uiconfig/ui/findreplacedialog.ui://GtkLabel[@id='searchdir'] orphan-label
svx/uiconfig/ui/fontworkgallerydialog.ui://GtkLabel[@id='label1'] orphan-label
svx/uiconfig/ui/headfootformatpage.ui://GtkLabel[@id='labelHeaderFormat'] orphan-label
svx/uiconfig/ui/headfootformatpage.ui://GtkLabel[@id='labelFooterFormat'] orphan-label
svx/uiconfig/ui/imapdialog.ui://GtkLabel[@id='statusurl'] orphan-label
svx/uiconfig/ui/imapdialog.ui://GtkLabel[@id='statuspos'] orphan-label
svx/uiconfig/ui/imapdialog.ui://GtkLabel[@id='statussize'] orphan-label
svx/uiconfig/ui/mediaplayback.ui://GtkLabel[@id='label1'] orphan-label
svx/uiconfig/ui/mediaplayback.ui://GtkLabel[@id='label2'] orphan-label
svx/uiconfig/ui/mediaplayback.ui://GtkLabel[@id='label3'] orphan-label
diff --git a/svtools/source/control/inettbc.cxx b/svtools/source/control/inettbc.cxx
index 6e9142f..b59dd0f 100644
--- a/svtools/source/control/inettbc.cxx
+++ b/svtools/source/control/inettbc.cxx
@@ -2143,6 +2143,7 @@ IMPL_LINK_NOARG(URLBox, FocusOutHdl, weld::Widget&, void)
pCtx->join();
pCtx.clear();
}
aFocusOutHdl.Call(*m_xWidget);
}
OUString URLBox::GetURL()
diff --git a/svtools/source/control/valueacc.cxx b/svtools/source/control/valueacc.cxx
index 433a761..b6a74cc 100644
--- a/svtools/source/control/valueacc.cxx
+++ b/svtools/source/control/valueacc.cxx
@@ -1760,7 +1760,6 @@ awt::Rectangle SAL_CALL SvtValueSetAcc::getBounds()
return aRet;
}
awt::Point SAL_CALL SvtValueSetAcc::getLocation()
{
ThrowIfDisposed();
@@ -1773,7 +1772,6 @@ awt::Point SAL_CALL SvtValueSetAcc::getLocation()
return aRet;
}
awt::Point SAL_CALL SvtValueSetAcc::getLocationOnScreen()
{
ThrowIfDisposed();
@@ -1798,7 +1796,6 @@ awt::Point SAL_CALL SvtValueSetAcc::getLocationOnScreen()
return aScreenLoc;
}
awt::Size SAL_CALL SvtValueSetAcc::getSize()
{
ThrowIfDisposed();
diff --git a/svx/source/accessibility/GraphCtlAccessibleContext.cxx b/svx/source/accessibility/GraphCtlAccessibleContext.cxx
index 065515d..4d04807 100644
--- a/svx/source/accessibility/GraphCtlAccessibleContext.cxx
+++ b/svx/source/accessibility/GraphCtlAccessibleContext.cxx
@@ -59,11 +59,9 @@ using namespace ::com::sun::star::accessibility;
// internal
/** initialize this component and set default values */
SvxGraphCtrlAccessibleContext::SvxGraphCtrlAccessibleContext(
const Reference< XAccessible >& rxParent,
GraphCtrl& rRepr ) :
SvxGraphCtrl& rRepr ) :
SvxGraphCtrlAccessibleContext_Base( m_aMutex ),
mxParent( rxParent ),
mpControl( &rRepr ),
mpModel (nullptr),
mpPage (nullptr),
@@ -96,7 +94,7 @@ SvxGraphCtrlAccessibleContext::SvxGraphCtrlAccessibleContext(
}
maTreeInfo.SetSdrView( mpView );
maTreeInfo.SetDevice( mpControl );
maTreeInfo.SetDevice(&mpControl->GetDrawingArea()->get_ref_device());
maTreeInfo.SetViewForwarder( this );
}
@@ -131,7 +129,8 @@ Reference< XAccessible > SvxGraphCtrlAccessibleContext::getAccessible( const Sdr
// create a new one and remember in our internal map
Reference< XShape > xShape( Reference< XShape >::query( const_cast<SdrObject*>(pObj)->getUnoShape() ) );
AccessibleShapeInfo aShapeInfo (xShape,mxParent);
css::uno::Reference<css::accessibility::XAccessible> xParent(getAccessibleParent());
AccessibleShapeInfo aShapeInfo (xShape,xParent);
// Create accessible object that corresponds to the descriptor's shape.
rtl::Reference<AccessibleShape> pAcc(ShapeTypeHandler::Instance().CreateAccessibleObject(
aShapeInfo, maTreeInfo));
@@ -180,7 +179,7 @@ Reference< XAccessible > SAL_CALL SvxGraphCtrlAccessibleContext::getAccessibleAt
}
Point aPnt( rPoint.X, rPoint.Y );
mpControl->PixelToLogic( aPnt );
mpControl->GetDrawingArea()->get_ref_device().PixelToLogic( aPnt );
SdrObject* pObj = nullptr;
@@ -195,41 +194,82 @@ Reference< XAccessible > SAL_CALL SvxGraphCtrlAccessibleContext::getAccessibleAt
return xAccessible;
}
awt::Rectangle SAL_CALL SvxGraphCtrlAccessibleContext::getBounds()
{
// no guard -> done in GetBoundingBox()
tools::Rectangle aCoreBounds( GetBoundingBox() );
awt::Rectangle aBounds;
aBounds.X = aCoreBounds.getX();
aBounds.Y = aCoreBounds.getY();
aBounds.Width = aCoreBounds.getWidth();
aBounds.Height = aCoreBounds.getHeight();
return aBounds;
}
const SolarMutexGuard aSolarGuard;
if (nullptr == mpControl)
throw DisposedException();
const Point aOutPos;
const Size aOutSize( mpControl->GetOutputSizePixel() );
awt::Rectangle aRet;
aRet.X = aOutPos.X();
aRet.Y = aOutPos.Y();
aRet.Width = aOutSize.Width();
aRet.Height = aOutSize.Height();
return aRet;
}
awt::Point SAL_CALL SvxGraphCtrlAccessibleContext::getLocation()
{
// no guard -> done in GetBoundingBox()
tools::Rectangle aRect( GetBoundingBox() );
return awt::Point( aRect.getX(), aRect.getY() );
}
const SolarMutexGuard aSolarGuard;
if (nullptr == mpControl)
throw DisposedException();
const awt::Rectangle aRect( getBounds() );
awt::Point aRet;
aRet.X = aRect.X;
aRet.Y = aRect.Y;
return aRet;
}
awt::Point SAL_CALL SvxGraphCtrlAccessibleContext::getLocationOnScreen()
{
// no guard -> done in GetBoundingBoxOnScreen()
tools::Rectangle aRect( GetBoundingBoxOnScreen() );
return awt::Point( aRect.getX(), aRect.getY() );
}
const SolarMutexGuard aSolarGuard;
if (nullptr == mpControl)
throw DisposedException();
awt::Point aScreenLoc(0, 0);
auto xParent(getAccessibleParent());
if (xParent)
{
css::uno::Reference<css::accessibility::XAccessibleContext> xParentContext(xParent->getAccessibleContext());
css::uno::Reference<css::accessibility::XAccessibleComponent> xParentComponent(xParentContext, css::uno::UNO_QUERY);
OSL_ENSURE( xParentComponent.is(), "SvtValueSetAcc::getLocationOnScreen: no parent component!" );
if ( xParentComponent.is() )
{
awt::Point aParentScreenLoc( xParentComponent->getLocationOnScreen() );
awt::Point aOwnRelativeLoc( getLocation() );
aScreenLoc.X = aParentScreenLoc.X + aOwnRelativeLoc.X;
aScreenLoc.Y = aParentScreenLoc.Y + aOwnRelativeLoc.Y;
}
}
return aScreenLoc;
}
awt::Size SAL_CALL SvxGraphCtrlAccessibleContext::getSize()
{
// no guard -> done in GetBoundingBox()
tools::Rectangle aRect( GetBoundingBox() );
return awt::Size( aRect.getWidth(), aRect.getHeight() );
const SolarMutexGuard aSolarGuard;
if (nullptr == mpControl)
throw DisposedException();
const awt::Rectangle aRect( getBounds() );
awt::Size aRet;
aRet.Width = aRect.Width;
aRet.Height = aRect.Height;
return aRet;
}
// XAccessibleContext
@@ -282,12 +322,15 @@ Reference< XAccessible > SAL_CALL SvxGraphCtrlAccessibleContext::getAccessibleCh
return getAccessible( getSdrObject( nIndex ) );
}
Reference< XAccessible > SAL_CALL SvxGraphCtrlAccessibleContext::getAccessibleParent()
{
return mxParent;
}
::SolarMutexGuard aGuard;
if( nullptr == mpControl )
throw DisposedException();
return mpControl->GetDrawingArea()->get_accessible_parent();
}
sal_Int32 SAL_CALL SvxGraphCtrlAccessibleContext::getAccessibleIndexInParent()
{
@@ -295,9 +338,10 @@ sal_Int32 SAL_CALL SvxGraphCtrlAccessibleContext::getAccessibleIndexInParent()
// Use a simple but slow solution for now. Optimize later.
// Iterate over all the parent's children and search for this object.
if( mxParent.is() )
css::uno::Reference<css::accessibility::XAccessible> xParent(getAccessibleParent());
if (xParent.is())
{
Reference< XAccessibleContext > xParentContext( mxParent->getAccessibleContext() );
Reference< XAccessibleContext > xParentContext( xParent->getAccessibleContext() );
if( xParentContext.is() )
{
sal_Int32 nChildCount = xParentContext->getAccessibleChildCount();
@@ -377,9 +421,10 @@ lang::Locale SAL_CALL SvxGraphCtrlAccessibleContext::getLocale()
{
::SolarMutexGuard aGuard;
if( mxParent.is() )
css::uno::Reference<css::accessibility::XAccessible> xParent(getAccessibleParent());
if (xParent.is())
{
Reference< XAccessibleContext > xParentContext( mxParent->getAccessibleContext() );
Reference< XAccessibleContext > xParentContext( xParent->getAccessibleContext() );
if( xParentContext.is() )
return xParentContext->getLocale();
}
@@ -652,46 +697,6 @@ void SAL_CALL SvxGraphCtrlAccessibleContext::disposing()
}
}
tools::Rectangle SvxGraphCtrlAccessibleContext::GetBoundingBoxOnScreen()
{
::SolarMutexGuard aGuard;
if( nullptr == mpControl )
throw DisposedException();
return tools::Rectangle(
mpControl->GetAccessibleParentWindow()->OutputToAbsoluteScreenPixel(
mpControl->GetPosPixel() ),
mpControl->GetSizePixel() );
}
/** Calculate the relative coordinates of the bounding box as difference
between the absolute coordinates of the bounding boxes of this control
and its parent in the accessibility tree.
*/
tools::Rectangle SvxGraphCtrlAccessibleContext::GetBoundingBox()
{
::SolarMutexGuard aGuard;
tools::Rectangle aBounds ( 0, 0, 0, 0 );
vcl::Window* pWindow = mpControl;
if (pWindow == nullptr)
throw DisposedException();
aBounds = pWindow->GetWindowExtentsRelative (nullptr);
vcl::Window* pParent = pWindow->GetAccessibleParentWindow();
if (pParent != nullptr)
{
tools::Rectangle aParentRect = pParent->GetWindowExtentsRelative (nullptr);
aBounds -= aParentRect.TopLeft();
}
return aBounds;
}
void SvxGraphCtrlAccessibleContext::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
{
if (rHint.GetId() == SfxHintId::ThisIsAnSdrHint)
@@ -751,13 +756,11 @@ tools::Rectangle SvxGraphCtrlAccessibleContext::GetVisibleArea() const
return aVisArea;
}
Point SvxGraphCtrlAccessibleContext::LogicToPixel (const Point& rPoint) const
{
if( mpControl )
{
tools::Rectangle aBBox(mpControl->GetWindowExtentsRelative(nullptr));
return mpControl->LogicToPixel (rPoint) + aBBox.TopLeft();
return mpControl->GetDrawingArea()->get_ref_device().LogicToPixel (rPoint) + mpControl->GetPositionInDialog();
}
else
{
@@ -765,11 +768,10 @@ Point SvxGraphCtrlAccessibleContext::LogicToPixel (const Point& rPoint) const
}
}
Size SvxGraphCtrlAccessibleContext::LogicToPixel (const Size& rSize) const
{
if( mpControl )
return mpControl->LogicToPixel (rSize);
return mpControl->GetDrawingArea()->get_ref_device().LogicToPixel(rSize);
else
return rSize;
}
diff --git a/svx/source/dialog/ClassificationEditView.cxx b/svx/source/dialog/ClassificationEditView.cxx
index 2d53d5d..2972f1b 100644
--- a/svx/source/dialog/ClassificationEditView.cxx
+++ b/svx/source/dialog/ClassificationEditView.cxx
@@ -80,7 +80,7 @@ void ClassificationEditView::SetDrawingArea(weld::DrawingArea* pDrawingArea)
pEdView->SetBackgroundColor(aBgColor);
pEdEngine->InsertView(pEdView.get());
pDrawingArea->set_text_cursor();
pDrawingArea->set_cursor(PointerStyle::Text);
}
ClassificationEditView::~ClassificationEditView()
diff --git a/svx/source/dialog/graphctl.cxx b/svx/source/dialog/graphctl.cxx
index 13b9c61..d77a7c6 100644
--- a/svx/source/dialog/graphctl.cxx
+++ b/svx/source/dialog/graphctl.cxx
@@ -29,6 +29,7 @@
#include <tools/debug.hxx>
#include <svx/graphctl.hxx>
#include <svx/sdr/overlay/overlaymanager.hxx>
#include <GraphCtlAccessibleContext.hxx>
#include <svx/xoutbmp.hxx>
#include <svx/svxids.hrc>
@@ -54,6 +55,25 @@ void GraphCtrlUserCall::Changed( const SdrObject& rObj, SdrUserCallType eType, c
rWin.QueueIdleUpdate();
}
void SvxGraphCtrlUserCall::Changed( const SdrObject& rObj, SdrUserCallType eType, const tools::Rectangle& /*rOldBoundRect*/ )
{
switch( eType )
{
case SdrUserCallType::MoveOnly:
case SdrUserCallType::Resize:
rWin.SdrObjChanged( rObj );
break;
case SdrUserCallType::Inserted:
rWin.SdrObjCreated( rObj );
break;
default:
break;
}
rWin.QueueIdleUpdate();
}
GraphCtrl::GraphCtrl( vcl::Window* pParent, WinBits nStyle ) :
Control ( pParent, nStyle ),
aUpdateIdle ( "svx GraphCtrl Update" ),
@@ -82,7 +102,6 @@ void GraphCtrl::dispose()
if( mpAccContext.is() )
{
mpAccContext->disposing();
mpAccContext.clear();
}
pView.reset();
@@ -166,6 +185,7 @@ void GraphCtrl::SetGraphic( const Graphic& rGraphic, bool bNewModel )
aGraphSizeLink.Call( this );
Resize();
Invalidate();
QueueIdleUpdate();
}
@@ -737,47 +757,148 @@ void GraphCtrl::QueueIdleUpdate()
aUpdateIdle.Start();
}
css::uno::Reference< css::accessibility::XAccessible > GraphCtrl::CreateAccessible()
SvxGraphCtrl::SvxGraphCtrl(weld::Dialog* pDialog)
: aUpdateIdle("svx GraphCtrl Update")
, aMap100(MapUnit::Map100thMM)
, eObjKind(OBJ_NONE)
, nPolyEdit(0)
, bEditMode(false)
, mbSdrMode(false)
, mbInIdleUpdate(false)
, mpDialog(pDialog)
{
if( mpAccContext == nullptr )
pUserCall.reset(new SvxGraphCtrlUserCall( *this ));
aUpdateIdle.SetPriority( TaskPriority::LOWEST );
aUpdateIdle.SetInvokeHandler( LINK( this, SvxGraphCtrl, UpdateHdl ) );
aUpdateIdle.Start();
}
void SvxGraphCtrl::SetDrawingArea(weld::DrawingArea* pDrawingArea)
{
weld::CustomWidgetController::SetDrawingArea(pDrawingArea);
EnableRTL(false);
}
SvxGraphCtrl::~SvxGraphCtrl()
{
aUpdateIdle.Stop();
if( mpAccContext.is() )
{
vcl::Window* pParent = GetParent();
DBG_ASSERT( pParent, "-GraphCtrl::CreateAccessible(): No Parent!" );
if( pParent )
{
css::uno::Reference< css::accessibility::XAccessible > xAccParent( pParent->GetAccessible() );
// Disable accessibility if no model/view data available
if( pView &&
pModel &&
xAccParent.is() )
{
mpAccContext = new SvxGraphCtrlAccessibleContext( xAccParent, *this );
}
}
mpAccContext->disposing();
mpAccContext.clear();
}
return mpAccContext.get();
pView.reset();
pModel.reset();
pUserCall.reset();
}
SvxGraphCtrl::SvxGraphCtrl()
: aMap100(MapUnit::Map100thMM)
void SvxGraphCtrl::SetSdrMode(bool bSdrMode)
{
mbSdrMode = bSdrMode;
const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
OutputDevice& rDevice = GetDrawingArea()->get_ref_device();
rDevice.SetBackground( Wallpaper( rStyleSettings.GetWindowColor() ) );
xVD->SetBackground( Wallpaper( rStyleSettings.GetWindowColor() ) );
rDevice.SetMapMode( aMap100 );
xVD->SetMapMode( aMap100 );
pView.reset();
pModel.reset();
if ( mbSdrMode )
InitSdrModel();
QueueIdleUpdate();
}
void SvxGraphCtrl::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle&)
void SvxGraphCtrl::InitSdrModel()
{
rRenderContext.Erase();
SolarMutexGuard aGuard;
SdrPage* pPage;
// destroy old junk
pView.reset();
pModel.reset();
// Creating a Model
pModel.reset(new SdrModel(nullptr, nullptr, true));
pModel->GetItemPool().FreezeIdRanges();
pModel->SetScaleUnit( aMap100.GetMapUnit() );
pModel->SetScaleFraction( Fraction( 1, 1 ) );
pModel->SetDefaultFontHeight( 500 );
pPage = new SdrPage( *pModel );
pPage->SetSize( aGraphSize );
pPage->SetBorder( 0, 0, 0, 0 );
pModel->InsertPage( pPage );
pModel->SetChanged( false );
// Creating a View
pView.reset(new SvxGraphCtrlView(*pModel, this));
pView->SetWorkArea( tools::Rectangle( Point(), aGraphSize ) );
pView->EnableExtendedMouseEventDispatcher( true );
pView->ShowSdrPage(pView->GetModel()->GetPage(0));
pView->SetFrameDragSingles();
pView->SetMarkedPointsSmooth( SdrPathSmoothKind::Symmetric );
pView->SetEditMode();
// #i72889# set needed flags
pView->SetPagePaintingAllowed(false);
pView->SetBufferedOutputAllowed(true);
pView->SetBufferedOverlayAllowed(true);
// Tell the accessibility object about the changes.
if (mpAccContext.is())
mpAccContext->setModelAndView (pModel.get(), pView.get());
}
void SvxGraphCtrl::SetGraphic( const Graphic& rGraphic, bool bNewModel )
{
aGraphic = rGraphic;
xVD->SetOutputSizePixel(Size(0, 0)); //force redraw
if ( aGraphic.GetPrefMapMode().GetMapUnit() == MapUnit::MapPixel )
aGraphSize = Application::GetDefaultDevice()->PixelToLogic( aGraphic.GetPrefSize(), aMap100 );
else
aGraphSize = OutputDevice::LogicToLogic( aGraphic.GetPrefSize(), aGraphic.GetPrefMapMode(), aMap100 );
if ( mbSdrMode && bNewModel )
InitSdrModel();
aGraphSizeLink.Call( this );
Resize();
Invalidate();
QueueIdleUpdate();
}
void SvxGraphCtrl::GraphicToVD()
{
OutputDevice& rDevice = GetDrawingArea()->get_ref_device();
xVD->SetOutputSizePixel(GetOutputSizePixel());
xVD->SetBackground(rDevice.GetBackground());
xVD->Erase();
const bool bGraphicValid(GraphicType::NONE != aGraphic.GetType());
// #i73381# in non-SdrMode, paint to local directly
if (bGraphicValid && aGraphSize.Width() && aGraphSize.Height())
if (bGraphicValid)
aGraphic.Draw(xVD.get(), Point(), aGraphSize);
}
void SvxGraphCtrl::Resize()
{
weld::CustomWidgetController::Resize();
if (aGraphSize.Width() && aGraphSize.Height())
{
MapMode aDisplayMap( aMap100 );
Point aNewPos;
Size aNewSize;
const Size aWinSize = Application::GetDefaultDevice()->PixelToLogic(GetOutputSizePixel(), aMap100);
OutputDevice& rDevice = GetDrawingArea()->get_ref_device();
const Size aWinSize = rDevice.PixelToLogic( GetOutputSizePixel(), aDisplayMap );
const long nWidth = aWinSize.Width();
const long nHeight = aWinSize.Height();
double fGrfWH = static_cast<double>(aGraphSize.Width()) / aGraphSize.Height();
@@ -802,27 +923,605 @@ void SvxGraphCtrl::Paint(vcl::RenderContext& rRenderContext, const tools::Rectan
aDisplayMap.SetScaleX( Fraction( aNewSize.Width(), aGraphSize.Width() ) );
aDisplayMap.SetScaleY( Fraction( aNewSize.Height(), aGraphSize.Height() ) );
aDisplayMap.SetOrigin(OutputDevice::LogicToLogic(aNewPos, aMap100, aDisplayMap));
rRenderContext.SetMapMode(aDisplayMap);
aDisplayMap.SetOrigin( OutputDevice::LogicToLogic( aNewPos, aMap100, aDisplayMap ) );
rDevice.SetMapMode( aDisplayMap );
xVD->SetMapMode( aDisplayMap );
}
aGraphic.Draw(&rRenderContext, Point(), aGraphSize);
Invalidate();
}
void SvxGraphCtrl::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect)
{
// #i72889# used split repaint to be able to paint an own background
// even to the buffered view
const bool bGraphicValid(GraphicType::NONE != aGraphic.GetType());
if (GetOutputSizePixel() != xVD->GetOutputSizePixel())
GraphicToVD();
if (mbSdrMode)
{
SdrPaintWindow* pPaintWindow = pView->BeginCompleteRedraw(&rRenderContext);
pPaintWindow->SetOutputToWindow(true);
if (bGraphicValid)
{
vcl::RenderContext& rTarget = pPaintWindow->GetTargetOutputDevice();
OutputDevice& rDevice = GetDrawingArea()->get_ref_device();
rTarget.SetBackground(rDevice.GetBackground());
rTarget.Erase();
rTarget.DrawOutDev(Point(), xVD->GetOutputSize(), Point(), xVD->GetOutputSize(), *xVD);
}
const vcl::Region aRepaintRegion(rRect);
pView->DoCompleteRedraw(*pPaintWindow, aRepaintRegion);
pView->EndCompleteRedraw(*pPaintWindow, true);
}
else
{
// #i73381# in non-SdrMode, paint to local directly
rRenderContext.DrawOutDev(rRect.TopLeft(), rRect.GetSize(),
rRect.TopLeft(), rRect.GetSize(),
*xVD);
}
}
SvxGraphCtrl::~SvxGraphCtrl()
void SvxGraphCtrl::SdrObjChanged( const SdrObject& )
{
QueueIdleUpdate();
}
void SvxGraphCtrl::SetGraphic(const Graphic& rGraphic)
void SvxGraphCtrl::SdrObjCreated( const SdrObject& )
{
aGraphic = rGraphic;
QueueIdleUpdate();
}
if ( aGraphic.GetPrefMapMode().GetMapUnit() == MapUnit::MapPixel )
aGraphSize = Application::GetDefaultDevice()->PixelToLogic( aGraphic.GetPrefSize(), aMap100 );
void SvxGraphCtrl::MarkListHasChanged()
{
QueueIdleUpdate();
}
bool SvxGraphCtrl::KeyInput( const KeyEvent& rKEvt )
{
vcl::KeyCode aCode( rKEvt.GetKeyCode() );
bool bProc = false;
OutputDevice& rDevice = GetDrawingArea()->get_ref_device();
switch ( aCode.GetCode() )
{
case KEY_DELETE:
case KEY_BACKSPACE:
{
if ( mbSdrMode )
{
pView->DeleteMarked();
bProc = true;
}
}
break;
case KEY_ESCAPE:
{
if ( mbSdrMode )
{
if ( pView->IsAction() )
{
pView->BrkAction();
bProc = true;
}
else if ( pView->AreObjectsMarked() )
{
pView->UnmarkAllObj();
bProc = true;
}
}
}
break;
case KEY_F11:
case KEY_TAB:
{
if( mbSdrMode )
{
if( !aCode.IsMod1() && !aCode.IsMod2() )
{
bool bForward = !aCode.IsShift();
// select next object
if ( ! pView->MarkNextObj( bForward ))
{
// At first or last object. Cycle to the other end
// of the list.
pView->UnmarkAllObj();
pView->MarkNextObj (bForward);
}
bProc = true;
}
else if(aCode.IsMod1())
{
// select next handle
const SdrHdlList& rHdlList = pView->GetHdlList();
bool bForward(!aCode.IsShift());
const_cast<SdrHdlList&>(rHdlList).TravelFocusHdl(bForward);
bProc = true;
}
}
}
break;
case KEY_END:
{
if ( aCode.IsMod1() )
{
// mark last object
pView->UnmarkAllObj();
pView->MarkNextObj();
bProc = true;
}
}
break;
case KEY_HOME:
{
if ( aCode.IsMod1() )
{
pView->UnmarkAllObj();
pView->MarkNextObj(true);
bProc = true;
}
}
break;
case KEY_UP:
case KEY_DOWN:
case KEY_LEFT:
case KEY_RIGHT:
{
long nX = 0;
long nY = 0;
if (aCode.GetCode() == KEY_UP)
{
// Scroll up
nX = 0;
nY =-1;
}
else if (aCode.GetCode() == KEY_DOWN)
{
// Scroll down
nX = 0;
nY = 1;
}
else if (aCode.GetCode() == KEY_LEFT)
{
// Scroll left
nX =-1;
nY = 0;
}
else if (aCode.GetCode() == KEY_RIGHT)
{
// Scroll right
nX = 1;
nY = 0;
}
if (pView->AreObjectsMarked() && !aCode.IsMod1() )
{
if(aCode.IsMod2())
{
// move in 1 pixel distance
Size aLogicSizeOnePixel = rDevice.PixelToLogic(Size(1,1));
nX *= aLogicSizeOnePixel.Width();
nY *= aLogicSizeOnePixel.Height();
}
else
{
// old, fixed move distance
nX *= 100;
nY *= 100;
}
// II
const SdrHdlList& rHdlList = pView->GetHdlList();
SdrHdl* pHdl = rHdlList.GetFocusHdl();
if(nullptr == pHdl)
{
// restrict movement to WorkArea
const tools::Rectangle& rWorkArea = pView->GetWorkArea();
if(!rWorkArea.IsEmpty())
{
tools::Rectangle aMarkRect(pView->GetMarkedObjRect());
aMarkRect.Move(nX, nY);
if(!aMarkRect.IsInside(rWorkArea))
{
if(aMarkRect.Left() < rWorkArea.Left())
{
nX += rWorkArea.Left() - aMarkRect.Left();
}
if(aMarkRect.Right() > rWorkArea.Right())
{
nX -= aMarkRect.Right() - rWorkArea.Right();
}
if(aMarkRect.Top() < rWorkArea.Top())
{
nY += rWorkArea.Top() - aMarkRect.Top();
}
if(aMarkRect.Bottom() > rWorkArea.Bottom())
{
nY -= aMarkRect.Bottom() - rWorkArea.Bottom();
}
}
}
// no handle selected
if(0 != nX || 0 != nY)
{
pView->MoveAllMarked(Size(nX, nY));
}
}
else
{
// move handle with index nHandleIndex
if (nX || nY)
{
// now move the Handle (nX, nY)
Point aStartPoint(pHdl->GetPos());
Point aEndPoint(pHdl->GetPos() + Point(nX, nY));
const SdrDragStat& rDragStat = pView->GetDragStat();
// start dragging
pView->BegDragObj(aStartPoint, nullptr, pHdl, 0);
if(pView->IsDragObj())
{
bool bWasNoSnap = rDragStat.IsNoSnap();
bool bWasSnapEnabled = pView->IsSnapEnabled();
// switch snapping off
if(!bWasNoSnap)
const_cast<SdrDragStat&>(rDragStat).SetNoSnap();
if(bWasSnapEnabled)
pView->SetSnapEnabled(false);
pView->MovAction(aEndPoint);
pView->EndDragObj();
// restore snap
if(!bWasNoSnap)
const_cast<SdrDragStat&>(rDragStat).SetNoSnap(bWasNoSnap);
if(bWasSnapEnabled)
pView->SetSnapEnabled(bWasSnapEnabled);
}
}
}
bProc = true;
}
}
break;
case KEY_SPACE:
{
const SdrHdlList& rHdlList = pView->GetHdlList();
SdrHdl* pHdl = rHdlList.GetFocusHdl();
if(pHdl)
{
if(pHdl->GetKind() == SdrHdlKind::Poly)
{
// rescue ID of point with focus
sal_uInt32 nPol(pHdl->GetPolyNum());
sal_uInt32 nPnt(pHdl->GetPointNum());
if(pView->IsPointMarked(*pHdl))
{
if(rKEvt.GetKeyCode().IsShift())
{
pView->UnmarkPoint(*pHdl);
}
}
else
{
if(!rKEvt.GetKeyCode().IsShift())
{
pView->UnmarkAllPoints();
}
pView->MarkPoint(*pHdl);
}
if(nullptr == rHdlList.GetFocusHdl())
{
// restore point with focus
SdrHdl* pNewOne = nullptr;
for(size_t a = 0; !pNewOne && a < rHdlList.GetHdlCount(); ++a)
{
SdrHdl* pAct = rHdlList.GetHdl(a);
if(pAct
&& pAct->GetKind() == SdrHdlKind::Poly
&& pAct->GetPolyNum() == nPol
&& pAct->GetPointNum() == nPnt)
{
pNewOne = pAct;
}
}
if(pNewOne)
{
const_cast<SdrHdlList&>(rHdlList).SetFocusHdl(pNewOne);
}
}
bProc = true;
}
}
}
break;
default:
break;
}
if (bProc)
ReleaseMouse();
QueueIdleUpdate();
return bProc;
}
bool SvxGraphCtrl::MouseButtonDown( const MouseEvent& rMEvt )
{
if ( mbSdrMode && ( rMEvt.GetClicks() < 2 ) )
{
OutputDevice& rDevice = GetDrawingArea()->get_ref_device();
const Point aLogPt( rDevice.PixelToLogic( rMEvt.GetPosPixel() ) );
if ( !tools::Rectangle( Point(), aGraphSize ).IsInside( aLogPt ) && !pView->IsEditMode() )
weld::CustomWidgetController::MouseButtonDown( rMEvt );
else
{
// Get Focus for key inputs
GrabFocus();
if ( nPolyEdit )
{
SdrViewEvent aVEvt;
SdrHitKind eHit = pView->PickAnything( rMEvt, SdrMouseEventKind::BUTTONDOWN, aVEvt );
if ( nPolyEdit == SID_BEZIER_INSERT && eHit == SdrHitKind::MarkedObject )
pView->BegInsObjPoint( aLogPt, rMEvt.IsMod1());
else
pView->MouseButtonDown( rMEvt, &rDevice );
}
else
pView->MouseButtonDown( rMEvt, &rDevice );
}
SdrObject* pCreateObj = pView->GetCreateObj();
// We want to realize the insert
if ( pCreateObj && !pCreateObj->GetUserCall() )
pCreateObj->SetUserCall( pUserCall.get() );
SetPointer( pView->GetPreferredPointer( aLogPt, &rDevice ) );
}
else
aGraphSize = OutputDevice::LogicToLogic( aGraphic.GetPrefSize(), aGraphic.GetPrefMapMode(), aMap100 );
weld::CustomWidgetController::MouseButtonDown( rMEvt );
Invalidate();
QueueIdleUpdate();
return false;
}
bool SvxGraphCtrl::MouseMove(const MouseEvent& rMEvt)
{
OutputDevice& rDevice = GetDrawingArea()->get_ref_device();
const Point aLogPos( rDevice.PixelToLogic( rMEvt.GetPosPixel() ) );
if ( mbSdrMode )
{
pView->MouseMove( rMEvt, &rDevice );
if( ( SID_BEZIER_INSERT == nPolyEdit ) &&
!pView->PickHandle( aLogPos ) &&
!pView->IsInsObjPoint() )
{
SetPointer( PointerStyle::Cross );
}
else
SetPointer( pView->GetPreferredPointer( aLogPos, &rDevice ) );
}
else
weld::CustomWidgetController::MouseButtonUp( rMEvt );
if ( aMousePosLink.IsSet() )
{
if ( tools::Rectangle( Point(), aGraphSize ).IsInside( aLogPos ) )
aMousePos = aLogPos;
else
aMousePos = Point();
aMousePosLink.Call( this );
}
QueueIdleUpdate();
return false;
}
bool SvxGraphCtrl::MouseButtonUp(const MouseEvent& rMEvt)
{
if ( mbSdrMode )
{
OutputDevice& rDevice = GetDrawingArea()->get_ref_device();
if ( pView->IsInsObjPoint() )
pView->EndInsObjPoint( SdrCreateCmd::ForceEnd );
else
pView->MouseButtonUp( rMEvt, &rDevice );
ReleaseMouse();
SetPointer( pView->GetPreferredPointer( rDevice.PixelToLogic( rMEvt.GetPosPixel() ), &rDevice ) );
}
else
weld::CustomWidgetController::MouseButtonUp( rMEvt );
QueueIdleUpdate();
return false;
}
SdrObject* SvxGraphCtrl::GetSelectedSdrObject() const
{
SdrObject* pSdrObj = nullptr;
if ( mbSdrMode )
{
const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
if ( rMarkList.GetMarkCount() == 1 )
pSdrObj = rMarkList.GetMark( 0 )->GetMarkedSdrObj();
}
return pSdrObj;
}
void SvxGraphCtrl::SetEditMode( const bool _bEditMode )
{
if ( mbSdrMode )
{
bEditMode = _bEditMode;
pView->SetEditMode( bEditMode );
eObjKind = OBJ_NONE;
pView->SetCurrentObj( sal::static_int_cast< sal_uInt16 >( eObjKind ) );
}
else
bEditMode = false;
QueueIdleUpdate();
}
void SvxGraphCtrl::SetPolyEditMode( const sal_uInt16 _nPolyEdit )
{
if ( mbSdrMode && ( _nPolyEdit != nPolyEdit ) )
{
nPolyEdit = _nPolyEdit;
pView->SetFrameDragSingles( nPolyEdit == 0 );
}
else
nPolyEdit = 0;
QueueIdleUpdate();
}
void SvxGraphCtrl::SetObjKind( const SdrObjKind _eObjKind )
{
if ( mbSdrMode )
{
bEditMode = false;
pView->SetEditMode( bEditMode );
eObjKind = _eObjKind;
pView->SetCurrentObj( sal::static_int_cast< sal_uInt16 >( eObjKind ) );
}
else
eObjKind = OBJ_NONE;
QueueIdleUpdate();
}
IMPL_LINK_NOARG(SvxGraphCtrl, UpdateHdl, Timer *, void)
{
mbInIdleUpdate = true;
aUpdateLink.Call( this );
mbInIdleUpdate = false;
}
void SvxGraphCtrl::QueueIdleUpdate()
{
if (!mbInIdleUpdate)
aUpdateIdle.Start();
}
namespace
{
class WeldOverlayManager final : public sdr::overlay::OverlayManager
{
weld::CustomWidgetController& m_rGraphCtrl;
public:
WeldOverlayManager(weld::CustomWidgetController& rGraphCtrl, OutputDevice& rDevice)
: OverlayManager(rDevice)
, m_rGraphCtrl(rGraphCtrl)
{
}
// invalidate the given range at local OutputDevice
virtual void invalidateRange(const basegfx::B2DRange& rRange) override
{
tools::Rectangle aInvalidateRectangle(RangeToInvalidateRectangle(rRange));
m_rGraphCtrl.Invalidate(aInvalidateRectangle);
}
};
}
rtl::Reference<sdr::overlay::OverlayManager> SvxGraphCtrlView::CreateOverlayManager(OutputDevice& rDevice) const
{
assert(&rDevice == &rGraphCtrl.GetDrawingArea()->get_ref_device());
if (rDevice.GetOutDevType() == OUTDEV_VIRDEV)
{
rtl::Reference<sdr::overlay::OverlayManager> xOverlayManager(new WeldOverlayManager(rGraphCtrl, rDevice));
InitOverlayManager(xOverlayManager);
return xOverlayManager;
}
return SdrView::CreateOverlayManager(rDevice);
}
void SvxGraphCtrlView::InvalidateWindow(const tools::Rectangle& rArea, OutputDevice& rDevice) const
{
assert(&rDevice == &rGraphCtrl.GetDrawingArea()->get_ref_device());
if (rDevice.GetOutDevType() == OUTDEV_VIRDEV)
{
rGraphCtrl.Invalidate(rArea);
return;
}
SdrView::InvalidateWindow(rArea, rDevice);
}
Point SvxGraphCtrl::GetPositionInDialog() const
{
int x, y, width, height;
if (GetDrawingArea()->get_extents_relative_to(*mpDialog, x, y, width, height))
return Point(x, y);
return Point();
}
css::uno::Reference< css::accessibility::XAccessible > SvxGraphCtrl::CreateAccessible()
{
if(mpAccContext == nullptr )
{
// Disable accessibility if no model/view data available
if (pView && pModel)
mpAccContext = new SvxGraphCtrlAccessibleContext(*this);
}
return mpAccContext.get();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/dialog/imapdlg.cxx b/svx/source/dialog/imapdlg.cxx
index 82aa9ac..b1dcd35 100644
--- a/svx/source/dialog/imapdlg.cxx
+++ b/svx/source/dialog/imapdlg.cxx
@@ -62,7 +62,7 @@
#define IMAP_CERN_TYPE "*.map"
#define IMAP_NCSA_TYPE "*.map"
SFX_IMPL_MODELESSDIALOG_WITHID( SvxIMapDlgChildWindow, SID_IMAP );
SFX_IMPL_MODELESSDIALOGCONTOLLER_WITHID( SvxIMapDlgChildWindow, SID_IMAP );
// ControllerItem
@@ -87,17 +87,13 @@ void SvxIMapDlgItem::StateChanged( sal_uInt16 nSID, SfxItemState /*eState*/,
}
}
SvxIMapDlgChildWindow::SvxIMapDlgChildWindow( vcl::Window* _pParent, sal_uInt16 nId,
SfxBindings* pBindings,
SfxChildWinInfo const * pInfo ) :
SfxChildWindow( _pParent, nId )
SvxIMapDlgChildWindow::SvxIMapDlgChildWindow(vcl::Window* _pParent, sal_uInt16 nId,
SfxBindings* pBindings,
SfxChildWinInfo const * pInfo)
: SfxChildWindow( _pParent, nId )
{
SetWindow(VclPtr<SvxIMapDlg>::Create( pBindings, this, _pParent ));
SvxIMapDlg* pDlg = static_cast<SvxIMapDlg*>(GetWindow());
if ( pInfo->nFlags & SfxChildWindowFlags::ZOOMIN )
pDlg->RollUp();
SetController(std::make_shared<SvxIMapDlg>(pBindings, this, _pParent->GetFrameWeld()));
SvxIMapDlg* pDlg = static_cast<SvxIMapDlg*>(GetController().get());
pDlg->Initialize( pInfo );
}
@@ -111,136 +107,94 @@ void SvxIMapDlgChildWindow::UpdateIMapDlg( const Graphic& rGraphic, const ImageM
VCL_BUILDER_FACTORY(StatusBar)
SvxIMapDlg::SvxIMapDlg(SfxBindings *_pBindings, SfxChildWindow *pCW, vcl::Window* _pParent)
: SfxModelessDialog(_pBindings, pCW, _pParent, "ImapDialog", "svx/ui/imapdialog.ui")
SvxIMapDlg::SvxIMapDlg(SfxBindings *_pBindings, SfxChildWindow *pCW, weld::Window* _pParent)
: SfxModelessDialogController(_pBindings, pCW, _pParent, "svx/ui/imapdialog.ui", "ImapDialog")
, pCheckObj(nullptr)
, aIMapItem(*this, *_pBindings)
, m_xIMapWnd(new IMapWindow(_pBindings->GetActiveFrame(), m_xDialog.get()))
, m_xTbxIMapDlg1(m_xBuilder->weld_toolbar("toolbar"))
, m_xFtURL(m_xBuilder->weld_label("urlft"))
, m_xURLBox(new URLBox(m_xBuilder->weld_combo_box("url")))
, m_xFtText(m_xBuilder->weld_label("textft"))
, m_xEdtText(m_xBuilder->weld_entry("text"))
, m_xFtTarget(m_xBuilder->weld_label("targetft"))
, m_xCbbTarget(m_xBuilder->weld_combo_box("target"))
, m_xCancelBtn(m_xBuilder->weld_button("cancel"))
, m_xStbStatus1(m_xBuilder->weld_label("statusurl"))
, m_xStbStatus2(m_xBuilder->weld_label("statuspos"))
, m_xStbStatus3(m_xBuilder->weld_label("statussize"))
, m_xIMapWndWeld(new weld::CustomWeld(*m_xBuilder, "container", *m_xIMapWnd))
{
get(m_pTbxIMapDlg1, "toolbar");
m_pTbxIMapDlg1->InsertSeparator(4, 5);
m_pTbxIMapDlg1->InsertSeparator(10, 5);
m_pTbxIMapDlg1->InsertSeparator(15, 5);
m_pTbxIMapDlg1->InsertSeparator(18, 5);
mnApplyId = m_pTbxIMapDlg1->GetItemId("TBI_APPLY");
mnOpenId = m_pTbxIMapDlg1->GetItemId("TBI_OPEN");
mnSaveAsId = m_pTbxIMapDlg1->GetItemId("TBI_SAVEAS");
mnCloseId = m_pTbxIMapDlg1->GetItemId("TBI_CLOSE");
mnSelectId = m_pTbxIMapDlg1->GetItemId("TBI_SELECT");
mnRectId = m_pTbxIMapDlg1->GetItemId("TBI_RECT");
mnCircleId = m_pTbxIMapDlg1->GetItemId("TBI_CIRCLE");
mnPolyId = m_pTbxIMapDlg1->GetItemId("TBI_POLY");
mnFreePolyId = m_pTbxIMapDlg1->GetItemId("TBI_FREEPOLY");
mnPolyEditId = m_pTbxIMapDlg1->GetItemId("TBI_POLYEDIT");
mnPolyMoveId = m_pTbxIMapDlg1->GetItemId("TBI_POLYMOVE");
mnPolyInsertId = m_pTbxIMapDlg1->GetItemId("TBI_POLYINSERT");
mnPolyDeleteId = m_pTbxIMapDlg1->GetItemId("TBI_POLYDELETE");
mnUndoId = m_pTbxIMapDlg1->GetItemId("TBI_UNDO");
mnRedoId = m_pTbxIMapDlg1->GetItemId("TBI_REDO");
mnActiveId = m_pTbxIMapDlg1->GetItemId("TBI_ACTIVE");
mnMacroId = m_pTbxIMapDlg1->GetItemId("TBI_MACRO");
mnPropertyId = m_pTbxIMapDlg1->GetItemId("TBI_PROPERTY");
get(m_pFtURL, "urlft");
get(m_pURLBox, "url");
get(m_pFtText, "textft");
get(m_pEdtText, "text");
get(m_pFtTarget, "targetft");
get(m_pCbbTarget, "target");
m_xTbxIMapDlg1->insert_separator(4, "sep1");
m_xTbxIMapDlg1->insert_separator(10, "sep2");
m_xTbxIMapDlg1->insert_separator(15, "sep3");
m_xTbxIMapDlg1->insert_separator(18, "sel4");
//lock this down so it doesn't jump around in size
//as entries are added later on
TargetList aTmpList;
SfxFrame::GetDefaultTargetList(aTmpList);
for (const OUString & s : aTmpList)
m_pCbbTarget->InsertEntry(s);
Size aPrefSize(m_pCbbTarget->get_preferred_size());
m_pCbbTarget->set_width_request(aPrefSize.Width());
m_pCbbTarget->Clear();
m_xCbbTarget->append_text(s);
Size aPrefSize(m_xCbbTarget->get_preferred_size());
m_xCbbTarget->set_size_request(aPrefSize.Width(), -1);
m_xCbbTarget->clear();
get(m_pStbStatus, "statusbar");
VclVBox* _pContainer = get<VclVBox>("container");
pIMapWnd = VclPtr<IMapWindow>::Create( _pContainer, WB_BORDER, _pBindings->GetActiveFrame() );
pIMapWnd->set_hexpand(true);
pIMapWnd->set_vexpand(true);
pIMapWnd->Show();
m_xIMapWnd->Show();
pOwnData.reset(new IMapOwnData);
pIMapWnd->SetInfoLink( LINK( this, SvxIMapDlg, InfoHdl ) );
pIMapWnd->SetMousePosLink( LINK( this, SvxIMapDlg, MousePosHdl ) );
pIMapWnd->SetGraphSizeLink( LINK( this, SvxIMapDlg, GraphSizeHdl ) );
pIMapWnd->SetUpdateLink( LINK( this, SvxIMapDlg, StateHdl ) );
m_xIMapWnd->SetInfoLink( LINK( this, SvxIMapDlg, InfoHdl ) );
m_xIMapWnd->SetMousePosLink( LINK( this, SvxIMapDlg, MousePosHdl ) );
m_xIMapWnd->SetGraphSizeLink( LINK( this, SvxIMapDlg, GraphSizeHdl ) );
m_xIMapWnd->SetUpdateLink( LINK( this, SvxIMapDlg, StateHdl ) );
m_pURLBox->SetModifyHdl( LINK( this, SvxIMapDlg, URLModifyHdl ) );
m_pURLBox->SetSelectHdl( LINK( this, SvxIMapDlg, URLModifyComboBoxHdl ) );
m_pURLBox->SetLoseFocusHdl( LINK( this, SvxIMapDlg, URLLoseFocusHdl ) );
m_pEdtText->SetModifyHdl( LINK( this, SvxIMapDlg, URLModifyHdl ) );
m_pCbbTarget->SetLoseFocusHdl( LINK( this, SvxIMapDlg, URLLoseFocusHdl ) );
m_xURLBox->connect_changed( LINK( this, SvxIMapDlg, URLModifyHdl ) );
m_xURLBox->connect_focus_out( LINK( this, SvxIMapDlg, URLLoseFocusHdl ) );
m_xEdtText->connect_changed( LINK( this, SvxIMapDlg, EntryModifyHdl ) );
m_xCbbTarget->connect_focus_out( LINK( this, SvxIMapDlg, URLLoseFocusHdl ) );
SvtMiscOptions aMiscOptions;
aMiscOptions.AddListenerLink( LINK( this, SvxIMapDlg, MiscHdl ) );
m_xTbxIMapDlg1->connect_clicked( LINK( this, SvxIMapDlg, TbxClickHdl ) );
OString sSelect("TBI_SELECT");
m_xTbxIMapDlg1->set_item_active(sSelect, true);
TbxClickHdl(sSelect);
m_pTbxIMapDlg1->SetSelectHdl( LINK( this, SvxIMapDlg, TbxClickHdl ) );
m_pTbxIMapDlg1->CheckItem( mnSelectId );
TbxClickHdl( m_pTbxIMapDlg1 );
m_xStbStatus1->set_size_request(120, -1);
const int nWidth = m_xStbStatus1->get_pixel_size(" 9999,99 cm / 9999,99 cm ").Width();
m_xStbStatus2->set_size_request(nWidth, -1);
m_xStbStatus3->set_size_request(nWidth, -1);
SetMinOutputSizePixel( GetOutputSizePixel() );
m_pStbStatus->InsertItem( 1, 130, StatusBarItemBits::Left | StatusBarItemBits::In | StatusBarItemBits::AutoSize );
m_pStbStatus->InsertItem( 2, 10 + GetTextWidth( " 9999,99 cm / 9999,99 cm " ) );
m_pStbStatus->InsertItem( 3, 10 + GetTextWidth( " 9999,99 cm x 9999,99 cm " ) );
m_pFtURL->Disable();
m_pURLBox->Disable();
m_pFtText->Disable();
m_pEdtText->Disable();
m_pFtTarget->Disable();
m_pCbbTarget->Disable();
m_xFtURL->set_sensitive(false);
m_xURLBox->set_sensitive(false);
m_xFtText->set_sensitive(false);
m_xEdtText->set_sensitive(false);
m_xFtTarget->set_sensitive(false);
m_xCbbTarget->set_sensitive(false);
pOwnData->bExecState = false;
pOwnData->aIdle.SetInvokeHandler( LINK( this, SvxIMapDlg, UpdateHdl ) );
m_pTbxIMapDlg1->EnableItem( mnActiveId, false );
m_pTbxIMapDlg1->EnableItem( mnMacroId, false );
m_pTbxIMapDlg1->EnableItem( mnPropertyId, false );
m_xTbxIMapDlg1->set_item_sensitive("TBI_ACTIVE", false);
m_xTbxIMapDlg1->set_item_sensitive("TBI_MACRO", false );
m_xTbxIMapDlg1->set_item_sensitive("TBI_PROPERTY", false );
m_xCancelBtn->connect_clicked(LINK(this, SvxIMapDlg, CancelHdl));
}
SvxIMapDlg::~SvxIMapDlg()
{
disposeOnce();
m_xIMapWnd->SetUpdateLink( Link<SvxGraphCtrl*,void>() );
m_xIMapWnd.reset();
}
void SvxIMapDlg::dispose()
{
pIMapWnd->SetUpdateLink( Link<GraphCtrl*,void>() );
SvtMiscOptions aMiscOptions;
aMiscOptions.RemoveListenerLink( LINK( this, SvxIMapDlg, MiscHdl ) );
// Delete URL-List
pIMapWnd.disposeAndClear();
pOwnData.reset();
m_pTbxIMapDlg1.clear();
m_pFtURL.clear();
m_pURLBox.clear();
m_pFtText.clear();
m_pEdtText.clear();
m_pFtTarget.clear();
m_pCbbTarget.clear();
m_pStbStatus.clear();
SfxModelessDialog::dispose();
aIMapItem.dispose();
}
bool SvxIMapDlg::Close()
IMPL_LINK_NOARG(SvxIMapDlg, CancelHdl, weld::Button&, void)
{
bool bRet = true;
if ( m_pTbxIMapDlg1->IsItemEnabled( mnApplyId ) )
if ( m_xTbxIMapDlg1->get_item_sensitive("TBI_APPLY") )
{
std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "svx/ui/querymodifyimagemapchangesdialog.ui"));
std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(m_xDialog.get(), "svx/ui/querymodifyimagemapchangesdialog.ui"));
std::unique_ptr<weld::MessageDialog> xQBox(xBuilder->weld_message_dialog("QueryModifyImageMapChangesDialog"));
const long nRet = xQBox->run();
@@ -254,9 +208,9 @@ bool SvxIMapDlg::Close()
else if( nRet == RET_CANCEL )
bRet = false;
}
else if( pIMapWnd->IsChanged() )
else if( m_xIMapWnd->IsChanged() )
{
std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "svx/ui/querysaveimagemapchangesdialog.ui"));
std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(m_xDialog.get(), "svx/ui/querysaveimagemapchangesdialog.ui"));
std::unique_ptr<weld::MessageDialog> xQBox(xBuilder->weld_message_dialog("QuerySaveImageMapChangesDialog"));
const long nRet = xQBox->run();
@@ -266,7 +220,8 @@ bool SvxIMapDlg::Close()
bRet = false;
}
return bRet && SfxModelessDialog::Close();
if (bRet)
m_xDialog->response(RET_CANCEL);
}
// Enabled or disable all Controls
@@ -278,19 +233,19 @@ void SvxIMapDlg::SetExecState( bool bEnable )
const ImageMap& SvxIMapDlg::GetImageMap() const
{
return pIMapWnd->GetImageMap();
return m_xIMapWnd->GetImageMap();
}
void SvxIMapDlg::SetTargetList( const TargetList& rTargetList )
{
TargetList aNewList( rTargetList );
pIMapWnd->SetTargetList( aNewList );
m_xIMapWnd->SetTargetList( aNewList );
m_pCbbTarget->Clear();
m_xCbbTarget->clear();
for (const OUString & s : aNewList)
m_pCbbTarget->InsertEntry( s );
m_xCbbTarget->append_text(s);
}
void SvxIMapDlg::UpdateLink( const Graphic& rGraphic, const ImageMap* pImageMap,
@@ -326,121 +281,87 @@ void SvxIMapDlg::UpdateLink( const Graphic& rGraphic, const ImageMap* pImageMap,
// Click-handler for ToolBox
IMPL_LINK( SvxIMapDlg, TbxClickHdl, ToolBox*, pTbx, void )
IMPL_LINK(SvxIMapDlg, TbxClickHdl, const OString&, rNewItemId, void)
{
sal_uInt16 nNewItemId = pTbx->GetCurItemId();
if(nNewItemId == mnApplyId)
if (rNewItemId == "TBI_APPLY")
{
URLLoseFocusHdl( *m_pURLBox );
URLLoseFocusHdl(*m_xCbbTarget);
SfxBoolItem aBoolItem( SID_IMAP_EXEC, true );
GetBindings().GetDispatcher()->ExecuteList(SID_IMAP_EXEC,
SfxCallMode::ASYNCHRON | SfxCallMode::RECORD,
{ &aBoolItem });
}
else if(nNewItemId == mnOpenId)
else if (rNewItemId == "TBI_OPEN")
DoOpen();
else if(nNewItemId == mnSaveAsId)
DoSave();
else if(nNewItemId == mnCloseId)
else if (rNewItemId == "TBI_SAVEAS")
DoSave();
else if (rNewItemId == "TBI_CLOSE")
CancelHdl(*m_xCancelBtn);
else if (rNewItemId == "TBI_SELECT")
{
SvxIMapDlg* pDlg = GetIMapDlg();
pDlg->Close();
SetActiveTool( rNewItemId );
m_xIMapWnd->SetEditMode( true );
}
else if(nNewItemId == mnSelectId)
else if (rNewItemId == "TBI_RECT")
{
SetActiveTool( nNewItemId );
pIMapWnd->SetEditMode( true );
if( pTbx->IsKeyEvent() )
{
if((pTbx->GetKeyModifier() & KEY_MOD1) != 0)
pIMapWnd->SelectFirstObject();
else
pIMapWnd->GrabFocus();
}
SetActiveTool( rNewItemId );
m_xIMapWnd->SetObjKind( OBJ_RECT );
}
else if(nNewItemId == mnRectId)
else if (rNewItemId == "TBI_CIRCLE")
{
SetActiveTool( nNewItemId );
pIMapWnd->SetObjKind( OBJ_RECT );
if( pTbx->IsKeyEvent() && ((pTbx->GetKeyModifier() & KEY_MOD1) != 0) )
{
pIMapWnd->CreateDefaultObject();
pIMapWnd->GrabFocus();
}
SetActiveTool( rNewItemId );
m_xIMapWnd->SetObjKind( OBJ_CIRC );
}
else if(nNewItemId == mnCircleId)
else if (rNewItemId == "TBI_POLY")
{
SetActiveTool( nNewItemId );
pIMapWnd->SetObjKind( OBJ_CIRC );
if( pTbx->IsKeyEvent() && ((pTbx->GetKeyModifier() & KEY_MOD1) != 0) )
{
pIMapWnd->CreateDefaultObject();
pIMapWnd->GrabFocus();
}
SetActiveTool( rNewItemId );
m_xIMapWnd->SetObjKind( OBJ_POLY );
}
else if(nNewItemId == mnPolyId)
else if (rNewItemId == "TBI_FREEPOLY")
{
SetActiveTool( nNewItemId );
pIMapWnd->SetObjKind( OBJ_POLY );
if( pTbx->IsKeyEvent() && ((pTbx->GetKeyModifier() & KEY_MOD1) != 0) )
{
pIMapWnd->CreateDefaultObject();
pIMapWnd->GrabFocus();
}
SetActiveTool( rNewItemId );
m_xIMapWnd->SetObjKind( OBJ_FREEFILL );
}
else if(nNewItemId == mnFreePolyId)
else if (rNewItemId == "TBI_ACTIVE")
{
SetActiveTool( nNewItemId );
pIMapWnd->SetObjKind( OBJ_FREEFILL );
if( pTbx->IsKeyEvent() && ((pTbx->GetKeyModifier() & KEY_MOD1) != 0) )
{
pIMapWnd->CreateDefaultObject();
pIMapWnd->GrabFocus();
}
URLLoseFocusHdl(*m_xCbbTarget);
bool bNewState = !m_xTbxIMapDlg1->get_item_active(rNewItemId);
m_xTbxIMapDlg1->set_item_active(rNewItemId, bNewState);
m_xIMapWnd->SetCurrentObjState( !bNewState );
}
else if(nNewItemId == mnActiveId)
else if (rNewItemId == "TBI_MACRO")
m_xIMapWnd->DoMacroAssign();
else if (rNewItemId == "TBI_PROPERTY")
m_xIMapWnd->DoPropertyDialog();
else if (rNewItemId == "TBI_POLYEDIT")
{
URLLoseFocusHdl( *m_pURLBox );
bool bNewState = !pTbx->IsItemChecked(mnActiveId);
pTbx->CheckItem(mnActiveId, bNewState);
pIMapWnd->SetCurrentObjState( !bNewState );
SetActiveTool( rNewItemId );
m_xIMapWnd->SetPolyEditMode( m_xTbxIMapDlg1->get_item_active(rNewItemId) ? SID_BEZIER_MOVE : 0 );
}
else if(nNewItemId == mnMacroId)
pIMapWnd->DoMacroAssign();
else if(nNewItemId == mnPropertyId)
pIMapWnd->DoPropertyDialog();
else if(nNewItemId == mnPolyEditId)
else if (rNewItemId == "TBI_POLYMOVE")
{
SetActiveTool( nNewItemId );
pIMapWnd->SetPolyEditMode( pTbx->IsItemChecked(mnPolyEditId) ? SID_BEZIER_MOVE : 0 );
if( pTbx->IsKeyEvent() && pTbx->IsItemChecked(mnPolyEditId) )
pIMapWnd->StartPolyEdit();
SetActiveTool( rNewItemId );
m_xIMapWnd->SetPolyEditMode( SID_BEZIER_MOVE );
}
else if(nNewItemId == mnPolyMoveId)
else if (rNewItemId == "TBI_POLYINSERT")
{
SetActiveTool( nNewItemId );
pIMapWnd->SetPolyEditMode( SID_BEZIER_MOVE );
SetActiveTool( rNewItemId );
m_xIMapWnd->SetPolyEditMode( SID_BEZIER_INSERT );
}
else if(nNewItemId == mnPolyInsertId)
else if (rNewItemId == "TBI_POLYDELETE")
{
SetActiveTool( nNewItemId );
pIMapWnd->SetPolyEditMode( SID_BEZIER_INSERT );
SetActiveTool( rNewItemId );
m_xIMapWnd->GetSdrView()->DeleteMarkedPoints();
}
else if(nNewItemId == mnPolyDeleteId)
else if (rNewItemId == "TBI_UNDO")
{
SetActiveTool( nNewItemId );
pIMapWnd->GetSdrView()->DeleteMarkedPoints();
URLLoseFocusHdl(*m_xCbbTarget);
m_xIMapWnd->GetSdrModel()->Undo();
}
else if(nNewItemId == mnUndoId)
else if (rNewItemId == "TBI_REDO")
{
URLLoseFocusHdl( *m_pURLBox );
pIMapWnd->GetSdrModel()->Undo();
}
else if(nNewItemId == mnRedoId)
{
URLLoseFocusHdl( *m_pURLBox );
pIMapWnd->GetSdrModel()->Redo();
URLLoseFocusHdl(*m_xCbbTarget);
m_xIMapWnd->GetSdrModel()->Redo();
}
}
@@ -448,7 +369,7 @@ void SvxIMapDlg::DoOpen()
{
::sfx2::FileDialogHelper aDlg(
css::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE,
FileDialogFlags::NONE, GetFrameWeld());
FileDialogFlags::NONE, m_xDialog.get());
ImageMap aLoadIMap;
const OUString aFilter(SvxResId(RID_SVXSTR_IMAP_ALL_FILTER));
@@ -473,14 +394,14 @@ void SvxIMapDlg::DoOpen()
if( pIStm->GetError() )
{
SfxErrorContext eEC(ERRCTX_ERROR, GetFrameWeld());
SfxErrorContext eEC(ERRCTX_ERROR, m_xDialog.get());
ErrorHandler::HandleError( ERRCODE_IO_GENERAL );
}
else
pIMapWnd->SetImageMap( aLoadIMap );
m_xIMapWnd->SetImageMap( aLoadIMap );
}
pIMapWnd->Invalidate();
m_xIMapWnd->Invalidate();
}
}
@@ -488,12 +409,12 @@ bool SvxIMapDlg::DoSave()
{
::sfx2::FileDialogHelper aDlg(
css::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE,
FileDialogFlags::NONE, GetFrameWeld());
FileDialogFlags::NONE, m_xDialog.get());
const OUString aBinFilter( IMAP_BINARY_FILTER );
const OUString aCERNFilter( IMAP_CERN_FILTER );
const OUString aNCSAFilter( IMAP_NCSA_FILTER );
SdrModel* pModel = pIMapWnd->GetSdrModel();
SdrModel* pModel = m_xIMapWnd->GetSdrModel();
const bool bChanged = pModel->IsChanged();
bool bRet = false;
@@ -544,7 +465,7 @@ bool SvxIMapDlg::DoSave()
std::unique_ptr<SvStream> pOStm(::utl::UcbStreamHelper::CreateStream( aURL.GetMainURL( INetURLObject::DecodeMechanism::NONE ), StreamMode::WRITE | StreamMode::TRUNC ));
if( pOStm )
{
pIMapWnd->GetImageMap().Write( *pOStm, nFormat );
m_xIMapWnd->GetImageMap().Write( *pOStm, nFormat );
if( pOStm->GetError() )
ErrorHandler::HandleError( ERRCODE_IO_GENERAL );
@@ -559,30 +480,30 @@ bool SvxIMapDlg::DoSave()
return bRet;
}
void SvxIMapDlg::SetActiveTool( sal_uInt16 nId )
void SvxIMapDlg::SetActiveTool(const OString& rId)
{
m_pTbxIMapDlg1->CheckItem( mnSelectId, mnSelectId == nId );
m_pTbxIMapDlg1->CheckItem( mnRectId, mnRectId == nId );
m_pTbxIMapDlg1->CheckItem( mnCircleId, mnCircleId == nId );
m_pTbxIMapDlg1->CheckItem( mnPolyId, mnPolyId == nId );
m_pTbxIMapDlg1->CheckItem( mnFreePolyId, mnFreePolyId == nId );
m_xTbxIMapDlg1->set_item_active("TBI_SELECT", rId == "TBI_SELECT");
m_xTbxIMapDlg1->set_item_active("TBI_RECT", rId == "TBI_RECT");
m_xTbxIMapDlg1->set_item_active("TBI_CIRCLE", rId == "TBI_CIRCLE");
m_xTbxIMapDlg1->set_item_active("TBI_POLY", rId == "TBI_POLY");
m_xTbxIMapDlg1->set_item_active("TBI_FREEPOLY", rId == "TBI_FREEPOLY");
m_pTbxIMapDlg1->CheckItem( mnPolyInsertId, mnPolyInsertId == nId );
m_pTbxIMapDlg1->CheckItem( mnPolyDeleteId, false );
m_xTbxIMapDlg1->set_item_active("TBI_POLYINSERT", rId == "TBI_POLYINSERT");
m_xTbxIMapDlg1->set_item_active("TBI_POLYDELETE", false);
bool bMove = mnPolyMoveId == nId
|| ( mnPolyEditId == nId
&& !m_pTbxIMapDlg1->IsItemChecked(mnPolyInsertId)
&& !m_pTbxIMapDlg1->IsItemChecked(mnPolyDeleteId) );
bool bMove = rId == "TBI_POLYMOVE"
|| ( rId == "TBI_POLYEDIT"
&& !m_xTbxIMapDlg1->get_item_active("TBI_POLYINSERT")
&& !m_xTbxIMapDlg1->get_item_active("TBI_POLYDELETE") );
m_pTbxIMapDlg1->CheckItem( mnPolyMoveId, bMove );
m_xTbxIMapDlg1->set_item_active("TBI_POLYMOVE", bMove );
bool bEditMode = ( mnPolyEditId == nId )
|| ( mnPolyMoveId == nId )
|| ( mnPolyInsertId == nId )
|| ( mnPolyDeleteId == nId );
bool bEditMode = ( rId == "TBI_POLYEDIT" )
|| ( rId == "TBI_POLYMOVE")
|| ( rId == "TBI_POLYINSERT")
|| ( rId == "TBI_POLYDELETE" );
m_pTbxIMapDlg1->CheckItem( mnPolyEditId, bEditMode );
m_xTbxIMapDlg1->set_item_active("TBI_POLYEDIT", bEditMode);
}
IMPL_LINK( SvxIMapDlg, InfoHdl, IMapWindow&, rWnd, void )
@@ -591,66 +512,66 @@ IMPL_LINK( SvxIMapDlg, InfoHdl, IMapWindow&, rWnd, void )
if ( rInfo.bNewObj )
{
if( !rInfo.aMarkURL.isEmpty() && ( m_pURLBox->GetEntryPos( rInfo.aMarkURL ) == LISTBOX_ENTRY_NOTFOUND ) )
m_pURLBox->InsertEntry( rInfo.aMarkURL );
if (!rInfo.aMarkURL.isEmpty() && ( m_xURLBox->find_text(rInfo.aMarkURL) == -1))
m_xURLBox->append_text(rInfo.aMarkURL);
m_pURLBox->SetText( rInfo.aMarkURL );
m_pEdtText->SetText( rInfo.aMarkAltText );
m_xURLBox->set_entry_text(rInfo.aMarkURL);
m_xEdtText->set_text(rInfo.aMarkAltText);
if ( rInfo.aMarkTarget.isEmpty() )
m_pCbbTarget->SetText( SELF_TARGET );
m_xCbbTarget->set_entry_text( SELF_TARGET );
else
m_pCbbTarget->SetText( rInfo.aMarkTarget );
m_xCbbTarget->set_entry_text( rInfo.aMarkTarget );
}
if ( !rInfo.bOneMarked )
{
m_pTbxIMapDlg1->CheckItem( mnActiveId, false );
m_pTbxIMapDlg1->EnableItem( mnActiveId, false );
m_pTbxIMapDlg1->EnableItem( mnMacroId, false );
m_pTbxIMapDlg1->EnableItem( mnPropertyId, false );
m_pStbStatus->SetItemText( 1, OUString() );
m_xTbxIMapDlg1->set_item_active("TBI_ACTIVE", false);
m_xTbxIMapDlg1->set_item_sensitive("TBI_ACTIVE", false);
m_xTbxIMapDlg1->set_item_sensitive("TBI_MACRO", false);
m_xTbxIMapDlg1->set_item_sensitive("TBI_PROPERTY", false);
m_xStbStatus1->set_label(OUString());
m_pFtURL->Disable();
m_pURLBox->Disable();
m_pFtText->Disable();
m_pEdtText->Disable();
m_pFtTarget->Disable();
m_pCbbTarget->Disable();
m_xFtURL->set_sensitive(false);
m_xURLBox->set_sensitive(false);
m_xFtText->set_sensitive(false);
m_xEdtText->set_sensitive(false);
m_xFtTarget->set_sensitive(false);
m_xCbbTarget->set_sensitive(false);
m_pURLBox->SetText( "" );
m_pEdtText->SetText( "" );
m_xURLBox->set_entry_text( "" );
m_xEdtText->set_text( "" );
}
else
{
m_pTbxIMapDlg1->EnableItem( mnActiveId );
m_pTbxIMapDlg1->CheckItem( mnActiveId, !rInfo.bActivated );
m_pTbxIMapDlg1->EnableItem( mnMacroId );
m_pTbxIMapDlg1->EnableItem( mnPropertyId );
m_xTbxIMapDlg1->set_item_sensitive("TBI_ACTIVE", true);
m_xTbxIMapDlg1->set_item_active("TBI_ACTIVE", !rInfo.bActivated );
m_xTbxIMapDlg1->set_item_sensitive("TBI_MACRO", true);
m_xTbxIMapDlg1->set_item_sensitive("TBI_PROPERTY", true);
m_pFtURL->Enable();
m_pURLBox->Enable();
m_pFtText->Enable();
m_pEdtText->Enable();
m_pFtTarget->Enable();
m_pCbbTarget->Enable();
m_xFtURL->set_sensitive(true);
m_xURLBox->set_sensitive(true);
m_xFtText->set_sensitive(true);
m_xEdtText->set_sensitive(true);
m_xFtTarget->set_sensitive(true);
m_xCbbTarget->set_sensitive(true);
m_pStbStatus->SetItemText( 1, rInfo.aMarkURL );
m_xStbStatus1->set_label(rInfo.aMarkURL);
if ( m_pURLBox->GetText() != rInfo.aMarkURL )
m_pURLBox->SetText( rInfo.aMarkURL );
if ( m_xURLBox->get_active_text() != rInfo.aMarkURL )
m_xURLBox->set_entry_text( rInfo.aMarkURL );
if ( m_pEdtText->GetText() != rInfo.aMarkAltText )
m_pEdtText->SetText( rInfo.aMarkAltText );
if ( m_xEdtText->get_text() != rInfo.aMarkAltText )
m_xEdtText->set_text( rInfo.aMarkAltText );
if ( rInfo.aMarkTarget.isEmpty() )
m_pCbbTarget->SetText( SELF_TARGET );
m_xCbbTarget->set_entry_text( SELF_TARGET );
else
m_pCbbTarget->SetText( rInfo.aMarkTarget );
m_xCbbTarget->set_entry_text( rInfo.aMarkTarget );
}
}
IMPL_LINK( SvxIMapDlg, MousePosHdl, GraphCtrl*, pWnd, void )
IMPL_LINK( SvxIMapDlg, MousePosHdl, SvxGraphCtrl*, pWnd, void )
{
const FieldUnit eFieldUnit = GetBindings().GetDispatcher()->GetModule()->GetFieldUnit();
const Point& rMousePos = pWnd->GetMousePos();
@@ -660,10 +581,10 @@ IMPL_LINK( SvxIMapDlg, MousePosHdl, GraphCtrl*, pWnd, void )
OUString aStr = GetUnitString( rMousePos.X(), eFieldUnit, cSep ) +
" / " + GetUnitString( rMousePos.Y(), eFieldUnit, cSep );
m_pStbStatus->SetItemText( 2, aStr );
m_xStbStatus2->set_label(aStr);
}
IMPL_LINK( SvxIMapDlg, GraphSizeHdl, GraphCtrl*, pWnd, void )
IMPL_LINK( SvxIMapDlg, GraphSizeHdl, SvxGraphCtrl*, pWnd, void )
{
const FieldUnit eFieldUnit = GetBindings().GetDispatcher()->GetModule()->GetFieldUnit();
const Size& rSize = pWnd->GetGraphicSize();
@@ -673,30 +594,35 @@ IMPL_LINK( SvxIMapDlg, GraphSizeHdl, GraphCtrl*, pWnd, void )
OUString aStr = GetUnitString( rSize.Width(), eFieldUnit, cSep ) +
" x " + GetUnitString( rSize.Height(), eFieldUnit, cSep );
m_pStbStatus->SetItemText( 3, aStr );
m_xStbStatus3->set_label(aStr);
}
IMPL_LINK_NOARG(SvxIMapDlg, URLModifyComboBoxHdl, ComboBox&, void)
{
URLModifyHdl(*m_pURLBox);
}
IMPL_LINK_NOARG(SvxIMapDlg, URLModifyHdl, Edit&, void)
void SvxIMapDlg::URLModify()
{
NotifyInfo aNewInfo;
aNewInfo.aMarkURL = m_pURLBox->GetText();
aNewInfo.aMarkAltText = m_pEdtText->GetText();
aNewInfo.aMarkTarget = m_pCbbTarget->GetText();
aNewInfo.aMarkURL = m_xURLBox->get_active_text();
aNewInfo.aMarkAltText = m_xEdtText->get_text();
aNewInfo.aMarkTarget = m_xCbbTarget->get_active_text();
pIMapWnd->ReplaceActualIMapInfo( aNewInfo );
m_xIMapWnd->ReplaceActualIMapInfo( aNewInfo );
}
IMPL_LINK_NOARG(SvxIMapDlg, URLLoseFocusHdl, Control&, void)
IMPL_LINK_NOARG(SvxIMapDlg, URLModifyHdl, weld::ComboBox&, void)
{
URLModify();
}
IMPL_LINK_NOARG(SvxIMapDlg, EntryModifyHdl, weld::Entry&, void)
{
URLModify();
}
IMPL_LINK_NOARG(SvxIMapDlg, URLLoseFocusHdl, weld::Widget&, void)
{
NotifyInfo aNewInfo;
const OUString aURLText( m_pURLBox->GetText() );
const OUString aTargetText( m_pCbbTarget->GetText() );
const OUString aURLText( m_xURLBox->get_active_text() );
const OUString aTargetText( m_xCbbTarget->get_active_text() );
if ( !aURLText.isEmpty() )
{
@@ -708,14 +634,14 @@ IMPL_LINK_NOARG(SvxIMapDlg, URLLoseFocusHdl, Control&, void)
else
aNewInfo.aMarkURL = aURLText;
aNewInfo.aMarkAltText = m_pEdtText->GetText();
aNewInfo.aMarkAltText = m_xEdtText->get_text();
if ( aTargetText.isEmpty() )
aNewInfo.aMarkTarget = SELF_TARGET;
else
aNewInfo.aMarkTarget = aTargetText;
pIMapWnd->ReplaceActualIMapInfo( aNewInfo );
m_xIMapWnd->ReplaceActualIMapInfo( aNewInfo );
}
IMPL_LINK_NOARG(SvxIMapDlg, UpdateHdl, Timer *, void)
@@ -724,9 +650,9 @@ IMPL_LINK_NOARG(SvxIMapDlg, UpdateHdl, Timer *, void)
if ( pOwnData->pUpdateEditingObject != pCheckObj )
{
if (pIMapWnd->IsChanged())
if (m_xIMapWnd->IsChanged())
{
std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "svx/ui/querysaveimagemapchangesdialog.ui"));
std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(m_xDialog.get(), "svx/ui/querysaveimagemapchangesdialog.ui"));
std::unique_ptr<weld::MessageDialog> xQBox(xBuilder->weld_message_dialog("QuerySaveImageMapChangesDialog"));
if (xQBox->run() == RET_YES)
{
@@ -734,82 +660,73 @@ IMPL_LINK_NOARG(SvxIMapDlg, UpdateHdl, Timer *, void)
}
}
pIMapWnd->SetGraphic( pOwnData->aUpdateGraphic );
pIMapWnd->SetImageMap( pOwnData->aUpdateImageMap );
m_xIMapWnd->SetGraphic( pOwnData->aUpdateGraphic );
m_xIMapWnd->SetImageMap( pOwnData->aUpdateImageMap );
SetTargetList( pOwnData->aUpdateTargetList );
pCheckObj = pOwnData->pUpdateEditingObject;
// After changes => default selection
m_pTbxIMapDlg1->CheckItem( mnSelectId );
pIMapWnd->SetEditMode( true );
m_xTbxIMapDlg1->set_item_active("TBI_SELECT", true);
m_xIMapWnd->SetEditMode( true );
}
// Delete the copied list again in the Update method
pOwnData->aUpdateTargetList.clear();
GetBindings().Invalidate( SID_IMAP_EXEC );
pIMapWnd->QueueIdleUpdate();
m_xIMapWnd->QueueIdleUpdate();
}
IMPL_LINK( SvxIMapDlg, StateHdl, GraphCtrl*, pWnd, void )
IMPL_LINK( SvxIMapDlg, StateHdl, SvxGraphCtrl*, pWnd, void )
{
const SdrObject* pObj = pWnd->GetSelectedSdrObject();
const SdrModel* pModel = pWnd->GetSdrModel();
const SdrView* pView = pWnd->GetSdrView();
const bool bPolyEdit = ( pObj != nullptr ) && dynamic_cast<const SdrPathObj*>( pObj) != nullptr;
const bool bDrawEnabled = !( bPolyEdit && m_pTbxIMapDlg1->IsItemChecked( mnPolyEditId ) );
const bool bDrawEnabled = !( bPolyEdit && m_xTbxIMapDlg1->get_item_active("TBI_POLYEDIT") );
m_pTbxIMapDlg1->EnableItem( mnApplyId, pOwnData->bExecState && pWnd->IsChanged() );
m_xTbxIMapDlg1->set_item_sensitive("TBI_APPLY", pOwnData->bExecState && pWnd->IsChanged() );
m_pTbxIMapDlg1->EnableItem( mnSelectId, bDrawEnabled );
m_pTbxIMapDlg1->EnableItem( mnRectId, bDrawEnabled );
m_pTbxIMapDlg1->EnableItem( mnCircleId, bDrawEnabled );
m_pTbxIMapDlg1->EnableItem( mnPolyId, bDrawEnabled );
m_pTbxIMapDlg1->EnableItem( mnFreePolyId, bDrawEnabled );
m_xTbxIMapDlg1->set_item_sensitive("TBI_SELECT", bDrawEnabled);
m_xTbxIMapDlg1->set_item_sensitive("TBI_RECT", bDrawEnabled);
m_xTbxIMapDlg1->set_item_sensitive("TBI_CIRCLE", bDrawEnabled);
m_xTbxIMapDlg1->set_item_sensitive("TBI_POLY", bDrawEnabled);
m_xTbxIMapDlg1->set_item_sensitive("TBI_FREEPOLY", bDrawEnabled);
// BezierEditor State
m_pTbxIMapDlg1->EnableItem( mnPolyEditId, bPolyEdit );
m_pTbxIMapDlg1->EnableItem( mnPolyMoveId, !bDrawEnabled );
m_pTbxIMapDlg1->EnableItem( mnPolyInsertId, !bDrawEnabled );
m_pTbxIMapDlg1->EnableItem( mnPolyDeleteId, !bDrawEnabled && pView->IsDeleteMarkedPointsPossible() );
m_xTbxIMapDlg1->set_item_sensitive( "TBI_POLYEDIT", bPolyEdit );
m_xTbxIMapDlg1->set_item_sensitive( "TBI_POLYMOVE", !bDrawEnabled );
m_xTbxIMapDlg1->set_item_sensitive( "TBI_POLYINSERT", !bDrawEnabled );
m_xTbxIMapDlg1->set_item_sensitive( "TBI_POLYDELETE", !bDrawEnabled && pView->IsDeleteMarkedPointsPossible() );
// Undo/Redo
m_pTbxIMapDlg1->EnableItem( mnUndoId, pModel->HasUndoActions() );
m_pTbxIMapDlg1->EnableItem( mnRedoId, pModel->HasRedoActions() );
m_xTbxIMapDlg1->set_item_sensitive( "TBI_UNDO", pModel->HasUndoActions() );
m_xTbxIMapDlg1->set_item_sensitive( "TBI_REDO", pModel->HasRedoActions() );
if ( bPolyEdit )
{
sal_uInt16 nId = 0;
OString sId;
switch( pWnd->GetPolyEditMode() )
{
case SID_BEZIER_MOVE: nId = mnPolyMoveId; break;
case SID_BEZIER_INSERT: nId = mnPolyInsertId; break;
case SID_BEZIER_MOVE: sId = "TBI_POLYMOVE"; break;
case SID_BEZIER_INSERT: sId = "TBI_POLYINSERT"; break;
default:
break;
}
m_pTbxIMapDlg1->CheckItem( nId );
m_xTbxIMapDlg1->set_item_active(sId, true);
}
else
{
m_pTbxIMapDlg1->CheckItem( mnPolyEditId, false );
m_pTbxIMapDlg1->CheckItem( mnPolyMoveId );
m_pTbxIMapDlg1->CheckItem( mnPolyInsertId, false );
m_xTbxIMapDlg1->set_item_active( "TBI_POLYEDIT", false );
m_xTbxIMapDlg1->set_item_active( "TBI_POLYMOVE", true);
m_xTbxIMapDlg1->set_item_active( "TBI_POLYINSERT", false );
pWnd->SetPolyEditMode( 0 );
}
pIMapWnd->QueueIdleUpdate();
}
IMPL_LINK_NOARG(SvxIMapDlg, MiscHdl, LinkParamNone*, void)
{
if (m_pTbxIMapDlg1)
{
SvtMiscOptions aMiscOptions;
m_pTbxIMapDlg1->SetOutStyle( aMiscOptions.GetToolboxStyle() );
}
m_xIMapWnd->QueueIdleUpdate();
}
SvxIMapDlg* GetIMapDlg()
@@ -817,7 +734,7 @@ SvxIMapDlg* GetIMapDlg()
SfxChildWindow* pWnd = nullptr;
if (SfxViewFrame::Current() && SfxViewFrame::Current()->HasChildWindow(SvxIMapDlgChildWindow::GetChildWindowId()))
pWnd = SfxViewFrame::Current()->GetChildWindow(SvxIMapDlgChildWindow::GetChildWindowId());
return pWnd ? static_cast<SvxIMapDlg*>(pWnd->GetWindow()) : nullptr;
return pWnd ? static_cast<SvxIMapDlg*>(pWnd->GetController().get()) : nullptr;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/dialog/imapwnd.cxx b/svx/source/dialog/imapwnd.cxx
index f1c19d2..2d0ab17 100644
--- a/svx/source/dialog/imapwnd.cxx
+++ b/svx/source/dialog/imapwnd.cxx
@@ -55,13 +55,10 @@ using ::com::sun::star::uno::Reference;
#define TRANSCOL COL_WHITE
IMapWindow::IMapWindow( vcl::Window* pParent, WinBits nBits, const Reference< XFrame >& rxDocumentFrame ) :
GraphCtrl( pParent, nBits ),
DropTargetHelper( this ),
mxDocumentFrame( rxDocumentFrame )
IMapWindow::IMapWindow(const Reference< XFrame >& rxDocumentFrame, weld::Dialog* pDialog)
: SvxGraphCtrl(pDialog)
, mxDocumentFrame(rxDocumentFrame)
{
SetSdrMode(true);
memset( maItemInfos, 0, sizeof( SfxItemInfo ) );
pIMapPool = new SfxItemPool( "IMapItemPool",
SID_ATTR_MACROITEM, SID_ATTR_MACROITEM, maItemInfos );
@@ -70,18 +67,19 @@ IMapWindow::IMapWindow( vcl::Window* pParent, WinBits nBits, const Reference< XF
IMapWindow::~IMapWindow()
{
disposeOnce();
}
void IMapWindow::dispose()
{
SfxItemPool::Free(pIMapPool);
GraphCtrl::dispose();
}
Size IMapWindow::GetOptimalSize() const
void IMapWindow::SetDrawingArea(weld::DrawingArea* pDrawingArea)
{
return LogicToPixel(Size(270, 170), MapMode(MapUnit::MapAppFont));
Size aSize(pDrawingArea->get_ref_device().LogicToPixel(Size(270, 170), MapMode(MapUnit::MapAppFont)));
pDrawingArea->set_size_request(aSize.Width(), aSize.Height());
SetOutputSizePixel(aSize);
weld::CustomWidgetController::SetDrawingArea(pDrawingArea);
SetSdrMode(true);
mxDropTargetHelper.reset(new IMapDropTargetHelper(*this));
}
void IMapWindow::SetImageMap( const ImageMap& rImageMap )
@@ -298,7 +296,7 @@ SdrObject* IMapWindow::CreateObj( const IMapObject* pIMapObj )
void IMapWindow::InitSdrModel()
{
GraphCtrl::InitSdrModel();
SvxGraphCtrl::InitSdrModel();
SfxItemSet aSet( pModel->GetItemPool() );
@@ -431,22 +429,25 @@ void IMapWindow::SdrObjChanged( const SdrObject& rObj )
}
}
void IMapWindow::MouseButtonUp(const MouseEvent& rMEvt)
bool IMapWindow::MouseButtonUp(const MouseEvent& rMEvt)
{
GraphCtrl::MouseButtonUp( rMEvt );
bool bRet = SvxGraphCtrl::MouseButtonUp( rMEvt );
UpdateInfo( true );
return bRet;
}
void IMapWindow::MarkListHasChanged()
{
GraphCtrl::MarkListHasChanged();
SvxGraphCtrl::MarkListHasChanged();
UpdateInfo( false );
}
SdrObject* IMapWindow::GetHitSdrObj( const Point& rPosPixel ) const
{
OutputDevice& rDevice = GetDrawingArea()->get_ref_device();
SdrObject* pObj = nullptr;
Point aPt = PixelToLogic( rPosPixel );
Point aPt = rDevice.PixelToLogic( rPosPixel );
if ( tools::Rectangle( Point(), GetGraphicSize() ).IsInside( aPt ) )
{
@@ -486,13 +487,13 @@ IMapObject* IMapWindow::GetIMapObj( const SdrObject* pSdrObj )
return pIMapObj;
}
void IMapWindow::Command(const CommandEvent& rCEvt)
bool IMapWindow::ContextMenu(const CommandEvent& rCEvt)
{
vcl::Region aRegion;
if ( rCEvt.GetCommand() == CommandEventId::ContextMenu )
{
std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "svx/ui/imapmenu.ui"));
std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetDrawingArea(), "svx/ui/imapmenu.ui"));
mxPopupMenu = xBuilder->weld_menu("menu");
const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
const size_t nMarked = rMarkList.GetMarkCount();
@@ -523,12 +524,30 @@ void IMapWindow::Command(const CommandEvent& rCEvt)
mxPopupMenu->set_sensitive("delete", true);
}
MenuSelectHdl(mxPopupMenu->popup_at_rect(GetFrameWeld(), tools::Rectangle(rCEvt.GetMousePosPixel(), Size(1,1))));
MenuSelectHdl(mxPopupMenu->popup_at_rect(GetDrawingArea(), tools::Rectangle(rCEvt.GetMousePosPixel(), Size(1,1))));
mxPopupMenu.reset();
return true;
}
else
Window::Command(rCEvt);
return CustomWidgetController::ContextMenu(rCEvt);
}
IMapDropTargetHelper::IMapDropTargetHelper(IMapWindow& rImapWindow)
: DropTargetHelper(rImapWindow.GetDrawingArea()->get_drop_target())
, m_rImapWindow(rImapWindow)
{
}
sal_Int8 IMapDropTargetHelper::AcceptDrop( const AcceptDropEvent& rEvt )
{
return m_rImapWindow.AcceptDrop(rEvt);
}
sal_Int8 IMapDropTargetHelper::ExecuteDrop( const ExecuteDropEvent& rEvt )
{
return m_rImapWindow.ExecuteDrop(rEvt);
}
sal_Int8 IMapWindow::AcceptDrop( const AcceptDropEvent& rEvt )
@@ -540,7 +559,7 @@ sal_Int8 IMapWindow::ExecuteDrop( const ExecuteDropEvent& rEvt )
{
sal_Int8 nRet = DND_ACTION_NONE;
if( IsDropFormatSupported( SotClipboardFormatId::NETSCAPE_BOOKMARK ) )
if (mxDropTargetHelper->IsDropFormatSupported(SotClipboardFormatId::NETSCAPE_BOOKMARK))
{
const OUString aString;
INetBookmark aBookMark( aString, aString );
@@ -563,34 +582,27 @@ sal_Int8 IMapWindow::ExecuteDrop( const ExecuteDropEvent& rEvt )
return nRet;
}
void IMapWindow::RequestHelp( const HelpEvent& rHEvt )
OUString IMapWindow::RequestHelp(tools::Rectangle& rHelpArea)
{
Point aPos = PixelToLogic( ScreenToOutputPixel( rHEvt.GetMousePosPixel() ) );
OutputDevice& rDevice = GetDrawingArea()->get_ref_device();
if ( Help::IsBalloonHelpEnabled() || Help::IsQuickHelpEnabled() )
Point aPos = rDevice.PixelToLogic(rHelpArea.TopLeft());
SdrPageView* pPageView = nullptr;
SdrObject* pSdrObj = pView->PickObj(aPos, pView->getHitTolLog(), pPageView);
if (pSdrObj)
{
SdrPageView* pPageView = nullptr;
SdrObject* pSdrObj = pView->PickObj(aPos, pView->getHitTolLog(), pPageView);
if (pSdrObj)
const IMapObject* pIMapObj = GetIMapObj( pSdrObj );
OUString aStr;
if ( pIMapObj && !( aStr = pIMapObj->GetURL() ).isEmpty() )
{
const IMapObject* pIMapObj = GetIMapObj( pSdrObj );
OUString aStr;
if ( pIMapObj && !( aStr = pIMapObj->GetURL() ).isEmpty() )
{
tools::Rectangle aLogicPix( LogicToPixel( tools::Rectangle( Point(), GetGraphicSize() ) ) );
tools::Rectangle aScreenRect( OutputToScreenPixel( aLogicPix.TopLeft() ),
OutputToScreenPixel( aLogicPix.BottomRight() ) );
if ( Help::IsBalloonHelpEnabled() )
Help::ShowBalloon( this, rHEvt.GetMousePosPixel(), aScreenRect, aStr );
else if ( Help::IsQuickHelpEnabled() )
Help::ShowQuickHelp( this, aScreenRect, aStr );
}
rHelpArea = rDevice.LogicToPixel(tools::Rectangle( Point(), GetGraphicSize()));
return aStr;
}
else
Window::RequestHelp( rHEvt );
}
return OUString();
}
void IMapWindow::SetCurrentObjState( bool bActive )
@@ -671,7 +683,7 @@ void IMapWindow::DoMacroAssign()
aSet.Put( aMacroItem );
SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
ScopedVclPtr<SfxAbstractDialog> pMacroDlg(pFact->CreateEventConfigDialog(GetFrameWeld(), aSet, mxDocumentFrame));
ScopedVclPtr<SfxAbstractDialog> pMacroDlg(pFact->CreateEventConfigDialog(GetDrawingArea(), aSet, mxDocumentFrame));
if ( pMacroDlg->Execute() == RET_OK )
{
@@ -690,7 +702,7 @@ void IMapWindow::DoPropertyDialog()
{
IMapObject* pIMapObj = GetIMapObj( pSdrObj );
SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
ScopedVclPtr<AbstractURLDlg> aDlg(pFact->CreateURLDialog(GetFrameWeld(), pIMapObj->GetURL(), pIMapObj->GetAltText(), pIMapObj->GetDesc(),
ScopedVclPtr<AbstractURLDlg> aDlg(pFact->CreateURLDialog(GetDrawingArea(), pIMapObj->GetURL(), pIMapObj->GetAltText(), pIMapObj->GetDesc(),
pIMapObj->GetTarget(), pIMapObj->GetName(), aTargetList));
if ( aDlg->Execute() == RET_OK )
{
diff --git a/svx/source/dialog/imapwnd.hxx b/svx/source/dialog/imapwnd.hxx
index 049eb88..8c18140 100644
--- a/svx/source/dialog/imapwnd.hxx
+++ b/svx/source/dialog/imapwnd.hxx
@@ -68,7 +68,20 @@ public:
void ReplaceObject( const IMapObjectPtr& pNewIMapObject ) { mpObj = pNewIMapObject; }
};
class IMapWindow final : public GraphCtrl, public DropTargetHelper
class IMapWindow;
class IMapDropTargetHelper final : public DropTargetHelper
{
IMapWindow& m_rImapWindow;
public:
IMapDropTargetHelper(IMapWindow& rImapWindow);
// DropTargetHelper
virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ) override;
virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt ) override;
};
class IMapWindow final : public SvxGraphCtrl
{
NotifyInfo aInfo;
ImageMap aIMap;
@@ -78,25 +91,21 @@ class IMapWindow final : public GraphCtrl, public DropTargetHelper
SfxItemInfo maItemInfos[1];
css::uno::Reference< css::frame::XFrame >
mxDocumentFrame;
std::unique_ptr<IMapDropTargetHelper> mxDropTargetHelper;
std::unique_ptr<weld::Menu> mxPopupMenu;
void MenuSelectHdl(const OString& rId);
// GraphCtrl
virtual void MouseButtonUp(const MouseEvent& rMEvt) override;
virtual Size GetOptimalSize() const override;
virtual void Command(const CommandEvent& rCEvt) override;
virtual void RequestHelp( const HelpEvent& rHEvt ) override;
// SvxGraphCtrl
virtual bool MouseButtonUp(const MouseEvent& rMEvt) override;
virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override;
virtual bool ContextMenu(const CommandEvent& rCEvt) override;
virtual OUString RequestHelp(tools::Rectangle& rHelpArea) override;
virtual void SdrObjCreated( const SdrObject& rObj ) override;
virtual void SdrObjChanged( const SdrObject& rObj ) override;
virtual void MarkListHasChanged() override;
virtual void InitSdrModel() override;
// DropTargetHelper
virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ) override;
virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt ) override;
void ReplaceImageMap( const ImageMap& rNewImageMap );
SdrObject* CreateObj( const IMapObject* pIMapObj );
@@ -107,9 +116,12 @@ class IMapWindow final : public GraphCtrl, public DropTargetHelper
public:
IMapWindow( vcl::Window* pParent, WinBits nBits, const css::uno::Reference< css::frame::XFrame >& rxDocumentFrame );
virtual ~IMapWindow() override;
virtual void dispose() override;
IMapWindow(const css::uno::Reference< css::frame::XFrame >& rxDocumentFrame,
weld::Dialog* pDialog);
virtual ~IMapWindow() override;
sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt );
sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt );
void ReplaceActualIMapInfo( const NotifyInfo& rNewInfo );
diff --git a/svx/source/form/fmview.cxx b/svx/source/form/fmview.cxx
index 256aa00..839be00 100644
--- a/svx/source/form/fmview.cxx
+++ b/svx/source/form/fmview.cxx
@@ -527,7 +527,7 @@ bool FmFormView::checkUnMarkAll(const Reference< XInterface >& _xSource)
}
bool FmFormView::MouseButtonDown( const MouseEvent& _rMEvt, vcl::Window* _pWin )
bool FmFormView::MouseButtonDown( const MouseEvent& _rMEvt, OutputDevice* _pWin )
{
bool bReturn = E3dView::MouseButtonDown( _rMEvt, _pWin );
diff --git a/svx/source/inc/GraphCtlAccessibleContext.hxx b/svx/source/inc/GraphCtlAccessibleContext.hxx
index 51814d1..ade9089 100644
--- a/svx/source/inc/GraphCtlAccessibleContext.hxx
+++ b/svx/source/inc/GraphCtlAccessibleContext.hxx
@@ -54,7 +54,7 @@ namespace com { namespace sun { namespace star { namespace awt {
} } } }
namespace tools { class Rectangle; }
class GraphCtrl;
class SvxGraphCtrl;
class SdrObject;
class SdrModel;
class SdrPage;
@@ -80,12 +80,10 @@ class SvxGraphCtrlAccessibleContext final :
public SfxListener, public ::accessibility::IAccessibleViewForwarder
{
public:
friend class GraphCtrl;
friend class SvxGraphCtrl;
// internal
SvxGraphCtrlAccessibleContext(
const css::uno::Reference< css::accessibility::XAccessible>& rxParent,
GraphCtrl& rRepresentation );
SvxGraphCtrlAccessibleContext(SvxGraphCtrl& rRepresentation);
void Notify( SfxBroadcaster& aBC, const SfxHint& aHint ) override;
@@ -158,22 +156,6 @@ private:
/// @throws css::lang::IndexOutOfBoundsException
void checkChildIndexOnSelection( long nIndexOfChild );
/** Return the object's current bounding box relative to the desktop,
i.e in absolute pixel coordinates.
@return
The returned rectangle is a bounding box of the object given in
absolute screen coordinates.
@throws DisposedException
When the object is already disposed then a
<type>DisposedException</type> is thrown.
*/
tools::Rectangle GetBoundingBoxOnScreen();
/// Return the object's current bounding box relative to the parent object.
///
/// @throws css::uno::RuntimeException
tools::Rectangle GetBoundingBox();
virtual void SAL_CALL disposing() final override;
/// @throws css::uno::RuntimeException
@@ -186,9 +168,6 @@ private:
::accessibility::AccessibleShapeTreeInfo maTreeInfo;
/// Reference to the parent object.
css::uno::Reference<css::accessibility::XAccessible> mxParent;
/** Description of this object. This is not a constant because it can
be set from the outside.
*/
@@ -202,7 +181,7 @@ private:
typedef ::std::map< const SdrObject*, rtl::Reference<::accessibility::AccessibleShape> > ShapesMapType;
ShapesMapType mxShapes;
VclPtr<GraphCtrl> mpControl;
SvxGraphCtrl* mpControl;
SdrModel* mpModel;
SdrPage* mpPage;
diff --git a/svx/source/svdraw/sdrpagewindow.cxx b/svx/source/svdraw/sdrpagewindow.cxx
index cae3610..126caea 100644
--- a/svx/source/svdraw/sdrpagewindow.cxx
+++ b/svx/source/svdraw/sdrpagewindow.cxx
@@ -432,7 +432,7 @@ void SdrPageWindow::InvalidatePageWindow(const basegfx::B2DRange& rRange)
const bool bWasMapModeEnabled(rWindow.IsMapModeEnabled());
rWindow.EnableMapMode(false);
SdrPaintView::InvalidateWindow(aVCLDiscreteRectangle, rWindow);
GetPageView().GetView().InvalidateWindow(aVCLDiscreteRectangle, rWindow);
rWindow.EnableMapMode(bWasMapModeEnabled);
}
else if (comphelper::LibreOfficeKit::isActive())
diff --git a/svx/source/svdraw/sdrpaintwindow.cxx b/svx/source/svdraw/sdrpaintwindow.cxx
index f160ff2..7adda28 100644
--- a/svx/source/svdraw/sdrpaintwindow.cxx
+++ b/svx/source/svdraw/sdrpaintwindow.cxx
@@ -225,7 +225,7 @@ rtl::Reference<sdr::overlay::OverlayManager> SdrPaintView::CreateOverlayManager(
return xOverlayManager;
}
void SdrPaintView::InvalidateWindow(const tools::Rectangle& rArea, OutputDevice& rDevice)
void SdrPaintView::InvalidateWindow(const tools::Rectangle& rArea, OutputDevice& rDevice) const
{
vcl::Window& rWindow(static_cast<vcl::Window&>(rDevice));
rWindow.Invalidate(rArea, InvalidateFlags::NoErase);
diff --git a/svx/source/svdraw/svdcrtv.cxx b/svx/source/svdraw/svdcrtv.cxx
index 235ad5b..14abc87 100644
--- a/svx/source/svdraw/svdcrtv.cxx
+++ b/svx/source/svdraw/svdcrtv.cxx
@@ -306,7 +306,7 @@ void SdrCreateView::HideConnectMarker()
ImpClearConnectMarker();
}
bool SdrCreateView::MouseMove(const MouseEvent& rMEvt, vcl::Window* pWin)
bool SdrCreateView::MouseMove(const MouseEvent& rMEvt, OutputDevice* pWin)
{
if(CheckEdgeMode() && pWin)
{
diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx
index c67ae8f..8935d27 100644
--- a/svx/source/svdraw/svdedxv.cxx
+++ b/svx/source/svdraw/svdedxv.cxx
@@ -1790,7 +1790,7 @@ bool SdrObjEditView::KeyInput(const KeyEvent& rKEvt, vcl::Window* pWin)
return SdrGlueEditView::KeyInput(rKEvt,pWin);
}
bool SdrObjEditView::MouseButtonDown(const MouseEvent& rMEvt, vcl::Window* pWin)
bool SdrObjEditView::MouseButtonDown(const MouseEvent& rMEvt, OutputDevice* pWin)
{
if (pTextEditOutlinerView!=nullptr) {
bool bPostIt=pTextEditOutliner->IsInSelectionMode();
@@ -1813,7 +1813,8 @@ bool SdrObjEditView::MouseButtonDown(const MouseEvent& rMEvt, vcl::Window* pWin)
MouseEvent aMEvt(aPixPos,rMEvt.GetClicks(),rMEvt.GetMode(),
rMEvt.GetButtons(),rMEvt.GetModifier());
if (pTextEditOutlinerView->MouseButtonDown(aMEvt)) {
if (pWin!=nullptr && pWin!=pTextEditWin) SetTextEditWin(pWin);
if (pWin!=nullptr && pWin!=pTextEditWin && pWin->GetOutDevType() == OUTDEV_WINDOW)
SetTextEditWin(static_cast<vcl::Window*>(pWin));
#ifdef DBG_UTIL
if (mpItemBrowser!=nullptr) mpItemBrowser->SetDirty();
#endif
@@ -1825,7 +1826,7 @@ bool SdrObjEditView::MouseButtonDown(const MouseEvent& rMEvt, vcl::Window* pWin)
return SdrGlueEditView::MouseButtonDown(rMEvt,pWin);
}
bool SdrObjEditView::MouseButtonUp(const MouseEvent& rMEvt, vcl::Window* pWin)
bool SdrObjEditView::MouseButtonUp(const MouseEvent& rMEvt, OutputDevice* pWin)
{
if (pTextEditOutlinerView!=nullptr) {
bool bPostIt=pTextEditOutliner->IsInSelectionMode();
@@ -1856,7 +1857,7 @@ bool SdrObjEditView::MouseButtonUp(const MouseEvent& rMEvt, vcl::Window* pWin)
return SdrGlueEditView::MouseButtonUp(rMEvt,pWin);
}
bool SdrObjEditView::MouseMove(const MouseEvent& rMEvt, vcl::Window* pWin)
bool SdrObjEditView::MouseMove(const MouseEvent& rMEvt, OutputDevice* pWin)
{
if (pTextEditOutlinerView!=nullptr) {
bool bSelMode=pTextEditOutliner->IsInSelectionMode();
diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx
index 5762ccb..fa4ea37 100644
--- a/svx/source/svdraw/svdmrkv.cxx
+++ b/svx/source/svdraw/svdmrkv.cxx
@@ -1184,7 +1184,7 @@ void SdrMarkView::AddDragModeHdl(SdrDragMode eMode)
}
/** handle mouse over effects for handles */
bool SdrMarkView::MouseMove(const MouseEvent& rMEvt, vcl::Window* pWin)
bool SdrMarkView::MouseMove(const MouseEvent& rMEvt, OutputDevice* pWin)
{
if(maHdlList.GetHdlCount())
{
diff --git a/svx/source/svdraw/svdview.cxx b/svx/source/svdraw/svdview.cxx
index 7c7f828..1966875 100644
--- a/svx/source/svdraw/svdview.cxx
+++ b/svx/source/svdraw/svdview.cxx
@@ -203,7 +203,7 @@ bool SdrView::KeyInput(const KeyEvent& rKEvt, vcl::Window* pWin)
return bRet;
}
bool SdrView::MouseButtonDown(const MouseEvent& rMEvt, vcl::Window* pWin)
bool SdrView::MouseButtonDown(const MouseEvent& rMEvt, OutputDevice* pWin)
{
SetActualWin(pWin);
if (rMEvt.IsLeft()) maDragStat.SetMouseDown(true);
@@ -216,7 +216,7 @@ bool SdrView::MouseButtonDown(const MouseEvent& rMEvt, vcl::Window* pWin)
return bRet;
}
bool SdrView::MouseButtonUp(const MouseEvent& rMEvt, vcl::Window* pWin)
bool SdrView::MouseButtonUp(const MouseEvent& rMEvt, OutputDevice* pWin)
{
SetActualWin(pWin);
if (rMEvt.IsLeft()) maDragStat.SetMouseDown(false);
@@ -230,7 +230,7 @@ bool SdrView::MouseButtonUp(const MouseEvent& rMEvt, vcl::Window* pWin)
return bRet;
}
bool SdrView::MouseMove(const MouseEvent& rMEvt, vcl::Window* pWin)
bool SdrView::MouseMove(const MouseEvent& rMEvt, OutputDevice* pWin)
{
SetActualWin(pWin);
maDragStat.SetMouseDown(rMEvt.IsLeft());
diff --git a/svx/uiconfig/ui/imapdialog.ui b/svx/uiconfig/ui/imapdialog.ui
index 380d40d4..d64c38b 100644
--- a/svx/uiconfig/ui/imapdialog.ui
+++ b/svx/uiconfig/ui/imapdialog.ui
@@ -1,395 +1,530 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.16.1 -->
<!-- Generated with glade 3.22.1 -->
<interface domain="svx">
<requires lib="gtk+" version="3.18"/>
<requires lib="LibreOffice" version="1.0"/>
<object class="GtkWindow" id="ImapDialog">
<object class="GtkDialog" id="ImapDialog">
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="border_width">6</property>
<property name="title" translatable="yes" context="imapdialog|ImapDialog">ImageMap Editor</property>
<property name="default_width">0</property>
<property name="default_height">0</property>
<property name="type_hint">dialog</property>
<child>
<object class="GtkBox" id="mainbox">
<placeholder/>
</child>
<child internal-child="vbox">
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkToolbar" id="toolbar">
<child internal-child="action_area">
<object class="GtkButtonBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="layout_style">end</property>
<child>
<object class="GtkToolButton" id="TBI_APPLY">
<object class="GtkStatusbar" id="statusbar">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="action_name">TBI_APPLY</property>
<property name="label" translatable="yes" context="imapdialog|TBI_APPLY">Apply</property>
<property name="icon_name">svx/res/id01.png</property>
<property name="valign">end</property>
<property name="hexpand">True</property>
<property name="spacing">12</property>
<child>
<object class="GtkLabel" id="statussize">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label">100%</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSeparator" id="separator4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="statuspos">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label">100%</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="pack_type">end</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkSeparator" id="separator5">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="statusurl">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label">100%</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="pack_type">end</property>
<property name="position">4</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_OPEN">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="action_name">TBI_OPEN</property>
<property name="label" translatable="yes" context="imapdialog|TBI_OPEN">Open...</property>
<property name="icon_name">svx/res/id02.png</property>
<object class="GtkButton" id="cancel">
<property name="label">gtk-cancel</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_SAVEAS">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="action_name">TBI_SAVEAS</property>
<property name="label" translatable="yes" context="imapdialog|TBI_SAVEAS">Save...</property>
<property name="icon_name">svx/res/id03.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_CLOSE">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="action_name">TBI_CLOSE</property>
<property name="label" translatable="yes" context="imapdialog|TBI_CLOSE">Close</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_SELECT">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="action_name">TBI_SELECT</property>
<property name="label" translatable="yes" context="imapdialog|TBI_SELECT">Select</property>
<property name="icon_name">svx/res/id04.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_RECT">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="action_name">TBI_RECT</property>
<property name="label" translatable="yes" context="imapdialog|TBI_RECT">Rectangle</property>
<property name="icon_name">svx/res/id05.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_CIRCLE">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="action_name">TBI_CIRCLE</property>
<property name="label" translatable="yes" context="imapdialog|TBI_CIRCLE">Ellipse</property>
<property name="icon_name">svx/res/id06.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_POLY">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="action_name">TBI_POLY</property>
<property name="label" translatable="yes" context="imapdialog|TBI_POLY">Polygon</property>
<property name="icon_name">svx/res/id07.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_FREEPOLY">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="action_name">TBI_FREEPOLY</property>
<property name="label" translatable="yes" context="imapdialog|TBI_FREEPOLY">Freeform Polygon</property>
<property name="icon_name">svx/res/id08.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_POLYEDIT">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="action_name">TBI_POLYEDIT</property>
<property name="label" translatable="yes" context="imapdialog|TBI_POLYEDIT">Edit Points</property>
<property name="icon_name">svx/res/id030.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_POLYMOVE">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="action_name">TBI_POLYMOVE</property>
<property name="label" translatable="yes" context="imapdialog|TBI_POLYMOVE">Move Points</property>
<property name="icon_name">svx/res/id031.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_POLYINSERT">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="action_name">TBI_POLYINSERT</property>
<property name="label" translatable="yes" context="imapdialog|TBI_POLYINSERT">Insert Points</property>
<property name="icon_name">svx/res/id032.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_POLYDELETE">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="action_name">TBI_POLYDELETE</property>
<property name="label" translatable="yes" context="imapdialog|TBI_POLYDELETE">Delete Points</property>
<property name="icon_name">svx/res/id033.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_UNDO">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="action_name">TBI_UNDO</property>
<property name="label" translatable="yes" context="imapdialog|TBI_UNDO">Undo </property>
<property name="icon_name">svx/res/id040.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_REDO">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="action_name">TBI_REDO</property>
<property name="label" translatable="yes" context="imapdialog|TBI_REDO">Redo</property>
<property name="icon_name">svx/res/id041.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_ACTIVE">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="action_name">TBI_ACTIVE</property>
<property name="label" translatable="yes" context="imapdialog|TBI_ACTIVE">Active</property>
<property name="icon_name">svx/res/id016.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_MACRO">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="action_name">TBI_MACRO</property>
<property name="label" translatable="yes" context="imapdialog|TBI_MACRO">Macro...</property>
<property name="icon_name">svx/res/id018.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_PROPERTY">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="action_name">TBI_PROPERTY</property>
<property name="label" translatable="yes" context="imapdialog|TBI_PROPERTY">Properties...</property>
<property name="icon_name">svx/res/id019.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkGrid" id="grid1">
<object class="GtkBox" id="mainbox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkLabel" id="urlft">
<object class="GtkToolbar" id="toolbar">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes" context="imapdialog|urlft">Address:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">url</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="svtlo-SvtURLBox" id="url">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkGrid" id="grid2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="no_show_all">True</property>
<property name="hexpand">True</property>
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
<property name="toolbar_style">icons</property>
<property name="show_arrow">False</property>
<property name="icon_size">1</property>
<child>
<object class="GtkLabel" id="targetft">
<object class="GtkToolButton" id="TBI_APPLY">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes" context="imapdialog|targetft">Frame:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">target</property>
<property name="valign">start</property>
<property name="label" translatable="yes" context="imapdialog|TBI_APPLY">Apply</property>
<property name="icon_name">svx/res/id01.png</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
<property name="expand">False</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="text">
<object class="GtkToolButton" id="TBI_OPEN">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="label" translatable="yes" context="imapdialog|TBI_OPEN">Open...</property>
<property name="icon_name">svx/res/id02.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_SAVEAS">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="label" translatable="yes" context="imapdialog|TBI_SAVEAS">Save...</property>
<property name="icon_name">svx/res/id03.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_CLOSE">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="label" translatable="yes" context="imapdialog|TBI_CLOSE">Close</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="TBI_SELECT">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="label" translatable="yes" context="imapdialog|TBI_SELECT">Select</property>
<property name="icon_name">svx/res/id04.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="TBI_RECT">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="label" translatable="yes" context="imapdialog|TBI_RECT">Rectangle</property>
<property name="icon_name">svx/res/id05.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="TBI_CIRCLE">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="label" translatable="yes" context="imapdialog|TBI_CIRCLE">Ellipse</property>
<property name="icon_name">svx/res/id06.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="TBI_POLY">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="label" translatable="yes" context="imapdialog|TBI_POLY">Polygon</property>
<property name="icon_name">svx/res/id07.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="TBI_FREEPOLY">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="label" translatable="yes" context="imapdialog|TBI_FREEPOLY">Freeform Polygon</property>
<property name="icon_name">svx/res/id08.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="TBI_POLYEDIT">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="label" translatable="yes" context="imapdialog|TBI_POLYEDIT">Edit Points</property>
<property name="icon_name">svx/res/id030.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="TBI_POLYMOVE">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="label" translatable="yes" context="imapdialog|TBI_POLYMOVE">Move Points</property>
<property name="icon_name">svx/res/id031.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="TBI_POLYINSERT">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="label" translatable="yes" context="imapdialog|TBI_POLYINSERT">Insert Points</property>
<property name="icon_name">svx/res/id032.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="TBI_POLYDELETE">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="label" translatable="yes" context="imapdialog|TBI_POLYDELETE">Delete Points</property>
<property name="icon_name">svx/res/id033.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_UNDO">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="label" translatable="yes" context="imapdialog|TBI_UNDO">Undo </property>
<property name="icon_name">svx/res/id040.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_REDO">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="label" translatable="yes" context="imapdialog|TBI_REDO">Redo</property>
<property name="icon_name">svx/res/id041.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToggleToolButton" id="TBI_ACTIVE">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="label" translatable="yes" context="imapdialog|TBI_ACTIVE">Active</property>
<property name="icon_name">svx/res/id016.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_MACRO">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="label" translatable="yes" context="imapdialog|TBI_MACRO">Macro...</property>
<property name="icon_name">svx/res/id018.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">False</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="TBI_PROPERTY">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="label" translatable="yes" context="imapdialog|TBI_PROPERTY">Properties...</property>
<property name="icon_name">svx/res/id019.png</property>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">False</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
<child>
<object class="GtkLabel" id="urlft">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes" context="imapdialog|urlft">Address:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">url</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="target">
<object class="GtkGrid" id="grid2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
<child>
<object class="GtkLabel" id="targetft">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes" context="imapdialog|targetft">Frame:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">target</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="text">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="activates_default">True</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="target">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="has_entry">True</property>
<child internal-child="entry">
<object class="GtkEntry">
<property name="can_focus">True</property>
<property name="activates_default">True</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">0</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="textft">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes" context="imapdialog|textft">Text:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">text</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="url">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="has_entry">True</property>
<child internal-child="entry">
<object class="GtkEntry" id="combobox-entry">
<object class="GtkEntry">
<property name="can_focus">True</property>
<property name="activates_default">True</property>
</object>
</child>
</object>
<packing>
<property name="left_attach">2</property>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="textft">
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes" context="imapdialog|textft">Text:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">text</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="hscrollbar_policy">never</property>
<property name="vscrollbar_policy">never</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<child>
<object class="GtkDrawingArea" id="container">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
@@ -399,37 +534,10 @@
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="container:border">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="svxlo-StatusBar" id="statusbar">
<property name="height_request">25</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
</child>
<action-widgets>
<action-widget response="-6">cancel</action-widget>
</action-widgets>
</object>
</interface>
diff --git a/sw/source/uibase/shells/basesh.cxx b/sw/source/uibase/shells/basesh.cxx
index 96e4c01..b957769 100644
--- a/sw/source/uibase/shells/basesh.cxx
+++ b/sw/source/uibase/shells/basesh.cxx
@@ -146,7 +146,7 @@ namespace
SvxIMapDlg* GetIMapDlg(SwView const &rView)
{
SfxChildWindow* pWnd = rView.GetViewFrame()->GetChildWindow(SvxIMapDlgChildWindow::GetChildWindowId());
return pWnd ? static_cast<SvxIMapDlg*>(pWnd->GetWindow()) : nullptr;
return pWnd ? static_cast<SvxIMapDlg*>(pWnd->GetController().get()) : nullptr;
}
}
@@ -1300,7 +1300,7 @@ IMPL_LINK_NOARG(SwBaseShell, GraphicArrivedHdl, SwCursorShell&, void)
SfxChildWindow *pChildWindow = pVFrame->HasChildWindow(nId) ?
pVFrame->GetChildWindow(nId) : nullptr;
SvxIMapDlg *pDlg = pChildWindow ?
static_cast<SvxIMapDlg*>(pChildWindow->GetWindow()) : nullptr;
static_cast<SvxIMapDlg*>(pChildWindow->GetController().get()) : nullptr;
if( pDlg && ( SID_IMAP_EXEC == nSlot ||
( SID_IMAP == nSlot && !bProtect)) &&
@@ -1322,7 +1322,7 @@ IMPL_LINK_NOARG(SwBaseShell, GraphicArrivedHdl, SwCursorShell&, void)
SfxChildWindow *pChildWindow = pVFrame->HasChildWindow(nId) ?
pVFrame->GetChildWindow(nId) : nullptr;
SvxIMapDlg *pDlg = pChildWindow ?
static_cast<SvxIMapDlg*>(pChildWindow->GetWindow()) : nullptr;
static_cast<SvxIMapDlg*>(pChildWindow->GetController().get()) : nullptr;
if( pDlg && pDlg->GetEditingObject() !=
rSh.GetIMapInventor() )
lcl_UpdateContourDlg( rSh, SelectionType::Graphic );
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index b55b735..9c8ccc8 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -867,6 +867,58 @@ public:
}
};
class SalInstanceToolbar : public SalInstanceWidget, public virtual weld::Toolbar
{
private:
VclPtr<ToolBox> m_xToolBox;
DECL_LINK(ClickHdl, ToolBox*, void);
public:
SalInstanceToolbar(ToolBox* pToolBox, SalInstanceBuilder* pBuilder, bool bTakeOwnership)
: SalInstanceWidget(pToolBox, pBuilder, bTakeOwnership)
, m_xToolBox(pToolBox)
{
m_xToolBox->SetSelectHdl(LINK(this, SalInstanceToolbar, ClickHdl));
}
virtual void set_item_sensitive(const OString& rIdent, bool bSensitive) override
{
m_xToolBox->EnableItem(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)), bSensitive);
}
virtual bool get_item_sensitive(const OString& rIdent) const override
{
return m_xToolBox->IsItemEnabled(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)));
}
virtual void set_item_active(const OString& rIdent, bool bActive) override
{
m_xToolBox->CheckItem(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)), bActive);
}
virtual bool get_item_active(const OString& rIdent) const override
{
return m_xToolBox->IsItemChecked(m_xToolBox->GetItemId(OUString::fromUtf8(rIdent)));
}
virtual void insert_separator(int pos, const OUString& /*rId*/) override
{
auto nInsertPos = pos == -1 ? ToolBox::APPEND : pos;
m_xToolBox->InsertSeparator(nInsertPos, 5);
}
virtual ~SalInstanceToolbar() override
{
m_xToolBox->SetSelectHdl(Link<ToolBox*, void>());
}
};
IMPL_LINK_NOARG(SalInstanceToolbar, ClickHdl, ToolBox*, void)
{
sal_uInt16 nItemId = m_xToolBox->GetCurItemId();
signal_clicked(m_xToolBox->GetItemCommand(nItemId).toUtf8());
}
class SalInstanceSizeGroup : public weld::SizeGroup
{
private:
@@ -4261,9 +4313,9 @@ public:
weld::Widget::connect_key_release(rLink);
}
virtual void set_text_cursor() override
virtual void set_cursor(PointerStyle ePointerStyle) override
{
m_xDrawingArea->SetPointer(PointerStyle::Text);
m_xDrawingArea->SetPointer(ePointerStyle);
}
virtual a11yref get_accessible_parent() override
@@ -5108,6 +5160,12 @@ public:
return pMenu ? std::make_unique<SalInstanceMenu>(pMenu, bTakeOwnership) : nullptr;
}
virtual std::unique_ptr<weld::Toolbar> weld_toolbar(const OString &id, bool bTakeOwnership) override
{
ToolBox* pToolBox = m_xBuilder->get<ToolBox>(id);
return pToolBox ? std::make_unique<SalInstanceToolbar>(pToolBox, this, bTakeOwnership) : nullptr;
}
virtual std::unique_ptr<weld::SizeGroup> create_size_group() override
{
return std::make_unique<SalInstanceSizeGroup>();
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index fe67aec4..3e0aabd 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -2161,6 +2161,8 @@ VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window *pParent, const OString &
nItemId = pToolBox->GetItemCount() + 1;
//TODO: ImplToolItems::size_type -> sal_uInt16!
pToolBox->InsertItem(nItemId, extractLabel(rMap), nBits);
if (aCommand.isEmpty() && !m_bLegacy)
aCommand = OUString::fromUtf8(id);
pToolBox->SetItemCommand(nItemId, aCommand);
}
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 0d60969..d29fa4f 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -5331,6 +5331,100 @@ public:
}
};
class GtkInstanceToolbar : public GtkInstanceWidget, public virtual weld::Toolbar
{
private:
GtkToolbar* m_pToolbar;
std::map<OString, GtkToolButton*> m_aMap;
static void collect(GtkWidget* pItem, gpointer widget)
{
GtkToolButton* pToolItem = GTK_TOOL_BUTTON(pItem);
GtkInstanceToolbar* pThis = static_cast<GtkInstanceToolbar*>(widget);
pThis->add_to_map(pToolItem);
}
void add_to_map(GtkToolButton* pToolItem)
{
const gchar* pStr = gtk_buildable_get_name(GTK_BUILDABLE(pToolItem));
OString id(pStr, pStr ? strlen(pStr) : 0);
m_aMap[id] = pToolItem;
g_signal_connect(pToolItem, "clicked", G_CALLBACK(signalItemClicked), this);
}
static void signalItemClicked(GtkToolButton* pItem, gpointer widget)
{
GtkInstanceToolbar* pThis = static_cast<GtkInstanceToolbar*>(widget);
SolarMutexGuard aGuard;
pThis->signal_item_clicked(pItem);
}
void signal_item_clicked(GtkToolButton* pItem)
{
const gchar* pStr = gtk_buildable_get_name(GTK_BUILDABLE(pItem));
signal_clicked(OString(pStr, pStr ? strlen(pStr) : 0));
}
public:
GtkInstanceToolbar(GtkToolbar* pToolbar, GtkInstanceBuilder* pBuilder, bool bTakeOwnership)
: GtkInstanceWidget(GTK_WIDGET(pToolbar), pBuilder, bTakeOwnership)
, m_pToolbar(pToolbar)
{
gtk_container_foreach(GTK_CONTAINER(pToolbar), collect, this);
}
void disable_item_notify_events()
{
for (auto& a : m_aMap)
g_signal_handlers_block_by_func(a.second, reinterpret_cast<void*>(signalItemClicked), this);
}
void enable_item_notify_events()
{
for (auto& a : m_aMap)
g_signal_handlers_unblock_by_func(a.second, reinterpret_cast<void*>(signalItemClicked), this);
}
virtual void set_item_sensitive(const OString& rIdent, bool bSensitive) override
{
disable_item_notify_events();
gtk_widget_set_sensitive(GTK_WIDGET(m_aMap[rIdent]), bSensitive);
enable_item_notify_events();
}
virtual bool get_item_sensitive(const OString& rIdent) const override
{
return gtk_widget_get_sensitive(GTK_WIDGET(m_aMap.find(rIdent)->second));
}
virtual void set_item_active(const OString& rIdent, bool bActive) override
{
disable_item_notify_events();
gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(m_aMap[rIdent]), bActive);
enable_item_notify_events();
}
virtual bool get_item_active(const OString& rIdent) const override
{
return gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(m_aMap.find(rIdent)->second));
}
virtual void insert_separator(int pos, const OUString& rId) override
{
GtkToolItem* pItem = gtk_separator_tool_item_new();
gtk_buildable_set_name(GTK_BUILDABLE(pItem), OUStringToOString(rId, RTL_TEXTENCODING_UTF8).getStr());
gtk_toolbar_insert(m_pToolbar, pItem, pos);
gtk_widget_show(GTK_WIDGET(pItem));
}
virtual ~GtkInstanceToolbar() override
{
for (auto& a : m_aMap)
g_signal_handlers_disconnect_by_data(a.second, this);
}
};
class GtkInstanceLinkButton : public GtkInstanceContainer, public virtual weld::LinkButton
{
private:
@@ -8445,9 +8539,10 @@ public:
m_xDevice->EnableRTL(bRTL);
}
virtual void set_text_cursor() override
virtual void set_cursor(PointerStyle ePointerStyle) override
{
set_cursor(GTK_WIDGET(m_pDrawingArea), "text");
GdkCursor *pCursor = GtkSalFrame::getDisplay()->getCursor(ePointerStyle);
gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(m_pDrawingArea)), pCursor);
}
virtual void queue_draw() override
@@ -10231,6 +10326,15 @@ public:
return std::make_unique<GtkInstanceMenu>(pMenu, bTakeOwnership);
}
virtual std::unique_ptr<weld::Toolbar> weld_toolbar(const OString &id, bool bTakeOwnership) override
{
GtkToolbar* pToolbar = GTK_TOOLBAR(gtk_builder_get_object(m_pBuilder, id.getStr()));
if (!pToolbar)
return nullptr;
auto_add_parentless_widgets_to_container(GTK_WIDGET(pToolbar));
return std::make_unique<GtkInstanceToolbar>(pToolbar, this, bTakeOwnership);
}
virtual std::unique_ptr<weld::SizeGroup> create_size_group() override
{
return std::make_unique<GtkInstanceSizeGroup>();