fixes for dock motion

This commit is contained in:
Juan Linietsky 2015-06-14 00:41:08 -03:00
parent 8228fea02f
commit 7674bad6c4
2 changed files with 62 additions and 2 deletions

View file

@ -3339,6 +3339,10 @@ void EditorNode::_bind_methods() {
ObjectTypeDB::bind_method("_dock_pre_popup",&EditorNode::_dock_pre_popup);
ObjectTypeDB::bind_method("_dock_split_dragged",&EditorNode::_dock_split_dragged);
ObjectTypeDB::bind_method("_save_docks",&EditorNode::_save_docks);
ObjectTypeDB::bind_method("_dock_popup_exit",&EditorNode::_dock_popup_exit);
ObjectTypeDB::bind_method("_dock_move_left",&EditorNode::_dock_move_left);
ObjectTypeDB::bind_method("_dock_move_right",&EditorNode::_dock_move_right);
@ -3427,7 +3431,6 @@ void EditorNode::_dock_select_input(const InputEvent& p_input) {
Vector2 point(p_input.mouse_motion.x,p_input.mouse_motion.y);
dock_select_rect_over=-1;
int nrect = -1;
for(int i=0;i<DOCK_SLOT_MAX;i++) {
if (dock_select_rect[i].has_point(point)) {
@ -3435,11 +3438,18 @@ void EditorNode::_dock_select_input(const InputEvent& p_input) {
break;
}
}
if (nrect!=dock_select_rect_over) {
dock_select->update();
dock_select_rect_over=nrect;
}
if (nrect==-1)
return;
if (p_input.type==InputEvent::MOUSE_BUTTON && p_input.mouse_button.button_index==1 && p_input.mouse_button.pressed && dock_popup_selected!=nrect) {
Control *dock = dock_slot[dock_popup_selected]->get_current_tab_control();
if (dock) {
@ -3476,12 +3486,46 @@ void EditorNode::_dock_select_input(const InputEvent& p_input) {
}
}
void EditorNode::_dock_popup_exit() {
dock_select_rect_over=-1;
dock_select->update();
}
void EditorNode::_dock_pre_popup(int p_which) {
print_line("pre popup? "+itos(p_which));
dock_popup_selected=p_which;
}
void EditorNode::_dock_move_left() {
if (dock_popup_selected<0 || dock_popup_selected>=DOCK_SLOT_MAX)
return;
Control *current = dock_slot[dock_popup_selected]->get_tab_control( dock_slot[dock_popup_selected]->get_current_tab() );
Control *prev = dock_slot[dock_popup_selected]->get_tab_control( dock_slot[dock_popup_selected]->get_current_tab()-1 );
if (!current || !prev)
return;
dock_slot[dock_popup_selected]->move_child(current,prev->get_index());
dock_slot[dock_popup_selected]->set_current_tab( dock_slot[dock_popup_selected]->get_current_tab()-1 );
dock_select->update();
_save_docks();
}
void EditorNode::_dock_move_right() {
Control *current = dock_slot[dock_popup_selected]->get_tab_control( dock_slot[dock_popup_selected]->get_current_tab() );
Control *next = dock_slot[dock_popup_selected]->get_tab_control( dock_slot[dock_popup_selected]->get_current_tab()+1 );
if (!current || !next)
return;
dock_slot[dock_popup_selected]->move_child(next,current->get_index());
dock_slot[dock_popup_selected]->set_current_tab( dock_slot[dock_popup_selected]->get_current_tab()+1 );
dock_select->update();
_save_docks();
}
void EditorNode::_dock_select_draw(){
Size2 s = dock_select->get_size();
s.y/=2.0;
@ -3552,6 +3596,7 @@ void EditorNode::_dock_select_draw(){
r.pos+=Vector2(2,5);
r.size-=Vector2(4,7);
if (i==dock_select_rect_over) {
dock_select->draw_rect(r,used_selected);
} else if (dock_slot[i]->get_child_count()==0) {
@ -3690,6 +3735,14 @@ void EditorNode::_load_docks() {
else
splits[i]->hide();
}
for(int i=0;i<DOCK_SLOT_MAX;i++) {
if (!dock_slot[i]->is_hidden() && dock_slot[i]->get_tab_count()) {
dock_slot[i]->set_current_tab(0);
}
}
}
EditorNode::EditorNode() {
@ -3865,12 +3918,15 @@ EditorNode::EditorNode() {
dock_tab_move_left = memnew( ToolButton );
dock_tab_move_left->set_icon(theme->get_icon("Back","EditorIcons"));
dock_tab_move_left->set_focus_mode(Control::FOCUS_NONE);
dock_tab_move_left->connect("pressed",this,"_dock_move_left");
//dock_tab_move_left->set_h_size_flags(Control::SIZE_EXPAND_FILL);
dock_hb->add_child(dock_tab_move_left);
dock_hb->add_spacer();
dock_tab_move_right = memnew( ToolButton );
dock_tab_move_right->set_icon(theme->get_icon("Forward","EditorIcons"));
dock_tab_move_right->set_focus_mode(Control::FOCUS_NONE);
dock_tab_move_right->connect("pressed",this,"_dock_move_right");
//dock_tab_move_right->set_h_size_flags(Control::SIZE_EXPAND_FILL);
dock_hb->add_child(dock_tab_move_right);
dock_vb->add_child(dock_hb);
@ -3879,6 +3935,7 @@ EditorNode::EditorNode() {
dock_select->set_custom_minimum_size(Size2(128,64));
dock_select->connect("input_event",this,"_dock_select_input");
dock_select->connect("draw",this,"_dock_select_draw");
dock_select->connect("mouse_exit",this,"_dock_popup_exit");
dock_select->set_v_size_flags(Control::SIZE_EXPAND_FILL);
dock_vb->add_child(dock_select);

View file

@ -455,9 +455,12 @@ class EditorNode : public Node {
bool _find_scene_in_use(Node* p_node,const String& p_path) const;
void _dock_select_input(const InputEvent& p_input);
void _dock_move_left();
void _dock_move_right();
void _dock_select_draw();
void _dock_pre_popup(int p_which);
void _dock_split_dragged(int ofs);
void _dock_popup_exit();
void _save_docks();
void _load_docks();