mirror of
https://github.com/godotengine/godot.git
synced 2026-01-06 10:11:57 +03:00
Use multiple children for dock SplitContainers
This commit is contained in:
@@ -673,8 +673,15 @@ void EditorDockManager::save_docks_to_config(Ref<ConfigFile> p_layout, const Str
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < hsplits.size(); i++) {
|
||||
p_layout->set_value(p_section, "dock_hsplit_" + itos(i + 1), int(hsplits[i]->get_split_offset() / EDSCALE));
|
||||
PackedInt32Array split_offsets = main_hsplit->get_split_offsets();
|
||||
int index = 0;
|
||||
for (int i = 0; i < vsplits.size(); i++) {
|
||||
int value = 0;
|
||||
if (vsplits[i]->is_visible() && index < split_offsets.size()) {
|
||||
value = split_offsets[index] / EDSCALE;
|
||||
index++;
|
||||
}
|
||||
p_layout->set_value(p_section, "dock_hsplit_" + itos(i + 1), value);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -755,21 +762,22 @@ void EditorDockManager::load_docks_from_config(Ref<ConfigFile> p_layout, const S
|
||||
}
|
||||
|
||||
// Load SplitContainer offsets.
|
||||
PackedInt32Array offsets;
|
||||
for (int i = 0; i < vsplits.size(); i++) {
|
||||
if (!p_layout->has_section_key(p_section, "dock_split_" + itos(i + 1))) {
|
||||
continue;
|
||||
}
|
||||
int ofs = p_layout->get_value(p_section, "dock_split_" + itos(i + 1));
|
||||
vsplits[i]->set_split_offset(ofs);
|
||||
}
|
||||
|
||||
for (int i = 0; i < hsplits.size(); i++) {
|
||||
if (!p_layout->has_section_key(p_section, "dock_hsplit_" + itos(i + 1))) {
|
||||
continue;
|
||||
// Only visible ones need a split offset for the main hsplit, even though they all have a value saved.
|
||||
if (vsplits[i]->is_visible() && p_layout->has_section_key(p_section, "dock_hsplit_" + itos(i + 1))) {
|
||||
int offset = p_layout->get_value(p_section, "dock_hsplit_" + itos(i + 1));
|
||||
offsets.push_back(offset * EDSCALE);
|
||||
}
|
||||
int ofs = p_layout->get_value(p_section, "dock_hsplit_" + itos(i + 1));
|
||||
hsplits[i]->set_split_offset(ofs * EDSCALE);
|
||||
}
|
||||
main_hsplit->set_split_offsets(offsets);
|
||||
|
||||
update_docks_menu();
|
||||
}
|
||||
|
||||
@@ -942,8 +950,8 @@ void EditorDockManager::add_vsplit(DockSplitContainer *p_split) {
|
||||
p_split->connect("dragged", callable_mp(this, &EditorDockManager::_dock_split_dragged));
|
||||
}
|
||||
|
||||
void EditorDockManager::add_hsplit(DockSplitContainer *p_split) {
|
||||
hsplits.push_back(p_split);
|
||||
void EditorDockManager::set_hsplit(DockSplitContainer *p_split) {
|
||||
main_hsplit = p_split;
|
||||
p_split->connect("dragged", callable_mp(this, &EditorDockManager::_dock_split_dragged));
|
||||
}
|
||||
|
||||
@@ -983,10 +991,6 @@ void EditorDockManager::register_dock_slot(DockConstants::DockSlot p_dock_slot,
|
||||
slot.drag_hint->set_slot(p_dock_slot);
|
||||
}
|
||||
|
||||
int EditorDockManager::get_hsplit_count() const {
|
||||
return hsplits.size();
|
||||
}
|
||||
|
||||
int EditorDockManager::get_vsplit_count() const {
|
||||
return vsplits.size();
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ private:
|
||||
|
||||
// To access splits easily by index.
|
||||
Vector<DockSplitContainer *> vsplits;
|
||||
Vector<DockSplitContainer *> hsplits;
|
||||
DockSplitContainer *main_hsplit = nullptr;
|
||||
|
||||
struct DockSlot {
|
||||
TabContainer *container = nullptr;
|
||||
@@ -133,9 +133,8 @@ public:
|
||||
void set_tab_icon_max_width(int p_max_width);
|
||||
|
||||
void add_vsplit(DockSplitContainer *p_split);
|
||||
void add_hsplit(DockSplitContainer *p_split);
|
||||
void set_hsplit(DockSplitContainer *p_split);
|
||||
void register_dock_slot(DockConstants::DockSlot p_dock_slot, TabContainer *p_tab_container, DockConstants::DockLayout p_layout);
|
||||
int get_hsplit_count() const;
|
||||
int get_vsplit_count() const;
|
||||
PopupMenu *get_docks_menu();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user