@ -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 ;