-- Reset ui & manage desktop change (one desktop per editor mode) ------------------------------------------------------------------------------------ function setActive(wndName, active) local wnd = getUI(wndName, r2.Config.VerboseGetUI) if wnd ~= nil then wnd.active = active end end ------------------------------------------------------------------------------------ function hide(wndName) setActive(wndName, false) end ------------------------------------------------------------------------------------ function show(wndName) setActive(wndName, true) end function r2:hide(wndName) hide(wndName) end -- Reset windows placement in each desktop (one desktop per mode of the editor, so no virtual desktop are available in r2ed) function r2:resetDesktop(desktopIndex) local scrW, scrH = getWindowSize() ---------------------------------------------------------------------------------------------------------- -- reset the EDITION desktop if desktopIndex == 0 then hideAllWindows() local palette = getUI("ui:interface:r2ed_palette") if palette then palette.active = true palette.x = 4 palette.y = scrH - 85 palette.w = 225 palette.h = 245 end local scenario = getUI("ui:interface:r2ed_scenario") if scenario then scenario.active = false --scenario.w = 315 scenario.w = 350 scenario.h = 450 scenario.x = scrW - scenario.w - 5 scenario.y = scrH - 65 -- by default the 'scene rollout' is opened --r2:setRolloutOpened(scenario:find("geo_tree").caption, scenario:find("geo_tree_list"), true) -- by default the 'permanent content' is opened --r2:setRolloutOpened(scenario:find("content_tree").caption, scenario:find("content_tree_list"), true) -- by default the 'act' rollout is opened --r2:setRolloutOpened(scenario:find("acts").caption, scenario:find("act_tree_enclosing"), true) end local webAdmin = getUI("ui:interface:r2ed_web_admin") webAdmin.active = false --if webAdmin then -- webAdmin.active = false -- webAdmin.w = 250 -- webAdmin.h = 255 -- webAdmin.x = scrW - webAdmin.w - 5 -- if scenario then -- webAdmin.y = scenario.y - scenario.h - 5 -- else -- webAdmin.y = scrH - 5 -- end -- end local toolbar = getUI("ui:interface:r2ed_toolbar") if toolbar then toolbar.active = true toolbar:invalidateCoords() toolbar:updateCoords() end if r2.Scenario then r2:setSelectedInstanceId("") -- force a real select r2:setSelectedInstanceId(r2.Scenario.InstanceId) end -- -- -- -- -- ---------------------------------------------------------------------------------------------------------- -- reset the TEST dektop elseif desktopIndex == 1 then hideAllWindows() -- show game related windows in test mode -- (same as virtual desktop 0 in game) -- Target runAH(nil, "set", "target='ui:interface:target:active'|value=1") runAH(nil, "set", "target='ui:interface:target:locked'|value=0") runAH(nil, "set", "target='ui:interface:target:x'|value=sub(sub(getprop('ui:interface:w'),getprop('ui:interface:target:w')),4)") runAH(nil, "set", "target='ui:interface:target:y'|value=sub(getprop('ui:interface:h'),4)") -- gestion sets runAH(nil, "set", "target='ui:interface:gestionsets:active'|value=1") runAH(nil, "set", "target='ui:interface:gestionsets:x'|value=div(sub(getprop('ui:interface:w'),getprop('ui:interface:gestionsets:w')),2)") runAH(nil, "set", "target='ui:interface:gestionsets:y'|value=sub(getprop('ui:interface:h'),4)") -- player runAH(nil, "set", "target='ui:interface:player:active'|value=1") runAH(nil, "set", "target='ui:interface:player:x'|value=4") runAH(nil, "set", "target='ui:interface:player:y'|value=sub(getprop('ui:interface:h'),4)" ) runAH(nil, "set", "target='ui:interface:player:locked'|value=0") runAH(nil, "set_transparent", "ui:interface:player") local webAdmin = getUI("ui:interface:r2ed_web_admin") webAdmin.active = false --if webAdmin then -- webAdmin.active = true -- webAdmin.w = 250 -- webAdmin.h = 255 -- webAdmin.x = scrW - webAdmin.w - 5 -- webAdmin.y = scrH - 75 --end -- bonus malus window runAH(nil, "set", "target='ui:interface:bonus_malus:active'|value=1") runAH(nil, "set", "target='ui:interface:bonus_malus:x'|value=188") runAH(nil, "set", "target='ui:interface:bonus_malus:y'|value=sub(getprop('ui:interface:h'),4)") runAH(nil, "set", "target='ui:interface:bonus_malus:locked'|value=1") -- Compass --runAH(nil, "set", "target='ui:interface:compass:x'|value=sub(sub(getprop('ui:interface:w'),getprop('ui:interface:compass:w')),4)") --runAH(nil, "set", "target='ui:interface:compass:y'|value=sub(sub(getprop('ui:interface:h'),getprop('ui:interface:target:h')),8)") -- Help --runAH(nil, "set", "target='ui:interface:help_browser:active'|value=1") --runAH(nil, "set", "target='ui:interface:help_browser:locked'|value=0") --runAH(nil, "set", "target='ui:interface:help_browser:w'|value=410") --runAH(nil, "set", "target='ui:interface:help_browser:h'|value=128") --runAH(nil, "set", "target='ui:interface:help_browser:x'|value=sub(sub(getprop('ui:interface:w'),getprop('ui:interface:help_browser:w')),4)") --runAH(nil, "set", "target='ui:interface:help_browser:y'|value=add(getprop('ui:interface:help_browser:h'),4)") -- System Info --runAH(nil, "set", "target='ui:interface:system_info:w'|value=div(sub(getprop('ui:interface:w'),add(getprop('ui:interface:help_browser:w'),16)),2)") --runAH(nil, "set", "target='ui:interface:system_info:h'|value=128") --runAH(nil, "set", "target='ui:interface:system_info:x'|value=4") --runAH(nil, "set", "target='ui:interface:system_info:y'|value=add(getprop('ui:interface:system_info:h'),4)") -- Main Chat -- runAH(nil, "set", "target='ui:interface:main_chat:w'|value=getprop('ui:interface:system_info:w')") -- runAH(nil, "set", "target='ui:interface:main_chat:h'|value=128") -- runAH(nil, "set", "target='ui:interface:main_chat:x'|value=add(getprop('ui:interface:system_info:w'),8)") -- runAH(nil, "set", "target='ui:interface:main_chat:y'|value=add(getprop('ui:interface:system_info:h'),4)") -- Mission Journal --runAH(nil, "set", "target='ui:interface:info_player_journal:active'|value=1") --runAH(nil, "set", "target='ui:interface:info_player_journal:locked'|value=0") --runAH(nil, "set", "target='ui:interface:info_player_journal:x'|value=4") --runAH(nil, "set", "target='ui:interface:info_player_journal:y'|value=add(add(getprop('ui:interface:system_info:h'),getprop('ui:interface:info_player_journal:h')),8)") -- Milko Pad --runAH(nil, "set", "target='ui:interface:milko:x'|value=sub(sub(getprop('ui:interface:w'),getprop('ui:interface:milko:w')),4)") --runAH(nil, "set", "target='ui:interface:milko:y'|value=sub(sub(getprop('ui:interface:compass:y'),getprop('ui:interface:compass:h')),4)") -- Hands local toolbarWindow = getUI("ui:interface:r2ed_toolbar_window") toolbarWindow.x=32 toolbarWindow.y=0 local milkoPad = getUI("ui:interface:milko_pad") milkoPad.y = 0 milkoPad.x = scrW - milkoPad.w ---------------------------------------------------------------------------------------------------------- -- reset the DM destop elseif desktopIndex == 2 then hideAllWindows() local webAdmin = getUI("ui:interface:r2ed_web_admin") webAdmin.active = false --if webAdmin then -- webAdmin.active = true -- webAdmin.w = 250 -- webAdmin.h = 255 -- webAdmin.x = scrW - webAdmin.w - 5 -- webAdmin.y = scrH - 5 --end local toolbar = getUI("ui:interface:r2ed_toolbar") if toolbar then toolbar.active = true toolbar:invalidateCoords() toolbar:updateCoords() end local dmToolbar = getUI("ui:interface:r2ed_windows_dm_bar") if dmToolbar then dmToolbar.active = true dmToolbar:invalidateCoords() dmToolbar:updateCoords() end hide("ui:interface:bonus_malus") -- patch for the bonus-malus window elseif desktopIndex == 3 then hideAllWindows() end r2:resetDesktopVisibleWindows(desktopIndex) end local function cleanEnv(contName) local cont = getUI("ui:interface" .. contName, r2.Config.VerboseGetUI) if cont then cont:deleteLUAEnvTable(true) -- recursively delete lua environments cont:setOnDraw("") end end ---------------------------------------------------------------------------------------------------------- function r2:adjustToolbarGap() local toolbar = getUI("ui:interface:r2ed_toolbar") local dx = 0 local numGroups = toolbar:getNumGroups() for k = 0, numGroups - 1 do local gr = toolbar:getGroup(k) if gr.active then gr.x = dx dx = 4 else gr.x = 0 end end end ---------------------------------------------------------------------------------------------------------- -- common to r2:onChangeDesktop & r2:resetDesktop function r2:resetDesktopVisibleWindows(desktopIndex) -- reset the EDIT desktop if desktopIndex == 0 then if (r2.CurrentPropertyWindow) then r2.CurrentPropertyWindow.active = false r2.CurrentPropertyWindow = nil end r2.PropertyWindowVisible = false show("ui:interface:r2ed_tool_context_help") if config.R2EDExtendedDebug == 1 then show("ui:interface:r2ed_current_session") else hide("ui:interface:r2ed_current_session") end hide("ui:interface:welcome_info") hide("ui:interface:compass") show("ui:interface:r2ed_main_menu_button") show("ui:interface:r2ed_main_bl") show("ui:interface:r2ed_select_bar") hide("ui:interface:r2ed_select_bar:buttons") hide("ui:interface:r2ed_select_bar:sequences") hide("ui:interface:milko_pad") hide("ui:interface:windows") hide("ui:interface:r2ed_npc") hide("ui:interface:ring_chars_tracking") local b1 = getUI("ui:interface:r2ed_select_bar"):find("b1") if b1 then b1:updateCoords() -- force to update the coords, icon position not good otherwise end hide("ui:interface:bonus_malus") -- patch for the bonus-malus window r2.ToolUI:updateUndoRedo() hide("ui:interface:r2ed_connect") hide("ui:interface:r2ed_toolbar_window") -- reset the TEST desktop elseif desktopIndex == 1 then if config.R2EDExtendedDebug == 1 then show("ui:interface:r2ed_current_session") else hide("ui:interface:r2ed_current_session") end hide("ui:interface:compass") hide("ui:interface:welcome_info") show("ui:interface:r2ed_main_bl") hide("ui:interface:r2ed_testbar") hide("ui:interface:r2ed_main_menu_button") show("ui:interface:milko_pad") hide("ui:interface:windows") hide("ui:interface:r2ed_connect") hide("ui:interface:ring_chars_tracking") if not r2.isSessionOwner() and r2.AccessMode ~= "Editor" then hide("ui:interface:r2ed_toolbar_window") else show("ui:interface:r2ed_toolbar_window") end -- reset the DM desktop elseif desktopIndex == 2 then hide("ui:interface:compass") if config.R2EDExtendedDebug == 1 then show("ui:interface:r2ed_current_session") else hide("ui:interface:r2ed_current_session") end hide("ui:interface:r2ed_main_bl") show("ui:interface:r2ed_testbar") show("ui:interface:r2ed_main_menu_button") hide("ui:interface:milko_pad") hide("ui:interface:windows") hide("ui:interface:bonus_malus") -- patch for the bonus-malus window hide("ui:interface:r2ed_connect") hide("ui:interface:r2ed_toolbar_window") hide("ui:interface:ring_chars_tracking") else hide("ui:interface:bonus_malus") -- patch for the bonus-malus window end hide("ui:interface:team_share") -- patch for the 'team share' window game:updateMissionJournalMode() r2:disableAnimals() end -- called by C ++ : reset non savable parts after a desktop change function r2:onChangeDesktop(desktopIndex) --debugInfo("On change desktop = " .. tostring(desktopIndex)) hideAllNonSavableWindows(); -- in each case, hide welcom and ring access windows getUI("ui:interface:npc_web_browser").active=false ---------------------------------------------------------------------------------------------------------- -- set the EDITION desktop if desktopIndex == 0 then r2:setFixedLighting(false) hide("ui:interface:feature_help") r2.ui.AnimBar:clearActions() local toolbar = getUI("ui:interface:r2ed_toolbar") if toolbar then toolbar.active = true toolbar.r2ed_tool_select.active = true toolbar.r2ed_tool_rotate.active = true toolbar.r2ed_tool_undo.active = true toolbar.r2ed_tool_redo.active = true toolbar.r2ed_tool_copy.active = true toolbar.r2ed_tool_paste.active = true toolbar.r2ed_tool_teleport.active = true toolbar.r2ed_tool_display_mode.active = true toolbar.r2ed_tool_start.active = true toolbar.r2ed_tool_stop.active = false toolbar.r2ed_stop_live.active = false --toolbar.r2ed_tool_teleport.x = 4 r2:adjustToolbarGap() toolbar.r2ed_freeze_bot_objects.x = 4 toolbar.r2ed_unfreeze_bot_objects.x = 0 toolbar:invalidateCoords() toolbar:updateCoords() toolbar.r2ed_live.active = false end local windowsDMBar = getUI("ui:interface:r2ed_windows_dm_bar") if windowsDMBar then windowsDMBar.active=false windowsDMBar:invalidateCoords() windowsDMBar:updateCoords() end cleanEnv("r2ed_scenario") cleanEnv("r2ed_bbox_edit") cleanEnv("r2ed_toolbar") cleanEnv("r2ed_windowbar") cleanEnv("r2ed_testbar") cleanEnv("r2ed_toolbar_admin") cleanEnv("r2ed_table_test") cleanEnv("r2ed_editbox_test") cleanEnv("lua_inspector") cleanEnv("r2ed_palette") cleanEnv("r2ed_connect") cleanEnv("r2ed_property_sheet_no_selection") cleanEnv("r2ed_property_sheet_no_properties") cleanEnv("r2ed_scenario") r2.ScenarioWindow:resetWindow() r2.ContextualCommands:setupToolbar(nil) -- set new title for th "keys" window local keys = getUI("ui:interface:keys") if keys then keys.uc_title = i18n.get("uiR2EDEditingKeys") end if r2.UserComponentsManager then r2.UserComponentsManager:updateUserComponentsUi() end r2:setupFreezeBotObjectButton() local goTestButton = getUI("ui:interface:r2ed_toolbar"):find("r2ed_tool_start").unselected.button local goTestMenu = getUI("ui:interface:r2ed_main_menu"):find("go_test") goTestButton.frozen = false goTestMenu.grayed = false ---------------------------------------------------------------------------------------------------------- -- set the TEST desktop OR player desktop elseif desktopIndex == 1 then r2:setFixedLighting(false) hide("ui:interface:feature_help") r2.ui.AnimBar:clearActions() r2.ui.AnimBar:update() local toolbar = getUI("ui:interface:r2ed_toolbar") toolbar.active = false local toolbarWindow = getUI("ui:interface:r2ed_toolbar_window") toolbarWindow:find("r2ed_anim_dm_mode").active = (r2.AccessMode == "Editor") toolbarWindow:find("r2ed_stop_live").active = not (r2.AccessMode == "Editor") and r2.isSessionOwner() toolbarWindow:find("player_control").active = (not (r2.AccessMode == "Editor")) and r2.isSessionOwner() toolbarWindow:find("r2ed_live").active = false -- resize the toolbarWindow depending on content r2:resizeToolbarWindow() local windowsDMBar = getUI("ui:interface:r2ed_windows_dm_bar") if windowsDMBar then windowsDMBar.r2ed_live.active = (not (r2.AccessMode == "Editor")) and r2.isSessionOwner() windowsDMBar.player_control.active = (not (r2.AccessMode == "Editor")) and r2.isSessionOwner() windowsDMBar:invalidateCoords() windowsDMBar:updateCoords() end r2:adjustToolbarGap() local keys = getUI("ui:interface:keys") if keys then keys.uc_title = i18n.get("uiR2EDTestOrDMKeys") end ---------------------------------------------------------------------------------------------------------- -- reset the DM desktop elseif desktopIndex == 2 then r2:setFixedLighting(false) hide("ui:interface:feature_help") r2.ui.AnimBar:clearActions() local toolbar = getUI("ui:interface:r2ed_toolbar") if toolbar then toolbar.active = true toolbar.r2ed_freeze_bot_objects.active = false toolbar.r2ed_unfreeze_bot_objects.active = false toolbar.r2ed_tool_select.active = false toolbar.r2ed_tool_rotate.active = false toolbar.r2ed_tool_undo.active = false toolbar.r2ed_tool_redo.active = false toolbar.r2ed_tool_copy.active = false toolbar.r2ed_tool_paste.active = false toolbar.r2ed_tool_teleport.active = true toolbar.r2ed_tool_display_mode.active = false toolbar.r2ed_tool_start.active = false toolbar.r2ed_tool_stop.active = (r2.AccessMode == "Editor") toolbar.r2ed_stop_live.active = (not (r2.AccessMode == "Editor")) and r2.isSessionOwner() --toolbar.r2ed_tool_teleport.x = -20 -- compensate x from previous buttons --toolbar.r2ed_stop_live.x = -8 -- compensate x from previous buttons toolbar.r2ed_live.active = (r2.AccessMode=="Editor" or r2.Mode=="DM") r2:adjustToolbarGap() toolbar:invalidateCoords() toolbar:updateCoords() end local windowsDMBar = getUI("ui:interface:r2ed_windows_dm_bar") if windowsDMBar then windowsDMBar.active=true windowsDMBar.r2ed_live.active = (not (r2.AccessMode == "Editor")) and r2.isSessionOwner() windowsDMBar.player_control.active = (not (r2.AccessMode == "Editor")) and r2.isSessionOwner() windowsDMBar:invalidateCoords() windowsDMBar:updateCoords() end r2.ui.AnimBar:update() r2.ui.AnimBar:updateDMControlledEntitiesWindow() local keys = getUI("ui:interface:keys") if keys then keys.uc_title = i18n.get("uiR2EDTestOrDMKeys") end end -- special : if "key" window is visible on current desktop, hide, then show it again to force a refresh of its content local keys = getUI("ui:interface:keys") if keys.active then keys.active = false keys.active = true end r2:resetDesktopVisibleWindows(desktopIndex) r2.ToolUI:updateToggleWindowButtons() r2.ToolUI:updateToggleWindowDMButtons() end function r2:resizeToolbarWindow() local toolbarWindow = getUI("ui:interface:r2ed_toolbar_window") toolbarWindow:updateCoords() local w = toolbarWindow:find("enclosing").w_real + 16 toolbarWindow.w = w toolbarWindow.pop_min_w = w toolbarWindow.pop_max_w = w toolbarWindow:updateCoords() end -- for masterless mode only : display option to control player & quit function r2:initDMToolbarWindowPos() if not r2.isSessionOwner() then return end local scrW, scrH = getWindowSize() -- init dm toolbar default pos local toolbarWindow = getUI("ui:interface:r2ed_toolbar_window") toolbarWindow.active = true toolbarWindow.x= 11 toolbarWindow.y=scrH - 190 end -- for masterless mode only : display option to control player & quit function r2:popDMToolbarWindow() local toolbarWindow = getUI("ui:interface:r2ed_toolbar_window") toolbarWindow.active = true toolbarWindow:find("r2ed_anim_dm_mode").active = false toolbarWindow:find("r2ed_stop_live").active = true toolbarWindow:find("r2ed_live").active = true toolbarWindow:find("player_control").active = true r2:resizeToolbarWindow() setTopWindow(toolbarWindow) hide("ui:interface:r2ed_main_bl") game:updateMissionJournalMode() r2:disableAnimals() getUI("ui:interface:welcome_info").active=false end -- fix for previous versions : dm toolbar was shown on players desktop function r2:playerModeUIFix() local toolbarWindow = getUI("ui:interface:r2ed_toolbar_window") toolbarWindow.active = false hide("ui:interface:r2ed_main_bl") game:updateMissionJournalMode() r2:disableAnimals() getUI("ui:interface:welcome_info").active=false end function r2:disableAnimals() local animals = getUI("ui:interface:animal_global") animals.content.no_available_animals.active = true animals.list.active = false animals.header_opened.active = false animals.header_closed.active = true end