bool MsgEdit::setType(unsigned type) { CommandDef *def; def = CorePlugin::m_plugin->messageTypes.find(type); if (def == NULL) return false; MessageDef *mdef = (MessageDef*)(def->param); if (mdef->flags & MESSAGE_SILENT) return false; if (mdef->create == NULL) return false; Message *msg = mdef->create(NULL); if (msg == NULL) return false; m_userWnd->setMessage(&msg); delete msg; return true; }
UserWnd::UserWnd(unsigned id, const char *cfg, bool bReceived) : QSplitter(Horizontal, NULL) { load_data(userWndData, &data, cfg); m_id = id; m_bResize = false; m_bClosed = false; m_bTyping = false; setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); m_hSplitter = new QSplitter(Horizontal, this); m_splitter = new QSplitter(Vertical, m_hSplitter); m_list = NULL; m_view = NULL; if (cfg == NULL) memcpy(data.editBar, CorePlugin::m_plugin->data.editBar, sizeof(data.editBar)); m_bBarChanged = true; if (CorePlugin::m_plugin->getContainerMode()) bReceived = false; m_edit = new MsgEdit(m_splitter, this, bReceived); restoreToolbar(m_edit->m_bar, data.editBar); m_edit->m_bar->show(); m_bBarChanged = false; connect(m_edit, SIGNAL(toolBarPositionChanged(QToolBar*)), this, SLOT(toolbarChanged(QToolBar*))); connect(CorePlugin::m_plugin, SIGNAL(modeChanged()), this, SLOT(modeChanged())); connect(m_edit, SIGNAL(heightChanged(int)), this, SLOT(editHeightChanged(int))); modeChanged(); if (data.MessageType == 0) return; CommandDef *cmd = CorePlugin::m_plugin->messageTypes.find(data.MessageType); if (cmd == NULL) return; MessageDef *def = (MessageDef*)(cmd->param); Message *msg = def->create(NULL); setMessage(msg); delete msg; }
void *MsgEdit::processEvent(Event *e) { if ((e->type() == EventContactChanged) && !m_bReceived){ Command cmd; cmd->id = m_type; cmd->menu_id = MenuMessage; cmd->param = (void*)(m_userWnd->m_id); Event e(EventCheckState, cmd); if (e.process()) return NULL; Event eMenu(EventGetMenuDef, (void*)MenuMessage); CommandsDef *cmdsMsg = (CommandsDef*)(eMenu.process()); CommandsList itc(*cmdsMsg, true); CommandDef *c; while ((c = ++itc) != NULL){ c->param = (void*)(m_userWnd->m_id); Event eCheck(EventCheckState, c); if (!eCheck.process()) continue; CommandDef *def; def = CorePlugin::m_plugin->messageTypes.find(c->id); if (def == NULL) continue; MessageDef *mdef = (MessageDef*)(def->param); if (mdef->flags & MESSAGE_SILENT) continue; if (mdef->create == NULL) continue; Message *msg = mdef->create(NULL); if (msg == NULL) continue; setMessage(msg, false); delete msg; break; } return NULL; } if (e->type() == EventMessageReceived){ Message *msg = (Message*)(e->param()); if (msg->getFlags() & MESSAGE_NOVIEW) return NULL; if ((msg->contact() == m_userWnd->id()) && (msg->type() != MessageStatus)){ if (CorePlugin::m_plugin->getContainerMode()){ bool bSetFocus = false; if (topLevelWidget() && topLevelWidget()->inherits("Container")){ Container *container = static_cast<Container*>(topLevelWidget()); if (container->wnd() == m_userWnd) bSetFocus = true; } setMessage(msg, bSetFocus); }else{ if (m_edit->isReadOnly()) QTimer::singleShot(0, this, SLOT(setupNext())); } } } if (e->type() == EventRealSendMessage){ MsgSend *s = (MsgSend*)(e->param()); if (s->edit == this){ sendMessage(s->msg); return e->param(); } } if (e->type() == EventCheckState){ CommandDef *cmd = (CommandDef*)(e->param()); if ((cmd->param == this) && (cmd->id == CmdTranslit)){ Contact *contact = getContacts()->contact(m_userWnd->id()); if (contact){ TranslitUserData *data = (TranslitUserData*)(contact->getUserData(CorePlugin::m_plugin->translit_data_id)); if (data){ cmd->flags &= ~COMMAND_CHECKED; if (data->Translit) cmd->flags |= COMMAND_CHECKED; } } return NULL; } if ((cmd->menu_id != MenuTextEdit) || (cmd->param != this)) return NULL; cmd->flags &= ~(COMMAND_CHECKED | COMMAND_DISABLED); switch (cmd->id){ case CmdUndo: if (m_edit->isReadOnly()) return NULL; if (!m_edit->isUndoAvailable()) cmd->flags |= COMMAND_DISABLED; return e->param(); case CmdRedo: if (m_edit->isReadOnly()) return NULL; if (!m_edit->isRedoAvailable()) cmd->flags |= COMMAND_DISABLED; return e->param(); case CmdCut: if (m_edit->isReadOnly()) return NULL; case CmdCopy: if (!m_edit->hasSelectedText()) cmd->flags |= COMMAND_DISABLED; return e->param(); case CmdPaste: if (m_edit->isReadOnly()) return NULL; if (QApplication::clipboard()->text().isEmpty()) cmd->flags |= COMMAND_DISABLED; return e->param(); case CmdClear: if (m_edit->isReadOnly()) return NULL; case CmdSelectAll: if (m_edit->text().isEmpty()) cmd->flags |= COMMAND_DISABLED; return e->param(); } return NULL; } if (e->type() == EventCommandExec){ CommandDef *cmd = (CommandDef*)(e->param()); if ((cmd->id == CmdSmile) && (cmd->param == this)){ Event eBtn(EventCommandWidget, cmd); QToolButton *btnSmile = (QToolButton*)(eBtn.process()); if (btnSmile){ SmilePopup *popup = new SmilePopup(this); QSize s = popup->minimumSizeHint(); popup->resize(s); connect(popup, SIGNAL(insert(int)), this, SLOT(insertSmile(int))); QPoint p = CToolButton::popupPos(btnSmile, popup); popup->move(p); popup->show(); } return e->param(); }