medalribbonranks.py (33520B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\medalribbonranks.py 2 import sys 3 import utillib 4 from carbon.common.script.util.commonutils import GetAttrs 5 from carbonui import fontconst 6 from carbonui.control.singlelineedits.singleLineEditText import SingleLineEditText 7 from carbonui.decorative.panelUnderlay import PanelUnderlay 8 from carbonui.fontconst import EVE_MEDIUM_FONTSIZE, EVE_SMALL_FONTSIZE 9 from carbonui.primitives.container import Container 10 from carbonui.primitives.containerAutoSize import ContainerAutoSize 11 from carbonui.primitives.fill import Fill 12 from carbonui.primitives.frame import Frame 13 from carbonui.primitives.sprite import Sprite 14 from carbonui.button.group import ButtonGroup, ButtonSizeMode 15 from carbonui.control.window import Window 16 from eve.client.script.ui.util import uix 17 import localization 18 import carbonui.const as uiconst 19 import trinity 20 from eve.client.script.ui.control import eveIcon, eveLabel 21 from eve.client.script.ui.control.colorpicker import ColorPreview 22 from eve.client.script.ui.control.entries.label_text import LabelTextTop 23 from carbonui.uicore import uicore 24 from eve.client.script.ui.control.eveEditPlainText import EditPlainText 25 from eve.client.script.ui.shared.neocom.wallet import walletUtil 26 from player_messaging.client.ui_message import prompt_player_fsd_dialog 27 28 class Rank(Container): 29 __guid__ = 'xtriui.Rank' 30 rank = None 31 warFactionID = None 32 33 def Startup(self, warFactionID = None, rank = None): 34 self.SetWarFaction(warFactionID) 35 self.SetRank(rank) 36 self.Flush() 37 self.sr.rank = uix.GetRankSprite(rank, warFactionID, uiconst.TOALL) 38 self.children.insert(0, self.sr.rank) 39 40 def SetWarFaction(self, warFactionID): 41 self.warFactionID = warFactionID 42 43 def SetRank(self, rank): 44 self.rank = rank 45 46 47 class LayerBase(Container): 48 __guid__ = 'xtriui.LayerBase' 49 50 def ApplyAttributes(self, attributes): 51 Container.ApplyAttributes(self, attributes) 52 self.lname = None 53 self.inited = False 54 self.typeID = None 55 self.selected = False 56 self.idx = None 57 self.data = [] 58 self.retdata = {} 59 self.prettydata = {} 60 self.sr.dad = None 61 self.type = '' 62 63 def Startup(self, name = 'Layer', data = None): 64 self.name = '%sBase' % name 65 if self.lname is None: 66 self.lname = name 67 self.Flush() 68 self.LoadData(data) 69 self.sr.selection = Fill(parent=self, padding=(1, 2, 2, 2), color=(1.0, 1.0, 1.0, 0.25)) 70 self.sr.selection.name = 'selected' 71 self.SetSelected() 72 73 def GetData(self, *args): 74 return self.retdata 75 76 def GetPrettyData(self, *args): 77 self.prettydata = {} 78 i = 1 79 for lid, (type, mapping, color) in self.retdata.iteritems(): 80 if type and mapping: 81 self.prettydata[i] = (type, mapping, color) 82 i = i + 1 83 84 return self.prettydata 85 86 def LoadData(self, data = None, layerid = 0): 87 if data is None: 88 return 89 self.data = data 90 for lid, (type, mapping, color) in enumerate(data): 91 if len(data) == 1: 92 lid = layerid 93 par = self.GetLayer(lid) 94 if not par: 95 par = Container(parent=self, align=uiconst.TOALL, pos=(0, 0, 0, 0), clipChildren=0, state=uiconst.UI_HIDDEN) 96 par.name = '%sLayer%s' % (self.lname, lid) 97 spr = self.GetSprite(lid) 98 if not spr: 99 sprite = Sprite(parent=par, align=uiconst.TOALL, left=0, lockAspect=1, state=uiconst.UI_DISABLED) 100 sprite.name = '%sSprite%s' % (self.lname, lid) 101 if mapping != None: 102 self.SetSprite(lid, type, mapping) 103 if color is not None and color != -1: 104 self.SetSpriteColor(lid, color) 105 106 def SetSelected(self, selected = False): 107 self.selected = selected 108 if selected: 109 self.sr.selection.state = uiconst.UI_DISABLED 110 else: 111 self.sr.selection.state = uiconst.UI_HIDDEN 112 par = self.FindParentByName('ImageSlider') 113 if par: 114 par.mastertype = self.type 115 116 def IsSelected(self): 117 return bool(self.sr.selection.state == uiconst.UI_DISABLED) 118 119 def GetLayer(self, id): 120 obj = self.FindChild('%sLayer%s' % (self.lname, id)) 121 if obj: 122 return obj 123 124 def GetSprite(self, id): 125 obj = self.FindChild('%sSprite%s' % (self.lname, id)) 126 if obj: 127 return obj 128 129 def GetSpriteColor(self, id): 130 obj = self.GetSprite(id) 131 if obj: 132 return trinity.TriColor(*obj.color.GetRGBA()).AsInt() 133 134 def ClearSprite(self, id): 135 self.SetSprite(id, '', '') 136 137 def SetSprite(self, id, type, mapping): 138 obj = self.GetSprite(id) 139 if not obj: 140 return 141 self.type = type 142 lay = self.GetLayer(id) 143 if lay: 144 if type and mapping: 145 lay.state = uiconst.UI_PICKCHILDREN 146 else: 147 lay.state = uiconst.UI_HIDDEN 148 if lay not in self.retdata: 149 self.retdata[id] = (type, mapping, self.GetSpriteColor(id)) 150 curr = self.retdata[id] 151 self.retdata[id] = (type, mapping, self.GetSpriteColor(id)) 152 return obj 153 154 def SetSpriteColor(self, id, color): 155 obj = self.GetSprite(id) 156 if obj: 157 c = trinity.TriColor() 158 c.FromInt(color) 159 obj.color = (c.r, 160 c.g, 161 c.b, 162 c.a) 163 if id not in self.retdata: 164 self.retdata[id] = ('', None, 0) 165 curr = self.retdata[id] 166 self.retdata[id] = (curr[0], curr[1], color) 167 168 def SetHSV(self, id, hsv): 169 if not self or self.destroyed: 170 return 171 obj = self.GetSprite(id) 172 if obj: 173 obj.color.SetHSV(*hsv) 174 if id not in self.retdata: 175 self.retdata[id] = ('', 0) 176 curr = self.retdata[id] 177 colInt = trinity.TriColor(*obj.color.GetRGBA()).AsInt() 178 self.retdata[id] = (curr[0], curr[1], colInt) 179 180 def MapLogo(self, iconNum, sprite, root): 181 texpix, num = iconNum.split('_') 182 while texpix.find('0') == 0: 183 texpix = texpix[1:] 184 185 texturePath = '%s%s%s.dds' % (root, ['', '0'][int(texpix) < 10], texpix) 186 sprite.SetTexturePath(str(texturePath)) 187 num = int(num) 188 sprite.rectWidth = sprite.rectHeight = 128 189 sprite.rectLeft = [0, 128][num in (2, 4)] 190 sprite.rectTop = [0, 128][num > 2] 191 192 193 class Medal(LayerBase): 194 __guid__ = 'xtriui.Medal' 195 typeID = const.typeMedal 196 197 def Startup(self, data = None): 198 self.Flush() 199 LayerBase.Startup(self, 'Medal', data) 200 201 def SetSprite(self, id, type, iconNum): 202 obj = LayerBase.SetSprite(self, id, type, iconNum) 203 if iconNum and type and obj: 204 self.MapLogo(iconNum, obj, root='res:/UI/Texture/Medals/Medals/%s' % type.lower()) 205 return obj 206 207 208 class Ribbon(LayerBase): 209 __guid__ = 'xtriui.Ribbon' 210 typeID = const.typeRibbon 211 212 def Startup(self, data = None): 213 self.Flush() 214 LayerBase.Startup(self, 'Ribbon', data) 215 216 def SetSprite(self, id, type, iconNum): 217 obj = LayerBase.SetSprite(self, id, type, iconNum) 218 if iconNum and type and obj: 219 self.MapLogo(iconNum, obj, root='res:/UI/Texture/Medals/Ribbons/%s' % type.lower()) 220 return obj 221 222 223 class MedalRibbon(Container): 224 __guid__ = 'xtriui.MedalRibbon' 225 226 def Startup(self, data = None, size = 128, *args): 227 ribbondata = [] 228 medaldata = [] 229 if data is None: 230 data = [] 231 else: 232 ribbon, ribbondata = data[0] 233 medal, medaldata = data[1] 234 top = 0 235 imgSize = size / 2 236 for i, (each, obj, data, toppush, size) in enumerate((('ribbon', 237 ribbon, 238 ribbondata, 239 0, 240 imgSize), ('medal', 241 medal, 242 medaldata, 243 float(imgSize) - float(imgSize) * 20.0 / 128.0, 244 imgSize))): 245 mr = obj(name=each, parent=self, align=uiconst.TOPLEFT, left=0, top=top + int(toppush), width=size, height=size, state=uiconst.UI_NORMAL) 246 mr.Startup(data) 247 setattr(self.sr, each, mr) 248 top += toppush 249 250 251 class ImageSlider(Container): 252 __guid__ = 'xtriui.ImageSlider' 253 254 def ApplyAttributes(self, attributes): 255 Container.ApplyAttributes(self, attributes) 256 self.initing = False 257 self.data = None 258 self.curridx = 0 259 self.cursoridx = 0 260 self.visiblecount = 2 261 self.isBrowsing = False 262 self.sr.dad = None 263 self.sr.dadlayer = None 264 self.isTabStop = 1 265 self.sr.activeframe = None 266 self.selected = 0 267 self.keepselection = False 268 self.width += 4 269 270 def Startup(self, dataset, *args): 271 self.data = dataset 272 self.isTabStop = 1 273 l, t, w, h = self.GetAbsolute() 274 self.Flush() 275 self.visiblecount = w / h - 1 276 self.actualcount = min(len(self.data), self.visiblecount) 277 self.maximumcount = min(len(self.data), self.visiblecount) + 2 278 self.boundaryLeft = 0 279 self.boundaryRight = len(self.data) - self.visiblecount 280 prv = Container(name='ImgSliderPrev', align=uiconst.TOLEFT, width=h / 2, parent=self) 281 prv.OnClick = (self.Browse, -1) 282 self.sr.prev = prv 283 Frame(parent=prv, color=(1.0, 1.0, 1.0, 0.125)) 284 Container(name='push', align=uiconst.TOLEFT, width=2, parent=self) 285 eveIcon.Icon(icon='ui_38_16_223', parent=prv, size=16, left=0, top=0, align=uiconst.CENTER, state=uiconst.UI_DISABLED, hint=localization.GetByLabel('UI/Corporations/CreateDecorationWindow/PreviousItem')) 286 Fill(parent=prv, color=(0.0, 0.0, 0.0, 0.25)) 287 nxt = Container(name='ImgSliderNext', align=uiconst.TORIGHT, width=h / 2, parent=self) 288 nxt.OnClick = (self.Browse, 1) 289 self.sr.next = nxt 290 Frame(parent=nxt, color=(1.0, 1.0, 1.0, 0.125)) 291 Container(name='push', align=uiconst.TORIGHT, width=2, parent=self) 292 eveIcon.Icon(icon='ui_38_16_224', parent=nxt, size=16, left=0, top=0, align=uiconst.CENTER, state=uiconst.UI_DISABLED, hint=localization.GetByLabel('UI/Corporations/CreateDecorationWindow/NextItem')) 293 Fill(parent=nxt, color=(0.0, 0.0, 0.0, 0.25)) 294 self.sr.mainpar = Container(name='ImgSliderMainPar', parent=self, align=uiconst.TOALL, state=uiconst.UI_NORMAL) 295 self.sr.main = Container(name='ImgSliderMain', parent=self.sr.mainpar, align=uiconst.TOALL, state=uiconst.UI_NORMAL, clipChildren=1) 296 self.sr.backgroundFrame = PanelUnderlay(parent=self, padding=(-1, -1, -1, -1)) 297 Fill(parent=self, color=(0.0, 0.0, 0.0, 0.25)) 298 self.Initialize() 299 300 def Initialize(self, *args): 301 if self.initing: 302 return 303 self.initing = True 304 self.PrepareData() 305 self.Browse(0) 306 self.initing = False 307 308 def PrepareData(self): 309 l, t, w, h = self.GetAbsolute() 310 for i in range(self.visiblecount + 2): 311 try: 312 obj, ret = self.data[i - 1] 313 except: 314 obj, ret = (None, None) 315 sys.exc_clear() 316 317 slimdeco = self.sr.main.FindChild('cont_%s' % i) 318 if slimdeco is None: 319 slimdeco = Container(name='cont_%s' % i, parent=self.sr.main, align=uiconst.TOLEFT, left=0, top=0, width=h, state=uiconst.UI_NORMAL) 320 self.SetObject(slimdeco, obj, ret) 321 if i == 0: 322 left = 0 323 324 if self.actualcount < self.visiblecount: 325 self.sr.main.children[-1].Close() 326 327 def GetActiveFrame(self): 328 if self.sr.activeframe is None: 329 self.sr.activeframe = Frame(parent=self.sr.mainpar, left=0, top=0, width=0, height=0, color=(1.0, 330 1.0, 331 1.0, 332 uiconst.ACTIVE_FRAME_ALPHA), idx=0, state=uiconst.UI_HIDDEN) 333 334 def SetObject(self, parent, obj, ret, direction = None): 335 if None in (parent, obj, ret): 336 return 337 se = obj(name='', parent=parent, align=uiconst.TOALL, state=uiconst.UI_NORMAL, pos=(0, 0, 0, 0), idx=0) 338 se.Startup(ret) 339 se.OnClick = (self.OnChildMouseClicked, se) 340 if direction == -1: 341 se.idx = max(0, self.curridx - 1) 342 else: 343 se.idx = len(self.sr.main.children) - 2 + self.curridx 344 se.sr.dad = self 345 parent.sr.obj = se 346 347 def OnChildMouseClicked(self, object, *args): 348 self.cursoridx = object.idx + 1 349 self.OnChildClick(object) 350 351 def OnChildClick(self, object, *args): 352 for each in self.sr.main.children: 353 selector = GetAttrs(each, 'sr', 'obj', 'SetSelected') 354 if selector is not None: 355 selector() 356 357 object.SetSelected(True) 358 self.sr.dad.LoadData(object.data, self.sr.dadlayer) 359 self.PostOnClick(self) 360 361 def PostOnClick(self, *args): 362 pass 363 364 def SetParentListener(self, object, layer = None): 365 self.sr.dad = object 366 self.sr.dadlayer = layer 367 368 def GetEntry(self, idx): 369 se = self.FindChild('sliderEntry_%s' % idx) 370 if se: 371 return se 372 373 def OnSetFocus(self, *args): 374 self.GetActiveFrame() 375 if self.sr.activeframe: 376 self.sr.activeframe.state = uiconst.UI_DISABLED 377 378 def OnKillFocus(self, *args): 379 self.GetActiveFrame() 380 if self.sr.activeframe: 381 self.sr.activeframe.state = uiconst.UI_HIDDEN 382 383 def OnLeft(self, *args): 384 self.DelegateControl(-1) 385 386 def OnRight(self, *args): 387 self.DelegateControl(1) 388 389 def DelegateControl(self, direction, *args): 390 if self.isBrowsing: 391 return 392 shift = uicore.uilib.Key(uiconst.VK_SHIFT) 393 ctrl = uicore.uilib.Key(uiconst.VK_CONTROL) 394 self.cursoridx += direction 395 self.cursoridx = self.GetCurrentCursor() 396 index = self.cursoridx - self.curridx 397 numChildren = len(self.sr.main.children) 398 if index < 0: 399 self.cursoridx = self.curridx + 1 400 self.cursoridx = self.GetCurrentCursor() 401 elif index > numChildren - 1: 402 self.cursoridx = self.curridx + numChildren - 2 403 self.cursoridx = self.GetCurrentCursor() 404 obj = self.sr.main.children[self.cursoridx - self.curridx].sr.obj 405 self.OnChildClick(obj) 406 if direction == 1: 407 if self.cursoridx > self.curridx + self.visiblecount: 408 self.Browse(direction) 409 elif direction == -1: 410 if self.cursoridx <= self.curridx: 411 self.Browse(direction) 412 413 def IsRightDisabled(self, *args): 414 return self.GetCurrentIndex() >= self.boundaryRight 415 416 def IsLeftDisabled(self, *args): 417 return self.GetCurrentIndex() <= self.boundaryLeft 418 419 def GetCurrentIndex(self, *args): 420 return max(0, min(self.curridx, self.boundaryRight)) 421 422 def GetCurrentCursor(self, *args): 423 return max(1, min(self.cursoridx, len(self.data))) 424 425 def Browse(self, direction, *args): 426 if self.isBrowsing: 427 return 428 if direction == 2: 429 for x in xrange(0, 8): 430 self.Browse(1) 431 432 if direction == -2: 433 for x in xrange(0, 8): 434 self.Browse(-1) 435 436 l, t, w, h = self.GetAbsolute() 437 self.isBrowsing = True 438 self.curridx += direction 439 self.curridx = self.GetCurrentIndex() 440 self.cursoridx = self.GetCurrentCursor() 441 colors = {'red': (0.4, 0.13, 0.13, 0.8), 442 'green': (0.27, 0.53, 0.22, 0.8)} 443 if self.IsRightDisabled(): 444 self.sr.next.state = uiconst.UI_DISABLED 445 self.sr.next.opacity = 0.4 446 else: 447 self.sr.next.state = uiconst.UI_NORMAL 448 self.sr.next.opacity = 1.0 449 if self.IsLeftDisabled(): 450 self.sr.prev.state = uiconst.UI_DISABLED 451 self.sr.prev.opacity = 0.4 452 else: 453 self.sr.prev.state = uiconst.UI_NORMAL 454 self.sr.prev.opacity = 1.0 455 if direction == -1: 456 item = self.sr.main.children[-1] 457 item.SetOrder(0) 458 item.Flush() 459 obj, data = self.data[max(0, self.curridx - 1)] 460 self.SetObject(item, obj, data, direction=direction) 461 elif direction == 1: 462 item = self.sr.main.children[0] 463 item.SetOrder(-1) 464 item.Flush() 465 obj, data = self.data[min(self.curridx + self.visiblecount, len(self.data) - 1)] 466 self.SetObject(item, obj, data, direction=direction) 467 self.sr.main.children[0].left = -h 468 for i, each in enumerate(self.sr.main.children[:]): 469 if i > 0: 470 each.left = 0 471 472 self.isBrowsing = False 473 474 475 class MedalRibbonPickerWindow(Window): 476 __guid__ = 'form.MedalRibbonPickerWindow' 477 default_windowID = 'MedalRibbonPickerWindow' 478 default_iconNum = 'res:/ui/Texture/WindowIcons/corporationdecorations.png' 479 480 def ApplyAttributes(self, attributes): 481 Window.ApplyAttributes(self, attributes) 482 self.submitting = False 483 self.currentselection = None 484 self.SetCaption(localization.GetByLabel('UI/Corporations/CreateDecorationWindow/Title')) 485 self.SetMinSize([465, 630]) 486 self.MakeUnResizeable() 487 self.AddSliders() 488 489 def SubmitData(self, *args): 490 if self.submitting: 491 return 492 self.submitting = True 493 missingFields = [] 494 mName = self.sr.medalname.GetValue() 495 if not bool(mName): 496 missingFields.append(localization.GetByLabel('UI/Corporations/CreateDecorationWindow/DecorationName')) 497 mDesc = self.sr.medaldesc.GetAllText() 498 if not bool(mDesc): 499 missingFields.append(localization.GetByLabel('UI/Corporations/CreateDecorationWindow/Description')) 500 rData = self.sr.medalribbonobject.sr.ribbon.GetPrettyData() 501 if not rData: 502 missingFields.append(localization.GetByLabel('UI/Corporations/CreateDecorationWindow/Ribbon')) 503 mData = self.sr.medalribbonobject.sr.medal.GetPrettyData() 504 if not mData: 505 missingFields.append(localization.GetByLabel('UI/Corporations/CreateDecorationWindow/Medal')) 506 walletAccess = walletUtil.HaveAccessToCorpWalletDivision(session.corpAccountKey) 507 if not walletAccess: 508 if prompt_player_fsd_dialog('SelectWalletDivision', {}, uiconst.YESNO) == uiconst.ID_YES: 509 walletUtil.SelectWalletDivision() 510 else: 511 missingFields.append(localization.GetByLabel('UI/Corporations/CreateDecorationWindow/ActiveWalletDivision')) 512 k = getattr(session, 'corpAccountKey') 513 if k is None and localization.GetByLabel('UI/Corporations/CreateDecorationWindow/ActiveWalletDivision') not in missingFields: 514 missingFields.append(localization.GetByLabel('UI/Corporations/CreateDecorationWindow/ActiveWalletDivision')) 515 if missingFields: 516 prompt_player_fsd_dialog('GenericMissingInfo', {'fields': localization.GetByLabel('UI/Map/StarMap/lblBoldName', name=', '.join(missingFields))}) 517 self.submitting = False 518 return 519 cMedalData = [] 520 for lid, (type, mapping, color) in rData.iteritems(): 521 cMedalData.append([1, '.'.join((type, mapping)), color]) 522 523 for lid, (type, mapping, color) in mData.iteritems(): 524 cMedalData.append([2, '.'.join((type, mapping)), color]) 525 526 try: 527 sm.StartService('medals').CreateMedal(mName, mDesc, cMedalData) 528 self.Close() 529 finally: 530 self.submitting = False 531 532 def AddSliders(self, *args): 533 self.currentselection = None 534 self.ribbonsliders = [] 535 self.medalsliders = [] 536 self.sr.main.Flush() 537 ribbondata = [Ribbon, [('', None, None), 538 ('', None, None), 539 ('', None, None), 540 ('', None, None), 541 ('', None, None)]] 542 medaldata = [Medal, [('', None, None), 543 ('', None, None), 544 ('', None, None), 545 ('', None, None)]] 546 top = 0 547 imgSize = 128 548 self.sr.buttoncont = ContainerAutoSize(name='Buttons', align=uiconst.TOBOTTOM, parent=self.sr.main) 549 self.sr.mainpar = Container(name='MainPar', align=uiconst.TOALL, parent=self.sr.main, pos=(0, 0, 0, 0)) 550 mp = Container(name='Left', align=uiconst.TOLEFT, width=imgSize, left=const.defaultPadding, top=const.defaultPadding, parent=self.sr.mainpar) 551 medalribbonobject = MedalRibbon(name='MedalRibbonParent', width=128, height=256, parent=mp, align=uiconst.CENTER) 552 medalribbonobject.Startup([ribbondata, medaldata], imgSize * 2) 553 self.sr.medalribbonobject = medalribbonobject 554 btns = [] 555 btns.append([localization.GetByLabel('UI/Corporations/CreateDecorationWindow/Submit'), 556 self.SubmitData, 557 None, 558 None]) 559 btns.append([localization.GetByLabel('UI/Corporations/CreateDecorationWindow/Reset'), 560 self.AddSliders, 561 None, 562 None]) 563 buttons = ButtonGroup(btns=btns, parent=self.sr.buttoncont, button_size_mode=ButtonSizeMode.DYNAMIC) 564 self.sr.mainselector = Container(name='MainSelector', align=uiconst.TOALL, parent=self.sr.mainpar, pos=(const.defaultPadding, 565 0, 566 const.defaultPadding, 567 0)) 568 uix.GetContainerHeader(localization.GetByLabel('UI/Contracts/BasicInfo'), self.sr.mainselector, 0) 569 Container(name='push', align=uiconst.TOTOP, height=6, parent=self.sr.mainselector) 570 medalnamecont = Container(parent=self.sr.mainselector, align=uiconst.TOTOP) 571 Container(name='push', align=uiconst.TOTOP, height=24, parent=medalnamecont) 572 Container(name='push', align=uiconst.TOLEFT, width=4, parent=medalnamecont) 573 Container(name='push', align=uiconst.TORIGHT, width=4, parent=medalnamecont) 574 self.sr.medalname = SingleLineEditText(name='medalname', parent=medalnamecont, setvalue=None, pos=(0, 12, 284, 0), label=localization.GetByLabel('UI/Corporations/CreateDecorationWindow/DecorationName'), maxLength=100) 575 top = const.defaultPadding + self.sr.medalname.top + self.sr.medalname.height 576 eveLabel.EveLabelSmall(text=localization.GetByLabel('UI/Corporations/CreateDecorationWindow/Description'), parent=medalnamecont, top=top, width=100) 577 self.sr.medaldesc = EditPlainText(setvalue='', parent=medalnamecont, align=uiconst.TOPLEFT, name='medaldesc', maxLength=1000, top=top + 16, left=-1, width=286, height=64) 578 medalnamecont.height = self.sr.medalname.height + self.sr.medaldesc.height + 8 + 23 579 Container(name='push', align=uiconst.TOTOP, height=4, parent=self.sr.mainselector) 580 uix.GetContainerHeader(localization.GetByLabel('UI/Corporations/CreateDecorationWindow/Ribbon'), self.sr.mainselector, 1) 581 labels = ['caldari', 582 'minmatar', 583 'gallente', 584 'amarr'] 585 data = [] 586 for label in labels: 587 data.append([Ribbon, [(label, '1_1', None), 588 ('', None, None), 589 ('', None, None), 590 ('', None, None), 591 (label, '1_2', None)]]) 592 593 slider = self.GetImageSlider(data) 594 slider.SetParentListener(self.sr.medalribbonobject.sr.ribbon, None) 595 slider.SetAlign(uiconst.TOPRIGHT) 596 slider.PostOnClick = self.PostOnClick 597 self.sr.baseribbonslider = slider 598 self.ribbonsliders.append(slider) 599 parent = slider.parent 600 colorPreview = ColorPreview(name='colorPreview', align=uiconst.TORIGHT, height=32, width=32) 601 Frame(parent=colorPreview, color=(1.0, 1.0, 1.0, 0.5)) 602 colorPreview.Startup() 603 colorPreview.sr.layerid = 4 604 colorPreview.sr.dad = self.sr.medalribbonobject.sr.ribbon 605 colorPreview.FromInt(-330271) 606 colorPreview.state = uiconst.UI_HIDDEN 607 push = Container(name='push', align=uiconst.TORIGHT, height=32, width=4) 608 slider.parent.children.insert(0, push) 609 slider.parent.children.insert(0, colorPreview) 610 ranger = range(1, 4) 611 ranger.reverse() 612 for x in ranger: 613 data = [] 614 data = self.GetRibbonShapeData('Caldari') 615 slider = self.GetImageSlider(data, True) 616 slider.SetParentListener(self.sr.medalribbonobject.sr.ribbon, x) 617 slider.SetAlign(uiconst.TOPRIGHT) 618 slider.PostOnClick = self.PostOnClick 619 parent = slider.parent 620 self.AddSliderReset(slider) 621 colorPreview = ColorPreview(name='colorPreview', align=uiconst.TORIGHT, width=32, height=32) 622 Frame(parent=colorPreview, color=(1.0, 1.0, 1.0, 0.5)) 623 colorPreview.Startup() 624 colorPreview.sr.layerid = x 625 colorPreview.sr.dad = self.sr.medalribbonobject.sr.ribbon 626 colorPreview.FromInt(-330271) 627 colorPreview.state = uiconst.UI_HIDDEN 628 push = Container(name='push', align=uiconst.TORIGHT, height=32, width=4) 629 slider.parent.children.insert(0, push) 630 slider.parent.children.insert(0, colorPreview) 631 slider.parent.state = uiconst.UI_HIDDEN 632 self.ribbonsliders.append(slider) 633 634 Container(name='push', align=uiconst.TOTOP, height=4, parent=self.sr.mainselector) 635 uix.GetContainerHeader(localization.GetByLabel('UI/Corporations/CreateDecorationWindow/Medal'), self.sr.mainselector, 1) 636 labels = (('compass', 2), 637 ('imperial', 2), 638 ('pentagon', 1), 639 ('rombus', 1), 640 ('round', 6), 641 ('shield', 1), 642 ('square', 2), 643 ('star', 7)) 644 data = [] 645 for label, amount in labels: 646 for x in xrange(0, amount * 4): 647 icon = '%s_%s' % (x / 4 + 1, x % 4 + 1) 648 data.append([Medal, [(label, icon, None)]]) 649 650 slider = self.GetImageSlider(data) 651 slider.SetParentListener(self.sr.medalribbonobject.sr.medal, 3) 652 slider.SetAlign(uiconst.TOPRIGHT) 653 slider.PostOnClick = self.PostOnClick 654 self.sr.basemedalslider = slider 655 self.medalsliders.append(slider) 656 labels = (('elements', 33),) 657 ranger = range(0, 3) 658 ranger.reverse() 659 for i in ranger: 660 data = [] 661 for label, amount in labels: 662 for x in xrange(0, amount * 4): 663 icon = '%s_%s' % (x / 4 + 1, x % 4 + 1) 664 data.append([Medal, [(label, icon, None)]]) 665 666 slider = self.GetImageSlider(data) 667 slider.SetParentListener(self.sr.medalribbonobject.sr.medal, i) 668 slider.PostOnClick = self.PostOnClick 669 slider.SetAlign(uiconst.TOPRIGHT) 670 slider.parent.state = uiconst.UI_HIDDEN 671 self.AddSliderReset(slider) 672 self.medalsliders.append(slider) 673 674 def AddSliderReset(self, slider): 675 rem = Container(name='ImgSliderRemove', align=uiconst.TOLEFT, width=16, height=32) 676 Frame(parent=rem, color=(1.0, 1.0, 1.0, 0.125)) 677 dbtn = eveIcon.Icon(icon='ui_38_16_111', parent=rem, size=16, left=0, top=0, align=uiconst.CENTER) 678 dbtn.OnClick = (self.ResetSlider, dbtn) 679 dbtn.hint = localization.GetByLabel('UI/Corporations/CreateDecorationWindow/ResetItem') 680 dbtn.slider = slider 681 Fill(parent=rem, color=(0.0, 0.0, 0.0, 0.25)) 682 push = Container(name='push', align=uiconst.TOLEFT, height=32, width=4) 683 slider.parent.children.insert(0, rem) 684 slider.parent.children.insert(0, push) 685 686 def ResetSlider(self, obj, *args): 687 slider = obj.slider 688 slider.sr.dad.ClearSprite(slider.sr.dadlayer) 689 slider.parent.state = uiconst.UI_HIDDEN 690 691 def PostOnClick(self, obj, *args): 692 if obj in self.ribbonsliders: 693 idx = self.ribbonsliders.index(obj) 694 nidx = idx + 1 695 colorPreview = obj.parent.FindChild('colorPreview') 696 if colorPreview: 697 colorPreview.state = uiconst.UI_PICKCHILDREN 698 if len(self.ribbonsliders) <= nidx: 699 return 700 self.ribbonsliders[nidx].parent.state = uiconst.UI_PICKCHILDREN 701 if idx == 0: 702 mtype = getattr(obj, 'mastertype', None) 703 if mtype is not None and self.currentselection != mtype: 704 for slider in self.ribbonsliders[1:]: 705 slider.sr.dad.ClearSprite(slider.sr.dadlayer) 706 data = self.GetRibbonShapeData(mtype) 707 slider.Startup(data) 708 709 elif obj in self.medalsliders: 710 idx = self.medalsliders.index(obj) 711 nidx = idx + 1 712 if len(self.medalsliders) <= nidx: 713 return 714 self.medalsliders[nidx].parent.state = uiconst.UI_PICKCHILDREN 715 self.currentselection = getattr(self.ribbonsliders[0], 'mastertype', None) 716 717 def GetImageSlider(self, data, ks = False, *args): 718 size, amount = (32, 7) 719 cont = Container(name='ImageSliderPar', parent=self.sr.mainselector, align=uiconst.TOTOP, height=size, top=const.defaultPadding, state=uiconst.UI_NORMAL) 720 slider = ImageSlider(name='ImageSlider', parent=cont, clipChildren=0, align=uiconst.TOPLEFT, width=size * amount, height=size, left=const.defaultPadding + size, state=uiconst.UI_NORMAL) 721 if ks: 722 slider.keepselection = True 723 slider.Startup(data) 724 return slider 725 726 def GetRibbonShapeData(self, selectedRace, *args): 727 labels = [(selectedRace, 11)] 728 ret = [] 729 for label, amount in labels: 730 for x in xrange(4, amount): 731 icon = '%s_%s' % (x / 4 + 1, x % 4 + 1) 732 ret.append([Ribbon, [(label, icon, None)]]) 733 734 return ret 735 736 737 class RankEntry(LabelTextTop): 738 __guid__ = 'listentry.RankEntry' 739 __params__ = ['label', 740 'text', 741 'warFactionID', 742 'rank'] 743 744 def Startup(self, *args): 745 LabelTextTop.Startup(self, *args) 746 rankobject = Rank(name='rankobject', align=uiconst.CENTERLEFT, left=3, parent=self, idx=0) 747 self.sr.rankobject = rankobject 748 749 def Load(self, node): 750 LabelTextTop.Load(self, node) 751 self.sr.label.left = self.sr.text.left = self.height + 10 752 self.sr.label.top = 9 753 self.sr.text.top = self.sr.label.top + self.sr.label.textheight 754 size = node.Get('iconsize', 48) 755 self.sr.rankobject.width = self.sr.rankobject.height = size 756 self.sr.rankobject.Startup(node.warFactionID, node.rank) 757 758 def ShowInfo(self, *args): 759 typeID = self.sr.node.Get('typeID', None) 760 warFactionID = self.sr.node.Get('warFactionID', None) 761 currentRank = self.sr.node.Get('rank', None) 762 if None not in (typeID, warFactionID, currentRank): 763 abstractinfo = utillib.KeyVal(warFactionID=warFactionID, currentRank=currentRank) 764 sm.GetService('info').ShowInfo(typeID, abstractinfo=abstractinfo) 765 766 def GetHeight(self, *args): 767 node, width = args 768 iconSize = node.Get('iconsize', 48) 769 labelheight = uix.GetTextHeight(node.label, fontsize=fontconst.EVE_SMALL_FONTSIZE, maxLines=1, uppercase=1) 770 textheight = uix.GetTextHeight(node.text, fontsize=fontconst.EVE_MEDIUM_FONTSIZE, maxLines=1) 771 node.height = max(iconSize, 18 + labelheight + textheight) 772 return node.height 773 774 775 class MedalRibbonEntry(LabelTextTop): 776 __guid__ = 'listentry.MedalRibbonEntry' 777 __params__ = ['label', 'text', 'abstractinfo'] 778 779 def Startup(self, *args): 780 LabelTextTop.Startup(self, *args) 781 medalribbonobject = MedalRibbon(name='MedalRibbonParent', parent=self, align=uiconst.TOPLEFT, width=32, height=32, left=1, top=1) 782 self.sr.medalribbonobject = medalribbonobject 783 784 def Load(self, node): 785 LabelTextTop.Load(self, node) 786 self.sr.medalribbonobject.Flush() 787 typeID = node.Get('typeID', None) 788 itemID = node.Get('itemID', None) 789 abstractinfo = node.Get('abstractinfo', None) 790 if None not in (typeID, itemID, abstractinfo): 791 self.sr.infoicon.state = uiconst.UI_NORMAL 792 else: 793 self.sr.infoicon.state = uiconst.UI_HIDDEN 794 size = node.Get('iconsize', 32) 795 self.sr.icon.state = uiconst.UI_HIDDEN 796 self.sr.medalribbonobject.width = size * 2 797 self.sr.medalribbonobject.height = size 798 self.sr.medalribbonobject.left = 8 799 self.sr.medalribbonobject.top = 3 800 self.sr.medalribbonobject.Startup(node.abstractinfo, size) 801 self.sr.label.left = self.sr.text.left = 32 802 803 def ShowInfo(self, *args): 804 if self.sr.node.Get('typeID', None) and self.sr.node.Get('abstractinfo', None): 805 sm.GetService('info').ShowInfo(self.sr.node.typeID, self.sr.node.itemID, abstractinfo=self.sr.node.Get('abstractinfo', None)) 806 807 def GetHeight(self, *args): 808 node, width = args 809 labelheight = uix.GetTextHeight(node.label, fontsize=EVE_SMALL_FONTSIZE, maxLines=1, uppercase=1) 810 textheight = uix.GetTextHeight(node.text, fontsize=EVE_MEDIUM_FONTSIZE, maxLines=1) 811 size = node.Get('iconsize', 32) 812 node.height = max(labelheight + textheight, size) + 2 813 return node.height