CommandClassControlNodeView.m 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. //
  2. // CommandClassControlNodeView.m
  3. // kneet2
  4. //
  5. // Created by Jason Lee on 11/5/15.
  6. // Copyright © 2015 ntels. All rights reserved.
  7. //
  8. #import "JDObject.h"
  9. #import "RequestHandler.h"
  10. #import "JDJSONModel.h"
  11. #import "DeviceModel.h"
  12. #import "CustomTextField.h"
  13. #import "CommandClassControlNodeView.h"
  14. #import "MultiLevelPopupView.h"
  15. #import "CustomRadioGroup.h"
  16. #import "CommandClassControlView.h"
  17. #define kfCommandNodeSwitchLabelPadding 0.0f
  18. #define kfCommandNodeSwitchLeftPadding 0.0f
  19. #define kfCommandNodeSwitchRightPadding 0.0f
  20. #define kfCommandNodeLockRightPadding 0.0f
  21. #define kfControlNodeDefaultWidth 256.0f
  22. //#define kfControlMaxWidth IPHONE_WIDTH - 105.0f
  23. #define kfControlNodeDefaultHeight 36.0f
  24. #define kfControlNodeDefaultMargin 0.0f
  25. @implementation CommandClassControlNodeView
  26. + (CommandClassControlNodeView *)viewForCommandClass:(CmdClsType)cmdClsType {
  27. CommandClassControlNodeView *controlView = nil;
  28. for (UIView *view in [CommonUtil nibViews:@"CommandClassControlNodeView"]) {
  29. if (view.tag == cmdClsType) {
  30. controlView = (CommandClassControlNodeView *)view;
  31. controlView.width = kfControlNodeDefaultWidth;
  32. controlView.height = kfControlNodeDefaultHeight;
  33. break;
  34. }
  35. }
  36. return controlView;
  37. }
  38. //- (void)setNodeEnable:(BOOL)nodeEnable {
  39. // _nodeEnable = nodeEnable;
  40. //
  41. // [self setLayoutUI];
  42. //}
  43. //
  44. //- (void)setLayoutUI {
  45. //
  46. //}
  47. - (CGSize)sizeForIntrinsic {
  48. return CGSizeMake(kfControlNodeDefaultWidth, kfControlNodeDefaultHeight);
  49. }
  50. - (CGSize)sizeForIntrinsicForItemCount:(NSInteger)count {
  51. return CGSizeMake(kfControlNodeDefaultWidth, kfControlNodeDefaultHeight);
  52. }
  53. - (void)controlNodeAction {
  54. if ([self.delegate respondsToSelector:@selector(didControlNodeAction:)]) {
  55. [self.delegate didControlNodeAction:self];
  56. }
  57. }
  58. @end
  59. @implementation CommandClassControlNodeSensorBinaryView
  60. @end
  61. @implementation CommandClassControlNodeValveView
  62. - (void)willMoveToSuperview:(UIView *)newSuperview {
  63. if (!newSuperview)
  64. return;
  65. [self initControl];
  66. }
  67. - (void)initControl {
  68. [self setLayoutUI];
  69. }
  70. - (void)setLayoutUI {
  71. NSString *stmp = _subItem.cmdclsValueMsgLongest;
  72. CGFloat width = [CommonUtil getSizeFromString:stmp font:_btnOpen.titleLabel.font width:FLT_MAX].width; // + kfSwitchLabelPadding;
  73. CGFloat eWidth = width + kfCommandNodeSwitchLeftPadding + kfCommandNodeSwitchRightPadding;
  74. _constraintBtnOpenWidth.constant = eWidth;
  75. CmdClsValueModel *cmdclsValueOn = nil, *cmdclsValueOff = nil;
  76. if ([_subItem.cmdclsTypeId isEqualToString:@"36001"]) {
  77. cmdclsValueOn = _subItem.cmdclsValueList[0];
  78. cmdclsValueOff = _subItem.cmdclsValueList[1];
  79. //default setting
  80. _subItem.cmdclsValue = _subItem.cmdclsValue && ![_subItem.cmdclsValue isEmptyString] ? _subItem.cmdclsValue : cmdclsValueOn.cmdclsValue;
  81. //layout setting
  82. [_btnOpen setTitle:cmdclsValueOn.cmdclsValueMsg forState:UIControlStateNormal];
  83. [_btnClose setTitle:cmdclsValueOff.cmdclsValueMsg forState:UIControlStateNormal];
  84. }
  85. else if ([_subItem.cmdclsTypeId isEqualToString:@"36002"]) {//only close
  86. cmdclsValueOff = _subItem.cmdclsValueList[0];
  87. //default setting
  88. _subItem.cmdclsValue = _subItem.cmdclsValue && ![_subItem.cmdclsValue isEmptyString] ? _subItem.cmdclsValue : cmdclsValueOff.cmdclsValue;
  89. //layout setting
  90. [_btnClose setTitle:cmdclsValueOff.cmdclsValueMsg forState:UIControlStateNormal];
  91. [_btnOpen removeFromSuperview];
  92. [self removeConstraint:_constraintBtnSameWidth];
  93. _constraintBtnOpenWidth.constant = 0;
  94. _constraintBtnSpace.constant = 0;
  95. _constraintBtnCloseWidth.constant = eWidth;
  96. }
  97. if (_nodeEnable) {
  98. if ([_subItem.cmdclsValue isEqualToString:cmdclsValueOn.cmdclsValue]) {
  99. [self btnOpenTouched:nil];
  100. } else {
  101. [self btnCloseTouched:nil];
  102. }
  103. } else {
  104. _btnOpen.selected = NO;
  105. _btnClose.selected = NO;
  106. if ([_subItem.cmdclsTypeId isEqualToString:@"36001"]) {
  107. [[JDFacade facade] setRadioButtonStatus:@NO object:_subItem.cmdclsValueList[0]];
  108. [[JDFacade facade] setRadioButtonStatus:@NO object:_subItem.cmdclsValueList[1]];
  109. } else if ([_subItem.cmdclsTypeId isEqualToString:@"36002"]) {//only close
  110. [[JDFacade facade] setRadioButtonStatus:@NO object:_subItem.cmdclsValueList[0]];
  111. }
  112. }
  113. }
  114. - (IBAction)btnOpenTouched:(id)sender {
  115. NSLog(@"btnOpenTouched");
  116. if ([_subItem.cmdclsTypeId isEqualToString:@"36001"]) {
  117. [[JDFacade facade] setRadioButtonStatus:@YES object:_subItem.cmdclsValueList[0]];
  118. [[JDFacade facade] setRadioButtonStatus:@NO object:_subItem.cmdclsValueList[1]];
  119. }
  120. _btnOpen.selected = YES;
  121. _btnClose.selected = NO;
  122. if (sender) {//트리거 설정
  123. [self controlNodeAction];
  124. }
  125. }
  126. - (IBAction)btnCloseTouched:(id)sender {
  127. if ([_subItem.cmdclsTypeId isEqualToString:@"36001"]) {
  128. [[JDFacade facade] setRadioButtonStatus:@NO object:_subItem.cmdclsValueList[0]];
  129. [[JDFacade facade] setRadioButtonStatus:@YES object:_subItem.cmdclsValueList[1]];
  130. _btnOpen.selected = NO;
  131. _btnClose.selected = YES;
  132. } else if ([_subItem.cmdclsTypeId isEqualToString:@"36002"]) {//only close
  133. [[JDFacade facade] setRadioButtonStatus:@YES object:_subItem.cmdclsValueList[0]];
  134. _btnClose.selected = YES;
  135. }
  136. if (sender) {//트리거 설정
  137. [self controlNodeAction];
  138. }
  139. }
  140. @end
  141. @implementation CommandClassControlNodeSwitchBinaryView
  142. - (void)willMoveToSuperview:(UIView *)newSuperview {
  143. if (!newSuperview)
  144. return;
  145. [self initControl];
  146. }
  147. - (void)initControl {
  148. [self setLayoutUI];
  149. }
  150. - (void)setLayoutUI {
  151. NSString *stmp = _subItem.cmdclsValueMsgLongest;
  152. CGFloat width = [CommonUtil getSizeFromString:stmp font:_btnOff.titleLabel.font width:FLT_MAX].width;// + kfSwitchLabelPadding;
  153. CGFloat eWidth = width + kfCommandNodeSwitchLeftPadding + kfCommandNodeSwitchRightPadding;
  154. _constraintBtnOnWidth.constant = eWidth;
  155. NSLog(@"SubItem : %@", _subItem.cmdclsValueList);
  156. if (_subItem.cmdclsValueList.count) {
  157. CmdClsValueModel *cmdclsValueOn = _subItem.cmdclsValueList[0];
  158. CmdClsValueModel *cmdclsValueOff = _subItem.cmdclsValueList[1];
  159. //default setting
  160. _subItem.cmdclsValue = _subItem.cmdclsValue && ![_subItem.cmdclsValue isEmptyString] ? _subItem.cmdclsValue : cmdclsValueOn.cmdclsValue;
  161. [_btnOn setTitle:cmdclsValueOn.cmdclsValueMsg forState:UIControlStateNormal];
  162. [_btnOff setTitle:cmdclsValueOff.cmdclsValueMsg forState:UIControlStateNormal];
  163. if (_nodeEnable) {
  164. if ([_subItem.cmdclsValue isEqualToString:cmdclsValueOn.cmdclsValue]) {
  165. [self btnOnTouched:nil];
  166. } else {
  167. [self btnOffTouched:nil];
  168. }
  169. } else {
  170. _btnOn.selected = NO;
  171. _btnOff.selected = NO;
  172. [[JDFacade facade] setRadioButtonStatus:@NO object:_subItem.cmdclsValueList[0]];
  173. [[JDFacade facade] setRadioButtonStatus:@NO object:_subItem.cmdclsValueList[1]];
  174. }
  175. }
  176. }
  177. - (IBAction)btnOnTouched:(id)sender {
  178. NSLog(@"btnOnTouched");
  179. CmdClsValueModel *cmdclsValueOn = _subItem.cmdclsValueList[0];
  180. _subItem.cmdclsValue = cmdclsValueOn.cmdclsValue;
  181. [[JDFacade facade] setRadioButtonStatus:@YES object:_subItem.cmdclsValueList[0]];
  182. [[JDFacade facade] setRadioButtonStatus:@NO object:_subItem.cmdclsValueList[1]];
  183. _btnOn.selected = YES;
  184. _btnOff.selected = NO;
  185. if (sender) {//트리거 설정
  186. [self controlNodeAction];
  187. }
  188. }
  189. - (IBAction)btnOffTouched:(id)sender {
  190. CmdClsValueModel *cmdclsValueOff = _subItem.cmdclsValueList[1];
  191. _subItem.cmdclsValue = cmdclsValueOff.cmdclsValue;
  192. [[JDFacade facade] setRadioButtonStatus:@NO object:_subItem.cmdclsValueList[0]];
  193. [[JDFacade facade] setRadioButtonStatus:@YES object:_subItem.cmdclsValueList[1]];
  194. _btnOn.selected = NO;
  195. _btnOff.selected = YES;
  196. if (sender) {//트리거 설정
  197. [self controlNodeAction];
  198. }
  199. }
  200. - (CGSize)sizeForIntrinsic {
  201. CGFloat width = (_constraintBtnOnWidth.constant * 2) + kfControlNodeDefaultMargin;
  202. return CGSizeMake(width, kfControlDefaultHeight);
  203. }
  204. @end
  205. @interface CommandClassControlNodeSwitchMultiLevelView () {
  206. MultiLevelPopupView *_mpopup;
  207. }
  208. @end
  209. @implementation CommandClassControlNodeSwitchMultiLevelView
  210. - (void)willMoveToSuperview:(UIView *)newSuperview {
  211. if (!newSuperview)
  212. return;
  213. [self initControl];
  214. }
  215. - (void)initControl {
  216. [self setLayoutUI];
  217. }
  218. - (void)setLayoutUI {
  219. CGFloat half = ([_subItem.controlMaxValue floatValue] - [_subItem.controlMinValue floatValue]) / 2;
  220. NSString *cmdClsValue = _subItem.cmdclsValue && ![_subItem.cmdclsValue isEmptyString] ? _subItem.cmdclsValue : [CommandClassControlView cmdclsValueForType:_subItem.dataTypeCode value:half];
  221. _subItem.conditionTypeCode = _subItem.conditionTypeCode && ![_subItem.conditionTypeCode isEmptyString] ? _subItem.conditionTypeCode : ksConditionTypeCodeGreatOrEqual;
  222. NSString *condition = _subItem.conditionTypeCode && ![_subItem.conditionTypeCode isEmptyString] ?
  223. ([_subItem.conditionTypeCode isEqualToString:ksConditionTypeCodeGreatOrEqual] ? @"이상" : @"이하") : @"이상";
  224. NSString *contentValue = [NSString stringWithFormat:@"%@%@ %@", cmdClsValue, _subItem.unit, condition];
  225. _subItem.cmdclsValue = cmdClsValue;
  226. _subItem.cmdclsValueMsg = contentValue;
  227. [_btnMultiLevel setTitle:contentValue forState:UIControlStateNormal];
  228. _btnMultiLevel.selected = _nodeEnable;
  229. }
  230. - (IBAction)btnMutilLevelTouched:(id)sender {
  231. //call popup
  232. if (!_mpopup) {
  233. _mpopup = [[MultiLevelPopupView alloc] initFromNib];
  234. }
  235. _mpopup.lblTitle.text = _subItem.sourceSubName;
  236. _mpopup.refSubItem = _subItem;
  237. [_mpopup showWithCompletion:^(CustomAlertView *alertView, NSInteger buttonIndex) {
  238. if (buttonIndex == 0) {//OK
  239. NSString *condition = [_subItem.conditionTypeCode isEqualToString:ksConditionTypeCodeGreatOrEqual] ? @"이상" : @"이하";
  240. NSString *contentValue = [NSString stringWithFormat:@"%@%@ %@", _subItem.cmdclsValue, _subItem.unit, condition];
  241. _subItem.cmdclsValueMsg = contentValue;
  242. [_btnMultiLevel setTitle:contentValue forState:UIControlStateNormal];
  243. if (sender) {//트리거 설정
  244. [self controlNodeAction];
  245. }
  246. }
  247. }];
  248. }
  249. @end
  250. @implementation CommandClassControlNodeSensorMultiLevelView
  251. @end
  252. @implementation CommandClassControlNodeBatteryView
  253. @end
  254. @implementation CommandClassControlNodeMeterView
  255. @end
  256. @implementation CommandClassControlNodeElecPlugView
  257. @end
  258. @implementation CommandClassControlNodeTotalElecPlugView
  259. @end
  260. @implementation CommandClassControlNodeValveLockView
  261. @end