Refactor code in #1423 to be cleaner

This commit is contained in:
Wojtek Figat
2023-10-08 15:14:35 +02:00
parent 3b23e50ee6
commit b56447bae4
4 changed files with 215 additions and 217 deletions

View File

@@ -150,145 +150,11 @@ namespace FlaxEditor.Windows
cm.AddSeparator();
// Check if is source folder to add new module
if (item is ContentFolder sourceFolder && sourceFolder.ParentFolder.Node is ProjectTreeNode node)
if (folder?.ParentFolder?.Node is ProjectTreeNode parentFolderNode && folder.Node == parentFolderNode.Source)
{
if (sourceFolder.Node == node.Source)
{
var button = cm.AddButton("New Module");
button.CloseMenuOnClick = false;
button.Clicked += () =>
{
var popup = new ContextMenuBase
{
Size = new Float2(230, 125),
ClipChildren = false,
CullChildren = false,
};
popup.Show(button, new Float2(button.Width, 0));
var nameLabel = new Label
{
Parent = popup,
AnchorPreset = AnchorPresets.TopLeft,
Text = "Name",
HorizontalAlignment = TextAlignment.Near,
};
nameLabel.LocalX += 10;
nameLabel.LocalY += 10;
var nameTextBox = new TextBox
{
Parent = popup,
WatermarkText = "Module Name",
AnchorPreset = AnchorPresets.TopLeft,
IsMultiline = false,
};
nameTextBox.LocalX += 100;
nameTextBox.LocalY += 10;
var defaultTextBoxBorderColor = nameTextBox.BorderColor;
var defaultTextBoxBorderSelectedColor = nameTextBox.BorderSelectedColor;
nameTextBox.TextChanged += () =>
{
if (string.IsNullOrEmpty(nameTextBox.Text))
{
nameTextBox.BorderColor = defaultTextBoxBorderColor;
nameTextBox.BorderSelectedColor = defaultTextBoxBorderSelectedColor;
return;
}
var pluginPath = Path.Combine(Globals.ProjectFolder, "Source", nameTextBox.Text);
if (Directory.Exists(pluginPath))
{
nameTextBox.BorderColor = Color.Red;
nameTextBox.BorderSelectedColor = Color.Red;
}
else
{
nameTextBox.BorderColor = defaultTextBoxBorderColor;
nameTextBox.BorderSelectedColor = defaultTextBoxBorderSelectedColor;
}
};
var editorLabel = new Label
{
Parent = popup,
AnchorPreset = AnchorPresets.TopLeft,
Text = "Editor",
HorizontalAlignment = TextAlignment.Near,
};
editorLabel.LocalX += 10;
editorLabel.LocalY += 35;
var editorCheckBox = new CheckBox()
{
Parent = popup,
AnchorPreset = AnchorPresets.TopLeft,
};
editorCheckBox.LocalY += 35;
editorCheckBox.LocalX += 100;
var cppLabel = new Label
{
Parent = popup,
AnchorPreset = AnchorPresets.TopLeft,
Text = "C++",
HorizontalAlignment = TextAlignment.Near,
};
cppLabel.LocalX += 10;
cppLabel.LocalY += 60;
var cppCheckBox = new CheckBox()
{
Parent = popup,
AnchorPreset = AnchorPresets.TopLeft,
};
cppCheckBox.LocalY += 60;
cppCheckBox.LocalX += 100;
var submitButton = new Button
{
Parent = popup,
AnchorPreset = AnchorPresets.TopLeft,
Text = "Create",
Width = 70,
};
submitButton.LocalX += 40;
submitButton.LocalY += 90;
submitButton.Clicked += () =>
{
// TODO: Check all modules in project including plugins
if (Directory.Exists(Path.Combine(Globals.ProjectFolder, "Source", nameTextBox.Text)))
{
Editor.LogWarning("Cannot create module due to name conflict.");
return;
}
CreateModule(node.Source.Path, nameTextBox.Text, editorCheckBox.Checked, cppCheckBox.Checked);
nameTextBox.Clear();
editorCheckBox.Checked = false;
cppCheckBox.Checked = false;
popup.Hide();
};
var cancelButton = new Button
{
Parent = popup,
AnchorPreset = AnchorPresets.TopLeft,
Text = "Cancel",
Width = 70,
};
cancelButton.LocalX += 120;
cancelButton.LocalY += 90;
cancelButton.Clicked += () =>
{
nameTextBox.Clear();
editorCheckBox.Checked = false;
cppCheckBox.Checked = false;
popup.Hide();
};
};
}
var button = cm.AddButton("New module");
button.CloseMenuOnClick = false;
button.Clicked += () => NewModule(button, parentFolderNode.Source.Path);
}
if (!isRootFolder && !(item is ContentFolder projectFolder && projectFolder.Node is ProjectTreeNode))
@@ -456,5 +322,138 @@ namespace FlaxEditor.Windows
return;
}
}
private void NewModule(ContextMenuButton button, string path)
{
var popup = new ContextMenuBase
{
Size = new Float2(230, 125),
ClipChildren = false,
CullChildren = false,
};
popup.Show(button, new Float2(button.Width, 0));
var nameLabel = new Label
{
Parent = popup,
AnchorPreset = AnchorPresets.TopLeft,
Text = "Name",
HorizontalAlignment = TextAlignment.Near,
};
nameLabel.LocalX += 10;
nameLabel.LocalY += 10;
var nameTextBox = new TextBox
{
Parent = popup,
WatermarkText = "Module Name",
AnchorPreset = AnchorPresets.TopLeft,
IsMultiline = false,
};
nameTextBox.LocalX += 100;
nameTextBox.LocalY += 10;
var defaultTextBoxBorderColor = nameTextBox.BorderColor;
var defaultTextBoxBorderSelectedColor = nameTextBox.BorderSelectedColor;
nameTextBox.TextChanged += () =>
{
if (string.IsNullOrEmpty(nameTextBox.Text))
{
nameTextBox.BorderColor = defaultTextBoxBorderColor;
nameTextBox.BorderSelectedColor = defaultTextBoxBorderSelectedColor;
return;
}
var pluginPath = Path.Combine(Globals.ProjectFolder, "Source", nameTextBox.Text);
if (Directory.Exists(pluginPath))
{
nameTextBox.BorderColor = Color.Red;
nameTextBox.BorderSelectedColor = Color.Red;
}
else
{
nameTextBox.BorderColor = defaultTextBoxBorderColor;
nameTextBox.BorderSelectedColor = defaultTextBoxBorderSelectedColor;
}
};
var editorLabel = new Label
{
Parent = popup,
AnchorPreset = AnchorPresets.TopLeft,
Text = "Editor",
HorizontalAlignment = TextAlignment.Near,
};
editorLabel.LocalX += 10;
editorLabel.LocalY += 35;
var editorCheckBox = new CheckBox
{
Parent = popup,
AnchorPreset = AnchorPresets.TopLeft,
};
editorCheckBox.LocalY += 35;
editorCheckBox.LocalX += 100;
var cppLabel = new Label
{
Parent = popup,
AnchorPreset = AnchorPresets.TopLeft,
Text = "C++",
HorizontalAlignment = TextAlignment.Near,
};
cppLabel.LocalX += 10;
cppLabel.LocalY += 60;
var cppCheckBox = new CheckBox
{
Parent = popup,
AnchorPreset = AnchorPresets.TopLeft,
};
cppCheckBox.LocalY += 60;
cppCheckBox.LocalX += 100;
var submitButton = new Button
{
Parent = popup,
AnchorPreset = AnchorPresets.TopLeft,
Text = "Create",
Width = 70,
};
submitButton.LocalX += 40;
submitButton.LocalY += 90;
submitButton.Clicked += () =>
{
// TODO: Check all modules in project including plugins
if (Directory.Exists(Path.Combine(Globals.ProjectFolder, "Source", nameTextBox.Text)))
{
Editor.LogWarning("Cannot create module due to name conflict.");
return;
}
Editor.CodeEditing.CreateModule(path, nameTextBox.Text, editorCheckBox.Checked, cppCheckBox.Checked);
nameTextBox.Clear();
editorCheckBox.Checked = false;
cppCheckBox.Checked = false;
popup.Hide();
button.ParentContextMenu.Hide();
};
var cancelButton = new Button
{
Parent = popup,
AnchorPreset = AnchorPresets.TopLeft,
Text = "Cancel",
Width = 70,
};
cancelButton.LocalX += 120;
cancelButton.LocalY += 90;
cancelButton.Clicked += () =>
{
nameTextBox.Clear();
editorCheckBox.Checked = false;
cppCheckBox.Checked = false;
popup.Hide();
button.ParentContextMenu.Hide();
};
}
}
}