2014年3月23日 星期日

自訂瀏覽視窗

UE的內容瀏覽器(Content Browser)相信是大家最常用的功能之一,它除了列出在檔案裡的各種資源外,還有其他頁面用來列出類別或場景物件等功能。這每一頁在UE中稱為瀏覽視窗,而且開發者可以自行添加新的頁面。

瀏覽視窗的基礎類別是WxBrower,每個頁面都需要繼承自它。它的重要成員有:

  • MenuBar[wxMenuBar*]:如果有指定,切換到這頁時會出現指定的選單。UE會自動加上Docking子選單。
  • Activated():切換到這頁時會呼叫此函式。
  • Send(ECallbackEventType):這其實是FCallbackEventDevice界面的處理事件函式,WxBrower有繼承該界面並覆寫。預設是呼叫Update()。
  • Update():更新視窗。像是如果收到CALLBACK_RefreshEditor_AllBrowsers事件的話預設會呼叫這個函式。
  • IsClonable():傳回這個視窗允不允許被複製。不允許的話,Docking選單裡的Clone Browser選項會變成不能按。

範例


以下程式碼展示如何新增一個瀏覽視窗:
class WxMyBrowser : public WxBrowser
{
    DECLARE_DYNAMIC_CLASS(WxMyBrowser);

public:

    WxMyBrowser();
    ~WxMyBrowser();
    
    virtual void Create(INT DockID,const TCHAR* FriendlyName,wxWindow* Parent);
    
    virtual const TCHAR* GetLocalizationKey() const
    {
        return TEXT("MyBrowser");
    }
};
因為只是一個空殼,實作只是加上主選單讓它可以dock/float。
IMPLEMENT_DYNAMIC_CLASS(WxMyBrowser, WxBrowser);

class WxMBMyBrowser : public wxMenuBar
{
public:

    WxMBMyBrowser()
    {
        WxBrowser::AddDockingMenu( this );
    }
};

WxMyBrowser::WxMyBrowser()
{
}

WxMyBrowser::~WxMyBrowser()
{
}

void WxMyBrowser::Create(INT DockID,const TCHAR* FriendlyName,wxWindow* Parent)
{
    WxBrowser::Create(DockID,FriendlyName,Parent);
    
    MenuBar = new WxMBMyBrowser();
}
最後一定要在XXXEditor.ini裡註冊才會出現:
[UnrealEd.BrowserManager]
+BrowserPanes=(PaneID=14,WxWindowClassName="WxMyBrowser",FriendlyName="MyBrowser",CloneOfPaneID=-1,CloneNumber=-1)

沒有留言:

張貼留言