MattiasBuelens

MCMail ui/box

Jul 24th, 2012
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.04 KB | None | 0 0
  1. --[[
  2.  
  3.     MCNet Mail UI
  4.     Message box pane
  5.  
  6. ]]--
  7.  
  8. ui = ui or {}
  9.  
  10. --[[
  11.  
  12.     Read message pane
  13.  
  14. ]]--
  15.  
  16. local BoxReadPane = common.newClass({
  17.     stretch = true
  18. }, ui.ReadPane)
  19. ui.BoxReadPane = BoxReadPane
  20.  
  21. function BoxReadPane:toolbar()
  22.     -- Styles
  23.     local toolbar = ccgui.FlowContainer:new{
  24.         horizontal = false
  25.     }
  26.     local ToolbarButton = common.newClass(ccgui.Button)
  27.     local ToolbarToggleButton = common.newClass(ccgui.ToggleButton)
  28.  
  29.     -- Buttons
  30.     local reply = ToolbarButton:new{
  31.         label = "Reply"
  32.     }
  33.     local toggleRead = ToolbarToggleButton:new{
  34.         labelOn = "Mark unread",
  35.         labelOff = "Mark read  "
  36.     }
  37.     local delete = ToolbarButton:new{
  38.         label = "Delete"
  39.     }
  40.     toggleRead:setState(self.message.read)
  41.  
  42.     -- Actions
  43.     reply:on("buttonpress", function(pane)
  44.         pane:trigger("replyPressed", pane.message)
  45.     end, self)
  46.     toggleRead:on("toggleon", function(pane)
  47.         pane:trigger("markAsReadPressed", pane.message)
  48.     end, self)
  49.     toggleRead:on("toggleoff", function(pane)
  50.         pane:trigger("markAsUnreadPressed", pane.message)
  51.     end, self)
  52.     delete:on("buttonpress", function(pane)
  53.         pane:trigger("deletePressed", pane.message)
  54.     end, self)
  55.  
  56.     -- Bindings
  57.     self:on("readMessage", function(pane, message)
  58.         toggleRead:setState(true)
  59.     end, self)
  60.     self:on("unreadMessage", function(pane, message)
  61.         toggleRead:setState(false)
  62.     end, self)
  63.  
  64.     toolbar:add(reply, toggleRead, delete)
  65.     return toolbar
  66. end
  67.  
  68. --[[
  69.  
  70.     List messages pane
  71.  
  72. ]]--
  73.  
  74. local BoxListPane = common.newClass({
  75.     -- Message panes
  76.     paneClass = ui.BoxReadPane,
  77.     -- Message box
  78.     mailbox = nil,
  79.     boxStore = nil,
  80.     boxName = "",
  81.     box = nil
  82. }, ui.ListPane)
  83. ui.BoxListPane = BoxListPane
  84.  
  85. function BoxListPane:init()
  86.     ui.ListPane.init(self)
  87.  
  88.     self:on("readMessage", self.markAsRead, self)
  89.     self:sinkEventToCurrent("readMessage")
  90.     self:on("unreadMessage", self.markAsUnread, self)
  91.     self:sinkEventToCurrent("unreadMessage")
  92.     self:on("removeMessage", self.mailbox.remove, self.mailbox)
  93.  
  94.     self:loadMessages()
  95. end
  96.  
  97. function BoxListPane:addMessage(message)
  98.     local pane = ui.ListPane.addMessage(self, message)
  99.     if type(pane) ~= "table" then return pane end
  100.  
  101.     -- Listen to tab activation
  102.     pane.tabButton:on("buttonpress", function(list)
  103.         list:trigger("readMessage", pane.message)
  104.     end, self)
  105.  
  106.     -- Bubble toolbar events to list pane
  107.     pane:on("replyPressed", function(list, message)
  108.         list:trigger("replyMessage", message)
  109.     end, self)
  110.     pane:on("markAsReadPressed", function(list, message)
  111.         list:trigger("readMessage", message)
  112.     end, self)
  113.     pane:on("markAsUnreadPressed", function(list, message)
  114.         list:trigger("unreadMessage", message)
  115.     end, self)
  116.     pane:on("deletePressed", function(list, message)
  117.         list:removeMessage(message)
  118.     end, self)
  119.  
  120.     return pane
  121. end
  122.  
  123. function BoxListPane:loadMessages()
  124.     self.mailbox:load()
  125.     for i,msg in ipairs(self.mailbox.messages) do
  126.         self:addMessage(msg)
  127.     end
  128. end
  129.  
  130. function BoxListPane:markAsRead(message)
  131.     message.read = true
  132.     self.mailbox:save()
  133. end
  134.  
  135. function BoxListPane:markAsUnread(message)
  136.     message.read = false
  137.     self.mailbox:save()
  138. end
Advertisement
Add Comment
Please, Sign In to add comment