void onPopupDel(Evas_Object *popup, void *eventInfo);
void onMsgSendErrorButtonClicked(Popup &popup, int buttonId);
+ // ContextPopup callbacks:
+ void onDeleteItemPressed(ContextPopupItem &item);
+ void onAddRecipientsItemPressed(ContextPopupItem &item);
+
private:
// Empty initializer constructor:
- Conversation(NaviFrameController &parent, bool dummy);
+ Conversation(NaviFrameController &parent, const AppControlComposeRef &cmd, bool dummy);
void create();
void setMode(Mode mode);
void setNewMessageMode();
void updateNavibar();
void createMainLayout(Evas_Object *parent);
void createConvList(Evas_Object *parent);
- void hideKeyboard();
+ void destroyConvList();
+ void showMainCtxPopup();
void showNoRecipPopup();
void showSendResultPopup(MsgTransport::SendResult result);
+ void hideKeyboard();
+
void notifyConvertMsgType();
void convertMsgTypeHandler();
void checkAndSetMsgType();
ThreadId m_ThreadId;
bool m_IsMms; // Compose message type
ConvList *m_pConvList;
- AppControlComposeRef m_ComposeCmd;
+ const AppControlComposeRef m_ComposeCmd;
};
}
using namespace Msg;
-Conversation::Conversation(NaviFrameController &parent, bool dummy)
+Conversation::Conversation(NaviFrameController &parent, const AppControlComposeRef &cmd, bool dummy)
: FrameController(parent)
, m_Mode(InitMode)
, m_pLayout(nullptr)
, m_ThreadId()
, m_IsMms(false)
, m_pConvList(nullptr)
- , m_ComposeCmd()
+ , m_ComposeCmd(cmd)
{
}
Conversation::Conversation(NaviFrameController &parent, const AppControlComposeRef &cmd)
- : Conversation(parent, false)
+ : Conversation(parent, cmd, false)
{
if(cmd)
- {
- m_ComposeCmd = cmd;
m_ThreadId = getMsgEngine().getStorage().getThreadId(m_ComposeCmd->getRecipientList());
- }
+
create();
}
Conversation::Conversation(NaviFrameController &parent,ThreadId threadId)
- : Conversation(parent, false)
+ : Conversation(parent, nullptr, false)
{
m_ThreadId = threadId;
create();
void Conversation::create()
{
createMainLayout(getParent());
- createConvList(*m_pLayout);
createMsgInputPanel(*m_pLayout);
createBody(*m_pMsgInputPanel);
m_pLayout->showPredictSearch(true);
m_pLayout->setRecipientPanel(*m_pRecipPanel);
m_pLayout->setPredictSearch(*m_pContactsList);
+ destroyConvList();
updateNavibar();
+ m_pRecipPanel->update(m_ThreadId);
+ m_pRecipPanel->showMbe(!m_pRecipPanel->isMbeEmpty());
}
void Conversation::setConversationMode()
MSG_LOG("");
m_Mode = ConversationMode;
+ createConvList(*m_pLayout);
+
m_pLayout->showPredictSearch(false);
m_pLayout->showSelectAll(false);
m_pLayout->setBubble(*m_pConvList);
void Conversation::createConvList(Evas_Object *parent)
{
- m_pConvList = new ConvList(*m_pLayout, getMsgEngine(), m_ThreadId);
- m_pConvList->hide();
+ if(!m_pConvList)
+ {
+ m_pConvList = new ConvList(*m_pLayout, getMsgEngine(), m_ThreadId);
+ m_pConvList->show();
+ }
+}
+
+void Conversation::destroyConvList()
+{
+ if(m_pConvList)
+ {
+ m_pConvList->destroy();
+ m_pConvList = nullptr;
+ }
}
void Conversation::createRecipPanel(Evas_Object *parent)
void Conversation::fillMsgAddress(Message &msg)
{
- if(m_ThreadId.isValid())
+ if(m_ThreadId.isValid() && m_Mode != NewMessageMode)
{
MsgAddressListRef addressList = getMsgEngine().getStorage().getAddressList(m_ThreadId);
msg.addAddresses(*addressList);
popup.show();
}
+void Conversation::showMainCtxPopup()
+{
+ auto &ctxPopup = getApp().getPopupManager().getCtxPopup();
+
+ ctxPopup.appendItem(msg("IDS_MSG_OPT_DELETE"), nullptr, CTXPOPUP_ITEM_PRESSED_CB(Conversation, onDeleteItemPressed), this);
+ ctxPopup.appendItem(msg("IDS_MSG_OPT_ADD_RECIPIENTS_ABB"), nullptr, CTXPOPUP_ITEM_PRESSED_CB(Conversation, onAddRecipientsItemPressed), this);
+ ctxPopup.align(getApp().getWindow());
+ ctxPopup.show();
+}
+
void Conversation::onKeyDown(RecipientsPanel &panel, Evas_Event_Key_Down &ev)
{
if(ev.keyname)
void Conversation::updateNavibar()
{
+ getNaviBar().clear();
getNaviBar().setColor(NaviBar::NaviWhiteColorId);
- std::string conversationName = getMsgEngine().getStorage().getThread(m_ThreadId)->getName();
- if(conversationName.empty())
+
+ if(m_Mode == NewMessageMode)
{
getNaviBar().setTitle(msgt("IDS_MSGF_POP_NEW_MESSAGE"));
+ getNaviBar().showButton(NaviPrevButtonId, true);
}
else
{
- //TODO: enable down button when needed
- getNaviBar().showButton(NaviCenterButtonId, true);
- getNaviBar().setButtonText(NaviCenterButtonId, conversationName);
+ if(m_pConvList->getMode() == ConvList::NormalMode)
+ {
+ std::string conversationName = getMsgEngine().getStorage().getThread(m_ThreadId)->getName();
+ //TODO: enable down button when needed
+ getNaviBar().showButton(NaviCenterButtonId, true);
+ getNaviBar().setButtonText(NaviCenterButtonId, conversationName);
+ getNaviBar().showButton(NaviPrevButtonId, true);
+ }
+ else
+ {
+ getNaviBar().setTitle(msgt("IDS_MSG_OPT_DELETE"));
+ getNaviBar().showButton(NaviCancelButtonId, true);
+ getNaviBar().showButton(NaviOkButtonId, true);
+ }
}
- getNaviBar().showButton(NaviPrevButtonId, true);
}
void Conversation::onButtonClicked(MessageInputPanel &obj, MessageInputPanel::ButtonId id)
if(m_pConvList && m_pConvList->getMode() == ConvList::SelectMode)
{
m_pConvList->setMode(ConvList::NormalMode);
+ updateNavibar();
return;
}
void Conversation::onHwMoreButtonClicked()
{
- MSG_LOG("");
- //TODO: make more menu popup.
- m_pConvList->setMode(m_pConvList->getMode() == ConvList::NormalMode ? ConvList::SelectMode : ConvList::NormalMode);
+ if(m_Mode == ConversationMode && m_pConvList->getMode() == ConvList::NormalMode)
+ showMainCtxPopup();
}
void Conversation::onButtonClicked(NaviFrameItem &item, NaviButtonId buttonId)
break;
case NaviCancelButtonId:
+ onHwBackButtonClicked();
break;
case NaviOkButtonId:
popup.destroy();
}
+void Conversation::onDeleteItemPressed(ContextPopupItem &item)
+{
+ item.getParent().destroy();
+
+ m_pConvList->setMode(ConvList::SelectMode);
+ setConversationMode();
+}
+
+void Conversation::onAddRecipientsItemPressed(ContextPopupItem &item)
+{
+ item.getParent().destroy();
+
+ setNewMessageMode();
+}