MsgSMS::MsgSMS(CToolCustom *parent, Message *msg) : QComboBox(parent) { for (QWidget *p = parent->parentWidget(); p; p = p->parentWidget()){ if (p->inherits("MsgEdit")){ m_edit = static_cast<MsgEdit*>(p); break; } } m_bExpand = false; QString t = msg->getPlainText(); if (!t.isEmpty()) m_edit->m_edit->setText(t); m_panel = NULL; setEditable(true); setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); parent->addWidget(this); btnTranslit = new QToolButton(parent); btnTranslit->setIconSet(*Icon("translit")); btnTranslit->setTextLabel(i18n("Send in translit")); btnTranslit->setToggleButton(true); parent->addWidget(btnTranslit); btnTranslit->show(); parent->setText(i18n("Phone:")); m_edit->m_edit->setTextFormat(PlainText); Command cmd; cmd->id = CmdSend; cmd->param = m_edit; Event e(EventCommandWidget, cmd); btnSend = (QToolButton*)(e.process()); connect(lineEdit(), SIGNAL(textChanged(const QString&)), this, SLOT(textChanged(const QString&))); connect(m_edit->m_edit, SIGNAL(textChanged()), this, SLOT(textChanged())); connect(btnTranslit, SIGNAL(toggled(bool)), this, SLOT(translitToggled(bool))); Contact *contact = getContacts()->contact(msg->contact()); if (contact == NULL) return; SMSUserData *data = (SMSUserData*)(contact->getUserData(CorePlugin::m_plugin->sms_data_id)); btnTranslit->setOn(data->SMSTranslit); QString phones = contact->getPhones(); while (phones.length()){ QString phoneItem = getToken(phones, ';', false); phoneItem = getToken(phoneItem, '/', false); QString phone = getToken(phoneItem, ','); getToken(phoneItem, ','); if (phoneItem.toUInt() == CELLULAR) insertItem(phone); } t = static_cast<SMSMessage*>(msg)->getPhone(); if (!t.isEmpty()) lineEdit()->setText(t); textChanged(); if (contact->getTemporary()){ m_panel = new SMSPanel(m_edit->m_frame); m_edit->m_layout->insertWidget(0, m_panel); connect(m_panel, SIGNAL(destroyed()), this, SLOT(panelDestroyed())); m_panel->show(); } if (m_edit->m_edit->text().isEmpty()){ TemplateExpand t; if (data->SMSSignatureBefore){ t.tmpl = QString::fromUtf8(data->SMSSignatureBefore); t.contact = contact; t.receiver = this; t.param = NULL; Event eTmpl(EventTemplateExpand, &t); eTmpl.process(); }else{ m_bExpand = true; if (data->SMSSignatureAfter){ t.tmpl = QString::fromUtf8(data->SMSSignatureAfter); t.contact = contact; t.receiver = this; t.param = NULL; Event eTmpl(EventTemplateExpand, &t); eTmpl.process(); } } } show(); }
void *ActionPlugin::processEvent(Event *e) { if (e->type() == EventCheckState){ CommandDef *cmd = (CommandDef*)(e->param()); if ((cmd->id == CmdAction) && (cmd->menu_id == MenuContact)){ Contact *contact = getContacts()->contact((unsigned long)(cmd->param)); if (contact == NULL) return NULL; ActionUserData *data = (ActionUserData*)(contact->getUserData(action_data_id)); if ((data == NULL) || (data->NMenu.value == 0)) return NULL; CommandDef *cmds = new CommandDef[data->NMenu.value + 1]; memset(cmds, 0, sizeof(CommandDef) * (data->NMenu.value + 1)); unsigned n = 0; for (unsigned i = 0; i < data->NMenu.value; i++){ QString str = get_str(data->Menu, i + 1); QString item = getToken(str, ';'); int pos = item.find("&IP;"); if (pos >= 0){ Event e(EventGetContactIP, contact); if (e.process() == NULL) continue; } pos = item.find("&Mail;"); if (pos >= 0){ if (contact->getEMails().isEmpty()) continue; } pos = item.find("&Phone;"); if (pos >= 0){ if (contact->getPhones().isEmpty()) continue; } cmds[n].id = CmdAction + i; cmds[n].text = "_"; cmds[n].text_wrk = strdup(item.utf8()); n++; } if (n == 0){ delete[] cmds; return NULL; } cmd->param = cmds; cmd->flags |= COMMAND_RECURSIVE; return e->param(); } return NULL; } if (e->type() == EventCommandExec){ CommandDef *cmd = (CommandDef*)(e->param()); if ((cmd->menu_id == MenuContact) && (cmd->id >= CmdAction)){ unsigned n = cmd->id - CmdAction; Contact *contact = getContacts()->contact((unsigned long)(cmd->param)); if (contact == NULL) return NULL; ActionUserData *data = (ActionUserData*)(contact->getUserData(action_data_id)); if ((data == NULL) || (n >= data->NMenu.value)) return NULL; QString str = get_str(data->Menu, n + 1); getToken(str, ';'); TemplateExpand t; t.tmpl = str; t.contact = contact; t.receiver = this; t.param = NULL; Event eTmpl(EventTemplateExpand, &t); eTmpl.process(); return e->param(); } return NULL; } if (e->type() == EventContactOnline){ Contact *contact = (Contact*)(e->param()); if (contact == NULL) return NULL; ActionUserData *data = (ActionUserData*)(contact->getUserData(action_data_id)); if ((data == NULL) || (data->OnLine.ptr == NULL)) return NULL; TemplateExpand t; t.tmpl = QString::fromUtf8(data->OnLine.ptr); t.contact = contact; t.receiver = this; t.param = NULL; Event eTmpl(EventTemplateExpand, &t); eTmpl.process(); return e->param(); } if (e->type() == EventMessageReceived){ Message *msg = (Message*)(e->param()); Contact *contact = getContacts()->contact(msg->contact()); if (contact == NULL) return NULL; ActionUserData *data = (ActionUserData*)(contact->getUserData(action_data_id)); if (data == NULL) return NULL; if (msg->type() == MessageStatus){ if (data->Status.ptr == NULL) return NULL; TemplateExpand t; t.tmpl = QString::fromUtf8(data->Status.ptr); t.contact = contact; t.receiver = this; t.param = NULL; Event eTmpl(EventTemplateExpand, &t); eTmpl.process(); return NULL; } const char *cmd = get_str(data->Message, msg->baseType()); if ((cmd == NULL) || (*cmd == 0)) return NULL; TemplateExpand t; t.tmpl = QString::fromUtf8(cmd); t.contact = contact; t.receiver = this; t.param = msg; Event eTmpl(EventTemplateExpand, &t); eTmpl.process(); return e->param(); } if (e->type() == EventTemplateExpanded){ TemplateExpand *t = (TemplateExpand*)(e->param()); Message *msg = (Message*)(t->param); if (msg){ MsgExec *exec = new MsgExec; exec->msg = msg; m_exec.push_back(exec); connect(exec, SIGNAL(ready(Exec*,int,const char*)), this, SLOT(msg_ready(Exec*,int,const char*))); QString text = msg->presentation(); exec->execute(t->tmpl.local8Bit(), unquoteText(text).local8Bit()); }else{
void *MsgSMS::processEvent(Event *e) { if (e->type() == EventTemplateExpanded){ TemplateExpand *t = (TemplateExpand*)(e->param()); if (m_bExpand){ m_edit->m_edit->append(t->tmpl); }else{ m_edit->m_edit->setText(t->tmpl); m_edit->m_edit->moveCursor(QTextEdit::MoveEnd, false); m_bExpand = true; Contact *contact = getContacts()->contact(m_id); if (contact){ SMSUserData *data = (SMSUserData*)(contact->getUserData(CorePlugin::m_plugin->sms_data_id)); if (data->SMSSignatureAfter){ t->tmpl = QString::fromUtf8(data->SMSSignatureAfter); Event eTmpl(EventTemplateExpand, t); eTmpl.process(); } } } return e->param(); } if (e->type() == EventCommandExec){ CommandDef *cmd = (CommandDef*)(e->param()); if ((cmd->id == CmdSend) && (cmd->param == m_edit)){ unsigned flags = 0; if (btnTranslit->isOn()) flags |= MESSAGE_TRANSLIT; QString msgText = m_edit->m_edit->text(); QString phone = lineEdit()->text(); if (!msgText.isEmpty() && !phone.isEmpty()){ SMSMessage *msg = new SMSMessage; msg->setText(msgText); msg->setFlags(flags); msg->setPhone(phone); msg->setContact(m_edit->m_userWnd->id()); if (m_edit->sendMessage(msg)){ Contact *contact = getContacts()->contact(m_edit->m_userWnd->id()); if (contact){ if (contact->getTemporary()){ contact->setName(phone); if (m_panel && m_panel->chkSave->isChecked()){ contact->setTemporary(0); delete m_panel; } Event e(EventContactChanged, contact); e.process(); } SMSUserData *data = (SMSUserData*)(contact->userData.getUserData(CorePlugin::m_plugin->sms_data_id, true)); data->SMSTranslit = btnTranslit->isOn(); QString newPhones; QString phones = contact->getPhones(); QString type = "Private Cellular"; QString src = "-"; while (phones.length()){ QString phoneItem = getToken(phones, ';', false); QString item = phoneItem; QString phoneStr = getToken(phoneItem, '/', false); QString phone = getToken(phoneStr, ','); QString phoneType = getToken(phoneStr, ','); if ((phone != msg->getPhone()) || (phoneStr.toUInt() != CELLULAR)){ if (!newPhones.isEmpty()) newPhones += ";"; newPhones += item; continue; } type = phoneType; src = phoneItem; } phone += ","; phone += type; phone += ","; phone += QString::number(CELLULAR); phone += "/"; phone += src; if (!newPhones.isEmpty()) phone += ";"; newPhones = phone + newPhones; if (contact->setPhones(newPhones)){ Event e(EventContactChanged, contact); e.process(); } } } } return e->param(); } } return NULL; }