Changeset 8446 for code/branches/tutoriallevel2/data
- Timestamp:
- May 11, 2011, 12:21:32 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/tutoriallevel2/data/gui/scripts/NotificationLayer.lua
r8378 r8446 4 4 5 5 P.queueList = {} 6 P.editMode = false7 6 8 7 P.sampleWindow = nil … … 248 247 end 249 248 250 -- Enter the edit mode of the notification layer.251 function P.enterEditMode()252 P.editMode = true253 254 local root = winMgr:getWindow("orxonox/NotificationLayer/Root")255 256 --Add control frame window.257 local window = winMgr:createWindow("MenuWidgets/FrameWindow", "orxonox/NotificationLayer/Root/EditMode/ControlWindow")258 local frame = tolua.cast(window, "CEGUI::FrameWindow")259 frame:setCloseButtonEnabled(false)260 frame:setText("NotificationLayer Control Window")261 frame:setSize(CEGUI.UVector2(CEGUI.UDim(0.7, 0), CEGUI.UDim(0.2, 0)))262 root:addChildWindow(window)263 local pane = winMgr:createWindow("MenuWidgets/ScrollablePane", "orxonox/NotificationLayer/Root/EditMode/ControlWindow/ScrollingPane")264 pane:setSize(CEGUI.UVector2(CEGUI.UDim(1,-20), CEGUI.UDim(1,-30)))265 pane:setPosition(CEGUI.UVector2(CEGUI.UDim(0, 10), CEGUI.UDim(0, 26)))266 window:addChildWindow(pane)267 268 vertOffset = 0269 horzOffset = 0270 -- Line to be able to create a new queue.271 local newQueueTitle = winMgr:createWindow("MenuWidgets/StaticText", "orxonox/NotificationLayer/Root/EditMode/ControlWindow/NewQueueTitle")272 newQueueTitle:setText("Create a new NotificationQueue:")273 local size = getMinTextSize(newQueueTitle)274 local textHeight = size[1]275 newQueueTitle:setSize(CEGUI.UVector2(CEGUI.UDim(0, size[2]), CEGUI.UDim(0, textHeight)))276 newQueueTitle:setPosition(CEGUI.UVector2(CEGUI.UDim(0, horzOffset), CEGUI.UDim(0, vertOffset)))277 pane:addChildWindow(newQueueTitle)278 horzOffset = horzOffset + size[2] + 5279 local newQueueName = winMgr:createWindow("MenuWidgets/Editbox", "orxonox/NotificationLayer/Root/EditMode/ControlWindow/NewQueueName")280 newQueueName:setProperty("ReadOnly", "set:False")281 newQueueName:setSize(CEGUI.UVector2(CEGUI.UDim(0, size[2]), CEGUI.UDim(0, textHeight)))282 newQueueName:setPosition(CEGUI.UVector2(CEGUI.UDim(0, horzOffset), CEGUI.UDim(0, vertOffset)))283 horzOffset = horzOffset + size[2] + 5284 pane:addChildWindow(newQueueName)285 local create = winMgr:createWindow("MenuWidgets/Button", "orxonox/NotificationLayer/Root/EditMode/ControlWindow/CreateNewQueue")286 create:setText("create")287 P.sampleWindow:setText("create")288 size = getMinTextSize(P.sampleWindow)289 create:setSize(CEGUI.UVector2(CEGUI.UDim(0, size[2]+20), CEGUI.UDim(0, textHeight)))290 create:setPosition(CEGUI.UVector2(CEGUI.UDim(0, horzOffset), CEGUI.UDim(0, vertOffset)))291 orxonox.GUIManager:subscribeEventHelper(create, "Clicked", P.name .. ".createNewQueue_clicked")292 pane:addChildWindow(create)293 horzOffset = horzOffset + size[2]+20 + 5294 vertOffset = vertOffset + textHeight + 5295 296 horzOffset = 0297 -- Button to leave the edit mode.298 local leave = winMgr:createWindow("MenuWidgets/Button", "orxonox/NotificationLayer/Root/EditMode/ControlWindow/LeaveEditModeButton")299 leave:setText("leave Edit Mode")300 P.sampleWindow:setText("leave Edit Mode")301 size = getMinTextSize(P.sampleWindow)302 leave:setSize(CEGUI.UVector2(CEGUI.UDim(0, size[2]+20), CEGUI.UDim(0, textHeight)))303 leave:setPosition(CEGUI.UVector2(CEGUI.UDim(0, horzOffset), CEGUI.UDim(0, vertOffset)))304 orxonox.GUIManager:subscribeEventHelper(leave, "Clicked", P.name .. ".leaveEditMode_clicked")305 pane:addChildWindow(leave)306 horzOffset = horzOffset + size[2]+20 + 5307 vertOffset = vertOffset + textHeight + 5308 309 --Replace all queues with FrameWindows310 for k,v in pairs(P.queueList) do311 if v ~= nil then312 local queue = P.queueList[k]313 -- Remove the window that displays the queue from the root window such that it is no longer displayed.314 root:removeChildWindow(v.window)315 316 -- Create the frame window, with options to edit the queue, that is displayed instead of the queue.317 local window = P.createQueueEditFrame(v.name)318 window:setArea(v.window:getArea()) -- Set the frame window size and position to the same as the queue.319 320 v.edit = window321 end322 end323 end324 325 -- Helper function. Creates a frame for the input queue.326 function P.createQueueEditFrame(queueName)327 local root = winMgr:getWindow("orxonox/NotificationLayer/Root")328 329 window = winMgr:createWindow("MenuWidgets/FrameWindow", "orxonox/NotificationLayer/Root/EditMode/" .. queueName)330 local frame = tolua.cast(window, "CEGUI::FrameWindow")331 frame:setCloseButtonEnabled(true)332 orxonox.GUIManager:subscribeEventHelper(frame, "CloseClicked", P.name .. ".closeQueue_clicked")333 frame:setText("NotificationQueue \"" .. queueName .. "\"")334 root:addChildWindow(window)335 local pane = winMgr:createWindow("MenuWidgets/ScrollablePane", "orxonox/NotificationLayer/Root/EditMode/" .. queueName .. "/ScrollingPane")336 pane:setSize(CEGUI.UVector2(CEGUI.UDim(1,-20), CEGUI.UDim(1,-30)))337 pane:setPosition(CEGUI.UVector2(CEGUI.UDim(0, 10), CEGUI.UDim(0, 26)))338 window:addChildWindow(pane)339 340 local horzOffset = 0341 local vertOffset = 0342 343 -- The line that lets you edit the targets of the queue.344 local targetsTitle = winMgr:createWindow("MenuWidgets/StaticText", "orxonox/NotificationLayer/Root/EditMode/" .. queueName .. "/TargetsTitle")345 targetsTitle:setText("Targets:")346 local size = getMinTextSize(targetsTitle)347 local textHeight = size[1]348 targetsTitle:setSize(CEGUI.UVector2(CEGUI.UDim(0, size[2]), CEGUI.UDim(0, textHeight)))349 targetsTitle:setPosition(CEGUI.UVector2(CEGUI.UDim(0, horzOffset), CEGUI.UDim(0, vertOffset)))350 pane:addChildWindow(targetsTitle)351 horzOffset = horzOffset + size[2] + 5352 local targets = winMgr:createWindow("MenuWidgets/Editbox", "orxonox/NotificationLayer/Root/EditMode/" .. queueName .. "/Targets")353 targets:setProperty("ReadOnly", "set:False")354 local targetsText = orxonox.NotificationManager:getInstance():getQueue(queueName):getTargets()355 targets:setText(targetsText)356 P.sampleWindow:setText(targetsText)357 size = getMinTextSize(P.sampleWindow)358 targets:setSize(CEGUI.UVector2(CEGUI.UDim(0, size[2]*2+20), CEGUI.UDim(0, textHeight)))359 targets:setPosition(CEGUI.UVector2(CEGUI.UDim(0, horzOffset), CEGUI.UDim(0, vertOffset)))360 horzOffset = horzOffset + size[2]*2+20 + 5361 pane:addChildWindow(targets)362 local save = winMgr:createWindow("MenuWidgets/Button", "orxonox/NotificationLayer/Root/EditMode/" .. queueName .. "/Targets/Save")363 save:setText("save")364 P.sampleWindow:setText("save")365 size = getMinTextSize(P.sampleWindow)366 local saveTextWidth = size[2]+20367 save:setSize(CEGUI.UVector2(CEGUI.UDim(0, saveTextWidth), CEGUI.UDim(0, textHeight)))368 save:setPosition(CEGUI.UVector2(CEGUI.UDim(0, horzOffset), CEGUI.UDim(0, vertOffset)))369 orxonox.GUIManager:subscribeEventHelper(save, "Clicked", P.name .. ".saveTargets_clicked")370 pane:addChildWindow(save)371 horzOffset = horzOffset + saveTextWidth372 vertOffset = vertOffset + textHeight + 5373 374 horzOffset = 0375 -- The line that lets you edit the size of the queue.376 local sizeTitle = winMgr:createWindow("MenuWidgets/StaticText", "orxonox/NotificationLayer/Root/EditMode/" .. queueName .. "/SizeTitle")377 sizeTitle:setText("Size:")378 size = getMinTextSize(sizeTitle)379 sizeTitle:setSize(CEGUI.UVector2(CEGUI.UDim(0, size[2]), CEGUI.UDim(0, textHeight)))380 sizeTitle:setPosition(CEGUI.UVector2(CEGUI.UDim(0, horzOffset), CEGUI.UDim(0, vertOffset)))381 pane:addChildWindow(sizeTitle)382 horzOffset = horzOffset + size[2] + 5383 local queueSize = winMgr:createWindow("MenuWidgets/Editbox", "orxonox/NotificationLayer/Root/EditMode/" .. queueName .. "/Size")384 queueSize:setProperty("ReadOnly", "set:False")385 local maxSize = orxonox.NotificationManager:getInstance():getQueue(queueName):getMaxSize()386 queueSize:setText(maxSize)387 P.sampleWindow:setText(maxSize)388 size = getMinTextSize(P.sampleWindow)389 queueSize:setSize(CEGUI.UVector2(CEGUI.UDim(0, size[2]*2+20), CEGUI.UDim(0, textHeight)))390 queueSize:setPosition(CEGUI.UVector2(CEGUI.UDim(0, horzOffset), CEGUI.UDim(0, vertOffset)))391 horzOffset = horzOffset + size[2]*2+20 + 5392 pane:addChildWindow(queueSize)393 save = winMgr:createWindow("MenuWidgets/Button", "orxonox/NotificationLayer/Root/EditMode/" .. queueName .. "/Size/Save")394 save:setText("save")395 P.sampleWindow:setText("save")396 size = getMinTextSize(P.sampleWindow)397 local saveTextWidth = size[2]+20398 save:setSize(CEGUI.UVector2(CEGUI.UDim(0, saveTextWidth), CEGUI.UDim(0, textHeight)))399 save:setPosition(CEGUI.UVector2(CEGUI.UDim(0, horzOffset), CEGUI.UDim(0, vertOffset)))400 orxonox.GUIManager:subscribeEventHelper(save, "Clicked", P.name .. ".saveSize_clicked")401 pane:addChildWindow(save)402 horzOffset = horzOffset + saveTextWidth403 vertOffset = vertOffset + textHeight + 5404 405 horzOffset = 0406 -- The line that lets you edit the display time of the queue.407 local displayTimeTitle = winMgr:createWindow("MenuWidgets/StaticText", "orxonox/NotificationLayer/Root/EditMode/" .. queueName .. "/DisplayTimeTitle")408 displayTimeTitle:setText("Display time:")409 size = getMinTextSize(displayTimeTitle)410 displayTimeTitle:setSize(CEGUI.UVector2(CEGUI.UDim(0, size[2]), CEGUI.UDim(0, textHeight)))411 displayTimeTitle:setPosition(CEGUI.UVector2(CEGUI.UDim(0, horzOffset), CEGUI.UDim(0, vertOffset)))412 pane:addChildWindow(displayTimeTitle)413 horzOffset = horzOffset + size[2] + 5414 local displayTime = winMgr:createWindow("MenuWidgets/Editbox", "orxonox/NotificationLayer/Root/EditMode/" .. queueName .. "/DisplayTime")415 displayTime:setProperty("ReadOnly", "set:False")416 local time = orxonox.NotificationManager:getInstance():getQueue(queueName):getDisplayTime()417 displayTime:setText(time)418 P.sampleWindow:setText(time)419 size = getMinTextSize(P.sampleWindow)420 displayTime:setSize(CEGUI.UVector2(CEGUI.UDim(0, size[2]*2+20), CEGUI.UDim(0, textHeight)))421 displayTime:setPosition(CEGUI.UVector2(CEGUI.UDim(0, horzOffset), CEGUI.UDim(0, vertOffset)))422 horzOffset = horzOffset + size[2]*2+20 + 5423 pane:addChildWindow(displayTime)424 save = winMgr:createWindow("MenuWidgets/Button", "orxonox/NotificationLayer/Root/EditMode/" .. queueName .. "/DisplayTime/Save")425 save:setText("save")426 P.sampleWindow:setText("save")427 size = getMinTextSize(P.sampleWindow)428 local saveTextWidth = size[2]+20429 save:setSize(CEGUI.UVector2(CEGUI.UDim(0, saveTextWidth), CEGUI.UDim(0, textHeight)))430 save:setPosition(CEGUI.UVector2(CEGUI.UDim(0, horzOffset), CEGUI.UDim(0, vertOffset)))431 orxonox.GUIManager:subscribeEventHelper(save, "Clicked", P.name .. ".saveDisplayTime_clicked")432 pane:addChildWindow(save)433 horzOffset = horzOffset + saveTextWidth434 vertOffset = vertOffset + textHeight + 5435 436 return window437 end438 439 -- Leave the edit mode.440 function P.leaveEditMode()441 P.editMode = false442 443 local root = winMgr:getWindow("orxonox/NotificationLayer/Root")444 --Replace all queues with FrameWindows445 for k,v in pairs(P.queueList) do446 if v ~= nil then447 -- Add the queue window to the root window to have it displayed again.448 root:addChildWindow(v.window)449 -- Set the size and position of the queue window to the size and position of the queue edit frame.450 v.window:setArea(v.edit:getArea())451 -- Destroy the edit frame.452 winMgr:destroyWindow(v.edit)453 v.edit = nil454 end455 end456 457 --Remove control window458 winMgr:destroyWindow(winMgr:getWindow("orxonox/NotificationLayer/Root/EditMode/ControlWindow"))459 end460 461 -- Is called after the sheet has been hidden.462 function P.afterHide()463 -- If we leave the edit mode we show the sheet again.464 if P.editMode then465 P.leaveEditMode()466 showMenuSheet(P.name, false, true)467 end468 end469 470 -- If the button to save the targets of a queue has been clicked.471 function P.saveTargets_clicked(e)472 local we = CEGUI.toWindowEventArgs(e)473 local name = we.window:getName()474 475 local match = string.gmatch(name, "EditMode/.*/Targets/Save")476 local nameStr = match()477 local queueName = string.sub(nameStr, 10, string.len(nameStr)-13)478 479 local window = winMgr:getWindow("orxonox/NotificationLayer/Root/EditMode/" .. queueName .. "/Targets")480 local save = winMgr:getWindow("orxonox/NotificationLayer/Root/EditMode/" .. queueName .. "/Targets/Save")481 local width = window:getWidth():asAbsolute(1)482 483 local queue = orxonox.NotificationManager:getInstance():getQueue(queueName)484 -- Set the new targets.485 queue:setTargets(window:getText())486 local targets = queue:getTargets()487 488 window:setText(targets)489 P.sampleWindow:setText(targets)490 local size = getMinTextSize(P.sampleWindow)491 -- Adjust the width of the targets field.492 window:setWidth(CEGUI.UDim(0, size[2]*2+20))493 -- Adjust the position of the save button after the targets field.494 save:setXPosition(CEGUI.UDim(0, save:getXPosition():asAbsolute(1)-width+window:getWidth():asAbsolute(1)))495 end496 497 -- If the button to save the size if a queue has been clicked.498 function P.saveSize_clicked(e)499 local we = CEGUI.toWindowEventArgs(e)500 local name = we.window:getName()501 502 local match = string.gmatch(name, "EditMode/.*/Size/Save")503 local nameStr = match()504 local queueName = string.sub(nameStr, 10, string.len(nameStr)-10)505 506 local window = winMgr:getWindow("orxonox/NotificationLayer/Root/EditMode/" .. queueName .. "/Size")507 local save = winMgr:getWindow("orxonox/NotificationLayer/Root/EditMode/" .. queueName .. "/Size/Save")508 local width = window:getWidth():asAbsolute(1)509 510 local queue = orxonox.NotificationManager:getInstance():getQueue(queueName)511 -- Set the new size.512 queue:setMaxSize(tonumber(window:getText()))513 local maxSize = queue:getMaxSize()514 515 window:setText(maxSize)516 P.sampleWindow:setText(maxSize)517 local size = getMinTextSize(P.sampleWindow)518 -- Adjust the width of the size field.519 window:setWidth(CEGUI.UDim(0, size[2]*2+20))520 -- Adjust the position of the save button after the size field.521 save:setXPosition(CEGUI.UDim(0, save:getXPosition():asAbsolute(1)-width+window:getWidth():asAbsolute(1)))522 end523 524 -- If the button to save the display time if a queue has been clicked.525 function P.saveDisplayTime_clicked(e)526 local we = CEGUI.toWindowEventArgs(e)527 local name = we.window:getName()528 529 local match = string.gmatch(name, "EditMode/.*/DisplayTime/Save")530 local nameStr = match()531 local queueName = string.sub(nameStr, 10, string.len(nameStr)-17)532 533 local window = winMgr:getWindow("orxonox/NotificationLayer/Root/EditMode/" .. queueName .. "/DisplayTime")534 local save = winMgr:getWindow("orxonox/NotificationLayer/Root/EditMode/" .. queueName .. "/DisplayTime/Save")535 local width = window:getWidth():asAbsolute(1)536 537 local queue = orxonox.NotificationManager:getInstance():getQueue(queueName)538 -- Set the new display time.539 queue:setDisplayTime(tonumber(window:getText()))540 local time = queue:getDisplayTime()541 542 window:setText(time)543 P.sampleWindow:setText(time)544 local size = getMinTextSize(P.sampleWindow)545 -- Adjust the width of the display time field.546 window:setWidth(CEGUI.UDim(0, size[2]*2+20))547 -- Adjust the position of the save button after the display time field.548 save:setXPosition(CEGUI.UDim(0, save:getXPosition():asAbsolute(1)-width+window:getWidth():asAbsolute(1)))549 end550 551 -- if the button to create a new queue has been clicked.552 function P.createNewQueue_clicked(e)553 local window = winMgr:getWindow("orxonox/NotificationLayer/Root/EditMode/ControlWindow/NewQueueName")554 local name = window:getText()555 556 local queue = P.queueList[name]557 -- Test if a queue with that name already exists.558 if queue ~= nil then559 window:setText("Queue with that name already exists.")560 return561 end562 563 -- Creates the new queue.564 orxonox.NotificationManager:getInstance():createQueue(name)565 566 queue = P.queueList[name]567 if queue == nil then568 return569 end570 571 -- Create the frame that represents the queue in edit mode, since that's what we're in.572 local frame = P.createQueueEditFrame(name)573 local root = winMgr:getWindow("orxonox/NotificationLayer/Root")574 -- Remove the queue window from the root window, since we're in edit mode.575 root:removeChildWindow(queue.window)576 -- Set the frame window size and position to that of the queue window.577 frame:setArea(queue.window:getArea())578 queue.edit = frame579 580 -- Reset the text to create a new queue.581 window:setText("")582 end583 584 -- If the button to leave the edit mode has been clicked.585 function P.leaveEditMode_clicked(e)586 hideMenuSheet(P.name)587 end588 589 -- If the button to close the queue has been clicked.590 function P.closeQueue_clicked(e)591 local we = CEGUI.toWindowEventArgs(e)592 local name = we.window:getName()593 594 local match = string.gmatch(name, "EditMode/.*")595 local nameStr = match()596 local queueName = string.sub(nameStr, 10, string.len(nameStr))597 598 -- Destroy the frame window,599 winMgr:destroyWindow(P.queueList[queueName].edit)600 P.queueList[queueName].edit = nil601 -- Destroy the queue.602 orxonox.NotificationManager:getInstance():getQueue(queueName):destroy()603 end604 605 249 -- Helper function. Returns height a queue needs to have to display 'size' items. 606 250 function P.queueHeightHelper(queue, size)
Note: See TracChangeset
for help on using the changeset viewer.