~ubuntu-branches/debian/sid/ember/sid

« back to all changes in this revision

Viewing changes to src/components/ogre/widgets/Admin.lua

  • Committer: Bazaar Package Importer
  • Author(s): Michael Koch
  • Date: 2009-07-23 07:46:40 UTC
  • Revision ID: james.westby@ubuntu.com-20090723074640-wh0ukzis0kda36qv
Tags: upstream-0.5.6
ImportĀ upstreamĀ versionĀ 0.5.6

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
--[[
 
2
When the user is logged in as admin we want to show a special admin menu which contains options for showing various widgets and tools specially suited for admins.
 
3
We'll use the existing icon bar and add a new icon to it, so the MainIconBar.lua script must be loaded.
 
4
The creation of the amdmin menu is delayed until we've actually logged in as an admin; if not it will never be created.
 
5
]]--
 
6
 
 
7
Admin = {connectors={}, adminIcon=nil}
 
8
 
 
9
--adds a standard menu item to the main popup menu.
 
10
function Admin.addMenuItem(labelText, clickMethod, tooltipText)
 
11
        local menuItem = windowManager:createWindow("EmberLook/MenuItem")
 
12
        menuItem:setText(labelText)
 
13
        menuItem:subscribeEvent("Clicked", clickMethod)
 
14
        menuItem:setTooltipText(tooltipText)
 
15
        Admin.popup:addChildWindow(menuItem)
 
16
        return menuItem
 
17
end
 
18
 
 
19
--[[
 
20
Add an icon to the icon bar and build a popup menu which will be shown when the icon is clicked
 
21
]]--
 
22
function Admin.buildWidget()
 
23
 
 
24
        if MainIconBar.addIcon ~= nil then
 
25
                --we'll use the "spell" icon from the "iconset_mason" for now until we get a better icon
 
26
                local foreground = EmberOgre.Gui.IconBase:loadImageFromImageset("iconset_mason", "spell")
 
27
                Admin.adminIcon = MainIconBar.addIcon("admin", foreground, "Click here to access the admin menu.")
 
28
                Admin.adminIcon:getButton():subscribeEvent("MouseClick", "Admin.admin_MouseClick")
 
29
        
 
30
                Admin.popup = windowManager:createWindow("EmberLook/PopupMenu")
 
31
                Admin.popup = CEGUI.toPopupMenu(Admin.popup)
 
32
                Admin.popup:subscribeEvent("MouseLeave", "Admin.popupMenu_MouseLeaves")
 
33
                
 
34
                Admin.addMenuItem("Model editor", "Admin.ModelEditor_Click", "Shows the model editor.")
 
35
                Admin.addMenuItem("Terrain editor", "Admin.TerrainEditor_Click", "Shows the terrain editor.")
 
36
                Admin.addMenuItem("Switch camera", "Admin.SwitchCamera_Click", "Switches camera mode between free flying and attached to the avatar.")
 
37
                Admin.addMenuItem("Entity creator", "Admin.EntityCreator_Click", "Shows the entity creator.")
 
38
                Admin.addMenuItem("Script editor", "Admin.ScriptEditor_Click", "Shows the script editor.")
 
39
                Admin.addMenuItem("Entity browser", "Admin.EntityBrowser_Click", "Shows the entity browser.")
 
40
                Admin.addMenuItem("Assets manager", "Admin.AssetsManager_Click", "Shows the assets manager.")
 
41
                Admin.addMenuItem("Picking info", "Admin.PickingInfo_Click", "Shows mouse picking info.")
 
42
                
 
43
        
 
44
                root:addChildWindow(Admin.popup)
 
45
        end 
 
46
end
 
47
 
 
48
--hide the menu when the mouse leaves it
 
49
function Admin.popupMenu_MouseLeaves(args)
 
50
        --only hide if we're not moved to another menu item
 
51
        local mousePosition = CEGUI.MouseCursor:getSingleton():getPosition()
 
52
        local windowUnderTheCursor = Admin.popup:getTargetChildAtPosition(mousePosition)
 
53
        if windowUnderTheCursor == nil then
 
54
                Admin.popup:closePopupMenu()
 
55
        end
 
56
        return true
 
57
end
 
58
 
 
59
--[[
 
60
Show the admin menu at the mouse position
 
61
]]--
 
62
function Admin.admin_MouseClick(args)
 
63
        Admin.popup:openPopupMenu()
 
64
        
 
65
--[[    local adminContainer = Admin.adminIcon:getContainer()
 
66
        local x = adminContainer:getXPosition():asAbsolute(0) + (adminContainer:getWidth():asAbsolute(0) * 0.5)
 
67
        local y = adminContainer:getYPosition():asAbsolute(0) - Admin.popup.getHeight():asAbsolute(0);]]
 
68
        
 
69
        local mousePosition = CEGUI.MouseCursor:getSingleton():getPosition()
 
70
        local x = mousePosition.x - Admin.popup:getWidth():asAbsolute(0) * 0.5
 
71
        local y = mousePosition.y - Admin.popup:getHeight():asAbsolute(0) + 5
 
72
        
 
73
        local uPosition = CEGUI.UVector2:new_local(CEGUI.UDim(0,x), CEGUI.UDim(0,y))
 
74
        
 
75
        Admin.popup:setPosition(uPosition)
 
76
        Admin.popup:moveToFront()
 
77
        return true
 
78
end
 
79
 
 
80
function Admin.ModelEditor_Click(args)
 
81
        console:runCommand("/show_modelEdit")
 
82
end
 
83
 
 
84
function Admin.TerrainEditor_Click(args)
 
85
        if TerrainEditor == nil then
 
86
                loadScript("TerrainEditor.lua")
 
87
        end
 
88
        console:runCommand("/show_terrainEditor")
 
89
        
 
90
end
 
91
 
 
92
function Admin.SwitchCamera_Click(args)
 
93
        console:runCommand("/toggle_cameraattached")
 
94
end
 
95
 
 
96
function Admin.EntityCreator_Click(args)
 
97
        console:runCommand("/show_advEntityCreator")
 
98
end
 
99
 
 
100
function Admin.ScriptEditor_Click(args)
 
101
        console:runCommand("/show_scriptEdit")
 
102
end
 
103
 
 
104
function Admin.EntityBrowser_Click(args)
 
105
        console:runCommand("/show_entityBrowser")
 
106
end
 
107
 
 
108
function Admin.AssetsManager_Click(args)
 
109
        console:runCommand("/show_assetsManager")
 
110
end
 
111
 
 
112
function Admin.PickingInfo_Click(args)
 
113
        console:runCommand("/show_pickingInfo")
 
114
end
 
115
 
 
116
--only show the admin menu if we're logged in as an admin
 
117
function Admin.createdAvatarEmberEntity(avatarEntity)
 
118
        if avatarEntity:getAvatar():isAdmin() then
 
119
                Admin.buildWidget()
 
120
        end
 
121
end
 
122
 
 
123
--listen for when we've gotten an avatar entity, and see if we're admin
 
124
connect(Admin.connectors, emberOgre.EventCreatedAvatarEntity, "Admin.createdAvatarEmberEntity")