第二人生的原始碼分析 八十三 建立UI的選單

2021-08-22 16:55:14 字數 1860 閱讀 2552

從前面看到,不但視窗和顯示板可以通過

xml定製,而選單也可以通過xml檔案來定製的,那麼選單的定製又是怎樣讀取xml檔案的呢?到底它又會產生什麼樣的物件來執行選單呢?下面就來解決這兩個問題,**如下:

#001llmenugl *lluictrlfactory::buildmenu(const llstring &filename, llview* parentp)

#002

#011

判斷這個

xml檔案是否定義選單的。

#012

// root must be called panel

#013

if( !root->hasname( "menu_bar" ) && !root->hasname( "menu" ))

#014

#018

如果 xml檔案裡定義有menu,說明它是類llmenugl裡創制選單,否則它是從類llmenubargl裡建立選單。

#019

if (root->hasname("menu"))

#020

#023

else

#024

#027

設定選單類提示的資訊是

xml檔名稱。

#028

if (llui::sshowxuinames)

#029

#032

#033

return menu;

#034}

#035

上面的**通過分析

xml檔案,然後根據xml檔案來建立llmenugl物件來表示選單,因此這裡是使用類llmenugl來執行顯示選單的。下面再來看一下選單定義的xml是什麼樣子的,如下:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>

height="18" left="0" mouse_opaque="true" name="login menu" opaque="true"

tear_off="false" width="802">

height="263" label="file" left="0" mouse_opaque="false" name="file"

opaque="true" tear_off="false" width="243">

mouse_opaque="true" name="quit" shortcut="control|q" width="243">

height="439" label="edit" left="38" mouse_opaque="false" name="edit"

opaque="true" tear_off="false" width="153">

mouse_opaque="true" name="preferences..." shortcut="control|p" width="153">

height="317" label="help" left="80" mouse_opaque="false" name="help"

opaque="true" tear_off="falsoe" width="166">

mouse_opaque="true" name="second life help" shortcut="f1" width="166">

mouse_opaque="true" name="about second life..." width="166">

最後是通過下面這樣子來呼叫這個函式的:

gloginmenubarview = (llmenubargl*)guictrlfactory->buildmenu("menu_login.xml", gmenuholder);

第二人生的原始碼分析 八十 介面語言的選擇

隨著全球化的發展,地球變得平坦了。我有乙個同事現在還在美國 oracle進行學習,說明軟體是真正的無國界產品。那麼在第二人生裡,到底是怎麼樣實現多語言的支援呢?帶著這個問題來分析下面一段 如下 001void lluictrlfactory setuppaths 002 025 設定當前正在設定的語...

第二人生的原始碼分析 2 第二人生的基本功能

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!第二人生的基功能可以定義為網路遊戲 社交網路和 web2.0 作為網路遊戲,它可以讓人扮演角色,也就是第二人生裡的居民。居民只要買到地,或者租到地後就可以建造各種各樣的自己想得到的東西。比如建造遊樂園,或者建造電影院,又或者建造過山車。同時,還可以...

第二人生的原始碼分析 六十三 類Multi實現多請求

從前面看到類 easy是封裝了乙個請求,但往往需要傳送多個請求的情況,這樣就需要實現多個請求能同時工作的類,在第二人生裡是把這部份功能放在類multi裡的,同樣它也是llcurl類的巢狀類。它的宣告如下 001 class llcurl multi 002 這個類主要把多個 easy請求放到一起操作...