mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
Work on project, document managers, controllers and UI
This commit is contained in:
@ -9,6 +9,8 @@ using RainmeterStudio.UI.Dialogs;
|
||||
using RainmeterStudio.UI.ViewModel;
|
||||
using RainmeterStudio.Core.Model;
|
||||
using System.IO;
|
||||
using Microsoft.Win32;
|
||||
using RainmeterStudio.Core.Utils;
|
||||
|
||||
namespace RainmeterStudio.UI.Controller
|
||||
{
|
||||
@ -34,10 +36,20 @@ namespace RainmeterStudio.UI.Controller
|
||||
|
||||
public Command DocumentOpenCommand { get; private set; }
|
||||
|
||||
public Command DocumentSaveCommand { get; private set; }
|
||||
|
||||
public Command DocumentSaveAsCommand { get; private set; }
|
||||
|
||||
public Command DocumentSaveACopyCommand { get; private set; }
|
||||
|
||||
public Command DocumentSaveAllCommand { get; private set; }
|
||||
|
||||
public Command DocumentCloseCommand { get; private set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Events
|
||||
|
||||
/// <summary>
|
||||
/// Triggered when a document is opened
|
||||
/// </summary>
|
||||
@ -56,15 +68,77 @@ namespace RainmeterStudio.UI.Controller
|
||||
remove { DocumentManager.DocumentClosed -= value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Triggered when the active document editor changes.
|
||||
/// </summary>
|
||||
public event EventHandler ActiveDocumentEditorChanged;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
private IDocumentEditor _activeDocumentEditor = null;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the active document editor.
|
||||
/// This must be set by the main window when active document changes.
|
||||
/// </summary>
|
||||
public IDocumentEditor ActiveDocumentEditor
|
||||
{
|
||||
get
|
||||
{
|
||||
return _activeDocumentEditor;
|
||||
}
|
||||
set
|
||||
{
|
||||
_activeDocumentEditor = value;
|
||||
|
||||
if (ActiveDocumentEditorChanged != null)
|
||||
ActiveDocumentEditorChanged(this, new EventArgs());
|
||||
}
|
||||
}
|
||||
|
||||
public MainWindow OwnerWindow { get; set; }
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a document controller
|
||||
/// </summary>
|
||||
/// <param name="documentManager"></param>
|
||||
/// <param name="projectManager"></param>
|
||||
public DocumentController(DocumentManager documentManager, ProjectManager projectManager)
|
||||
{
|
||||
DocumentManager = documentManager;
|
||||
ProjectManager = projectManager;
|
||||
|
||||
DocumentCreateCommand = new Command("DocumentCreateCommand", () => Create(), () => ProjectManager.ActiveProject != null);
|
||||
ProjectManager.ActiveProjectChanged += new EventHandler((obj, e) => DocumentCreateCommand.NotifyCanExecuteChanged());
|
||||
DocumentCreateCommand = new Command("DocumentCreate", Create, () => ProjectManager.ActiveProject != null);
|
||||
DocumentOpenCommand = new Command("DocumentOpen", Open);
|
||||
DocumentSaveCommand = new Command("DocumentSave", () => Save(), HasActiveDocumentEditor);
|
||||
DocumentSaveAsCommand = new Command("DocumentSaveAs", () => SaveAs(), HasActiveDocumentEditor);
|
||||
DocumentSaveACopyCommand = new Command("DocumentSaveACopy", () => SaveACopy(), HasActiveDocumentEditor);
|
||||
DocumentSaveAllCommand = new Command("DocumentSaveAll", SaveAll, () => ProjectManager.ActiveProject != null);
|
||||
DocumentCloseCommand = new Command("DocumentClose", () => Close(), HasActiveDocumentEditor);
|
||||
|
||||
ProjectManager.ActiveProjectChanged += new EventHandler((obj, e) =>
|
||||
{
|
||||
DocumentCreateCommand.NotifyCanExecuteChanged();
|
||||
DocumentSaveAllCommand.NotifyCanExecuteChanged();
|
||||
});
|
||||
|
||||
ActiveDocumentEditorChanged += new EventHandler((obj, e) =>
|
||||
{
|
||||
DocumentSaveCommand.NotifyCanExecuteChanged();
|
||||
DocumentSaveAsCommand.NotifyCanExecuteChanged();
|
||||
DocumentSaveACopyCommand.NotifyCanExecuteChanged();
|
||||
DocumentCloseCommand.NotifyCanExecuteChanged();
|
||||
});
|
||||
}
|
||||
|
||||
private bool HasActiveDocumentEditor()
|
||||
{
|
||||
return ActiveDocumentEditor != null;
|
||||
}
|
||||
|
||||
#region Document operations
|
||||
@ -83,13 +157,13 @@ namespace RainmeterStudio.UI.Controller
|
||||
return;
|
||||
|
||||
var format = dialog.SelectedTemplate;
|
||||
|
||||
|
||||
// Call manager
|
||||
var editor = DocumentManager.Create(format.Template);
|
||||
|
||||
|
||||
// Set the reference
|
||||
var name = dialog.SelectedName;
|
||||
|
||||
|
||||
string folder = OwnerWindow.ProjectPanel.ActiveItem.StoragePath;
|
||||
if (!Directory.Exists(folder))
|
||||
folder = Path.GetDirectoryName(folder);
|
||||
@ -105,23 +179,105 @@ namespace RainmeterStudio.UI.Controller
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Saves the document opened in specified editor
|
||||
/// Shows an 'open document' dialog, and opens a document
|
||||
/// </summary>
|
||||
/// <param name="editor">Editor</param>
|
||||
public void Save(IDocumentEditor editor)
|
||||
public void Open()
|
||||
{
|
||||
if (!editor.AttachedDocument.Reference.IsOnStorage())
|
||||
{
|
||||
SaveAs(editor);
|
||||
return;
|
||||
}
|
||||
// Show open dialog
|
||||
OpenFileDialog dialog = new OpenFileDialog();
|
||||
dialog.Title = Resources.Strings.Dialog_OpenDocument_Title;
|
||||
dialog.Filter = Resources.Strings.Dialog_FileType_AllFiles + "|*.*";
|
||||
dialog.InitialDirectory = Properties.Settings.Default.Project_SavedLocation;
|
||||
|
||||
// TODO
|
||||
bool? res = dialog.ShowDialog();
|
||||
if (res.HasValue && res.Value)
|
||||
{
|
||||
// Open file
|
||||
DocumentManager.Open(dialog.FileName);
|
||||
}
|
||||
}
|
||||
|
||||
public void SaveAs(IDocumentEditor editor)
|
||||
/// <summary>
|
||||
/// Saves the active document
|
||||
/// </summary>
|
||||
public bool Save()
|
||||
{
|
||||
// TODO
|
||||
return Save(ActiveDocumentEditor);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Saves the active document
|
||||
/// </summary>
|
||||
public bool Save(IDocumentEditor editor)
|
||||
{
|
||||
if (editor.AttachedDocument.Reference.IsOnStorage())
|
||||
{
|
||||
DocumentManager.Save(editor.AttachedDocument);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return SaveAs(editor);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Displays a 'save as' dialog, and saves active document
|
||||
/// </summary>
|
||||
public bool SaveAs()
|
||||
{
|
||||
return SaveAs(ActiveDocumentEditor);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Displays a 'save as' dialog, and saves active document
|
||||
/// </summary>
|
||||
public bool SaveAs(IDocumentEditor editor)
|
||||
{
|
||||
// Show save dialog
|
||||
SaveFileDialog dialog = new SaveFileDialog();
|
||||
dialog.Title = Resources.Strings.Dialog_SaveDocument_Title;
|
||||
dialog.Filter = Resources.Strings.Dialog_FileType_AllFiles + "|*.*";
|
||||
dialog.FileName = editor.AttachedDocument.Reference.StoragePath;
|
||||
|
||||
bool? res = dialog.ShowDialog();
|
||||
if (res.HasValue && res.Value)
|
||||
{
|
||||
DocumentManager.SaveAs(dialog.FileName, editor.AttachedDocument);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Displays a 'save' dialog, and saves a copy of the active document
|
||||
/// </summary>
|
||||
public void SaveACopy()
|
||||
{
|
||||
// Show save dialog
|
||||
SaveFileDialog dialog = new SaveFileDialog();
|
||||
dialog.Title = Resources.Strings.Dialog_SaveDocument_Title;
|
||||
dialog.Filter = Resources.Strings.Dialog_FileType_AllFiles + "|*.*";
|
||||
dialog.FileName = ActiveDocumentEditor.AttachedDocument.Reference.StoragePath;
|
||||
|
||||
bool? res = dialog.ShowDialog();
|
||||
if (res.HasValue && res.Value)
|
||||
{
|
||||
DocumentManager.SaveACopy(dialog.FileName, ActiveDocumentEditor.AttachedDocument);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Saves all opened documents
|
||||
/// </summary>
|
||||
public void SaveAll()
|
||||
{
|
||||
foreach (var editor in DocumentManager.Editors)
|
||||
{
|
||||
if (!Save(editor))
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -135,18 +291,14 @@ namespace RainmeterStudio.UI.Controller
|
||||
// Show the 'are you sure' prompt if necesary
|
||||
if (editor.AttachedDocument.IsDirty)
|
||||
{
|
||||
bool? res = CloseUnsavedDialog.ShowDialog(OwnerWindow, editor.AttachedDocument);
|
||||
if (res.HasValue)
|
||||
switch(CloseUnsavedDialog.ShowDialog(OwnerWindow, editor.AttachedDocument))
|
||||
{
|
||||
// Save
|
||||
if (res.Value)
|
||||
{
|
||||
Save(editor);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
case CloseUnsavedDialogResult.Save:
|
||||
Save();
|
||||
break;
|
||||
|
||||
case CloseUnsavedDialogResult.Cancel:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -155,6 +307,56 @@ namespace RainmeterStudio.UI.Controller
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Closes the active document.
|
||||
/// </summary>
|
||||
/// <returns>True if closed successfully</returns>
|
||||
/// <remarks>Shows the 'are you sure' prompt if there are unsaved edits.</remarks>
|
||||
public bool Close()
|
||||
{
|
||||
// Show the 'are you sure' prompt if necesary
|
||||
if (Close(ActiveDocumentEditor))
|
||||
{
|
||||
ActiveDocumentEditor = null;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Closes all the opened documents
|
||||
/// </summary>
|
||||
/// <returns>True if closed successfully, false if user hit 'cancel'.</returns>
|
||||
public bool CloseAll()
|
||||
{
|
||||
// Get dirty documents
|
||||
var unsaved = DocumentManager.Editors
|
||||
.Select(editor => editor.AttachedDocument)
|
||||
.Where(document => document.IsDirty);
|
||||
|
||||
// There are unsaved documents? Display save dialog
|
||||
if (unsaved.Any())
|
||||
{
|
||||
switch (CloseUnsavedDialog.ShowDialog(OwnerWindow, unsaved))
|
||||
{
|
||||
case CloseUnsavedDialogResult.Save:
|
||||
SaveAll();
|
||||
break;
|
||||
|
||||
case CloseUnsavedDialogResult.Cancel:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Close all documents
|
||||
// To array is used because DocumentManager.Editors is modified when closing a document.
|
||||
DocumentManager.Editors.ToArray().ForEach(DocumentManager.Close);
|
||||
|
||||
// Done
|
||||
return true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
|
@ -82,10 +82,21 @@ namespace RainmeterStudio.UI.Controller
|
||||
|
||||
#region Commands
|
||||
|
||||
/// <summary>
|
||||
/// Create project command
|
||||
/// </summary>
|
||||
public Command ProjectCreateCommand { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Open project command
|
||||
/// </summary>
|
||||
public Command ProjectOpenCommand { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Close project command
|
||||
/// </summary>
|
||||
public Command ProjectCloseCommand { get; private set; }
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
@ -96,8 +107,11 @@ namespace RainmeterStudio.UI.Controller
|
||||
{
|
||||
Manager = manager;
|
||||
|
||||
ProjectCreateCommand = new Command("ProjectCreateCommand", () => CreateProject());
|
||||
ProjectOpenCommand = new Command("ProjectOpenCommand", () => OpenProject());
|
||||
// Initialize commands
|
||||
ProjectCreateCommand = new Command("ProjectCreate", CreateProject);
|
||||
ProjectOpenCommand = new Command("ProjectOpen", OpenProject);
|
||||
ProjectCloseCommand = new Command("ProjectClose", CloseProject, () => ActiveProject != null);
|
||||
ActiveProjectChanged += new EventHandler((sender, e) => ProjectCloseCommand.NotifyCanExecuteChanged());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -126,7 +140,7 @@ namespace RainmeterStudio.UI.Controller
|
||||
/// Displays an 'open file' dialog and opens an existing project
|
||||
/// </summary>
|
||||
/// <param name="path"></param>
|
||||
public void OpenProject(string path = null)
|
||||
public void OpenProject()
|
||||
{
|
||||
// Open dialog
|
||||
OpenFileDialog dialog = new OpenFileDialog();
|
||||
@ -151,6 +165,7 @@ namespace RainmeterStudio.UI.Controller
|
||||
/// </summary>
|
||||
public void CloseProject()
|
||||
{
|
||||
Manager.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -17,15 +17,14 @@
|
||||
<TextBlock Grid.Row="0" Text="{x:Static r:Strings.CloseUnsavedDialog_Message }"
|
||||
Margin="4"/>
|
||||
|
||||
<ScrollViewer Grid.Row="1"
|
||||
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
|
||||
ScrollViewer.VerticalScrollBarVisibility="Auto">
|
||||
|
||||
<TextBlock Name="textFiles"
|
||||
Margin="4" Padding="4"
|
||||
Background="White"/>
|
||||
|
||||
</ScrollViewer>
|
||||
<ListBox Name="listUnsavedDocuments" Grid.Row="1" Padding="3"
|
||||
IsEnabled="False" >
|
||||
<ListBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding Reference.Name}" />
|
||||
</DataTemplate>
|
||||
</ListBox.ItemTemplate>
|
||||
</ListBox>
|
||||
|
||||
<TextBlock Grid.Row="2" Text="{x:Static r:Strings.CloseUnsavedDialog_Question }"
|
||||
Margin="4"/>
|
||||
|
@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows;
|
||||
@ -11,9 +12,18 @@ using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Shapes;
|
||||
using RainmeterStudio.Core.Model;
|
||||
using RainmeterStudio.Core.Utils;
|
||||
|
||||
namespace RainmeterStudio.UI.Dialogs
|
||||
{
|
||||
public enum CloseUnsavedDialogResult
|
||||
{
|
||||
Unset,
|
||||
Save,
|
||||
DoNotSave,
|
||||
Cancel
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Interaction logic for CloseUnsavedDialog.xaml
|
||||
/// </summary>
|
||||
@ -24,10 +34,11 @@ namespace RainmeterStudio.UI.Dialogs
|
||||
/// </summary>
|
||||
/// <param name="unsavedDocuments">List of unsaved documents</param>
|
||||
/// <returns>Dialog result</returns>
|
||||
public static bool? ShowDialog(IEnumerable<IDocument> unsavedDocuments)
|
||||
public static CloseUnsavedDialogResult ShowDialog(IEnumerable<IDocument> unsavedDocuments)
|
||||
{
|
||||
var dialog = new CloseUnsavedDialog(unsavedDocuments);
|
||||
return dialog.ShowDialog();
|
||||
dialog.ShowDialog();
|
||||
return dialog.SaveDialogResult;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -36,11 +47,11 @@ namespace RainmeterStudio.UI.Dialogs
|
||||
/// <param name="owner">Owner window</param>
|
||||
/// <param name="unsavedDocuments">List of unsaved documents</param>
|
||||
/// <returns>Dialog result</returns>
|
||||
public static bool? ShowDialog(Window owner, IEnumerable<IDocument> unsavedDocuments)
|
||||
public static CloseUnsavedDialogResult ShowDialog(Window owner, IEnumerable<IDocument> unsavedDocuments)
|
||||
{
|
||||
var dialog = new CloseUnsavedDialog(unsavedDocuments);
|
||||
dialog.Owner = owner;
|
||||
return dialog.ShowDialog();
|
||||
dialog.ShowDialog();
|
||||
return dialog.SaveDialogResult;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -49,13 +60,18 @@ namespace RainmeterStudio.UI.Dialogs
|
||||
/// <param name="owner">Owner window</param>
|
||||
/// <param name="unsavedDocuments">List of unsaved documents</param>
|
||||
/// <returns>Dialog result</returns>
|
||||
public static bool? ShowDialog(Window owner, params IDocument[] unsavedDocuments)
|
||||
public static CloseUnsavedDialogResult ShowDialog(Window owner, params IDocument[] unsavedDocuments)
|
||||
{
|
||||
var dialog = new CloseUnsavedDialog(unsavedDocuments);
|
||||
dialog.Owner = owner;
|
||||
return dialog.ShowDialog();
|
||||
dialog.ShowDialog();
|
||||
return dialog.SaveDialogResult;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the 'close unsaved' dialog result
|
||||
/// </summary>
|
||||
public CloseUnsavedDialogResult SaveDialogResult { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes the dialog
|
||||
/// </summary>
|
||||
@ -64,39 +80,25 @@ namespace RainmeterStudio.UI.Dialogs
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
textFiles.Inlines.AddRange(unsavedDocuments.SelectMany(GetInlines));
|
||||
}
|
||||
|
||||
private IEnumerable<Inline> GetInlines(IDocument doc)
|
||||
{
|
||||
var folder = System.IO.Path.GetDirectoryName(doc.Reference.StoragePath);
|
||||
|
||||
yield return new Run(folder)
|
||||
{
|
||||
Foreground = Brushes.DarkGray
|
||||
};
|
||||
|
||||
yield return new Run(doc.Reference.Name)
|
||||
{
|
||||
FontWeight = FontWeights.Bold
|
||||
};
|
||||
SaveDialogResult = CloseUnsavedDialogResult.Unset;
|
||||
unsavedDocuments.ForEach(d => listUnsavedDocuments.Items.Add(d));
|
||||
}
|
||||
|
||||
private void buttonSave_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
DialogResult = true;
|
||||
SaveDialogResult = CloseUnsavedDialogResult.Save;
|
||||
Close();
|
||||
}
|
||||
|
||||
private void buttonDoNotSave_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
DialogResult = false;
|
||||
SaveDialogResult = CloseUnsavedDialogResult.DoNotSave;
|
||||
Close();
|
||||
}
|
||||
|
||||
private void buttonCancel_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
DialogResult = null;
|
||||
SaveDialogResult = CloseUnsavedDialogResult.Cancel;
|
||||
Close();
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,8 @@
|
||||
Left="{Binding Source={x:Static p:Settings.Default}, Path=MainWindow_Left, Mode=TwoWay}"
|
||||
Top="{Binding Source={x:Static p:Settings.Default}, Path=MainWindow_Top, Mode=TwoWay}"
|
||||
|
||||
ResizeMode="CanResizeWithGrip" >
|
||||
ResizeMode="CanResizeWithGrip"
|
||||
Closing="Window_Closing">
|
||||
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
@ -47,16 +48,58 @@
|
||||
</MenuItem>
|
||||
<Separator />
|
||||
<MenuItem Header="{x:Static r:Strings.MainWindow_File_Open}">
|
||||
<MenuItem DataContext="{Binding DocumentController.DocumentOpenCommand}"
|
||||
Style="{StaticResource CommandMenuItemStyle}">
|
||||
<MenuItem.Icon>
|
||||
<Image Source="{Binding Icon}" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem DataContext="{Binding ProjectController.ProjectOpenCommand}"
|
||||
Style="{StaticResource CommandMenuItemStyle}">
|
||||
<MenuItem.Icon>
|
||||
<Image Source="{Binding Icon}" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<Separator />
|
||||
</MenuItem>
|
||||
<Separator />
|
||||
<MenuItem Header="_Close" />
|
||||
<MenuItem DataContext="{Binding DocumentController.DocumentSaveCommand}"
|
||||
Style="{StaticResource CommandMenuItemStyle}" >
|
||||
<MenuItem.Icon>
|
||||
<Image Source="{Binding Icon}" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem DataContext="{Binding DocumentController.DocumentSaveAsCommand}"
|
||||
Style="{StaticResource CommandMenuItemStyle}" >
|
||||
<MenuItem.Icon>
|
||||
<Image Source="{Binding Icon}" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem DataContext="{Binding DocumentController.DocumentSaveACopyCommand}"
|
||||
Style="{StaticResource CommandMenuItemStyle}" >
|
||||
<MenuItem.Icon>
|
||||
<Image Source="{Binding Icon}" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem DataContext="{Binding DocumentController.DocumentSaveAllCommand}"
|
||||
Style="{StaticResource CommandMenuItemStyle}" >
|
||||
<MenuItem.Icon>
|
||||
<Image Source="{Binding Icon}" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<Separator />
|
||||
<MenuItem DataContext="{Binding DocumentController.DocumentCloseCommand}"
|
||||
Style="{StaticResource CommandMenuItemStyle}" >
|
||||
<MenuItem.Icon>
|
||||
<Image Source="{Binding Icon}" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<MenuItem DataContext="{Binding ProjectController.ProjectCloseCommand}"
|
||||
Style="{StaticResource CommandMenuItemStyle}" >
|
||||
<MenuItem.Icon>
|
||||
<Image Source="{Binding Icon}" />
|
||||
</MenuItem.Icon>
|
||||
</MenuItem>
|
||||
<Separator />
|
||||
<MenuItem Header="E_xit" />
|
||||
</MenuItem>
|
||||
<MenuItem Header="_Edit" />
|
||||
|
@ -44,8 +44,11 @@ namespace RainmeterStudio.UI
|
||||
ProjectController = projCtrl;
|
||||
|
||||
// Add key bindings
|
||||
this.AddKeyBinding(ProjectController.ProjectCreateCommand);
|
||||
this.AddKeyBinding(DocumentController.DocumentCreateCommand);
|
||||
this.AddKeyBinding(DocumentController.DocumentOpenCommand);
|
||||
this.AddKeyBinding(DocumentController.DocumentSaveCommand);
|
||||
this.AddKeyBinding(DocumentController.DocumentCloseCommand);
|
||||
this.AddKeyBinding(ProjectController.ProjectCreateCommand);
|
||||
|
||||
// Subscribe to events
|
||||
DocumentController.DocumentOpened += documentController_DocumentOpened;
|
||||
@ -63,17 +66,21 @@ namespace RainmeterStudio.UI
|
||||
document.Content = e.Editor.EditorUI;
|
||||
document.Closing += document_Closing;
|
||||
document.Closed += document_Closed;
|
||||
document.IsActiveChanged += new EventHandler((sender2, e2) =>
|
||||
{
|
||||
if (document.IsActive)
|
||||
DocumentController.ActiveDocumentEditor = e.Editor;
|
||||
});
|
||||
|
||||
documentPane.Children.Add(document);
|
||||
documentPane.SelectedContentIndex = documentPane.IndexOf(document);
|
||||
|
||||
|
||||
e.Document.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler((obj, args) =>
|
||||
{
|
||||
string documentName;
|
||||
|
||||
// Get title
|
||||
if (!ProjectController.ActiveProject.Contains(e.Document.Reference))
|
||||
if (ProjectController.ActiveProject == null || !ProjectController.ActiveProject.Contains(e.Document.Reference))
|
||||
{
|
||||
documentName = e.Document.Reference.StoragePath ?? "New document";
|
||||
}
|
||||
@ -96,25 +103,27 @@ namespace RainmeterStudio.UI
|
||||
void document_Closed(object sender, EventArgs e)
|
||||
{
|
||||
var layoutDocument = (LayoutDocument)sender;
|
||||
|
||||
|
||||
}
|
||||
|
||||
void document_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
|
||||
// Get editor
|
||||
var document = (LayoutDocument)sender;
|
||||
var editor = _openedDocuments[document];
|
||||
|
||||
switch (MessageBox.Show("Are you sure?", "", MessageBoxButton.YesNoCancel, MessageBoxImage.Question))
|
||||
// Try to close active document
|
||||
if (!DocumentController.Close(editor))
|
||||
{
|
||||
case MessageBoxResult.Yes:
|
||||
break;
|
||||
e.Cancel = true;
|
||||
}
|
||||
}
|
||||
|
||||
case MessageBoxResult.No:
|
||||
break;
|
||||
|
||||
default:
|
||||
e.Cancel = true;
|
||||
return;
|
||||
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
// Try to close
|
||||
if (!DocumentController.CloseAll())
|
||||
{
|
||||
e.Cancel = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user