/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
/*
* 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/.
*/
#pragma once
#include <test/testdllapi.hxx>
#include <com/sun/star/accessibility/XAccessible.hpp>
#include <com/sun/star/uno/Reference.hxx>
#include <LibreOfficeKit/LibreOfficeKitEnums.h>
#include <rtl/ustring.hxx>
#include <vcl/window.hxx>
namespace test
{
/**
* @ brief Base helper class to send events to a window .
*
* Implementations of this helper will usually just wrap an implementation of post * Event * ( ) calls .
* This class is mostly useful to encapsulate the calls when getting the target window is not
* trivial or is only relevant to sending events , and to have a generic event poster interface .
*
* Additionally , this class provides simplified helpers to send event pairs , like key down / up , or
* text + commit , to make it easier on the common case for callers .
*/
class OOO_DLLPUBLIC_TEST EventPosterHelperBase
{
public :
virtual ~EventPosterHelperBase(){};
/** @see SfxLokHelper::postKeyEventAsync */
virtual void postKeyEventAsync(int nType, int nCharCode, int nKeyCode) const = 0 ;
/** Posts a full key down/up cycle */
void postKeyEventAsync(int nCharCode, int nKeyCode) const
{
postKeyEventAsync(LOK_KEYEVENT_KEYINPUT, nCharCode, nKeyCode);
postKeyEventAsync(LOK_KEYEVENT_KEYUP, nCharCode, nKeyCode);
}
/** @see SfxLokHelper::postExtTextEventAsync */
virtual void postExtTextEventAsync(int nType, const OUString& rText) const = 0 ;
/** Posts a full text input + commit sequence */
void postExtTextEventAsync(const OUString& rText) const
{
postExtTextEventAsync(LOK_EXT_TEXTINPUT, rText);
postExtTextEventAsync(LOK_EXT_TEXTINPUT_END, rText);
}
};
/**
* @ brief Helper to send events to a window .
*
* This helper basically just wraps SfxLokHelper : : post * EventAsync ( ) calls to hold the target window
* reference in the class .
*/
class OOO_DLLPUBLIC_TEST EventPosterHelper : public EventPosterHelperBase
{
protected :
VclPtr<vcl::Window> mxWindow;
public :
EventPosterHelper(void )
: mxWindow(nullptr)
{
}
EventPosterHelper(VclPtr<vcl::Window> xWindow)
: mxWindow(xWindow)
{
}
EventPosterHelper(vcl::Window* pWindow)
: mxWindow(pWindow)
{
}
vcl::Window* getWindow() const { return mxWindow; }
void setWindow(VclPtr<vcl::Window> xWindow) { mxWindow = xWindow; }
void setWindow(vcl::Window* pWindow) { mxWindow = pWindow; }
explicit operator bool () const { return mxWindow && !mxWindow->isDisposed(); }
bool operator !() const { return !bool (*this ); }
using EventPosterHelperBase::postKeyEventAsync;
using EventPosterHelperBase::postExtTextEventAsync;
/** @see SfxLokHelper::postKeyEventAsync */
virtual void postKeyEventAsync(int nType, int nCharCode, int nKeyCode) const override;
/** @see SfxLokHelper::postExtTextEventAsync */
virtual void postExtTextEventAsync(int nType, const OUString& rText) const override;
};
/**
* @ brief Accessibility - specialized helper to send events to a window .
*
* This augments @ c test : : EventPosterHelper to simplify usage in accessibility tests .
*/
class OOO_DLLPUBLIC_TEST AccessibleEventPosterHelper : public EventPosterHelper
{
public :
AccessibleEventPosterHelper(void )
: EventPosterHelper()
{
}
AccessibleEventPosterHelper(const css::uno::Reference<css::accessibility::XAccessible>& xAcc)
{
setWindow(xAcc);
}
/**
* @ brief Sets the window on which post events based on an accessible object inside it .
* @ param xAcc An accessible object inside a toplevel .
*
* This method tries and find the top level window containing @ p xAcc to use it to post events .
*
* This currently relies on a toplevel accessible being a @ c VCLXWindow , and requires that
* window ' s output device to be set ( @ see VCLXWindow : : GetWindow ( ) ) .
*/
void setWindow(css::uno::Reference<css::accessibility::XAccessible> xAcc);
};
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
Messung V0.5 in Prozent C=90 H=100 G=95
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-10-01)
¤
*© Formatika GbR, Deutschland