diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 05:54:39 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 05:54:39 +0000 |
commit | 267c6f2ac71f92999e969232431ba04678e7437e (patch) | |
tree | 358c9467650e1d0a1d7227a21dac2e3d08b622b2 /include/vcl/ITiledRenderable.hxx | |
parent | Initial commit. (diff) | |
download | libreoffice-267c6f2ac71f92999e969232431ba04678e7437e.tar.xz libreoffice-267c6f2ac71f92999e969232431ba04678e7437e.zip |
Adding upstream version 4:24.2.0.upstream/4%24.2.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'include/vcl/ITiledRenderable.hxx')
-rw-r--r-- | include/vcl/ITiledRenderable.hxx | 390 |
1 files changed, 390 insertions, 0 deletions
diff --git a/include/vcl/ITiledRenderable.hxx b/include/vcl/ITiledRenderable.hxx new file mode 100644 index 0000000000..be6c050ad3 --- /dev/null +++ b/include/vcl/ITiledRenderable.hxx @@ -0,0 +1,390 @@ +/* -*- 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/. + * + */ + +#pragma once + +#include <sfx2/viewsh.hxx> +#include <tools/gen.hxx> +#include <rtl/ustring.hxx> +#include <vcl/dllapi.h> +#include <vcl/ptrstyle.hxx> +#include <vcl/vclptr.hxx> +#include <map> +#include <com/sun/star/datatransfer/XTransferable.hpp> +#include <basegfx/range/b2drange.hxx> + +namespace com::sun::star::beans { struct PropertyValue; } +namespace com::sun::star::datatransfer::clipboard { class XClipboard; } +namespace com::sun::star::uno { template <class interface_type> class Reference; } +namespace com::sun::star::uno { template <typename > class Sequence; } +namespace vcl { class Window; } +namespace tools { class JsonWriter; } + +class VirtualDevice; + +namespace vcl +{ + /* + * Map directly to css cursor styles to avoid further mapping in the client. + * Gtk (via gdk_cursor_new_from_name) also supports the same css cursor styles. + * + * This was created partially with help of the mappings in gtkdata.cxx. + * The list is incomplete as some cursor style simply aren't supported + * by css, it might turn out to be worth mapping some of these missing cursors + * to available cursors? + */ + extern const std::map <PointerStyle, OString> gaLOKPointerMap; + + +class VCL_DLLPUBLIC SAL_LOPLUGIN_ANNOTATE("crosscast") ITiledRenderable +{ +public: + + typedef std::map<OUString, OUString> StringMap; + + virtual ~ITiledRenderable(); + + /** + * Paint a tile to a given VirtualDevice. + * + * Output parameters are measured in pixels, tile parameters are in + * twips. + */ + virtual void paintTile( VirtualDevice &rDevice, + int nOutputWidth, + int nOutputHeight, + int nTilePosX, + int nTilePosY, + tools::Long nTileWidth, + tools::Long nTileHeight ) = 0; + + /** + * Get the document size in twips. + */ + virtual Size getDocumentSize() = 0; + + /** + * Get the data area size (in Calc last column and row). + */ + virtual Size getDataArea(long /*nPart*/) + { + return Size(1, 1); + } + + /** + * Set the document "part", i.e. slide for a slideshow, and + * tab for a spreadsheet. + * bool bAllowChangeFocus - used to not disturb other users while editing when + * setPart is used for tile rendering only + */ + virtual void setPart( int /*nPart*/, bool /*bAllowChangeFocus*/ = true ) {} + + /** + * Get the number of parts -- see setPart for further details. + */ + virtual int getParts() + { + return 1; + } + + /** + * Get the currently displayed/selected part -- see setPart for further + * details. + */ + virtual int getPart() + { + return 0; + } + + /** + * Get the name of the currently displayed part, i.e. sheet in a spreadsheet + * or slide in a presentation. + */ + virtual OUString getPartName(int) + { + return OUString(); + } + + /** + * Get the vcl::Window for the document being edited + */ + virtual VclPtr<vcl::Window> getDocWindow() = 0; + + /** + * Get the hash of the currently displayed part, i.e. sheet in a spreadsheet + * or slide in a presentation. + */ + virtual OUString getPartHash(int nPart) = 0; + + /// @see lok::Document::setPartMode(). + virtual void setPartMode(int) {} + + /** + * Get the currently used EditMode (supported in Impress). + */ + virtual int getEditMode() + { + return 0; + } + + /** + * Set the currently used EditMode (supported in Impress). + */ + virtual void setEditMode(int) {} + + /** + * Setup various document properties that are needed for the document to + * be renderable via tiled rendering. + */ + virtual void initializeForTiledRendering(const css::uno::Sequence<css::beans::PropertyValue>& rArguments) = 0; + + /** + * Posts a keyboard event on the document. + * + * @see lok::Document::postKeyEvent(). + */ + virtual void postKeyEvent(int nType, int nCharCode, int nKeyCode) = 0; + + /** + * Posts a mouse event on the document. + * + * @see lok::Document::postMouseEvent(). + */ + virtual void postMouseEvent(int nType, int nX, int nY, int nCount, int nButtons, int nModifier) = 0; + + /** + * Sets the start or end of a text selection. + * + * @see lok::Document::setTextSelection(). + */ + virtual void setTextSelection(int nType, int nX, int nY) = 0; + + /** + * Gets the selection as a transferable for later processing + */ + virtual css::uno::Reference<css::datatransfer::XTransferable> getSelection() = 0; + + /** + * Adjusts the graphic selection. + * + * @see lok::Document::setGraphicSelection(). + */ + virtual void setGraphicSelection(int nType, int nX, int nY) = 0; + + /** + * @see lok::Document::resetSelection(). + */ + virtual void resetSelection() = 0; + + /** + * @see lok::Document::getPartPageRectangles(). + */ + virtual OUString getPartPageRectangles() + { + return OUString(); + } + + /** + * Get position and content of row/column headers of Calc documents. + * + * @param rRectangle - if not empty, then limit the output only to the area of this rectangle + * @return a JSON describing position/content of rows/columns + */ + virtual void getRowColumnHeaders(const tools::Rectangle& /*rRectangle*/, tools::JsonWriter& /*rJsonWriter*/) + { + } + + /** + * Generates a serialization of the active (Calc document) sheet's geometry data. + * + * @param bColumns - if true, the column widths/hidden/filtered/groups data + * are included depending on the settings of the flags bSizes, bHidden, + * bFiltered and bGroups. + * @param bRows - if true, the row heights/hidden/filtered/groups data + * are included depending on the settings of the flags bSizes, bHidden, + * bFiltered and bGroups. + * @bSizes - if true, the column-widths and/or row-heights data (represented as a list of spans) + * are included depending on the settings of the flags bColumns and bRows. + * @bHidden - if true, the hidden columns and/or rows data (represented as a list of spans) + * are included depending on the settings of the flags bColumns and bRows. + * @bFiltered - if true, the filtered columns and/or rows data (represented as a list of spans) + * are included depending on the settings of the flags bColumns and bRows. + * @bGroups - if true, the column grouping and/or row grouping data + * are included depending on the settings of the flags bColumns and bRows. + * @return serialization of the active sheet's geometry data as OString. + */ + virtual OString getSheetGeometryData(bool /*bColumns*/, bool /*bRows*/, bool /*bSizes*/, + bool /*bHidden*/, bool /*bFiltered*/, bool /*bGroups*/) + { + return ""_ostr; + } + + /** + * Get position and size of cell cursor in Calc - as JSON in the + * current' views' co-ordinate system. + * (This could maybe also be used for tables in Writer/Impress in future?) + */ + virtual void getCellCursor(tools::JsonWriter& /*rJsonWriter*/) + { + } + + virtual PointerStyle getPointer() = 0; + + /// Sets the clipboard of the component. + virtual void setClipboard(const css::uno::Reference<css::datatransfer::clipboard::XClipboard>& xClipboard) = 0; + + /// If the current contents of the clipboard is something we can paste. + virtual bool isMimeTypeSupported() = 0; + + /** + * Save the client's view so that we can compute the right zoom level + * for the mouse events. + * @param nTilePixelWidth - tile width in pixels + * @param nTilePixelHeight - tile height in pixels + * @param nTileTwipWidth - tile width in twips + * @param nTileTwipHeight - tile height in twips + */ + virtual void setClientZoom(int /*nTilePixelWidth*/, + int /*nTilePixelHeight*/, + int /*nTileTwipWidth*/, + int /*nTileTwipHeight*/) + {} + + /// @see lok::Document::setClientVisibleArea(). + virtual void setClientVisibleArea(const tools::Rectangle& /*rRectangle*/) + { + } + + /** + * Show/Hide a single row/column header outline for Calc documents. + * + * @param bColumn - if we are dealing with a column or row group + * @param nLevel - the level to which the group belongs + * @param nIndex - the group entry index + * @param bHidden - the new group state (collapsed/expanded) + */ + virtual void setOutlineState(bool /*bColumn*/, int /*nLevel*/, int /*nIndex*/, bool /*bHidden*/) + { + return; + } + + /// Implementation for + /// lok::Document::getCommandValues(".uno:AcceptTrackedChanges") when there + /// is no matching UNO API. + virtual void getTrackedChanges(tools::JsonWriter&) + { + } + + /// Implementation for + /// lok::Document::getCommandValues(".uno:TrackedChangeAuthors"). + virtual void getTrackedChangeAuthors(tools::JsonWriter& /*rJsonWriter*/) + { + } + + /// Implementation for + /// lok::Document::getCommandValues(".uno:ViewAnnotations"); + virtual void getPostIts(tools::JsonWriter& /*rJsonWriter*/) + { + } + + /// Implementation for + /// lok::Document::getCommandValues(".uno:ViewAnnotationsPosition"); + virtual void getPostItsPos(tools::JsonWriter& /*rJsonWriter*/) + { + } + + /// Implementation for + /// lok::Document::getCommandValues(".uno:RulerState"); + virtual void getRulerState(tools::JsonWriter& /*rJsonWriter*/) + { + } + + /* + * Used for sheets in spreadsheet documents, + * and slides in presentation documents. + */ + virtual OUString getPartInfo(int /*nPart*/) + { + return OUString(); + } + + /** + * Select/Unselect a document "part", i.e. slide for a slideshow, and + * tab for a spreadsheet(?). + * nSelect: 0 to deselect, 1 to select, and 2 to toggle. + */ + virtual void selectPart(int /*nPart*/, int /*nSelect*/) {} + + /** + * Move selected pages/slides to a new position. + * nPosition: the new position to move to. + * bDuplicate: to copy (true), or to move (false). + */ + virtual void moveSelectedParts(int /*nPosition*/, bool /*bDuplicate*/) {} + + /// @see lok::Document::completeFunction(). + virtual void completeFunction(const OUString& /*rFunctionName*/) + { + } + + /** + * It can happen that the underlying implementation is being disposed, but + * somebody is trying to access the data... + */ + virtual bool isDisposed() const + { + return false; + } + + /** + * Execute a form field event in the document. + * E.g. select an item from a drop down field's list. + */ + virtual void executeFromFieldEvent(const StringMap&) + { + } + + /** + * Returns the rectangles of the input search result JSON + */ + virtual std::vector<basegfx::B2DRange> getSearchResultRectangles(const char* /*pPayload*/) + { + return std::vector<basegfx::B2DRange>(); + } + + /** + * Execute a content control event in the document. + * E.g. select a list item from a drop down content control. + */ + virtual void executeContentControlEvent(const StringMap&) {} + + /** + * Allow / disable drawing current text edit (used in Impress for slide previews) + */ + virtual void setPaintTextEdit(bool) {} + + /// Decides if it's OK to call getCommandValues(rCommand). + virtual bool supportsCommand(std::u16string_view /*rCommand*/) { return false; } + + /// Returns a json mapping of the possible values for the given command. + virtual void getCommandValues(tools::JsonWriter& /*rJsonWriter*/, std::string_view /*rCommand*/) + { + } + + /** + * Returns an opaque string reflecting the render state of a component + * eg. 'PD' - P for non-printing-characters, D for dark-mode. + * @param pViewShell the view to get the options from, if nullptr the current view shell is used + */ + virtual OString getViewRenderState(SfxViewShell* = nullptr) { return rtl::OString(); } +}; +} // namespace vcl + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |