Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 16 additions & 16 deletions editor/audio/editor_audio_buses.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,17 @@
#include "core/input/input.h"
#include "core/io/resource_saver.h"
#include "core/os/keyboard.h"
#include "editor/docks/editor_dock_manager.h"
#include "editor/docks/filesystem_dock.h"
#include "editor/editor_node.h"
#include "editor/editor_string_names.h"
#include "editor/editor_undo_redo_manager.h"
#include "editor/gui/editor_bottom_panel.h"
#include "editor/gui/editor_file_dialog.h"
#include "editor/settings/editor_command_palette.h"
#include "editor/settings/editor_settings.h"
#include "editor/themes/editor_scale.h"
#include "editor/themes/editor_theme_manager.h"
#include "scene/gui/box_container.h"
#include "scene/gui/separator.h"
#include "scene/main/timer.h"
#include "scene/resources/font.h"
Expand Down Expand Up @@ -1111,7 +1112,7 @@ void EditorAudioBuses::_rebuild_buses() {

EditorAudioBuses *EditorAudioBuses::register_editor() {
EditorAudioBuses *audio_buses = memnew(EditorAudioBuses);
EditorNode::get_bottom_panel()->add_item(TTRC("Audio"), audio_buses, ED_SHORTCUT_AND_COMMAND("bottom_panels/toggle_audio_bottom_panel", TTRC("Toggle Audio Bottom Panel"), KeyModifierMask::ALT | Key::A));
EditorDockManager::get_singleton()->add_dock(audio_buses);
return audio_buses;
}

Expand Down Expand Up @@ -1158,16 +1159,6 @@ void EditorAudioBuses::_notification(int p_what) {
}

_update_file_label_size();

// Setting `the split_offset` value once to the minimum value required to display the entire contents of the `EditorAudioBuses`.
// This is used instead of setting a custom_minimum_size or similar, as this may cause the panel to be outside the window (see GH-26835).
// If `EditorAudioBuses` is selected when starting the editor, this code will be executed first and then the saved layout will load.
if (use_default_editor_size) {
Comment thread
KoBeWi marked this conversation as resolved.
use_default_editor_size = false;
int offset = EditorNode::get_bottom_panel()->get_combined_minimum_size().y + get_combined_minimum_size().y;
offset += Object::cast_to<Control>(bus_hb->get_child(0))->get_combined_minimum_size().y; // Master audio bus always exists.
EditorNode::get_singleton()->set_center_split_offset(-offset);
}
} break;
}
}
Expand Down Expand Up @@ -1336,8 +1327,17 @@ void EditorAudioBuses::_bind_methods() {
}

EditorAudioBuses::EditorAudioBuses() {
set_name(TTRC("Audio"));
set_icon_name("AudioStreamPlayer");
set_dock_shortcut(ED_SHORTCUT_AND_COMMAND("bottom_panels/toggle_audio_bottom_panel", TTRC("Toggle Audio Dock"), KeyModifierMask::ALT | Key::A));
set_default_slot(DockConstants::DOCK_SLOT_BOTTOM);
set_available_layouts(EditorDock::DOCK_LAYOUT_HORIZONTAL | EditorDock::DOCK_LAYOUT_FLOATING);

VBoxContainer *main_vb = memnew(VBoxContainer);
add_child(main_vb);

top_hb = memnew(HBoxContainer);
add_child(top_hb);
main_vb->add_child(top_hb);

edited_path = ResourceUID::ensure_path(GLOBAL_GET("audio/buses/default_bus_layout"));

Expand Down Expand Up @@ -1390,15 +1390,15 @@ EditorAudioBuses::EditorAudioBuses() {
bus_scroll = memnew(ScrollContainer);
bus_scroll->set_v_size_flags(SIZE_EXPAND_FILL);
bus_scroll->set_custom_minimum_size(Size2(0, 40 * EDSCALE));
add_child(bus_scroll);
main_vb->add_child(bus_scroll);
bus_hb = memnew(HBoxContainer);
bus_hb->set_v_size_flags(SIZE_EXPAND_FILL);
bus_scroll->add_child(bus_hb);

save_timer = memnew(Timer);
save_timer->set_wait_time(0.8);
save_timer->set_one_shot(true);
add_child(save_timer);
main_vb->add_child(save_timer);
save_timer->connect("timeout", callable_mp(this, &EditorAudioBuses::_server_save));

set_v_size_flags(SIZE_EXPAND_FILL);
Expand All @@ -1418,7 +1418,7 @@ EditorAudioBuses::EditorAudioBuses() {
}

void EditorAudioBuses::open_layout(const String &p_path) {
EditorNode::get_bottom_panel()->make_item_visible(this);
make_visible();

const String path = ResourceUID::ensure_path(p_path);

Expand Down
9 changes: 4 additions & 5 deletions editor/audio/editor_audio_buses.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@

#pragma once

#include "editor/docks/editor_dock.h"
#include "editor/plugins/editor_plugin.h"
#include "scene/gui/box_container.h"
#include "scene/gui/button.h"
#include "scene/gui/control.h"
#include "scene/gui/line_edit.h"
Expand All @@ -47,6 +47,7 @@

class EditorAudioBuses;
class EditorFileDialog;
class HBoxContainer;
class Timer;

class EditorAudioBus : public PanelContainer {
Expand Down Expand Up @@ -148,8 +149,8 @@ class EditorAudioBusDrop : public Control {
void _notification(int p_what);
};

class EditorAudioBuses : public VBoxContainer {
GDCLASS(EditorAudioBuses, VBoxContainer);
class EditorAudioBuses : public EditorDock {
GDCLASS(EditorAudioBuses, EditorDock);

HBoxContainer *top_hb = nullptr;

Expand Down Expand Up @@ -194,8 +195,6 @@ class EditorAudioBuses : public VBoxContainer {
EditorFileDialog *file_dialog = nullptr;
bool new_layout = false;

bool use_default_editor_size = true;

void _file_dialog_callback(const String &p_string);

protected:
Expand Down
10 changes: 10 additions & 0 deletions editor/editor_node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6091,6 +6091,10 @@ void EditorNode::_load_editor_layout() {

if (overridden_default_layout >= 0) {
_layout_menu_option(overridden_default_layout);
} else {
ep.step(TTR("Loading docks..."), 1, true);
// Initialize some default values.
bottom_panel->load_layout_from_config(default_layout, EDITOR_NODE_CONFIG_SECTION);
}
} else {
ep.step(TTR("Loading docks..."), 1, true);
Expand Down Expand Up @@ -8799,6 +8803,12 @@ EditorNode::EditorNode() {
default_layout->set_value(docks_section, "dock_split_" + itos(i + 1), 0);
}

{
Dictionary offsets;
offsets["Audio"] = -450;
default_layout->set_value(EDITOR_NODE_CONFIG_SECTION, "bottom_panel_offsets", offsets);
}

_update_layouts_menu();

// Bottom panels.
Expand Down
28 changes: 13 additions & 15 deletions editor/gui/editor_bottom_panel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,20 +79,16 @@ void EditorBottomPanel::_theme_changed() {
}

void EditorBottomPanel::set_bottom_panel_offset(int p_offset) {
Control *current_tab = get_current_tab_control();
EditorDock *current_tab = Object::cast_to<EditorDock>(get_current_tab_control());
if (current_tab) {
String name = current_tab->get_name();
String key = name.to_snake_case();
dock_offsets[key] = p_offset;
dock_offsets[current_tab->get_effective_layout_key()] = p_offset;
}
}

int EditorBottomPanel::get_bottom_panel_offset() {
Control *current_tab = get_current_tab_control();
EditorDock *current_tab = Object::cast_to<EditorDock>(get_current_tab_control());
if (current_tab) {
String name = current_tab->get_name();
String key = name.to_snake_case();
return dock_offsets[key];
return dock_offsets[current_tab->get_effective_layout_key()];
}
return 0;
}
Expand Down Expand Up @@ -126,19 +122,21 @@ void EditorBottomPanel::_repaint() {
}

void EditorBottomPanel::save_layout_to_config(Ref<ConfigFile> p_config_file, const String &p_section) const {
p_config_file->set_value(p_section, "selected_bottom_panel_item", get_current_tab() != -1 ? Variant(get_current_tab()) : Variant());

Dictionary offsets;
for (const KeyValue<String, int> &E : dock_offsets) {
p_config_file->set_value(p_section, "dock_" + E.key + "_offset", E.value);
offsets[E.key] = E.value;
}
p_config_file->set_value(p_section, "bottom_panel_offsets", offsets);
}

void EditorBottomPanel::load_layout_from_config(Ref<ConfigFile> p_config_file, const String &p_section) {
for (const Control *dock : bottom_docks) {
String name = dock->get_name();
String key = name.to_snake_case();
dock_offsets[key] = p_config_file->get_value(p_section, "dock_" + key + "_offset", 0);
const Dictionary offsets = p_config_file->get_value(p_section, "bottom_panel_offsets", Dictionary());
const LocalVector<Variant> offset_list = offsets.get_key_list();

for (const Variant &v : offset_list) {
dock_offsets[v] = offsets[v];
}
Comment thread
KoBeWi marked this conversation as resolved.
_update_center_split_offset();
}

void EditorBottomPanel::make_item_visible(Control *p_item, bool p_visible, bool p_ignore_lock) {
Expand Down
2 changes: 1 addition & 1 deletion editor/gui/editor_bottom_panel.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class EditorBottomPanel : public TabContainer {

int previous_tab = -1;
bool lock_panel_switching = false;
LocalVector<Control *> bottom_docks;
LocalVector<EditorDock *> bottom_docks;
LocalVector<Ref<Shortcut>> dock_shortcuts;
HashMap<String, int> dock_offsets;

Expand Down
Loading