rmdec/RMDEC/projectSelector.cs

177 lines
5.6 KiB
C#
Raw Normal View History

2019-12-13 18:25:26 +00:00
using Microsoft.WindowsAPICodePack.Dialogs;
using System;
using System.Collections;
using System.Collections.Generic;
2019-12-15 04:50:00 +00:00
using System.Diagnostics;
2019-12-13 18:25:26 +00:00
using System.IO;
using System.Threading;
using System.Windows.Forms;
namespace RMDEC
{
public partial class projectSelector : Form
{
2019-12-15 04:50:00 +00:00
private List<Object> globalProjectList = new List<Object>();
2019-12-13 18:25:26 +00:00
public projectSelector()
{
InitializeComponent();
}
private void onIndexingComplete()
{
this.Cursor = Cursors.Arrow;
}
private bool tryAddProject(string projectFile)
2019-12-13 18:25:26 +00:00
{
string relativeName = projectFile.Remove(0,projectDir.Text.Length + 1);
2019-12-15 04:50:00 +00:00
string extension = Path.GetExtension(projectFile).ToLower();
2019-12-13 18:25:26 +00:00
2021-08-10 13:56:18 +00:00
if (extension == ".json" || extension == ".js")
2019-12-13 18:25:26 +00:00
{
2019-12-15 04:50:00 +00:00
try
{
MVProject proj = MVProject.ParseSystemJson(projectFile);
globalProjectList.Add(proj);
2020-08-20 18:10:35 +00:00
if(!proj.MZ)
projectList.Items.Add("[RMMV] - " + proj.GameTitle + " - " + relativeName);
else
projectList.Items.Add("[RMMZ] - " + proj.GameTitle + " - " + relativeName);
2019-12-15 04:50:00 +00:00
selectButton.Enabled = true;
}
catch (Exception) { return false; }
2019-12-15 04:50:00 +00:00
}
else if (extension == ".rgss3a")
{
try
{
VXAProject proj = VXAProject.ParseRgss3a(projectFile);
globalProjectList.Add(proj);
projectList.Items.Add("[RMVXA] - " + proj.GameTitle + " - " + relativeName);
selectButton.Enabled = true;
}
catch (Exception) { return false; }
2019-12-13 18:25:26 +00:00
}
2019-12-15 04:50:00 +00:00
return true;
2019-12-13 18:25:26 +00:00
}
private void updateProjectList(string projectDir)
{
if (Directory.Exists(projectDir))
{
this.Cursor = Cursors.WaitCursor;
Thread indexProjects = new Thread(() =>
{
2019-12-14 21:10:00 +00:00
2019-12-13 18:25:26 +00:00
IEnumerable fileList = Directory.EnumerateFiles(projectDir, "*", SearchOption.AllDirectories);
2019-12-14 21:10:00 +00:00
try
2019-12-13 18:25:26 +00:00
{
2019-12-14 21:10:00 +00:00
foreach (string fileEntry in fileList)
2019-12-13 18:25:26 +00:00
{
2021-08-10 13:56:18 +00:00
if (Path.GetFileName(fileEntry).ToLower() == "system.json" || Path.GetFileName(fileEntry).ToLower().StartsWith("rmmz_core") || Path.GetFileName(fileEntry).ToLower().StartsWith("rpg_core") || Path.GetExtension(fileEntry).ToLower() == ".rgss3a")
2019-12-13 18:25:26 +00:00
{
2019-12-14 21:10:00 +00:00
Invoke((Action)delegate
{
2021-08-10 13:56:18 +00:00
tryAddProject(fileEntry);
2019-12-14 21:10:00 +00:00
});
}
2019-12-13 18:25:26 +00:00
}
}
2019-12-14 21:10:00 +00:00
catch (Exception) { };
2019-12-13 18:25:26 +00:00
Invoke((Action)delegate
{
onIndexingComplete();
});
});
indexProjects.Start();
}
}
private void clearProjectList()
{
2019-12-15 04:50:00 +00:00
globalProjectList.Clear();
2019-12-13 18:25:26 +00:00
projectList.Items.Clear();
selectButton.Enabled = false;
}
private void projectDir_TextChanged(object sender, EventArgs e)
{
clearProjectList();
string newDir = projectDir.Text;
updateProjectList(newDir);
}
private void browseButton_Click(object sender, EventArgs e)
{
CommonOpenFileDialog folderDialog = new CommonOpenFileDialog();
folderDialog.IsFolderPicker = true;
if (folderDialog.ShowDialog() == CommonFileDialogResult.Ok)
{
projectDir.Text = folderDialog.FileName;
}
}
private void selectButton_Click(object sender, EventArgs e)
{
int index = projectList.SelectedIndex;
if(index >= 0)
{
2019-12-15 04:50:00 +00:00
object proj = globalProjectList[index];
if(proj is MVProject)
{
mvProjectToolset mvToolset = new mvProjectToolset((MVProject)globalProjectList[index]);
this.Hide();
mvToolset.Show();
2021-08-10 13:56:18 +00:00
mvToolset.FormClosed += MvToolset_FormClosed;
2019-12-15 04:50:00 +00:00
}
if(proj is VXAProject)
{
vxaProjectToolset vxToolset = new vxaProjectToolset((VXAProject)globalProjectList[index]);
this.Hide();
vxToolset.Show();
2021-08-10 13:56:18 +00:00
vxToolset.FormClosed += VxToolset_FormClosed;
2019-12-15 04:50:00 +00:00
}
}
}
private void onChildFormClosed()
{
foreach (object proj in globalProjectList)
{
if (proj is VXAProject)
{
VXAProject vxproj = (VXAProject)proj;
vxproj.Close();
}
2019-12-13 18:25:26 +00:00
}
2019-12-15 04:50:00 +00:00
clearProjectList();
updateProjectList(projectDir.Text);
this.Show();
}
2021-08-10 13:56:18 +00:00
private void MvToolset_FormClosed(object sender, FormClosedEventArgs e)
2019-12-15 04:50:00 +00:00
{
onChildFormClosed();
}
2021-08-10 13:56:18 +00:00
private void VxToolset_FormClosed(object sender, FormClosedEventArgs e)
2019-12-15 04:50:00 +00:00
{
onChildFormClosed();
}
private void projectSelector_FormClosing(object sender, FormClosingEventArgs e)
{
Process.GetCurrentProcess().Kill();
2019-12-13 18:25:26 +00:00
}
}
}