diff options
author | Caolán McNamara <caolanm@redhat.com> | 2019-04-09 11:23:48 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2019-04-10 21:23:21 +0200 |
commit | 3d648f76ac90fe8e28691313d0d4e78a8278e511 (patch) | |
tree | f3e0de959d8ddff61a9ff4af79e481bec25aa29d /include/formula | |
parent | 47500ab25b9c5bbeeb6fde3866bdd924948fd88a (diff) |
weld ScCorrelationDialog
this is first of the calc dialogs with a range selector, so some temp
scaffolding is required during interim case of both welded/unwelded
in existence
Change-Id: I5480179092da7b56864cef066af781b35f735ebc
Reviewed-on: https://gerrit.libreoffice.org/70474
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'include/formula')
-rw-r--r-- | include/formula/IControlReferenceHandler.hxx | 4 | ||||
-rw-r--r-- | include/formula/formula.hxx | 4 | ||||
-rw-r--r-- | include/formula/funcutl.hxx | 102 |
3 files changed, 110 insertions, 0 deletions
diff --git a/include/formula/IControlReferenceHandler.hxx b/include/formula/IControlReferenceHandler.hxx index e1096c47ae38..f73a7618d346 100644 --- a/include/formula/IControlReferenceHandler.hxx +++ b/include/formula/IControlReferenceHandler.hxx @@ -26,14 +26,18 @@ namespace formula { class RefEdit; + class WeldRefEdit; class RefButton; + class WeldRefButton; class FORMULA_DLLPUBLIC SAL_NO_VTABLE IControlReferenceHandler { public: virtual void ShowReference(const OUString& _sRef) = 0; virtual void HideReference( bool bDoneRefMode = true ) = 0; virtual void ReleaseFocus( RefEdit* pEdit ) = 0; + virtual void ReleaseFocus( WeldRefEdit* pEdit ) = 0; virtual void ToggleCollapsed( RefEdit* pEdit, RefButton* pButton ) = 0; + virtual void ToggleCollapsed( WeldRefEdit* pEdit, WeldRefButton* pButton ) = 0; protected: ~IControlReferenceHandler() {} diff --git a/include/formula/formula.hxx b/include/formula/formula.hxx index 201a598891e4..defd1ecfd1a8 100644 --- a/include/formula/formula.hxx +++ b/include/formula/formula.hxx @@ -56,7 +56,9 @@ class FormulaDlg_Impl; class IControlReferenceHandler; class FormulaHelper; class RefEdit; +class WeldRefEdit; class RefButton; +class WeldRefButton; class FormEditData; class FORMULA_DLLPUBLIC FormulaModalDialog : public ModalDialog, public formula::IFormulaEditorHelper @@ -76,6 +78,7 @@ protected: virtual bool PreNotify( NotifyEvent& rNEvt ) override; ::std::pair<RefButton*,RefEdit*> RefInputStartBefore( RefEdit* pEdit, RefButton* pButton ); + static ::std::pair<WeldRefButton*,WeldRefEdit*> RefInputStartBefore( WeldRefEdit* pEdit, WeldRefButton* pButton ); void RefInputStartAfter(); void RefInputDoneAfter(); @@ -110,6 +113,7 @@ protected: virtual bool PreNotify( NotifyEvent& rNEvt ) override; ::std::pair<RefButton*,RefEdit*> RefInputStartBefore( RefEdit* pEdit, RefButton* pButton ); + static ::std::pair<WeldRefButton*,WeldRefEdit*> RefInputStartBefore( WeldRefEdit* pEdit, WeldRefButton* pButton ); void RefInputStartAfter(); void RefInputDoneAfter( bool bForced ); diff --git a/include/formula/funcutl.hxx b/include/formula/funcutl.hxx index 0a4c25d1236c..5a6c095db77e 100644 --- a/include/formula/funcutl.hxx +++ b/include/formula/funcutl.hxx @@ -28,6 +28,7 @@ #include <vcl/edit.hxx> #include <vcl/idle.hxx> #include <vcl/image.hxx> +#include <vcl/weld.hxx> #include <vcl/vclptr.hxx> class KeyEvent; @@ -83,6 +84,74 @@ public: } }; +class FORMULA_DLLPUBLIC WeldRefEdit +{ +private: + std::unique_ptr<weld::Entry> xEntry; + Idle aIdle; + IControlReferenceHandler* pAnyRefDlg; // parent dialog + weld::Label* pLabelWidget; + Link<WeldRefEdit&,void> maGetFocusHdl; + Link<WeldRefEdit&,void> maLoseFocusHdl; + Link<WeldRefEdit&,void> maModifyHdl; + Link<weld::Widget&,bool> maActivateHdl; + + DECL_LINK( UpdateHdl, Timer*, void ); + +protected: + DECL_LINK(KeyInput, const KeyEvent&, bool); + DECL_LINK(GetFocus, weld::Widget&, void); + DECL_LINK(LoseFocus, weld::Widget&, void); + DECL_LINK(Modify, weld::Entry&, void); + +public: + WeldRefEdit(std::unique_ptr<weld::Entry> xControl); + weld::Widget* GetWidget() const { return xEntry.get(); } + ~WeldRefEdit(); + + void SetRefString( const OUString& rStr ); + + /** + * Flag reference valid or invalid, which in turn changes the visual + * appearance of the control accordingly. + */ + void SetRefValid(bool bValid); + + void SetText(const OUString& rStr); + OUString GetText() const + { + return xEntry->get_text(); + } + + void StartUpdateData(); + + void SetReferences( IControlReferenceHandler* pDlg, weld::Label *pLabelWidget ); + + void DoModify() + { + Modify(*xEntry); + } + + void GrabFocus() + { + xEntry->grab_focus(); + } + + void SelectAll() + { + xEntry->select_region(0, -1); + } + + weld::Label* GetLabelWidgetForShrinkMode() + { + return pLabelWidget; + } + + void SetGetFocusHdl(const Link<WeldRefEdit&,void>& rLink) { maGetFocusHdl = rLink; } + void SetLoseFocusHdl(const Link<WeldRefEdit&,void>& rLink) { maLoseFocusHdl = rLink; } + void SetModifyHdl(const Link<WeldRefEdit&,void>& rLink) { maModifyHdl = rLink; } + void SetActivateHdl(const Link<weld::Widget&,bool>& rLink) { maActivateHdl = rLink; } +}; class FORMULA_DLLPUBLIC RefButton : public ImageButton { @@ -113,6 +182,39 @@ public: } }; +class FORMULA_DLLPUBLIC WeldRefButton +{ +private: + std::unique_ptr<weld::Button> xButton; + IControlReferenceHandler* pAnyRefDlg; // parent dialog + WeldRefEdit* pRefEdit; // associated Edit-Control + Link<WeldRefButton&,void> maGetFocusHdl; + Link<WeldRefButton&,void> maLoseFocusHdl; + Link<weld::Widget&,bool> maActivateHdl; + +protected: + DECL_LINK(Click, weld::Button&, void); + DECL_LINK(KeyInput, const KeyEvent&, bool); + DECL_LINK(GetFocus, weld::Widget&, void); + DECL_LINK(LoseFocus, weld::Widget&, void); + +public: + WeldRefButton(std::unique_ptr<weld::Button> xControl); + weld::Widget* GetWidget() const { return xButton.get(); } + ~WeldRefButton(); + void SetReferences(IControlReferenceHandler* pDlg, WeldRefEdit* pEdit); + void SetStartImage(); + void SetEndImage(); + void DoRef() + { + Click(*xButton); + } + void SetGetFocusHdl(const Link<WeldRefButton&,void>& rLink) { maGetFocusHdl = rLink; } + void SetLoseFocusHdl(const Link<WeldRefButton&,void>& rLink) { maLoseFocusHdl = rLink; } + void SetActivateHdl(const Link<weld::Widget&,bool>& rLink) { maActivateHdl = rLink; } +}; + + } // formula #endif // INCLUDED_FORMULA_FUNCUTL_HXX |