edouard@1944: #!/usr/bin/env python
edouard@1944: # -*- coding: utf-8 -*-
edouard@1944: # This file is part of Beremiz
edouard@1944: # See COPYING file for copyrights details.
edouard@1944: 
edouard@1944: from __future__ import absolute_import
edouard@1944: from util.TranslationCatalogs import NoTranslate
edouard@1944: _ = NoTranslate
edouard@1944: 
edouard@1944: ITEMS_EDITABLE = [
edouard@1944:     ITEM_PROJECT,
edouard@1944:     ITEM_POU,
edouard@1944:     ITEM_VARIABLE,
edouard@1944:     ITEM_TRANSITION,
edouard@1944:     ITEM_ACTION,
edouard@1944:     ITEM_CONFIGURATION,
edouard@1944:     ITEM_RESOURCE,
edouard@1944:     ITEM_DATATYPE
edouard@1944: ] = range(8)
edouard@1944: 
edouard@1944: ITEMS_UNEDITABLE = [
edouard@1944:     ITEM_DATATYPES,
edouard@1944:     ITEM_FUNCTION,
edouard@1944:     ITEM_FUNCTIONBLOCK,
edouard@1944:     ITEM_PROGRAM,
edouard@1944:     ITEM_TRANSITIONS,
edouard@1944:     ITEM_ACTIONS,
edouard@1944:     ITEM_CONFIGURATIONS,
edouard@1944:     ITEM_RESOURCES,
edouard@1944:     ITEM_PROPERTIES
edouard@1944: ] = range(8, 17)
edouard@1944: 
edouard@1944: ITEMS_VARIABLE = [
edouard@1944:     ITEM_VAR_LOCAL,
edouard@1944:     ITEM_VAR_GLOBAL,
edouard@1944:     ITEM_VAR_EXTERNAL,
edouard@1944:     ITEM_VAR_TEMP,
edouard@1944:     ITEM_VAR_INPUT,
edouard@1944:     ITEM_VAR_OUTPUT,
edouard@1944:     ITEM_VAR_INOUT
edouard@1944: ] = range(17, 24)
edouard@1944: 
Edouard@1948: ITEM_CONFNODE = 25
Edouard@1948: 
edouard@1944: VAR_CLASS_INFOS = {
edouard@1944:     "Local":    ("localVars",    ITEM_VAR_LOCAL),
edouard@1944:     "Global":   ("globalVars",   ITEM_VAR_GLOBAL),
edouard@1944:     "External": ("externalVars", ITEM_VAR_EXTERNAL),
edouard@1944:     "Temp":     ("tempVars",     ITEM_VAR_TEMP),
edouard@1944:     "Input":    ("inputVars",    ITEM_VAR_INPUT),
edouard@1944:     "Output":   ("outputVars",   ITEM_VAR_OUTPUT),
edouard@1944:     "InOut":    ("inOutVars",    ITEM_VAR_INOUT)}
edouard@1944: 
edouard@1944: POU_TYPES = {
edouard@1944:     "program": ITEM_PROGRAM,
edouard@1944:     "functionBlock": ITEM_FUNCTIONBLOCK,
edouard@1944:     "function": ITEM_FUNCTION,
edouard@1944: }
edouard@1944: 
edouard@1944: CLASS_TYPES = {
edouard@1944:     "configuration": ITEM_CONFIGURATION,
edouard@1944:     "resource": ITEM_RESOURCE,
edouard@1944:     "action": ITEM_ACTION,
edouard@1944:     "transition": ITEM_TRANSITION,
edouard@1944:     "program": ITEM_PROGRAM
edouard@1944: }
edouard@1944: 
edouard@1944: LOCATIONS_ITEMS = [LOCATION_CONFNODE,
edouard@1944:                    LOCATION_MODULE,
edouard@1944:                    LOCATION_GROUP,
edouard@1944:                    LOCATION_VAR_INPUT,
edouard@1944:                    LOCATION_VAR_OUTPUT,
edouard@1944:                    LOCATION_VAR_MEMORY] = range(6)
edouard@1944: 
edouard@1944: UNEDITABLE_NAMES = [_("User-defined POUs"), _("Functions"), _("Function Blocks"),
Edouard@1953:                     _("Programs"), _("Data Types"), _("Transitions"), _("Actions"),
Edouard@1953:                     _("Configurations"), _("Resources"), _("Properties")]
edouard@1944: 
edouard@1944: [USER_DEFINED_POUS, FUNCTIONS, FUNCTION_BLOCKS, PROGRAMS,
edouard@1944:  DATA_TYPES, TRANSITIONS, ACTIONS, CONFIGURATIONS,
edouard@1944:  RESOURCES, PROPERTIES] = UNEDITABLE_NAMES
edouard@1944: 
Edouard@1948: # -------------------------------------------------------------------------------
Edouard@1948: #                   Project Element tag name computation functions
Edouard@1948: # -------------------------------------------------------------------------------
Edouard@1948: 
Edouard@1953: 
Edouard@1948: # Compute a data type name
Edouard@1948: def ComputeDataTypeName(datatype):
Edouard@1948:     return "D::%s" % datatype
Edouard@1948: 
Edouard@1953: 
Edouard@1948: # Compute a pou name
Edouard@1948: def ComputePouName(pou):
Edouard@1948:     return "P::%s" % pou
Edouard@1948: 
Edouard@1953: 
Edouard@1948: # Compute a pou transition name
Edouard@1948: def ComputePouTransitionName(pou, transition):
Edouard@1948:     return "T::%s::%s" % (pou, transition)
Edouard@1948: 
Edouard@1953: 
Edouard@1948: # Compute a pou action name
Edouard@1948: def ComputePouActionName(pou, action):
Edouard@1948:     return "A::%s::%s" % (pou, action)
Edouard@1948: 
Edouard@1953: 
Edouard@1948: # Compute a pou  name
Edouard@1948: def ComputeConfigurationName(config):
Edouard@1948:     return "C::%s" % config
Edouard@1948: 
Edouard@1953: 
Edouard@1948: # Compute a pou  name
Edouard@1948: def ComputeConfigurationResourceName(config, resource):
Edouard@1948:     return "R::%s::%s" % (config, resource)
Edouard@1948: 
Edouard@1953: 
Edouard@1948: def GetElementType(tagname):
Edouard@1948:     words = tagname.split("::")
Edouard@2524:     if len(words) == 1:
Edouard@2524:         return ITEM_CONFNODE
Edouard@1948:     return {
Edouard@1948:         "D": ITEM_DATATYPE,
Edouard@1948:         "P": ITEM_POU,
Edouard@1948:         "T": ITEM_TRANSITION,
Edouard@1948:         "A": ITEM_ACTION,
Edouard@1948:         "C": ITEM_CONFIGURATION,
Edouard@1948:         "R": ITEM_RESOURCE
Edouard@1948:     }[words[0]]
Edouard@1948: 
Edouard@1948: 
edouard@1944: # remove gettext override
edouard@1944: del _