JD2022-TU1/main/tools/apps/ConfigurePlus/Models/Config.cs

116 lines
4.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using ConfigurePlus.Commands;
using UAF;
using UAF.Application;
using UAF.WPF.Models.Menus;
using UAF.WPF.Commands;
namespace ConfigurePlus.Models
{
public class Config
{
public ProjectList ProjectList { get; set; }
public Config()
{
ProjectList = new ProjectList();
}
public void Update(Config serverConfig)
{
foreach (ProjectViewModel sourceProject in serverConfig.ProjectList)
{
sourceProject.UpdateLockedFields();
sourceProject.AutoFillProject();
ProjectViewModel targetProject = FindProject(sourceProject.ProjectId);
if (targetProject == null)
{
ProjectList.Add(sourceProject);
}
else
{
targetProject.Update(sourceProject);
}
}
// TODO : Generic implementation of ForEachSafe?
bool whileTrue = true;
while (whileTrue)
{
whileTrue = false;
foreach (ProjectViewModel project in ProjectList)
{
if (project.IsGlobalProject == false)
continue;
if (serverConfig.FindProject(project.ProjectId) == null)
{
ProjectList.Remove(project);
whileTrue = true;
break;
}
}
}
UpdateTaskBarMenu();
}
public ProjectViewModel FindProject(string projectId)
{
return ProjectList.FirstOrDefault(project => project.ProjectId == projectId);
}
public void Save(string filePath)
{
XElement element = this.ToXml();
element.Save(filePath);
}
public void UpdateTaskBarMenu()
{
Workspace.This.TaskBar.Menus.Clear();
Workspace.This.TaskBar.Menus.Add(new MenuItemData("Preferences...", null, command:new RestoreCommand()));
Workspace.This.TaskBar.Menus.Add(new SeparatorMenuItemData(null));
Workspace.This.TaskBar.Menus.Add(new MenuItemData("Start Techno", null, command: new StartTechnoCommand()));
Workspace.This.TaskBar.Menus.Add(new MenuItemData("Open Data folder", null, command: new OpenDataPathCommand()));
Workspace.This.TaskBar.Menus.Add(new MenuItemData("Open Engine folder", null, command: new OpenEnginePathCommand()));
MainViewModel model = Workspace.This.FirstDocument as MainViewModel;
Workspace.This.TaskBar.Menus.Add(new SeparatorMenuItemData(null));
Workspace.This.TaskBar.Menus.Add(new MenuItemData("Official Projects", null, command: new DisabledCommand()));
FillProjects(model, true);
Workspace.This.TaskBar.Menus.Add(new SeparatorMenuItemData(null));
Workspace.This.TaskBar.Menus.Add(new MenuItemData("Other Projects", null, command: new DisabledCommand()));
FillProjects(model, false);
Workspace.This.TaskBar.Menus.Add(new SeparatorMenuItemData(null));
Workspace.This.TaskBar.Menus.Add(new MenuItemData("Quit", null, command: new QuitCommand()));
}
private void FillProjects(MainViewModel model, bool globalProjects)
{
foreach (ProjectViewModel project in ProjectList.Where(proj => proj.IsGlobalProject == globalProjects))
{
MenuItemData projectMenu = new MenuItemData(project.Name, null, command: new SwitchProjectCommand(), data: project);
Workspace.This.TaskBar.Menus.Add(projectMenu);
if (model != null)
{
projectMenu.IsCheckable = true;
if (project == model.SelectedProject)
projectMenu.IsChecked = true;
else
projectMenu.IsChecked = false;
}
}
}
}
}