You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

211 lines
5.6 KiB

  1. require("luaScript.Tools.Widgets.PressedEffect")
  2. cc.Button.ClassName = "Button"
  3. function cc.Button:saveToXmlNode(xmlNode)
  4. cc.Widget.saveToXmlNode(self , xmlNode);
  5. xmlNode.scale9Enable = self:isScale9Enabled();
  6. xmlNode.NormalImage = getUITexture(self:getNormalFileName() , self:getNormalTexType());
  7. xmlNode.PressedImage = getUITexture(self:getPressedFileName() , self:getPressedTexType());
  8. xmlNode.DisabledImage = getUITexture(self:getDisabledFileName() , self:getDisabledTexType());
  9. if xmlNode.scale9Enable then
  10. xmlNode.capInsets = self:getCapInsetsNormalRenderer();
  11. end
  12. xmlNode.text = self:getTitleText();
  13. xmlNode.TitleFontConfig = self:getFontConfig();
  14. xmlNode.CharPadding = self:getCharPadding();
  15. xmlNode.LinePadding = self:getLinePadding();
  16. local pressedEffect = self:getPressedEffect();
  17. if pressedEffect then
  18. xmlNode.PressedEffect = {};
  19. pressedEffect:saveToXmlNode(xmlNode.PressedEffect);
  20. else
  21. xmlNode.PressedEffect = false;
  22. end
  23. end
  24. function cc.Button:loadFromXmlNode(xmlNode)
  25. cc.Widget.loadFromXmlNode(self , xmlNode);
  26. self:setScale9Enabled(xmlNode.scale9Enable);
  27. setUITexture(self.loadTextureNormal , self , xmlNode.NormalImage);
  28. setUITexture(self.loadTexturePressed , self , xmlNode.PressedImage);
  29. setUITexture(self.loadTextureDisabled , self , xmlNode.DisabledImage);
  30. local fontConfig = xmlNode.TitleFontConfig
  31. if not fontConfig then
  32. fontConfig = {}
  33. fontConfig.fontFilePath = "res/default/msyh.ttc"
  34. fontConfig.fontSize = xmlNode.TitleFontSize
  35. fontConfig.glyphs = cc.GLYPHCOLLECTION_DYNAMIC
  36. fontConfig.customGlyphs = nil
  37. fontConfig.distanceFieldEnabled = false
  38. fontConfig.outlineSize = 0
  39. fontConfig.txtColor = xmlNode.TitleColor;
  40. end
  41. self:setFontConfig(fontConfig);
  42. if xmlNode.CharPadding then
  43. self:setCharPadding(xmlNode.CharPadding);
  44. self:setLinePadding(xmlNode.LinePadding);
  45. end
  46. self:setTitleText(xmlNode.text);
  47. if self:isScale9Enabled() then
  48. self:setCapInsets(xmlNode.capInsets);
  49. end
  50. local pressedEffect = xmlNode.PressedEffect;
  51. if pressedEffect ~= nil then
  52. if pressedEffect ~= false then
  53. local effect = cc[pressedEffect.ClassName];
  54. if not effect then
  55. error("找不到类型:" .. pressedEffect.ClassName);
  56. end
  57. local instance = effect:create();
  58. instance:loadFromXmlNode(pressedEffect);
  59. self:setPressedEffect(instance);
  60. end
  61. else
  62. -- 给个默认值,兼容老版本
  63. self:setPressedEffect(cc.ScalePressedEffect:create());
  64. end
  65. end
  66. function cc.Button:setFontConfig(ttfConfig)
  67. local label = self:getTitleRenderer();
  68. label:setFontConfig(ttfConfig)
  69. end
  70. function cc.Button:getFontConfig()
  71. local label = self:getTitleRenderer();
  72. local config = label:getFontConfig()
  73. return config;
  74. end
  75. -- 收集ui的文本,返回文本table
  76. function cc.Button:collectText()
  77. return {TextTranslator:collect(self:getTitleText())};
  78. end
  79. -- 翻译xmlNode里的文本,dict是字典表
  80. function cc.Button:applyDict(dict)
  81. local translated = dict[TextTranslator:collect(self:getTitleText())];
  82. if translated then
  83. self:setTitleText(TextTranslator:translate(self:getTitleText() , translated));
  84. end
  85. end
  86. function cc.Button:setCharPadding(padding)
  87. local label = self:getTitleRenderer();
  88. label:setCharPadding(padding)
  89. end
  90. function cc.Button:getCharPadding()
  91. local label = self:getTitleRenderer();
  92. return label:getCharPadding()
  93. end
  94. function cc.Button:setLinePadding(padding)
  95. local label = self:getTitleRenderer();
  96. label:setLinePadding(padding)
  97. end
  98. function cc.Button:getLinePadding()
  99. local label = self:getTitleRenderer();
  100. return label:getLinePadding()
  101. end
  102. function cc.Button:setPadding(x , y)
  103. local label = self:getTitleRenderer();
  104. label:setPadding(x , y)
  105. end
  106. function cc.Button:extend(node)
  107. cc.Widget:extend(node);
  108. node:setName("Button")
  109. end
  110. function cc.Button:copyProperties(source)
  111. cc.Widget.copyProperties(self , source);
  112. self:setFontConfig(source:getFontConfig());
  113. end
  114. function cc.Button:createNode()
  115. local layer = cc.Button:create();
  116. cc.Button:extend(layer);
  117. return layer;
  118. end
  119. function cc.Button:setText(str)
  120. self:setTitleText(str);
  121. end
  122. -- 设置默认值
  123. function cc.Button:setDefaults()
  124. local ttfConfig = {}
  125. ttfConfig.fontFilePath = "res/default/msyh.ttc"
  126. ttfConfig.fontSize = 30
  127. ttfConfig.glyphs = cc.GLYPHCOLLECTION_DYNAMIC
  128. ttfConfig.customGlyphs = nil
  129. ttfConfig.distanceFieldEnabled = false
  130. ttfConfig.outlineSize = 0
  131. self:setFontConfig(ttfConfig);
  132. self:setTitleText("确定");
  133. self:loadTextureNormal("res/default/button.png");
  134. self:setCapInsets(cc.rect(0,0,0,0));
  135. -- 默认带一个缩放效果
  136. self:setPressedEffect(cc.ScalePressedEffect:create());
  137. -- 默认需要响应touch事件
  138. self:setTouchEnabled(true)
  139. end
  140. -- 重新加载这个控件的所有图片
  141. function cc.Button:postloadImage()
  142. local isScale9 = self:isScale9Enabled();
  143. self:setScale9Enabled(not isScale9);
  144. self:setScale9Enabled(isScale9);
  145. end
  146. -- 收集这个控件用到了哪些PList文件
  147. function cc.Button:collectPListFiles()
  148. local files = {};
  149. collectPListFile(files , self:getNormalFileName() , self:getNormalTexType());
  150. collectPListFile(files , self:getPressedFileName() , self:getPressedTexType());
  151. collectPListFile(files , self:getDisabledFileName() , self:getDisabledTexType());
  152. function getParent(node, path)
  153. local parent = node:getParent()
  154. if parent then
  155. local nameParent = parent:getName()
  156. path = nameParent.. "\\"..path
  157. return getParent(parent, path)
  158. else
  159. return path
  160. end
  161. end
  162. local nodePath = getParent(self, self:getName());
  163. for k,v in pairs(files) do
  164. print("plist = " .. v .. ", nodePath = ".. nodePath)
  165. end
  166. return files;
  167. end
  168. function cc.Button:loadTextureFromPlist(filename)
  169. self:loadTextureNormal(filename, cc.TextureResType.plistType);
  170. end