unauthorizedAccept option
[dyskinesia.git] / src / eng_bindings.cpp
blobdee6da4807eb785c4bf6fd5ec2eda4bc42eb971e
1 /* coded by Ketmar // Vampire Avalon (psyc://ketmar.no-ip.org/~Ketmar)
2 * Understanding is not required. Only obedience.
4 * This program is free software. It comes without any warranty, to
5 * the extent permitted by applicable law. You can redistribute it
6 * and/or modify it under the terms of the Do What The Fuck You Want
7 * To Public License, Version 2, as published by Sam Hocevar. See
8 * http://sam.zoy.org/wtfpl/COPYING for more details.
10 * we are the Borg.
12 #include <QDebug>
14 #include <QInputDialog>
16 #include "eng_bindings.h"
18 #include "eng_commands.h"
19 #include "k8strutils.h"
20 #include "psyccontact.h"
23 ///////////////////////////////////////////////////////////////////////////////
24 EngineBindings::EngineBindings (ChatForm *aChat) : QObject(aChat), mChat(aChat) {
28 EngineBindings::~EngineBindings () {
32 bool EngineBindings::dispatchBinding (const QString &cmd, const QString &combo, const QString &ctext) {
33 if (cmd.isEmpty() || cmd.length() > 64) return false;
34 // this is Qt black magic, so don't touch it
35 char mtName[128], buf[256];
36 // get name
37 qDebug() << "binding:" << cmd << "cmb:" << combo;
38 QByteArray bt(cmd.toAscii());
39 sprintf(mtName, "%s", bt.constData());
40 for (int f = 0; mtName[f]; f++) if (mtName[f] == '-') mtName[f] = '_';
41 // find handler
42 sprintf(buf, "binding_%s(QString,QString,QString)", mtName);
43 if (metaObject()->indexOfSlot(buf) >= 0) {
44 sprintf(buf, "binding_%s", mtName);
45 QMetaObject::invokeMethod(this, buf, Qt::AutoConnection, Q_ARG(QString, cmd), Q_ARG(QString, combo), Q_ARG(QString, ctext));
46 return true;
48 return defaultBinding(cmd, combo, ctext);
52 ///////////////////////////////////////////////////////////////////////////////
53 bool EngineBindings::defaultBinding (const QString &cmd, const QString &combo, const QString &ctext) {
54 Q_UNUSED(cmd)
55 Q_UNUSED(combo)
56 Q_UNUSED(ctext)
57 QStringList cl(K8Str::parseCmdLine(cmd));
58 if (cl.length() < 1) return false;
59 if (cl[0] == "edit-insert-text") {
60 for (int f = 1; f < cl.length(); f++) mChat->edChat->insertPlainText(cl[f]);
61 mChat->edChat->ensureCursorVisible();
62 return true;
64 if (cl[0] == "do-command") {
65 QString s(cmd);
66 while (!s.isEmpty() && s[0].isSpace()) s.remove(0, 1);
67 if (s.startsWith("do-command")) s.remove(0, 10);
68 while (!s.isEmpty() && s[0].isSpace()) s.remove(0, 1);
69 if (!s.isEmpty()) s.prepend("/");
70 qDebug() << "cmd:" << s;
71 mChat->mEngCmds->doCommand(s);
72 return true;
74 if (cl[0] == "chat-with") {
75 if (cl.length() < 2) {
76 mChat->startChatWith("");
77 } else {
78 QStringList lst(mChat->findByUniPart(cl[1]));
79 if (lst.size() < 1) mChat->optPrint("can't start chat: nothing's found");
80 else if (lst.size() > 1) mChat->optPrint("<b>too many unis found!</b><br />\n"+lst.join("<br />\n"));
81 else mChat->startChatWith(lst[0]);
83 return true;
85 return false;
89 void EngineBindings::binding_window_minimize (const QString &cmd, const QString &combo, const QString &ctext) {
90 Q_UNUSED(cmd)
91 Q_UNUSED(combo)
92 Q_UNUSED(ctext)
93 mChat->showMinimized();
97 void EngineBindings::binding_window_hide (const QString &cmd, const QString &combo, const QString &ctext) {
98 Q_UNUSED(cmd)
99 Q_UNUSED(combo)
100 Q_UNUSED(ctext)
101 mChat->hide();
105 void EngineBindings::binding_activate_menu_status (const QString &cmd, const QString &combo, const QString &ctext) {
106 Q_UNUSED(cmd)
107 Q_UNUSED(combo)
108 Q_UNUSED(ctext)
109 //mChat->btStatus->defaultAction()->activate(QAction::Trigger);
110 mChat->btStatus->click();
114 void EngineBindings::binding_activate_menu_main (const QString &cmd, const QString &combo, const QString &ctext) {
115 Q_UNUSED(cmd)
116 Q_UNUSED(combo)
117 Q_UNUSED(ctext)
118 //mChat->btMainMenu->defaultAction()->activate(QAction::Trigger);
119 mChat->btMainMenu->click();
123 void EngineBindings::binding_edit_recode_text (const QString &cmd, const QString &combo, const QString &ctext) {
124 Q_UNUSED(cmd)
125 Q_UNUSED(combo)
126 Q_UNUSED(ctext)
127 mChat->translateMessage();
131 void EngineBindings::binding_edit_insert_new_line (const QString &cmd, const QString &combo, const QString &ctext) {
132 Q_UNUSED(cmd)
133 Q_UNUSED(combo)
134 Q_UNUSED(ctext)
135 mChat->edChat->insertPlainText("\n");
136 mChat->edChat->ensureCursorVisible();
140 void EngineBindings::binding_edit_insert_smile_oo (const QString &cmd, const QString &combo, const QString &ctext) {
141 Q_UNUSED(cmd)
142 Q_UNUSED(combo)
143 Q_UNUSED(ctext)
144 mChat->edChat->insertPlainText("O_O");
145 mChat->edChat->ensureCursorVisible();
149 void EngineBindings::binding_edit_insert_smile_oo_weird (const QString &cmd, const QString &combo, const QString &ctext) {
150 Q_UNUSED(cmd)
151 Q_UNUSED(combo)
152 Q_UNUSED(ctext)
153 QString s;
154 QChar ch(0x0ca0);
155 s = ch;
156 s += '_';
157 s += ch;
158 mChat->edChat->insertPlainText(s);
159 mChat->edChat->ensureCursorVisible();
163 void EngineBindings::binding_edit_insert_desu (const QString &cmd, const QString &combo, const QString &ctext) {
164 Q_UNUSED(cmd)
165 Q_UNUSED(combo)
166 Q_UNUSED(ctext)
167 QChar ch(0x3067);
168 mChat->edChat->insertPlainText(ch);
169 ch = 0x3059;
170 mChat->edChat->insertPlainText(ch);
171 mChat->edChat->ensureCursorVisible();
175 void EngineBindings::binding_edit_autocomplete (const QString &cmd, const QString &combo, const QString &ctext) {
176 Q_UNUSED(cmd)
177 Q_UNUSED(combo)
178 Q_UNUSED(ctext)
179 mChat->chatAutoComplete();
183 void EngineBindings::binding_chat_send (const QString &cmd, const QString &combo, const QString &ctext) {
184 Q_UNUSED(cmd)
185 Q_UNUSED(combo)
186 Q_UNUSED(ctext)
187 mChat->doSendMessage();
191 void EngineBindings::binding_editor_activate (const QString &cmd, const QString &combo, const QString &ctext) {
192 Q_UNUSED(cmd)
193 Q_UNUSED(combo)
194 Q_UNUSED(ctext)
195 mChat->mUnreadInChat = false;
196 if (mChat->mChatUser) mChat->mPopMan->removeById("", mChat->mChatUser->uni().toLower());
197 mChat->checkBlink();
198 mChat->edChat->setFocus();
202 void EngineBindings::binding_clist_activate (const QString &cmd, const QString &combo, const QString &ctext) {
203 Q_UNUSED(cmd)
204 Q_UNUSED(combo)
205 Q_UNUSED(ctext)
206 mChat->webCList->setFocus();
210 void EngineBindings::binding_chat_activate (const QString &cmd, const QString &combo, const QString &ctext) {
211 Q_UNUSED(cmd)
212 Q_UNUSED(combo)
213 Q_UNUSED(ctext)
214 mChat->webChat->setFocus();
218 void EngineBindings::binding_set_status_text (const QString &cmd, const QString &combo, const QString &ctext) {
219 Q_UNUSED(cmd)
220 Q_UNUSED(combo)
221 Q_UNUSED(ctext)
222 bool ok;
223 QString stt = QInputDialog::getText(mChat, tr("set new status text"), tr("status text:"),
224 QLineEdit::Normal, mChat->toStringOpt("/status/text"), &ok);
225 if (ok) {
226 mChat->setOpt("/status/text", stt);
227 mChat->mProto->setStatusText(stt);
228 if (!mChat->mProto->isLoggedIn()) return;
229 if (mChat->mMyStatus != mChat->mProto->status()) mChat->setStatus(mChat->mMyStatus);
230 else {
231 if (mChat->mMyStatus != PsycProto::Offline) {
232 //FIXME
233 mChat->mProto->setStatus(PsycProto::Offline, mChat->mProto->statusText(), mChat->mMyMood);
234 mChat->mProto->setStatus(PsycProto::Here, mChat->mProto->statusText(), mChat->mMyMood);
235 if (mChat->mMyStatus != PsycProto::Here) mChat->mProto->setStatus(mChat->mMyStatus, mChat->mProto->statusText(), mChat->mMyMood);
242 void EngineBindings::binding_chat_close (const QString &cmd, const QString &combo, const QString &ctext) {
243 Q_UNUSED(cmd)
244 Q_UNUSED(combo)
245 Q_UNUSED(ctext)
246 mChat->startChatWith("");
250 void EngineBindings::binding_chat_quote (const QString &cmd, const QString &combo, const QString &ctext) {
251 Q_UNUSED(cmd)
252 Q_UNUSED(combo)
253 Q_UNUSED(ctext)
254 mChat->runChatJS("selectedText()");
255 if (mChat->mSelText.isEmpty()) return;
256 int wwdt = mChat->toIntOptCU("/editor/wrappos", 64);
257 QString s(K8Str::wrap(mChat->mSelText, wwdt, mChat->toStringOptCU("/editor/wrappfx", ">")));
258 mChat->edChat->insertPlainText(s);
259 mChat->edChat->ensureCursorVisible();
260 if (mChat->toBoolOptCU("/editor/unselafterquote", false)) mChat->runChatJS("unselectText()");
264 void EngineBindings::binding_go_to_unread (const QString &cmd, const QString &combo, const QString &ctext) {
265 Q_UNUSED(cmd)
266 Q_UNUSED(combo)
267 Q_UNUSED(ctext)
268 mChat->switchToUnread();
272 void EngineBindings::binding_action_quit (const QString &cmd, const QString &combo, const QString &ctext) {
273 Q_UNUSED(cmd)
274 Q_UNUSED(combo)
275 Q_UNUSED(ctext)
276 if (mChat->action_quit->isEnabled()) mChat->action_quit->activate(QAction::Trigger);
280 void EngineBindings::binding_action_edit_account (const QString &cmd, const QString &combo, const QString &ctext) {
281 Q_UNUSED(cmd)
282 Q_UNUSED(combo)
283 Q_UNUSED(ctext)
284 if (mChat->action_accedit->isEnabled()) mChat->action_accedit->activate(QAction::Trigger);
288 void EngineBindings::binding_action_join_place (const QString &cmd, const QString &combo, const QString &ctext) {
289 Q_UNUSED(cmd)
290 Q_UNUSED(combo)
291 Q_UNUSED(ctext)
292 if (mChat->action_join->isEnabled()) mChat->action_join->activate(QAction::Trigger);
296 void EngineBindings::binding_action_send_raw_packet (const QString &cmd, const QString &combo, const QString &ctext) {
297 Q_UNUSED(cmd)
298 Q_UNUSED(combo)
299 Q_UNUSED(ctext)
300 if (mChat->action_sendpacket->isEnabled()) mChat->action_sendpacket->activate(QAction::Trigger);
304 void EngineBindings::binding_action_show_packet_console (const QString &cmd, const QString &combo, const QString &ctext) {
305 Q_UNUSED(cmd)
306 Q_UNUSED(combo)
307 Q_UNUSED(ctext)
308 if (mChat->action_showconsole->isEnabled()) mChat->action_showconsole->activate(QAction::Trigger);
312 /* rewrite! make one function to set status by number/name! */
313 void EngineBindings::binding_action_status_offline (const QString &cmd, const QString &combo, const QString &ctext) {
314 Q_UNUSED(cmd)
315 Q_UNUSED(combo)
316 Q_UNUSED(ctext)
317 if (mChat->action_stoffline->isEnabled()) mChat->action_stoffline->activate(QAction::Trigger);
321 void EngineBindings::binding_action_status_vacation (const QString &cmd, const QString &combo, const QString &ctext) {
322 Q_UNUSED(cmd)
323 Q_UNUSED(combo)
324 Q_UNUSED(ctext)
325 if (mChat->action_stvacation->isEnabled()) mChat->action_stvacation->activate(QAction::Trigger);
329 void EngineBindings::binding_action_status_away (const QString &cmd, const QString &combo, const QString &ctext) {
330 Q_UNUSED(cmd)
331 Q_UNUSED(combo)
332 Q_UNUSED(ctext)
333 if (mChat->action_staway->isEnabled()) mChat->action_staway->activate(QAction::Trigger);
337 void EngineBindings::binding_action_status_dnd (const QString &cmd, const QString &combo, const QString &ctext) {
338 Q_UNUSED(cmd)
339 Q_UNUSED(combo)
340 Q_UNUSED(ctext)
341 if (mChat->action_stdnd->isEnabled()) mChat->action_stdnd->activate(QAction::Trigger);
345 void EngineBindings::binding_action_status_nearby (const QString &cmd, const QString &combo, const QString &ctext) {
346 Q_UNUSED(cmd)
347 Q_UNUSED(combo)
348 Q_UNUSED(ctext)
349 if (mChat->action_stnear->isEnabled()) mChat->action_stnear->activate(QAction::Trigger);
353 void EngineBindings::binding_action_status_busy (const QString &cmd, const QString &combo, const QString &ctext) {
354 Q_UNUSED(cmd)
355 Q_UNUSED(combo)
356 Q_UNUSED(ctext)
357 if (mChat->action_stbusy->isEnabled()) mChat->action_stbusy->activate(QAction::Trigger);
361 void EngineBindings::binding_action_status_here (const QString &cmd, const QString &combo, const QString &ctext) {
362 Q_UNUSED(cmd)
363 Q_UNUSED(combo)
364 Q_UNUSED(ctext)
365 if (mChat->action_sthere->isEnabled()) mChat->action_sthere->activate(QAction::Trigger);
369 void EngineBindings::binding_action_status_ffc (const QString &cmd, const QString &combo, const QString &ctext) {
370 Q_UNUSED(cmd)
371 Q_UNUSED(combo)
372 Q_UNUSED(ctext)
373 if (mChat->action_stffc->isEnabled()) mChat->action_stffc->activate(QAction::Trigger);
377 void EngineBindings::binding_action_status_realtime (const QString &cmd, const QString &combo, const QString &ctext) {
378 Q_UNUSED(cmd)
379 Q_UNUSED(combo)
380 Q_UNUSED(ctext)
381 if (mChat->action_strtime->isEnabled()) mChat->action_strtime->activate(QAction::Trigger);
385 void EngineBindings::binding_edit_move_home (const QString &cmd, const QString &combo, const QString &ctext) {
386 Q_UNUSED(cmd)
387 Q_UNUSED(combo)
388 Q_UNUSED(ctext)
389 mChat->edChat->moveCursor(QTextCursor::StartOfLine, QTextCursor::MoveAnchor);
393 void EngineBindings::binding_edit_move_end (const QString &cmd, const QString &combo, const QString &ctext) {
394 Q_UNUSED(cmd)
395 Q_UNUSED(combo)
396 Q_UNUSED(ctext)
397 mChat->edChat->moveCursor(QTextCursor::EndOfLine, QTextCursor::MoveAnchor);
401 void EngineBindings::binding_edit_move_top (const QString &cmd, const QString &combo, const QString &ctext) {
402 Q_UNUSED(cmd)
403 Q_UNUSED(combo)
404 Q_UNUSED(ctext)
405 mChat->edChat->moveCursor(QTextCursor::Start, QTextCursor::MoveAnchor);
409 void EngineBindings::binding_edit_move_bottom (const QString &cmd, const QString &combo, const QString &ctext) {
410 Q_UNUSED(cmd)
411 Q_UNUSED(combo)
412 Q_UNUSED(ctext)
413 mChat->edChat->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor);
417 void EngineBindings::binding_edit_move_left (const QString &cmd, const QString &combo, const QString &ctext) {
418 Q_UNUSED(cmd)
419 Q_UNUSED(combo)
420 Q_UNUSED(ctext)
421 mChat->edChat->moveCursor(QTextCursor::Left, QTextCursor::MoveAnchor);
425 void EngineBindings::binding_edit_move_right (const QString &cmd, const QString &combo, const QString &ctext) {
426 Q_UNUSED(cmd)
427 Q_UNUSED(combo)
428 Q_UNUSED(ctext)
429 mChat->edChat->moveCursor(QTextCursor::Right, QTextCursor::MoveAnchor);
433 void EngineBindings::binding_edit_move_up (const QString &cmd, const QString &combo, const QString &ctext) {
434 Q_UNUSED(cmd)
435 Q_UNUSED(combo)
436 Q_UNUSED(ctext)
437 mChat->edChat->moveCursor(QTextCursor::Up, QTextCursor::MoveAnchor);
441 void EngineBindings::binding_edit_move_down (const QString &cmd, const QString &combo, const QString &ctext) {
442 Q_UNUSED(cmd)
443 Q_UNUSED(combo)
444 Q_UNUSED(ctext)
445 mChat->edChat->moveCursor(QTextCursor::Down, QTextCursor::MoveAnchor);
449 void EngineBindings::binding_edit_move_word_left (const QString &cmd, const QString &combo, const QString &ctext) {
450 Q_UNUSED(cmd)
451 Q_UNUSED(combo)
452 Q_UNUSED(ctext)
453 mChat->edChat->moveCursor(QTextCursor::WordLeft, QTextCursor::MoveAnchor);
457 void EngineBindings::binding_edit_move_word_right (const QString &cmd, const QString &combo, const QString &ctext) {
458 Q_UNUSED(cmd)
459 Q_UNUSED(combo)
460 Q_UNUSED(ctext)
461 mChat->edChat->moveCursor(QTextCursor::WordRight, QTextCursor::MoveAnchor);
465 void EngineBindings::binding_edit_clear (const QString &cmd, const QString &combo, const QString &ctext) {
466 Q_UNUSED(cmd)
467 Q_UNUSED(combo)
468 Q_UNUSED(ctext)
469 mChat->edChat->clear();
470 mChat->edChat->ensureCursorVisible();
474 void EngineBindings::binding_edit_select_all (const QString &cmd, const QString &combo, const QString &ctext) {
475 Q_UNUSED(cmd)
476 Q_UNUSED(combo)
477 Q_UNUSED(ctext)
478 mChat->edChat->selectAll();
482 void EngineBindings::binding_edit_cut (const QString &cmd, const QString &combo, const QString &ctext) {
483 Q_UNUSED(cmd)
484 Q_UNUSED(combo)
485 Q_UNUSED(ctext)
486 mChat->edChat->cut();
490 void EngineBindings::binding_edit_copy (const QString &cmd, const QString &combo, const QString &ctext) {
491 Q_UNUSED(cmd)
492 Q_UNUSED(combo)
493 Q_UNUSED(ctext)
494 mChat->edChat->copy();
498 void EngineBindings::binding_edit_paste (const QString &cmd, const QString &combo, const QString &ctext) {
499 Q_UNUSED(cmd)
500 Q_UNUSED(combo)
501 Q_UNUSED(ctext)
502 mChat->edChat->paste();
506 void EngineBindings::binding_edit_undo (const QString &cmd, const QString &combo, const QString &ctext) {
507 Q_UNUSED(cmd)
508 Q_UNUSED(combo)
509 Q_UNUSED(ctext)
510 mChat->edChat->undo();
514 void EngineBindings::binding_edit_redo (const QString &cmd, const QString &combo, const QString &ctext) {
515 Q_UNUSED(cmd)
516 Q_UNUSED(combo)
517 Q_UNUSED(ctext)
518 mChat->edChat->redo();
523 void EngineBindings::onShortcutCopy () {
524 //qDebug() << "copy shortcut pressed!";
525 mChat->runChatJS("selectedText()");
526 if (mChat->mSelText.isEmpty()) return;
527 QClipboard *cb = QApplication::clipboard();
528 cb->setText(mChat->mSelText);
529 if (mChat->toBoolOptCU("/editor/unselaftercopy", false)) mChat->runChatJS("unselectText()");
533 void EngineBindings::onShortcutUnsel () {
534 //qDebug() << "unsel shortcut pressed!";
535 mChat->runChatJS("unselectText()");
538 void EngineBindings::onShortcutmChat->checkBlink () {
539 //qDebug() << "close shortcut pressed!";
540 mChat->mUnreadInChat = false;
541 if (mChat->mChatUser) mChat->mPopMan->removeById("", mChat->mChatUser->uni().toLower());
542 mChat->checkBlink();