ctkEventDispatcherLocal.cpp 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. /*
  2. * ctkEventDispatcherLocal.cpp
  3. * ctkEventBus
  4. *
  5. * Created by Paolo Quadrani on 27/03/09.
  6. * Copyright 2009 B3C. All rights reserved.
  7. *namespace ctkEventBus
  8. * See Licence at: http://tiny.cc/QXJ4D
  9. *
  10. */
  11. #include "ctkEventDispatcherLocal.h"
  12. #include "ctkBusEvent.h"
  13. using namespace ctkEventBus;
  14. ctkEventDispatcherLocal::ctkEventDispatcherLocal() : ctkEventDispatcher() {
  15. this->initializeGlobalEvents();
  16. }
  17. void ctkEventDispatcherLocal::initializeGlobalEvents() {
  18. ctkBusEvent *properties = new ctkBusEvent("ctk/local/eventBus/globalUpdate",ctkEventTypeLocal,ctkSignatureTypeSignal, this, "notifyDefaultEvent()");
  19. /*QString topic = "ctk/local/eventBus/globalUpdate";
  20. (*properties)[TOPIC] = topic;
  21. (*properties)[TYPE] = ctkEventTypeLocal;
  22. (*properties)[SIGTYPE] = mafSignatureTypeSignal;
  23. QVariant var;
  24. var.setValue((QObject*)this);
  25. (*properties)[OBJECT] = var;
  26. (*properties)[SIGNATURE] = "notifyDefaultEvent()";*/
  27. registerSignal(*properties);
  28. ctkEventDispatcher::initializeGlobalEvents();
  29. }
  30. void ctkEventDispatcherLocal::notifyEvent(ctkBusEvent &event_dictionary, ctkEventArgumentsList *argList, ctkGenericReturnArgument *returnArg) const {
  31. QString topic = event_dictionary[TOPIC].toString();
  32. ctkEventItemListType items = signalItemProperty(topic);
  33. ctkBusEvent *itemEventProp;
  34. foreach(itemEventProp, items) {
  35. if((*itemEventProp)[SIGNATURE].toString().length() != 0) {
  36. QString signal_to_emit = (*itemEventProp)[SIGNATURE].toString().split("(")[0];
  37. QObject *obj = (*itemEventProp)[OBJECT].value<QObject *>();
  38. if(argList != NULL) {
  39. if (returnArg == NULL || returnArg->data() == NULL) { //don't use return value
  40. switch (argList->count()) {
  41. case 0:
  42. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1());
  43. break;
  44. case 1:
  45. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), \
  46. argList->at(0));
  47. break;
  48. case 2:
  49. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), \
  50. argList->at(0), argList->at(1));
  51. break;
  52. case 3:
  53. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), \
  54. argList->at(0), argList->at(1), argList->at(2));
  55. break;
  56. case 4:
  57. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), \
  58. argList->at(0), argList->at(1), argList->at(2), argList->at(3));
  59. break;
  60. case 5:
  61. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), \
  62. argList->at(0), argList->at(1), argList->at(2), argList->at(3), argList->at(4));
  63. break;
  64. case 6:
  65. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), \
  66. argList->at(0), argList->at(1), argList->at(2), argList->at(3), argList->at(4), argList->at(5));
  67. break;
  68. case 7:
  69. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), \
  70. argList->at(0), argList->at(1), argList->at(2), argList->at(3), argList->at(4), \
  71. argList->at(5), argList->at(6));
  72. break;
  73. case 8:
  74. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), \
  75. argList->at(0), argList->at(1), argList->at(2), argList->at(3), argList->at(4), \
  76. argList->at(5), argList->at(6), argList->at(7));
  77. break;
  78. case 9:
  79. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), \
  80. argList->at(0), argList->at(1), argList->at(2), argList->at(3), argList->at(4), \
  81. argList->at(5), argList->at(6), argList->at(7), argList->at(8));
  82. break;
  83. case 10:
  84. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), \
  85. argList->at(0), argList->at(1), argList->at(2), argList->at(3), argList->at(4), \
  86. argList->at(5), argList->at(6), argList->at(7), argList->at(8), argList->at(9));
  87. break;
  88. default:
  89. qWarning("%s", tr("Number of arguments not supported. Max 10 arguments").toLatin1().data());
  90. } //switch
  91. } else { //use return value
  92. switch (argList->count()) {
  93. case 0:
  94. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), *returnArg);
  95. break;
  96. case 1:
  97. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), *returnArg,\
  98. argList->at(0));
  99. break;
  100. case 2:
  101. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), *returnArg, \
  102. argList->at(0), argList->at(1));
  103. break;
  104. case 3:
  105. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), *returnArg, \
  106. argList->at(0), argList->at(1), argList->at(2));
  107. break;
  108. case 4:
  109. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), *returnArg, \
  110. argList->at(0), argList->at(1), argList->at(2), argList->at(3));
  111. break;
  112. case 5:
  113. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), *returnArg, \
  114. argList->at(0), argList->at(1), argList->at(2), argList->at(3), argList->at(4));
  115. break;
  116. case 6:
  117. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), *returnArg, \
  118. argList->at(0), argList->at(1), argList->at(2), argList->at(3), argList->at(4), argList->at(5));
  119. break;
  120. case 7:
  121. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), *returnArg, \
  122. argList->at(0), argList->at(1), argList->at(2), argList->at(3), argList->at(4), \
  123. argList->at(5), argList->at(6));
  124. break;
  125. case 8:
  126. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), *returnArg, \
  127. argList->at(0), argList->at(1), argList->at(2), argList->at(3), argList->at(4), \
  128. argList->at(5), argList->at(6), argList->at(7));
  129. break;
  130. case 9:
  131. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), *returnArg, \
  132. argList->at(0), argList->at(1), argList->at(2), argList->at(3), argList->at(4), \
  133. argList->at(5), argList->at(6), argList->at(7), argList->at(8));
  134. break;
  135. case 10:
  136. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), *returnArg, \
  137. argList->at(0), argList->at(1), argList->at(2), argList->at(3), argList->at(4), \
  138. argList->at(5), argList->at(6), argList->at(7), argList->at(8), argList->at(9));
  139. break;
  140. default:
  141. qWarning("%s", tr("Number of arguments not supported. Max 10 arguments").toLatin1().data());
  142. } //switch
  143. }
  144. } else {
  145. if (returnArg == NULL || returnArg->data() == NULL) { //don't use return value
  146. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1());
  147. } else {
  148. this->metaObject()->invokeMethod(obj, signal_to_emit.toLatin1(), *returnArg);
  149. }
  150. }
  151. }
  152. }
  153. }