some editor window changes
-ability to make dock position configurable, and it gets saved -editor starts maximized default
This commit is contained in:
parent
c845c2a827
commit
9a58960d28
14 changed files with 656 additions and 60 deletions
|
@ -98,6 +98,9 @@ static int video_driver_idx=-1;
|
|||
static int audio_driver_idx=-1;
|
||||
static String locale;
|
||||
|
||||
static bool init_maximized=false;
|
||||
static int init_screen=-1;
|
||||
|
||||
static String unescape_cmdline(const String& p_str) {
|
||||
|
||||
return p_str.replace("%20"," ");
|
||||
|
@ -384,7 +387,7 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas
|
|||
} else if (I->get()=="-e" || I->get()=="-editor") { // fonud editor
|
||||
|
||||
editor=true;
|
||||
|
||||
init_maximized=true;
|
||||
} else if (I->get()=="-nowindow") { // fullscreen
|
||||
|
||||
OS::get_singleton()->set_no_window_mode(true);
|
||||
|
@ -789,6 +792,13 @@ Error Main::setup2() {
|
|||
show_logo=false;
|
||||
#endif
|
||||
|
||||
if (init_screen!=-1) {
|
||||
OS::get_singleton()->set_current_screen(init_screen);
|
||||
}
|
||||
if (init_maximized) {
|
||||
OS::get_singleton()->set_window_maximized(true);
|
||||
}
|
||||
|
||||
if (show_logo) { //boot logo!
|
||||
String boot_logo_path=GLOBAL_DEF("application/boot_splash",String());
|
||||
bool boot_logo_scale=GLOBAL_DEF("application/boot_splash_fullsize",true);
|
||||
|
|
|
@ -548,15 +548,18 @@ void Control::_notification(int p_notification) {
|
|||
Control * parent = get_parent()->cast_to<Control>();
|
||||
|
||||
//make children reference them theme
|
||||
if (parent && data.theme.is_null() && parent->data.theme_owner)
|
||||
|
||||
if (parent && data.theme.is_null() && parent->data.theme_owner) {
|
||||
_propagate_theme_changed(parent->data.theme_owner);
|
||||
}
|
||||
|
||||
} break;
|
||||
case NOTIFICATION_UNPARENTED: {
|
||||
|
||||
//make children unreference the theme
|
||||
if (data.theme.is_null() && data.theme_owner)
|
||||
if (data.theme.is_null() && data.theme_owner) {
|
||||
_propagate_theme_changed(NULL);
|
||||
}
|
||||
|
||||
} break;
|
||||
case NOTIFICATION_MOVED_IN_PARENT: {
|
||||
|
|
|
@ -84,6 +84,48 @@ void Popup::_fix_size() {
|
|||
}
|
||||
|
||||
|
||||
void Popup::set_as_minsize() {
|
||||
|
||||
Size2 total_minsize;
|
||||
|
||||
for(int i=0;i<get_child_count();i++) {
|
||||
|
||||
Control *c=get_child(i)->cast_to<Control>();
|
||||
if (!c)
|
||||
continue;
|
||||
if (c->is_hidden())
|
||||
continue;
|
||||
|
||||
Size2 minsize = c->get_combined_minimum_size();
|
||||
|
||||
for(int j=0;j<2;j++) {
|
||||
|
||||
Margin m_beg = Margin(0+j);
|
||||
Margin m_end = Margin(2+j);
|
||||
|
||||
float margin_begin = c->get_margin(m_beg);
|
||||
float margin_end = c->get_margin(m_end);
|
||||
AnchorType anchor_begin = c->get_anchor(m_beg);
|
||||
AnchorType anchor_end = c->get_anchor(m_end);
|
||||
|
||||
if (anchor_begin == ANCHOR_BEGIN)
|
||||
minsize[j]+=margin_begin;
|
||||
if (anchor_end == ANCHOR_END)
|
||||
minsize[j]+=margin_end;
|
||||
|
||||
}
|
||||
|
||||
print_line(String(c->get_type())+": "+minsize);
|
||||
|
||||
total_minsize.width = MAX( total_minsize.width, minsize.width );
|
||||
total_minsize.height = MAX( total_minsize.height, minsize.height );
|
||||
}
|
||||
|
||||
set_size(total_minsize);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void Popup::popup_centered_minsize(const Size2& p_minsize) {
|
||||
|
||||
|
||||
|
|
|
@ -62,6 +62,7 @@ public:
|
|||
void popup_centered_ratio(float p_screen_ratio=0.75);
|
||||
void popup_centered(const Size2& p_size=Size2());
|
||||
void popup_centered_minsize(const Size2& p_minsize=Size2());
|
||||
void set_as_minsize();
|
||||
virtual void popup();
|
||||
|
||||
|
||||
|
|
|
@ -88,7 +88,22 @@ void TabContainer::_input_event(const InputEvent& p_event) {
|
|||
Ref<Font> font = get_font("font");
|
||||
Ref<Texture> incr = get_icon("increment");
|
||||
Ref<Texture> decr = get_icon("decrement");
|
||||
Ref<Texture> menu = get_icon("menu");
|
||||
Ref<Texture> menu_hl = get_icon("menu_hl");
|
||||
|
||||
if (popup && pos.x>get_size().width-menu->get_width()) {
|
||||
|
||||
|
||||
emit_signal("pre_popup_pressed");
|
||||
Vector2 pp_pos = get_global_pos();
|
||||
pp_pos.x+=get_size().width;
|
||||
pp_pos.x-=popup->get_size().width;
|
||||
pp_pos.y+=menu->get_height();
|
||||
|
||||
popup->set_global_pos( pp_pos );
|
||||
popup->popup();;
|
||||
return;
|
||||
}
|
||||
pos.x-=tabs_ofs_cache;
|
||||
|
||||
int idx=0;
|
||||
|
@ -116,17 +131,17 @@ void TabContainer::_input_event(const InputEvent& p_event) {
|
|||
String s = c->has_meta("_tab_name")?String(XL_MESSAGE(String(c->get_meta("_tab_name")))):String(c->get_name());
|
||||
int tab_width=font->get_string_size(s).width;
|
||||
|
||||
if (c->has_meta("_tab_icon")) {
|
||||
Ref<Texture> icon = c->get_meta("_tab_icon");
|
||||
if (icon.is_valid()) {
|
||||
tab_width+=icon->get_width();
|
||||
if (s!="")
|
||||
tab_width+=get_constant("hseparation");
|
||||
if (c->has_meta("_tab_icon")) {
|
||||
Ref<Texture> icon = c->get_meta("_tab_icon");
|
||||
if (icon.is_valid()) {
|
||||
tab_width+=icon->get_width();
|
||||
if (s!="")
|
||||
tab_width+=get_constant("hseparation");
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (idx==current) {
|
||||
if (idx==current) {
|
||||
|
||||
tab_width+=tab_fg->get_minimum_size().width;
|
||||
} else {
|
||||
|
@ -163,7 +178,7 @@ void TabContainer::_input_event(const InputEvent& p_event) {
|
|||
|
||||
if (found!=-1) {
|
||||
|
||||
set_current_tab(found);
|
||||
set_current_tab(found);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -194,7 +209,9 @@ void TabContainer::_notification(int p_what) {
|
|||
Ref<Texture> incr = get_icon("increment");
|
||||
Ref<Texture> incr_hl = get_icon("increment_hilite");
|
||||
Ref<Texture> decr = get_icon("decrement");
|
||||
Ref<Texture> decr_hl = get_icon("decrement_hilite");
|
||||
Ref<Texture> decr_hl = get_icon("decrement_hilite");
|
||||
Ref<Texture> menu = get_icon("menu");
|
||||
Ref<Texture> menu_hl = get_icon("menu_hl");
|
||||
Ref<Font> font = get_font("font");
|
||||
Color color_fg = get_color("font_color_fg");
|
||||
Color color_bg = get_color("font_color_bg");
|
||||
|
@ -209,6 +226,7 @@ void TabContainer::_notification(int p_what) {
|
|||
Size2 top_size = Size2( size.width, top_margin );
|
||||
|
||||
|
||||
|
||||
int w=0;
|
||||
int idx=0;
|
||||
for(int i=0;i<get_child_count();i++) {
|
||||
|
@ -227,7 +245,7 @@ void TabContainer::_notification(int p_what) {
|
|||
if (icon.is_valid()) {
|
||||
w+=icon->get_width();
|
||||
if (s!="")
|
||||
w+=get_constant("hseparation");
|
||||
w+=get_constant("hseparation");
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -245,14 +263,18 @@ void TabContainer::_notification(int p_what) {
|
|||
|
||||
int ofs;
|
||||
int limit=get_size().width;
|
||||
if (popup) {
|
||||
top_size.width-=menu->get_width();
|
||||
limit-=menu->get_width();
|
||||
}
|
||||
|
||||
|
||||
if (w<=get_size().width) {
|
||||
if (w<=limit) {
|
||||
switch(align) {
|
||||
|
||||
case ALIGN_LEFT: ofs = side_margin; break;
|
||||
case ALIGN_CENTER: ofs = (int(top_size.width) - w)/2; break;
|
||||
case ALIGN_RIGHT: ofs = int(top_size.width) - w - side_margin; break;
|
||||
case ALIGN_CENTER: ofs = (int(limit) - w)/2; break;
|
||||
case ALIGN_RIGHT: ofs = int(limit) - w - side_margin; break;
|
||||
};
|
||||
|
||||
tab_display_ofs=0;
|
||||
|
@ -364,6 +386,15 @@ void TabContainer::_notification(int p_what) {
|
|||
incr->draw(ci,Point2(limit+incr->get_width(),vofs),Color(1,1,1,notdone?1.0:0.5));
|
||||
}
|
||||
|
||||
if (popup) {
|
||||
int from = get_size().width-menu->get_width();
|
||||
|
||||
if (mouse_x_cache > from)
|
||||
menu_hl->draw(get_canvas_item(),Size2(from,0));
|
||||
else
|
||||
menu->draw(get_canvas_item(),Size2(from,0));
|
||||
}
|
||||
|
||||
panel->draw(ci, Rect2( 0, top_size.height, size.width, size.height-top_size.height));
|
||||
|
||||
} break;
|
||||
|
@ -465,6 +496,48 @@ int TabContainer::get_current_tab() const {
|
|||
return current;
|
||||
}
|
||||
|
||||
Control* TabContainer::get_tab_control(int p_idx) const {
|
||||
|
||||
int idx=0;
|
||||
|
||||
|
||||
for(int i=0;i<get_child_count();i++) {
|
||||
|
||||
Control *c = get_child(i)->cast_to<Control>();
|
||||
if (!c)
|
||||
continue;
|
||||
if (c->is_set_as_toplevel())
|
||||
continue;
|
||||
if (idx==p_idx) {
|
||||
return c;
|
||||
|
||||
}
|
||||
idx++;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
Control* TabContainer::get_current_tab_control() const {
|
||||
|
||||
int idx=0;
|
||||
|
||||
|
||||
for(int i=0;i<get_child_count();i++) {
|
||||
|
||||
Control *c = get_child(i)->cast_to<Control>();
|
||||
if (!c)
|
||||
continue;
|
||||
if (c->is_set_as_toplevel())
|
||||
continue;
|
||||
if (idx==current) {
|
||||
return c;
|
||||
|
||||
}
|
||||
idx++;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void TabContainer::remove_child_notify(Node *p_child) {
|
||||
|
||||
|
@ -635,12 +708,25 @@ Size2 TabContainer::get_minimum_size() const {
|
|||
return ms;
|
||||
}
|
||||
|
||||
void TabContainer::set_popup(Node *p_popup) {
|
||||
ERR_FAIL_NULL(p_popup);
|
||||
popup=p_popup->cast_to<Popup>();
|
||||
update();
|
||||
}
|
||||
|
||||
Popup* TabContainer::get_popup() const {
|
||||
return popup;
|
||||
}
|
||||
|
||||
|
||||
void TabContainer::_bind_methods() {
|
||||
|
||||
ObjectTypeDB::bind_method(_MD("_input_event"),&TabContainer::_input_event);
|
||||
ObjectTypeDB::bind_method(_MD("get_tab_count"),&TabContainer::get_tab_count);
|
||||
ObjectTypeDB::bind_method(_MD("set_current_tab","tab_idx"),&TabContainer::set_current_tab);
|
||||
ObjectTypeDB::bind_method(_MD("get_current_tab"),&TabContainer::get_current_tab);
|
||||
ObjectTypeDB::bind_method(_MD("get_current_tab_control:Control"),&TabContainer::get_current_tab_control);
|
||||
ObjectTypeDB::bind_method(_MD("get_tab_control:Control","idx"),&TabContainer::get_tab_control);
|
||||
ObjectTypeDB::bind_method(_MD("set_tab_align","align"),&TabContainer::set_tab_align);
|
||||
ObjectTypeDB::bind_method(_MD("get_tab_align"),&TabContainer::get_tab_align);
|
||||
ObjectTypeDB::bind_method(_MD("set_tabs_visible","visible"),&TabContainer::set_tabs_visible);
|
||||
|
@ -649,10 +735,13 @@ void TabContainer::_bind_methods() {
|
|||
ObjectTypeDB::bind_method(_MD("get_tab_title","tab_idx"),&TabContainer::get_tab_title);
|
||||
ObjectTypeDB::bind_method(_MD("set_tab_icon","tab_idx","icon:Texture"),&TabContainer::set_tab_icon);
|
||||
ObjectTypeDB::bind_method(_MD("get_tab_icon:Texture","tab_idx"),&TabContainer::get_tab_icon);
|
||||
ObjectTypeDB::bind_method(_MD("set_popup","popup:Popup"),&TabContainer::set_popup);
|
||||
ObjectTypeDB::bind_method(_MD("get_popup:Popup"),&TabContainer::get_popup);
|
||||
|
||||
ObjectTypeDB::bind_method(_MD("_child_renamed_callback"),&TabContainer::_child_renamed_callback);
|
||||
|
||||
ADD_SIGNAL(MethodInfo("tab_changed",PropertyInfo(Variant::INT,"tab")));
|
||||
ADD_SIGNAL(MethodInfo("pre_popup_pressed"));
|
||||
|
||||
ADD_PROPERTY( PropertyInfo(Variant::INT, "tab_align", PROPERTY_HINT_ENUM,"Left,Center,Right"), _SCS("set_tab_align"), _SCS("get_tab_align") );
|
||||
ADD_PROPERTY( PropertyInfo(Variant::INT, "current_tab", PROPERTY_HINT_RANGE,"-1,4096,1",PROPERTY_USAGE_EDITOR), _SCS("set_current_tab"), _SCS("get_current_tab") );
|
||||
|
@ -669,5 +758,6 @@ TabContainer::TabContainer() {
|
|||
mouse_x_cache=0;
|
||||
align=ALIGN_CENTER;
|
||||
tabs_visible=true;
|
||||
popup=NULL;
|
||||
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
|
||||
|
||||
#include "scene/gui/control.h"
|
||||
|
||||
#include "scene/gui/popup.h"
|
||||
class TabContainer : public Control {
|
||||
|
||||
OBJ_TYPE( TabContainer, Control );
|
||||
|
@ -55,6 +55,8 @@ private:
|
|||
TabAlign align;
|
||||
Control *_get_tab(int idx) const;
|
||||
int _get_top_margin() const;
|
||||
Popup *popup;
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -85,10 +87,17 @@ public:
|
|||
void set_current_tab(int p_current);
|
||||
int get_current_tab() const;
|
||||
|
||||
Control* get_tab_control(int p_idx) const;
|
||||
Control* get_current_tab_control() const;
|
||||
|
||||
virtual Size2 get_minimum_size() const;
|
||||
|
||||
virtual void get_translatable_strings(List<String> *p_strings) const;
|
||||
|
||||
void set_popup(Node *p_popup);
|
||||
Popup* get_popup() const;
|
||||
|
||||
|
||||
TabContainer();
|
||||
};
|
||||
|
||||
|
|
|
@ -655,6 +655,8 @@ void make_default_theme() {
|
|||
t->set_icon("increment_hilite","TabContainer",make_icon( scroll_button_right_hl_png));
|
||||
t->set_icon("decrement","TabContainer",make_icon( scroll_button_left_png));
|
||||
t->set_icon("decrement_hilite","TabContainer",make_icon( scroll_button_left_hl_png));
|
||||
t->set_icon("menu","TabContainer",make_icon( tab_menu_png));
|
||||
t->set_icon("menu_hilite","TabContainer",make_icon( tab_menu_hl_png));
|
||||
|
||||
t->set_font("font","TabContainer", default_font );
|
||||
|
||||
|
|
BIN
scene/resources/default_theme/tab_menu.png
Normal file
BIN
scene/resources/default_theme/tab_menu.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 222 B |
BIN
scene/resources/default_theme/tab_menu_hl.png
Normal file
BIN
scene/resources/default_theme/tab_menu_hl.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 226 B |
|
@ -379,6 +379,16 @@ static const unsigned char tab_current_png[]={
|
|||
};
|
||||
|
||||
|
||||
static const unsigned char tab_menu_png[]={
|
||||
0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xdf,0x6,0xd,0x3,0x2c,0x7,0xf7,0x85,0x69,0x73,0x0,0x0,0x0,0x1d,0x69,0x54,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x0,0x0,0x0,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x64,0x2e,0x65,0x7,0x0,0x0,0x0,0x54,0x49,0x44,0x41,0x54,0x38,0xcb,0xed,0x92,0xb1,0xd,0xc0,0x20,0x10,0x3,0x8f,0xec,0x63,0x65,0xff,0x2d,0x40,0x1e,0xe8,0xd3,0x50,0x24,0xd1,0x83,0x48,0x97,0x2,0xb7,0xb6,0x4f,0xd6,0xeb,0x61,0xeb,0x67,0xb2,0x5d,0xbe,0x66,0x4a,0x12,0x88,0x19,0x40,0xd2,0xa3,0x73,0x24,0x99,0x6,0x64,0x90,0xe8,0x1e,0xd3,0x5,0x7d,0x45,0x3,0x74,0xf3,0x3,0xb0,0xa4,0x73,0x9,0xf0,0x82,0x30,0x2a,0xaf,0x1c,0xb5,0xda,0xae,0xfb,0xbd,0xe6,0xba,0x0,0x22,0x30,0x1e,0x2c,0xd7,0x21,0xa8,0x0,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
|
||||
};
|
||||
|
||||
|
||||
static const unsigned char tab_menu_hl_png[]={
|
||||
0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xdf,0x6,0xd,0x3,0x2c,0x15,0x4,0x3c,0x18,0x3b,0x0,0x0,0x0,0x1d,0x69,0x54,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x0,0x0,0x0,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x64,0x2e,0x65,0x7,0x0,0x0,0x0,0x58,0x49,0x44,0x41,0x54,0x38,0xcb,0x63,0x60,0x18,0x5,0x83,0xc,0xbc,0x7c,0xf9,0x92,0x91,0x54,0x35,0x8c,0x58,0x14,0xfc,0xc7,0x67,0x80,0xb8,0xb8,0x38,0x8a,0x1e,0x26,0x2c,0x6a,0x2e,0x32,0x30,0x30,0x60,0x33,0xe4,0x3f,0x54,0x8e,0x1,0xaf,0xb,0xa0,0xae,0xb8,0xc8,0xc0,0xc0,0xa0,0x8b,0x24,0xff,0x9f,0x81,0x81,0xe1,0xb2,0xb8,0xb8,0xb8,0x3e,0x51,0x6,0xa0,0x19,0xc2,0x80,0x4b,0x33,0x31,0x81,0x7a,0xe1,0xe5,0xcb,0x97,0x17,0x46,0x93,0x17,0x7e,0x0,0x0,0xa,0x9a,0x1f,0x34,0xff,0x99,0xf7,0x75,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
|
||||
};
|
||||
|
||||
|
||||
static const unsigned char toggle_off_png[]={
|
||||
0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x20,0x8,0x6,0x0,0x0,0x0,0xa2,0x9d,0x7e,0x84,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0x26,0x0,0x26,0x0,0x26,0x59,0xf,0xde,0x74,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xde,0x9,0x14,0x17,0x2,0x16,0xe9,0x0,0x17,0x60,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x2,0x45,0x49,0x44,0x41,0x54,0x68,0x81,0xed,0x99,0x5f,0x4f,0xd3,0x50,0x18,0x87,0x9f,0xb3,0x96,0xb5,0xcc,0x3a,0xa6,0xac,0x6d,0xa,0x91,0x84,0x5b,0x8d,0x7e,0x21,0x60,0x2c,0x5c,0x1a,0x63,0xe2,0x27,0x31,0x31,0xc6,0x4b,0x32,0xa7,0x7e,0x20,0x84,0x6b,0x6f,0xc,0x90,0x6d,0x32,0xca,0x6c,0xb0,0x24,0x75,0xc7,0x8b,0xba,0xb9,0x35,0xdd,0x84,0xec,0xe0,0x26,0xed,0x73,0xd7,0xf7,0xed,0xce,0x7b,0x7e,0xbf,0xbe,0x67,0x7f,0xde,0x41,0x4e,0x4e,0xa6,0x11,0x89,0xeb,0x12,0x50,0x1,0x2c,0x40,0x4b,0xc9,0xff,0xaf,0x48,0xe0,0x27,0x10,0x0,0x3e,0x70,0x39,0x48,0xe8,0x89,0x1b,0x2b,0xc0,0x33,0xe0,0x11,0x60,0x72,0xb7,0xc,0x8,0x81,0xaf,0xc0,0x67,0xa6,0x18,0x60,0x1,0x1b,0x4f,0x1e,0x3f,0x7d,0x6d,0x57,0xed,0x65,0x40,0x48,0x64,0xfc,0x72,0x95,0x8,0x10,0x8,0x74,0x5d,0x67,0x69,0x49,0x47,0xd3,0x92,0xdb,0x50,0x4b,0x14,0x45,0xf2,0xf8,0xe4,0xf8,0xc7,0xe1,0xd1,0xc1,0x2b,0xe0,0xcb,0x68,0x2e,0x59,0x59,0x7,0xc,0xbb,0x6a,0x97,0xce,0xba,0x67,0x4,0x41,0x80,0xec,0xf7,0x91,0x8a,0x1d,0x10,0x8,0x44,0xa1,0x80,0x51,0x2c,0x52,0x2a,0xdd,0xa3,0x58,0x2c,0x2a,0x5d,0x3f,0x89,0x69,0x9a,0x62,0x7d,0x6d,0xbd,0x74,0x78,0x74,0x60,0x90,0xd0,0x9c,0x66,0xbd,0x0,0x8,0x82,0xef,0x54,0x2a,0xf,0x70,0x6c,0x7,0xa1,0xf8,0x24,0x48,0x24,0xed,0x4e,0x1b,0xdf,0x3f,0xc7,0x30,0x4c,0xa5,0x6b,0xa7,0x11,0x86,0x21,0x96,0x65,0x41,0xca,0x91,0x4e,0xed,0x3d,0x29,0x25,0xb2,0x2f,0x71,0x1d,0x97,0x30,0xc,0x39,0x6d,0x9d,0x2a,0xdd,0x90,0xe7,0x7a,0xb8,0x8e,0xcb,0x79,0xb7,0xab,0xbc,0xbb,0x6e,0x4a,0x61,0x52,0x62,0x70,0xf6,0x55,0x8b,0x87,0xdf,0x6b,0x4a,0xe6,0x2e,0x1e,0xa6,0x18,0x90,0x15,0x32,0x6f,0xc0,0xed,0x7e,0xfe,0xcc,0x80,0x65,0x59,0xd4,0xf7,0x6a,0x63,0xb1,0xc6,0x7e,0x93,0x20,0x8,0x78,0xf1,0xf2,0xf9,0x58,0xfc,0xed,0x9b,0x77,0xa9,0xb1,0xeb,0xb0,0xb0,0x6,0xc,0xc4,0x7f,0x78,0xff,0x9,0x80,0x9d,0xdd,0x2d,0xea,0x7b,0xb5,0xa1,0xb0,0x34,0x81,0xd7,0x15,0x3d,0xca,0xc2,0x1a,0x0,0xd0,0x6c,0x7c,0xa4,0xd7,0xeb,0x1,0xb1,0x11,0x3b,0xbb,0x5b,0xc3,0xdc,0xe8,0x13,0x1f,0x8,0x4f,0x8b,0xfd,0x8d,0x85,0x36,0x60,0x1a,0xaa,0x3a,0x60,0xa1,0xdf,0x4,0x6b,0xf5,0x6d,0xca,0xe5,0x32,0xe5,0x72,0x79,0xec,0xe9,0xab,0x24,0x69,0x80,0x9,0xac,0xdc,0x4a,0xa5,0x1b,0xd2,0xd8,0x6f,0x2,0xb1,0x9,0xb5,0xfa,0xf6,0x58,0x6c,0x6,0x56,0x88,0x35,0xe,0x49,0x1e,0x81,0x10,0xb8,0x98,0xb5,0x8a,0xa,0x82,0x20,0x98,0xd8,0xd2,0x33,0xb4,0xff,0x5,0xb1,0xc6,0x21,0xb,0x7d,0x4,0xfe,0x5,0xb9,0x1,0xf3,0xde,0xc0,0xbc,0x99,0x68,0x80,0x88,0xa7,0x16,0x78,0xae,0xa7,0xbc,0xa8,0xe7,0x7a,0xc3,0xa1,0xc8,0xbc,0x49,0xfd,0x1e,0x20,0x84,0x40,0x14,0x4,0xad,0x76,0xb,0xc7,0x76,0xd8,0xdc,0xd8,0x54,0x5a,0x54,0x22,0x69,0xb5,0x5b,0x88,0x82,0x98,0xbb,0x9,0x69,0x6,0x48,0x0,0xcb,0xba,0x8f,0xef,0xfb,0xb7,0xf2,0x9b,0xfd,0xcf,0x44,0xc8,0x40,0xd3,0x34,0xa5,0x6b,0xa7,0x61,0x9a,0x26,0x51,0x14,0x41,0xca,0x70,0x2f,0x69,0x40,0x4,0x5c,0x75,0xbe,0x75,0x2e,0xed,0xaa,0xbd,0xbc,0xfa,0x70,0xf5,0x4e,0xcd,0x4,0x81,0x2b,0x62,0x8d,0xa3,0x5b,0x19,0x63,0x8d,0x6c,0x4c,0x85,0x4f,0x6,0x89,0xcc,0xff,0x2f,0x90,0x93,0x93,0x93,0x6d,0x7e,0x1,0x6b,0xe,0xc1,0xdb,0xd6,0xe0,0xc4,0xba,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
|
||||
};
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
#include "register_exporters.h"
|
||||
#include "bind/core_bind.h"
|
||||
#include "io/zip_io.h"
|
||||
|
||||
#include "io/config_file.h"
|
||||
|
||||
// plugins
|
||||
#include "plugins/sprite_frames_editor_plugin.h"
|
||||
|
@ -1377,7 +1377,7 @@ void EditorNode::_edit_current() {
|
|||
object_menu->set_disabled(false);
|
||||
|
||||
resources_dock->add_resource(Ref<Resource>(current_res));
|
||||
top_pallete->set_current_tab(1);
|
||||
//top_pallete->set_current_tab(1);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1394,7 +1394,7 @@ void EditorNode::_edit_current() {
|
|||
scene_tree_dock->set_selected(current_node);
|
||||
object_menu->get_popup()->clear();
|
||||
|
||||
top_pallete->set_current_tab(0);
|
||||
//top_pallete->set_current_tab(0);
|
||||
|
||||
}
|
||||
|
||||
|
@ -2908,7 +2908,7 @@ Error EditorNode::load_scene(const String& p_scene) {
|
|||
prev_scene->set_disabled(previous_scenes.size()==0);
|
||||
opening_prev=false;
|
||||
|
||||
top_pallete->set_current_tab(0); //always go to scene
|
||||
//top_pallete->set_current_tab(0); //always go to scene
|
||||
|
||||
push_item(new_scene);
|
||||
|
||||
|
@ -2981,15 +2981,15 @@ void EditorNode::_update_keying() {
|
|||
void EditorNode::_close_messages() {
|
||||
|
||||
// left_split->set_dragger_visible(false);
|
||||
old_split_ofs = left_split->get_split_offset();
|
||||
left_split->set_split_offset(0);
|
||||
old_split_ofs = center_split->get_split_offset();
|
||||
center_split->set_split_offset(0);
|
||||
// scene_root_parent->set_anchor_and_margin(MARGIN_BOTTOM,Control::ANCHOR_END,0);
|
||||
}
|
||||
|
||||
void EditorNode::_show_messages() {
|
||||
|
||||
// left_split->set_dragger_visible(true);
|
||||
left_split->set_split_offset(old_split_ofs);
|
||||
center_split->set_split_offset(old_split_ofs);
|
||||
// scene_root_parent->set_anchor_and_margin(MARGIN_BOTTOM,Control::ANCHOR_END,log->get_margin(MARGIN_TOP));
|
||||
|
||||
}
|
||||
|
@ -3334,6 +3334,13 @@ void EditorNode::_bind_methods() {
|
|||
|
||||
ObjectTypeDB::bind_method("_sources_changed",&EditorNode::_sources_changed);
|
||||
ObjectTypeDB::bind_method("_fs_changed",&EditorNode::_fs_changed);
|
||||
ObjectTypeDB::bind_method("_dock_select_draw",&EditorNode::_dock_select_draw);
|
||||
ObjectTypeDB::bind_method("_dock_select_input",&EditorNode::_dock_select_input);
|
||||
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(_MD("add_editor_import_plugin", "plugin"), &EditorNode::add_editor_import_plugin);
|
||||
ObjectTypeDB::bind_method(_MD("remove_editor_import_plugin", "plugin"), &EditorNode::remove_editor_import_plugin);
|
||||
|
@ -3414,6 +3421,276 @@ void EditorNode::show_warning(const String& p_text) {
|
|||
warning->popup_centered_minsize();
|
||||
}
|
||||
|
||||
void EditorNode::_dock_select_input(const InputEvent& p_input) {
|
||||
|
||||
if (p_input.type==InputEvent::MOUSE_BUTTON || p_input.type==InputEvent::MOUSE_MOTION) {
|
||||
|
||||
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)) {
|
||||
nrect=i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (nrect!=dock_select_rect_over) {
|
||||
dock_select->update();
|
||||
dock_select_rect_over=nrect;
|
||||
}
|
||||
|
||||
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) {
|
||||
dock_slot[dock_popup_selected]->remove_child(dock);
|
||||
}
|
||||
if (dock_slot[dock_popup_selected]->get_tab_count()==0) {
|
||||
dock_slot[dock_popup_selected]->hide();
|
||||
|
||||
}
|
||||
print_line("performing reparent");
|
||||
dock_slot[nrect]->add_child(dock);
|
||||
dock_popup_selected=nrect;
|
||||
dock_slot[nrect]->set_current_tab(dock_slot[nrect]->get_tab_count()-1);
|
||||
dock_slot[nrect]->show();
|
||||
dock_select->update();
|
||||
|
||||
VSplitContainer*splits[DOCK_SLOT_MAX/2]={
|
||||
left_l_vsplit,
|
||||
left_r_vsplit,
|
||||
right_l_vsplit,
|
||||
right_r_vsplit,
|
||||
};
|
||||
|
||||
for(int i=0;i<4;i++) {
|
||||
bool in_use = dock_slot[i*2+0]->get_tab_count() || dock_slot[i*2+1]->get_tab_count();
|
||||
if (in_use)
|
||||
splits[i]->show();
|
||||
else
|
||||
splits[i]->hide();
|
||||
}
|
||||
|
||||
_save_docks();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EditorNode::_dock_pre_popup(int p_which) {
|
||||
|
||||
print_line("pre popup? "+itos(p_which));
|
||||
dock_popup_selected=p_which;
|
||||
}
|
||||
|
||||
void EditorNode::_dock_select_draw(){
|
||||
Size2 s = dock_select->get_size();
|
||||
s.y/=2.0;
|
||||
s.x/=6.0;
|
||||
|
||||
Color used=Color(0.6,0.6,0.6,0.8);
|
||||
Color used_selected=Color(0.8,0.8,0.8,0.8);
|
||||
Color tab_selected=Color(1,1,1,1);
|
||||
Color unused=used;
|
||||
unused.a=0.4;
|
||||
Color unusable=unused;
|
||||
unusable.a=0.1;
|
||||
|
||||
Rect2 unr(s.x*2,0,s.x*2,s.y*2);
|
||||
unr.pos+=Vector2(2,5);
|
||||
unr.size-=Vector2(4,7);
|
||||
|
||||
dock_select->draw_rect(unr,unusable);
|
||||
|
||||
dock_tab_move_left->set_disabled(true);
|
||||
dock_tab_move_right->set_disabled(true);
|
||||
|
||||
if (dock_popup_selected!=-1 && dock_slot[dock_popup_selected]->get_tab_count()) {
|
||||
|
||||
dock_tab_move_left->set_disabled(dock_slot[dock_popup_selected]->get_current_tab()==0);
|
||||
dock_tab_move_right->set_disabled(dock_slot[dock_popup_selected]->get_current_tab()>=dock_slot[dock_popup_selected]->get_tab_count()-1);
|
||||
}
|
||||
|
||||
for(int i=0;i<DOCK_SLOT_MAX;i++) {
|
||||
|
||||
Vector2 ofs;
|
||||
|
||||
switch(i) {
|
||||
case DOCK_SLOT_LEFT_UL: {
|
||||
|
||||
} break;
|
||||
case DOCK_SLOT_LEFT_BL: {
|
||||
ofs.y+=s.y;
|
||||
} break;
|
||||
case DOCK_SLOT_LEFT_UR: {
|
||||
ofs.x+=s.x;
|
||||
} break;
|
||||
case DOCK_SLOT_LEFT_BR: {
|
||||
ofs+=s;
|
||||
} break;
|
||||
case DOCK_SLOT_RIGHT_UL: {
|
||||
ofs.x+=s.x*4;
|
||||
} break;
|
||||
case DOCK_SLOT_RIGHT_BL: {
|
||||
ofs.x+=s.x*4;
|
||||
ofs.y+=s.y;
|
||||
|
||||
} break;
|
||||
case DOCK_SLOT_RIGHT_UR: {
|
||||
ofs.x+=s.x*4;
|
||||
ofs.x+=s.x;
|
||||
|
||||
} break;
|
||||
case DOCK_SLOT_RIGHT_BR: {
|
||||
ofs.x+=s.x*4;
|
||||
ofs+=s;
|
||||
|
||||
} break;
|
||||
}
|
||||
|
||||
Rect2 r(ofs,s);
|
||||
dock_select_rect[i]=r;
|
||||
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) {
|
||||
dock_select->draw_rect(r,unused);
|
||||
} else {
|
||||
|
||||
dock_select->draw_rect(r,used);
|
||||
}
|
||||
|
||||
for(int j=0;j<MIN(3,dock_slot[i]->get_child_count());j++) {
|
||||
int xofs = (r.size.width/3)*j;
|
||||
Color c = used;
|
||||
if (i==dock_popup_selected && (dock_slot[i]->get_current_tab()>3 || dock_slot[i]->get_current_tab()==j))
|
||||
c=tab_selected;
|
||||
dock_select->draw_rect(Rect2(2+ofs.x+xofs,ofs.y,r.size.width/3-1,3),c);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void EditorNode::_save_docks() {
|
||||
|
||||
Ref<ConfigFile> config;
|
||||
config.instance();
|
||||
|
||||
for(int i=0;i<DOCK_SLOT_MAX;i++) {
|
||||
String names;
|
||||
for(int j=0;j<dock_slot[i]->get_tab_count();j++) {
|
||||
String name = dock_slot[i]->get_tab_control(j)->get_name();
|
||||
if (names!="")
|
||||
names+=",";
|
||||
names+=name;
|
||||
}
|
||||
|
||||
if (names!="") {
|
||||
config->set_value("docks","dock_"+itos(i+1),names);
|
||||
}
|
||||
}
|
||||
|
||||
VSplitContainer*splits[DOCK_SLOT_MAX/2]={
|
||||
left_l_vsplit,
|
||||
left_r_vsplit,
|
||||
right_l_vsplit,
|
||||
right_r_vsplit,
|
||||
};
|
||||
|
||||
for(int i=0;i<DOCK_SLOT_MAX/2;i++) {
|
||||
|
||||
if (splits[i]->is_visible()) {
|
||||
config->set_value("docks","dock_split_"+itos(i+1),splits[i]->get_split_offset());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
config->save(EditorSettings::get_singleton()->get_project_settings_path().plus_file("editor_layout.cfg"));
|
||||
|
||||
}
|
||||
|
||||
void EditorNode::_dock_split_dragged(int ofs) {
|
||||
|
||||
dock_drag_timer->start();
|
||||
}
|
||||
|
||||
void EditorNode::_load_docks() {
|
||||
|
||||
Ref<ConfigFile> config;
|
||||
config.instance();
|
||||
Error err = config->load(EditorSettings::get_singleton()->get_project_settings_path().plus_file("editor_layout.cfg"));
|
||||
if (err!=OK) {
|
||||
return; //no config
|
||||
}
|
||||
|
||||
for(int i=0;i<DOCK_SLOT_MAX;i++) {
|
||||
|
||||
if (!config->has_section_key("docks","dock_"+itos(i+1)))
|
||||
continue;
|
||||
|
||||
Vector<String> names = String(config->get_value("docks","dock_"+itos(i+1))).split(",");
|
||||
|
||||
for(int j=0;j<names.size();j++) {
|
||||
|
||||
String name=names[j];
|
||||
//find it, in a horribly inefficient way
|
||||
int atidx=-1;
|
||||
Control *node=NULL;
|
||||
for(int k=0;k<DOCK_SLOT_MAX;k++) {
|
||||
if (!dock_slot[k]->has_node(name))
|
||||
continue;
|
||||
node=dock_slot[k]->get_node(name)->cast_to<Control>();
|
||||
if (!node)
|
||||
continue;
|
||||
atidx=k;
|
||||
break;
|
||||
}
|
||||
if (atidx==-1) //well, it's not anywhere
|
||||
continue;
|
||||
|
||||
if (atidx==j) {
|
||||
node->raise();
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
dock_slot[atidx]->remove_child(node);
|
||||
|
||||
if (dock_slot[atidx]->get_tab_count()==0) {
|
||||
dock_slot[atidx]->hide();
|
||||
|
||||
}
|
||||
dock_slot[i]->add_child(node);
|
||||
dock_slot[i]->show();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
VSplitContainer*splits[DOCK_SLOT_MAX/2]={
|
||||
left_l_vsplit,
|
||||
left_r_vsplit,
|
||||
right_l_vsplit,
|
||||
right_r_vsplit,
|
||||
};
|
||||
|
||||
for(int i=0;i<DOCK_SLOT_MAX/2;i++) {
|
||||
|
||||
if (!config->has_section_key("docks","dock_split_"+itos(i+1)))
|
||||
continue;
|
||||
|
||||
int ofs = config->get_value("docks","dock_split_"+itos(i+1));
|
||||
splits[i]->set_split_offset(ofs);
|
||||
}
|
||||
|
||||
for(int i=0;i<DOCK_SLOT_MAX/2;i++) {
|
||||
bool in_use = dock_slot[i*2+0]->get_tab_count() || dock_slot[i*2+1]->get_tab_count();
|
||||
if (in_use)
|
||||
splits[i]->show();
|
||||
else
|
||||
splits[i]->hide();
|
||||
}
|
||||
}
|
||||
|
||||
EditorNode::EditorNode() {
|
||||
|
||||
|
@ -3515,18 +3792,120 @@ EditorNode::EditorNode() {
|
|||
menu_hb = memnew( HBoxContainer );
|
||||
main_vbox->add_child(menu_hb);
|
||||
|
||||
main_split = memnew( HSplitContainer );
|
||||
main_vbox->add_child(main_split);
|
||||
main_split->set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
//left
|
||||
left_l_hsplit = memnew( HSplitContainer );
|
||||
main_vbox->add_child(left_l_hsplit);
|
||||
|
||||
left_l_hsplit->set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
|
||||
left_l_vsplit = memnew( VSplitContainer );
|
||||
left_l_hsplit->add_child(left_l_vsplit);
|
||||
dock_slot[DOCK_SLOT_LEFT_UL]=memnew( TabContainer );
|
||||
left_l_vsplit->add_child(dock_slot[DOCK_SLOT_LEFT_UL]);
|
||||
dock_slot[DOCK_SLOT_LEFT_BL]=memnew( TabContainer );
|
||||
left_l_vsplit->add_child(dock_slot[DOCK_SLOT_LEFT_BL]);
|
||||
left_l_vsplit->hide();
|
||||
dock_slot[DOCK_SLOT_LEFT_UL]->hide();
|
||||
dock_slot[DOCK_SLOT_LEFT_BL]->hide();
|
||||
|
||||
left_r_hsplit = memnew( HSplitContainer );
|
||||
left_l_hsplit->add_child(left_r_hsplit);
|
||||
left_r_vsplit = memnew( VSplitContainer );
|
||||
left_r_hsplit->add_child(left_r_vsplit);
|
||||
dock_slot[DOCK_SLOT_LEFT_UR]=memnew( TabContainer );
|
||||
left_r_vsplit->add_child(dock_slot[DOCK_SLOT_LEFT_UR]);
|
||||
dock_slot[DOCK_SLOT_LEFT_BR]=memnew( TabContainer );
|
||||
left_r_vsplit->add_child(dock_slot[DOCK_SLOT_LEFT_BR]);
|
||||
//left_r_vsplit->hide();
|
||||
//dock_slot[DOCK_SLOT_LEFT_UR]->hide();
|
||||
//dock_slot[DOCK_SLOT_LEFT_BR]->hide();
|
||||
|
||||
|
||||
left_split = memnew( VSplitContainer );
|
||||
main_split->add_child(left_split);
|
||||
left_split->set_h_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
left_split->set_collapsed(false);
|
||||
main_hsplit = memnew( HSplitContainer );
|
||||
left_r_hsplit->add_child(main_hsplit);
|
||||
//main_split->set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
|
||||
center_split = memnew( VSplitContainer );
|
||||
main_hsplit->add_child(center_split);
|
||||
center_split->set_h_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
center_split->set_collapsed(false);
|
||||
|
||||
right_hsplit = memnew( HSplitContainer );
|
||||
main_hsplit->add_child(right_hsplit);
|
||||
|
||||
right_l_vsplit = memnew( VSplitContainer );
|
||||
right_hsplit->add_child(right_l_vsplit);
|
||||
dock_slot[DOCK_SLOT_RIGHT_UL]=memnew( TabContainer );
|
||||
right_l_vsplit->add_child(dock_slot[DOCK_SLOT_RIGHT_UL]);
|
||||
dock_slot[DOCK_SLOT_RIGHT_BL]=memnew( TabContainer );
|
||||
right_l_vsplit->add_child(dock_slot[DOCK_SLOT_RIGHT_BL]);
|
||||
|
||||
right_r_vsplit = memnew( VSplitContainer );
|
||||
right_hsplit->add_child(right_r_vsplit);
|
||||
dock_slot[DOCK_SLOT_RIGHT_UR]=memnew( TabContainer );
|
||||
right_r_vsplit->add_child(dock_slot[DOCK_SLOT_RIGHT_UR]);
|
||||
dock_slot[DOCK_SLOT_RIGHT_BR]=memnew( TabContainer );
|
||||
right_r_vsplit->add_child(dock_slot[DOCK_SLOT_RIGHT_BR]);
|
||||
right_r_vsplit->hide();
|
||||
//dock_slot[DOCK_SLOT_RIGHT_UL]->hide();
|
||||
//dock_slot[DOCK_SLOT_RIGHT_BL]->hide();
|
||||
|
||||
left_l_vsplit->connect("dragged",this,"_dock_split_dragged");
|
||||
left_r_vsplit->connect("dragged",this,"_dock_split_dragged");
|
||||
right_l_vsplit->connect("dragged",this,"_dock_split_dragged");
|
||||
right_r_vsplit->connect("dragged",this,"_dock_split_dragged");
|
||||
|
||||
|
||||
dock_select_popoup = memnew( PopupPanel );
|
||||
gui_base->add_child(dock_select_popoup);
|
||||
VBoxContainer *dock_vb = memnew( VBoxContainer );
|
||||
dock_select_popoup->add_child(dock_vb);
|
||||
|
||||
HBoxContainer *dock_hb = memnew( HBoxContainer);
|
||||
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->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->set_h_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
dock_hb->add_child(dock_tab_move_right);
|
||||
dock_vb->add_child(dock_hb);
|
||||
|
||||
dock_select = memnew( Control );
|
||||
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->set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
dock_vb->add_child(dock_select);
|
||||
|
||||
|
||||
dock_select_popoup->set_child_rect(dock_vb);
|
||||
dock_select_popoup->set_as_minsize();
|
||||
dock_select_rect_over=-1;
|
||||
dock_popup_selected=-1;
|
||||
//dock_select_popoup->set_(Size2(20,20));
|
||||
|
||||
for(int i=0;i<DOCK_SLOT_MAX;i++) {
|
||||
dock_slot[i]->set_custom_minimum_size(Size2(250,250));
|
||||
dock_slot[i]->set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
dock_slot[i]->set_popup(dock_select_popoup);
|
||||
dock_slot[i]->connect("pre_popup_pressed",this,"_dock_pre_popup",varray(i));
|
||||
|
||||
//dock_slot[i]->set_tab_align(TabContainer::ALIGN_LEFT);
|
||||
}
|
||||
|
||||
dock_drag_timer = memnew( Timer );
|
||||
add_child(dock_drag_timer);
|
||||
dock_drag_timer->set_wait_time(0.5);
|
||||
dock_drag_timer->set_one_shot(true);
|
||||
dock_drag_timer->connect("timeout",this,"_save_docks");
|
||||
|
||||
top_split = memnew( VSplitContainer );
|
||||
left_split->add_child(top_split);
|
||||
center_split->add_child(top_split);
|
||||
top_split->set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
top_split->set_collapsed(true);
|
||||
|
||||
|
@ -3895,45 +4274,47 @@ EditorNode::EditorNode() {
|
|||
|
||||
|
||||
|
||||
editor_hsplit = memnew( HSplitContainer );
|
||||
main_split->add_child(editor_hsplit);
|
||||
editor_hsplit->set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
//editor_hsplit = memnew( HSplitContainer );
|
||||
//main_split->add_child(editor_hsplit);
|
||||
//editor_hsplit->set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
|
||||
editor_vsplit = memnew( VSplitContainer );
|
||||
editor_hsplit->add_child(editor_vsplit);
|
||||
//editor_vsplit = memnew( VSplitContainer );
|
||||
//editor_hsplit->add_child(editor_vsplit);
|
||||
|
||||
top_pallete = memnew( TabContainer );
|
||||
//top_pallete = memnew( TabContainer );
|
||||
scene_tree_dock = memnew( SceneTreeDock(this,scene_root,editor_selection,editor_data) );
|
||||
scene_tree_dock->set_name("Scene");
|
||||
top_pallete->add_child(scene_tree_dock);
|
||||
//top_pallete->add_child(scene_tree_dock);
|
||||
dock_slot[DOCK_SLOT_LEFT_UR]->add_child(scene_tree_dock);
|
||||
|
||||
resources_dock = memnew( ResourcesDock(this) );
|
||||
resources_dock->set_name("Resources");
|
||||
top_pallete->add_child(resources_dock);
|
||||
top_pallete->set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
//top_pallete->add_child(resources_dock);
|
||||
dock_slot[DOCK_SLOT_RIGHT_BL]->add_child(resources_dock);
|
||||
//top_pallete->set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
|
||||
Control *editor_spacer = memnew( Control );
|
||||
/*Control *editor_spacer = memnew( Control );
|
||||
editor_spacer->set_custom_minimum_size(Size2(260,200));
|
||||
editor_spacer->set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
editor_vsplit->add_child( editor_spacer );
|
||||
editor_spacer->add_child( top_pallete );
|
||||
top_pallete->set_area_as_parent_rect();
|
||||
top_pallete->set_area_as_parent_rect();*/
|
||||
|
||||
|
||||
prop_pallete = memnew( TabContainer );
|
||||
//prop_pallete = memnew( TabContainer );
|
||||
|
||||
prop_pallete->set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
//prop_pallete->set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
|
||||
editor_spacer = memnew( Control );
|
||||
/*editor_spacer = memnew( Control );
|
||||
editor_spacer->set_custom_minimum_size(Size2(260,200));
|
||||
editor_spacer->set_v_size_flags(Control::SIZE_EXPAND_FILL);
|
||||
editor_vsplit->add_child( editor_spacer );
|
||||
editor_spacer->add_child( prop_pallete );
|
||||
prop_pallete->set_area_as_parent_rect();
|
||||
prop_pallete->set_area_as_parent_rect();*/
|
||||
|
||||
VBoxContainer *prop_editor_base = memnew( VBoxContainer );
|
||||
prop_editor_base->set_name("Inspector"); // Properties?
|
||||
prop_pallete->add_child(prop_editor_base);
|
||||
dock_slot[DOCK_SLOT_RIGHT_UL]->add_child(prop_editor_base);
|
||||
|
||||
HBoxContainer *prop_editor_hb = memnew( HBoxContainer );
|
||||
prop_editor_base->add_child(prop_editor_hb);
|
||||
|
@ -3975,14 +4356,15 @@ EditorNode::EditorNode() {
|
|||
|
||||
scenes_dock = memnew( ScenesDock(this) );
|
||||
scenes_dock->set_name("FileSystem");
|
||||
prop_pallete->add_child(scenes_dock);
|
||||
dock_slot[DOCK_SLOT_LEFT_BR]->add_child(scenes_dock);
|
||||
//prop_pallete->add_child(scenes_dock);
|
||||
scenes_dock->connect("open",this,"open_request");
|
||||
scenes_dock->connect("instance",this,"_instance_request");
|
||||
|
||||
|
||||
|
||||
log = memnew( EditorLog );
|
||||
left_split->add_child(log);
|
||||
center_split->add_child(log);
|
||||
log->connect("close_request",this,"_close_messages");
|
||||
log->connect("show_request",this,"_show_messages");
|
||||
//left_split->set_dragger_visible(false);
|
||||
|
@ -3998,7 +4380,7 @@ EditorNode::EditorNode() {
|
|||
|
||||
|
||||
animation_vb->add_child(animation_editor);
|
||||
left_split->connect("resized",this,"_vp_resized");
|
||||
center_split->connect("resized",this,"_vp_resized");
|
||||
|
||||
|
||||
animation_editor->hide();
|
||||
|
@ -4403,12 +4785,15 @@ EditorNode::EditorNode() {
|
|||
Node::set_human_readable_collision_renaming(true);
|
||||
|
||||
|
||||
|
||||
|
||||
// Ref<ImageTexture> it = gui_base->get_icon("logo","Icons");
|
||||
// OS::get_singleton()->set_icon( it->get_data() );
|
||||
|
||||
for(int i=0;i<_init_callbacks.size();i++)
|
||||
_init_callbacks[i]();
|
||||
|
||||
_load_docks();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -94,6 +94,8 @@
|
|||
|
||||
typedef void (*EditorNodeInitCallback)();
|
||||
|
||||
|
||||
|
||||
class EditorNode : public Node {
|
||||
|
||||
OBJ_TYPE( EditorNode, Node );
|
||||
|
@ -168,7 +170,17 @@ class EditorNode : public Node {
|
|||
OBJECT_METHOD_BASE=500
|
||||
};
|
||||
|
||||
|
||||
enum DockSlot {
|
||||
DOCK_SLOT_LEFT_UL,
|
||||
DOCK_SLOT_LEFT_BL,
|
||||
DOCK_SLOT_LEFT_UR,
|
||||
DOCK_SLOT_LEFT_BR,
|
||||
DOCK_SLOT_RIGHT_UL,
|
||||
DOCK_SLOT_RIGHT_BL,
|
||||
DOCK_SLOT_RIGHT_UR,
|
||||
DOCK_SLOT_RIGHT_BR,
|
||||
DOCK_SLOT_MAX
|
||||
};
|
||||
|
||||
|
||||
Node *edited_scene; //scene being edited
|
||||
|
@ -179,8 +191,22 @@ class EditorNode : public Node {
|
|||
Control* scene_root_parent;
|
||||
Control *gui_base;
|
||||
VBoxContainer *main_vbox;
|
||||
HSplitContainer *main_split;
|
||||
VSplitContainer *left_split;
|
||||
|
||||
|
||||
|
||||
HSplitContainer *left_l_hsplit;
|
||||
VSplitContainer *left_l_vsplit;
|
||||
HSplitContainer *left_r_hsplit;
|
||||
VSplitContainer *left_r_vsplit;
|
||||
HSplitContainer *main_hsplit;
|
||||
HSplitContainer *right_hsplit;
|
||||
VSplitContainer *right_l_vsplit;
|
||||
VSplitContainer *right_r_vsplit;
|
||||
|
||||
VSplitContainer *center_split;
|
||||
|
||||
|
||||
|
||||
int old_split_ofs;
|
||||
VSplitContainer *top_split;
|
||||
HBoxContainer *bottom_hb;
|
||||
|
@ -190,8 +216,9 @@ class EditorNode : public Node {
|
|||
TextureButton *anim_close;
|
||||
Panel *menu_panel;
|
||||
|
||||
HSplitContainer *editor_hsplit;
|
||||
VSplitContainer *editor_vsplit;
|
||||
|
||||
//HSplitContainer *editor_hsplit;
|
||||
//VSplitContainer *editor_vsplit;
|
||||
HBoxContainer *menu_hb;
|
||||
Control *viewport;
|
||||
MenuButton *file_menu;
|
||||
|
@ -249,8 +276,8 @@ class EditorNode : public Node {
|
|||
String current_path;
|
||||
MenuButton *update_menu;
|
||||
ToolButton *sources_button;
|
||||
TabContainer *prop_pallete;
|
||||
TabContainer *top_pallete;
|
||||
//TabContainer *prop_pallete;
|
||||
//TabContainer *top_pallete;
|
||||
String defer_load_scene;
|
||||
String defer_translatable;
|
||||
String defer_optimize;
|
||||
|
@ -277,6 +304,16 @@ class EditorNode : public Node {
|
|||
ProgressDialog *progress_dialog;
|
||||
BackgroundProgress *progress_hb;
|
||||
|
||||
TabContainer *dock_slot[DOCK_SLOT_MAX];
|
||||
Rect2 dock_select_rect[DOCK_SLOT_MAX];
|
||||
int dock_select_rect_over;
|
||||
PopupPanel *dock_select_popoup;
|
||||
Control *dock_select;
|
||||
ToolButton *dock_tab_move_left;
|
||||
ToolButton *dock_tab_move_right;
|
||||
int dock_popup_selected;
|
||||
Timer *dock_drag_timer;
|
||||
|
||||
String _tmp_import_path;
|
||||
|
||||
EditorImportExport *editor_import_export;
|
||||
|
@ -417,6 +454,13 @@ 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_select_draw();
|
||||
void _dock_pre_popup(int p_which);
|
||||
void _dock_split_dragged(int ofs);
|
||||
|
||||
void _save_docks();
|
||||
void _load_docks();
|
||||
|
||||
protected:
|
||||
void _notification(int p_what);
|
||||
|
|
BIN
tools/editor/icons/icon_back_disabled.png
Normal file
BIN
tools/editor/icons/icon_back_disabled.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 175 B |
BIN
tools/editor/icons/icon_tab_menu.png
Normal file
BIN
tools/editor/icons/icon_tab_menu.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 251 B |
Loading…
Reference in a new issue