Work on documents, separated UI from Main

This commit is contained in:
2014-07-29 23:35:59 +03:00
parent 09224d9af7
commit 473f23378f
21 changed files with 316 additions and 226 deletions

View File

@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace RainmeterStudio.Documents
{
public class AutoRegisterAttribute : Attribute
{
}
}

View File

@ -1,132 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Media;
using RainmeterStudio.Model;
using RainmeterStudio.UI.Controller;
namespace RainmeterStudio.Documents
{
/// <summary>
/// Represents a document template
/// </summary>
public class DocumentTemplate<T> where T : IDocument
{
#region Private fields
private Func<T> _createFunction;
#endregion
/// <summary>
/// Gets the document template name
/// </summary>
public string Name { get; private set; }
#region Icon property
private ImageSource _icon = null;
/// <summary>
/// Gets or sets the template's icon
/// </summary>
public virtual ImageSource Icon
{
get
{
if (_icon == null)
return IconProvider.GetIcon("Template_" + Name);
return _icon;
}
set
{
_icon = value;
}
}
#endregion
#region Display text property
private string _displayText = null;
/// <summary>
/// Gets or sets the display text
/// </summary>
public virtual string DisplayText
{
get
{
if (_displayText == null)
return Resources.Strings.ResourceManager.GetString("Template_" + Name + "_DisplayText");
return _displayText;
}
set
{
_displayText = value;
}
}
#endregion
#region Description property
private string _description = null;
/// <summary>
/// Gets or sets the description
/// </summary>
public virtual string Description
{
get
{
if (_description == null)
return Resources.Strings.ResourceManager.GetString("Template_" + Name + "_Description");
return _description;
}
set
{
_description = value;
}
}
#endregion
/// <summary>
/// Gets or sets the default extension of this template
/// </summary>
public string DefaultExtension { get; set; }
/// <summary>
/// Gets or sets the category in which this template belongs
/// </summary>
public virtual string Category { get; set; }
/// <summary>
/// Initializes the document template
/// </summary>
/// <param name="name">Name of document template</param>
public DocumentTemplate(string name, string defaultExtension = null, string category = null, Func<T> createDocument = null)
{
Name = name;
DefaultExtension = defaultExtension;
_createFunction = createDocument;
}
/// <summary>
/// Creates a document of type T
/// </summary>
/// <returns></returns>
public virtual T CreateDocument()
{
if (_createFunction != null)
return _createFunction();
return default(T);
}
}
}

View File

@ -0,0 +1,36 @@
using RainmeterStudio.Model;
namespace RainmeterStudio.Documents
{
/// <summary>
/// Represents a document template
/// </summary>
public abstract class DocumentTemplate
{
/// <summary>
/// Gets the document template name
/// </summary>
public string Name { get; private set; }
/// <summary>
/// Gets the default extension of this template
/// </summary>
public string DefaultExtension { get; private set; }
/// <summary>
/// Initializes the document template
/// </summary>
/// <param name="name">Name of template</param>
/// <param name="defaultExtension">Default extension</param>
public DocumentTemplate(string name, string defaultExtension)
{
Name = name;
DefaultExtension = defaultExtension;
}
/// <summary>
/// Creates a document using this template
/// </summary>
/// <returns></returns>
public abstract IDocument CreateDocument();
}
}

View File

@ -16,9 +16,9 @@ namespace RainmeterStudio.Documents.Text
/// <summary>
/// Gets or sets the text associated with this document
/// </summary>
public string Text
public List<string> Lines
{
get; set;
get; private set;
}
/// <summary>
@ -67,7 +67,7 @@ namespace RainmeterStudio.Documents.Text
/// </summary>
public TextDocument()
{
Text = String.Empty;
Lines = new List<string>();
}
}
}

View File

@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RainmeterStudio.Model;
namespace RainmeterStudio.Documents.Text
{
/// <summary>
/// A blank text document template
/// </summary>
[AutoRegister]
public class TextDocumentTemplate : DocumentTemplate
{
public TextDocumentTemplate()
: base("TextDocument", "txt")
{
}
public override IDocument CreateDocument()
{
return new TextDocument();
}
}
}

View File

@ -7,7 +7,7 @@ using RainmeterStudio.Model;
namespace RainmeterStudio.Documents.Text
{
/*public class TextEditor : IDocumentEditor
public class TextEditor : IDocumentEditor
{
private TextDocument _document;
private TextEditorControl _control;
@ -18,10 +18,14 @@ namespace RainmeterStudio.Documents.Text
_control = new TextEditorControl(document);
}
public override IDocument Document { get { return _document; } }
public IDocument AttachedDocument
{
get { return _document; }
}
public override string Title { get { return _document.Name; } }
public override System.Windows.UIElement EditorUI { get { return _control; } }
}*/
public System.Windows.UIElement EditorUI
{
get { return _control; }
}
}
}

View File

@ -26,7 +26,7 @@ namespace RainmeterStudio.Documents.Text
InitializeComponent();
_document = document;
text.Text = document.Text;
text.Text = document.Lines.Aggregate((a, b) => a + "\n" + b);
}
}
}

View File

@ -8,51 +8,17 @@ using RainmeterStudio.Model;
namespace RainmeterStudio.Documents.Text
{
/*public class TextEditorFactory : IDocumentEditorFactory
[AutoRegister]
public class TextEditorFactory : IDocumentEditorFactory
{
private TextStorage _storage = new TextStorage();
/// <inheritdoc />
public string EditorName
{
get { return Resources.Strings.DocumentEditor_Text_Name; }
}
/// <inheritdoc />
public IEnumerable<DocumentTemplate> CreateDocumentFormats
{
get
{
yield return new DocumentTemplate()
{
Name = Resources.Strings.DocumentFormat_TextFile_Name,
Category = Resources.Strings.Category_Utility,
DefaultExtension = ".txt",
Description = Resources.Strings.DocumentFormat_TextFile_Description,
Icon = new System.Windows.Media.Imaging.BitmapImage(new Uri(Resources.Icons.DocumentTemplate_Text, UriKind.RelativeOrAbsolute)),
Factory = this
};
}
}
public IDocumentEditor CreateEditor(IDocument document)
{
TextDocument textDocument = document as TextDocument;
if (textDocument == null)
throw new ArgumentException("Cannot edit provided document.");
return new TextEditor(textDocument);
return new TextEditor((TextDocument)document);
}
public IDocumentStorage Storage { get { return _storage; } }
public IDocument CreateDocument(DocumentTemplate format, string path)
public bool CanEdit(Type type)
{
var document = new TextDocument();
document.FilePath = path;
return document;
return type.Equals(typeof(TextDocument));
}
}*/
}
}

View File

@ -6,7 +6,8 @@ namespace RainmeterStudio.Documents.Text
{
/// <summary>
/// Storage for text files
/// </summary>
/// </summary>
[AutoRegister]
public class TextStorage : IDocumentStorage
{
/// <inheritdoc />
@ -15,7 +16,7 @@ namespace RainmeterStudio.Documents.Text
TextDocument document = new TextDocument();
document.Reference.Path = path;
document.Reference.Name = Path.GetFileName(path);
document.Text = File.ReadAllText(path);
document.Lines.AddRange(File.ReadAllLines(path));
return document;
}
@ -28,7 +29,7 @@ namespace RainmeterStudio.Documents.Text
if (textDocument == null)
throw new ArgumentException("Provided document is not supported by this storage.");
File.WriteAllText(path, textDocument.Text);
File.WriteAllLines(path, textDocument.Lines);
}
/// <inheritdoc />