Browse Source

Improved behaviour of saving workbench windows with multiple view contents:

The Save commands now apply to all view contents of the active workbench window, not only to the active view content.
When a workbench window is closed, all its view contents are now saved, not only the active one.
Workbench window title now displays a * when any of its view contents is dirty, not only the active one.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3266 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Christian Hornung 18 years ago
parent
commit
ae8b3f06ab
  1. 14
      src/Main/Base/Project/Src/Commands/FileCommands.cs
  2. 4
      src/Main/Base/Project/Src/Commands/FileTabStripCommands.cs
  3. 35
      src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs
  4. 49
      src/Main/Base/Project/Src/Gui/Workbench/Layouts/SimpleWorkbenchLayout.cs

14
src/Main/Base/Project/Src/Commands/FileCommands.cs

@ -55,7 +55,12 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -55,7 +55,12 @@ namespace ICSharpCode.SharpDevelop.Commands
{
public override void Run()
{
Save(WorkbenchSingleton.Workbench.ActiveViewContent);
Save(WorkbenchSingleton.Workbench.ActiveWorkbenchWindow);
}
internal static void Save(IWorkbenchWindow window)
{
window.ViewContents.Foreach(Save);
}
internal static void Save(IViewContent content)
@ -121,7 +126,12 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -121,7 +126,12 @@ namespace ICSharpCode.SharpDevelop.Commands
{
public override void Run()
{
Save(WorkbenchSingleton.Workbench.ActiveViewContent);
Save(WorkbenchSingleton.Workbench.ActiveWorkbenchWindow);
}
internal static void Save(IWorkbenchWindow window)
{
window.ViewContents.Foreach(Save);
}
internal static void Save(IViewContent content)

4
src/Main/Base/Project/Src/Commands/FileTabStripCommands.cs

@ -48,7 +48,7 @@ namespace ICSharpCode.SharpDevelop.Commands.TabStrip @@ -48,7 +48,7 @@ namespace ICSharpCode.SharpDevelop.Commands.TabStrip
{
IWorkbenchWindow window = Owner as IWorkbenchWindow;
if (window != null) {
SaveFile.Save(window.ActiveViewContent);
SaveFile.Save(window);
}
}
}
@ -60,7 +60,7 @@ namespace ICSharpCode.SharpDevelop.Commands.TabStrip @@ -60,7 +60,7 @@ namespace ICSharpCode.SharpDevelop.Commands.TabStrip
IWorkbenchWindow window = Owner as IWorkbenchWindow;
if (window != null) {
SaveFileAs.Save(window.ActiveViewContent);
SaveFileAs.Save(window);
}
}
}

35
src/Main/Base/Project/Src/Gui/Workbench/Layouts/SdiWorkspaceWindow.cs

@ -11,6 +11,7 @@ using System.Collections.ObjectModel; @@ -11,6 +11,7 @@ using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using ICSharpCode.Core;
@ -194,6 +195,14 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -194,6 +195,14 @@ namespace ICSharpCode.SharpDevelop.Gui
get { return viewContents; }
}
/// <summary>
/// Gets whether any contained view content has changed
/// since the last save/load operation.
/// </summary>
public bool IsDirty {
get { return this.ViewContents.Any(vc => vc.IsDirty); }
}
public void SwitchView(int viewNumber)
{
if (viewTabControl != null) {
@ -271,9 +280,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -271,9 +280,7 @@ namespace ICSharpCode.SharpDevelop.Gui
void OnIsDirtyChanged(object sender, EventArgs e)
{
if (sender == ActiveViewContent) {
UpdateTitle();
}
UpdateTitle();
}
void UpdateTitle()
@ -284,7 +291,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -284,7 +291,7 @@ namespace ICSharpCode.SharpDevelop.Gui
string newTitle = content.TitleName;
if (content.IsDirty) {
if (this.IsDirty) {
newTitle += "*";
} else if (content.IsReadOnly) {
newTitle += "+";
@ -322,7 +329,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -322,7 +329,7 @@ namespace ICSharpCode.SharpDevelop.Gui
public bool CloseWindow(bool force)
{
if (!force && ActiveViewContent != null && ActiveViewContent.IsDirty) {
if (!force && this.IsDirty) {
DialogResult dr = MessageBox.Show(ResourceService.GetString("MainWindow.SaveChangesMessage"),
ResourceService.GetString("MainWindow.SaveChangesMessageHeader") + " " + Title + " ?",
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,
@ -330,16 +337,18 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -330,16 +337,18 @@ namespace ICSharpCode.SharpDevelop.Gui
RightToLeftConverter.IsRightToLeft ? MessageBoxOptions.RtlReading | MessageBoxOptions.RightAlign : 0);
switch (dr) {
case DialogResult.Yes:
if (ActiveViewContent.PrimaryFile != null) {
while (true) {
ActiveViewContent.Files.Foreach(ICSharpCode.SharpDevelop.Commands.SaveFile.Save);
if (ActiveViewContent.IsDirty) {
if (MessageService.AskQuestion("${res:MainWindow.DiscardChangesMessage}")) {
foreach (IViewContent vc in this.ViewContents) {
if (!vc.IsDirty) continue;
if (vc.PrimaryFile != null) {
while (true) {
vc.Files.Foreach(ICSharpCode.SharpDevelop.Commands.SaveFile.Save);
if (vc.IsDirty) {
if (MessageService.AskQuestion("${res:MainWindow.DiscardChangesMessage}")) {
break;
}
} else {
break;
}
} else {
break;
}
}
}

49
src/Main/Base/Project/Src/Gui/Workbench/Layouts/SimpleWorkbenchLayout.cs

@ -9,6 +9,7 @@ using System; @@ -9,6 +9,7 @@ using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using System.Windows.Forms;
using ICSharpCode.Core;
@ -393,6 +394,14 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -393,6 +394,14 @@ namespace ICSharpCode.SharpDevelop.Gui
get { return viewContents; }
}
/// <summary>
/// Gets whether any contained view content has changed
/// since the last save/load operation.
/// </summary>
public bool IsDirty {
get { return this.ViewContents.Any(vc => vc.IsDirty); }
}
public void SwitchView(int viewNumber)
{
if (viewTabControl != null) {
@ -410,7 +419,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -410,7 +419,7 @@ namespace ICSharpCode.SharpDevelop.Gui
viewContents = new ViewContentCollection(this);
OnTitleNameChanged(this, EventArgs.Empty);
// this.TabPageContextMenuStrip = MenuService.CreateContextMenu(this, contextMenuPath);
// this.TabPageContextMenuStrip = MenuService.CreateContextMenu(this, contextMenuPath);
}
protected override void Dispose(bool disposing)
@ -418,10 +427,10 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -418,10 +427,10 @@ namespace ICSharpCode.SharpDevelop.Gui
if (disposing) {
// DetachContent must be called before the controls are disposed
this.ViewContents.Clear();
// if (this.TabPageContextMenu != null) {
// this.TabPageContextMenu.Dispose();
// this.TabPageContextMenu = null;
// }
// if (this.TabPageContextMenu != null) {
// this.TabPageContextMenu.Dispose();
// this.TabPageContextMenu = null;
// }
}
base.Dispose(disposing);
}
@ -467,20 +476,18 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -467,20 +476,18 @@ namespace ICSharpCode.SharpDevelop.Gui
void OnIsDirtyChanged(object sender, EventArgs e)
{
if (sender == ActiveViewContent) {
UpdateTitle();
}
UpdateTitle();
}
void UpdateTitle()
{
IViewContent content = ActiveViewContent;
if (content != null) {
// base.ToolTipText = content.PrimaryFileName;
// base.ToolTipText = content.PrimaryFileName;
string newTitle = content.TitleName;
if (content.IsDirty) {
if (this.IsDirty) {
newTitle += "*";
} else if (content.IsReadOnly) {
newTitle += "+";
@ -518,7 +525,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -518,7 +525,7 @@ namespace ICSharpCode.SharpDevelop.Gui
public bool CloseWindow(bool force)
{
if (!force && ActiveViewContent != null && ActiveViewContent.IsDirty) {
if (!force && this.IsDirty) {
DialogResult dr = MessageBox.Show(ResourceService.GetString("MainWindow.SaveChangesMessage"),
ResourceService.GetString("MainWindow.SaveChangesMessageHeader") + " " + Title + " ?",
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,
@ -526,16 +533,18 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -526,16 +533,18 @@ namespace ICSharpCode.SharpDevelop.Gui
RightToLeftConverter.IsRightToLeft ? MessageBoxOptions.RtlReading | MessageBoxOptions.RightAlign : 0);
switch (dr) {
case DialogResult.Yes:
if (ActiveViewContent.PrimaryFile != null) {
while (true) {
ActiveViewContent.Files.Foreach(ICSharpCode.SharpDevelop.Commands.SaveFile.Save);
if (ActiveViewContent.IsDirty) {
if (MessageService.AskQuestion("${res:MainWindow.DiscardChangesMessage}")) {
foreach (IViewContent vc in this.ViewContents) {
if (!vc.IsDirty) continue;
if (vc.PrimaryFile != null) {
while (true) {
vc.Files.Foreach(ICSharpCode.SharpDevelop.Commands.SaveFile.Save);
if (vc.IsDirty) {
if (MessageService.AskQuestion("${res:MainWindow.DiscardChangesMessage}")) {
break;
}
} else {
break;
}
} else {
break;
}
}
}
@ -546,7 +555,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -546,7 +555,7 @@ namespace ICSharpCode.SharpDevelop.Gui
return false;
}
}
OnCloseEvent(null);
Dispose();
return true;

Loading…
Cancel
Save