/* This file is part of KDDockWidgets. SPDX-FileCopyrightText: 2020 Klarälvdalens Datakonsult AB, a KDAB Group company Author: Sérgio Martins SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only Contact KDAB at for commercial licensing options. */ #pragma once #include "kddockwidgets/docks_export.h" #include "kddockwidgets/QtCompat_p.h" #include namespace KDDockWidgets { namespace Core { class Item; class LayoutingHost; enum LayoutingGuestFlag { None = 0, IsCentralFrame = 1 }; Q_DECLARE_FLAGS(LayoutingGuestFlags, LayoutingGuestFlag) /// The interface graphical components need to implement in order to be hosted by a layout /// The layout engine doesn't know about any GUI, only about LayoutingHost and LayoutingGuest /// This allows to keep the layouting engine separate from the rest of KDDW and even /// reused by non-KDDW projects class DOCKS_EXPORT LayoutingGuest { public: LayoutingGuest(); virtual ~LayoutingGuest(); virtual Size minSize() const = 0; virtual Size maxSizeHint() const = 0; virtual void setGeometry(Rect r) = 0; virtual void setVisible(bool is) = 0; virtual Rect geometry() const = 0; virtual void setHost(LayoutingHost *parent) = 0; virtual LayoutingHost *host() const = 0; virtual QString id() const = 0; virtual LayoutingGuestFlags flags() const { return None; } virtual bool freed() const { return false; } Core::Item *layoutItem() const; void setLayoutItem(Item *); virtual void setLayoutItem_impl(Core::Item *) { } virtual std::string toDebugString() const { return {}; } KDBindings::Signal hostChanged; KDBindings::Signal<> beingDestroyed; KDBindings::Signal<> layoutInvalidated; private: LayoutingGuest(const LayoutingGuest &) = delete; LayoutingGuest &operator=(const LayoutingGuest &) = delete; class Private; Private *const d; }; } }