1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
/************************************************************************
*
* Copyright (C) 2009-2025 IRCAD France
* Copyright (C) 2012-2019 IHU Strasbourg
*
* This file is part of Sight.
*
* Sight is free software: you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Sight is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Sight. If not, see <https://www.gnu.org/licenses/>.
*
***********************************************************************/
#pragma once
#include <sight/ui/__/config.hpp>
#include "ui/__/layout/view.hpp"
#include <core/base.hpp>
#include <list>
#include <map>
namespace sight::ui::layout
{
/**
* @brief Defines the base for cardinal layout manager.
*/
class SIGHT_UI_CLASS_API cardinal : public view
{
public:
SIGHT_DECLARE_CLASS(cardinal, ui::layout::view);
/// Defines all possible positions for a CardinalLayout
enum align
{
center,
right,
left,
bottom,
top
};
using registry_key_t = std::string;
class view_info
{
public:
align m_align {center};
std::pair<int, int> m_min_size {-1, -1};
std::pair<int, int> m_max_size {std::numeric_limits<int>::max(), std::numeric_limits<int>::max()};
bool m_visible {true};
bool m_is_resizable {true};
int m_position {0};
int m_layer {0};
int m_row {0};
std::pair<bool, std::string> m_caption {false, ""};
bool m_use_scroll_bar {false};
std::string m_tool_tip;
/// Background color. When given an empty string, a default background is used. To use another color, set an
/// hexadecimal value (it has to start with "#").
std::string m_background_color;
/// Defines a qss key to apply style
std::string m_qss_key;
};
SIGHT_UI_API cardinal() = default;
SIGHT_UI_API ~cardinal() override = default;
/**
* @brief Initializes cardinal layout manager. Must be called before the layout creation.
*
* Example of configuration with cardinal layout.
* @code{.xml}
<service uid="subView2" type="sight::module::ui::view" auto_connect="false" >
<gui>
<layout type="ui::layout::cardinal" >
<view caption="CardinalView1" align="center" />
<view caption="CardinalView2" align="right" minWidth="400" />
<view caption="CardinalView3" align="bottom" minHeight="400" />
</layout>
</gui>
<registry>
<view sid="view1" />
<view sid="view2" />
<view sid="view3" />
</registry>
</service>
@endcode
* - \<layout type="ui::layout::cardinal" \> : define a cardinal layout.
* - \<view caption="CardinalView1" align="center" /\> : define a new view with following attribute
* - \b caption : name of the view (display on the screen).
* - \b align {center | bottom | top | right | left}: define the position of the view
* - \b minWidth : minimal width of the view
* - \b minHeight : minimal height of the view
* - \b resizable {true | false}: define if the view can be resized.
* - \b position : indicates the sequential position, starting with zero. It uses if more than one view as the
* same align value (available only with wxWidget see wxAuiManager in wxWidgets documentation for more details).
* - \b layer : available only with wxWidget. See wxAuiManager in wxWidgets documentation for more details
* - \b row : use to place several view next to each other (available only with wxWidget). See wxAuiManager in
* wxWidgets documentation for more details
* - \b visible {true | false} : define if the view is visible or not.
* - \b toolTip : string that will be displayed next to the mouse pointer when it lies over the view.
* - \b backgroundColor (optional) : (hexadecimal format starting with "#") background color.
*/
SIGHT_UI_API void initialize(const ui::config_t& _configuration) override;
SIGHT_UI_API static const registry_key_t REGISTRY_KEY;
protected:
//------------------------------------------------------------------------------
std::list<view_info> get_views_info()
{
return m_views;
}
private:
static const std::map<std::string, align> STRING_TO_ALIGN;
/// Saves layout configuration definition
std::list<view_info> m_views;
};
} // namespace sight::ui::layout
|