📄 defaultworkbench.cs
字号:
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version>$Revision: 1325 $</version>
// </file>
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.Diagnostics;
using System.Globalization;
using System.CodeDom.Compiler;
using System.Windows.Forms;
using System.ComponentModel;
using System.Xml;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Gui
{
/// <summary>
/// This is the a Workspace with a multiple document interface.
/// </summary>
public class DefaultWorkbench : Form, IWorkbench
{
readonly static string mainMenuPath = "/SharpDevelop/Workbench/MainMenu";
readonly static string viewContentPath = "/SharpDevelop/Workbench/Pads";
List<PadDescriptor> viewContentCollection = new List<PadDescriptor>();
List<IViewContent> workbenchContentCollection = new List<IViewContent>();
bool closeAll = false;
bool fullscreen;
FormWindowState defaultWindowState = FormWindowState.Normal;
Rectangle normalBounds = new Rectangle(0, 0, 640, 480);
IWorkbenchLayout layout = null;
public bool FullScreen {
get {
return fullscreen;
}
set {
if (fullscreen == value)
return;
fullscreen = value;
if (fullscreen) {
defaultWindowState = WindowState;
// - Hide window to prevet any further animations.
// - It fixes .NET Framework bug where the bounds of
// visible window are set incorectly too.
Visible = false;
FormBorderStyle = FormBorderStyle.None;
WindowState = FormWindowState.Maximized;
Visible = true;
} else {
FormBorderStyle = FormBorderStyle.Sizable;
Bounds = normalBounds;
WindowState = defaultWindowState;
}
RedrawAllComponents();
}
}
public string Title {
get {
return Text;
}
set {
Text = value;
}
}
public IWorkbenchLayout WorkbenchLayout {
get {
return layout;
}
set {
if (layout != null) {
layout.ActiveWorkbenchWindowChanged -= OnActiveWindowChanged;
layout.Detach();
}
value.Attach(this);
layout = value;
layout.ActiveWorkbenchWindowChanged += OnActiveWindowChanged;
}
}
public List<PadDescriptor> PadContentCollection {
get {
System.Diagnostics.Debug.Assert(viewContentCollection != null);
return viewContentCollection;
}
}
public List<IViewContent> ViewContentCollection {
get {
System.Diagnostics.Debug.Assert(workbenchContentCollection != null);
return workbenchContentCollection;
}
}
public IWorkbenchWindow ActiveWorkbenchWindow {
get {
if (layout == null) {
return null;
}
return layout.ActiveWorkbenchwindow;
}
}
public object ActiveContent {
get {
if (layout == null) {
return null;
}
return layout.ActiveContent;
}
}
public DefaultWorkbench()
{
Text = ResourceService.GetString("MainWindow.DialogName");
Icon = ResourceService.GetIcon("Icons.SharpDevelopIcon");
StartPosition = FormStartPosition.Manual;
AllowDrop = true;
}
System.Windows.Forms.Timer toolbarUpdateTimer;
public void InitializeWorkspace()
{
UpdateRenderer();
MenuComplete += new EventHandler(SetStandardStatusBar);
SetStandardStatusBar(null, null);
ProjectService.CurrentProjectChanged += new ProjectEventHandler(SetProjectTitle);
FileService.FileRemoved += CheckRemovedFile;
FileService.FileRenamed += CheckRenamedFile;
FileService.FileRemoved += FileService.RecentOpen.FileRemoved;
FileService.FileRenamed += FileService.RecentOpen.FileRenamed;
try {
ArrayList contents = AddInTree.GetTreeNode(viewContentPath).BuildChildItems(this);
foreach (PadDescriptor content in contents) {
if (content != null) {
ShowPad(content);
}
}
} catch (TreePathNotFoundException) {}
CreateMainMenu();
CreateToolBars();
toolbarUpdateTimer = new System.Windows.Forms.Timer();
toolbarUpdateTimer.Tick += new EventHandler(UpdateMenu);
toolbarUpdateTimer.Interval = 500;
toolbarUpdateTimer.Start();
RightToLeftConverter.Convert(this);
}
public void CloseContent(IViewContent content)
{
if (PropertyService.Get("SharpDevelop.LoadDocumentProperties", true) && content is IMementoCapable) {
StoreMemento(content);
}
if (ViewContentCollection.Contains(content)) {
ViewContentCollection.Remove(content);
}
OnViewClosed(new ViewContentEventArgs(content));
content.Dispose();
content = null;
}
public void CloseAllViews()
{
try {
closeAll = true;
List<IViewContent> fullList = new List<IViewContent>(workbenchContentCollection);
foreach (IViewContent content in fullList) {
IWorkbenchWindow window = content.WorkbenchWindow;
window.CloseWindow(false);
}
} finally {
closeAll = false;
OnActiveWindowChanged(this, EventArgs.Empty);
}
}
public virtual void ShowView(IViewContent content)
{
System.Diagnostics.Debug.Assert(layout != null);
ViewContentCollection.Add(content);
if (PropertyService.Get("SharpDevelop.LoadDocumentProperties", true) && content is IMementoCapable) {
try {
Properties memento = GetStoredMemento(content);
if (memento != null) {
((IMementoCapable)content).SetMemento(memento);
}
} catch (Exception e) {
MessageService.ShowError(e, "Can't get/set memento");
}
}
layout.ShowView(content);
content.WorkbenchWindow.SelectWindow();
OnViewOpened(new ViewContentEventArgs(content));
}
public virtual void ShowPad(PadDescriptor content)
{
PadContentCollection.Add(content);
if (layout != null) {
layout.ShowPad(content);
}
}
public void UpdateRenderer()
{
bool pro = PropertyService.Get("ICSharpCode.SharpDevelop.Gui.UseProfessionalRenderer", true);
if (pro) {
ToolStripManager.Renderer = new ToolStripProfessionalRenderer();
} else {
ProfessionalColorTable colorTable = new ProfessionalColorTable();
colorTable.UseSystemColors = true;
ToolStripManager.Renderer = new ToolStripProfessionalRenderer(colorTable);
}
}
public void RedrawAllComponents()
{
RightToLeftConverter.ConvertRecursive(this);
foreach (ToolStripItem item in TopMenu.Items) {
if (item is IStatusUpdate)
((IStatusUpdate)item).UpdateText();
}
foreach (IViewContent content in workbenchContentCollection) {
content.RedrawContent();
if (content.WorkbenchWindow != null) {
content.WorkbenchWindow.RedrawContent();
}
}
foreach (PadDescriptor content in viewContentCollection) {
content.RedrawContent();
}
if (layout != null) {
layout.RedrawAllComponents();
}
StatusBarService.RedrawStatusbar();
}
string GetMementoFileName(string contentName)
{
string directory = Path.Combine(PropertyService.ConfigDirectory, "temp");
//string directoryName = Path.GetDirectoryName(contentName);
return Path.Combine(directory,
Path.GetFileName(contentName)
+ "." + contentName.ToLowerInvariant().GetHashCode().ToString("x")
+ ".xml");
}
public Properties GetStoredMemento(IViewContent content)
{
if (content != null && content.FileName != null) {
string fullFileName = GetMementoFileName(content.FileName);
// check the file name length because it could be more than the maximum length of a file name
if (FileUtility.IsValidFileName(fullFileName) && File.Exists(fullFileName)) {
return Properties.Load(fullFileName);
}
}
return null;
}
public void StoreMemento(IViewContent content)
{
if (content.FileName == null) {
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -