ability to reposition scene tabs with drag & drop

This commit is contained in:
Jakub Grzesik
2017-07-05 15:44:53 +02:00
parent 159b1fc65f
commit 29c2aabdaf
4 changed files with 51 additions and 2 deletions
+37 -1
View File
@@ -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");