|  | @@ -7,33 +7,34 @@ from ssat_sdk.MenuTree3.TConfig import TConfig
 | 
	
		
			
				|  |  |  # 测试加头文件;
 | 
	
		
			
				|  |  |  from TData import CTData
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  g_level = ['First', 'Second', 'Third', 'Fourth', 'Fifth', 'Sixth',
 | 
	
		
			
				|  |  |             'Seventh', 'Eighth', 'Ninth', 'Tenth', 'Eleventh', 'Twelfth']
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +# 注意:所有不对外暴露的变量和函数需要私有化,以明确哪些接口和参数是对外的。
 | 
	
		
			
				|  |  | +# 这样便于后期维护时,根据对外的变量和函数来做处理。
 | 
	
		
			
				|  |  |  class CConfigManager(TConfig, CBaseLog):
 | 
	
		
			
				|  |  |      def __init__(self, menuTreeDir, pathManager):
 | 
	
		
			
				|  |  | -        self.pathManager = pathManager
 | 
	
		
			
				|  |  | -        if self.pathManager is None:
 | 
	
		
			
				|  |  | +        self.__pathManager = pathManager
 | 
	
		
			
				|  |  | +        if self.__pathManager is None:
 | 
	
		
			
				|  |  |              self.error("路径参数错误:None")
 | 
	
		
			
				|  |  |          # 状态:False表示路径值失败;
 | 
	
		
			
				|  |  |          self.status = False
 | 
	
		
			
				|  |  |          # menuTree目录;
 | 
	
		
			
				|  |  | -        self.uiTreeDir = menuTreeDir
 | 
	
		
			
				|  |  | +        self.__uiTreeDir = menuTreeDir
 | 
	
		
			
				|  |  |          # 判断是否为目录;
 | 
	
		
			
				|  |  | -        if not os.path.isdir(self.uiTreeDir):
 | 
	
		
			
				|  |  | -            self.error("%s 不是menuTree目录" % self.uiTreeDir)
 | 
	
		
			
				|  |  | +        if not os.path.isdir(self.__uiTreeDir):
 | 
	
		
			
				|  |  | +            self.error("%s 不是menuTree目录" % self.__uiTreeDir)
 | 
	
		
			
				|  |  |          # 判断目录是否存在;
 | 
	
		
			
				|  |  | -        if not os.path.exists(self.uiTreeDir):
 | 
	
		
			
				|  |  | -            self.error("menuTree(%s)目录不存在" % self.uiTreeDir)
 | 
	
		
			
				|  |  | +        if not os.path.exists(self.__uiTreeDir):
 | 
	
		
			
				|  |  | +            self.error("menuTree(%s)目录不存在" % self.__uiTreeDir)
 | 
	
		
			
				|  |  |          # 判断配置文件是否存在;
 | 
	
		
			
				|  |  | -        self.configPath = os.path.join(self.uiTreeDir, "menutree.ini")
 | 
	
		
			
				|  |  | -        if not os.path.exists(self.configPath):
 | 
	
		
			
				|  |  | -            self.error("menutree配置文件不存在:%s" % self.configPath)
 | 
	
		
			
				|  |  | +        self.__configPath = os.path.join(self.__uiTreeDir, "menutree.ini")
 | 
	
		
			
				|  |  | +        if not os.path.exists(self.__configPath):
 | 
	
		
			
				|  |  | +            self.error("menutree配置文件不存在:%s" % self.__configPath)
 | 
	
		
			
				|  |  |              self.status = True
 | 
	
		
			
				|  |  |          # 初始化父类;
 | 
	
		
			
				|  |  | -        TConfig.__init__(self, self.configPath)
 | 
	
		
			
				|  |  | +        TConfig.__init__(self, self.__configPath)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      # 获取超级密码;
 | 
	
		
			
				|  |  |      def getSuperPassword(self):
 | 
	
	
		
			
				|  | @@ -69,11 +70,13 @@ class CConfigManager(TConfig, CBaseLog):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      # 获取Option的图片配置;
 | 
	
		
			
				|  |  |      def __getICONConfig(self, optionName, is_value_sheet=False):
 | 
	
		
			
				|  |  | -        paths = self.pathManager.get_option_paths(optionName)
 | 
	
		
			
				|  |  | +        # 默认值;
 | 
	
		
			
				|  |  | +        def_cfg = {"icon_path": "", "dcfg": {}, "dir_path": ""}
 | 
	
		
			
				|  |  | +        paths = self.__pathManager.get_option_paths(optionName)
 | 
	
		
			
				|  |  |          # 判断路径节点是否空;
 | 
	
		
			
				|  |  |          if paths.__len__() == 0:
 | 
	
		
			
				|  |  | -            self.error("当前【%s】的路径节点空" % optionName)
 | 
	
		
			
				|  |  | -            return False, {"icon_path": "", "dcfg": {}, "dir_path": ""}
 | 
	
		
			
				|  |  | +            self.error("当前【%s】的路径节点空,使用默认的配置值%s" % (optionName, def_cfg))
 | 
	
		
			
				|  |  | +            return False, def_cfg
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          # 获取first parent;
 | 
	
		
			
				|  |  |          first_parent = paths[g_level[0]]['parent']
 | 
	
	
		
			
				|  | @@ -85,34 +88,37 @@ class CConfigManager(TConfig, CBaseLog):
 | 
	
		
			
				|  |  |              cur_level = "value"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          # option聚焦的首配图片路径;
 | 
	
		
			
				|  |  | -        icon_path = os.path.join(self.uiTreeDir, "icon\\", cur_parent + "." + cur_level + "_" + optionName + ".png")
 | 
	
		
			
				|  |  | +        icon_path = os.path.join(self.__uiTreeDir, "icon\\", cur_parent + "." + cur_level + "_" + optionName + ".png")
 | 
	
		
			
				|  |  |          # option聚焦的dir首配图片路径;
 | 
	
		
			
				|  |  | -        icon_dir_path = os.path.join(self.uiTreeDir, "icon\\" + cur_parent + "." + cur_level + "_" + optionName + ".dir.png")
 | 
	
		
			
				|  |  | +        icon_dir_path = os.path.join(self.__uiTreeDir,
 | 
	
		
			
				|  |  | +                                     "icon\\" + cur_parent + "." + cur_level + "_" + optionName + ".dir.png")
 | 
	
		
			
				|  |  |          # 图片聚焦时的定位参数;
 | 
	
		
			
				|  |  |          opc_cfg = self.get_value_dict(cur_level, cur_parent + '.' + optionName)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        last_path = icon_path
 | 
	
		
			
				|  |  |          # 首配图片判断是否存在,不存在取用次配图片路径;
 | 
	
		
			
				|  |  |          if not os.path.exists(icon_path):
 | 
	
		
			
				|  |  |              # 使用次配图片,父级配图;
 | 
	
		
			
				|  |  | -            icon_path = os.path.join(self.uiTreeDir, "icon\\" + cur_parent + "." + cur_level + ".png")
 | 
	
		
			
				|  |  | -            icon_dir_path = os.path.join(self.uiTreeDir, "icon\\" + cur_parent + "." + cur_level + ".dir.png")
 | 
	
		
			
				|  |  | +            self.warn("Option(%s)首配图片不存在:%s" % (optionName, icon_path))
 | 
	
		
			
				|  |  | +            icon_path = os.path.join(self.__uiTreeDir, "icon\\" + cur_parent + "." + cur_level + ".png")
 | 
	
		
			
				|  |  | +            icon_dir_path = os.path.join(self.__uiTreeDir, "icon\\" + cur_parent + "." + cur_level + ".dir.png")
 | 
	
		
			
				|  |  |              opc_cfg = self.get_value_dict(cur_level, cur_parent)
 | 
	
		
			
				|  |  | -            self.warn("Option(%s)首配图片不存在:%s,使用次配图:%s" % (optionName, icon_path))
 | 
	
		
			
				|  |  | +            self.warn("Option(%s)首配图片不存在,尝试使用次配图(%s):%s,配置%s" % (optionName, cur_parent, icon_path, opc_cfg))
 | 
	
		
			
				|  |  |              # 如果次配都不存在,使用顶层配图;
 | 
	
		
			
				|  |  |              if not os.path.exists(icon_path):
 | 
	
		
			
				|  |  |                  self.warn("Option(%s)次配图片不存在:%s" % (optionName, icon_path))
 | 
	
		
			
				|  |  |                  # 使用顶层配图(first parent)
 | 
	
		
			
				|  |  | -                icon_path = os.path.join(self.uiTreeDir, "icon\\" + first_parent + "." + cur_level + "_" + optionName +
 | 
	
		
			
				|  |  | +                icon_path = os.path.join(self.__uiTreeDir,
 | 
	
		
			
				|  |  | +                                         "icon\\" + first_parent + "." + cur_level + "_" + optionName +
 | 
	
		
			
				|  |  |                                           ".png")
 | 
	
		
			
				|  |  | -                icon_dir_path = os.path.join(self.uiTreeDir, "icon\\" + first_parent + "." + cur_level + "_" + optionName +
 | 
	
		
			
				|  |  | +                icon_dir_path = os.path.join(self.__uiTreeDir,
 | 
	
		
			
				|  |  | +                                             "icon\\" + first_parent + "." + cur_level + "_" + optionName +
 | 
	
		
			
				|  |  |                                               ".dir.png")
 | 
	
		
			
				|  |  |                  opc_cfg = self.get_value_dict(cur_level, first_parent)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +                self.warn("Option(%s)次配图片不存在,尝试使用顶层配图(%s):%s,配置%s" % (optionName, first_parent, icon_path, opc_cfg))
 | 
	
		
			
				|  |  |                  # 如果顶层配图不存在,退出;
 | 
	
		
			
				|  |  |                  if not os.path.exists(icon_path):
 | 
	
		
			
				|  |  | -                    self.error("%s对应的顶层菜单配图不存在%s" % (optionName, icon_path))
 | 
	
		
			
				|  |  | -                    return False, {"icon_path": "", "dcfg": {}, "dir_path": ""}
 | 
	
		
			
				|  |  | +                    self.error("%s对应的顶层菜单配图不存在%s,使用默认配置%s" % (optionName, icon_path, def_cfg))
 | 
	
		
			
				|  |  | +                    return False, def_cfg
 | 
	
		
			
				|  |  |                  # endif
 | 
	
		
			
				|  |  |              # endif
 | 
	
		
			
				|  |  |          # endif
 | 
	
	
		
			
				|  | @@ -133,7 +139,7 @@ class CConfigManager(TConfig, CBaseLog):
 | 
	
		
			
				|  |  |      # 获取Option的OCR配置;
 | 
	
		
			
				|  |  |      def getOptionOCRConfig(self, optionName):
 | 
	
		
			
				|  |  |          ocr_dict = []
 | 
	
		
			
				|  |  | -        paths = self.pathManager.get_option_paths(optionName)
 | 
	
		
			
				|  |  | +        paths = self.__pathManager.get_option_paths(optionName)
 | 
	
		
			
				|  |  |          # 判断路径节点是否空;
 | 
	
		
			
				|  |  |          if paths.__len__() == 0:
 | 
	
		
			
				|  |  |              self.error("当前【%s】的路径节点空" % optionName)
 | 
	
	
		
			
				|  | @@ -142,7 +148,7 @@ class CConfigManager(TConfig, CBaseLog):
 | 
	
		
			
				|  |  |          else:
 | 
	
		
			
				|  |  |              # 如果状态False,退出;
 | 
	
		
			
				|  |  |              if self.status is False:
 | 
	
		
			
				|  |  | -                self.warn("配置文件(%s)不存在,%s使用默认的ocr配置", self.configPath, optionName)
 | 
	
		
			
				|  |  | +                self.warn("配置文件(%s)不存在,%s使用默认的ocr配置" % (self.__configPath, optionName))
 | 
	
		
			
				|  |  |                  ocr_dict = [{"lan": "ChinesePRC+English", "type": 4}, {"lan": "ChinesePRC+English", "type": 253},
 | 
	
		
			
				|  |  |                              {"lan": "ChinesePRC+English", "type": 10001}]
 | 
	
		
			
				|  |  |              else:
 | 
	
	
		
			
				|  | @@ -153,17 +159,17 @@ class CConfigManager(TConfig, CBaseLog):
 | 
	
		
			
				|  |  |                      cur_level = g_level[i]
 | 
	
		
			
				|  |  |                      # 是否有当前option的ocr配置;
 | 
	
		
			
				|  |  |                      if self.has_option(cur_level, optionName + '.ocr'):
 | 
	
		
			
				|  |  | -                        self.warn("%s使用自身的ocr配置", optionName)
 | 
	
		
			
				|  |  | +                        self.warn("%s使用自身的ocr配置" % optionName)
 | 
	
		
			
				|  |  |                          ocr_dict = self.get_dict(self.get_value(cur_level, optionName + '.ocr'))
 | 
	
		
			
				|  |  |                          break
 | 
	
		
			
				|  |  |                      # 如果option本身没有配置,获取其父节点的配置;
 | 
	
		
			
				|  |  |                      if self.has_option(cur_level, cur_parent + '.ocr'):
 | 
	
		
			
				|  |  | -                        self.warn("%s使用父节点%s的ocr配置", optionName, cur_parent)
 | 
	
		
			
				|  |  | +                        self.warn("%s使用父节点%s的ocr配置" % (optionName, cur_parent))
 | 
	
		
			
				|  |  |                          ocr_dict = self.get_dict(self.get_value(cur_level, cur_parent + '.ocr'))
 | 
	
		
			
				|  |  |                          break
 | 
	
		
			
				|  |  |                      # 如果option父级没有配置,则获取顶层配置(first parent);
 | 
	
		
			
				|  |  |                      if self.has_option(cur_level, first_parent + '.ocr'):
 | 
	
		
			
				|  |  | -                        self.warn("%s使用顶层节点%s的ocr配置", optionName, first_parent)
 | 
	
		
			
				|  |  | +                        self.warn("%s使用顶层节点%s的ocr配置" % (optionName, first_parent))
 | 
	
		
			
				|  |  |                          ocr_dict = self.get_dict(self.get_value(cur_level, first_parent + '.ocr'))
 | 
	
		
			
				|  |  |                          break
 | 
	
		
			
				|  |  |                  # end-for
 | 
	
	
		
			
				|  | @@ -171,14 +177,15 @@ class CConfigManager(TConfig, CBaseLog):
 | 
	
		
			
				|  |  |          # end-if
 | 
	
		
			
				|  |  |          self.info("%s使用的ocr配置=%" % (optionName, ocr_dict))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    # 获取Value的OCR配置;
 | 
	
		
			
				|  |  | -    def getValueOCRConfig(self, valueName, paths):
 | 
	
		
			
				|  |  | -        pass
 | 
	
		
			
				|  |  | +    # 获取ICON源屏幕的分辨率配置值;
 | 
	
		
			
				|  |  | +    # 该值用途:由于有些icon是在某些分辨率下截图的,但是同机芯项目可能使用同一套UI,只是分辨率不一样而已。
 | 
	
		
			
				|  |  | +    # 所以,根据当初的icon分辨率,可以计算出在别的分辨率下的icon区域大小;
 | 
	
		
			
				|  |  | +    def getICONResolutionConfig(self):
 | 
	
		
			
				|  |  | +        return self.get_value_dict('Screen', 'shape') if self.has_option('Screen', 'shape') else [1920, 1080]
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  if __name__ == "__main__":
 | 
	
		
			
				|  |  |      tData = CTData()
 | 
	
		
			
				|  |  |      upath = UITPathManage(tData)
 | 
	
		
			
				|  |  |      opc = CConfigManager(r'D:\SAT\resource\MenuTree\RT2851\2851', upath)
 | 
	
		
			
				|  |  | -    # print opc.getThresholdDict("factory")
 | 
	
		
			
				|  |  |      print opc.getOptionICONConfig("picture")
 |