mirror of
				https://github.com/chibicitiberiu/rainmeter-studio.git
				synced 2024-02-24 04:33:31 +00:00 
			
		
		
		
	Work on document manager
This commit is contained in:
		@@ -0,0 +1,13 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace RainmeterStudio.Documents.DocumentEditorFeatures
 | 
			
		||||
{
 | 
			
		||||
    public interface ICustomDocumentTitleProvider
 | 
			
		||||
    {
 | 
			
		||||
        string Title { get; }
 | 
			
		||||
        event EventHandler TitleChanged;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,16 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using RainmeterStudio.Model;
 | 
			
		||||
 | 
			
		||||
namespace RainmeterStudio.Documents.DocumentEditorFeatures
 | 
			
		||||
{
 | 
			
		||||
    interface ISelectionPropertiesProvider
 | 
			
		||||
    {
 | 
			
		||||
        string SelectionName { get; }
 | 
			
		||||
        IEnumerable<Property> SelectionProperties { get; }
 | 
			
		||||
 | 
			
		||||
        event EventHandler SelectionChanged;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,15 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace RainmeterStudio.Documents.DocumentEditorFeatures
 | 
			
		||||
{
 | 
			
		||||
    public interface IToolboxProvider
 | 
			
		||||
    {
 | 
			
		||||
        bool SupportsToolboxDrop { get; }
 | 
			
		||||
        IEnumerable<string> ToolboxItems { get; }
 | 
			
		||||
 | 
			
		||||
        event EventHandler ToolboxItemsChanged;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,12 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace RainmeterStudio.Documents.DocumentEditorFeatures
 | 
			
		||||
{
 | 
			
		||||
    public interface IUndoSupport
 | 
			
		||||
    {
 | 
			
		||||
        // TODO
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										132
									
								
								RainmeterStudio/Documents/DocumentTemplate.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										132
									
								
								RainmeterStudio/Documents/DocumentTemplate.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,132 @@
 | 
			
		||||
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);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								RainmeterStudio/Documents/IDocumentEditor.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								RainmeterStudio/Documents/IDocumentEditor.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Windows;
 | 
			
		||||
using RainmeterStudio.Model;
 | 
			
		||||
 | 
			
		||||
namespace RainmeterStudio.Documents
 | 
			
		||||
{
 | 
			
		||||
    public interface IDocumentEditor
 | 
			
		||||
    {
 | 
			
		||||
        IDocument AttachedDocument { get; }
 | 
			
		||||
        UIElement EditorUI { get; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										25
									
								
								RainmeterStudio/Documents/IDocumentEditorFactory.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								RainmeterStudio/Documents/IDocumentEditorFactory.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using RainmeterStudio.Model;
 | 
			
		||||
 | 
			
		||||
namespace RainmeterStudio.Documents
 | 
			
		||||
{
 | 
			
		||||
    public interface IDocumentEditorFactory
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Creates a new editor object
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="document">Document to be edited by the editor</param>
 | 
			
		||||
        /// <returns>A new document editor</returns>
 | 
			
		||||
        IDocumentEditor CreateEditor(IDocument document);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Tests if this editor can edit this document type
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="type">Document type</param>
 | 
			
		||||
        /// <returns>True if the editor can edit the document type</returns>
 | 
			
		||||
        bool CanEdit(Type type);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								RainmeterStudio/Documents/IDocumentStorage.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								RainmeterStudio/Documents/IDocumentStorage.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using RainmeterStudio.Model;
 | 
			
		||||
 | 
			
		||||
namespace RainmeterStudio.Documents
 | 
			
		||||
{
 | 
			
		||||
    public interface IDocumentStorage
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Reads a document from file
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="path">Path to file</param>
 | 
			
		||||
        /// <returns>Read document</returns>
 | 
			
		||||
        IDocument Read(string path);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Writes a document to a file
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="path">Path to file</param>
 | 
			
		||||
        /// <param name="document">Document to write</param>
 | 
			
		||||
        void Write(string path, IDocument document);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Tests if the file can be read by this storage
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="path">Path to file</param>
 | 
			
		||||
        /// <returns>True if file can be read</returns>
 | 
			
		||||
        bool CanRead(string path);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Tests if the document can be written by this storage
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="documentType">Document type</param>
 | 
			
		||||
        /// <returns>True if the document can be written</returns>
 | 
			
		||||
        bool CanWrite(Type documentType);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -4,29 +4,67 @@ using System.IO;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using RainmeterStudio.Model;
 | 
			
		||||
using System.ComponentModel;
 | 
			
		||||
 | 
			
		||||
namespace RainmeterStudio.Documents.Text
 | 
			
		||||
{
 | 
			
		||||
    public class TextDocument : IDocument
 | 
			
		||||
    {
 | 
			
		||||
        public string Name
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                return Path.GetFileName(FilePath);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string FilePath
 | 
			
		||||
        {
 | 
			
		||||
            get; set;
 | 
			
		||||
        }
 | 
			
		||||
        private Reference _reference;
 | 
			
		||||
        private bool _isDirty;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the text associated with this document
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Text
 | 
			
		||||
        {
 | 
			
		||||
            get; set;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the reference of this document
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public Reference Reference
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                return _reference;
 | 
			
		||||
            }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                _reference = value;
 | 
			
		||||
 | 
			
		||||
                if (PropertyChanged != null)
 | 
			
		||||
                    PropertyChanged(this, new PropertyChangedEventArgs("Reference"));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets a property indicating if this file was modified and not saved
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool IsDirty
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                return _isDirty;
 | 
			
		||||
            }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                _isDirty = value;
 | 
			
		||||
 | 
			
		||||
                if (PropertyChanged != null)
 | 
			
		||||
                    PropertyChanged(this, new PropertyChangedEventArgs("IsDirty"));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Triggered when the value of a property changes
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public event PropertyChangedEventHandler PropertyChanged;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes the text document
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public TextDocument()
 | 
			
		||||
        {
 | 
			
		||||
            Text = String.Empty;
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
@@ -23,5 +23,5 @@ namespace RainmeterStudio.Documents.Text
 | 
			
		||||
        public override string Title { get { return _document.Name; } }
 | 
			
		||||
 | 
			
		||||
        public override System.Windows.UIElement EditorUI { get { return _control; } }
 | 
			
		||||
    }
 | 
			
		||||
    }*/
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ using RainmeterStudio.Model;
 | 
			
		||||
 | 
			
		||||
namespace RainmeterStudio.Documents.Text
 | 
			
		||||
{
 | 
			
		||||
    public class TextEditorFactory : IDocumentEditorFactory
 | 
			
		||||
    /*public class TextEditorFactory : IDocumentEditorFactory
 | 
			
		||||
    {
 | 
			
		||||
        private TextStorage _storage = new TextStorage();
 | 
			
		||||
 | 
			
		||||
@@ -35,7 +35,6 @@ namespace RainmeterStudio.Documents.Text
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public IDocumentEditor CreateEditor(IDocument document)
 | 
			
		||||
        {
 | 
			
		||||
            TextDocument textDocument = document as TextDocument;
 | 
			
		||||
@@ -55,5 +54,5 @@ namespace RainmeterStudio.Documents.Text
 | 
			
		||||
 | 
			
		||||
            return document;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    }*/
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,8 @@ namespace RainmeterStudio.Documents.Text
 | 
			
		||||
        IDocument IDocumentStorage.Read(string path)
 | 
			
		||||
        {
 | 
			
		||||
            TextDocument document = new TextDocument();
 | 
			
		||||
            document.FilePath = path;
 | 
			
		||||
            document.Reference.Path = path;
 | 
			
		||||
            document.Reference.Name = Path.GetFileName(path);
 | 
			
		||||
            document.Text = File.ReadAllText(path);
 | 
			
		||||
 | 
			
		||||
            return document;
 | 
			
		||||
@@ -60,5 +61,10 @@ namespace RainmeterStudio.Documents.Text
 | 
			
		||||
            // Not found, probably text file
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool CanWrite(Type documentType)
 | 
			
		||||
        {
 | 
			
		||||
            return documentType.Equals(typeof(TextDocument));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user