summaryrefslogtreecommitdiff
path: root/include/formula
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2019-04-09 11:23:48 +0100
committerCaolán McNamara <caolanm@redhat.com>2019-04-10 21:23:21 +0200
commit3d648f76ac90fe8e28691313d0d4e78a8278e511 (patch)
treef3e0de959d8ddff61a9ff4af79e481bec25aa29d /include/formula
parent47500ab25b9c5bbeeb6fde3866bdd924948fd88a (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.hxx4
-rw-r--r--include/formula/formula.hxx4
-rw-r--r--include/formula/funcutl.hxx102
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