diff options
| author | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2020-05-13 10:09:01 +0200 |
|---|---|---|
| committer | Jean-Philippe Bruyère <jp_bruyere@hotmail.com> | 2020-05-13 10:09:01 +0200 |
| commit | 74d1288c9990bb251b7097b225891bafdc6758af (patch) | |
| tree | 8173afa55887a46e9ef44076498be725c5b33ad1 /Samples/CrowIDE/src/ProjectTree/ProjectFile.cs | |
| parent | a73c8383e6ea636672a3bdb07e084260538fc68a (diff) | |
removed splitted CrowIDE
Diffstat (limited to 'Samples/CrowIDE/src/ProjectTree/ProjectFile.cs')
| -rw-r--r-- | Samples/CrowIDE/src/ProjectTree/ProjectFile.cs | 323 |
1 files changed, 0 insertions, 323 deletions
diff --git a/Samples/CrowIDE/src/ProjectTree/ProjectFile.cs b/Samples/CrowIDE/src/ProjectTree/ProjectFile.cs deleted file mode 100644 index 294a28f5..00000000 --- a/Samples/CrowIDE/src/ProjectTree/ProjectFile.cs +++ /dev/null @@ -1,323 +0,0 @@ -// -// ProjectNodes.cs -// -// Author: -// Jean-Philippe Bruyère <jp_bruyere@hotmail.com> -// -// Copyright (c) 2013-2017 Jean-Philippe Bruyère -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading; -using System.Xml; - -namespace Crow.Coding { - public class ProjectFile : ProjectItem { - bool isOpened = false; - DateTime accessTime; - string source; - string origSource; - object selectedItem; - int curLine, curColumn; - - internal ReaderWriterLockSlim srcEditMtx = new ReaderWriterLockSlim(); - - public Dictionary<object, bool> RegisteredEditors = new Dictionary<object, bool>(); - List<String> undoStack = new List<string>(); - List<String> redoStack = new List<string>(); - - public Crow.Command cmdSave, cmdSaveAs, cmdOpen, cmdClose, cmdUndo, cmdRedo; - - void initCommands (){ - cmdSave = new Crow.Command (new Action (() => Save ())) - { Caption = "Save", Icon = new SvgPicture ("#CrowIDE.icons.save.svg"), CanExecute = false }; - cmdSaveAs = new Crow.Command (new Action (() => SaveAs ())) - { Caption = "Save As ..", Icon = new SvgPicture ("#CrowIDE.icons.save.svg"), CanExecute = false }; - cmdOpen = new Crow.Command (new Action (() => Open ())) - { Caption = "Open", Icon = new SvgPicture ("#CrowIDE.icons.open.svg"), CanExecute = true }; - cmdClose = new Crow.Command (new Action (() => OnQueryClose (this,null))) - { Caption = "Close", Icon = new SvgPicture ("#CrowIDE.icons.open.svg"), CanExecute = false }; - cmdUndo = new Crow.Command (new Action (() => Undo (null))) - { Caption = "Undo", Icon = new SvgPicture ("#CrowIDE.icons.undo.svg"), CanExecute = false }; - cmdRedo = new Crow.Command (new Action (() => Redo (null))) - { Caption = "Redo", Icon = new SvgPicture ("#CrowIDE.icons.redo.svg"), CanExecute = false }; - - Commands.Insert (0, cmdOpen); - Commands.Insert (1, cmdSave); - Commands.Insert (2, cmdSaveAs); - Commands.Insert (3, cmdUndo); - Commands.Insert (4, cmdRedo); - Commands.Add (cmdClose); - } - public ProjectFile () { - initCommands(); - } - public ProjectFile (ProjectItem pi) - : base (pi.Project, pi.node) { - initCommands (); - } - - public string ResourceID { - get { - return Type != ItemType.EmbeddedResource ? null : - node.SelectSingleNode ("LogicalName") == null ? - Project.Name + "." + Path.Replace ('/', '.') : - LogicalName; - } - } - public string LogicalName { - get { - return node.SelectSingleNode ("LogicalName")?.InnerText; - } - } - public bool IsOpened { - get { return isOpened; } - set { - if (isOpened == value) - return; - isOpened = value; - - cmdOpen.CanExecute = !isOpened; - cmdClose.CanExecute = isOpened; - cmdSave.CanExecute = isOpened && IsDirty; - - if (isOpened) - Project.solution.OpenItem (this); - else - Project.solution.CloseItem (this); - - NotifyValueChanged ("IsOpened", isOpened); - } - } - - public void UnregisterEditor (object editor){ - lock(RegisteredEditors){ - RegisteredEditors.Remove (editor); - } - } - public void RegisterEditor (object editor) { - lock(RegisteredEditors){ - RegisteredEditors.Add (editor, false); - } - } - public virtual void UpdateSource (object sender, string newSrc){ - System.Diagnostics.Debug.WriteLine ("update source by {0}", sender); - Source = newSrc; - signalOtherRegisteredEditors (sender); - } - public void SignalEditorOfType<T> (){ - lock (RegisteredEditors) { - object[] keys = RegisteredEditors.Keys.ToArray (); - foreach (object ed in keys) { - T editor = (T)ed; - if (editor == null) - continue; - RegisteredEditors [editor] = false; - break; - } - } - } - protected void signalOtherRegisteredEditors (object sender) { - lock (RegisteredEditors) { - object[] keys = RegisteredEditors.Keys.ToArray (); - foreach (object editor in keys) { - if (editor != sender) - RegisteredEditors [editor] = false; - } - } - } - public string Source { - get { - if (!IsOpened) { - using (StreamReader sr = new StreamReader (AbsolutePath)) - source = sr.ReadToEnd (); - - } else { - if (DateTime.Compare ( - accessTime, - System.IO.File.GetLastWriteTime (AbsolutePath)) < 0) - Console.WriteLine ("File has been modified outside CrowIDE"); - } - return source; - } - set { - if (source == value) - return; - - srcEditMtx.EnterWriteLock (); - - undoStack.Add (source); - cmdUndo.CanExecute = true; - redoStack.Clear (); - cmdRedo.CanExecute = false; - source = value; - - NotifyValueChanged ("Source", source); - NotifyValueChanged ("IsDirty", IsDirty); - - cmdSave.CanExecute = cmdSaveAs.CanExecute = IsDirty; - - srcEditMtx.ExitWriteLock (); - } - } - public bool IsDirty { - get { return source != origSource; } - } - public int CurrentColumn{ - get { return curColumn; } - set { - if (curColumn == value) - return; - curColumn = value; - NotifyValueChanged ("CurrentColumn", curColumn); - } - } - public int CurrentLine{ - get { return curLine; } - set { - if (curLine == value) - return; - curLine = value; - NotifyValueChanged ("CurrentLine", curLine); - } - } - - public object SelectedItem { - get { return selectedItem; } - set { - if (selectedItem == value) - return; - selectedItem= value; - Project.solution.SelectedItemElement = value; - NotifyValueChanged ("SelectedItem", selectedItem); - } - } - - public CopyToOutputState CopyToOutputDirectory { - get { - XmlNode xn = node.SelectSingleNode ("CopyToOutputDirectory"); - return xn == null ? CopyToOutputState.Never : - (CopyToOutputState)Enum.Parse (typeof(CopyToOutputState), xn.InnerText, true); - } - } - - public virtual void Open () { - accessTime = System.IO.File.GetLastWriteTime (AbsolutePath); - using (StreamReader sr = new StreamReader (AbsolutePath)) { - source = sr.ReadToEnd (); - } - origSource = source; - IsOpened = true; - NotifyValueChanged ("IsDirty", false); - } - public virtual void Save () { - if (!IsDirty) - return; - using (StreamWriter sw = new StreamWriter (AbsolutePath)) { - sw.Write (source); - } - origSource = source; - NotifyValueChanged ("IsDirty", false); - } - public virtual void SaveAs () { - if (!IsDirty) - return; - using (StreamWriter sw = new StreamWriter (AbsolutePath)) { - sw.Write (source); - } - origSource = source; - NotifyValueChanged ("IsDirty", false); - } - public void Close () { - origSource = source = null; - IsOpened = false; - } - public void Undo(object sender){ - undo(); - signalOtherRegisteredEditors (sender); - } - public void Redo(object sender){ - redo(); - signalOtherRegisteredEditors (sender); - } - - void undo () { - if (undoStack.Count == 0) - return; - - srcEditMtx.EnterWriteLock (); - string step = undoStack [undoStack.Count -1]; - redoStack.Add (source); - cmdRedo.CanExecute = true; - undoStack.RemoveAt(undoStack.Count -1); - - source = step; - - NotifyValueChanged ("Source", source); - NotifyValueChanged ("IsDirty", IsDirty); - cmdSave.CanExecute = IsDirty; - - if (undoStack.Count == 0) - cmdUndo.CanExecute = false; - srcEditMtx.ExitWriteLock (); - } - - void redo () { - if (redoStack.Count == 0) - return; - srcEditMtx.EnterWriteLock (); - string step = redoStack [redoStack.Count -1]; - undoStack.Add (source); - cmdUndo.CanExecute = true; - redoStack.RemoveAt(redoStack.Count -1); - source = step; - NotifyValueChanged ("Source", source); - NotifyValueChanged ("IsDirty", IsDirty); - cmdSave.CanExecute = IsDirty; - - if (redoStack.Count == 0) - cmdRedo.CanExecute = false; - srcEditMtx.ExitWriteLock (); - - } - - public void onDoubleClick (object sender, MouseButtonEventArgs e){ - if (IsOpened) - return; - Open (); - } - - public void onClick (object sender, MouseButtonEventArgs e){ - IsSelected = true; - } - public void OnQueryClose (object sender, EventArgs e){ - if (IsDirty) { - MessageBox mb = MessageBox.ShowModal (CrowIDE.MainIFace, - MessageBox.Type.YesNoCancel, $"{DisplayName} has unsaved changes.\nSave it now?"); - mb.Yes += (object _sender, EventArgs _e) => { Save (); Close (); }; - mb.No += (object _sender, EventArgs _e) => Close(); - } else - Close (); - } - } -} - |