116 lines
4.1 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|