コード例 #1
0
ファイル: ChatControl.cpp プロジェクト: inetra/peers1
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);
    }
  }
}
コード例 #2
0
ファイル: QtChatWindow.cpp プロジェクト: jyhong836/swift
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);
	}
コード例 #3
0
ファイル: ChatControl.cpp プロジェクト: inetra/peers1
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;
  }
}
コード例 #4
0
ファイル: ChatControl.cpp プロジェクト: inetra/peers1
void ChatControl::commandToggleTimestamps(ChatCommandContext*) {
  timeStamps = !timeStamps;
  addSystemMessage(timeStamps ? TSTRING(TIMESTAMPS_ENABLED) : TSTRING(TIMESTAMPS_DISABLED));
}