110 lines
3.4 KiB
Python
110 lines
3.4 KiB
Python
import os
|
|
import subprocess
|
|
import config
|
|
|
|
# noinspection PyPackageRequirements
|
|
import wx
|
|
|
|
from .helpers import AutoListCtrl
|
|
|
|
_t = wx.GetTranslation
|
|
|
|
class ItemEffects(wx.Panel):
|
|
def __init__(self, parent, stuff, item):
|
|
wx.Panel.__init__(self, parent)
|
|
self.item = item
|
|
|
|
mainSizer = wx.BoxSizer(wx.VERTICAL)
|
|
|
|
self.effectList = AutoListCtrl(self, wx.ID_ANY,
|
|
style=wx.LC_REPORT | wx.LC_SINGLE_SEL | wx.LC_VRULES | wx.NO_BORDER)
|
|
mainSizer.Add(self.effectList, 1, wx.ALL | wx.EXPAND, 0)
|
|
self.SetSizer(mainSizer)
|
|
|
|
self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnClick, self.effectList)
|
|
|
|
self.PopulateList()
|
|
|
|
def PopulateList(self):
|
|
|
|
self.effectList.InsertColumn(0, _t("Name"))
|
|
self.effectList.InsertColumn(1, _t("Active"))
|
|
self.effectList.InsertColumn(2, _t("Type"))
|
|
if config.debug:
|
|
self.effectList.InsertColumn(3, _t("Run Time"))
|
|
self.effectList.InsertColumn(4, _t("ID"))
|
|
|
|
# self.effectList.SetColumnWidth(0,385)
|
|
|
|
self.effectList.setResizeColumn(0)
|
|
self.effectList.SetColumnWidth(1, 50)
|
|
self.effectList.SetColumnWidth(2, 80)
|
|
if config.debug:
|
|
self.effectList.SetColumnWidth(3, 65)
|
|
self.effectList.SetColumnWidth(4, 40)
|
|
|
|
item = self.item
|
|
self.effects = effects = item.effects
|
|
names = list(effects.keys())
|
|
names.sort()
|
|
|
|
for name in names:
|
|
index = self.effectList.InsertItem(self.effectList.GetItemCount(), name)
|
|
|
|
if effects[name].isImplemented:
|
|
if effects[name].activeByDefault:
|
|
activeByDefault = _t("Yes")
|
|
else:
|
|
activeByDefault = _t("No")
|
|
else:
|
|
activeByDefault = ""
|
|
|
|
effectTypeText = ""
|
|
if effects[name].type:
|
|
for effectType in effects[name].type:
|
|
effectTypeText += effectType + " "
|
|
pass
|
|
|
|
if effects[name].runTime and effects[name].isImplemented:
|
|
effectRunTime = str(effects[name].runTime)
|
|
else:
|
|
effectRunTime = ""
|
|
|
|
self.effectList.SetItem(index, 1, activeByDefault)
|
|
self.effectList.SetItem(index, 2, effectTypeText)
|
|
if config.debug:
|
|
self.effectList.SetItem(index, 3, effectRunTime)
|
|
self.effectList.SetItem(index, 4, str(effects[name].ID))
|
|
|
|
self.effectList.RefreshRows()
|
|
self.Layout()
|
|
|
|
def OnClick(self, event):
|
|
"""
|
|
Debug use: toggle effects on/off.
|
|
Affects *ALL* items that use that effect.
|
|
Is not stateful. Will reset if Pyfa is closed and reopened.
|
|
"""
|
|
|
|
try:
|
|
activeByDefault = getattr(self.item.effects[event.GetText()], "activeByDefault")
|
|
if activeByDefault:
|
|
setattr(self.item.effects[event.GetText()], "activeByDefault", False)
|
|
else:
|
|
setattr(self.item.effects[event.GetText()], "activeByDefault", True)
|
|
|
|
except AttributeError:
|
|
# Attribute doesn't exist, do nothing
|
|
pass
|
|
|
|
self.RefreshValues(event)
|
|
|
|
def RefreshValues(self, event):
|
|
self.Freeze()
|
|
self.effectList.ClearAll()
|
|
self.PopulateList()
|
|
self.effectList.RefreshRows()
|
|
self.Layout()
|
|
self.Thaw()
|
|
event.Skip()
|