Skip to content

Commit

Permalink
Merge pull request #15972 from akien-mga/mono-warning
Browse files Browse the repository at this point in the history
Mono: Display opt-out warning in editor about WIP status
  • Loading branch information
akien-mga authored Jan 22, 2018
2 parents d3c43ed + e48ccc2 commit 511742e
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 1 deletion.
86 changes: 86 additions & 0 deletions modules/mono/editor/godotsharp_editor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,22 +112,59 @@ void GodotSharpEditor::_remove_create_sln_menu_option() {
bottom_panel_btn->show();
}

void GodotSharpEditor::_show_about_dialog() {

bool show_on_start = EDITOR_GET("mono/editor/show_info_on_start");
about_dialog_checkbox->set_pressed(show_on_start);
about_dialog->popup_centered_minsize();
}

void GodotSharpEditor::_toggle_about_dialog_on_start(bool p_enabled) {

bool show_on_start = EDITOR_GET("mono/editor/show_info_on_start");
if (show_on_start != p_enabled) {
EditorSettings::get_singleton()->set_setting("mono/editor/show_info_on_start", p_enabled);
}
}

void GodotSharpEditor::_menu_option_pressed(int p_id) {

switch (p_id) {
case MENU_CREATE_SLN: {

_create_project_solution();
} break;
case MENU_ABOUT_CSHARP: {

_show_about_dialog();
} break;
default:
ERR_FAIL();
}
}

void GodotSharpEditor::_notification(int p_notification) {

switch (p_notification) {

case NOTIFICATION_READY: {

bool show_info_dialog = EDITOR_GET("mono/editor/show_info_on_start");
if (show_info_dialog) {
about_dialog->set_exclusive(true);
_show_about_dialog();
// Once shown a first time, it can be seen again via the Mono menu - it doesn't have to be exclusive then.
about_dialog->set_exclusive(false);
}
}
}
}

void GodotSharpEditor::_bind_methods() {

ClassDB::bind_method(D_METHOD("_create_project_solution"), &GodotSharpEditor::_create_project_solution);
ClassDB::bind_method(D_METHOD("_remove_create_sln_menu_option"), &GodotSharpEditor::_remove_create_sln_menu_option);
ClassDB::bind_method(D_METHOD("_toggle_about_dialog_on_start"), &GodotSharpEditor::_toggle_about_dialog_on_start);
ClassDB::bind_method(D_METHOD("_menu_option_pressed", "id"), &GodotSharpEditor::_menu_option_pressed);
}

Expand Down Expand Up @@ -210,6 +247,55 @@ GodotSharpEditor::GodotSharpEditor(EditorNode *p_editor) {
menu_button->set_text(TTR("Mono"));
menu_popup = menu_button->get_popup();

// TODO: Remove or edit this info dialog once Mono support is no longer in alpha
{
menu_popup->add_item(TTR("About C# support"), MENU_ABOUT_CSHARP);
about_dialog = memnew(AcceptDialog);
editor->get_gui_base()->add_child(about_dialog);
about_dialog->set_title("Important: C# support is not feature-complete");

// We don't use set_text() as the default AcceptDialog Label doesn't play well with the TextureRect and CheckBox
// we'll add. Instead we add containers and a new autowrapped Label inside.

// Main VBoxContainer (icon + label on top, checkbox at bottom)
VBoxContainer *about_vbc = memnew(VBoxContainer);
about_dialog->add_child(about_vbc);

// HBoxContainer for icon + label
HBoxContainer *about_hbc = memnew(HBoxContainer);
about_vbc->add_child(about_hbc);

TextureRect *about_icon = memnew(TextureRect);
about_hbc->add_child(about_icon);
Ref<Texture> about_icon_tex = about_icon->get_icon("NodeWarning", "EditorIcons");
about_icon->set_texture(about_icon_tex);

Label *about_label = memnew(Label);
about_hbc->add_child(about_label);
about_label->set_custom_minimum_size(Size2(600, 150) * EDSCALE);
about_label->set_v_size_flags(Control::SIZE_EXPAND_FILL);
about_label->set_autowrap(true);
String about_text =
String("C# support in Godot Engine is a brand new feature and a work in progress.\n") +
"It is at the alpha stage and thus not suitable for use in production.\n\n" +
"As of Godot 3.0, C# support is not feature-complete and can crash in some situations. " +
"Bugs and usability issues will be addressed gradually over 3.0.x and 3.x releases.\n" +
"The main missing feature is the ability to export games using C# assemblies - you will therefore be able to develop and run games in the editor, " +
"but not to share them as standalone binaries. This feature is of course high on the priority list and should be available in 3.0.1.\n\n" +
"If you experience issues with this Mono build, please report them on Godot's issue tracker with details about your system, Mono version, IDE, etc.:\n\n" +
" https://github.com/godotengine/godot/issues\n\n" +
"Your critical feedback at this stage will play a great role in shaping the C# support in future releases, so thank you!";
about_label->set_text(about_text);

EDITOR_DEF("mono/editor/show_info_on_start", true);

// CheckBox in main container
about_dialog_checkbox = memnew(CheckBox);
about_vbc->add_child(about_dialog_checkbox);
about_dialog_checkbox->set_text("Show this warning when starting the editor");
about_dialog_checkbox->connect("toggled", this, "_toggle_about_dialog_on_start");
}

String sln_path = GodotSharpDirs::get_project_sln_path();
String csproj_path = GodotSharpDirs::get_project_csproj_path();

Expand Down
8 changes: 7 additions & 1 deletion modules/mono/editor/godotsharp_editor.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ class GodotSharpEditor : public Node {
PopupMenu *menu_popup;

AcceptDialog *error_dialog;
AcceptDialog *about_dialog;
CheckBox *about_dialog_checkbox;

ToolButton *bottom_panel_btn;

Expand All @@ -54,17 +56,21 @@ class GodotSharpEditor : public Node {
bool _create_project_solution();

void _remove_create_sln_menu_option();
void _show_about_dialog();
void _toggle_about_dialog_on_start(bool p_enabled);

void _menu_option_pressed(int p_id);

static GodotSharpEditor *singleton;

protected:
void _notification(int p_notification);
static void _bind_methods();

public:
enum MenuOptions {
MENU_CREATE_SLN
MENU_CREATE_SLN,
MENU_ABOUT_CSHARP,
};

enum ExternalEditor {
Expand Down

0 comments on commit 511742e

Please sign in to comment.