void MsgEdit::setInput() { Command cmd; cmd->id = CmdCustomInput; cmd->param = this; Event e(EventCommandWidget, cmd); CToolCustom *wInput = (CToolCustom*)(e.process()); cmd->id = CmdCustomReceive; CToolCustom *wReceive = (CToolCustom*)(e.process()); m_userWnd->setStatus(""); if (wInput){ wInput->show(); } if (wReceive){ wReceive->removeWidgets(); wReceive->hide(); } }
bool MsgEdit::setMessage(Message *msg, bool bSetFocus) { m_type = msg->type(); unsigned type = m_type; m_bReceived = msg->getFlags() & MESSAGE_RECEIVED; QObject *(*create)(QWidget *custom, Message *msg) = NULL; for (;;){ CommandDef *cmd = CorePlugin::m_plugin->messageTypes.find(type); if (cmd == NULL) return false; MessageDef *def = (MessageDef*)(cmd->param); if (def == NULL) return false; if (m_bReceived){ create = def->show; }else{ create = def->generate; } if (create) break; if (def->base_type == 0){ if (m_bReceived) break; return false; } type = def->base_type; } Command cmd; cmd->id = CmdCustomInput; cmd->param = this; Event e(EventCommandWidget, cmd); CToolCustom *wInput = (CToolCustom*)(e.process()); cmd->id = CmdCustomReceive; CToolCustom *wReceive = (CToolCustom*)(e.process()); m_userWnd->setStatus(""); QObject *initObj = NULL; if (wInput){ if (m_bReceived){ wInput->hide(); if (m_type == NO_TYPE){ wInput->removeWidgets(); m_type = MessageGeneric; Message msg(MessageGeneric); initObj = new MsgGen(wInput, &msg); } }else{ wInput->removeWidgets(); initObj = create(wInput, msg); wInput->show(); } } if (wReceive){ if (m_bReceived){ wReceive->removeWidgets(); initObj = new MsgReceived(wReceive, msg); wReceive->show(); }else{ wReceive->hide(); } } if (msg->client()){ m_client = msg->client(); }else{ m_client = ""; } Contact *contact = getContacts()->contact(m_userWnd->id()); if (contact){ Event e(EventContactClient, contact); e.process(); } cmd->id = CmdMultiply; cmd->text = I18N_NOOP("&Multiply send"); cmd->icon = "1rightarrow"; cmd->icon_on = "1leftarrow"; cmd->flags = COMMAND_DEFAULT; if (msg->getFlags() & MESSAGE_FORWARD){ cmd->flags = COMMAND_CHECKED; m_userWnd->showListView(true, false); } Event eChange(EventCommandChange, cmd); eChange.process(); if (initObj && bSetFocus){ connect(this, SIGNAL(init()), initObj, SLOT(init())); emit init(); disconnect(this, SIGNAL(init()), initObj, SLOT(init())); } return true; }