mirror of
https://github.com/britzl/monarch.git
synced 2025-11-26 19:00:53 +01:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4c6e26fd71 | ||
|
|
00c30792a9 | ||
|
|
b01f5d28c3 | ||
|
|
43e847dacc | ||
|
|
ce5ca26b6c | ||
|
|
742779d749 | ||
|
|
84944f3f22 |
@@ -114,7 +114,7 @@ end
|
||||
|
||||
function on_message(self, message_id, message, sender)
|
||||
if message_id == hash("my_resize_message") then
|
||||
self.transition.window_resized(message.width, message.height)
|
||||
transition.window_resized(message.width, message.height)
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
@@ -29,7 +29,7 @@ function on_input(self, action_id, action)
|
||||
end
|
||||
elseif gui.pick_node(self.no, action.x, action.y) then
|
||||
print("no")
|
||||
monarch.back(function()
|
||||
monarch.back(nil, nil, function()
|
||||
print("back from popup done")
|
||||
end)
|
||||
end
|
||||
|
||||
@@ -27,7 +27,7 @@ function on_input(self, action_id, action)
|
||||
end)
|
||||
elseif gui.pick_node(self.cancel, action.x, action.y) then
|
||||
print("cancel")
|
||||
monarch.back(function()
|
||||
monarch.back(nil, nil, function()
|
||||
print("back from popup done")
|
||||
end)
|
||||
elseif gui.pick_node(self.about, action.x, action.y) then
|
||||
|
||||
@@ -19,7 +19,7 @@ function on_input(self, action_id, action)
|
||||
end)
|
||||
elseif gui.pick_node(self.back, action.x, action.y) then
|
||||
print("back")
|
||||
monarch.back(function()
|
||||
monarch.back(nil, nil, function()
|
||||
print("back from pregame done")
|
||||
end)
|
||||
end
|
||||
|
||||
@@ -228,6 +228,17 @@ function M.is_visible(id)
|
||||
end
|
||||
|
||||
|
||||
--- Check if a screen is loaded
|
||||
-- @param id (string|hash)
|
||||
-- @return true if the screen is loaded
|
||||
function M.is_loaded(id)
|
||||
assert(id, "You must provide a screen id")
|
||||
id = tohash(id)
|
||||
assert(screens[id], ("There is no screen registered with id %s"):format(tostring(id)))
|
||||
return screens[id].loaded
|
||||
end
|
||||
|
||||
|
||||
--- Check if a screen is a popup
|
||||
-- @param id Screen id
|
||||
-- @return true if the screen is a popup
|
||||
@@ -509,8 +520,12 @@ local function load(screen)
|
||||
msg.post(screen.proxy, MSG_ENABLE)
|
||||
elseif screen.factory then
|
||||
screen.factory_ids = collectionfactory.create(screen.factory)
|
||||
screen.transition_url = screen.factory_ids[screen.transition_id]
|
||||
screen.focus_url = screen.factory_ids[screen.focus_id]
|
||||
if screen.transition_id then
|
||||
screen.transition_url = screen.factory_ids[screen.transition_id]
|
||||
end
|
||||
if screen.focus_id then
|
||||
screen.focus_url = screen.factory_ids[screen.focus_id]
|
||||
end
|
||||
end
|
||||
screen.loaded = true
|
||||
screen.preloaded = false
|
||||
@@ -909,7 +924,7 @@ function M.hide(id, cb)
|
||||
log("hide() you can only hide the screen at the top of the stack", id)
|
||||
return false
|
||||
end
|
||||
return M.back(id, cb)
|
||||
return M.back(nil, nil, cb)
|
||||
else
|
||||
log("hide() queuing action", id)
|
||||
queue_action(function(action_done, action_error)
|
||||
@@ -971,17 +986,6 @@ end
|
||||
-- @param cb (function) - Optional callback to invoke when the previous screen is visible again
|
||||
function M.back(options, data, cb)
|
||||
log("back() queuing action")
|
||||
-- backwards compatibility with old version M.back(data, cb)
|
||||
-- case when back(data, cb)
|
||||
if type(data) == "function" then
|
||||
cb = data
|
||||
data = options
|
||||
options = nil
|
||||
-- case when back(data, nil)
|
||||
elseif options ~= nil and data == nil and cb == nil then
|
||||
data = options
|
||||
options = nil
|
||||
end
|
||||
|
||||
queue_action(function(action_done)
|
||||
local callbacks = callback_tracker()
|
||||
@@ -1178,8 +1182,8 @@ end
|
||||
-- @return error (string|nil) Error message if unable to send message
|
||||
function M.post(id, message_id, message)
|
||||
assert(id, "You must provide a screen id")
|
||||
if not M.is_visible(id) then
|
||||
return false, "Unable to post message to screen if it isn't visible"
|
||||
if not M.is_loaded(id) then
|
||||
return false, "Unable to post message to screen if it isn't loaded"
|
||||
end
|
||||
|
||||
assert(message_id, "You must provide a message_id")
|
||||
|
||||
@@ -142,12 +142,12 @@ return function()
|
||||
monarch.show(SCREEN1)
|
||||
assert(wait_until_stack({ SCREEN1 }))
|
||||
assert(wait_until_visible(SCREEN1))
|
||||
|
||||
|
||||
monarch.show(SCREEN2)
|
||||
assert(wait_until_stack({ SCREEN1, SCREEN2 }))
|
||||
assert(wait_until_hidden(SCREEN1))
|
||||
assert(wait_until_visible(SCREEN2))
|
||||
|
||||
|
||||
monarch.show(POPUP1)
|
||||
assert(wait_until_stack({ SCREEN1, SCREEN2, POPUP1 }))
|
||||
assert(wait_until_hidden(SCREEN1))
|
||||
@@ -155,6 +155,17 @@ return function()
|
||||
assert(wait_until_visible(POPUP1))
|
||||
end)
|
||||
|
||||
it("should be able to tell if a screen is loaded or not", function()
|
||||
assert(not monarch.is_loaded(SCREEN1))
|
||||
monarch.show(SCREEN1)
|
||||
assert(wait_until_visible(SCREEN1))
|
||||
assert(monarch.is_loaded(SCREEN1))
|
||||
|
||||
monarch.hide(SCREEN1)
|
||||
assert(wait_until_hidden(SCREEN1))
|
||||
assert(not monarch.is_loaded(SCREEN1))
|
||||
end)
|
||||
|
||||
it("should be able to show a screen without adding it to the stack", function()
|
||||
monarch.show(BACKGROUND, { no_stack = true })
|
||||
assert(wait_until_visible(BACKGROUND), "Background was never shown")
|
||||
|
||||
Reference in New Issue
Block a user