logic.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. # -*- coding:utf-8 -*-
  2. import os, time
  3. from BaseLog import CBaseLog
  4. from ExtraData import CExtraData
  5. from OptionExcel import COptionExcel
  6. from OptionConfig import COptionConfig
  7. from OptionFocus import COptionFocus
  8. from OptionOCR import COptionOCR
  9. from OptionAction import COptionAction
  10. from ssat_sdk.source_input import SourceGenInput
  11. class CMenuLogic(CBaseLog):
  12. sourceInput = SourceGenInput()
  13. def __init__(self):
  14. CBaseLog.__init__(self)
  15. self.__exData = CExtraData()
  16. self.__optionExcel = COptionExcel(self.__exData)
  17. self.__optionConfig = COptionConfig(self.__exData, self.__optionExcel)
  18. '''
  19. 函数:移动到目标节点上(路径节点和value节点)
  20. 参数:
  21. opa COptionAction对象;
  22. moveDirection 移动方向,True表示调用move_key[1](向下或向右), False表示调用move_key[0]。
  23. maxTry 最大移动次数,防止死循环。
  24. 返回:Boolean。
  25. '''
  26. def __move2TargetNode(self, opa, moveDirection, maxTry=15):
  27. tryCount = 0
  28. # 是否到目标结点了;
  29. isOnTargetNode = False
  30. # 移动到目标节点;
  31. while True:
  32. # 判断是否移动成功;
  33. if opa.isOnTargetNode()[0] is True:
  34. # 如果已在目标结点,退出循环;
  35. if opa.isOnTargetOption() or opa.isOnValueSheet():
  36. self.info(u"<到达目标路径节点或value节点>")
  37. isOnTargetNode = True
  38. break
  39. # 未到目标,进入下一节点;
  40. self.info(u"<进入下一节点>")
  41. opa.enterNode()
  42. continue
  43. # endif
  44. # 移动到下/上一节点;
  45. if moveDirection:
  46. opa.move2NextSiblingNode()
  47. else:
  48. opa.move2PrevSiblingNode()
  49. tryCount += 1
  50. if tryCount > maxTry:
  51. self.warn(u"已%s遍历超过%d次,仍未找到焦点" % ("正向" if moveDirection else "逆向", maxTry))
  52. break
  53. # end-while
  54. return isOnTargetNode
  55. '''
  56. 函数:返回到主页(不一定就是Home页,一般指返回运行前的那个画面)
  57. 参数:
  58. opa COptionAction对象;
  59. 返回:
  60. '''
  61. def __back2Home(self, opa):
  62. self.info(u"返回主页")
  63. while opa.pos > 0:
  64. opa.back2ParentNode()
  65. self.info(u"【如果设置value时,会自动回退到上一层父节点,此处操作正常。否则要多返回一层。】")
  66. '''
  67. 函数:设置option的值。
  68. 参数:
  69. 返回:
  70. '''
  71. def setOptionValue(self, optionName, optionValue):
  72. CMenuLogic.sourceInput.setPattern(11)
  73. opa = COptionAction(optionName, optionValue, self.__optionConfig, self.__optionExcel)
  74. # 检测路径是否有效;
  75. if opa.checkRunOptionPath() is False:
  76. return False
  77. # 首先,调用根菜单;
  78. opa.callFirstOptionShortCutKey()
  79. time.sleep(1)
  80. if opa.isOnFirstOption() is False:
  81. self.error(u"未聚焦到根节点上,退出")
  82. return False
  83. # 遍历到目标option中;
  84. if self.__move2TargetNode(opa, True) is False:
  85. if self.__move2TargetNode(opa, False) is False:
  86. return False
  87. # 到达目标option后,进入value表;
  88. self.info(u"进入value表")
  89. opa.enterNode()
  90. # 遍历到value节点中;
  91. if self.__move2TargetNode(opa, True) is False:
  92. if self.__move2TargetNode(opa, False) is False:
  93. return False
  94. # 找到value节点,设置值;
  95. self.info(u"设置value值:一般只适用于Number类型或Input类型,不适合选择类型。但都必须调用,因为里面有enterkey操作")
  96. opa.setOptionValue()
  97. # 返回主页;
  98. self.__back2Home(opa)
  99. '''
  100. 函数:检测option的值;
  101. 参数:
  102. 返回:
  103. '''
  104. def checkOptionValue(self, optionName, optionValue):
  105. CMenuLogic.sourceInput.setPattern(11)
  106. opa = COptionAction(optionName, optionValue, self.__optionConfig, self.__optionExcel)
  107. # 检测路径是否有效;
  108. if opa.checkRunOptionPath() is False:
  109. return False
  110. # 首先,调用根菜单;
  111. opa.callFirstOptionShortCutKey()
  112. if opa.isOnFirstOption() is False:
  113. self.error(u"未聚焦到根节点上,退出")
  114. return False
  115. # 遍历到目标option中;
  116. if self.__move2TargetNode(opa, True) is False:
  117. if self.__move2TargetNode(opa, False) is False:
  118. return False
  119. # 到达目标option后,进入value表;
  120. opa.enterNode()
  121. # 遍历到value节点中;
  122. if self.__move2TargetNode(opa, True) is False:
  123. if self.__move2TargetNode(opa, False) is False:
  124. return False
  125. # 找到value节点,设置值;
  126. opa.setOptionValue()
  127. if __name__ == "__main__":
  128. ml = CMenuLogic()
  129. ml.setOptionValue('picture_preset', 'movie')