Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/LibreOffice/include/sfx2/   (Office von Apache Version 25.8.3.2©)  Datei vom 5.10.2025 mit Größe 4 kB image not shown  

Quelle  infobar.hxx   Sprache: 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_SFX2_INFOBAR_HXX
#define INCLUDED_SFX2_INFOBAR_HXX

#include <vector>

#include <basegfx/color/bcolor.hxx>

#include <sfx2/childwin.hxx>
#include <sfx2/dllapi.h>
#include <vcl/InterimItemWindow.hxx>

// These must match the values in offapi/com/sun/star/frame/InfobarType.idl
enum class InfobarType
{
    INFO = 0,
    SUCCESS = 1,
    WARNING = 2,
    DANGER = 3
};

class InfobarData
{
public:
    OUString msId;
    OUString msPrimaryMessage;
    OUString msSecondaryMessage;
    InfobarType maInfobarType;
    bool mbShowCloseButton;
};

/** SfxChildWindow for positioning the InfoBar in the view.
  */

class SFX2_DLLPUBLIC SfxInfoBarContainerChild final : public SfxChildWindow
{
private:
    SfxBindings* m_pBindings;

public:
    SfxInfoBarContainerChild(vcl::Window* pParent, sal_uInt16 nId, SfxBindings* pBindings,
                             SfxChildWinInfo* pInfo);
    virtual ~SfxInfoBarContainerChild() override;

    SFX_DECL_CHILDWINDOW_WITHID(SfxInfoBarContainerChild);

    void Update();
};

class ExtraButton;

/** Class representing a single InfoBar to be added in a SfxInfoBarContainerWindow.
  */

class SFX2_DLLPUBLIC SfxInfoBarWindow final : public InterimItemWindow
{
private:
    OUString m_sId;
    InfobarType m_eType;
    Size m_aMessageSize;
    Size m_aOrigMessageSize;
    bool m_bLayingOut;
    std::unique_ptr<weld::Image> m_xImage;
    std::unique_ptr<weld::Label> m_xPrimaryMessage;
    std::unique_ptr<weld::TextView> m_xSecondaryMessage;
    std::unique_ptr<weld::Container> m_xButtonBox;
    std::unique_ptr<weld::Toolbar> m_xCloseBtn;
    std::vector<std::unique_ptr<ExtraButton>> m_aActionBtns;

    DECL_DLLPRIVATE_LINK(SizeAllocHdl, const Size&, void);

    void SetForeAndBackgroundColors(InfobarType eType);
    void SetCloseButtonImage();

public:
    SfxInfoBarWindow(vcl::Window* parent, OUString sId, const OUString& sPrimaryMessage,
                     const OUString& sSecondaryMessage, InfobarType InfobarType,
                     bool bShowCloseButton);
    Size DoLayout();
    virtual void Layout() override;
    virtual ~SfxInfoBarWindow() override;
    virtual void dispose() override;

    const OUString& getId() const { return m_sId; }
    void Update(const OUString& sPrimaryMessage, const OUString& sSecondaryMessage,
                InfobarType eType);
    basegfx::BColor m_aBackgroundColor;
    basegfx::BColor m_aForegroundColor;

    /** Add button to Infobar.
      * Infobar takes ownership of the button so the button is
      * destroyed when the infobar gets destroyed.
      *
      * The optional "pCommand" is used by extensions, via XInfobarProvider, to
      * dispatch pCommand on click.
      */

    weld::Button& addButton(const OUString* pCommand = nullptr);

    void SetCommandHandler(weld::Button& rBtn, const OUString& aCommand);

private:
    DECL_DLLPRIVATE_LINK(CloseHandler, const OUString&, void);
};

class SfxInfoBarContainerWindow final : public vcl::Window
{
private:
    SfxInfoBarContainerChild* m_pChildWin;
    std::vector<VclPtr<SfxInfoBarWindow>> m_pInfoBars;
    Idle m_aLayoutIdle;
    bool m_bResizing;

    DECL_LINK(DoUpdateLayout, Timer*, void);

public:
    SfxInfoBarContainerWindow(SfxInfoBarContainerChild* pChildWin);
    virtual ~SfxInfoBarContainerWindow() override;
    virtual void dispose() override;

    VclPtr<SfxInfoBarWindow> appendInfoBar(const OUString& sId, const OUString& sPrimaryMessage,
                                           const OUString& sSecondaryMessage, InfobarType ibType,
                                           bool bShowCloseButton);
    VclPtr<SfxInfoBarWindow> getInfoBar(std::u16string_view sId);
    bool hasInfoBarWithID(std::u16string_view sId);
    void removeInfoBar(VclPtr<SfxInfoBarWindow> const& pInfoBar);
    static bool isInfobarEnabled(std::u16string_view sId);

    void TriggerUpdateLayout();

    virtual void Resize() override;
};

#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Messung V0.5
C=93 H=96 G=94

¤ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.