Merge pull request #116312 from KoBeWi/5000_docks_below_surface
Add extra bottom dock slots
This commit is contained in:
commit
30faebb208
7 changed files with 64 additions and 15 deletions
|
|
@ -137,7 +137,7 @@
|
|||
Allows placing the dock in the vertical dock slots on either side of the editor.
|
||||
</constant>
|
||||
<constant name="DOCK_LAYOUT_HORIZONTAL" value="2" enum="DockLayout" is_bitfield="true">
|
||||
Allows placing the dock in the editor's bottom panel.
|
||||
Allows placing the dock in the horizontal dock slots at the bottom.
|
||||
</constant>
|
||||
<constant name="DOCK_LAYOUT_FLOATING" value="4" enum="DockLayout" is_bitfield="true">
|
||||
Allows making the dock floating (opened as a separate window).
|
||||
|
|
@ -175,7 +175,13 @@
|
|||
<constant name="DOCK_SLOT_BOTTOM" value="8" enum="DockSlot">
|
||||
Bottom panel.
|
||||
</constant>
|
||||
<constant name="DOCK_SLOT_MAX" value="9" enum="DockSlot">
|
||||
<constant name="DOCK_SLOT_BOTTOM_L" value="9" enum="DockSlot">
|
||||
Dock slot at the bottom, below bottom panel, on the left side.
|
||||
</constant>
|
||||
<constant name="DOCK_SLOT_BOTTOM_R" value="10" enum="DockSlot">
|
||||
Dock slot at the bottom, below bottom panel, on the right side.
|
||||
</constant>
|
||||
<constant name="DOCK_SLOT_MAX" value="11" enum="DockSlot">
|
||||
Represents the size of the [enum DockSlot] enum.
|
||||
</constant>
|
||||
</constants>
|
||||
|
|
|
|||
|
|
@ -270,3 +270,13 @@ SideDockTabContainer::SideDockTabContainer(EditorDock::DockSlot p_slot, const Re
|
|||
set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
set_use_hidden_tabs_for_min_size(true);
|
||||
}
|
||||
|
||||
BottomSideDockTabContainer::BottomSideDockTabContainer(EditorDock::DockSlot p_slot, const Rect2i &p_slot_rect) :
|
||||
DockTabContainer(p_slot) {
|
||||
grid_rect = p_slot_rect;
|
||||
layout = EditorDock::DOCK_LAYOUT_HORIZONTAL;
|
||||
|
||||
set_custom_minimum_size(Size2(0, 170 * EDSCALE));
|
||||
set_h_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
set_use_hidden_tabs_for_min_size(true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -120,3 +120,10 @@ class SideDockTabContainer : public DockTabContainer {
|
|||
public:
|
||||
SideDockTabContainer(EditorDock::DockSlot p_slot, const Rect2i &p_slot_rect);
|
||||
};
|
||||
|
||||
class BottomSideDockTabContainer : public DockTabContainer {
|
||||
GDCLASS(BottomSideDockTabContainer, DockTabContainer);
|
||||
|
||||
public:
|
||||
BottomSideDockTabContainer(EditorDock::DockSlot p_slot, const Rect2i &p_slot_rect);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -133,6 +133,8 @@ void EditorDock::_bind_methods() {
|
|||
BIND_ENUM_CONSTANT(DOCK_SLOT_RIGHT_UR);
|
||||
BIND_ENUM_CONSTANT(DOCK_SLOT_RIGHT_BR);
|
||||
BIND_ENUM_CONSTANT(DOCK_SLOT_BOTTOM);
|
||||
BIND_ENUM_CONSTANT(DOCK_SLOT_BOTTOM_L);
|
||||
BIND_ENUM_CONSTANT(DOCK_SLOT_BOTTOM_R);
|
||||
BIND_ENUM_CONSTANT(DOCK_SLOT_MAX);
|
||||
|
||||
GDVIRTUAL_BIND(_update_layout, "layout");
|
||||
|
|
|
|||
|
|
@ -59,6 +59,8 @@ public:
|
|||
DOCK_SLOT_RIGHT_UR,
|
||||
DOCK_SLOT_RIGHT_BR,
|
||||
DOCK_SLOT_BOTTOM,
|
||||
DOCK_SLOT_BOTTOM_L,
|
||||
DOCK_SLOT_BOTTOM_R,
|
||||
DOCK_SLOT_MAX
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -155,7 +155,7 @@ public:
|
|||
class DockSlotGrid : public Control {
|
||||
GDCLASS(DockSlotGrid, Control);
|
||||
|
||||
static constexpr Vector2i GRID_SIZE = Vector2i(6, 6);
|
||||
static constexpr Vector2i GRID_SIZE = Vector2i(6, 8);
|
||||
static constexpr Vector2i MARGINS = Vector2i(4, 8);
|
||||
static constexpr Vector2i CELL_SIZE = Vector2i(24, 12);
|
||||
static constexpr int TABS_PER_CELL = 3;
|
||||
|
|
|
|||
|
|
@ -8528,28 +8528,34 @@ EditorNode::EditorNode() {
|
|||
main_vbox->add_child(title_bar);
|
||||
#endif
|
||||
|
||||
DockSplitContainer *main_vsplit = memnew(DockSplitContainer);
|
||||
main_vsplit->set_name("DockVSplitMain");
|
||||
main_vsplit->set_vertical(true);
|
||||
main_vsplit->set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
main_vbox->add_child(main_vsplit);
|
||||
|
||||
main_hsplit = memnew(DockSplitContainer);
|
||||
main_hsplit->set_name("DockHSplitMain");
|
||||
main_hsplit->set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
main_vbox->add_child(main_hsplit);
|
||||
main_vsplit->add_child(main_hsplit);
|
||||
|
||||
left_l_vsplit = memnew(DockSplitContainer);
|
||||
left_l_vsplit->set_name("DockVSplitLeftL");
|
||||
left_l_vsplit->set_vertical(true);
|
||||
main_hsplit->add_child(left_l_vsplit);
|
||||
|
||||
DockTabContainer *dock_slots[EditorDock::DOCK_SLOT_MAX];
|
||||
LocalVector<DockTabContainer *> dock_slots;
|
||||
{
|
||||
DockTabContainer *dock_container = memnew(SideDockTabContainer(EditorDock::DOCK_SLOT_LEFT_UL, Rect2i(0, 0, 1, 3)));
|
||||
dock_container->set_name("DockSlotLeftUL");
|
||||
left_l_vsplit->add_child(dock_container);
|
||||
dock_slots[dock_container->dock_slot] = dock_container;
|
||||
dock_slots.push_back(dock_container);
|
||||
}
|
||||
{
|
||||
DockTabContainer *dock_container = memnew(SideDockTabContainer(EditorDock::DOCK_SLOT_LEFT_BL, Rect2i(0, 3, 1, 3)));
|
||||
dock_container->set_name("DockSlotLeftBL");
|
||||
left_l_vsplit->add_child(dock_container);
|
||||
dock_slots[dock_container->dock_slot] = dock_container;
|
||||
dock_slots.push_back(dock_container);
|
||||
}
|
||||
|
||||
left_r_vsplit = memnew(DockSplitContainer);
|
||||
|
|
@ -8560,13 +8566,13 @@ EditorNode::EditorNode() {
|
|||
DockTabContainer *dock_container = memnew(SideDockTabContainer(EditorDock::DOCK_SLOT_LEFT_UR, Rect2i(1, 0, 1, 3)));
|
||||
dock_container->set_name("DockSlotLeftUR");
|
||||
left_r_vsplit->add_child(dock_container);
|
||||
dock_slots[dock_container->dock_slot] = dock_container;
|
||||
dock_slots.push_back(dock_container);
|
||||
}
|
||||
{
|
||||
DockTabContainer *dock_container = memnew(SideDockTabContainer(EditorDock::DOCK_SLOT_LEFT_BR, Rect2i(1, 3, 1, 3)));
|
||||
dock_container->set_name("DockSlotLeftBR");
|
||||
left_r_vsplit->add_child(dock_container);
|
||||
dock_slots[dock_container->dock_slot] = dock_container;
|
||||
dock_slots.push_back(dock_container);
|
||||
}
|
||||
|
||||
VBoxContainer *center_vb = memnew(VBoxContainer);
|
||||
|
|
@ -8589,13 +8595,13 @@ EditorNode::EditorNode() {
|
|||
DockTabContainer *dock_container = memnew(SideDockTabContainer(EditorDock::DOCK_SLOT_RIGHT_UL, Rect2i(4, 0, 1, 3)));
|
||||
dock_container->set_name("DockSlotRightUL");
|
||||
right_l_vsplit->add_child(dock_container);
|
||||
dock_slots[dock_container->dock_slot] = dock_container;
|
||||
dock_slots.push_back(dock_container);
|
||||
}
|
||||
{
|
||||
DockTabContainer *dock_container = memnew(SideDockTabContainer(EditorDock::DOCK_SLOT_RIGHT_BL, Rect2i(4, 3, 1, 3)));
|
||||
dock_container->set_name("DockSlotRightBL");
|
||||
right_l_vsplit->add_child(dock_container);
|
||||
dock_slots[dock_container->dock_slot] = dock_container;
|
||||
dock_slots.push_back(dock_container);
|
||||
}
|
||||
|
||||
right_r_vsplit = memnew(DockSplitContainer);
|
||||
|
|
@ -8606,13 +8612,29 @@ EditorNode::EditorNode() {
|
|||
DockTabContainer *dock_container = memnew(SideDockTabContainer(EditorDock::DOCK_SLOT_RIGHT_UR, Rect2i(5, 0, 1, 3)));
|
||||
dock_container->set_name("DockSlotRightUR");
|
||||
right_r_vsplit->add_child(dock_container);
|
||||
dock_slots[dock_container->dock_slot] = dock_container;
|
||||
dock_slots.push_back(dock_container);
|
||||
}
|
||||
{
|
||||
DockTabContainer *dock_container = memnew(SideDockTabContainer(EditorDock::DOCK_SLOT_RIGHT_BR, Rect2i(5, 3, 1, 3)));
|
||||
dock_container->set_name("DockSlotRightBR");
|
||||
right_r_vsplit->add_child(dock_container);
|
||||
dock_slots[dock_container->dock_slot] = dock_container;
|
||||
dock_slots.push_back(dock_container);
|
||||
}
|
||||
|
||||
DockSplitContainer *bottom_hsplit = memnew(DockSplitContainer);
|
||||
bottom_hsplit->set_name("DockHSplitBottom");
|
||||
main_vsplit->add_child(bottom_hsplit);
|
||||
{
|
||||
DockTabContainer *dock_container = memnew(BottomSideDockTabContainer(EditorDock::DOCK_SLOT_BOTTOM_L, Rect2i(0, 6, 3, 2)));
|
||||
dock_container->set_name("DockSlotBottomL");
|
||||
bottom_hsplit->add_child(dock_container);
|
||||
dock_slots.push_back(dock_container);
|
||||
}
|
||||
{
|
||||
DockTabContainer *dock_container = memnew(BottomSideDockTabContainer(EditorDock::DOCK_SLOT_BOTTOM_R, Rect2i(3, 6, 3, 2)));
|
||||
dock_container->set_name("DockSlotBottomR");
|
||||
bottom_hsplit->add_child(dock_container);
|
||||
dock_slots.push_back(dock_container);
|
||||
}
|
||||
|
||||
editor_dock_manager = memnew(EditorDockManager);
|
||||
|
|
@ -8625,8 +8647,8 @@ EditorNode::EditorNode() {
|
|||
|
||||
editor_dock_manager->set_hsplit(main_hsplit);
|
||||
|
||||
for (int i = 0; i < EditorDock::DOCK_SLOT_BOTTOM; i++) {
|
||||
editor_dock_manager->register_dock_slot(dock_slots[i]);
|
||||
for (DockTabContainer *dock_container : dock_slots) {
|
||||
editor_dock_manager->register_dock_slot(dock_container);
|
||||
}
|
||||
|
||||
editor_layout_save_delay_timer = memnew(Timer);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue