2020年7月15日 星期三

SharpDevelop IDE 系列研究 (6) - 告一段落,聊聊 SharpDevelop API

SharpDevelop IDE 系列文章,會在這篇文章之後告一段落,這個章節,來聊聊 SharpDevelop 的幾個 API ,方便日後要研究時,可以從這邊著手去探索。 


SD / WorkbenchSingleton 的 Workbench

在 SharpDevelop 中,你可以直接使用 SD.xxx 或是 WorkbencchSingleton.xxx 得到 AutoComplete 建議:


現在,我們要考慮底下兩個程式碼:

WorkbenchSingleton.Workbench.ShowView(new Class1());
SD.Workbench.ShowView(new Class1());

這兩個程式碼,是做完全一模一樣的事情,那他們差在哪? 我該用哪一個去做?

這時候,把滑鼠放上去 WorkbenchSingleton ,它會告訴你:

WorkbenchSingleton only consists of obsolete members. Use SD.Workbench and SD.MainThread instead.

很明顯的,它告訴你這是過時的變數成員,它已經把取得 Workbench 的方式,變成 Static 放在 SD 中了。

Workbench 可以想像成 IDE 場域中的所有內容,會透過 Workbench 這個人去處理。


用 Workbench 取得場域上的那個東西


取得什麼東西,是由 Type 決定的,假設我想取得某一個 Pad 視窗的 Class ,我就要用那個 Pad 實作的 Type 讓 Workbench 幫你找出來,如果找不到,就會給你空的值,讓你自己去新增,請看以下程式碼:

PadDescriptor pad = SD.Workbench.GetPad(typeof(CustomPropertiesPad)); //取得 IDE 場上活動的 CustomPropertiesPad 型別

if (pad == null) //如果找不到
{
	pad.CreatePad(); //就直接新增一個 Pad
}


pad.BringPadToFront(); //然後把它呼叫到最前面


或者是直接告訴我,目前此人的 Pad 是誰:

SD.Workbench.GetType()

Pad 這個概念就是每一個在場域上拆分的細節,包含 Avalon Dock (如圖) 這些可以分出來的視窗,其實都是由不同的 Class 構成的, Workbench 可以取得這些 class runtime 中的 instance ,然後對他們執行某些方法,或是傳送參數:



除了 Workbench 還有什麼?


MessageService (可以顯示文字對話框):

SD.MessageService.AskQuestion("Are you OKay?");
SD.MessageService.ShowMessage("WOW Hello");


OutputPad (在 Output Pad 中顯示編譯訊息之類的):

SD.OutputPad.BuildCategory.AppendText(new RichText("test"));


AddInTree (取的外掛樹,也可以嘗試對外部外掛對接處理):

SD.AddInTree.xxx

那麼,這一系列的研究文章大概就告一段落了。

2020.07 月.

沒有留言:

張貼留言

© Mac Taylor, 歡迎自由轉貼。
Background Email Pattern by Toby Elliott
Since 2014