You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-11 13:10:58 +00:00
Add ability to edit editor feature profiles
Allows enabling/disabling parts of the editor and storing/loading profiles for that.
This commit is contained in:
@@ -127,6 +127,9 @@ void TabContainer::_gui_input(const Ref<InputEvent> &p_event) {
|
||||
// Activate the clicked tab.
|
||||
pos.x -= tabs_ofs_cache;
|
||||
for (int i = first_tab_cache; i <= last_tab_cache; i++) {
|
||||
if (get_tab_hidden(i)) {
|
||||
continue;
|
||||
}
|
||||
int tab_width = _get_tab_width(i);
|
||||
if (pos.x < tab_width) {
|
||||
if (!get_tab_disabled(i)) {
|
||||
@@ -216,6 +219,9 @@ void TabContainer::_notification(int p_what) {
|
||||
// Check if all tabs would fit into the header area.
|
||||
int all_tabs_width = 0;
|
||||
for (int i = 0; i < tabs.size(); i++) {
|
||||
if (get_tab_hidden(i)) {
|
||||
continue;
|
||||
}
|
||||
int tab_width = _get_tab_width(i);
|
||||
all_tabs_width += tab_width;
|
||||
|
||||
@@ -241,6 +247,9 @@ void TabContainer::_notification(int p_what) {
|
||||
all_tabs_width = 0;
|
||||
Vector<int> tab_widths;
|
||||
for (int i = first_tab_cache; i < tabs.size(); i++) {
|
||||
if (get_tab_hidden(i)) {
|
||||
continue;
|
||||
}
|
||||
int tab_width = _get_tab_width(i);
|
||||
if (all_tabs_width + tab_width > header_width && tab_widths.size() > 0)
|
||||
break;
|
||||
@@ -267,6 +276,9 @@ void TabContainer::_notification(int p_what) {
|
||||
// Draw all visible tabs.
|
||||
int x = 0;
|
||||
for (int i = 0; i < tab_widths.size(); i++) {
|
||||
if (get_tab_hidden(i)) {
|
||||
continue;
|
||||
}
|
||||
Ref<StyleBox> tab_style;
|
||||
Color font_color;
|
||||
if (get_tab_disabled(i + first_tab_cache)) {
|
||||
@@ -354,7 +366,7 @@ int TabContainer::_get_tab_width(int p_index) const {
|
||||
|
||||
ERR_FAIL_INDEX_V(p_index, get_tab_count(), 0);
|
||||
Control *control = Object::cast_to<Control>(_get_tabs()[p_index]);
|
||||
if (!control || control->is_set_as_toplevel())
|
||||
if (!control || control->is_set_as_toplevel() || get_tab_hidden(p_index))
|
||||
return 0;
|
||||
|
||||
// Get the width of the text displayed on the tab.
|
||||
@@ -765,6 +777,36 @@ bool TabContainer::get_tab_disabled(int p_tab) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
void TabContainer::set_tab_hidden(int p_tab, bool p_hidden) {
|
||||
|
||||
Control *child = _get_tab(p_tab);
|
||||
ERR_FAIL_COND(!child);
|
||||
child->set_meta("_tab_hidden", p_hidden);
|
||||
update();
|
||||
for (int i = 0; i < get_tab_count(); i++) {
|
||||
int try_tab = (p_tab + 1 + i) % get_tab_count();
|
||||
if (get_tab_disabled(try_tab) || get_tab_hidden(try_tab)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
set_current_tab(try_tab);
|
||||
return;
|
||||
}
|
||||
|
||||
//assumed no other tab can be switched to, just hide
|
||||
child->hide();
|
||||
}
|
||||
|
||||
bool TabContainer::get_tab_hidden(int p_tab) const {
|
||||
|
||||
Control *child = _get_tab(p_tab);
|
||||
ERR_FAIL_COND_V(!child, false);
|
||||
if (child->has_meta("_tab_hidden"))
|
||||
return child->get_meta("_tab_hidden");
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
void TabContainer::get_translatable_strings(List<String> *p_strings) const {
|
||||
|
||||
Vector<Control *> tabs = _get_tabs();
|
||||
|
||||
Reference in New Issue
Block a user