Refactor code in #1423 to be cleaner
This commit is contained in:
@@ -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();
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user