forked from KSP-CKAN/CKAN-GUI
-
Notifications
You must be signed in to change notification settings - Fork 0
/
GUIMod.cs
115 lines (99 loc) · 4.45 KB
/
GUIMod.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace CKAN
{
public class GUIMod
{
private CkanModule Mod { get; set; }
public string Name { get { return Mod.name; } }
public bool IsInstalled { get; private set; }
public bool HasUpdate { get; private set; }
public bool IsIncompatible { get; private set; }
public bool IsAutodetected { get; private set; }
public string Authors { get; private set; }
public string InstalledVersion { get; private set; }
public string LatestVersion { get; private set; }
public string KSPversion { get; private set; }
public string Abstract { get; private set; }
public object Homepage { get; private set; }
public string Identifier { get; private set; }
public bool IsInstallChecked { get; set; }
public bool IsUpgradeChecked { get; set; }
public bool IsNew { get; set; }
public GUIMod(CkanModule mod, Registry registry, KSPVersion current_ksp_version)
{
//Currently anything which could alter these causes a full reload of the modlist
// If this is ever changed these could be moved into the properties
Mod = mod;
IsInstalled = registry.IsInstalled(mod.identifier);
IsInstallChecked = IsInstalled;
HasUpdate = registry.HasUpdate(mod.identifier, current_ksp_version);
IsIncompatible = !mod.IsCompatibleKSP(current_ksp_version);
IsAutodetected = registry.IsAutodetected(mod.identifier);
Authors = mod.author == null ? "N/A" : String.Join(",", mod.author);
var installedVersion = registry.InstalledVersion(mod.identifier);
var latestVersion = registry.LatestAvailable(mod.identifier, current_ksp_version);
var kspVersion = mod.ksp_version;
InstalledVersion = installedVersion != null ? installedVersion.ToString() : "-";
LatestVersion = latestVersion != null ? latestVersion.version.ToString() : "-";
KSPversion = kspVersion != null ? kspVersion.ToString() : "-";
Abstract = mod.@abstract;
Homepage = mod.resources != null && mod.resources.homepage != null
? (object) mod.resources.homepage
: "N/A";
Identifier = mod.identifier;
}
public CkanModule ToCkanModule()
{
return Mod;
}
public KeyValuePair<CkanModule, GUIModChangeType>? GetRequestedChange()
{
if (IsInstalled ^ IsInstallChecked)
{
var change_type = IsInstalled ? GUIModChangeType.Remove : GUIModChangeType.Install;
return new KeyValuePair<CkanModule, GUIModChangeType>(Mod, change_type);
}
if (IsInstalled && (IsInstallChecked && HasUpdate && IsUpgradeChecked))
{
return new KeyValuePair<CkanModule, GUIModChangeType>(Mod, GUIModChangeType.Update);
}
return null;
}
public static implicit operator CkanModule(GUIMod mod)
{
return mod.ToCkanModule();
}
public void SetUpgradeChecked(DataGridViewRow row, bool? setvalueto = null)
{
//Contract.Requires<ArgumentException>(row.Cells[1] is DataGridViewCheckBoxCell);
var update_cell = row.Cells[1] as DataGridViewCheckBoxCell;
var old_value = (bool)update_cell.Value;
bool value = (setvalueto.HasValue ? setvalueto.Value : old_value);
IsUpgradeChecked = value;
if(old_value != value) update_cell.Value = value;
}
public void SetInstallChecked(DataGridViewRow row)
{
//Contract.Requires<ArgumentException>(row.Cells[0] is DataGridViewCheckBoxCell);
var install_cell = row.Cells[0] as DataGridViewCheckBoxCell;
IsInstallChecked = (bool)install_cell.Value;
}
protected bool Equals(GUIMod other)
{
return Equals(Name, other.Name);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
return Equals((GUIMod) obj);
}
public override int GetHashCode()
{
return (Name != null ? Name.GetHashCode() : 0);
}
}
}