Browse Source

Upgrade to new AvalonDock version, support for ViewClosed event.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0wpf@3450 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 18 years ago
parent
commit
90e697e7b7
  1. BIN
      src/Libraries/AvalonDock/AvalonDock.dll
  2. 5
      src/Main/Base/Project/Src/Gui/IWorkbench.cs
  3. 5
      src/Main/Base/Project/Src/Gui/IWorkbenchLayout.cs
  4. 20
      src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs
  5. 27
      src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonWorkbenchWindow.cs
  6. 33
      src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs
  7. 141
      src/Main/Core/Project/Src/Services/ResourceService/ResourceService.cs
  8. 12
      src/Main/ICSharpCode.Core.Presentation/PresentationResourceService.cs

BIN
src/Libraries/AvalonDock/AvalonDock.dll

Binary file not shown.

5
src/Main/Base/Project/Src/Gui/IWorkbench.cs

@ -140,11 +140,6 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -140,11 +140,6 @@ namespace ICSharpCode.SharpDevelop.Gui
/// </summary>
PadDescriptor GetPad(Type type);
/// <summary>
/// Closes the IViewContent content when content is open.
/// </summary>
void CloseContent(IViewContent content);
/// <summary>
/// Closes all views inside the workbench.
/// </summary>

5
src/Main/Base/Project/Src/Gui/IWorkbenchLayout.cs

@ -79,11 +79,6 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -79,11 +79,6 @@ namespace ICSharpCode.SharpDevelop.Gui
/// </summary>
bool IsVisible(PadDescriptor padContent);
/// <summary>
/// Re-initializes all components of the layout manager.
/// </summary>
void RedrawAllComponents();
/// <summary>
/// Shows a new <see cref="IViewContent"/>.
/// </summary>

20
src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs

@ -29,6 +29,10 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -29,6 +29,10 @@ namespace ICSharpCode.SharpDevelop.Gui
List<IWorkbenchWindow> workbenchWindows = new List<IWorkbenchWindow>();
internal bool Busy;
public WpfWorkbench Workbench {
get { return workbench; }
}
public DockingManager DockingManager {
get { return dockingManager; }
}
@ -39,12 +43,6 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -39,12 +43,6 @@ namespace ICSharpCode.SharpDevelop.Gui
dockingManager.PropertyChanged += dockingManager_PropertyChanged;
}
public void OnWorkbenchWindowClosed(AvalonWorkbenchWindow window)
{
workbenchWindows.Remove(window);
documentPane.Items.Remove(window);
}
void dockingManager_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (e.PropertyName == "ActiveContent") {
@ -153,10 +151,6 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -153,10 +151,6 @@ namespace ICSharpCode.SharpDevelop.Gui
return pads[padContent].IsVisible;
}
public void RedrawAllComponents()
{
}
public IWorkbenchWindow ShowView(IViewContent content)
{
AvalonWorkbenchWindow window = new AvalonWorkbenchWindow(this);
@ -165,9 +159,15 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -165,9 +159,15 @@ namespace ICSharpCode.SharpDevelop.Gui
window.ViewContents.AddRange(content.SecondaryViewContents);
documentPane.Items.Add(window);
dockingManager.Show(window);
window.Closed += window_Closed;
return window;
}
void window_Closed(object sender, EventArgs e)
{
workbenchWindows.Remove((IWorkbenchWindow)sender);
}
public void LoadConfiguration()
{
try {

27
src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonWorkbenchWindow.cs

@ -293,6 +293,8 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -293,6 +293,8 @@ namespace ICSharpCode.SharpDevelop.Gui
content.TabPageTextChanged += OnTabPageTextChanged;
content.TitleNameChanged += OnTitleNameChanged;
content.IsDirtyChanged += OnIsDirtyChanged;
this.dockLayout.Workbench.OnViewOpened(new ViewContentEventArgs(content));
}
void UnregisterContent(IViewContent content)
@ -302,6 +304,8 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -302,6 +304,8 @@ namespace ICSharpCode.SharpDevelop.Gui
content.TabPageTextChanged -= OnTabPageTextChanged;
content.TitleNameChanged -= OnTitleNameChanged;
content.IsDirtyChanged -= OnIsDirtyChanged;
this.dockLayout.Workbench.OnViewClosed(new ViewContentEventArgs(content));
}
void OnTabPageTextChanged(object sender, EventArgs e)
@ -309,9 +313,19 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -309,9 +313,19 @@ namespace ICSharpCode.SharpDevelop.Gui
RefreshTabPageTexts();
}
bool forceClose;
public bool CloseWindow(bool force)
{
if (!force && this.IsDirty) {
forceClose = force;
Close();
return this.ViewContents.Count == 0;
}
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
base.OnClosing(e);
if (!e.Cancel && !forceClose && this.IsDirty) {
MessageBoxResult dr = MessageBox.Show(
ResourceService.GetString("MainWindow.SaveChangesMessage"),
ResourceService.GetString("MainWindow.SaveChangesMessageHeader") + " " + Title + " ?",
@ -338,14 +352,17 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -338,14 +352,17 @@ namespace ICSharpCode.SharpDevelop.Gui
case MessageBoxResult.No:
break;
case MessageBoxResult.Cancel:
return false;
e.Cancel = true;
break;
}
}
dockLayout.OnWorkbenchWindowClosed(this);
}
protected override void OnClosed()
{
base.OnClosed();
Dispose();
CommandManager.InvalidateRequerySuggested();
return true;
}
public void RedrawContent()

33
src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs

@ -31,13 +31,22 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -31,13 +31,22 @@ namespace ICSharpCode.SharpDevelop.Gui
public event EventHandler ActiveContentChanged;
public event ViewContentEventHandler ViewOpened;
void OnViewOpened(ViewContentEventArgs e)
internal void OnViewOpened(ViewContentEventArgs e)
{
if (ViewOpened != null) {
ViewOpened(this, e);
}
}
public event ViewContentEventHandler ViewClosed;
internal void OnViewClosed(ViewContentEventArgs e)
{
if (ViewClosed != null) {
ViewClosed(this, e);
}
}
public event System.Windows.Forms.KeyEventHandler ProcessCommandKey;
public System.Windows.Forms.IWin32Window MainWin32Window { get; private set; }
@ -100,7 +109,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -100,7 +109,7 @@ namespace ICSharpCode.SharpDevelop.Gui
public ICollection<IViewContent> ViewContentCollection {
get {
return WorkbenchWindowCollection.SelectMany(w => w.ViewContents).ToList().ToArray();
return WorkbenchWindowCollection.SelectMany(w => w.ViewContents).ToList().AsReadOnly();
}
}
@ -162,6 +171,9 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -162,6 +171,9 @@ namespace ICSharpCode.SharpDevelop.Gui
void OnActiveWindowChanged(object sender, EventArgs e)
{
if (closeAll)
return;
if (workbenchLayout != null) {
this.ActiveContent = workbenchLayout.ActiveContent;
this.ActiveWorkbenchWindow = workbenchLayout.ActiveWorkbenchWindow;
@ -235,7 +247,6 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -235,7 +247,6 @@ namespace ICSharpCode.SharpDevelop.Gui
WorkbenchLayout.ShowView(content);
content.WorkbenchWindow.SelectWindow();
OnViewOpened(new ViewContentEventArgs(content));
}
public void ShowPad(PadDescriptor content)
@ -264,12 +275,22 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -264,12 +275,22 @@ namespace ICSharpCode.SharpDevelop.Gui
return null;
}
public void CloseContent(IViewContent content)
{
}
/// <summary>
/// Flag used to prevent repeated ActiveWindowChanged events during CloseAllViews().
/// </summary>
bool closeAll;
public void CloseAllViews()
{
try {
closeAll = true;
foreach (IWorkbenchWindow window in this.WorkbenchWindowCollection.ToArray()) {
window.CloseWindow(false);
}
} finally {
closeAll = false;
OnActiveWindowChanged(this, EventArgs.Empty);
}
}
public void RedrawAllComponents()

141
src/Main/Core/Project/Src/Services/ResourceService/ResourceService.cs

@ -50,6 +50,8 @@ namespace ICSharpCode.Core @@ -50,6 +50,8 @@ namespace ICSharpCode.Core
}
}
static readonly object loadLock = new object();
/// <summary>English strings (list of resource managers)</summary>
static List<ResourceManager> strings = new List<ResourceManager>();
/// <summary>Neutral/English images (list of resource managers)</summary>
@ -178,33 +180,34 @@ namespace ICSharpCode.Core @@ -178,33 +180,34 @@ namespace ICSharpCode.Core
static void LoadLanguageResources(string language)
{
if (ClearCaches != null)
ClearCaches(null, EventArgs.Empty);
try {
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language);
} catch (Exception) {
lock (loadLock) {
try {
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language.Split('-')[0]);
} catch (Exception) {}
}
localStrings = Load(stringResources, language);
if (localStrings == null && language.IndexOf('-') > 0) {
localStrings = Load(stringResources, language.Split('-')[0]);
}
localIcons = Load(imageResources, language);
if (localIcons == null && language.IndexOf('-') > 0) {
localIcons = Load(imageResources, language.Split('-')[0]);
}
localStringsResMgrs.Clear();
localIconsResMgrs.Clear();
currentLanguage = language;
foreach (ResourceAssembly ra in resourceAssemblies) {
ra.Load();
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language);
} catch (Exception) {
try {
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language.Split('-')[0]);
} catch (Exception) {}
}
localStrings = Load(stringResources, language);
if (localStrings == null && language.IndexOf('-') > 0) {
localStrings = Load(stringResources, language.Split('-')[0]);
}
localIcons = Load(imageResources, language);
if (localIcons == null && language.IndexOf('-') > 0) {
localIcons = Load(imageResources, language.Split('-')[0]);
}
localStringsResMgrs.Clear();
localIconsResMgrs.Clear();
currentLanguage = language;
foreach (ResourceAssembly ra in resourceAssemblies) {
ra.Load();
}
}
if (ClearCaches != null)
ClearCaches(null, EventArgs.Empty);
}
static Hashtable Load(string fileName)
@ -241,68 +244,72 @@ namespace ICSharpCode.Core @@ -241,68 +244,72 @@ namespace ICSharpCode.Core
/// </exception>
public static string GetString(string name)
{
if (localStrings != null && localStrings[name] != null) {
return localStrings[name].ToString();
}
string s = null;
foreach (ResourceManager resourceManger in localStringsResMgrs) {
try {
s = resourceManger.GetString(name);
}
catch (Exception) { }
if (s != null) {
break;
lock (loadLock) {
if (localStrings != null && localStrings[name] != null) {
return localStrings[name].ToString();
}
}
if (s == null) {
foreach (ResourceManager resourceManger in strings) {
string s = null;
foreach (ResourceManager resourceManger in localStringsResMgrs) {
try {
s = resourceManger.GetString(name);
}
catch (Exception) { }
if (s != null) {
break;
}
}
if (s == null) {
foreach (ResourceManager resourceManger in strings) {
try {
s = resourceManger.GetString(name);
}
catch (Exception) { }
if (s != null) {
break;
}
}
}
if (s == null) {
throw new ResourceNotFoundException("string >" + name + "<");
}
return s;
}
if (s == null) {
throw new ResourceNotFoundException("string >" + name + "<");
}
return s;
}
public static object GetImageResource(string name)
{
object iconobj = null;
if (localIcons != null && localIcons[name] != null) {
iconobj = localIcons[name];
} else {
foreach (ResourceManager resourceManger in localIconsResMgrs) {
iconobj = resourceManger.GetObject(name);
if (iconobj != null) {
break;
}
}
if (iconobj == null) {
foreach (ResourceManager resourceManger in icons) {
try {
iconobj = resourceManger.GetObject(name);
}
catch (Exception) { }
lock (loadLock) {
object iconobj = null;
if (localIcons != null && localIcons[name] != null) {
iconobj = localIcons[name];
} else {
foreach (ResourceManager resourceManger in localIconsResMgrs) {
iconobj = resourceManger.GetObject(name);
if (iconobj != null) {
break;
}
}
if (iconobj == null) {
foreach (ResourceManager resourceManger in icons) {
try {
iconobj = resourceManger.GetObject(name);
}
catch (Exception) { }
if (iconobj != null) {
break;
}
}
}
}
return iconobj;
}
return iconobj;
}
}
}

12
src/Main/ICSharpCode.Core.Presentation/PresentationResourceService.cs

@ -22,6 +22,18 @@ namespace ICSharpCode.Core.Presentation @@ -22,6 +22,18 @@ namespace ICSharpCode.Core.Presentation
{
static readonly Dictionary<string, BitmapSource> bitmapCache = new Dictionary<string, BitmapSource>();
static PresentationResourceService()
{
ResourceService.ClearCaches += ResourceService_ClearCaches;
}
static void ResourceService_ClearCaches(object sender, EventArgs e)
{
lock (bitmapCache) {
bitmapCache.Clear();
}
}
/// <summary>
/// Creates a new System.Windows.Controls.Image object containing the image with the
/// specified resource name.

Loading…
Cancel
Save