UIEditBoxLoader.cpp 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. #include "UIEditBoxLoader.h"
  2. #include "REDSelectorResolver.h"
  3. using namespace std;
  4. using namespace cocos2d;
  5. using namespace cocos2d::ui;
  6. namespace redream {
  7. #define PROPERTY_PLACEHOLDER "placeHolder"
  8. #define PROPERTY_TEXT "text"
  9. #define PROPERTY_INPUTMODE "inputMode"
  10. #define PROPERTY_FONTNAME "fontName"
  11. #define PROPERTY_PASSWORD "password"
  12. #define PROPERTY_BACKGROUND "background"
  13. #define PROPERTY_FONTCOLOR "fontColor"
  14. #define PROPERTY_FONTSIZE "fontSize"
  15. #define PROPERTY_INSERTLEFT "insetLeft"
  16. #define PROPERTY_INSERTTOP "insetTop"
  17. #define PROPERTY_INSERTRIGHT "insetRight"
  18. #define PROPERTY_INSERTBOTTOM "insetBottom"
  19. #define PROPERTY_MAXLENGTH "maxLength"
  20. #define PROPERTY_TEXTCHANGEDEVENT "textChangedEvent"
  21. #define PROPERTY_RETURNEVENT "returnEvent"
  22. void EditBoxLoader::onHandlePropTypeString(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, const char * pString, REDReader * ccbReader) {
  23. if (strcmp(pPropertyName, PROPERTY_PLACEHOLDER) == 0) {
  24. ((REDEditBox *)pNode)->setPlaceHolder(pString);
  25. }
  26. else if (strcmp(pPropertyName, PROPERTY_TEXT) == 0) {
  27. ((REDEditBox *)pNode)->setText(pString);
  28. }
  29. else {
  30. WidgetLoader::onHandlePropTypeString(pNode, pParent, pPropertyName, pString, ccbReader);
  31. }
  32. }
  33. void EditBoxLoader::onHandlePropTypeIntegerLabeled(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, int pIntegerLabeled, REDReader * ccbReader) {
  34. if (strcmp(pPropertyName, PROPERTY_INPUTMODE) == 0) {
  35. ((REDEditBox *)pNode)->setInputMode((EditBox::InputMode)pIntegerLabeled);
  36. }
  37. else {
  38. WidgetLoader::onHandlePropTypeIntegerLabeled(pNode, pParent, pPropertyName, pIntegerLabeled, ccbReader);
  39. }
  40. }
  41. void EditBoxLoader::onHandlePropTypeFontTTF(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, const char * pFontTTF, REDReader * ccbReader) {
  42. if (strcmp(pPropertyName, PROPERTY_FONTNAME) == 0) {
  43. ((REDEditBox *)pNode)->setFontName(pFontTTF);
  44. }
  45. else {
  46. WidgetLoader::onHandlePropTypeFontTTF(pNode, pParent, pPropertyName, pFontTTF, ccbReader);
  47. }
  48. }
  49. void EditBoxLoader::onHandlePropTypeCheck(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, bool pCheck, REDReader * ccbReader) {
  50. if (strcmp(pPropertyName, PROPERTY_PASSWORD) == 0) {
  51. if (pCheck) {
  52. ((REDEditBox *)pNode)->setInputFlag(EditBox::InputFlag::PASSWORD);
  53. }
  54. }
  55. else {
  56. WidgetLoader::onHandlePropTypeCheck(pNode, pParent, pPropertyName, pCheck, ccbReader);
  57. }
  58. }
  59. void EditBoxLoader::onHandlePropTypeFrameSet(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, std::vector<FramePath> pFrameSet, REDReader * ccbReader) {
  60. if (strcmp(pPropertyName, PROPERTY_BACKGROUND) == 0) {
  61. ((REDEditBox *)pNode)->loadBackgroundTexture(pFrameSet.at(0).path, pFrameSet.at(0).texType);
  62. }
  63. else {
  64. WidgetLoader::onHandlePropTypeFrameSet(pNode, pParent, pPropertyName, pFrameSet, ccbReader);
  65. }
  66. }
  67. void EditBoxLoader::onHandlePropTypeColor4(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, cocos2d::Color4B pColor4, REDReader * ccbReader) {
  68. if (strcmp(pPropertyName, PROPERTY_FONTCOLOR) == 0) {
  69. ((REDEditBox *)pNode)->setFontColor(pColor4);
  70. }
  71. else {
  72. WidgetLoader::onHandlePropTypeColor4(pNode, pParent, pPropertyName, pColor4, ccbReader);
  73. }
  74. }
  75. void EditBoxLoader::onHandlePropTypeFloatScale(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, float pFloatScale, REDReader * ccbReader) {
  76. if (strcmp(pPropertyName, PROPERTY_FONTSIZE) == 0) {
  77. ((REDEditBox *)pNode)->setFontSize(int(pFloatScale));
  78. }
  79. else {
  80. WidgetLoader::onHandlePropTypeFloatScale(pNode, pParent, pPropertyName, pFloatScale, ccbReader);
  81. }
  82. }
  83. void EditBoxLoader::onHandlePropTypeFloat(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, float pFloat, REDReader * ccbReader) {
  84. if (strcmp(pPropertyName, PROPERTY_INSERTLEFT) == 0) {
  85. ((REDEditBox *)pNode)->setInsetLeft(pFloat);
  86. }
  87. else if (strcmp(pPropertyName, PROPERTY_INSERTRIGHT) == 0) {
  88. ((REDEditBox *)pNode)->setInsetRight(pFloat);
  89. }
  90. else if (strcmp(pPropertyName, PROPERTY_INSERTTOP) == 0) {
  91. ((REDEditBox *)pNode)->setInsetTop(pFloat);
  92. }
  93. else if (strcmp(pPropertyName, PROPERTY_INSERTBOTTOM) == 0) {
  94. ((REDEditBox *)pNode)->setInsetBottom(pFloat);
  95. }
  96. else {
  97. WidgetLoader::onHandlePropTypeFloat(pNode, pParent, pPropertyName, pFloat, ccbReader);
  98. }
  99. }
  100. void EditBoxLoader::onHandlePropTypeInteger(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, int pInteger, REDReader * ccbReader) {
  101. if (strcmp(pPropertyName, PROPERTY_MAXLENGTH) == 0) {
  102. ((REDEditBox *)pNode)->setMaxLength(pInteger);
  103. }
  104. else {
  105. WidgetLoader::onHandlePropTypeInteger(pNode, pParent, pPropertyName, pInteger, ccbReader);
  106. }
  107. }
  108. void EditBoxLoader::onHandlePropTypeCallbacks(cocos2d::Node * pNode, cocos2d::Node * pParent, const char* pPropertyName, CallbacksData * pCallbacksData, REDReader * ccbReader) {
  109. REDEditBoxDelegate::ccEditBoxCallback event = 0;
  110. if (pCallbacksData != nullptr) {
  111. cocos2d::Ref * target = pCallbacksData->_target;
  112. std::string selectorName = pCallbacksData->selectorName;
  113. REDSelectorResolver * targetAsREDSelectorResolver = dynamic_cast<REDSelectorResolver *>(target);
  114. if(targetAsREDSelectorResolver != nullptr)
  115. {
  116. auto handler = targetAsREDSelectorResolver->onResolveREDUIEditBoxSelector(target, selectorName.c_str());
  117. if (handler != 0) {
  118. event = std::function<void(Ref *)>(std::bind(handler, target, std::placeholders::_1));
  119. }
  120. }
  121. if(event == 0)
  122. {
  123. REDSelectorResolver * ccbSelectorResolver = ccbReader->getREDSelectorResolver();
  124. if(ccbSelectorResolver != nullptr)
  125. {
  126. auto handler = ccbSelectorResolver->onResolveREDUIEditBoxSelector(target, selectorName.c_str());
  127. if (handler != 0) {
  128. event = std::function<void(Ref *)>(std::bind(handler, target, std::placeholders::_1));
  129. }
  130. }
  131. }
  132. }
  133. else {
  134. return;
  135. }
  136. EditBoxDelegate * delegate = ((REDEditBox *)pNode)->getDelegate();
  137. if (delegate == nullptr) {
  138. delegate = new REDEditBoxDelegate();
  139. }
  140. if (strcmp(pPropertyName, PROPERTY_TEXTCHANGEDEVENT) == 0) {
  141. ((REDEditBoxDelegate *)delegate)->setTextChangeEvent(event);
  142. ((REDEditBox *)pNode)->setDelegate(delegate);
  143. }
  144. else if (strcmp(pPropertyName, PROPERTY_RETURNEVENT) == 0) {
  145. ((REDEditBoxDelegate *)delegate)->setReturnEvent(event);
  146. ((REDEditBox *)pNode)->setDelegate(delegate);
  147. }
  148. else {
  149. WidgetLoader::onHandlePropTypeCallbacks(pNode, pParent, pPropertyName, pCallbacksData, ccbReader);
  150. }
  151. }
  152. }