mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
Work on project editor
This commit is contained in:
parent
b6d8730783
commit
51e0b0d612
@ -1,5 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.ComponentModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
@ -12,8 +14,13 @@ namespace RainmeterStudio.Core.Model
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Defines a Rainmeter Studio project
|
/// Defines a Rainmeter Studio project
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class Project
|
public class Project : INotifyPropertyChanged
|
||||||
{
|
{
|
||||||
|
private string _author;
|
||||||
|
private Reference _autoLoadFile;
|
||||||
|
private Version _version, _minimumWindows, _minimumRainmeter;
|
||||||
|
private Reference _root;
|
||||||
|
|
||||||
#region Properties
|
#region Properties
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -29,6 +36,9 @@ namespace RainmeterStudio.Core.Model
|
|||||||
set
|
set
|
||||||
{
|
{
|
||||||
Root.Name = value;
|
Root.Name = value;
|
||||||
|
|
||||||
|
if (PropertyChanged != null)
|
||||||
|
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,6 +55,9 @@ namespace RainmeterStudio.Core.Model
|
|||||||
set
|
set
|
||||||
{
|
{
|
||||||
Root.StoragePath = value;
|
Root.StoragePath = value;
|
||||||
|
|
||||||
|
if (PropertyChanged != null)
|
||||||
|
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,19 +65,58 @@ namespace RainmeterStudio.Core.Model
|
|||||||
/// Gets or sets the author of the project
|
/// Gets or sets the author of the project
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement(ElementName = "author", Order = 2)]
|
[XmlElement(ElementName = "author", Order = 2)]
|
||||||
public string Author { get; set; }
|
public string Author
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _author;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_author = value;
|
||||||
|
|
||||||
|
if (PropertyChanged != null)
|
||||||
|
PropertyChanged(this, new PropertyChangedEventArgs("Author"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the version of the project
|
/// Gets or sets the version of the project
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement(ElementName = "version", Order = 3)]
|
[XmlElement(ElementName = "version", Order = 3)]
|
||||||
public Version Version { get; set; }
|
public Version Version
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _version;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_version = value;
|
||||||
|
|
||||||
|
if (PropertyChanged != null)
|
||||||
|
PropertyChanged(this, new PropertyChangedEventArgs("Version"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the reference to the file that automatically loads at package installation
|
/// Gets or sets the reference to the file that automatically loads at package installation
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlIgnore]
|
[XmlIgnore]
|
||||||
public Reference AutoLoadFile { get; set; }
|
public Reference AutoLoadFile
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _autoLoadFile;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_autoLoadFile = value;
|
||||||
|
|
||||||
|
if (PropertyChanged != null)
|
||||||
|
PropertyChanged(this, new PropertyChangedEventArgs("AutoLoadFile"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the qualified name of the auto load file
|
/// Gets or sets the qualified name of the auto load file
|
||||||
@ -86,7 +138,7 @@ namespace RainmeterStudio.Core.Model
|
|||||||
/// Gets or sets the list of variable files
|
/// Gets or sets the list of variable files
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlIgnore]
|
[XmlIgnore]
|
||||||
public List<Reference> VariableFiles { get; set; }
|
public ObservableCollection<Reference> VariableFiles { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the list of variable files qualified names
|
/// Gets or sets the list of variable files qualified names
|
||||||
@ -101,7 +153,7 @@ namespace RainmeterStudio.Core.Model
|
|||||||
set
|
set
|
||||||
{
|
{
|
||||||
VariableFiles.Clear();
|
VariableFiles.Clear();
|
||||||
VariableFiles.AddRange(value.Select(x => Root.GetReference(x)));
|
value.Select(x => Root.GetReference(x)).ForEach(VariableFiles.Add);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,19 +161,58 @@ namespace RainmeterStudio.Core.Model
|
|||||||
/// Gets or sets the minimum rainmeter version
|
/// Gets or sets the minimum rainmeter version
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement(ElementName = "minimumRainmeter", Order = 4)]
|
[XmlElement(ElementName = "minimumRainmeter", Order = 4)]
|
||||||
public Version MinimumRainmeter { get; set; }
|
public Version MinimumRainmeter
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _minimumRainmeter;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_minimumRainmeter = value;
|
||||||
|
|
||||||
|
if (PropertyChanged != null)
|
||||||
|
PropertyChanged(this, new PropertyChangedEventArgs("MinimumRainmeter"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the minimum Windows version
|
/// Gets or sets the minimum Windows version
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement(ElementName = "minimumWindows", Order = 5)]
|
[XmlElement(ElementName = "minimumWindows", Order = 5)]
|
||||||
public Version MinimumWindows { get; set; }
|
public Version MinimumWindows
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _minimumWindows;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_minimumWindows = value;
|
||||||
|
|
||||||
|
if (PropertyChanged != null)
|
||||||
|
PropertyChanged(this, new PropertyChangedEventArgs("MinimumWindows"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the root node
|
/// Gets or sets the root node
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[XmlElement(ElementName = "root", Order = 6)]
|
[XmlElement(ElementName = "root", Order = 6)]
|
||||||
public Reference Root { get; set; }
|
public Reference Root
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _root;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_root = value;
|
||||||
|
|
||||||
|
if (PropertyChanged != null)
|
||||||
|
PropertyChanged(this, new PropertyChangedEventArgs("Root"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -133,7 +224,7 @@ namespace RainmeterStudio.Core.Model
|
|||||||
public Project()
|
public Project()
|
||||||
{
|
{
|
||||||
Root = new Reference(String.Empty);
|
Root = new Reference(String.Empty);
|
||||||
VariableFiles = new List<Reference>();
|
VariableFiles = new ObservableCollection<Reference>();
|
||||||
Version = new Version();
|
Version = new Version();
|
||||||
MinimumRainmeter = new Version("3.1");
|
MinimumRainmeter = new Version("3.1");
|
||||||
MinimumWindows = new Version("5.1");
|
MinimumWindows = new Version("5.1");
|
||||||
@ -155,5 +246,10 @@ namespace RainmeterStudio.Core.Model
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Triggered when a property changes
|
||||||
|
/// </summary>
|
||||||
|
public event PropertyChangedEventHandler PropertyChanged;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,27 +13,27 @@ namespace RainmeterStudio.Core.Storage
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="path">Path to file</param>
|
/// <param name="path">Path to file</param>
|
||||||
/// <returns>Read document</returns>
|
/// <returns>Read document</returns>
|
||||||
IDocument Read(string path);
|
IDocument ReadDocument(string path);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Writes a document to a file
|
/// Writes a document to a file
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="path">Path to file</param>
|
/// <param name="path">Path to file</param>
|
||||||
/// <param name="document">Document to write</param>
|
/// <param name="document">Document to write</param>
|
||||||
void Write(string path, IDocument document);
|
void WriteDocument(IDocument document, string path);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tests if the file can be read by this storage
|
/// Tests if the file can be read by this storage
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="path">Path to file</param>
|
/// <param name="path">Path to file</param>
|
||||||
/// <returns>True if file can be read</returns>
|
/// <returns>True if file can be read</returns>
|
||||||
bool CanRead(string path);
|
bool CanReadDocument(string path);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tests if the document can be written by this storage
|
/// Tests if the document can be written by this storage
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="documentType">Document type</param>
|
/// <param name="documentType">Document type</param>
|
||||||
/// <returns>True if the document can be written</returns>
|
/// <returns>True if the document can be written</returns>
|
||||||
bool CanWrite(Type documentType);
|
bool CanWriteDocument(Type documentType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,22 +9,22 @@ namespace RainmeterStudio.SkinDesignerPlugin
|
|||||||
{
|
{
|
||||||
public class SkinStorage : IDocumentStorage
|
public class SkinStorage : IDocumentStorage
|
||||||
{
|
{
|
||||||
public IDocument Read(string path)
|
public IDocument ReadDocument(string path)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Write(string path, IDocument document)
|
public void WriteDocument(IDocument document, string path)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanRead(string path)
|
public bool CanReadDocument(string path)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanWrite(Type documentType)
|
public bool CanWriteDocument(Type documentType)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,8 @@
|
|||||||
using System;
|
using System.IO;
|
||||||
using System.Text;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
using RainmeterStudio.Storage;
|
|
||||||
using System.IO;
|
|
||||||
using RainmeterStudio.Core.Model;
|
using RainmeterStudio.Core.Model;
|
||||||
|
using RainmeterStudio.Editor.ProjectEditor;
|
||||||
using Version = RainmeterStudio.Core.Utils.Version;
|
using Version = RainmeterStudio.Core.Utils.Version;
|
||||||
|
|
||||||
namespace RainmeterStudio.Tests.Storage
|
namespace RainmeterStudio.Tests.Storage
|
||||||
@ -35,8 +32,8 @@ namespace RainmeterStudio.Tests.Storage
|
|||||||
Project project = CreateProject();
|
Project project = CreateProject();
|
||||||
|
|
||||||
// Save and load
|
// Save and load
|
||||||
ProjectStorage.Save(project, filename);
|
ProjectStorage.Write(project, filename);
|
||||||
Project res = ProjectStorage.Load(filename);
|
Project res = ProjectStorage.Read(filename);
|
||||||
|
|
||||||
// Verify results
|
// Verify results
|
||||||
Assert.IsNotNull(res);
|
Assert.IsNotNull(res);
|
||||||
@ -59,8 +56,8 @@ namespace RainmeterStudio.Tests.Storage
|
|||||||
Project project = new Project();
|
Project project = new Project();
|
||||||
|
|
||||||
// Save and load project
|
// Save and load project
|
||||||
ProjectStorage.Save(project, filename);
|
ProjectStorage.Write(project, filename);
|
||||||
Project res = ProjectStorage.Load(filename);
|
Project res = ProjectStorage.Read(filename);
|
||||||
|
|
||||||
// Test results
|
// Test results
|
||||||
Assert.IsNotNull(res);
|
Assert.IsNotNull(res);
|
||||||
|
@ -13,7 +13,7 @@ namespace RainmeterStudio.TextEditorPlugin
|
|||||||
public class TextStorage : IDocumentStorage
|
public class TextStorage : IDocumentStorage
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
IDocument IDocumentStorage.Read(string path)
|
public IDocument ReadDocument(string path)
|
||||||
{
|
{
|
||||||
TextDocument document = new TextDocument();
|
TextDocument document = new TextDocument();
|
||||||
document.Reference = new Reference(Path.GetFileName(path), path);
|
document.Reference = new Reference(Path.GetFileName(path), path);
|
||||||
@ -23,7 +23,7 @@ namespace RainmeterStudio.TextEditorPlugin
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public void Write(string path, IDocument document)
|
public void WriteDocument(IDocument document, string path)
|
||||||
{
|
{
|
||||||
TextDocument textDocument = document as TextDocument;
|
TextDocument textDocument = document as TextDocument;
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ namespace RainmeterStudio.TextEditorPlugin
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool CanRead(string path)
|
public bool CanReadDocument(string path)
|
||||||
{
|
{
|
||||||
// Open the file
|
// Open the file
|
||||||
FileStream file = File.OpenRead(path);
|
FileStream file = File.OpenRead(path);
|
||||||
@ -64,7 +64,7 @@ namespace RainmeterStudio.TextEditorPlugin
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CanWrite(Type documentType)
|
public bool CanWriteDocument(Type documentType)
|
||||||
{
|
{
|
||||||
return documentType.Equals(typeof(TextDocument));
|
return documentType.Equals(typeof(TextDocument));
|
||||||
}
|
}
|
||||||
|
@ -156,7 +156,7 @@ namespace RainmeterStudio.Business
|
|||||||
throw new ArgumentException("Reference cannot be empty");
|
throw new ArgumentException("Reference cannot be empty");
|
||||||
|
|
||||||
// Save
|
// Save
|
||||||
storage.Write(document.Reference.StoragePath, document);
|
storage.WriteDocument(document, document.Reference.StoragePath);
|
||||||
|
|
||||||
// Clear dirty flag
|
// Clear dirty flag
|
||||||
document.IsDirty = false;
|
document.IsDirty = false;
|
||||||
@ -173,7 +173,7 @@ namespace RainmeterStudio.Business
|
|||||||
var storage = FindStorage(document);
|
var storage = FindStorage(document);
|
||||||
|
|
||||||
// Save
|
// Save
|
||||||
storage.Write(path, document);
|
storage.WriteDocument(document, path);
|
||||||
|
|
||||||
// Update reference
|
// Update reference
|
||||||
document.Reference = new Reference(Path.GetFileName(path), path);
|
document.Reference = new Reference(Path.GetFileName(path), path);
|
||||||
@ -193,7 +193,7 @@ namespace RainmeterStudio.Business
|
|||||||
var storage = FindStorage(document);
|
var storage = FindStorage(document);
|
||||||
|
|
||||||
// Save
|
// Save
|
||||||
storage.Write(path, document);
|
storage.WriteDocument(document, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -249,9 +249,9 @@ namespace RainmeterStudio.Business
|
|||||||
IDocument document = null;
|
IDocument document = null;
|
||||||
|
|
||||||
foreach (var storage in Storages)
|
foreach (var storage in Storages)
|
||||||
if (storage.CanRead(path))
|
if (storage.CanReadDocument(path))
|
||||||
{
|
{
|
||||||
document = storage.Read(path);
|
document = storage.ReadDocument(path);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -272,7 +272,7 @@ namespace RainmeterStudio.Business
|
|||||||
IDocumentStorage storage = null;
|
IDocumentStorage storage = null;
|
||||||
|
|
||||||
foreach (var s in Storages)
|
foreach (var s in Storages)
|
||||||
if (s.CanWrite(document.GetType()))
|
if (s.CanWriteDocument(document.GetType()))
|
||||||
{
|
{
|
||||||
storage = s;
|
storage = s;
|
||||||
break;
|
break;
|
||||||
|
@ -5,7 +5,7 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using RainmeterStudio.Core.Model;
|
using RainmeterStudio.Core.Model;
|
||||||
using RainmeterStudio.Core.Storage;
|
using RainmeterStudio.Core.Storage;
|
||||||
using RainmeterStudio.Storage;
|
using RainmeterStudio.Editor.ProjectEditor;
|
||||||
|
|
||||||
namespace RainmeterStudio.Business
|
namespace RainmeterStudio.Business
|
||||||
{
|
{
|
||||||
@ -88,7 +88,7 @@ namespace RainmeterStudio.Business
|
|||||||
Close();
|
Close();
|
||||||
|
|
||||||
// Open using storage
|
// Open using storage
|
||||||
ActiveProject = Storage.Load(path);
|
ActiveProject = Storage.Read(path);
|
||||||
ActiveProject.Path = path;
|
ActiveProject.Path = path;
|
||||||
|
|
||||||
// Raise event
|
// Raise event
|
||||||
@ -106,7 +106,7 @@ namespace RainmeterStudio.Business
|
|||||||
throw new InvalidOperationException("Cannot save a project that is not opened.");
|
throw new InvalidOperationException("Cannot save a project that is not opened.");
|
||||||
|
|
||||||
// Save
|
// Save
|
||||||
Storage.Save(ActiveProject);
|
Storage.Write(ActiveProject);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
75
RainmeterStudio/Editor/ProjectEditor/ProjectDocument.cs
Normal file
75
RainmeterStudio/Editor/ProjectEditor/ProjectDocument.cs
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using RainmeterStudio.Core.Model;
|
||||||
|
|
||||||
|
namespace RainmeterStudio.Editor.ProjectEditor
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// A project document
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>Unlike the Project class, this class implements the 'IDocument'
|
||||||
|
/// interface. This is a proxy class for the actual project.</remarks>
|
||||||
|
public class ProjectDocument : IDocument
|
||||||
|
{
|
||||||
|
private Reference _reference;
|
||||||
|
private bool _isDirty = false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the reference of the document
|
||||||
|
/// </summary>
|
||||||
|
public Reference Reference
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _reference;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_reference = value;
|
||||||
|
|
||||||
|
if (PropertyChanged != null)
|
||||||
|
PropertyChanged(this, new PropertyChangedEventArgs("Reference"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public bool IsDirty
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _isDirty;
|
||||||
|
}
|
||||||
|
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_isDirty = value;
|
||||||
|
|
||||||
|
if (PropertyChanged != null)
|
||||||
|
PropertyChanged(this, new PropertyChangedEventArgs("IsDirty"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the project this project document is linked to
|
||||||
|
/// </summary>
|
||||||
|
public Project Project { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Event triggered when a property changes value
|
||||||
|
/// </summary>
|
||||||
|
public event PropertyChangedEventHandler PropertyChanged;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes this project document
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="project">The actual project this document is linked to</param>
|
||||||
|
public ProjectDocument(Project project)
|
||||||
|
{
|
||||||
|
Project = project;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
38
RainmeterStudio/Editor/ProjectEditor/ProjectEditorFactory.cs
Normal file
38
RainmeterStudio/Editor/ProjectEditor/ProjectEditorFactory.cs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using RainmeterStudio.Core;
|
||||||
|
using RainmeterStudio.Core.Documents;
|
||||||
|
using RainmeterStudio.Core.Model;
|
||||||
|
|
||||||
|
namespace RainmeterStudio.Editor.ProjectEditor
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Project editor factory
|
||||||
|
/// </summary>
|
||||||
|
[PluginExport]
|
||||||
|
public class ProjectEditorFactory : IDocumentEditorFactory
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new project editor
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="document">The project document</param>
|
||||||
|
/// <returns>Created editor</returns>
|
||||||
|
public IDocumentEditor CreateEditor(IDocument document)
|
||||||
|
{
|
||||||
|
return new ProjectEditorUI((ProjectDocument)document);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks if this editor can edit documents of given type
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="type">Type</param>
|
||||||
|
/// <returns>True if the project editor can edit that kind of document</returns>
|
||||||
|
public bool CanEdit(Type type)
|
||||||
|
{
|
||||||
|
return (type.Equals(typeof(ProjectDocument)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
31
RainmeterStudio/Editor/ProjectEditor/ProjectEditorUI.xaml
Normal file
31
RainmeterStudio/Editor/ProjectEditor/ProjectEditorUI.xaml
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<UserControl x:Class="RainmeterStudio.Editor.ProjectEditor.ProjectEditorUI"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:r="clr-namespace:RainmeterStudio.Resources"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
d:DesignHeight="300" d:DesignWidth="300">
|
||||||
|
|
||||||
|
<ScrollViewer VerticalScrollBarVisibility="Auto"
|
||||||
|
HorizontalScrollBarVisibility="Disabled">
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
|
<TextBlock Grid.Row="0" Grid.Column="0">Name:</TextBlock>
|
||||||
|
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Name, Mode=TwoWay}" />
|
||||||
|
|
||||||
|
<TextBlock Grid.Row="1" Grid.Column="0">Author:</TextBlock>
|
||||||
|
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Author, Mode=TwoWay}" />
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
</ScrollViewer>
|
||||||
|
</UserControl>
|
63
RainmeterStudio/Editor/ProjectEditor/ProjectEditorUI.xaml.cs
Normal file
63
RainmeterStudio/Editor/ProjectEditor/ProjectEditorUI.xaml.cs
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Data;
|
||||||
|
using System.Windows.Documents;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Imaging;
|
||||||
|
using System.Windows.Navigation;
|
||||||
|
using System.Windows.Shapes;
|
||||||
|
using RainmeterStudio.Core.Documents;
|
||||||
|
using RainmeterStudio.Core.Model;
|
||||||
|
|
||||||
|
namespace RainmeterStudio.Editor.ProjectEditor
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for ProjectEditorUI.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class ProjectEditorUI : UserControl, IDocumentEditor
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the attached project document being edited
|
||||||
|
/// </summary>
|
||||||
|
public ProjectDocument Document { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the attached document
|
||||||
|
/// </summary>
|
||||||
|
public IDocument AttachedDocument
|
||||||
|
{
|
||||||
|
get { return Document; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the UI element to be displayed in the document window
|
||||||
|
/// </summary>
|
||||||
|
public UIElement EditorUI
|
||||||
|
{
|
||||||
|
get { return this; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes this project editor UI
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="document"></param>
|
||||||
|
public ProjectEditorUI(ProjectDocument document)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
Document = document;
|
||||||
|
Document.Project.PropertyChanged += Project_PropertyChanged;
|
||||||
|
DataContext = Document.Project;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Project_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
|
||||||
|
{
|
||||||
|
Document.IsDirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -8,7 +8,7 @@ using RainmeterStudio.Business;
|
|||||||
using RainmeterStudio.Core.Documents;
|
using RainmeterStudio.Core.Documents;
|
||||||
using RainmeterStudio.Core.Model;
|
using RainmeterStudio.Core.Model;
|
||||||
using RainmeterStudio.Core.Storage;
|
using RainmeterStudio.Core.Storage;
|
||||||
using RainmeterStudio.Storage;
|
using RainmeterStudio.Editor.ProjectEditor;
|
||||||
using RainmeterStudio.UI;
|
using RainmeterStudio.UI;
|
||||||
using RainmeterStudio.UI.Controller;
|
using RainmeterStudio.UI.Controller;
|
||||||
|
|
||||||
|
@ -65,6 +65,10 @@
|
|||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Page Include="Editor\ProjectEditor\ProjectEditorUI.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</Page>
|
||||||
<Page Include="UI\App.xaml">
|
<Page Include="UI\App.xaml">
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
@ -73,6 +77,11 @@
|
|||||||
<Compile Include="Business\PluginManager.cs" />
|
<Compile Include="Business\PluginManager.cs" />
|
||||||
<Compile Include="Business\ProjectManager.cs" />
|
<Compile Include="Business\ProjectManager.cs" />
|
||||||
<Compile Include="Documents\EmptyProjectTemplate.cs" />
|
<Compile Include="Documents\EmptyProjectTemplate.cs" />
|
||||||
|
<Compile Include="Editor\ProjectEditor\ProjectDocument.cs" />
|
||||||
|
<Compile Include="Editor\ProjectEditor\ProjectEditorFactory.cs" />
|
||||||
|
<Compile Include="Editor\ProjectEditor\ProjectEditorUI.xaml.cs">
|
||||||
|
<DependentUpon>ProjectEditorUI.xaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="MainClass.cs" />
|
<Compile Include="MainClass.cs" />
|
||||||
<Compile Include="Interop\NativeLibrary.cs" />
|
<Compile Include="Interop\NativeLibrary.cs" />
|
||||||
<Compile Include="Rainmeter.cs" />
|
<Compile Include="Rainmeter.cs" />
|
||||||
@ -87,7 +96,7 @@
|
|||||||
<DesignTime>True</DesignTime>
|
<DesignTime>True</DesignTime>
|
||||||
<DependentUpon>Strings.resx</DependentUpon>
|
<DependentUpon>Strings.resx</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Storage\ProjectStorage.cs" />
|
<Compile Include="Editor\ProjectEditor\ProjectStorage.cs" />
|
||||||
<Compile Include="UI\Command.cs" />
|
<Compile Include="UI\Command.cs" />
|
||||||
<Compile Include="UI\Controller\IconProvider.cs" />
|
<Compile Include="UI\Controller\IconProvider.cs" />
|
||||||
<Compile Include="UI\Controller\ProjectController.cs" />
|
<Compile Include="UI\Controller\ProjectController.cs" />
|
||||||
@ -248,6 +257,9 @@
|
|||||||
<Resource Include="Resources\Icons\16\disk.png" />
|
<Resource Include="Resources\Icons\16\disk.png" />
|
||||||
<Resource Include="Resources\Icons\16\disk_multiple.png" />
|
<Resource Include="Resources\Icons\16\disk_multiple.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Storage\" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
@ -1,69 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Xml.Serialization;
|
|
||||||
using RainmeterStudio.Core.Model;
|
|
||||||
using RainmeterStudio.Core.Storage;
|
|
||||||
|
|
||||||
namespace RainmeterStudio.Storage
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Project storage, loads and saves project files
|
|
||||||
/// </summary>
|
|
||||||
public class ProjectStorage
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Loads a project from file
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="path">Path to file to load</param>
|
|
||||||
/// <returns>Loaded project</returns>
|
|
||||||
public Project Load(string path)
|
|
||||||
{
|
|
||||||
// Open file
|
|
||||||
var file = File.OpenText(path);
|
|
||||||
|
|
||||||
// Deserialize file
|
|
||||||
var serializer = new XmlSerializer(typeof(Project), new XmlRootAttribute("project"));
|
|
||||||
Project project = serializer.Deserialize(file) as Project;
|
|
||||||
|
|
||||||
if (project != null)
|
|
||||||
{
|
|
||||||
project.Path = path;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clean up
|
|
||||||
file.Close();
|
|
||||||
return project;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Saves a project to file
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="project">Project to save</param>
|
|
||||||
/// <param name="path">File to save to</param>
|
|
||||||
public void Save(Project project, string path)
|
|
||||||
{
|
|
||||||
// Open file
|
|
||||||
var file = File.OpenWrite(path);
|
|
||||||
|
|
||||||
// Serialize file
|
|
||||||
var serializer = new XmlSerializer(typeof(Project), new XmlRootAttribute("project"));
|
|
||||||
serializer.Serialize(file, project);
|
|
||||||
|
|
||||||
// Clean up
|
|
||||||
file.Close();
|
|
||||||
project.Path = path;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Saves a project
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="project">Saves a project to the path specified in the 'Path' property</param>
|
|
||||||
public void Save(Project project)
|
|
||||||
{
|
|
||||||
Save(project, project.Path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -15,7 +15,6 @@ using RainmeterStudio.Business;
|
|||||||
using RainmeterStudio.Core.Documents;
|
using RainmeterStudio.Core.Documents;
|
||||||
using RainmeterStudio.Core.Model;
|
using RainmeterStudio.Core.Model;
|
||||||
using RainmeterStudio.Core.Model.Events;
|
using RainmeterStudio.Core.Model.Events;
|
||||||
using RainmeterStudio.Storage;
|
|
||||||
using RainmeterStudio.UI.Controller;
|
using RainmeterStudio.UI.Controller;
|
||||||
using RainmeterStudio.UI.Panels;
|
using RainmeterStudio.UI.Panels;
|
||||||
using Xceed.Wpf.AvalonDock.Layout;
|
using Xceed.Wpf.AvalonDock.Layout;
|
||||||
|
@ -1,23 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Collections.ObjectModel;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Linq.Expressions;
|
|
||||||
using System.Text;
|
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using System.Windows.Data;
|
|
||||||
using System.Windows.Documents;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using System.Windows.Media;
|
|
||||||
using System.Windows.Media.Imaging;
|
|
||||||
using System.Windows.Navigation;
|
|
||||||
using System.Windows.Shapes;
|
|
||||||
using RainmeterStudio.Core.Model;
|
using RainmeterStudio.Core.Model;
|
||||||
using RainmeterStudio.Core.Utils;
|
using RainmeterStudio.Core.Utils;
|
||||||
using RainmeterStudio.Interop;
|
|
||||||
using RainmeterStudio.Storage;
|
|
||||||
using RainmeterStudio.UI.Controller;
|
using RainmeterStudio.UI.Controller;
|
||||||
using RainmeterStudio.UI.ViewModel;
|
using RainmeterStudio.UI.ViewModel;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user