日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SharpDevelop源码分析笔记(一)

發(fā)布時間:2025/3/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SharpDevelop源码分析笔记(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
SharpDevelop自動命令啟動UI部分(看SharpDevelop源碼分析筆記隨想)

?

參見:Fbt2008的大作? SharpDevelop源碼分析筆記(一)???

?

源文檔 <http://www.cnblogs.com/fbt2008/archive/2005/08/02/205785.aspx?Pending=true>

?

Fbt2008的大作中描述了SharpDevelopRuntime的啟動過程,我把其中GUI啟動補(bǔ)充一下。

?

其中寫到如下系統(tǒng)代碼啟動片斷

?

系統(tǒng)代碼:

?

//這段代碼就是程序啟動時加載前臺插件了,/Workspace/Autostart是系統(tǒng)自動運(yùn)行命令的擴(kuò)展點(diǎn)路徑,定義在這個路徑下的插件會在系統(tǒng)啟動的時候自動運(yùn)行。在這里,通過插件樹初始化建立處于這個路徑下的Command(命令),并逐一執(zhí)行。BuildChildItems方法的功能是建立這個擴(kuò)展點(diǎn)下的Command列表
commands?=?AddInTreeSingleton.AddInTree.GetTreeNode("/Workspace/Autostart").BuildChildItems(null);
for?(int?i?=?0;?i?<?commands.Count?-?1;?++i)?
{
????((ICommand)commands[i]).Run();
????}
}?

?

這段代碼會載入如下清單文件,并根據(jù)此清單文件中的ClassId載入運(yùn)行

插件清單之一(SharpDevelopCore.addin文件)

?

片斷

<Extension path = "/Workspace/Autostart">

<Class id = "InitializeWorkbenchCommand"

class = "ICSharpCode.SharpDevelop.Commands.InitializeWorkbenchCommand"/>

<Class id = "StartCodeCompletionWizard"

class = "ICSharpCode.SharpDevelop.Commands.StartCodeCompletionWizard"/>

<Class id = "StartParserServiceThread"

class = "ICSharpCode.SharpDevelop.Commands.StartParserServiceThread"/>

<!-- #assembly preload -->

<Class id = "StartSharpAssemblyPreloadThread"

class = "ICSharpCode.SharpDevelop.Commands.StartSharpAssemblyPreloadThread"/>

<Class id = "StartWorkbenchCommand"

class = "ICSharpCode.SharpDevelop.Commands.StartWorkbenchCommand"/>

</Extension>

?

大家注意了:"/Workspace/Autostart" 就是上面代碼根據(jù)此描述將這一段的描述中的Class的實(shí)例載入,然后執(zhí)行他們的方法(這些Class都繼承了Icommand

?

這些類都在文件AutostartCommands.cs中

?

GUI的主要啟動過程就在InitializeWorkbenchCommand類上,如下:


?

public?class?InitializeWorkbenchCommand?:?AbstractCommand
{
????
const?string?workbenchMemento?=?"SharpDevelop.Workbench.WorkbenchMemento";
????
????
public?override?void?Run()
????
{
????????
//產(chǎn)生一個默認(rèn)的Workbench
????????DefaultWorkbench?w?=?new?DefaultWorkbench();
????????WorkbenchSingleton.Workbench?
=?w;
????????
//啟動Workbench
????????w.InitializeWorkspace();
????????PropertyService?propertyService?
=?(PropertyService)ServiceManager.Services.GetService(typeof(PropertyService));
????????
//將上一次使用的Workbench布局等信息重新載入
????????w.SetMemento((IXmlConvertable)propertyService.GetProperty(workbenchMemento,?new?WorkbenchMemento()));
????????
//刷新Workbench,根據(jù)布局信息,打開啟動時需要展現(xiàn)的Pad和Editor
????????w.UpdatePadContents(null,?null);
????????WorkbenchSingleton.CreateWorkspace();
????????
????}

}



?

DefaultWorkbench 的 InitializeWorkspace代碼如下

?

public?void?InitializeWorkspace()
{
????Menu?
=?null;
????
//狀態(tài)條
????statusBarManager.Control.Dock?=?DockStyle.Bottom;
????
????ActiveWorkbenchWindowChanged?
+=?new?EventHandler(UpdateMenu);
????
????MenuComplete?
+=?new?EventHandler(SetStandardStatusBar);
????SetStandardStatusBar(
null,?null);
????
????IProjectService?projectService?
=?(IProjectService)ICSharpCode.Core.Services.ServiceManager.Services.GetService(typeof(IProjectService));
????IFileService?fileService?
=?(IFileService)ICSharpCode.Core.Services.ServiceManager.Services.GetService(typeof(IFileService));
????
????projectService.CurrentProjectChanged?
+=?new?ProjectEventHandler(SetProjectTitle);
????projectService.CombineOpened
????????
????????????
+=?new?CombineEventHandler(CombineOpened);

????fileService.FileRemoved?
+=?new?FileEventHandler(CheckRemovedFile);
????fileService.FileRenamed?
+=?new?FileEventHandler(CheckRenamedFile);

????fileService.FileRemoved?
+=?new?FileEventHandler(fileService.RecentOpen.FileRemoved);
????fileService.FileRenamed?
+=?new?FileEventHandler(fileService.RecentOpen.FileRenamed);

????
//

????
????TopMenu.Selected???
+=?new?CommandHandler(OnTopMenuSelected);
????
//

????
????TopMenu.Deselected?
+=?new?CommandHandler(OnTopMenuDeselected);

????
//創(chuàng)建菜單
????CreateMainMenu();
????
//創(chuàng)建工具條
????CreateToolBars();
}



???w.SetMemento(...);
??? w.UpdatePadContents(null, null);
??? 這兩句稍稍復(fù)雜些,在這里就不分析了。


?

注意:有關(guān)WorkbenchpadEditor等概念基本可以參照Eclipse文檔。有一些細(xì)小差別,例如PadEclipse中叫View,WorkenchSharpDevelop僅存在一個WorkbenchWindow.而在SharpDevelop有多個等等。



?

般若菩提
關(guān)注 - 0
粉絲 - 0
關(guān)注博主 0 0 (請您對文章做出評價) ? 上一篇:強(qiáng)烈推薦兩本經(jīng)典OO書籍以及對用例編寫的啟發(fā)

總結(jié)

以上是生活随笔為你收集整理的SharpDevelop源码分析笔记(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。