ability to reposition scene tabs with drag & drop
This commit is contained in:
+37
-1
@@ -593,6 +593,41 @@ void Tabs::remove_tab(int p_idx) {
|
||||
_ensure_no_over_offset();
|
||||
}
|
||||
|
||||
Variant Tabs::get_drag_data(const Point2 &p_point) {
|
||||
|
||||
return get_tab_idx_at_point(p_point);
|
||||
}
|
||||
|
||||
bool Tabs::can_drop_data(const Point2 &p_point, const Variant &p_data) const {
|
||||
|
||||
return get_tab_idx_at_point(p_point) > -1;
|
||||
}
|
||||
|
||||
void Tabs::drop_data(const Point2 &p_point, const Variant &p_data) {
|
||||
|
||||
int hover_now = get_tab_idx_at_point(p_point);
|
||||
|
||||
ERR_FAIL_INDEX(hover_now, tabs.size());
|
||||
emit_signal("reposition_active_tab_request", hover_now);
|
||||
}
|
||||
|
||||
int Tabs::get_tab_idx_at_point(const Point2 &p_point) const {
|
||||
|
||||
int hover_now = -1;
|
||||
for (int i = 0; i < tabs.size(); i++) {
|
||||
|
||||
if (i < offset)
|
||||
continue;
|
||||
|
||||
Rect2 rect = get_tab_rect(i);
|
||||
if (rect.has_point(p_point)) {
|
||||
hover_now = i;
|
||||
}
|
||||
}
|
||||
|
||||
return hover_now;
|
||||
}
|
||||
|
||||
void Tabs::set_tab_align(TabAlign p_align) {
|
||||
|
||||
tab_align = p_align;
|
||||
@@ -708,7 +743,7 @@ void Tabs::ensure_tab_visible(int p_idx) {
|
||||
}
|
||||
}
|
||||
|
||||
Rect2 Tabs::get_tab_rect(int p_tab) {
|
||||
Rect2 Tabs::get_tab_rect(int p_tab) const {
|
||||
return Rect2(tabs[p_tab].ofs_cache, 0, tabs[p_tab].size_cache, get_size().height);
|
||||
}
|
||||
|
||||
@@ -743,6 +778,7 @@ void Tabs::_bind_methods() {
|
||||
ADD_SIGNAL(MethodInfo("right_button_pressed", PropertyInfo(Variant::INT, "tab")));
|
||||
ADD_SIGNAL(MethodInfo("tab_close", PropertyInfo(Variant::INT, "tab")));
|
||||
ADD_SIGNAL(MethodInfo("tab_hover", PropertyInfo(Variant::INT, "tab")));
|
||||
ADD_SIGNAL(MethodInfo("reposition_active_tab_request", PropertyInfo(Variant::INT, "idx_to")));
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "current_tab", PROPERTY_HINT_RANGE, "-1,4096,1", PROPERTY_USAGE_EDITOR), "set_current_tab", "get_current_tab");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user