forked from amazingfate/loongoffice
...as obsoleted by ef533553559fe09b4afab651fc692885d1acf4ed "Rudimentary support for dynamic_cast on UNO proxy objects". This reverts all of: 4cfcc9ac37b90ce64c8402a41eb4638adb185b5c "loplugin:unocast (framework::Desktop)" 03efbf72f4ddf7a84aa8aabef348331bd4b75e8a "loplugin:unocast (vclcanvas::TextLayout)" 80099fdd51a69eaa6c36ca88ef772810e4a777fa "loplugin:unocast (SalGtkXWindow)" cc147f576d8687fb79c77d47d41dc4ba1678a469 "loplugin:unocast (sdext::presenter::CachablePresenterView)" 40db42be1d8fd0f9c6c8c5ba3767ddb9ee2034c2 "loplugin:unocast (vclcanvas::CanvasFont)" 2d1e7995eae29e2826449eb5179f5fae181794a5 "loplugin:unocast (CairoColorSpace)" 4c0bbe4bd97636207cf71a6aa120c67698891da9 "loplugin:unocast (canvas::ParametricPolyPolygon)" 89803666621c07d1b1ac9d3bd883f0ca192a91a0 "loplugin:unocast (vclcanas::CanvasBitmap)" d5e0c2c8db71878d21c2a7255af08cf5f9a6dd04 "loplugin:unocast (sfx2::DigitalSignatures)" c0c4519e0d5b555f59bbc04cc616454edfd1f4ce "loplugin:unocast (VCLXAccessibleComponent)" feb8b833a6245d42400f42a0bc789dc84594ee6f "loplugin:unocast (VCLXDialog)" 1fa58cc6cc9c3849753342a5d9a6ddfa461b5e66 "loplugin:unocast (VCLXMultiPage)" f481f036deb1b1b46f3038074c4659f3a91b9c6c "loplugin:unocast (DocumentSettingsSerializer)" 73df933f5fa5932f94e5a1b338a3eda00a9ce354 "loplugin:unocast (css::embed::EmbeddedUpdate)" 420165ab0ef03c0467f9d17f504de2d2fc78f0e6 "loplugin:unocast (canvas::tools' StandardColorSpace, StandardNoAlphaColorSpace)" 9abe8ee067e6c00f19d8a13346d53c4641c27166 "loplugin:unocast (MutableTreeNode)" 9f3022ceb036f23b4b0994c3e2fbd1001bff225a "loplugin:unocast (VCLXTabPage)" 1be70dda02c12a60778b7607cff2520ae1aa611e "loplugin:unocast (vcl::unotools::VclCanvasBitmap)" d6a70bb641b96e8e5616448c2378131ed62658b4 "loplugin:unocast (basegfx::unotools::UnoPolyPolygon)" 5a14f009e6782c077463c8cbb8e9cea3d7950107 "loplugin:unocast (xmlsecurity::Certificate)" 99009c9535dfa3e0d838989ccc7d84bfa2320ff4 "loplugin:unocast (sd::Annotation)" 0c7585c5fa78887e5459885ed744e8044fd76137 "loplugin:unocast (sd::TextApiObject)" 24e14afd1bfcaed6c200ab081973fba7e47267ca "loplugin:unocast (SignatureVerifierImpl)" 1a7ad0c10d286ce9ae2700ceb2fd50eed1fb43a4 "loplugin:unocast (pcr::PropertyEventTranslation)" a97e2d2702d9a6f37775ccee2c08c4f3b2479c4b "loplugin:unocast (RangePageBreaks)" 19dfdf86ad1f5b08041d8b7a9f196caf881231ab "iloplugin:unocast (pcr::OFormattedNumericControl)" f9785ea595fd8e911f6370e836fa579225b9e571 "loplugin:unocast (frm::OInterfaceContainer)" 5e5f40a4a92a31b0932c690219d002fcf18598cf "loplugin:unocast (ScVbaShapes)" 27b35b2c215b4832d4378ec3a7ecbba926552d06 "loplugin:unocast (ScVbaShapeRange)" cb3108f860065928552a86cf8acc4b3a95718ecf "cid#1517812 Dereference null return value" feba0ddb1521d1142560fe54b7d7696ee910237f "loplugin:unocast (weld::TransportAsXWindow)" 4d6c23216559eb48f9943bb49d6e475a6d64ba15 "loplugin:unocast (oox::ForumlaImExportBase)" 4844c096a8ab6a9a620c410a0949d4499f12a504 "loplugin:unocast (cairocanvas::SurfaceProvider)" 9a0b523e0a84d403b9092176ccec4b3e3efe42d0 "loplugin:unocast (cairocanvas::CanvasBitmap)" 8a5648d8e59b4b007dbbf3824777c19a21efc61e "loplugin:unocast (cairocanvas::TextLayout)" 28c27a0623bc78a0590858f97d03b620985bc84c "loplugin:unocast (cairocanvas::CanvasFont)" 53bc223cb3288e32a417696ee61c29e5f01f209d "loplugin:unocast (cairocanvas::RepaintTarget)" 5f70b0b9f6bc4ab145ddbd9155590ed4a3b1b9ec "loplugin:unocast (SvXMLImport)" 068187a898cdd2e26e9b16c348ecc1ed2dee3f29 "loplugin:unocast (VCLXWindow)" 88b4f966202717cd4ad38a30a8eda22c3e69ed35 "loplugin:unocast (sfx2::sidebar::SidebarController)" f1b7a69b280aefe2f1b3b0f32193494fd765f2bd "loplugin:unocast (SvxLineStyleToolBoxControl)" ba76f0ba7e8de4d2953739c952004b7d9af47197 "loplugin:unocast (i18npool::Calendar_gregorian)" 840154daf934d8df52ead1cb7acd798c4d30f007 "loplugin:unocast (framework::AddonsToolBarWrapper)" b0e9c4c5f063cefa9557810e3349bdb9c7493091 "loplugin:unocast (GrammarCheckingIterator)" 8ee6cfc9655ce9de4617cea1a0d9cb9d7a4fbfac "loplugin:unocast (ucb::ucp::ext::Content)" 5b8cd77c112bc8c0e92b8fec215c3c8e802bbc0a "loplugin:unocast (basic::SfxScriptLibraryContainer)" 9e73ff9fce12e102bb3c3cea8d8bb96c88f2c9ad "loplugin:unocast (sdext::presenter::PresenterNotesView)" a98acca8fbc38d3fd5600ae5056a8e42b6d8a40d "loplugin:unocast (SelectionChangeHandler)" c0b59ad6e35b0cb0dea0821e95f95569739078c1 "Consistently use comphelper::getSomethingImpl<I>(aIdentifier, this)" 276e3ccbdd3259ec3daf8a1a98fa7f406b14e21c "loplugin:unocast (vclcanvas::RepaintTarget)" Change-Id: I37c73e3422a5154bf6cb647640d2d3f23db8bc34 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145063 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
473 lines
16 KiB
C++
473 lines
16 KiB
C++
/* -*- 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/.
|
|
*/
|
|
|
|
#ifndef INCLUDED_VCL_WELDUTILS_HXX
|
|
#define INCLUDED_VCL_WELDUTILS_HXX
|
|
|
|
#include <com/sun/star/awt/XWindow.hpp>
|
|
#include <com/sun/star/frame/XDispatch.hpp>
|
|
#include <com/sun/star/frame/XFrame.hpp>
|
|
#include <com/sun/star/frame/XStatusListener.hpp>
|
|
#include <com/sun/star/uno/Reference.hxx>
|
|
#include <comphelper/interfacecontainer4.hxx>
|
|
#include <comphelper/compbase.hxx>
|
|
#include <tools/time.hxx>
|
|
#include <vcl/dllapi.h>
|
|
#include <vcl/formatter.hxx>
|
|
#include <vcl/timer.hxx>
|
|
#include <vcl/transfer.hxx>
|
|
#include <vcl/weld.hxx>
|
|
|
|
class CalendarWrapper;
|
|
|
|
namespace vcl
|
|
{
|
|
class Window;
|
|
}
|
|
|
|
namespace weld
|
|
{
|
|
typedef comphelper::WeakComponentImplHelper<css::awt::XWindow> TransportAsXWindow_Base;
|
|
|
|
class VCL_DLLPUBLIC TransportAsXWindow : public TransportAsXWindow_Base
|
|
{
|
|
private:
|
|
weld::Widget* m_pWeldWidget;
|
|
weld::Builder* m_pWeldWidgetBuilder;
|
|
|
|
comphelper::OInterfaceContainerHelper4<css::awt::XWindowListener> m_aWindowListeners;
|
|
comphelper::OInterfaceContainerHelper4<css::awt::XKeyListener> m_aKeyListeners;
|
|
comphelper::OInterfaceContainerHelper4<css::awt::XFocusListener> m_aFocusListeners;
|
|
comphelper::OInterfaceContainerHelper4<css::awt::XMouseListener> m_aMouseListeners;
|
|
comphelper::OInterfaceContainerHelper4<css::awt::XMouseMotionListener> m_aMotionListeners;
|
|
comphelper::OInterfaceContainerHelper4<css::awt::XPaintListener> m_aPaintListeners;
|
|
|
|
public:
|
|
TransportAsXWindow(weld::Widget* pWeldWidget, weld::Builder* pWeldWidgetBuilder = nullptr)
|
|
: m_pWeldWidget(pWeldWidget)
|
|
, m_pWeldWidgetBuilder(pWeldWidgetBuilder)
|
|
{
|
|
}
|
|
|
|
weld::Widget* getWidget() const { return m_pWeldWidget; }
|
|
|
|
weld::Builder* getBuilder() const { return m_pWeldWidgetBuilder; }
|
|
|
|
virtual void clear()
|
|
{
|
|
m_pWeldWidget = nullptr;
|
|
m_pWeldWidgetBuilder = nullptr;
|
|
}
|
|
|
|
// css::awt::XWindow
|
|
void SAL_CALL setPosSize(sal_Int32, sal_Int32, sal_Int32, sal_Int32, sal_Int16) override
|
|
{
|
|
throw css::uno::RuntimeException("not implemented");
|
|
}
|
|
|
|
css::awt::Rectangle SAL_CALL getPosSize() override
|
|
{
|
|
throw css::uno::RuntimeException("not implemented");
|
|
}
|
|
|
|
void SAL_CALL setVisible(sal_Bool bVisible) override { m_pWeldWidget->set_visible(bVisible); }
|
|
|
|
void SAL_CALL setEnable(sal_Bool bSensitive) override
|
|
{
|
|
m_pWeldWidget->set_sensitive(bSensitive);
|
|
}
|
|
|
|
void SAL_CALL setFocus() override { m_pWeldWidget->grab_focus(); }
|
|
|
|
void SAL_CALL
|
|
addWindowListener(const css::uno::Reference<css::awt::XWindowListener>& rListener) override
|
|
{
|
|
std::unique_lock g(m_aMutex);
|
|
m_aWindowListeners.addInterface(g, rListener);
|
|
}
|
|
|
|
void SAL_CALL
|
|
removeWindowListener(const css::uno::Reference<css::awt::XWindowListener>& rListener) override
|
|
{
|
|
std::unique_lock g(m_aMutex);
|
|
m_aWindowListeners.removeInterface(g, rListener);
|
|
}
|
|
|
|
void SAL_CALL
|
|
addFocusListener(const css::uno::Reference<css::awt::XFocusListener>& rListener) override
|
|
{
|
|
std::unique_lock g(m_aMutex);
|
|
m_aFocusListeners.addInterface(g, rListener);
|
|
}
|
|
|
|
void SAL_CALL
|
|
removeFocusListener(const css::uno::Reference<css::awt::XFocusListener>& rListener) override
|
|
{
|
|
std::unique_lock g(m_aMutex);
|
|
m_aFocusListeners.removeInterface(g, rListener);
|
|
}
|
|
|
|
void SAL_CALL
|
|
addKeyListener(const css::uno::Reference<css::awt::XKeyListener>& rListener) override
|
|
{
|
|
std::unique_lock g(m_aMutex);
|
|
m_aKeyListeners.addInterface(g, rListener);
|
|
}
|
|
|
|
void SAL_CALL
|
|
removeKeyListener(const css::uno::Reference<css::awt::XKeyListener>& rListener) override
|
|
{
|
|
std::unique_lock g(m_aMutex);
|
|
m_aKeyListeners.removeInterface(g, rListener);
|
|
}
|
|
|
|
void SAL_CALL
|
|
addMouseListener(const css::uno::Reference<css::awt::XMouseListener>& rListener) override
|
|
{
|
|
std::unique_lock g(m_aMutex);
|
|
m_aMouseListeners.addInterface(g, rListener);
|
|
}
|
|
|
|
void SAL_CALL
|
|
removeMouseListener(const css::uno::Reference<css::awt::XMouseListener>& rListener) override
|
|
{
|
|
std::unique_lock g(m_aMutex);
|
|
m_aMouseListeners.removeInterface(g, rListener);
|
|
}
|
|
|
|
void SAL_CALL addMouseMotionListener(
|
|
const css::uno::Reference<css::awt::XMouseMotionListener>& rListener) override
|
|
{
|
|
std::unique_lock g(m_aMutex);
|
|
m_aMotionListeners.addInterface(g, rListener);
|
|
}
|
|
|
|
void SAL_CALL removeMouseMotionListener(
|
|
const css::uno::Reference<css::awt::XMouseMotionListener>& rListener) override
|
|
{
|
|
std::unique_lock g(m_aMutex);
|
|
m_aMotionListeners.removeInterface(g, rListener);
|
|
}
|
|
|
|
void SAL_CALL
|
|
addPaintListener(const css::uno::Reference<css::awt::XPaintListener>& rListener) override
|
|
{
|
|
std::unique_lock g(m_aMutex);
|
|
m_aPaintListeners.addInterface(g, rListener);
|
|
}
|
|
|
|
void SAL_CALL
|
|
removePaintListener(const css::uno::Reference<css::awt::XPaintListener>& rListener) override
|
|
{
|
|
std::unique_lock g(m_aMutex);
|
|
m_aPaintListeners.removeInterface(g, rListener);
|
|
}
|
|
};
|
|
|
|
// don't export to avoid duplicate WeakImplHelper definitions with MSVC
|
|
class SAL_DLLPUBLIC_TEMPLATE WidgetStatusListener_Base
|
|
: public cppu::WeakImplHelper<css::frame::XStatusListener>
|
|
{
|
|
};
|
|
|
|
class VCL_DLLPUBLIC WidgetStatusListener final : public WidgetStatusListener_Base
|
|
{
|
|
public:
|
|
WidgetStatusListener(weld::Widget* widget, const OUString& rCommand);
|
|
|
|
private:
|
|
weld::Widget* mWidget; /** The widget on which actions are performed */
|
|
|
|
/** Dispatcher. Need to keep a reference to it as long as this StatusListener exists. */
|
|
css::uno::Reference<css::frame::XDispatch> mxDispatch;
|
|
css::util::URL maCommandURL;
|
|
css::uno::Reference<css::frame::XFrame> mxFrame;
|
|
|
|
public:
|
|
SAL_DLLPRIVATE void SAL_CALL
|
|
statusChanged(const css::frame::FeatureStateEvent& rEvent) override;
|
|
|
|
SAL_DLLPRIVATE void SAL_CALL disposing(const css::lang::EventObject& /*Source*/) override;
|
|
|
|
const css::uno::Reference<css::frame::XFrame>& getFrame() const { return mxFrame; }
|
|
|
|
void startListening();
|
|
|
|
void dispose();
|
|
};
|
|
|
|
class VCL_DLLPUBLIC EntryFormatter : public Formatter
|
|
{
|
|
public:
|
|
EntryFormatter(weld::Entry& rEntry);
|
|
EntryFormatter(weld::FormattedSpinButton& rSpinButton);
|
|
|
|
weld::Entry& get_widget() { return m_rEntry; }
|
|
|
|
// public Formatter overrides, drives interactions with the Entry
|
|
SAL_DLLPRIVATE virtual Selection GetEntrySelection() const override;
|
|
SAL_DLLPRIVATE virtual OUString GetEntryText() const override;
|
|
SAL_DLLPRIVATE virtual void SetEntryText(const OUString& rText, const Selection& rSel) override;
|
|
SAL_DLLPRIVATE virtual void SetEntryTextColor(const Color* pColor) override;
|
|
SAL_DLLPRIVATE virtual SelectionOptions GetEntrySelectionOptions() const override;
|
|
SAL_DLLPRIVATE virtual void FieldModified() override;
|
|
|
|
// public Formatter overrides, drives optional SpinButton settings
|
|
SAL_DLLPRIVATE virtual void ClearMinValue() override;
|
|
SAL_DLLPRIVATE virtual void SetMinValue(double dMin) override;
|
|
SAL_DLLPRIVATE virtual void ClearMaxValue() override;
|
|
SAL_DLLPRIVATE virtual void SetMaxValue(double dMin) override;
|
|
|
|
SAL_DLLPRIVATE virtual void SetSpinSize(double dStep) override;
|
|
|
|
void SetEntrySelectionOptions(SelectionOptions eOptions) { m_eOptions = eOptions; }
|
|
|
|
/* EntryFormatter will set listeners to "changed" and "focus-out" of the
|
|
Entry so users that want to add their own listeners to those must set
|
|
them through this formatter and not directly on that entry.
|
|
|
|
If EntryFormatter is used with a weld::FormattedSpinButton this is
|
|
handled transparently by the FormattedSpinButton for the user and the
|
|
handlers can be set on the FormattedSpinButton
|
|
*/
|
|
void connect_changed(const Link<weld::Entry&, void>& rLink) { m_aModifyHdl = rLink; }
|
|
void connect_focus_out(const Link<weld::Widget&, void>& rLink) { m_aFocusOutHdl = rLink; }
|
|
|
|
SAL_DLLPRIVATE virtual ~EntryFormatter() override;
|
|
|
|
private:
|
|
weld::Entry& m_rEntry;
|
|
weld::FormattedSpinButton* m_pSpinButton;
|
|
Link<weld::Entry&, void> m_aModifyHdl;
|
|
Link<weld::Widget&, void> m_aFocusOutHdl;
|
|
SelectionOptions m_eOptions;
|
|
DECL_DLLPRIVATE_LINK(ModifyHdl, weld::Entry&, void);
|
|
DECL_DLLPRIVATE_LINK(FocusOutHdl, weld::Widget&, void);
|
|
SAL_DLLPRIVATE void Init();
|
|
|
|
// private Formatter overrides
|
|
SAL_DLLPRIVATE virtual void UpdateCurrentValue(double dCurrentValue) override;
|
|
};
|
|
|
|
class VCL_DLLPUBLIC DoubleNumericFormatter final : public EntryFormatter
|
|
{
|
|
public:
|
|
DoubleNumericFormatter(weld::Entry& rEntry);
|
|
DoubleNumericFormatter(weld::FormattedSpinButton& rSpinButton);
|
|
|
|
SAL_DLLPRIVATE virtual ~DoubleNumericFormatter() override;
|
|
|
|
private:
|
|
SAL_DLLPRIVATE virtual bool CheckText(const OUString& sText) const override;
|
|
|
|
SAL_DLLPRIVATE virtual void FormatChanged(FORMAT_CHANGE_TYPE nWhat) override;
|
|
SAL_DLLPRIVATE void ResetConformanceTester();
|
|
|
|
std::unique_ptr<validation::NumberValidator> m_pNumberValidator;
|
|
};
|
|
|
|
class VCL_DLLPUBLIC LongCurrencyFormatter final : public EntryFormatter
|
|
{
|
|
public:
|
|
LongCurrencyFormatter(weld::Entry& rEntry);
|
|
LongCurrencyFormatter(weld::FormattedSpinButton& rSpinButton);
|
|
|
|
void SetUseThousandSep(bool b);
|
|
void SetCurrencySymbol(const OUString& rStr);
|
|
|
|
SAL_DLLPRIVATE virtual ~LongCurrencyFormatter() override;
|
|
|
|
private:
|
|
DECL_DLLPRIVATE_LINK(FormatOutputHdl, LinkParamNone*, bool);
|
|
DECL_DLLPRIVATE_LINK(ParseInputHdl, sal_Int64*, TriState);
|
|
|
|
SAL_DLLPRIVATE void Init();
|
|
|
|
OUString m_aCurrencySymbol;
|
|
bool m_bThousandSep;
|
|
};
|
|
|
|
class VCL_DLLPUBLIC TimeFormatter final : public EntryFormatter
|
|
{
|
|
public:
|
|
TimeFormatter(weld::Entry& rEntry);
|
|
TimeFormatter(weld::FormattedSpinButton& rSpinButton);
|
|
|
|
void SetExtFormat(ExtTimeFieldFormat eFormat);
|
|
void SetDuration(bool bDuration);
|
|
void SetTimeFormat(TimeFieldFormat eTimeFormat);
|
|
|
|
void SetMin(const tools::Time& rNewMin);
|
|
void SetMax(const tools::Time& rNewMax);
|
|
|
|
void SetTime(const tools::Time& rNewTime);
|
|
tools::Time GetTime();
|
|
|
|
virtual ~TimeFormatter() override;
|
|
|
|
private:
|
|
DECL_DLLPRIVATE_LINK(FormatOutputHdl, LinkParamNone*, bool);
|
|
DECL_DLLPRIVATE_LINK(ParseInputHdl, sal_Int64*, TriState);
|
|
DECL_DLLPRIVATE_LINK(CursorChangedHdl, weld::Entry&, void);
|
|
|
|
SAL_DLLPRIVATE void Init();
|
|
|
|
SAL_DLLPRIVATE static tools::Time ConvertValue(int nValue);
|
|
SAL_DLLPRIVATE static int ConvertValue(const tools::Time& rTime);
|
|
|
|
SAL_DLLPRIVATE OUString FormatNumber(int nValue) const;
|
|
|
|
TimeFieldFormat m_eFormat;
|
|
TimeFormat m_eTimeFormat;
|
|
bool m_bDuration;
|
|
};
|
|
|
|
class VCL_DLLPUBLIC DateFormatter final : public EntryFormatter
|
|
{
|
|
public:
|
|
DateFormatter(weld::Entry& rEntry);
|
|
|
|
void SetMin(const Date& rNewMin);
|
|
void SetMax(const Date& rNewMax);
|
|
|
|
void SetDate(const Date& rNewDate);
|
|
Date GetDate();
|
|
|
|
void SetExtDateFormat(ExtDateFieldFormat eFormat);
|
|
void SetShowDateCentury(bool bShowCentury);
|
|
|
|
virtual ~DateFormatter() override;
|
|
|
|
private:
|
|
DECL_DLLPRIVATE_LINK(FormatOutputHdl, LinkParamNone*, bool);
|
|
DECL_DLLPRIVATE_LINK(ParseInputHdl, sal_Int64*, TriState);
|
|
DECL_DLLPRIVATE_LINK(CursorChangedHdl, weld::Entry&, void);
|
|
|
|
SAL_DLLPRIVATE void Init();
|
|
SAL_DLLPRIVATE CalendarWrapper& GetCalendarWrapper() const;
|
|
|
|
SAL_DLLPRIVATE OUString FormatNumber(int nValue) const;
|
|
|
|
ExtDateFieldFormat m_eFormat;
|
|
mutable std::unique_ptr<CalendarWrapper> m_xCalendarWrapper;
|
|
};
|
|
|
|
class VCL_DLLPUBLIC PatternFormatter final
|
|
{
|
|
public:
|
|
PatternFormatter(weld::Entry& rEntry);
|
|
~PatternFormatter();
|
|
|
|
weld::Entry& get_widget() { return m_rEntry; }
|
|
|
|
void SetMask(const OString& rEditMask, const OUString& rLiteralMask);
|
|
void SetStrictFormat(bool bStrict);
|
|
void ReformatAll();
|
|
|
|
/* PatternFormatter will set listeners to "changed", "focus-out", "focus-in"
|
|
and "key-press" of the Entry so users that want to add their own listeners
|
|
to those must set them through this formatter and not directly on that entry.
|
|
*/
|
|
void connect_changed(const Link<weld::Entry&, void>& rLink) { m_aModifyHdl = rLink; }
|
|
void connect_focus_out(const Link<weld::Widget&, void>& rLink) { m_aFocusOutHdl = rLink; }
|
|
void connect_focus_in(const Link<weld::Widget&, void>& rLink) { m_aFocusInHdl = rLink; }
|
|
void connect_key_press(const Link<const KeyEvent&, bool>& rLink) { m_aKeyPressHdl = rLink; }
|
|
|
|
SAL_DLLPRIVATE void Modify();
|
|
|
|
private:
|
|
weld::Entry& m_rEntry;
|
|
Link<weld::Entry&, void> m_aModifyHdl;
|
|
Link<weld::Widget&, void> m_aFocusInHdl;
|
|
Link<weld::Widget&, void> m_aFocusOutHdl;
|
|
Link<const KeyEvent&, bool> m_aKeyPressHdl;
|
|
bool m_bStrictFormat;
|
|
bool m_bSameMask;
|
|
bool m_bReformat;
|
|
bool m_bInPattKeyInput;
|
|
OString m_aEditMask;
|
|
OUString m_aLiteralMask;
|
|
|
|
SAL_DLLPRIVATE void EntryGainFocus();
|
|
SAL_DLLPRIVATE void EntryLostFocus();
|
|
DECL_DLLPRIVATE_LINK(ModifyHdl, weld::Entry&, void);
|
|
DECL_DLLPRIVATE_LINK(FocusInHdl, weld::Widget&, void);
|
|
DECL_DLLPRIVATE_LINK(FocusOutHdl, weld::Widget&, void);
|
|
DECL_DLLPRIVATE_LINK(KeyInputHdl, const KeyEvent&, bool);
|
|
};
|
|
|
|
class VCL_DLLPUBLIC ButtonPressRepeater final
|
|
: public std::enable_shared_from_this<ButtonPressRepeater>
|
|
{
|
|
private:
|
|
weld::Button& m_rButton;
|
|
AutoTimer m_aRepeat;
|
|
const Link<Button&, void> m_aLink;
|
|
const Link<const CommandEvent&, void> m_aContextLink;
|
|
bool m_bModKey;
|
|
|
|
DECL_DLLPRIVATE_LINK(MousePressHdl, const MouseEvent&, bool);
|
|
DECL_DLLPRIVATE_LINK(MouseReleaseHdl, const MouseEvent&, bool);
|
|
DECL_DLLPRIVATE_LINK(RepeatTimerHdl, Timer*, void);
|
|
|
|
public:
|
|
ButtonPressRepeater(weld::Button& rButton, const Link<Button&, void>& rLink,
|
|
const Link<const CommandEvent&, void>& rContextLink
|
|
= Link<const CommandEvent&, void>());
|
|
void Stop() { m_aRepeat.Stop(); }
|
|
bool IsModKeyPressed() const { return m_bModKey; }
|
|
};
|
|
|
|
/*
|
|
If a TreeView is used as a list, rather than a tree, and DnD should just
|
|
reorder rows, then this can be used to implement that.
|
|
|
|
Because the TreeView doesn't want or need subnodes, the drop target can be
|
|
simply visually indicated as being between rows (the issue of a final drop
|
|
location of a child of the drop target doesn't arise), and the meaning of
|
|
what a drop before or after the last row should do is unambiguous.
|
|
*/
|
|
class VCL_DLLPUBLIC ReorderingDropTarget : public DropTargetHelper
|
|
{
|
|
weld::TreeView& m_rTreeView;
|
|
|
|
protected:
|
|
virtual sal_Int8 AcceptDrop(const AcceptDropEvent& rEvt) override;
|
|
virtual sal_Int8 ExecuteDrop(const ExecuteDropEvent& rEvt) override;
|
|
|
|
public:
|
|
ReorderingDropTarget(weld::TreeView& rTreeView);
|
|
};
|
|
|
|
// get the row the iterator is on
|
|
VCL_DLLPUBLIC size_t GetAbsPos(const weld::TreeView& rTreeView, const weld::TreeIter& rIter);
|
|
|
|
// an entry is visible if all parents are expanded
|
|
VCL_DLLPUBLIC bool IsEntryVisible(const weld::TreeView& rTreeView, const weld::TreeIter& rIter);
|
|
|
|
// A Parent's Children are turned into Children of the Parent which comes next in hierarchy
|
|
VCL_DLLPUBLIC void RemoveParentKeepChildren(weld::TreeView& rTreeView,
|
|
const weld::TreeIter& rParent);
|
|
|
|
// return the min height of a weld::Entry
|
|
VCL_DLLPUBLIC int GetMinimumEditHeight();
|
|
|
|
// return the weld::Window of the SalFrame rOutWin is in, and convert rRect
|
|
// from relative to rOutWin to relative to that weld::Window suitable for use
|
|
// with popup_at_rect
|
|
VCL_DLLPUBLIC weld::Window* GetPopupParent(vcl::Window& rOutWin, tools::Rectangle& rRect);
|
|
|
|
// Use Application::GetDefaultDevice to set the PointFont rFont to the OutputDevice
|
|
VCL_DLLPUBLIC void SetPointFont(OutputDevice& rDevice, const vcl::Font& rFont);
|
|
}
|
|
|
|
#endif
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|