mirror of
https://onedev.site.tesses.net/crosslang/crosslangdevstudio
synced 2026-02-08 09:15:45 +00:00
First Commit
This commit is contained in:
220
ViewModels/ProjectConfigurationViewModel.cs
Normal file
220
ViewModels/ProjectConfigurationViewModel.cs
Normal file
@@ -0,0 +1,220 @@
|
||||
using System;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Avalonia;
|
||||
using Avalonia.Platform.Storage;
|
||||
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using CommunityToolkit.Mvvm.Messaging;
|
||||
using CrossLangDevStudio.Messages;
|
||||
using CrossLangDevStudio.Views;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace CrossLangDevStudio.ViewModels;
|
||||
|
||||
public partial class ProjectConfigurationViewModel : ViewModelBase, ISavable
|
||||
{
|
||||
/*
|
||||
<ComboBoxItem>Console Application</ComboBoxItem>
|
||||
<ComboBoxItem>Library</ComboBoxItem>
|
||||
<ComboBoxItem>Web Application</ComboBoxItem>
|
||||
<ComboBoxItem>Template</ComboBoxItem>
|
||||
<ComboBoxItem>Compile Tool</ComboBoxItem>
|
||||
<ComboBoxItem>Tool</ComboBoxItem>
|
||||
<ComboBoxItem>Archive</ComboBoxItem>
|
||||
*/
|
||||
static readonly string[] types = ["console","lib","app","template","compile_tool","tool","archive"];
|
||||
TabItemViewModel tab;
|
||||
public string FilePath { get; }
|
||||
bool _modified = false;
|
||||
private bool Modified
|
||||
{
|
||||
get => _modified;
|
||||
set
|
||||
{
|
||||
_modified = value;
|
||||
|
||||
if (value)
|
||||
{
|
||||
tab.Header = $"Project Configuration*";
|
||||
}
|
||||
else
|
||||
{
|
||||
tab.Header = "Project Configuration";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
string _name;
|
||||
string _version;
|
||||
string _icon;
|
||||
string _maintainer;
|
||||
string _repository;
|
||||
string _homepage;
|
||||
|
||||
string _license;
|
||||
|
||||
string _templatename;
|
||||
string _templatenamepretty;
|
||||
|
||||
string _description;
|
||||
|
||||
int _type;
|
||||
|
||||
|
||||
public string Name
|
||||
{
|
||||
get => _name;
|
||||
set
|
||||
{
|
||||
Modified = true;
|
||||
SetProperty(ref _name, value, nameof(Name));
|
||||
}
|
||||
}
|
||||
public string Version
|
||||
{
|
||||
get => _version;
|
||||
set
|
||||
{
|
||||
Modified = true;
|
||||
SetProperty(ref _version, value, nameof(Version));
|
||||
}
|
||||
}
|
||||
|
||||
public string Icon
|
||||
{
|
||||
get => _icon;
|
||||
set
|
||||
{
|
||||
Modified = true;
|
||||
SetProperty(ref _icon, value, nameof(Icon));
|
||||
}
|
||||
}
|
||||
public string Maintainer
|
||||
{
|
||||
get => _maintainer;
|
||||
set
|
||||
{
|
||||
Modified = true;
|
||||
SetProperty(ref _maintainer, value, nameof(Maintainer));
|
||||
}
|
||||
}
|
||||
public string Homepage
|
||||
{
|
||||
get => _homepage;
|
||||
set
|
||||
{
|
||||
Modified = true;
|
||||
SetProperty(ref _homepage, value, nameof(Homepage));
|
||||
}
|
||||
}
|
||||
public string Repository
|
||||
{
|
||||
get => _repository;
|
||||
set
|
||||
{
|
||||
Modified = true;
|
||||
SetProperty(ref _repository, value, nameof(Repository));
|
||||
}
|
||||
}
|
||||
|
||||
public string License
|
||||
{
|
||||
get => _license;
|
||||
set
|
||||
{
|
||||
Modified = true;
|
||||
SetProperty(ref _license, value, nameof(License));
|
||||
}
|
||||
}
|
||||
|
||||
public string TemplateName
|
||||
{
|
||||
get => _templatename;
|
||||
set
|
||||
{
|
||||
Modified = true;
|
||||
SetProperty(ref _templatename, value, nameof(TemplateName));
|
||||
}
|
||||
}
|
||||
public string TemplateNamePretty
|
||||
{
|
||||
get => _templatenamepretty;
|
||||
set
|
||||
{
|
||||
Modified = true;
|
||||
SetProperty(ref _templatenamepretty, value, nameof(TemplateNamePretty));
|
||||
}
|
||||
}
|
||||
public string Description
|
||||
{
|
||||
get => _description;
|
||||
set
|
||||
{
|
||||
Modified = true;
|
||||
SetProperty(ref _description, value, nameof(Description));
|
||||
}
|
||||
}
|
||||
|
||||
public int Type
|
||||
{
|
||||
get => _type;
|
||||
set
|
||||
{
|
||||
Modified = true;
|
||||
SetProperty(ref _type, value, nameof(Type));
|
||||
}
|
||||
}
|
||||
|
||||
public ProjectConfigurationViewModel(string configPath, TabItemViewModel tab)
|
||||
{
|
||||
FilePath = configPath;
|
||||
this.tab = tab;
|
||||
|
||||
|
||||
var config = JsonConvert.DeserializeObject<CrossLangConfig>(File.ReadAllText(configPath));
|
||||
|
||||
_name = config?.Name ?? "";
|
||||
_version = config?.Version.ToString() ?? "1.0.0.0-dev";
|
||||
_icon = config?.Icon ?? "";
|
||||
_repository = config?.Info?.Repoository ?? "";
|
||||
_homepage = config?.Info?.HomePage ?? "";
|
||||
_maintainer = config?.Info?.Maintainer ?? "";
|
||||
_license = config?.Info?.License ?? "";
|
||||
_templatename = config?.Info?.TemplateName ?? "";
|
||||
_templatenamepretty = config?.Info?.TemplateNamePretty ?? "";
|
||||
_type = Array.IndexOf(types, config?.Info?.Type ?? "console");
|
||||
_type = _type == -1 ? 0 : _type;
|
||||
_description = config?.Info?.Description ?? "";
|
||||
|
||||
}
|
||||
[RelayCommand]
|
||||
|
||||
public void Save()
|
||||
{
|
||||
var config = JsonConvert.DeserializeObject<CrossLangConfig>(File.ReadAllText(FilePath)) ?? new CrossLangConfig();
|
||||
config.Name = Name;
|
||||
if (CrossLangVersion.TryParse(Version, out var vers))
|
||||
{
|
||||
config.Version = vers;
|
||||
}
|
||||
config.Icon = string.IsNullOrWhiteSpace(Icon) ? null : Icon;
|
||||
|
||||
config.Info.Description = string.IsNullOrWhiteSpace(Description) ? null : Description;
|
||||
config.Info.HomePage = string.IsNullOrWhiteSpace(Homepage) ? null : Homepage;
|
||||
config.Info.License = string.IsNullOrWhiteSpace(License) ? null : License;
|
||||
config.Info.Maintainer = string.IsNullOrWhiteSpace(Maintainer) ? null : Maintainer;
|
||||
config.Info.Repoository = string.IsNullOrWhiteSpace(Repository) ? null : Repository;
|
||||
config.Info.TemplateName = string.IsNullOrWhiteSpace(TemplateName) ? null : TemplateName;
|
||||
config.Info.TemplateNamePretty = string.IsNullOrWhiteSpace(TemplateNamePretty) ? null : TemplateNamePretty;
|
||||
config.Info.Type = types[Type];
|
||||
File.WriteAllText(FilePath, JsonConvert.SerializeObject(config, Formatting.Indented, new JsonSerializerSettings()
|
||||
{
|
||||
NullValueHandling = NullValueHandling.Ignore
|
||||
}));
|
||||
Modified = false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user