void ChatControl::processCommand(ChatCommandContext& context) { ChatCommandMap::iterator result = m_commands.find(Text::fromT(context.command)); if (result != m_commands.end()) { (this->*(result->second))(&context); } else { if (!m_listener->chatExecuteCommand(&context)) { addSystemMessage(TSTRING(UNKNOWN_COMMAND) + context.command); } } }
void QtChatWindow::dropEvent(QDropEvent *event) { if (fileTransferEnabled_ == Yes && event->mimeData()->hasUrls()) { if (event->mimeData()->urls().size() == 1) { onSendFileRequest(Q2PSTRING(event->mimeData()->urls().at(0).toLocalFile())); } else { std::string messageText(Q2PSTRING(tr("Sending of multiple files at once isn't supported at this time."))); ChatMessage message; message.append(boost::make_shared<ChatTextMessagePart>(messageText)); addSystemMessage(message, DefaultDirection); } } else if (event->mimeData()->hasFormat("application/vnd.swift.contact-jid-list")) { QByteArray dataBytes = event->mimeData()->data("application/vnd.swift.contact-jid-list"); QDataStream dataStream(&dataBytes, QIODevice::ReadOnly); std::vector<JID> invites; while (!dataStream.atEnd()) { QString jidString; dataStream >> jidString; invites.push_back(Q2PSTRING(jidString)); } onInviteToChat(invites); }
void ChatControl::findText(tstring const& needle) throw() { int max = ctrlClient.GetWindowTextLength(); // a new search? reset cursor to bottom if (needle != currentNeedle || currentNeedlePos == -1) { currentNeedle = needle; currentNeedlePos = max; } // set current selection FINDTEXT ft; ft.chrg.cpMin = currentNeedlePos; ft.chrg.cpMax = 0; // поиск идет в обратную сторону, поэтому параметры передаем в обратном порядке. ft.lpstrText = needle.c_str(); // empty search? stop if (needle.empty()) { return; } // find upwards currentNeedlePos = (int) ctrlClient.SendMessage(EM_FINDTEXT, 0, (LPARAM)&ft); // not found? try again on full range if (currentNeedlePos == -1 && ft.chrg.cpMin != max) { // no need to search full range twice currentNeedlePos = max; ft.chrg.cpMin = currentNeedlePos; currentNeedlePos = (int)ctrlClient.SendMessage(EM_FINDTEXT, 0, (LPARAM)&ft); } // found? set selection if (currentNeedlePos != -1) { ft.chrg.cpMin = currentNeedlePos; ft.chrg.cpMax = currentNeedlePos + needle.length(); ctrlClient.SetFocus(); ctrlClient.SendMessage(EM_EXSETSEL, 0, (LPARAM)&ft); } else { addSystemMessage(CTSTRING(STRING_NOT_FOUND) + needle); currentNeedle = Util::emptyStringT; } }
void ChatControl::commandToggleTimestamps(ChatCommandContext*) { timeStamps = !timeStamps; addSystemMessage(timeStamps ? TSTRING(TIMESTAMPS_ENABLED) : TSTRING(TIMESTAMPS_DISABLED)); }