//////////////////////////////////////////////////////////////////////////

    void UpdateUI()
    {
        btnTrash.interactable = _isSelectMode;

        _spriteSelectMode.sprite = _isSelectMode ? spriteSelectModeOn : spriteSelectModeOff;

        if (canvasGroup.interactable)
        {
            int numUnread = 0;
            foreach (InboxItemInterface msg in _messages)
            {
                msg.btnCheckbox.transform.DOScale(_isSelectMode ? 1 : 0, 0.3f);
                msg.isSelected = false;
                if (!msg.message.isRead)
                {
                    numUnread++;
                }
            }

            txtNumNewMessages.text = (numUnread == 0 ? "NO" : numUnread.ToString()) + " NEW MESSAGE" + (numUnread != 1 ? "S" : "");
        }
        else
        {
            txtNumNewMessages.text = "...";
        }

        //Tween to the correct section:
        float width = sectionInbox.rect.width;
        float time  = _isInited ? 0.5f : 0f;

        if (_isReadingMessage)
        {
            MoveSection(sectionInbox, -width, time);
            MoveSection(sectionMessage, 0, time);
        }
        else
        {
            MoveSection(sectionInbox, 0, time);
            MoveSection(sectionMessage, width, time);

            _currentMessage = null;
        }
    }
    public void ReadMessage(InboxItemInterface inboxItemInterface)
    {
        SetBusy(true);

        _currentMessage = inboxItemInterface;
        InboxMessageData message = _currentMessage.message;

        message.receipt.isRead = true;

        API.Messages.ReadMessage(message)
        .Then(msg => {
            SetBusy(false);
            inboxItemInterface.UpdateUI();
            OnReadMessageComplete(msg);
        })
        .Catch(err => {
            SetBusy(false);
            traceError("Could not read the Message #{0}:\n".Format2(message.MongoID) + err.Message + "\n" + err.StackTrace);
        });
    }