📄 defaultworkbench.cs
字号:
}
string directory = PropertyService.ConfigDirectory + "temp";
if (!Directory.Exists(directory)) {
Directory.CreateDirectory(directory);
}
Properties memento = ((IMementoCapable)content).CreateMemento();
string fullFileName = GetMementoFileName(content.FileName);
if (FileUtility.IsValidFileName(fullFileName)) {
FileUtility.ObservedSave(new NamedFileOperationDelegate(memento.Save), fullFileName, FileErrorPolicy.Inform);
}
}
// interface IMementoCapable
public Properties CreateMemento()
{
Properties properties = new Properties();
properties["bounds"] = normalBounds.X.ToString(NumberFormatInfo.InvariantInfo)
+ "," + normalBounds.Y.ToString(NumberFormatInfo.InvariantInfo)
+ "," + normalBounds.Width.ToString(NumberFormatInfo.InvariantInfo)
+ "," + normalBounds.Height.ToString(NumberFormatInfo.InvariantInfo);
if (FullScreen || WindowState == FormWindowState.Minimized)
properties["windowstate"] = defaultWindowState.ToString();
else
properties["windowstate"] = WindowState.ToString();
properties["defaultstate"] = defaultWindowState.ToString();
return properties;
}
public void SetMemento(Properties properties)
{
if (properties != null && properties.Contains("bounds")) {
string[] bounds = properties["bounds"].Split(',');
if (bounds.Length == 4) {
Bounds = normalBounds = new Rectangle(int.Parse(bounds[0], NumberFormatInfo.InvariantInfo),
int.Parse(bounds[1], NumberFormatInfo.InvariantInfo),
int.Parse(bounds[2], NumberFormatInfo.InvariantInfo),
int.Parse(bounds[3], NumberFormatInfo.InvariantInfo));
}
defaultWindowState = (FormWindowState)Enum.Parse(typeof(FormWindowState), properties["defaultstate"]);
FullScreen = properties.Get("fullscreen", false);
WindowState = (FormWindowState)Enum.Parse(typeof(FormWindowState), properties["windowstate"]);
}
}
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
if (!FullScreen && WindowState != FormWindowState.Minimized) {
defaultWindowState = WindowState;
if (WindowState == FormWindowState.Normal) {
normalBounds = Bounds;
}
}
}
protected override void OnLocationChanged(EventArgs e)
{
base.OnLocationChanged(e);
if (WindowState == FormWindowState.Normal) {
normalBounds = Bounds;
}
}
void CheckRemovedFile(object sender, FileEventArgs e)
{
for (int i = 0; i < ViewContentCollection.Count;) {
if (FileUtility.IsBaseDirectory(e.FileName, ViewContentCollection[i].FileName)) {
ViewContentCollection[i].WorkbenchWindow.CloseWindow(true);
} else {
++i;
}
}
}
void CheckRenamedFile(object sender, FileRenameEventArgs e)
{
if (e.IsDirectory) {
foreach (IViewContent content in ViewContentCollection) {
if (content.FileName != null && content.FileName.StartsWith(e.SourceFile)) {
content.FileName = e.TargetFile + content.FileName.Substring(e.SourceFile.Length);
}
}
} else {
foreach (IViewContent content in ViewContentCollection) {
if (content.FileName != null &&
FileUtility.IsEqualFileName(content.FileName, e.SourceFile)) {
content.FileName = e.TargetFile;
content.TitleName = Path.GetFileName(e.TargetFile);
return;
}
}
}
}
// protected void OnTopMenuSelected(MenuCommand mc)
// {
//
//
// StatusBarService.SetMessage(mc.Description);
// }
//
// protected void OnTopMenuDeselected(MenuCommand mc)
// {
// SetStandardStatusBar(null, null);
// }
protected override void OnClosing(CancelEventArgs e)
{
base.OnClosing(e);
ProjectService.SaveSolutionPreferences();
while (WorkbenchSingleton.Workbench.ViewContentCollection.Count > 0) {
IViewContent content = WorkbenchSingleton.Workbench.ViewContentCollection[0];
if (content.WorkbenchWindow == null) {
LoggingService.Warn("Content with empty WorkbenchWindow found");
WorkbenchSingleton.Workbench.ViewContentCollection.RemoveAt(0);
} else {
content.WorkbenchWindow.CloseWindow(false);
if (WorkbenchSingleton.Workbench.ViewContentCollection.IndexOf(content) >= 0) {
e.Cancel = true;
return;
}
}
}
closeAll = true;
ParserService.StopParserThread();
layout.Detach();
foreach (PadDescriptor padDescriptor in PadContentCollection) {
padDescriptor.Dispose();
}
ProjectService.CloseSolution();
}
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
}
void SetProjectTitle(object sender, ProjectEventArgs e)
{
if (e.Project != null) {
Title = e.Project.Name + " - " + ResourceService.GetString("MainWindow.DialogName");
} else {
Title = ResourceService.GetString("MainWindow.DialogName");
}
}
void SetStandardStatusBar(object sender, EventArgs e)
{
StatusBarService.SetMessage("${res:MainWindow.StatusBar.ReadyMessage}");
}
void OnActiveWindowChanged(object sender, EventArgs e)
{
if (!closeAll && ActiveWorkbenchWindowChanged != null) {
ActiveWorkbenchWindowChanged(this, e);
}
}
// public ToolStripManager ToolStripManager = new ToolStripManager();
public MenuStrip TopMenu = null;
public ToolStrip[] ToolBars = null;
public PadDescriptor GetPad(Type type)
{
foreach (PadDescriptor pad in PadContentCollection) {
if (pad.Class == type.FullName) {
return pad;
}
}
return null;
}
void CreateMainMenu()
{
TopMenu = new MenuStrip();
TopMenu.Items.Clear();
try {
ToolStripItem[] items = (ToolStripItem[])(AddInTree.GetTreeNode(mainMenuPath).BuildChildItems(this)).ToArray(typeof(ToolStripItem));
TopMenu.Items.AddRange(items);
UpdateMenus();
} catch (TreePathNotFoundException) {}
}
void UpdateMenu(object sender, EventArgs e)
{
UpdateMenus();
UpdateToolbars();
}
void UpdateMenus()
{
// update menu
foreach (object o in TopMenu.Items) {
if (o is IStatusUpdate) {
((IStatusUpdate)o).UpdateStatus();
}
}
}
void UpdateToolbars()
{
if (ToolBars != null) {
foreach (ToolStrip toolStrip in ToolBars) {
ToolbarService.UpdateToolbar(toolStrip);
}
}
}
void CreateToolBars()
{
if (ToolBars == null) {
ToolBars = ToolbarService.CreateToolbars(this, "/SharpDevelop/Workbench/ToolBar");
}
}
const int VK_RMENU = 0xA5; // right alt key
[System.Runtime.InteropServices.DllImport("user32.dll", ExactSpelling=true)]
static extern short GetAsyncKeyState(int vKey);
public bool IsAltGRPressed {
get {
return GetAsyncKeyState(VK_RMENU) < 0 && (Control.ModifierKeys & Keys.Control) == Keys.Control;
}
}
// Handle keyboard shortcuts
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (IsAltGRPressed)
return false;
return base.ProcessCmdKey(ref msg, keyData);
}
protected override void OnDragEnter(DragEventArgs e)
{
base.OnDragEnter(e);
if (e.Data != null && e.Data.GetDataPresent(DataFormats.FileDrop)) {
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string file in files) {
if (File.Exists(file)) {
e.Effect = DragDropEffects.Copy;
return;
}
}
}
e.Effect = DragDropEffects.None;
}
protected override void OnDragDrop(DragEventArgs e)
{
base.OnDragDrop(e);
if (e.Data != null && e.Data.GetDataPresent(DataFormats.FileDrop)) {
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string file in files) {
if (File.Exists(file)) {
IProjectLoader loader = ProjectService.GetProjectLoader(file);
if (loader != null) {
FileUtility.ObservedLoad(new NamedFileOperationDelegate(loader.Load), file);
} else {
FileService.OpenFile(file);
}
}
}
}
}
protected virtual void OnViewOpened(ViewContentEventArgs e)
{
if (ViewOpened != null) {
ViewOpened(this, e);
}
}
protected virtual void OnViewClosed(ViewContentEventArgs e)
{
if (ViewClosed != null) {
ViewClosed(this, e);
}
}
public event ViewContentEventHandler ViewOpened;
public event ViewContentEventHandler ViewClosed;
public event EventHandler ActiveWorkbenchWindowChanged;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -