From 267c6f2ac71f92999e969232431ba04678e7437e Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 15 Apr 2024 07:54:39 +0200 Subject: Adding upstream version 4:24.2.0. Signed-off-by: Daniel Baumann --- include/formula/funcutl.hxx | 182 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 include/formula/funcutl.hxx (limited to 'include/formula/funcutl.hxx') diff --git a/include/formula/funcutl.hxx b/include/formula/funcutl.hxx new file mode 100644 index 0000000000..a41f9c09a6 --- /dev/null +++ b/include/formula/funcutl.hxx @@ -0,0 +1,182 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_FORMULA_FUNCUTL_HXX +#define INCLUDED_FORMULA_FUNCUTL_HXX + +#include +#include +#include +#include +#include + +class KeyEvent; +struct ImplSVEvent; + +namespace formula { + +class IControlReferenceHandler; + +class FORMULA_DLLPUBLIC RefEdit +{ +protected: + std::unique_ptr xEntry; + +private: + Idle aIdle; + IControlReferenceHandler* pAnyRefDlg; // parent dialog + weld::Label* pLabelWidget; + ImplSVEvent* mpFocusInEvent; + ImplSVEvent* mpFocusOutEvent; + + Link maGetFocusHdl; + Link maLoseFocusHdl; + Link maModifyHdl; + Link maActivateHdl; + + DECL_DLLPRIVATE_LINK( UpdateHdl, Timer*, void ); + + DECL_DLLPRIVATE_LINK(KeyInputHdl, const KeyEvent&, bool); + DECL_DLLPRIVATE_LINK(GetFocusHdl, weld::Widget&, void); + DECL_DLLPRIVATE_LINK(LoseFocusHdl, weld::Widget&, void); + DECL_DLLPRIVATE_LINK(AsyncFocusInHdl, void*, void); + DECL_DLLPRIVATE_LINK(AsyncFocusOutHdl, void*, void); + DECL_DLLPRIVATE_LINK(Modify, weld::Entry&, void); + + void GetFocus(); + void LoseFocus(); + +protected: + virtual bool KeyInput(const KeyEvent& rKEvt); + +public: + RefEdit(std::unique_ptr xControl); + weld::Entry* GetWidget() const { return xEntry.get(); } + virtual ~RefEdit(); + + 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); + } + + void SetSelection(const Selection& rSelection) + { + xEntry->select_region(rSelection.Min(), rSelection.Max()); + } + + void SetCursorAtLast() + { + xEntry->set_position(-1); + } + + Selection GetSelection() const + { + int nStartPos, nEndPos; + xEntry->get_selection_bounds(nStartPos, nEndPos); + return Selection(nStartPos, nEndPos); + } + + weld::Label* GetLabelWidgetForShrinkMode() + { + return pLabelWidget; + } + + void SaveValue() + { + xEntry->save_value(); + } + + bool IsValueChangedFromSaved() const + { + return xEntry->get_value_changed_from_saved(); + } + + void SetGetFocusHdl(const Link& rLink) { maGetFocusHdl = rLink; } + void SetLoseFocusHdl(const Link& rLink) { maLoseFocusHdl = rLink; } + void SetModifyHdl(const Link& rLink) { maModifyHdl = rLink; } + const Link& GetModifyHdl() const { return maModifyHdl; } + void SetActivateHdl(const Link& rLink) { maActivateHdl = rLink; } +}; + +class FORMULA_DLLPUBLIC RefButton +{ +private: + std::unique_ptr xButton; + IControlReferenceHandler* pAnyRefDlg; // parent dialog + RefEdit* pRefEdit; // associated Edit-Control + Link maGetFocusHdl; + Link maLoseFocusHdl; + Link maActivateHdl; + Link maClickHdl; + + DECL_LINK(Click, weld::Button&, void); + DECL_DLLPRIVATE_LINK(KeyInput, const KeyEvent&, bool); + DECL_DLLPRIVATE_LINK(GetFocus, weld::Widget&, void); + DECL_DLLPRIVATE_LINK(LoseFocus, weld::Widget&, void); + +public: + RefButton(std::unique_ptr xControl); + weld::Button* GetWidget() const { return xButton.get(); } + ~RefButton(); + void SetReferences(IControlReferenceHandler* pDlg, RefEdit* pEdit); + void SetStartImage(); + void SetEndImage(); + void DoRef() + { + Click(*xButton); + } + void SetGetFocusHdl(const Link& rLink) { maGetFocusHdl = rLink; } + void SetLoseFocusHdl(const Link& rLink) { maLoseFocusHdl = rLink; } + void SetActivateHdl(const Link& rLink) { maActivateHdl = rLink; } + void SetClickHdl(const Link& rLink) { maClickHdl = rLink; } +}; + +} // formula + +#endif // INCLUDED_FORMULA_FUNCUTL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit v1.2.3