28 lines
1.2 KiB
C++
28 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include <vector>
|
|
|
|
#include <QRect>
|
|
|
|
// A widget floating over the game world view (REQ-UI-WORLD-SIZE). MainWindow places all
|
|
// of them in one ordered pass -- build button bar, then controls panel, then selection
|
|
// panel -- and each places itself into the space the earlier ones have not taken. The
|
|
// order is the priority the requirements state: the bar never moves for anyone
|
|
// (REQ-UI-BUILD-BAR), the controls panel steps around the bar (REQ-UI-CONTROLS-PANEL),
|
|
// and keeping clear of both is the selection panel's job (REQ-UI-SELECTION-PANEL).
|
|
//
|
|
// A widget never re-places itself, because what it may take depends on the widgets placed
|
|
// before it. It instead publishes FloatingLayoutInvalidatedEvent whenever its content or
|
|
// its visibility changed, and the owner re-runs the whole pass.
|
|
class FloatingPanel
|
|
{
|
|
public:
|
|
virtual ~FloatingPanel() = default;
|
|
|
|
// Sets this widget's own geometry within viewRect, keeping clear of occupiedRects --
|
|
// the geometry of every floating widget already placed in this pass, in the same
|
|
// coordinates. A widget with nothing to show hides itself and takes no space.
|
|
virtual void placeIn(const QRect& viewRect,
|
|
const std::vector<QRect>& occupiedRects) = 0;
|
|
};
|