From ed5640d8b587fbcfed7dd7967f3de04b37a76f26 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 11:06:44 +0200 Subject: Adding upstream version 4:7.4.7. Signed-off-by: Daniel Baumann --- include/cui/cuicharmap.hxx | 194 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 include/cui/cuicharmap.hxx (limited to 'include/cui/cuicharmap.hxx') diff --git a/include/cui/cuicharmap.hxx b/include/cui/cuicharmap.hxx new file mode 100644 index 000000000..688fb570e --- /dev/null +++ b/include/cui/cuicharmap.hxx @@ -0,0 +1,194 @@ +/* -*- 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_CUI_CUICHARMAP_HXX +#define INCLUDED_CUI_CUICHARMAP_HXX + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +using namespace ::com::sun::star; +class SubsetMap; + +#define CHARMAP_MAXLEN 32 + +namespace svx +{ +struct SvxShowCharSetItem; +} + +/// Provides the show characters or texts in a drawing area with special sizes and fonts. +class CUI_DLLPUBLIC SvxShowText final : public weld::CustomWidgetController +{ +private: + ScopedVclPtr m_xVirDev; + OUString m_sText; + tools::Long mnY; + bool mbCenter; + vcl::Font m_aFont; + + virtual void Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle&) override; + virtual void Resize() override; + virtual void SetDrawingArea(weld::DrawingArea* pDrawingArea) override; + +public: + SvxShowText(const VclPtr& rVirDev); + + void SetFont(const vcl::Font& rFont); + vcl::Font const& GetFont() const { return m_aFont; } + void SetText(const OUString& rText); + OUString const& GetText() const { return m_sText; } + void SetCentered(bool bCenter) { mbCenter = bCenter; } + + Size get_preferred_size() const { return GetDrawingArea()->get_preferred_size(); } +}; + +/** The main purpose of this dialog is to enable the use of characters + that are not easily accessible from the keyboard. */ +class CUI_DLLPUBLIC SvxCharacterMap final : public SfxDialogController +{ +private: + void init(); + + ScopedVclPtr m_xVirDev; + vcl::Font aFont; + std::unique_ptr pSubsetMap; + bool isSearchMode; + css::uno::Reference m_xFrame; + std::deque maRecentCharList; + std::deque maRecentCharFontList; + std::deque maFavCharList; + std::deque maFavCharFontList; + + SvxCharView m_aRecentCharView[16]; + SvxCharView m_aFavCharView[16]; + SvxShowText m_aShowChar; + + std::unique_ptr m_xOKBtn; + std::unique_ptr m_xFontText; + std::unique_ptr m_xFontLB; + std::unique_ptr m_xSubsetText; + std::unique_ptr m_xSubsetLB; + std::unique_ptr m_xSearchText; + std::unique_ptr m_xHexCodeText; + std::unique_ptr m_xDecimalCodeText; + std::unique_ptr m_xFavouritesBtn; + std::unique_ptr m_xCharName; + std::unique_ptr m_xRecentGrid; + std::unique_ptr m_xFavGrid; + std::unique_ptr m_xShowChar; + std::unique_ptr m_xRecentCharView[16]; + std::unique_ptr m_xFavCharView[16]; + std::unique_ptr m_xShowSet; + std::unique_ptr m_xShowSetArea; + std::unique_ptr m_xSearchSet; + std::unique_ptr m_xSearchSetArea; + + std::unique_ptr m_xOutputSet; + + enum class Radix : sal_Int16 + { + decimal = 10, + hexadecimal = 16 + }; + + DECL_DLLPRIVATE_LINK(FontSelectHdl, weld::ComboBox&, void); + DECL_DLLPRIVATE_LINK(SubsetSelectHdl, weld::ComboBox&, void); + DECL_DLLPRIVATE_LINK(CharDoubleClickHdl, SvxShowCharSet*, void); + DECL_DLLPRIVATE_LINK(CharSelectHdl, SvxShowCharSet*, void); + DECL_DLLPRIVATE_LINK(CharHighlightHdl, SvxShowCharSet*, void); + DECL_DLLPRIVATE_LINK(CharPreSelectHdl, SvxShowCharSet*, void); + DECL_DLLPRIVATE_LINK(FavClickHdl, SvxShowCharSet*, void); + DECL_DLLPRIVATE_LINK(SearchCharDoubleClickHdl, SvxShowCharSet*, void); + DECL_DLLPRIVATE_LINK(SearchCharSelectHdl, SvxShowCharSet*, void); + DECL_DLLPRIVATE_LINK(SearchCharHighlightHdl, SvxShowCharSet*, void); + DECL_DLLPRIVATE_LINK(SearchCharPreSelectHdl, SvxShowCharSet*, void); + DECL_DLLPRIVATE_LINK(DecimalCodeChangeHdl, weld::Entry&, void); + DECL_DLLPRIVATE_LINK(HexCodeChangeHdl, weld::Entry&, void); + DECL_DLLPRIVATE_LINK(CharClickHdl, SvxCharView*, void); + DECL_DLLPRIVATE_LINK(RecentClearClickHdl, SvxCharView*, void); + DECL_DLLPRIVATE_LINK(FavClearClickHdl, SvxCharView*, void); + DECL_DLLPRIVATE_LINK(RecentClearAllClickHdl, SvxCharView*, void); + DECL_DLLPRIVATE_LINK(FavClearAllClickHdl, SvxCharView*, void); + DECL_DLLPRIVATE_LINK(InsertClickHdl, weld::Button&, void); + DECL_DLLPRIVATE_LINK(FavSelectHdl, weld::Button&, void); + DECL_DLLPRIVATE_LINK(SearchUpdateHdl, weld::Entry&, void); + DECL_DLLPRIVATE_LINK(SearchFieldGetFocusHdl, weld::Widget&, void); + + static void fillAllSubsets(weld::ComboBox& rListBox); + void selectCharByCode(Radix radix); + +public: + SvxCharacterMap(weld::Widget* pParent, const SfxItemSet* pSet, + css::uno::Reference xFrame); + virtual short run() override; + + void set_title(const OUString& rTitle) { m_xDialog->set_title(rTitle); } + + const SfxItemSet* GetOutputItemSet() const { return m_xOutputSet.get(); } + + void DisableFontSelection(); + + const vcl::Font& GetCharFont() const { return aFont; } + void SetCharFont(const vcl::Font& rFont); + + void SetChar(sal_UCS4); + sal_UCS4 GetChar() const; + + void getRecentCharacterList(); //gets both recent char and recent char font list + void updateRecentCharacterList(const OUString& rChar, const OUString& rFont); + + void getFavCharacterList(); //gets both Fav char and Fav char font list + void updateFavCharacterList(const OUString& rChar, const OUString& rFont); + void deleteFavCharacterFromList(std::u16string_view rChar, std::u16string_view rFont); + bool isFavChar(std::u16string_view sTitle, std::u16string_view rFont); + + void updateRecentCharControl(); + void insertCharToDoc(const OUString& sChar); + + void updateFavCharControl(); + void setFavButtonState(std::u16string_view sTitle, std::u16string_view rFont); + + void setCharName(sal_UCS4 nDecimalValue); + + void toggleSearchView(bool state); + +private: + std::pair::const_iterator, std::deque::const_iterator> + getRecentChar(std::u16string_view sTitle, std::u16string_view rFont) const; + + std::pair::const_iterator, std::deque::const_iterator> + getFavChar(std::u16string_view sTitle, std::u16string_view rFont) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit v1.2.3