structureProfileController.py (5113B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\structure\structureSettings\controllers\structureProfileController.py 2 from collections import defaultdict 3 from eve.client.script.ui.structure import ChangeSignalConnect 4 from eve.client.script.ui.structure.structureSettings import CanHaveGroups 5 from eve.client.script.ui.structure.structureSettings.controllers.settingController import SettingController 6 from localization import GetByLabel 7 from ownergroups.ownergroupConst import NO_GROUP_ID 8 from signals import Signal 9 import structures 10 import log 11 REMOTE_SERVICE_NAME = 'structureProfiles' 12 13 class StructureProfileController(object): 14 15 def __init__(self, profileID = None, profileInfo = None, profileSettings = None): 16 self.profileID = profileID 17 self.profileInfo = profileInfo 18 self.originalProfileSettings = profileSettings 19 self.groupsBySettingID = None 20 self.remoteSvc = sm.RemoteSvc(REMOTE_SERVICE_NAME) 21 self.on_profile_saved = Signal(signalName='on_profile_saved') 22 self.on_groups_added = Signal(signalName='on_groups_added') 23 self.on_group_changed = Signal(signalName='on_group_changed') 24 self.on_profile_value_changed = Signal(signalName='on_profile_value_changed') 25 26 def SaveProfile(self, profileData): 27 if self.profileID is None: 28 profileName = self.GetProfileName() 29 profileDesc = self.GetProfileDescription() 30 profileID = self.remoteSvc.CreateProfile(profileName, profileDesc) 31 else: 32 self.remoteSvc.SaveProfileSettings(self.profileID, profileData) 33 profileID = self.profileID 34 self.on_profile_saved(profileID) 35 36 def GetProfileName(self): 37 if self.profileInfo: 38 return self.profileInfo.name 39 return '' 40 41 def GetProfileDescription(self): 42 if self.profileInfo: 43 return self.profileInfo.description 44 return '' 45 46 def GetProfileID(self): 47 return self.profileID 48 49 def LoadGroups(self): 50 if self.groupsBySettingID is not None: 51 return 52 self.groupsBySettingID = defaultdict(set) 53 if self.originalProfileSettings is None: 54 return self.groupsBySettingID 55 for settingID in self.originalProfileSettings: 56 if settingID not in structures.SETTING_OBJECT_BY_SETTINGID: 57 log.LogWarn('Trying to add invalid settingID = %s' % settingID) 58 continue 59 for groupData in self.originalProfileSettings[settingID]: 60 sc = SettingController(settingID, groupData.groupID, groupData.value) 61 self.ChangeSignalConnection(sc) 62 self.groupsBySettingID[settingID].add(sc) 63 64 def GetAllGroups(self): 65 return self.groupsBySettingID.copy() 66 67 def GetGroupsBySettingID(self, settingID): 68 self.LoadGroups() 69 return self.groupsBySettingID[settingID].copy() 70 71 def GetSettingTextAndIcon(self, settingID): 72 labelPath = structures.SETTINGS_LABELS[settingID] 73 settingIcon = structures.SETTINGS_TEXTURES.get(settingID, None) 74 text = GetByLabel(labelPath) 75 descLabelPath = structures.SETTINGS_LABELS_DESC.get(settingID, None) 76 return (text, GetByLabel(descLabelPath) if descLabelPath else '', settingIcon) 77 78 def AddNewGroups(self, settingID, groupIDs): 79 currentGroups = {g.groupID for g in self.groupsBySettingID[settingID]} 80 newGroupIDs = [ gID for gID in groupIDs if gID not in currentGroups ] 81 if not newGroupIDs: 82 return 83 initialValue = 0.0 84 settingSpecification = structures.SETTING_OBJECT_BY_SETTINGID[settingID] 85 if settingSpecification.valueRange is not None: 86 minValue, maxValue = settingSpecification.valueRange 87 initialValue = minValue 88 for gID in newGroupIDs: 89 self.AddGroup(settingID, groupID=gID, doSignal=False, value=initialValue) 90 91 self.on_groups_added(settingID, newGroupIDs) 92 93 def AddGroup(self, settingID, groupID, value = 0.0, doSignal = True): 94 if not CanHaveGroups(settingID) and groupID != NO_GROUP_ID: 95 return 96 existingGroupIDs = {g for g in self.groupsBySettingID[settingID]} 97 if groupID in existingGroupIDs: 98 return 99 sc = SettingController(settingID, groupID, value) 100 self.groupsBySettingID[settingID].add(sc) 101 self.OnProfileChanged() 102 if doSignal: 103 self.on_groups_added(settingID, [groupID]) 104 105 def RemoveGroup(self, groupController): 106 settingID = groupController.GetSettingID() 107 if groupController in self.groupsBySettingID[settingID]: 108 self.groupsBySettingID[settingID].remove(groupController) 109 self.on_group_changed() 110 self.OnProfileChanged() 111 112 def ChangeSignalConnection(self, sc, connect = True): 113 signalAndCallback = [(sc.on_profile_value_changed, self.OnProfileChanged)] 114 ChangeSignalConnect(signalAndCallback, connect) 115 116 def OnProfileChanged(self): 117 self.on_profile_value_changed()