diff --git a/.gitignore b/.gitignore index 96e9e15a3..13032ec18 100644 --- a/.gitignore +++ b/.gitignore @@ -13,7 +13,7 @@ *.patch #Personal -saveddata/ +/saveddata/ #PyCharm .idea/ diff --git a/gpl.txt b/LICENSE similarity index 100% rename from gpl.txt rename to LICENSE diff --git a/README.md b/README.md index 69e22cd49..94fe0fc6c 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,48 @@ -# Pyfa +# pyfa -Pyfa is a cross-platform desktop fitting application for EVE online that can be used natively on any platform where python and wxwidgets are available. +![pyfa](https://cloud.githubusercontent.com/assets/3904767/10271512/af385ef2-6ade-11e5-8f67-52b8b1e4c797.PNG) -It provides many advanced features such as graphs and full calculations of any possible combination of modules, fits, etc. +## What is it? -Please see the [FAQ](https://github.com/DarkFenX/Pyfa/wiki/FAQ) for answers to common questions / concerns +pyfa, short for **py**thon **f**itting **a**ssistant, allows you to create, experiment with, and save ship fittings without being in game. Open source and written in Python, it is available on any platform where Python 2.x and wxWidgets are available, including Windows, Mac OS X, and Linux. -#### A note for Linux users -pyfa currently only supports wxPython 2.8. However, there are some distros that have started to support 3.0 and subsequently dropped support for 2.8 altogether (such as Debian Jessie). If this is the case and wxPython 3.0 is the only version installed, the official pyfa releases will not run. You must either find a package for 2.8 or compile it yourself. +## Latest Version and Changelogs +The latest version along with release notes can always be found on the projects [Releases](https://github.com/DarkFenX/Pyfa/releases) page. pyfa will notify you if you are running an outdated version. -For Debian Jessie, wxPython 2.8 is available in Sid (the unstable repo). you can use apt-pinning to install select packages from unstable and still keep your stable system. See http://jaqque.sbih.org/kplug/apt-pinning.html for me details. +## Installing +Windows and OS X users are supplied self-contained builds of pyfa that can be run without additional software. An `.exe` installer is also available for the Windows builds. There is no self-contained package for Linux users, which are expected to run pyfa through their distributions Python interpreter. However, there are a number of third-party packages available that handle the dependencies and updates for pyfa (for example, [pyfa for Arch Linux](https://aur.archlinux.org/packages/pyfa/)). Please check your distributions repositories. -3.0 support is being worked on and can be found on the wx3 branch. It may be stable enough for you, but there are a few bugs related to it. Please see the wx3 label on the GitHub issues area for me information on known issues (biggest one currently is GTK warning spam): https://github.com/DarkFenX/Pyfa/labels/wx3 +## Requirements +If you wish to help with development or simply need to run pyfa through a Python interpreter, the following software is required: -#### Links -* [Development repository: http://github.com/DarkFenX/Pyfa](http://github.com/DarkFenX/Pyfa) -* [XMPP conference: -pyfa@conference.jabber.org](pyfa@conference.jabber.org) +* Python >= 2.6 +* `wxPython` 2.8/3.0 +* `sqlalchemy` >= 0.6 +* `dateutil` +* `matplotlib` (for some Linux distributions, you may need to install separate wxPython bindings, such as `python-matplotlib-wx`) +* `requests` + +## Bug Reporting +The preferred method of reporting bugs is through the projects GitHub Issues interface. Alternatively, posting a report in the pyfa thread on the official EVE Online forums is acceptable. Guidelines for bug reporting can be found on [this wiki page](https://github.com/DarkFenX/Pyfa/wiki/Bug-Reporting). + +## License +pyfa is licensed under the GNU GPL v3.0, see LICENSE + +## Resources +* Development repository: [http://github.com/DarkFenX/Pyfa](http://github.com/DarkFenX/Pyfa) +* XMPP conference: [pyfa@conference.jabber.org](pyfa@conference.jabber.org) * [EVE forum thread](http://forums.eveonline.com/default.aspx?g=posts&t=247609) +* [EVE University guide using pyfa](http://wiki.eveuniversity.org/Guide_to_using_PYFA) * [EVE Online website](http://www.eveonline.com/) +## Contacts: +* Kadesh Priestess + * GitHub: @DarkFenX + * [TweetFleet Slack](https://www.fuzzwork.co.uk/tweetfleet-slack-invites/): @kadesh +* Sable Blitzmann + * GitHub: @blitzmann + * [TweetFleet Slack](https://www.fuzzwork.co.uk/tweetfleet-slack-invites/): @blitzmann + * Email: sable.blitzmann@gmail.com + +## CCP Copyright Notice +EVE Online, the EVE logo, EVE and all associated logos and designs are the intellectual property of CCP hf. All artwork, screenshots, characters, vehicles, storylines, world facts or other recognizable features of the intellectual property relating to these trademarks are likewise the intellectual property of CCP hf. EVE Online and the EVE logo are the registered trademarks of CCP hf. All rights are reserved worldwide. All other trademarks are the property of their respective owners. CCP hf. has granted permission to Osmium to use EVE Online and all associated logos and designs for promotional and information purposes on its website but does not endorse, and is not in any way affiliated with, Osmium. CCP is in no way responsible for the content on or functioning of this website, nor can it be liable for any damage arising from the use of this website. diff --git a/config.py b/config.py index 92631db4c..0489f1110 100644 --- a/config.py +++ b/config.py @@ -17,21 +17,15 @@ debug = False # Defines if our saveddata will be in pyfa root or not saveInRoot = False -if debug: - logLevel = logging.DEBUG -else: - logLevel = logging.WARN - # Version data -version = "1.14.1" -tag = "git" -expansionName = "Galatea" -expansionVersion = "1.2" +version = "1.16.2" +tag = "Stable" +expansionName = "Parallax" +expansionVersion = "1.1" evemonMinVersion = "4081" pyfaPath = None savePath = None -staticPath = None saveDB = None gameDB = None @@ -50,23 +44,40 @@ class StreamToLogger(object): for line in buf.rstrip().splitlines(): self.logger.log(self.log_level, line.rstrip()) +def isFrozen(): + if hasattr(sys, 'frozen'): + return True + else: + return False + +def getPyfaRoot(): + base = getattr(sys.modules['__main__'], "__file__", sys.executable) if isFrozen() else sys.argv[0] + root = os.path.dirname(os.path.realpath(os.path.abspath(base))) + root = unicode(root, sys.getfilesystemencoding()) + return root + def __createDirs(path): if not os.path.exists(path): os.makedirs(path) def defPaths(): + global debug global pyfaPath global savePath - global staticPath global saveDB global gameDB global saveInRoot + + if debug: + logLevel = logging.DEBUG + else: + logLevel = logging.WARN + # The main pyfa directory which contains run.py # Python 2.X uses ANSI by default, so we need to convert the character encoding pyfaPath = getattr(configforced, "pyfaPath", pyfaPath) if pyfaPath is None: - pyfaPath = unicode(os.path.dirname(os.path.realpath(os.path.abspath( - sys.modules['__main__'].__file__))), sys.getfilesystemencoding()) + pyfaPath = getPyfaRoot() # Where we store the saved fits etc, default is the current users home directory if saveInRoot is True: @@ -81,6 +92,9 @@ def defPaths(): __createDirs(savePath) + if isFrozen(): + os.environ["REQUESTS_CA_BUNDLE"] = os.path.join(pyfaPath, "cacert.pem") + format = '%(asctime)s %(name)-24s %(levelname)-8s %(message)s' logging.basicConfig(format=format, level=logLevel) handler = logging.handlers.RotatingFileHandler(os.path.join(savePath, "log.txt"), maxBytes=1000000, backupCount=3) @@ -95,13 +109,10 @@ def defPaths(): sl = StreamToLogger(stdout_logger, logging.INFO) sys.stdout = sl - stderr_logger = logging.getLogger('STDERR') - sl = StreamToLogger(stderr_logger, logging.ERROR) - sys.stderr = sl - - # Static EVE Data from the staticdata repository, should be in the staticdata - # directory in our pyfa directory - staticPath = os.path.join(pyfaPath, "staticdata") + # This interferes with cx_Freeze's own handling of exceptions. Find a way to fix this. + #stderr_logger = logging.getLogger('STDERR') + #sl = StreamToLogger(stderr_logger, logging.ERROR) + #sys.stderr = sl # The database where we store all the fits etc saveDB = os.path.join(savePath, "saveddata.db") @@ -109,7 +120,7 @@ def defPaths(): # The database where the static EVE data from the datadump is kept. # This is not the standard sqlite datadump but a modified version created by eos # maintenance script - gameDB = os.path.join(staticPath, "eve.db") + gameDB = os.path.join(pyfaPath, "eve.db") ## DON'T MODIFY ANYTHING BELOW ## import eos.config diff --git a/dist_assets/mac/pyfa.icns b/dist_assets/mac/pyfa.icns new file mode 100644 index 000000000..a85c47e13 Binary files /dev/null and b/dist_assets/mac/pyfa.icns differ diff --git a/dist_assets/win/pyfa.ico b/dist_assets/win/pyfa.ico new file mode 100644 index 000000000..9c7c30801 Binary files /dev/null and b/dist_assets/win/pyfa.ico differ diff --git a/eos/capSim.py b/eos/capSim.py index 0057e48cb..a5ed4a8d1 100644 --- a/eos/capSim.py +++ b/eos/capSim.py @@ -59,26 +59,20 @@ class CapSimulator(object): return duration, capNeed def init(self, modules): - """prepare modules. a list of (duration, capNeed, clipSize) tuples is + """prepare modules. a list of (duration, capNeed, clipSize, disableStagger) tuples is expected, with clipSize 0 if the module has infinite ammo. """ - mods = {} - for module in modules: - if module in mods: - mods[module] += 1 - else: - mods[module] = 1 - - self.modules = mods - + self.modules = modules def reset(self): """Reset the simulator state""" self.state = [] + mods = {} period = 1 disable_period = False - for (duration, capNeed, clipSize), amount in self.modules.iteritems(): + # Loop over modules, clearing clipSize if applicable, and group modules based on attributes + for (duration, capNeed, clipSize, disableStagger) in self.modules: if self.scale: duration, capNeed = self.scale_activation(duration, capNeed) @@ -87,7 +81,15 @@ class CapSimulator(object): if not self.reload and capNeed > 0: clipSize = 0 - if self.stagger: + # Group modules based on their properties + if (duration, capNeed, clipSize, disableStagger) in mods: + mods[(duration, capNeed, clipSize, disableStagger)] += 1 + else: + mods[(duration, capNeed, clipSize, disableStagger)] = 1 + + # Loop over grouped modules, configure staggering and push to the simulation state + for (duration, capNeed, clipSize, disableStagger), amount in mods.iteritems(): + if self.stagger and not disableStagger: if clipSize == 0: duration = int(duration/amount) else: @@ -167,13 +169,13 @@ class CapSimulator(object): iterations += 1 + t_last = t_now + if cap < cap_lowest: if cap < 0.0: break cap_lowest = cap - t_last = t_now - # queue the next activation of this module t_now += duration shot += 1 diff --git a/eos/config.py b/eos/config.py index 042605466..6e30afb03 100644 --- a/eos/config.py +++ b/eos/config.py @@ -4,7 +4,7 @@ import sys debug = False gamedataCache = True saveddataCache = True -gamedata_connectionstring = 'sqlite:///' + unicode(realpath(join(dirname(abspath(__file__)), "..", "staticdata", "eve.db")), sys.getfilesystemencoding()) +gamedata_connectionstring = 'sqlite:///' + unicode(realpath(join(dirname(abspath(__file__)), "..", "eve.db")), sys.getfilesystemencoding()) saveddata_connectionstring = 'sqlite:///' + unicode(realpath(join(dirname(abspath(__file__)), "..", "saveddata", "saveddata.db")), sys.getfilesystemencoding()) #Autodetect path, only change if the autodetection bugs out. diff --git a/eos/db/__init__.py b/eos/db/__init__.py index 8867d63c5..7aef55fd7 100644 --- a/eos/db/__init__.py +++ b/eos/db/__init__.py @@ -68,14 +68,8 @@ from eos.db.gamedata import * from eos.db.saveddata import * #Import queries -from eos.db.gamedata.queries import getItem, searchItems, getVariations, getItemsByCategory, directAttributeRequest, \ - getMarketGroup, getGroup, getCategory, getAttributeInfo, getMetaData, getMetaGroup -from eos.db.saveddata.queries import getUser, getCharacter, getFit, getFitsWithShip, countFitsWithShip, searchFits, \ - getCharacterList, getPrice, getDamagePatternList, getDamagePattern, \ - getFitList, getFleetList, getFleet, save, remove, commit, add, \ - getCharactersForUser, getMiscData, getSquadsIDsWithFitID, getWing, \ - getSquad, getBoosterFits, getProjectedFits, getTargetResistsList, getTargetResists,\ - clearPrices, countAllFits +from eos.db.gamedata.queries import * +from eos.db.saveddata.queries import * #If using in memory saveddata, you'll want to reflect it so the data structure is good. if config.saveddata_connectionstring == "sqlite:///:memory:": diff --git a/eos/db/migration.py b/eos/db/migration.py index b04df38ae..c99be1ffc 100644 --- a/eos/db/migration.py +++ b/eos/db/migration.py @@ -3,22 +3,15 @@ import shutil import time import re import os - -def getAppVersion(): - # calculate app version based on upgrade files we have - appVersion = 0 - for fname in os.listdir(os.path.join(os.path.dirname(__file__), "migrations")): - m = re.match("^upgrade(?P\d+)\.py$", fname) - if not m: - continue - index = int(m.group("index")) - appVersion = max(appVersion, index) - return appVersion +import migrations def getVersion(db): cursor = db.execute('PRAGMA user_version') return cursor.fetchone()[0] +def getAppVersion(): + return migrations.appVersion + def update(saveddata_engine): dbVersion = getVersion(saveddata_engine) appVersion = getAppVersion() @@ -37,10 +30,11 @@ def update(saveddata_engine): shutil.copyfile(config.saveDB, toFile) for version in xrange(dbVersion, appVersion): - module = __import__("eos.db.migrations.upgrade{}".format(version + 1), fromlist=True) - upgrade = getattr(module, "upgrade", False) - if upgrade: - upgrade(saveddata_engine) + + func = migrations.updates[version+1] + if func: + print "applying update",version+1 + func(saveddata_engine) # when all is said and done, set version to current saveddata_engine.execute("PRAGMA user_version = {}".format(appVersion)) diff --git a/eos/db/migrations/__init__.py b/eos/db/migrations/__init__.py index 16c939868..87988fb3d 100644 --- a/eos/db/migrations/__init__.py +++ b/eos/db/migrations/__init__.py @@ -7,3 +7,25 @@ define an upgrade() function with the logic. Please note that there must be as many upgrade files as there are database versions (version 5 would include upgrade files 1-5) """ + +import pkgutil +import re + + +updates = {} +appVersion = 0 + +prefix = __name__ + "." +for importer, modname, ispkg in pkgutil.iter_modules(__path__, prefix): + # loop through python files, extracting update number and function, and + # adding it to a list + modname_tail = modname.rsplit('.', 1)[-1] + module = __import__(modname, fromlist=True) + m = re.match("^upgrade(?P\d+)$", modname_tail) + if not m: + continue + index = int(m.group("index")) + appVersion = max(appVersion, index) + upgrade = getattr(module, "upgrade", False) + if upgrade: + updates[index] = upgrade diff --git a/eos/db/saveddata/__init__.py b/eos/db/saveddata/__init__.py index 31e71c01a..683fb499d 100644 --- a/eos/db/saveddata/__init__.py +++ b/eos/db/saveddata/__init__.py @@ -1,3 +1,18 @@ -__all__ = ["character", "fit", "module", "user", "skill", "price", - "booster", "drone", "implant", "fleet", "damagePattern", - "miscData", "targetResists"] +__all__ = [ + "character", + "fit", + "module", + "user", + "skill", + "price", + "booster", + "drone", + "implant", + "fleet", + "damagePattern", + "miscData", + "targetResists", + "override", + "crest" +] + diff --git a/eos/db/saveddata/crest.py b/eos/db/saveddata/crest.py new file mode 100644 index 000000000..0934f177e --- /dev/null +++ b/eos/db/saveddata/crest.py @@ -0,0 +1,31 @@ +#=============================================================================== +# Copyright (C) 2010 Diego Duclos +# +# This file is part of eos. +# +# eos is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# eos is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with eos. If not, see . +#=============================================================================== + +from sqlalchemy import Table, Column, Integer, String, Boolean +from sqlalchemy.orm import mapper + +from eos.db import saveddata_meta +from eos.types import CrestChar + +crest_table = Table("crest", saveddata_meta, + Column("ID", Integer, primary_key = True), + Column("name", String, nullable = False, unique = True), + Column("refresh_token", String, nullable = False)) + +mapper(CrestChar, crest_table) diff --git a/eos/db/saveddata/override.py b/eos/db/saveddata/override.py new file mode 100644 index 000000000..2d5d74a47 --- /dev/null +++ b/eos/db/saveddata/override.py @@ -0,0 +1,31 @@ +#=============================================================================== +# Copyright (C) 2010 Diego Duclos +# +# This file is part of eos. +# +# eos is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# eos is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with eos. If not, see . +#=============================================================================== + +from sqlalchemy import Table, Column, Integer, Float +from sqlalchemy.orm import mapper + +from eos.db import saveddata_meta +from eos.types import Override + +overrides_table = Table("overrides", saveddata_meta, + Column("itemID", Integer, primary_key=True, index = True), + Column("attrID", Integer, primary_key=True, index = True), + Column("value", Float, nullable = False)) + +mapper(Override, overrides_table) diff --git a/eos/db/saveddata/queries.py b/eos/db/saveddata/queries.py index b71f6b98a..a305994cd 100644 --- a/eos/db/saveddata/queries.py +++ b/eos/db/saveddata/queries.py @@ -19,7 +19,8 @@ from eos.db.util import processEager, processWhere from eos.db import saveddata_session, sd_lock -from eos.types import User, Character, Fit, Price, DamagePattern, Fleet, MiscData, Wing, Squad, TargetResists + +from eos.types import User, Character, Fit, Price, DamagePattern, Fleet, MiscData, Wing, Squad, TargetResists, Override, CrestChar from eos.db.saveddata.fleet import squadmembers_table from eos.db.saveddata.fit import projectedFits_table from sqlalchemy.sql import and_ @@ -182,7 +183,7 @@ def getFit(lookfor, eager=None): else: eager = processEager(eager) with sd_lock: - fit = saveddata_session.query(Fit).options(*eager).filter(Fit.ID == fitID).first() + fit = saveddata_session.query(Fit).options(*eager).filter(Fit.ID == lookfor).first() else: raise TypeError("Need integer as argument") @@ -416,6 +417,45 @@ def getProjectedFits(fitID): else: raise TypeError("Need integer as argument") +def getCrestCharacters(eager=None): + eager = processEager(eager) + with sd_lock: + characters = saveddata_session.query(CrestChar).options(*eager).all() + return characters + +@cachedQuery(CrestChar, 1, "lookfor") +def getCrestCharacter(lookfor, eager=None): + if isinstance(lookfor, int): + if eager is None: + with sd_lock: + character = saveddata_session.query(CrestChar).get(lookfor) + else: + eager = processEager(eager) + with sd_lock: + character = saveddata_session.query(CrestChar).options(*eager).filter(CrestChar.ID == lookfor).first() + elif isinstance(lookfor, basestring): + eager = processEager(eager) + with sd_lock: + character = saveddata_session.query(CrestChar).options(*eager).filter(CrestChar.name == lookfor).first() + else: + raise TypeError("Need integer or string as argument") + return character + +def getOverrides(itemID, eager=None): + if isinstance(itemID, int): + return saveddata_session.query(Override).filter(Override.itemID == itemID).all() + else: + raise TypeError("Need integer as argument") + +def clearOverrides(): + with sd_lock: + deleted_rows = saveddata_session.query(Override).delete() + commit() + return deleted_rows + +def getAllOverrides(eager=None): + return saveddata_session.query(Override).all() + def removeInvalid(fits): invalids = [f for f in fits if f.isInvalid] diff --git a/eos/effects/armortankinggang2.py b/eos/effects/armorwarfarearmorhpreplacer.py similarity index 92% rename from eos/effects/armortankinggang2.py rename to eos/effects/armorwarfarearmorhpreplacer.py index baa284623..ffcf0efec 100644 --- a/eos/effects/armortankinggang2.py +++ b/eos/effects/armorwarfarearmorhpreplacer.py @@ -1,4 +1,4 @@ -# armorTankingGang2 +# armorWarfareArmorHpReplacer # # Used by: # Implant: Armored Warfare Mindlink diff --git a/eos/effects/battlecruiserdronespeed.py b/eos/effects/battlecruiserdronespeed.py new file mode 100644 index 000000000..2ce3247ea --- /dev/null +++ b/eos/effects/battlecruiserdronespeed.py @@ -0,0 +1,9 @@ +# battlecruiserDroneSpeed +# +# Used by: +# Ship: Myrmidon +# Ship: Prophecy +type = "passive" +def handler(fit, ship, context): + fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"), + "maxVelocity", ship.getModifiedItemAttr("roleBonusCBC")) diff --git a/eos/effects/battlecruisermetrange.py b/eos/effects/battlecruisermetrange.py new file mode 100644 index 000000000..ca3ec3e7c --- /dev/null +++ b/eos/effects/battlecruisermetrange.py @@ -0,0 +1,10 @@ +# battlecruiserMETRange +# +# Used by: +# Ships named like: Harbinger (2 of 2) +type = "passive" +def handler(fit, ship, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"), + "maxRange", ship.getModifiedItemAttr("roleBonusCBC")) + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"), + "falloff", ship.getModifiedItemAttr("roleBonusCBC")) diff --git a/eos/effects/battlecruisermhtrange.py b/eos/effects/battlecruisermhtrange.py new file mode 100644 index 000000000..6501a2405 --- /dev/null +++ b/eos/effects/battlecruisermhtrange.py @@ -0,0 +1,11 @@ +# battlecruiserMHTRange +# +# Used by: +# Ships named like: Brutix (2 of 2) +# Ship: Ferox +type = "passive" +def handler(fit, ship, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"), + "maxRange", ship.getModifiedItemAttr("roleBonusCBC")) + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"), + "falloff", ship.getModifiedItemAttr("roleBonusCBC")) diff --git a/eos/effects/battlecruisermissilerange.py b/eos/effects/battlecruisermissilerange.py new file mode 100644 index 000000000..153f1bf2d --- /dev/null +++ b/eos/effects/battlecruisermissilerange.py @@ -0,0 +1,9 @@ +# battlecruiserMissileRange +# +# Used by: +# Ships named like: Drake (2 of 2) +# Ship: Cyclone +type = "passive" +def handler(fit, skill, context): + fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"), + "maxVelocity", skill.getModifiedItemAttr("roleBonusCBC")) diff --git a/eos/effects/battlecruisermptrange.py b/eos/effects/battlecruisermptrange.py new file mode 100644 index 000000000..45c16ccd9 --- /dev/null +++ b/eos/effects/battlecruisermptrange.py @@ -0,0 +1,10 @@ +# battlecruiserMPTRange +# +# Used by: +# Ships named like: Hurricane (2 of 2) +type = "passive" +def handler(fit, ship, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"), + "maxRange", ship.getModifiedItemAttr("roleBonusCBC")) + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"), + "falloff", ship.getModifiedItemAttr("roleBonusCBC")) diff --git a/eos/effects/crystalminingamountinfo2.py b/eos/effects/crystalminingamountinfo2.py new file mode 100644 index 000000000..18a059c95 --- /dev/null +++ b/eos/effects/crystalminingamountinfo2.py @@ -0,0 +1,7 @@ +# crystalMiningamountInfo2 +# +# Used by: +# Modules from group: Frequency Mining Laser (3 of 3) +type = "passive" +def handler(fit, module, context): + module.preAssignItemAttr("specialtyMiningAmount", module.getModifiedItemAttr("miningAmount")) diff --git a/eos/effects/entosiscpuaddition.py b/eos/effects/entosiscpuaddition.py new file mode 100644 index 000000000..03f0405ae --- /dev/null +++ b/eos/effects/entosiscpuaddition.py @@ -0,0 +1,8 @@ +# entosisCPUAddition +# +# Used by: +# Modules from group: Entosis Link (2 of 2) +type = "passive" +def handler(fit, module, context): + module.increaseItemAttr("cpu", module.getModifiedItemAttr("entosisCPUAdd")) + diff --git a/eos/effects/entosiscpupenalty.py b/eos/effects/entosiscpupenalty.py new file mode 100644 index 000000000..61a6175b9 --- /dev/null +++ b/eos/effects/entosiscpupenalty.py @@ -0,0 +1,8 @@ +# entosisCPUPenalty +# +# Used by: +# Ships from group: Interceptor (10 of 10) +type = "passive" +def handler(fit, ship, context): + fit.modules.filteredItemIncrease(lambda mod: mod.item.requiresSkill("Infomorph Psychology"), + "entosisCPUAdd", ship.getModifiedItemAttr("entosisCPUPenalty")) diff --git a/eos/effects/informationwarfaremaxtargetrangebonus.py b/eos/effects/informationwarfaremaxtargetrangebonus.py new file mode 100644 index 000000000..5e4bfed19 --- /dev/null +++ b/eos/effects/informationwarfaremaxtargetrangebonus.py @@ -0,0 +1,11 @@ +# informationWarfareMaxTargetRangeBonus +# +# Used by: +# Implant: Caldari Navy Warfare Mindlink +# Implant: Imperial Navy Warfare Mindlink +# Implant: Information Warfare Mindlink +type = "gang" +gangBoost = "maxTargetRange" +gangBonus = "maxTargetRangeBonus" +def handler(fit, container, context): + fit.ship.boostItemAttr(gangBoost, container.getModifiedItemAttr(gangBonus)) diff --git a/eos/effects/informationwarfaremindlinkhidden.py b/eos/effects/informationwarfaremindlinkhidden.py index f59c806ba..6d3d6c6a7 100644 --- a/eos/effects/informationwarfaremindlinkhidden.py +++ b/eos/effects/informationwarfaremindlinkhidden.py @@ -2,7 +2,6 @@ # # Used by: # Implant: Caldari Navy Warfare Mindlink -# Implant: Imperial Navy Warfare Mindlink # Implant: Information Warfare Mindlink type = "passive" def handler(fit, implant, context): diff --git a/eos/effects/mercoxitcrystalbonus.py b/eos/effects/mercoxitcrystalbonus.py index 395b2fc84..52fb3b2c8 100644 --- a/eos/effects/mercoxitcrystalbonus.py +++ b/eos/effects/mercoxitcrystalbonus.py @@ -3,6 +3,7 @@ # Used by: # Module: Medium Mercoxit Mining Crystal Optimization I type = "passive" +runTime="early" def handler(fit, module, context): fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Mercoxit Processing"), "specialisationAsteroidYieldMultiplier", module.getModifiedItemAttr("miningAmountBonus")) diff --git a/eos/effects/miningforemanmindlinkminingamountbonusreplacer.py b/eos/effects/miningforemanmindlinkminingamountbonusreplacer.py new file mode 100644 index 000000000..bdf856667 --- /dev/null +++ b/eos/effects/miningforemanmindlinkminingamountbonusreplacer.py @@ -0,0 +1,10 @@ +# miningForemanMindLinkMiningAmountBonusReplacer +# +# Used by: +# Implant: Mining Foreman Mindlink +type = "gang" +gangBoost = "miningAmount" +gangBonus = "miningAmountBonus" +def handler(fit, container, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Mining"), + gangBoost, container.getModifiedItemAttr(gangBonus) * level) diff --git a/eos/effects/mininginfomultiplier.py b/eos/effects/mininginfomultiplier.py index 2d05a550c..10ecb4eef 100644 --- a/eos/effects/mininginfomultiplier.py +++ b/eos/effects/mininginfomultiplier.py @@ -5,4 +5,4 @@ # Charges named like: Mining Crystal (32 of 32) type = "passive" def handler(fit, module, context): - module.multiplyItemAttr("miningAmount", module.getModifiedChargeAttr("specialisationAsteroidYieldMultiplier")) \ No newline at end of file + module.multiplyItemAttr("specialtyMiningAmount", module.getModifiedChargeAttr("specialisationAsteroidYieldMultiplier")) diff --git a/eos/effects/miningyieldgangbonusfixed.py b/eos/effects/miningyieldgangbonusfixed.py index 9367e55e3..1b6a0a583 100644 --- a/eos/effects/miningyieldgangbonusfixed.py +++ b/eos/effects/miningyieldgangbonusfixed.py @@ -1,7 +1,6 @@ # miningYieldGangBonusFixed # # Used by: -# Implant: Mining Foreman Mindlink # Skill: Mining Foreman type = "gang" gangBoost = "miningAmount" diff --git a/eos/effects/overloadselfthermalhardeningbonus.py b/eos/effects/overloadselfthermalhardeningbonus.py index a3e8c91e0..5a4036980 100644 --- a/eos/effects/overloadselfthermalhardeningbonus.py +++ b/eos/effects/overloadselfthermalhardeningbonus.py @@ -1,9 +1,9 @@ # overloadSelfThermalHardeningBonus # # Used by: -# Variations of module: Armor Thermic Hardener I (39 of 39) -# Variations of module: Thermic Dissipation Field I (19 of 19) -# Module: Civilian Thermic Dissipation Field +# Variations of module: Armor Thermal Hardener I (39 of 39) +# Variations of module: Thermal Dissipation Field I (19 of 19) +# Module: Civilian Thermal Dissipation Field type = "overheat" def handler(fit, module, context): module.boostItemAttr("thermalDamageResistanceBonus", module.getModifiedItemAttr("overloadHardeningBonus")) \ No newline at end of file diff --git a/eos/effects/reconoperationsmaxtargetrangebonuspostpercentmaxtargetrangegangships.py b/eos/effects/reconoperationsmaxtargetrangebonuspostpercentmaxtargetrangegangships.py index 00a2707a4..db12c57db 100644 --- a/eos/effects/reconoperationsmaxtargetrangebonuspostpercentmaxtargetrangegangships.py +++ b/eos/effects/reconoperationsmaxtargetrangebonuspostpercentmaxtargetrangegangships.py @@ -1,9 +1,6 @@ # reconOperationsMaxTargetRangeBonusPostPercentMaxTargetRangeGangShips # # Used by: -# Implant: Caldari Navy Warfare Mindlink -# Implant: Imperial Navy Warfare Mindlink -# Implant: Information Warfare Mindlink # Skill: Information Warfare type = "gang" gangBoost = "maxTargetRange" diff --git a/eos/effects/shielddefensiveoperationsshieldcapacitybonuspostpercentshieldcapacitygangships.py b/eos/effects/shielddefensiveoperationsshieldcapacitybonuspostpercentshieldcapacitygangships.py index 1c16a3066..5d38c76e3 100644 --- a/eos/effects/shielddefensiveoperationsshieldcapacitybonuspostpercentshieldcapacitygangships.py +++ b/eos/effects/shielddefensiveoperationsshieldcapacitybonuspostpercentshieldcapacitygangships.py @@ -1,9 +1,6 @@ # shieldDefensiveOperationsShieldCapacityBonusPostPercentShieldCapacityGangShips # # Used by: -# Implant: Caldari Navy Warfare Mindlink -# Implant: Republic Fleet Warfare Mindlink -# Implant: Siege Warfare Mindlink # Skill: Siege Warfare type = "gang" gangBoost = "shieldCapacity" diff --git a/eos/effects/shiparmoremresistancerookie.py b/eos/effects/shiparmoremresistancerookie.py index c35e701d3..9baaf9c4c 100644 --- a/eos/effects/shiparmoremresistancerookie.py +++ b/eos/effects/shiparmoremresistancerookie.py @@ -2,8 +2,10 @@ # # Used by: # Ship: Devoter +# Ship: Gold Magnate # Ship: Impairor # Ship: Phobos +# Ship: Silver Magnate type = "passive" def handler(fit, ship, context): fit.ship.boostItemAttr("armorEmDamageResonance", ship.getModifiedItemAttr("rookieArmorResistanceBonus")) diff --git a/eos/effects/shiparmorexresistancerookie.py b/eos/effects/shiparmorexresistancerookie.py index a0f2becf6..35868ef02 100644 --- a/eos/effects/shiparmorexresistancerookie.py +++ b/eos/effects/shiparmorexresistancerookie.py @@ -2,8 +2,10 @@ # # Used by: # Ship: Devoter +# Ship: Gold Magnate # Ship: Impairor # Ship: Phobos +# Ship: Silver Magnate type = "passive" def handler(fit, ship, context): fit.ship.boostItemAttr("armorExplosiveDamageResonance", ship.getModifiedItemAttr("rookieArmorResistanceBonus")) diff --git a/eos/effects/shiparmorknresistancerookie.py b/eos/effects/shiparmorknresistancerookie.py index d3f68efa4..efc324adf 100644 --- a/eos/effects/shiparmorknresistancerookie.py +++ b/eos/effects/shiparmorknresistancerookie.py @@ -2,8 +2,10 @@ # # Used by: # Ship: Devoter +# Ship: Gold Magnate # Ship: Impairor # Ship: Phobos +# Ship: Silver Magnate type = "passive" def handler(fit, ship, context): fit.ship.boostItemAttr("armorKineticDamageResonance", ship.getModifiedItemAttr("rookieArmorResistanceBonus")) diff --git a/eos/effects/shiparmorthresistancerookie.py b/eos/effects/shiparmorthresistancerookie.py index c5fe4045f..385e27b4b 100644 --- a/eos/effects/shiparmorthresistancerookie.py +++ b/eos/effects/shiparmorthresistancerookie.py @@ -2,8 +2,10 @@ # # Used by: # Ship: Devoter +# Ship: Gold Magnate # Ship: Impairor # Ship: Phobos +# Ship: Silver Magnate type = "passive" def handler(fit, ship, context): fit.ship.boostItemAttr("armorThermalDamageResonance", ship.getModifiedItemAttr("rookieArmorResistanceBonus")) diff --git a/eos/effects/shipbonusprojectiletrackingmbc2.py b/eos/effects/shipbonusprojectiletrackingmbc2.py new file mode 100644 index 000000000..8add40a2b --- /dev/null +++ b/eos/effects/shipbonusprojectiletrackingmbc2.py @@ -0,0 +1,8 @@ +# shipBonusProjectileTrackingMBC2 +# +# Used by: +# Ship: Hurricane Fleet Issue +type = "passive" +def handler(fit, ship, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"), + "trackingSpeed", ship.getModifiedItemAttr("shipBonusMBC2"), skill="Minmatar Battlecruiser") diff --git a/eos/effects/shipbonuswdfgnullspeedeffects.py b/eos/effects/shipbonuswdfgnullpenalties.py similarity index 95% rename from eos/effects/shipbonuswdfgnullspeedeffects.py rename to eos/effects/shipbonuswdfgnullpenalties.py index 448c54db5..da395b9b6 100644 --- a/eos/effects/shipbonuswdfgnullspeedeffects.py +++ b/eos/effects/shipbonuswdfgnullpenalties.py @@ -1,4 +1,4 @@ -# shipBonusWDFGnullSpeedEffects +# shipBonusWDFGnullPenalties # # Used by: # Ship: Fiend diff --git a/eos/effects/shipheavyassaultmissilevelocitycbc2.py b/eos/effects/shipheavyassaultmissilevelocitycbc2.py deleted file mode 100644 index 9c93a602d..000000000 --- a/eos/effects/shipheavyassaultmissilevelocitycbc2.py +++ /dev/null @@ -1,8 +0,0 @@ -# shipHeavyAssaultMissileVelocityCBC2 -# -# Used by: -# Ship: Drake Navy Issue -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Assault Missiles"), - "maxVelocity", ship.getModifiedItemAttr("shipBonusCBC2"), skill="Caldari Battlecruiser") diff --git a/eos/effects/shipheavymissilevelocitycbc2.py b/eos/effects/shipheavymissilevelocitycbc2.py deleted file mode 100644 index 04e5963b6..000000000 --- a/eos/effects/shipheavymissilevelocitycbc2.py +++ /dev/null @@ -1,8 +0,0 @@ -# shipHeavyMissileVelocityCBC2 -# -# Used by: -# Ship: Drake Navy Issue -type = "passive" -def handler(fit, ship, context): - fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Heavy Missiles"), - "maxVelocity", ship.getModifiedItemAttr("shipBonusCBC2"), skill="Caldari Battlecruiser") diff --git a/eos/effects/shiphybriddmg1cbc2.py b/eos/effects/shiphybriddmg1cbc2.py new file mode 100644 index 000000000..82b916baa --- /dev/null +++ b/eos/effects/shiphybriddmg1cbc2.py @@ -0,0 +1,8 @@ +# shipHybridDmg1CBC2 +# +# Used by: +# Ship: Ferox +type = "passive" +def handler(fit, ship, context): + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"), + "damageMultiplier", ship.getModifiedItemAttr("shipBonusCBC2"), skill="Caldari Battlecruiser") diff --git a/eos/effects/shipprojectilerof1mbc2.py b/eos/effects/shipprojectilerof1mbc2.py index 77a329adb..691116b52 100644 --- a/eos/effects/shipprojectilerof1mbc2.py +++ b/eos/effects/shipprojectilerof1mbc2.py @@ -1,7 +1,7 @@ # shipProjectileRof1MBC2 # # Used by: -# Ships named like: Hurricane (2 of 2) +# Ship: Hurricane type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"), diff --git a/eos/effects/shipshieldemresistance1cbc2.py b/eos/effects/shipshieldemresistance1cbc2.py index 7bd2ae888..596be5ef5 100644 --- a/eos/effects/shipshieldemresistance1cbc2.py +++ b/eos/effects/shipshieldemresistance1cbc2.py @@ -1,9 +1,8 @@ # shipShieldEmResistance1CBC2 # # Used by: -# Variations of ship: Ferox (2 of 2) -# Ship: Drake -# Ship: Nighthawk +# Variations of ship: Drake (3 of 3) +# Ship: Vulture type = "passive" def handler(fit, ship, context): fit.ship.boostItemAttr("shieldEmDamageResonance", ship.getModifiedItemAttr("shipBonusCBC2"), skill="Caldari Battlecruiser") diff --git a/eos/effects/shipshieldexplosiveresistance1cbc2.py b/eos/effects/shipshieldexplosiveresistance1cbc2.py index 59ce3938b..b682971f3 100644 --- a/eos/effects/shipshieldexplosiveresistance1cbc2.py +++ b/eos/effects/shipshieldexplosiveresistance1cbc2.py @@ -1,9 +1,8 @@ # shipShieldExplosiveResistance1CBC2 # # Used by: -# Variations of ship: Ferox (2 of 2) -# Ship: Drake -# Ship: Nighthawk +# Variations of ship: Drake (3 of 3) +# Ship: Vulture type = "passive" def handler(fit, ship, context): fit.ship.boostItemAttr("shieldExplosiveDamageResonance", ship.getModifiedItemAttr("shipBonusCBC2"), skill="Caldari Battlecruiser") diff --git a/eos/effects/shipshieldkineticresistance1cbc2.py b/eos/effects/shipshieldkineticresistance1cbc2.py index 68572bf63..e6e90197e 100644 --- a/eos/effects/shipshieldkineticresistance1cbc2.py +++ b/eos/effects/shipshieldkineticresistance1cbc2.py @@ -1,9 +1,8 @@ # shipShieldKineticResistance1CBC2 # # Used by: -# Variations of ship: Ferox (2 of 2) -# Ship: Drake -# Ship: Nighthawk +# Variations of ship: Drake (3 of 3) +# Ship: Vulture type = "passive" def handler(fit, ship, context): fit.ship.boostItemAttr("shieldKineticDamageResonance", ship.getModifiedItemAttr("shipBonusCBC2"), skill="Caldari Battlecruiser") diff --git a/eos/effects/shipshieldthermalresistance1cbc2.py b/eos/effects/shipshieldthermalresistance1cbc2.py index 417b3aeac..db0da414a 100644 --- a/eos/effects/shipshieldthermalresistance1cbc2.py +++ b/eos/effects/shipshieldthermalresistance1cbc2.py @@ -1,9 +1,8 @@ # shipShieldThermalResistance1CBC2 # # Used by: -# Variations of ship: Ferox (2 of 2) -# Ship: Drake -# Ship: Nighthawk +# Variations of ship: Drake (3 of 3) +# Ship: Vulture type = "passive" def handler(fit, ship, context): fit.ship.boostItemAttr("shieldThermalDamageResonance", ship.getModifiedItemAttr("shipBonusCBC2"), skill="Caldari Battlecruiser") diff --git a/eos/effects/siegewarfareshieldcapacitybonusreplacer.py b/eos/effects/siegewarfareshieldcapacitybonusreplacer.py new file mode 100644 index 000000000..3fd0a62fa --- /dev/null +++ b/eos/effects/siegewarfareshieldcapacitybonusreplacer.py @@ -0,0 +1,11 @@ +# siegeWarfareShieldCapacityBonusReplacer +# +# Used by: +# Implant: Caldari Navy Warfare Mindlink +# Implant: Republic Fleet Warfare Mindlink +# Implant: Siege Warfare Mindlink +type = "gang" +gangBoost = "shieldCapacity" +gangBonus = "shieldCapacityBonus" +def handler(fit, container, context): + fit.ship.boostItemAttr(gangBoost, container.getModifiedItemAttr(gangBonus) * level) diff --git a/eos/effects/skirmishwarfareagilitybonus.py b/eos/effects/skirmishwarfareagilitybonus.py index 7ce7e0ad8..39ec2c90a 100644 --- a/eos/effects/skirmishwarfareagilitybonus.py +++ b/eos/effects/skirmishwarfareagilitybonus.py @@ -1,9 +1,6 @@ # skirmishWarfareAgilityBonus # # Used by: -# Implant: Federation Navy Warfare Mindlink -# Implant: Republic Fleet Warfare Mindlink -# Implant: Skirmish Warfare Mindlink # Skill: Skirmish Warfare type = "gang" gangBoost = "agility" diff --git a/eos/effects/skirmishwarfareagilitybonusreplacer.py b/eos/effects/skirmishwarfareagilitybonusreplacer.py new file mode 100644 index 000000000..e89c3a217 --- /dev/null +++ b/eos/effects/skirmishwarfareagilitybonusreplacer.py @@ -0,0 +1,11 @@ +# skirmishWarfareAgilityBonusReplacer +# +# Used by: +# Implant: Federation Navy Warfare Mindlink +# Implant: Republic Fleet Warfare Mindlink +# Implant: Skirmish Warfare Mindlink +type = "gang" +gangBoost = "agility" +gangBonus = "agilityBonus" +def handler(fit, container, context): + fit.ship.boostItemAttr(gangBoost, container.getModifiedItemAttr(gangBonus) * level) diff --git a/eos/effects/smallenergymaxrangebonus.py b/eos/effects/smallenergymaxrangebonus.py index f67219ccd..4e3ea5f31 100644 --- a/eos/effects/smallenergymaxrangebonus.py +++ b/eos/effects/smallenergymaxrangebonus.py @@ -2,6 +2,8 @@ # # Used by: # Ship: Coercer +# Ship: Gold Magnate +# Ship: Silver Magnate type = "passive" def handler(fit, ship, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Small Energy Turret"), diff --git a/eos/effects/thermalshieldcompensationhardeningbonusgroupshieldamp.py b/eos/effects/thermalshieldcompensationhardeningbonusgroupshieldamp.py index 0f318c05e..1dec7e8d3 100644 --- a/eos/effects/thermalshieldcompensationhardeningbonusgroupshieldamp.py +++ b/eos/effects/thermalshieldcompensationhardeningbonusgroupshieldamp.py @@ -1,7 +1,7 @@ # thermalShieldCompensationHardeningBonusGroupShieldAmp # # Used by: -# Skill: Thermic Shield Compensation +# Skill: Thermal Shield Compensation type = "passive" def handler(fit, skill, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Shield Amplifier", diff --git a/eos/effects/thermicarmorcompensationhardeningbonusgrouparmorcoating.py b/eos/effects/thermicarmorcompensationhardeningbonusgrouparmorcoating.py index 2ea9d5af5..653b75056 100644 --- a/eos/effects/thermicarmorcompensationhardeningbonusgrouparmorcoating.py +++ b/eos/effects/thermicarmorcompensationhardeningbonusgrouparmorcoating.py @@ -1,7 +1,7 @@ # thermicArmorCompensationHardeningBonusGroupArmorCoating # # Used by: -# Skill: Thermic Armor Compensation +# Skill: Thermal Armor Compensation type = "passive" def handler(fit, skill, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Coating", diff --git a/eos/effects/thermicarmorcompensationhardeningbonusgroupenergized.py b/eos/effects/thermicarmorcompensationhardeningbonusgroupenergized.py index c4829419a..ef2765202 100644 --- a/eos/effects/thermicarmorcompensationhardeningbonusgroupenergized.py +++ b/eos/effects/thermicarmorcompensationhardeningbonusgroupenergized.py @@ -1,7 +1,7 @@ # thermicArmorCompensationHardeningBonusGroupEnergized # # Used by: -# Skill: Thermic Armor Compensation +# Skill: Thermal Armor Compensation type = "passive" def handler(fit, skill, context): fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Plating Energized", diff --git a/eos/effects/triagemodeeffect3.py b/eos/effects/triagemodeeffect3.py index bc33ee55c..f2fc6f028 100644 --- a/eos/effects/triagemodeeffect3.py +++ b/eos/effects/triagemodeeffect3.py @@ -9,7 +9,8 @@ def handler(fit, module, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"), "duration", module.getModifiedItemAttr("remoteArmorDamageDurationBonus")) fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"), - "armorDamageAmount", module.getModifiedItemAttr("remoteArmorDamageAmountBonus")) + "armorDamageAmount", module.getModifiedItemAttr("remoteArmorDamageAmountBonus"), + stackingPenalties=True) # Remote hull reppers fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Hull Repair Systems"), @@ -19,7 +20,8 @@ def handler(fit, module, context): # Shield Transporters fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"), - "shieldBonus", module.getModifiedItemAttr("shieldTransportAmountBonus")) + "shieldBonus", module.getModifiedItemAttr("shieldTransportAmountBonus"), + stackingPenalties=True) fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"), "duration", module.getModifiedItemAttr("shieldTransportDurationBonus")) @@ -34,26 +36,29 @@ def handler(fit, module, context): "shieldBonus", module.getModifiedItemAttr("shieldBoostMultiplier"), stackingPenalties=True) fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Operation"), - "duration", module.getModifiedItemAttr("shieldBonusDurationBonus"), - stackingPenalties=True) + "duration", module.getModifiedItemAttr("shieldBonusDurationBonus")) # Armor reps - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Unit", + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Repair Systems"), "armorDamageAmount", module.getModifiedItemAttr("armorDamageAmountBonus")) - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Unit", + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Repair Systems"), "duration", module.getModifiedItemAttr("armorDamageDurationBonus")) # Speed bonus - fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor")) + fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"), + stackingPenalties=True) # Scan resolution multiplier - fit.ship.multiplyItemAttr("scanResolution", module.getModifiedItemAttr("scanResolutionMultiplier")) + fit.ship.multiplyItemAttr("scanResolution", module.getModifiedItemAttr("scanResolutionMultiplier"), + stackingPenalties=True) # Mass multiplier - fit.ship.multiplyItemAttr("mass", module.getModifiedItemAttr("massMultiplier")) + fit.ship.multiplyItemAttr("mass", module.getModifiedItemAttr("massMultiplier"), + stackingPenalties=True) # Lock range - fit.ship.multiplyItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRangeMultiplier")) + fit.ship.multiplyItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRangeMultiplier"), + stackingPenalties=True) # Max locked targets fit.ship.increaseItemAttr("maxLockedTargets", module.getModifiedItemAttr("maxLockedTargetsBonus")) @@ -61,3 +66,16 @@ def handler(fit, module, context): # Block EWAR & projected effects fit.ship.forceItemAttr("disallowOffensiveModifiers", module.getModifiedItemAttr("disallowOffensiveModifiers")) fit.ship.forceItemAttr("disallowAssistance", module.getModifiedItemAttr("disallowAssistance")) + + # EW cap need increase + groups = [ + 'ECM Burst', + 'Remote ECM Burst', + 'Tracking Disruptor', + 'ECM', + 'Remote Sensor Damper', + 'Target Painter'] + + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups or + mod.item.requiresSkill("Propulsion Jamming"), + "capacitorNeed", module.getModifiedItemAttr("ewCapacitorNeedBonus")) diff --git a/eos/effects/triagemodeeffect7.py b/eos/effects/triagemodeeffect7.py index c84c95a5c..3afa6c6d1 100644 --- a/eos/effects/triagemodeeffect7.py +++ b/eos/effects/triagemodeeffect7.py @@ -9,7 +9,8 @@ def handler(fit, module, context): fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"), "duration", module.getModifiedItemAttr("remoteArmorDamageDurationBonus")) fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Armor Repair Systems"), - "armorDamageAmount", module.getModifiedItemAttr("remoteArmorDamageAmountBonus")) + "armorDamageAmount", module.getModifiedItemAttr("remoteArmorDamageAmountBonus"), + stackingPenalties=True) # Remote hull reppers fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Remote Hull Repair Systems"), @@ -19,7 +20,8 @@ def handler(fit, module, context): # Shield Transporters fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"), - "shieldBonus", module.getModifiedItemAttr("shieldTransportAmountBonus")) + "shieldBonus", module.getModifiedItemAttr("shieldTransportAmountBonus"), + stackingPenalties=True) fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"), "duration", module.getModifiedItemAttr("shieldTransportDurationBonus")) @@ -34,26 +36,29 @@ def handler(fit, module, context): "shieldBonus", module.getModifiedItemAttr("shieldBoostMultiplier"), stackingPenalties=True) fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Operation"), - "duration", module.getModifiedItemAttr("shieldBonusDurationBonus"), - stackingPenalties=True) + "duration", module.getModifiedItemAttr("shieldBonusDurationBonus")) # Armor reps - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Unit", + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Repair Systems"), "armorDamageAmount", module.getModifiedItemAttr("armorDamageAmountBonus")) - fit.modules.filteredItemBoost(lambda mod: mod.item.group.name == "Armor Repair Unit", + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Repair Systems"), "duration", module.getModifiedItemAttr("armorDamageDurationBonus")) # Speed bonus - fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor")) + fit.ship.boostItemAttr("maxVelocity", module.getModifiedItemAttr("speedFactor"), + stackingPenalties=True) # Scan resolution multiplier - fit.ship.multiplyItemAttr("scanResolution", module.getModifiedItemAttr("scanResolutionMultiplier")) + fit.ship.multiplyItemAttr("scanResolution", module.getModifiedItemAttr("scanResolutionMultiplier"), + stackingPenalties=True) # Mass multiplier - fit.ship.multiplyItemAttr("mass", module.getModifiedItemAttr("massMultiplier")) + fit.ship.multiplyItemAttr("mass", module.getModifiedItemAttr("massMultiplier"), + stackingPenalties=True) # Lock range - fit.ship.multiplyItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRangeMultiplier")) + fit.ship.multiplyItemAttr("maxTargetRange", module.getModifiedItemAttr("maxTargetRangeMultiplier"), + stackingPenalties=True) # Max locked targets fit.ship.increaseItemAttr("maxLockedTargets", module.getModifiedItemAttr("maxLockedTargetsBonus")) @@ -69,3 +74,18 @@ def handler(fit, module, context): "capacitorNeed", module.getModifiedItemAttr("triageRemoteModuleCapNeed")) fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Shield Emission Systems"), "capacitorNeed", module.getModifiedItemAttr("triageRemoteModuleCapNeed")) + fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Capacitor Emission Systems"), + "capacitorNeed", module.getModifiedItemAttr("triageRemoteModuleCapNeed")) + + # EW cap need increase + groups = [ + 'ECM Burst', + 'Remote ECM Burst', + 'Tracking Disruptor', + 'ECM', + 'Remote Sensor Damper', + 'Target Painter'] + + fit.modules.filteredItemBoost(lambda mod: mod.item.group.name in groups or + mod.item.requiresSkill("Propulsion Jamming"), + "capacitorNeed", module.getModifiedItemAttr("ewCapacitorNeedBonus")) diff --git a/eos/gamedata.py b/eos/gamedata.py index d5691da46..3e7c213eb 100644 --- a/eos/gamedata.py +++ b/eos/gamedata.py @@ -24,6 +24,7 @@ from sqlalchemy.orm import reconstructor from eqBase import EqBase import traceback +import eos.db try: from collections import OrderedDict @@ -168,7 +169,6 @@ class Item(EqBase): info = getattr(cls, "MOVE_ATTR_INFO", None) if info is None: cls.MOVE_ATTR_INFO = info = [] - import eos.db for id in cls.MOVE_ATTRS: info.append(eos.db.getAttributeInfo(id)) @@ -191,6 +191,7 @@ class Item(EqBase): self.__moved = False self.__offensive = None self.__assistive = None + self.__overrides = None @property def attributes(self): @@ -210,6 +211,32 @@ class Item(EqBase): return False + @property + def overrides(self): + if self.__overrides is None: + self.__overrides = {} + overrides = eos.db.getOverrides(self.ID) + for x in overrides: + if x.attr.name in self.__attributes: + self.__overrides[x.attr.name] = x + + return self.__overrides + + def setOverride(self, attr, value): + from eos.saveddata.override import Override + if attr.name in self.__overrides: + override = self.__overrides.get(attr.name) + override.value = value + else: + override = Override(self, attr, value) + self.__overrides[attr.name] = override + eos.db.save(override) + + def deleteOverride(self, attr): + override = self.__overrides.pop(attr.name, None) + eos.db.saveddata_session.delete(override) + eos.db.commit() + @property def requiredSkills(self): if self.__requiredSkills is None: @@ -345,6 +372,12 @@ class Item(EqBase): return False + def __repr__(self): + return "Item(ID={}, name={}) at {}".format( + self.ID, self.name, hex(id(self)) + ) + + class MetaData(EqBase): pass diff --git a/eos/graph/fitDps.py b/eos/graph/fitDps.py index cbcb07996..957f6778b 100644 --- a/eos/graph/fitDps.py +++ b/eos/graph/fitDps.py @@ -43,7 +43,8 @@ class FitDpsGraph(Graph): if "ewTargetPaint" in mod.item.effects: ew['signatureRadius'].append(1+(mod.getModifiedItemAttr("signatureRadiusBonus") / 100)) if "decreaseTargetSpeed" in mod.item.effects: - ew['velocity'].append(1+(mod.getModifiedItemAttr("speedFactor") / 100)) + if distance <= mod.getModifiedItemAttr("maxRange"): + ew['velocity'].append(1+(mod.getModifiedItemAttr("speedFactor") / 100)) ew['signatureRadius'].sort(key=abssort) ew['velocity'].sort(key=abssort) diff --git a/eos/modifiedAttributeDict.py b/eos/modifiedAttributeDict.py index de63420d1..a9a0e9fe5 100644 --- a/eos/modifiedAttributeDict.py +++ b/eos/modifiedAttributeDict.py @@ -38,6 +38,9 @@ class ChargeAttrShortcut(object): return None class ModifiedAttributeDict(collections.MutableMapping): + + OVERRIDES = False + class CalculationPlaceholder(): pass @@ -51,6 +54,8 @@ class ModifiedAttributeDict(collections.MutableMapping): self.__modified = {} # Affected by entities self.__affectedBy = {} + # Overrides + self.__overrides = {} # Dictionaries for various value modification types self.__forced = {} self.__preAssigns = {} @@ -79,6 +84,14 @@ class ModifiedAttributeDict(collections.MutableMapping): self.__original = val self.__modified.clear() + @property + def overrides(self): + return self.__overrides + + @overrides.setter + def overrides(self, val): + self.__overrides = val + def __getitem__(self, key): # Check if we have final calculated value if key in self.__modified: @@ -99,6 +112,8 @@ class ModifiedAttributeDict(collections.MutableMapping): del self.__intermediary[key] def getOriginal(self, key): + if self.OVERRIDES and key in self.__overrides: + return self.__overrides.get(key).value val = self.__original.get(key) if val is None: return None @@ -285,7 +300,7 @@ class ModifiedAttributeDict(collections.MutableMapping): else: if not attributeName in self.__multipliers: self.__multipliers[attributeName] = 1 - self.__multipliers[attributeName] *= multiplier + self.__multipliers[attributeName] *= multiplier if multiplier is not None else 1 self.__placehold(attributeName) self.__afflict(attributeName, "%s*" % ("s" if stackingPenalties else ""), multiplier, multiplier != 1) diff --git a/eos/saveddata/booster.py b/eos/saveddata/booster.py index c0874fe94..9d0e98ae0 100644 --- a/eos/saveddata/booster.py +++ b/eos/saveddata/booster.py @@ -58,6 +58,7 @@ class Booster(HandledItem, ItemAttrShortcut): self.__sideEffects = [] self.__itemModifiedAttributes = ModifiedAttributeDict() self.__itemModifiedAttributes.original = self.__item.attributes + self.__itemModifiedAttributes.overrides = self.__item.overrides self.__slot = self.__calculateSlot(self.__item) for effect in self.__item.effects.itervalues(): diff --git a/eos/saveddata/cargo.py b/eos/saveddata/cargo.py index 26509d525..676b7cebf 100644 --- a/eos/saveddata/cargo.py +++ b/eos/saveddata/cargo.py @@ -34,6 +34,7 @@ class Cargo(HandledItem, ItemAttrShortcut): self.amount = 0 self.__itemModifiedAttributes = ModifiedAttributeDict() self.__itemModifiedAttributes.original = item.attributes + self.__itemModifiedAttributes.overrides = item.overrides @reconstructor def init(self): @@ -48,6 +49,7 @@ class Cargo(HandledItem, ItemAttrShortcut): self.__itemModifiedAttributes = ModifiedAttributeDict() self.__itemModifiedAttributes.original = self.__item.attributes + self.__itemModifiedAttributes.overrides = self.__item.overrides @property def itemModifiedAttributes(self): diff --git a/eos/saveddata/character.py b/eos/saveddata/character.py index 9e08217ff..df06aee4c 100644 --- a/eos/saveddata/character.py +++ b/eos/saveddata/character.py @@ -23,7 +23,9 @@ from sqlalchemy.orm import validates, reconstructor from eos.effectHandlerHelpers import HandledItem, HandledImplantBoosterList import eos.db import eos +import logging +logger = logging.getLogger(__name__) class Character(object): __itemList = None @@ -221,6 +223,11 @@ class Character(object): if map[key](val) == False: raise ValueError(str(val) + " is not a valid value for " + key) else: return val + def __repr__(self): + return "Character(ID={}, name={}) at {}".format( + self.ID, self.name, hex(id(self)) + ) + class Skill(HandledItem): def __init__(self, item, level=0, ro=False, learned=True): self.__item = item if not isinstance(item, int) else None diff --git a/eos/saveddata/crestchar.py b/eos/saveddata/crestchar.py new file mode 100644 index 000000000..9fa78f551 --- /dev/null +++ b/eos/saveddata/crestchar.py @@ -0,0 +1,46 @@ +#=============================================================================== +# Copyright (C) 2010 Diego Duclos +# +# This file is part of eos. +# +# eos is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# eos is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with eos. If not, see . +#=============================================================================== + +import urllib +from cStringIO import StringIO + +from sqlalchemy.orm import reconstructor +#from tomorrow import threads + + +class CrestChar(object): + + def __init__(self, id, name, refresh_token=None): + self.ID = id + self.name = name + self.refresh_token = refresh_token + + @reconstructor + def init(self): + pass + + ''' + @threads(1) + def fetchImage(self): + url = 'https://image.eveonline.com/character/%d_128.jpg'%self.ID + fp = urllib.urlopen(url) + data = fp.read() + fp.close() + self.img = StringIO(data) + ''' diff --git a/eos/saveddata/drone.py b/eos/saveddata/drone.py index 1a63d57a3..2fcb6a908 100644 --- a/eos/saveddata/drone.py +++ b/eos/saveddata/drone.py @@ -67,6 +67,7 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): self.__miningyield = None self.__itemModifiedAttributes = ModifiedAttributeDict() self.__itemModifiedAttributes.original = self.__item.attributes + self.__itemModifiedAttributes.overrides = self.__item.overrides self.__chargeModifiedAttributes = ModifiedAttributeDict() chargeID = self.getModifiedItemAttr("entityMissileTypeID") @@ -74,6 +75,7 @@ class Drone(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): charge = eos.db.getItem(int(chargeID)) self.__charge = charge self.__chargeModifiedAttributes.original = charge.attributes + self.__chargeModifiedAttributes.overrides = charge.overrides @property def itemModifiedAttributes(self): diff --git a/eos/saveddata/fit.py b/eos/saveddata/fit.py index 7ed04ed43..3478d4270 100644 --- a/eos/saveddata/fit.py +++ b/eos/saveddata/fit.py @@ -25,7 +25,7 @@ from eos import capSim from copy import deepcopy from math import sqrt, log, asinh from eos.types import Drone, Cargo, Ship, Character, State, Slot, Module, Implant, Booster, Skill -from eos.saveddata.module import State +from eos.saveddata.module import State, Hardpoint from eos.saveddata.mode import Mode import eos.db import time @@ -390,9 +390,9 @@ class Fit(object): self.__modifier = currModifier self.__origin = origin if hasattr(currModifier, "itemModifiedAttributes"): - currModifier.itemModifiedAttributes.fit = self + currModifier.itemModifiedAttributes.fit = origin or self if hasattr(currModifier, "chargeModifiedAttributes"): - currModifier.chargeModifiedAttributes.fit = self + currModifier.chargeModifiedAttributes.fit = origin or self def getModifier(self): return self.__modifier @@ -480,17 +480,22 @@ class Fit(object): self.__calculated = True for runTime in ("early", "normal", "late"): - c = chain( + # Items that are unrestricted. These items are run on the local fit + # first and then projected onto the target fit it one is designated + u = [ (self.character, self.ship), self.drones, self.boosters, self.appliedImplants, self.modules - ) + ] - if not projected: - # if not a projected fit, add a couple of more things - c = chain(c, (self.mode,), self.projectedDrones, self.projectedModules) + # Items that are restricted. These items are only run on the local + # fit. They are NOT projected onto the target fit. # See issue 354 + r = [(self.mode,), self.projectedDrones, self.projectedModules] + + # chain unrestricted and restricted into one iterable + c = chain.from_iterable(u+r) # We calculate gang bonuses first so that projected fits get them if self.gangBoosts is not None: @@ -500,9 +505,12 @@ class Fit(object): # Registering the item about to affect the fit allows us to # track "Affected By" relations correctly if item is not None: + # apply effects locally self.register(item) item.calculateModifiedAttributes(self, runTime, False) - if projected is True: + + if projected is True and item not in chain.from_iterable(r): + # apply effects onto target fit for _ in xrange(projectionInfo.amount): targetFit.register(item, origin=self) item.calculateModifiedAttributes(targetFit, runTime, True) @@ -839,10 +847,14 @@ class Fit(object): else: capAdded -= capNeed - drains.append((int(fullCycleTime), mod.getModifiedItemAttr("capacitorNeed") or 0, mod.numShots or 0)) + # If this is a turret, don't stagger activations + disableStagger = mod.hardpoint == Hardpoint.TURRET + + drains.append((int(fullCycleTime), mod.getModifiedItemAttr("capacitorNeed") or 0, mod.numShots or 0, disableStagger)) for fullCycleTime, capNeed, clipSize in self.iterDrains(): - drains.append((int(fullCycleTime), capNeed, clipSize)) + # Stagger incoming effects for cap simulation + drains.append((int(fullCycleTime), capNeed, clipSize, False)) if capNeed > 0: capUsed += capNeed / (fullCycleTime / 1000.0) else: diff --git a/eos/saveddata/implant.py b/eos/saveddata/implant.py index 64670d769..b5be77986 100644 --- a/eos/saveddata/implant.py +++ b/eos/saveddata/implant.py @@ -56,6 +56,7 @@ class Implant(HandledItem, ItemAttrShortcut): """ Build object. Assumes proper and valid item already set """ self.__itemModifiedAttributes = ModifiedAttributeDict() self.__itemModifiedAttributes.original = self.__item.attributes + self.__itemModifiedAttributes.overrides = self.__item.overrides self.__slot = self.__calculateSlot(self.__item) @property diff --git a/eos/saveddata/mode.py b/eos/saveddata/mode.py index 3a344d74d..91fbaf6eb 100644 --- a/eos/saveddata/mode.py +++ b/eos/saveddata/mode.py @@ -30,6 +30,7 @@ class Mode(ItemAttrShortcut, HandledItem): self.__item = item self.__itemModifiedAttributes = ModifiedAttributeDict() self.__itemModifiedAttributes.original = self.item.attributes + self.__itemModifiedAttributes.overrides = self.item.overrides @property def item(self): diff --git a/eos/saveddata/module.py b/eos/saveddata/module.py index 161ed2dbf..5fbb75e1c 100644 --- a/eos/saveddata/module.py +++ b/eos/saveddata/module.py @@ -113,10 +113,13 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): if self.__item: self.__itemModifiedAttributes.original = self.__item.attributes + self.__itemModifiedAttributes.overrides = self.__item.overrides self.__hardpoint = self.__calculateHardpoint(self.__item) self.__slot = self.__calculateSlot(self.__item) if self.__charge: self.__chargeModifiedAttributes.original = self.__charge.attributes + self.__chargeModifiedAttributes.overrides = self.__charge.overrides + @classmethod def buildEmpty(cls, slot): @@ -283,9 +286,11 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): if charge is not None: self.chargeID = charge.ID self.__chargeModifiedAttributes.original = charge.attributes + self.__chargeModifiedAttributes.overrides = charge.overrides else: self.chargeID = None self.__chargeModifiedAttributes.original = None + self.__chargeModifiedAttributes.overrides = {} self.__itemModifiedAttributes.clear() @@ -316,7 +321,7 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): self.__miningyield = 0 else: if self.state >= State.ACTIVE: - volley = sum(map(lambda attr: self.getModifiedItemAttr(attr) or 0, self.MINING_ATTRIBUTES)) + volley = self.getModifiedItemAttr("specialtyMiningAmount") or self.getModifiedItemAttr("miningAmount") or 0 if volley: cycleTime = self.cycleTime self.__miningyield = volley / (cycleTime / 1000.0) diff --git a/eos/saveddata/override.py b/eos/saveddata/override.py new file mode 100644 index 000000000..b33875e89 --- /dev/null +++ b/eos/saveddata/override.py @@ -0,0 +1,59 @@ +#=============================================================================== +# Copyright (C) 2015 Ryan Holmes +# +# This file is part of eos. +# +# eos is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# eos is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with eos. If not, see . +#=============================================================================== + +from eos.eqBase import EqBase +from sqlalchemy.orm import validates, reconstructor +import eos.db +import logging + +logger = logging.getLogger(__name__) + +class Override(EqBase): + + def __init__(self, item, attr, value): + self.itemID = item.ID + self.__item = item + self.attrID = attr.ID + self.__attr = attr + self.value = value + + @reconstructor + def init(self): + self.__attr = None + self.__item = None + + if self.attrID: + self.__attr = eos.db.getAttributeInfo(self.attrID) + if self.__attr is None: + logger.error("Attribute (id: %d) does not exist", self.attrID) + return + + if self.itemID: + self.__item = eos.db.getItem(self.itemID) + if self.__item is None: + logger.error("Item (id: %d) does not exist", self.itemID) + return + + @property + def attr(self): + return self.__attr + + @property + def item(self): + return self.__item diff --git a/eos/saveddata/ship.py b/eos/saveddata/ship.py index 094c02c3f..0a0e13c45 100644 --- a/eos/saveddata/ship.py +++ b/eos/saveddata/ship.py @@ -51,6 +51,7 @@ class Ship(ItemAttrShortcut, HandledItem): self.__itemModifiedAttributes = ModifiedAttributeDict() self.__itemModifiedAttributes.original = dict(self.item.attributes) self.__itemModifiedAttributes.original.update(self.EXTRA_ATTRIBUTES) + self.__itemModifiedAttributes.overrides = self.item.overrides self.commandBonus = 0 @@ -121,3 +122,8 @@ class Ship(ItemAttrShortcut, HandledItem): def __deepcopy__(self, memo): copy = Ship(self.item) return copy + + def __repr__(self): + return "Ship(ID={}, name={}) at {}".format( + self.item.ID, self.item.name, hex(id(self)) + ) diff --git a/eos/types.py b/eos/types.py index 6e98749d2..c1cafd1f5 100644 --- a/eos/types.py +++ b/eos/types.py @@ -21,6 +21,7 @@ from eos.gamedata import Attribute, Category, Effect, Group, Icon, Item, MarketG MetaGroup, AttributeInfo, Unit, EffectInfo, MetaType, MetaData, Traits from eos.saveddata.price import Price from eos.saveddata.user import User +from eos.saveddata.crestchar import CrestChar from eos.saveddata.damagePattern import DamagePattern from eos.saveddata.targetResists import TargetResists from eos.saveddata.character import Character, Skill @@ -35,4 +36,5 @@ from eos.saveddata.fit import Fit from eos.saveddata.mode import Mode from eos.saveddata.fleet import Fleet, Wing, Squad from eos.saveddata.miscData import MiscData +from eos.saveddata.override import Override import eos.db diff --git a/staticdata/eve.db b/eve.db similarity index 62% rename from staticdata/eve.db rename to eve.db index 785349e3f..e8b2f0337 100644 Binary files a/staticdata/eve.db and b/eve.db differ diff --git a/gui/PFSearchBox.py b/gui/PFSearchBox.py index 262d957c5..7fff91e9b 100644 --- a/gui/PFSearchBox.py +++ b/gui/PFSearchBox.py @@ -1,7 +1,7 @@ import wx import gui.utils.colorUtils as colorUtils import gui.utils.drawUtils as drawUtils -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader SearchButton, EVT_SEARCH_BTN = wx.lib.newevent.NewEvent() @@ -11,7 +11,7 @@ TextTyped, EVT_TEXT = wx.lib.newevent.NewEvent() class PFSearchBox(wx.Window): def __init__(self, parent, id = wx.ID_ANY, value = "", pos = wx.DefaultPosition, size = wx.Size(-1,24), style = 0): - wx.Window.__init__(self, parent, id, pos, size, style = 0) + wx.Window.__init__(self, parent, id, pos, size, style = style) self.isSearchButtonVisible = False self.isCancelButtonVisible = False @@ -49,10 +49,6 @@ class PFSearchBox(wx.Window): self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp) - self.Bind(wx.EVT_MOTION, self.OnMouseMove) - - self.Bind(wx.EVT_ENTER_WINDOW, self.OnEnterLeaveWindow) - self.Bind(wx.EVT_LEAVE_WINDOW, self.OnEnterLeaveWindow) # self.EditBox.ChangeValue(self.descriptiveText) @@ -64,25 +60,26 @@ class PFSearchBox(wx.Window): self.SetMinSize(size) - def OnEnterLeaveWindow(self, event): - self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) - self._hl = False - def OnText(self, event): wx.PostEvent(self, TextTyped()) + event.Skip() def OnTextEnter(self, event): wx.PostEvent(self, TextEnter()) + event.Skip() + def OnEditSetFocus(self, event): # value = self.EditBox.GetValue() # if value == self.descriptiveText: # self.EditBox.ChangeValue("") - pass + event.Skip() def OnEditKillFocus(self, event): if self.EditBox.GetValue() == "": self.Clear() + event.Skip() + def Clear(self): self.EditBox.Clear() @@ -138,20 +135,6 @@ class PFSearchBox(wx.Window): btnsize.append( (cw,ch)) return btnsize - def OnMouseMove(self, event): - btnpos = self.GetButtonsPos() - btnsize = self.GetButtonsSize() - for btn in xrange(2): - if self.HitTest(btnpos[btn], event.GetPosition(), btnsize[btn]): - if not self._hl: - self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) - self._hl = True - break - else: - if self._hl: - self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) - self._hl = False - def OnLeftDown(self, event): btnpos = self.GetButtonsPos() btnsize = self.GetButtonsSize() diff --git a/gui/aboutData.py b/gui/aboutData.py index 2623ddaa3..1cf8cc136 100644 --- a/gui/aboutData.py +++ b/gui/aboutData.py @@ -20,7 +20,7 @@ import config versionString = "{0} {1} - {2} {3}".format(config.version, config.tag, config.expansionName, config.expansionVersion) licenses = ( - "pyfa is released under GNU GPLv3 - see included gpl.txt", + "pyfa is released under GNU GPLv3 - see included LICENSE file", "All EVE-Online related materials are property of CCP hf.", "Silk Icons Set by famfamfam.com - Creative Commons Attribution 2.5 License", "Fat Cow Icons by fatcow.com - Creative Commons Attribution 3.0 License" diff --git a/gui/additionsPane.py b/gui/additionsPane.py index cefa7937d..61490671c 100644 --- a/gui/additionsPane.py +++ b/gui/additionsPane.py @@ -26,7 +26,7 @@ from gui.implantView import ImplantView from gui.projectedView import ProjectedView from gui.pyfatogglepanel import TogglePanel from gui.gangView import GangView -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader import gui.chromeTabs @@ -45,18 +45,16 @@ class AdditionsPane(TogglePanel): self.mainFrame = gui.mainFrame.MainFrame.getInstance() self.notebook = gui.chromeTabs.PFNotebook(pane, False) - size = wx.Size() - # This size lets you see 4 drones at a time - size.SetHeight(180) - self.notebook.SetMinSize(size) + self.notebook.SetMinSize((-1, 1000)) + baseSizer.Add(self.notebook, 1, wx.EXPAND) - droneImg = bitmapLoader.getImage("drone_small", "icons") - implantImg = bitmapLoader.getImage("implant_small", "icons") - boosterImg = bitmapLoader.getImage("booster_small", "icons") - projectedImg = bitmapLoader.getImage("projected_small", "icons") - gangImg = bitmapLoader.getImage("fleet_fc_small", "icons") - cargoImg = bitmapLoader.getImage("cargo_small", "icons") + droneImg = BitmapLoader.getImage("drone_small", "gui") + implantImg = BitmapLoader.getImage("implant_small", "gui") + boosterImg = BitmapLoader.getImage("booster_small", "gui") + projectedImg = BitmapLoader.getImage("projected_small", "gui") + gangImg = BitmapLoader.getImage("fleet_fc_small", "gui") + cargoImg = BitmapLoader.getImage("cargo_small", "gui") self.notebook.AddPage(DroneView(self.notebook), "Drones", tabImage = droneImg, showClose = False) self.notebook.AddPage(CargoView(self.notebook), "Cargo", tabImage = cargoImg, showClose = False) @@ -76,3 +74,21 @@ class AdditionsPane(TogglePanel): def getName(self, idx): return self.PANES[idx] + + def toggleContent(self, event): + TogglePanel.toggleContent(self, event) + h = self.headerPanel.GetSize()[1]+4 + + if self.IsCollapsed(): + self.old_pos = self.parent.GetSashPosition() + self.parent.SetMinimumPaneSize(h) + self.parent.SetSashPosition(h*-1, True) + # only available in >= wx2.9 + if getattr(self.parent, "SetSashInvisible", None): + self.parent.SetSashInvisible(True) + else: + if getattr(self.parent, "SetSashInvisible", None): + self.parent.SetSashInvisible(False) + self.parent.SetMinimumPaneSize(200) + self.parent.SetSashPosition(self.old_pos, True) + diff --git a/gui/bitmapLoader.py b/gui/bitmapLoader.py index 50feb8777..45026bedb 100644 --- a/gui/bitmapLoader.py +++ b/gui/bitmapLoader.py @@ -20,87 +20,74 @@ import os.path import config import wx -import time +import zipfile +import cStringIO try: from collections import OrderedDict except ImportError: from utils.compat import OrderedDict -cachedBitmapsCount = 0 -cachedBitmaps = OrderedDict() -dontUseCachedBitmaps = False +class BitmapLoader(): -def getStaticBitmap(name, parent, location): - static = wx.StaticBitmap(parent) - static.SetBitmap(getBitmap(name,location)) - return static + try: + archive = zipfile.ZipFile(os.path.join(config.pyfaPath, 'imgs.zip'), 'r') + except IOError: + archive = None -locationMap = {"pack": os.path.join(config.staticPath, "icons"), - "ships": os.path.join(config.staticPath, "icons/ships")} + cachedBitmaps = OrderedDict() + dontUseCachedBitmaps = False + max_bmps = 500 -def getBitmap(name,location): + @classmethod + def getStaticBitmap(cls, name, parent, location): + static = wx.StaticBitmap(parent) + static.SetBitmap(cls.getBitmap(name,location)) + return static - global cachedBitmaps - global cachedBitmapsCount - global dontUseCachedBitmaps + @classmethod + def getBitmap(cls, name, location): + if cls.dontUseCachedBitmaps: + img = cls.getImage(name, location) + if img is not None: + return img.ConvertToBitmap() - if dontUseCachedBitmaps: - img = getImage(name, location) - if img is not None: - return img.ConvertToBitmap() + path = "%s%s" % (name, location) - path = "%s%s" % (name,location) - MAX_BMPS = 500 -# start = time.clock() - if cachedBitmapsCount == MAX_BMPS: - cachedBitmaps.popitem(False) - cachedBitmapsCount -=1 + if len(cls.cachedBitmaps) == cls.max_bmps: + cls.cachedBitmaps.popitem(False) - if path not in cachedBitmaps: - img = getImage(name, location) - if img is not None: - bmp = img.ConvertToBitmap() + if path not in cls.cachedBitmaps: + img = cls.getImage(name, location) + if img is not None: + bmp = img.ConvertToBitmap() + else: + bmp = None + cls.cachedBitmaps[path] = bmp else: - bmp = None - cachedBitmaps[path] = bmp - cachedBitmapsCount += 1 - else: - bmp = cachedBitmaps[path] + bmp = cls.cachedBitmaps[path] -# print "#BMPs:%d - Current took: %.8f" % (cachedBitmapsCount,time.clock() - start) - return bmp + return bmp -def stripPath(fname): - """ - Here we extract 'core' of icon name. Path and - extension are sometimes specified in database - but we don't need them. - """ - # Path before the icon file name - fname = fname.split('/')[-1] - # Extension - fname = fname.rsplit('.', 1)[0] - return fname - -def getImage(name, location): - if location in locationMap: - if location == "pack": - location = locationMap[location] - name = stripPath(name) - filename = "icon{0}.png".format(name) - path = os.path.join(location, filename) - else: - location = locationMap[location] - filename = "{0}.png".format(name) - path = os.path.join(location, filename) - - else: - location = os.path.join(config.pyfaPath, location) + @classmethod + def getImage(cls, name, location): filename = "{0}.png".format(name) - path = os.path.join(location, filename) - if os.path.exists(path): - return wx.Image(path) - else: - print "Missing icon file: {0}".format(filename) + if cls.archive: + path = os.path.join(location, filename) + if os.sep != "/" and os.sep in path: + path = path.replace(os.sep, "/") + + try: + img_data = cls.archive.read(path) + sbuf = cStringIO.StringIO(img_data) + return wx.ImageFromStream(sbuf) + except KeyError: + print "Missing icon file from zip: {0}".format(path) + else: + path = os.path.join(config.pyfaPath, 'imgs', location, filename) + + if os.path.exists(path): + return wx.Image(path) + else: + print "Missing icon file: {0}".format(path) diff --git a/gui/builtinContextMenus/amount.py b/gui/builtinContextMenus/amount.py index 68712dba5..2fe32fc88 100644 --- a/gui/builtinContextMenus/amount.py +++ b/gui/builtinContextMenus/amount.py @@ -20,7 +20,6 @@ class ChangeAmount(ContextMenu): srcContext = fullContext[0] dlg = AmountChanger(self.mainFrame, selection[0], srcContext) dlg.ShowModal() - dlg.Destroy() ChangeAmount.register() @@ -59,7 +58,7 @@ class AmountChanger(wx.Dialog): wx.PostEvent(mainFrame, GE.FitChanged(fitID=fitID)) event.Skip() - self.Destroy() + self.Close() ## checks to make sure it's valid number def onChar(self, event): diff --git a/gui/builtinContextMenus/changeAffectingSkills.py b/gui/builtinContextMenus/changeAffectingSkills.py index 077584e95..3bc4c1e7d 100644 --- a/gui/builtinContextMenus/changeAffectingSkills.py +++ b/gui/builtinContextMenus/changeAffectingSkills.py @@ -3,7 +3,7 @@ from gui.contextMenu import ContextMenu import gui.mainFrame import service import wx -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader from eos.types import Skill import gui.globalEvents as GE @@ -74,7 +74,7 @@ class ChangeAffectingSkills(ContextMenu): grandSub = wx.Menu() skillItem.SetSubMenu(grandSub) if skill.learned: - bitmap = bitmapLoader.getBitmap("lvl%s" % skill.level, "icons") + bitmap = BitmapLoader.getBitmap("lvl%s" % skill.level, "gui") if bitmap is not None: skillItem.SetBitmap(bitmap) diff --git a/gui/builtinContextMenus/damagePattern.py b/gui/builtinContextMenus/damagePattern.py index 29a029389..3238b9b43 100644 --- a/gui/builtinContextMenus/damagePattern.py +++ b/gui/builtinContextMenus/damagePattern.py @@ -3,7 +3,7 @@ import gui.mainFrame import service import gui.globalEvents as GE import wx -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader try: from collections import OrderedDict @@ -65,7 +65,7 @@ class DamagePattern(ContextMenu): dp = f.damagePattern if dp == pattern: - bitmap = bitmapLoader.getBitmap("state_active_small", "icons") + bitmap = BitmapLoader.getBitmap("state_active_small", "gui") menuItem.SetBitmap(bitmap) return menuItem @@ -80,7 +80,7 @@ class DamagePattern(ContextMenu): self.patternIds[id] = self.singles[i] rootMenu.Bind(wx.EVT_MENU, self.handlePatternSwitch, pitem) if self.patternIds[id] == self.fit.damagePattern: - bitmap = bitmapLoader.getBitmap("state_active_small", "icons") + bitmap = BitmapLoader.getBitmap("state_active_small", "gui") pitem.SetBitmap(bitmap) return False diff --git a/gui/builtinContextMenus/factorReload.py b/gui/builtinContextMenus/factorReload.py index 133acad51..c258240ea 100644 --- a/gui/builtinContextMenus/factorReload.py +++ b/gui/builtinContextMenus/factorReload.py @@ -3,7 +3,7 @@ import gui.mainFrame import service import gui.globalEvents as GE import wx -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader class FactorReload(ContextMenu): def __init__(self): @@ -27,7 +27,7 @@ class FactorReload(ContextMenu): fitID = self.mainFrame.getActiveFit() fit = sFit.getFit(fitID) if fit.factorReload: - return bitmapLoader.getBitmap("state_active_small", "icons") + return BitmapLoader.getBitmap("state_active_small", "gui") else: return None diff --git a/gui/builtinContextMenus/moduleAmmoPicker.py b/gui/builtinContextMenus/moduleAmmoPicker.py index d64ec5321..24250b7de 100644 --- a/gui/builtinContextMenus/moduleAmmoPicker.py +++ b/gui/builtinContextMenus/moduleAmmoPicker.py @@ -3,7 +3,7 @@ from gui.contextMenu import ContextMenu import gui.mainFrame import service import wx -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader from eos.types import Hardpoint import gui.globalEvents as GE @@ -105,7 +105,7 @@ class ModuleAmmoPicker(ContextMenu): menu.Bind(wx.EVT_MENU, self.handleAmmoSwitch, item) item.charge = charge if charge is not None and charge.icon is not None: - bitmap = bitmapLoader.getBitmap(charge.icon.iconFile, "pack") + bitmap = BitmapLoader.getBitmap(charge.icon.iconFile, "icons") if bitmap is not None: item.SetBitmap(bitmap) @@ -181,7 +181,7 @@ class ModuleAmmoPicker(ContextMenu): type = currType item = wx.MenuItem(m, wx.ID_ANY, type.capitalize()) - bitmap = bitmapLoader.getBitmap("%s_small" % type, "icons") + bitmap = BitmapLoader.getBitmap("%s_small" % type, "gui") if bitmap is not None: item.SetBitmap(bitmap) diff --git a/gui/builtinContextMenus/moduleGlobalAmmoPicker.py b/gui/builtinContextMenus/moduleGlobalAmmoPicker.py index ad520e8ff..41f969b35 100644 --- a/gui/builtinContextMenus/moduleGlobalAmmoPicker.py +++ b/gui/builtinContextMenus/moduleGlobalAmmoPicker.py @@ -3,7 +3,7 @@ from gui.contextMenu import ContextMenu import gui.mainFrame import service import wx -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader from eos.types import Hardpoint import gui.globalEvents as GE from gui.builtinContextMenus.moduleAmmoPicker import ModuleAmmoPicker diff --git a/gui/builtinContextMenus/targetResists.py b/gui/builtinContextMenus/targetResists.py index 27e6c5153..4aeb10ffd 100644 --- a/gui/builtinContextMenus/targetResists.py +++ b/gui/builtinContextMenus/targetResists.py @@ -3,7 +3,7 @@ import gui.mainFrame import service import gui.globalEvents as GE import wx -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader try: from collections import OrderedDict @@ -56,7 +56,7 @@ class TargetResists(ContextMenu): tr = f.targetResists if tr == pattern: - bitmap = bitmapLoader.getBitmap("state_active_small", "icons") + bitmap = BitmapLoader.getBitmap("state_active_small", "gui") item.SetBitmap(bitmap) return item diff --git a/gui/builtinGraphs/fitDps.py b/gui/builtinGraphs/fitDps.py index 7b36b7d0d..ef2782674 100644 --- a/gui/builtinGraphs/fitDps.py +++ b/gui/builtinGraphs/fitDps.py @@ -19,7 +19,7 @@ from gui.graph import Graph import service -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader from eos.graph.fitDps import FitDpsGraph as FitDps from eos.graph import Data import gui.mainFrame @@ -56,7 +56,7 @@ class FitDpsGraph(Graph): sAttr = service.Attribute.getInstance() for key, attrName in self.propertyAttributeMap.iteritems(): iconFile = sAttr.getAttributeInfo(attrName).icon.iconFile - bitmap = bitmapLoader.getBitmap(iconFile, "pack") + bitmap = BitmapLoader.getBitmap(iconFile, "icons") if bitmap: icons[key] = bitmap diff --git a/gui/builtinPreferenceViews/__init__.py b/gui/builtinPreferenceViews/__init__.py index 923e011ab..9d29c75ff 100644 --- a/gui/builtinPreferenceViews/__init__.py +++ b/gui/builtinPreferenceViews/__init__.py @@ -1 +1,6 @@ __all__ = ["pyfaGeneralPreferences","pyfaHTMLExportPreferences","pyfaUpdatePreferences","pyfaNetworkPreferences"] + +import wx + +if not 'wxMac' in wx.PlatformInfo or ('wxMac' in wx.PlatformInfo and wx.VERSION >= (3,0)): + __all__.append("pyfaCrestPreferences") diff --git a/gui/builtinPreferenceViews/dummyView.py b/gui/builtinPreferenceViews/dummyView.py index 8cdb606a1..5b8822d1c 100644 --- a/gui/builtinPreferenceViews/dummyView.py +++ b/gui/builtinPreferenceViews/dummyView.py @@ -19,7 +19,7 @@ import wx from gui.preferenceView import PreferenceView -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader class DummyView(PreferenceView): title = "Dummy" diff --git a/gui/builtinPreferenceViews/pyfaCrestPreferences.py b/gui/builtinPreferenceViews/pyfaCrestPreferences.py new file mode 100644 index 000000000..308999953 --- /dev/null +++ b/gui/builtinPreferenceViews/pyfaCrestPreferences.py @@ -0,0 +1,120 @@ +import wx + +from gui.preferenceView import PreferenceView +from gui.bitmapLoader import BitmapLoader + +import gui.mainFrame +import service +from service.crest import CrestModes + +class PFCrestPref ( PreferenceView): + title = "CREST" + + def populatePanel( self, panel ): + + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + self.settings = service.settings.CRESTSettings.getInstance() + self.dirtySettings = False + dlgWidth = panel.GetParent().GetParent().ClientSize.width + mainSizer = wx.BoxSizer( wx.VERTICAL ) + + self.stTitle = wx.StaticText( panel, wx.ID_ANY, self.title, wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stTitle.Wrap( -1 ) + self.stTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) ) + + mainSizer.Add( self.stTitle, 0, wx.ALL, 5 ) + + self.m_staticline1 = wx.StaticLine( panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ) + mainSizer.Add( self.m_staticline1, 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5 ) + + self.stInfo = wx.StaticText( panel, wx.ID_ANY, u"Please see the pyfa wiki on GitHub for information regarding these options.", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stInfo.Wrap(dlgWidth - 50) + mainSizer.Add( self.stInfo, 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5 ) + + rbSizer = wx.BoxSizer(wx.HORIZONTAL) + self.rbMode = wx.RadioBox(panel, -1, "Mode", wx.DefaultPosition, wx.DefaultSize, ['Implicit', 'User-supplied details'], 1, wx.RA_SPECIFY_COLS) + self.rbServer = wx.RadioBox(panel, -1, "Server", wx.DefaultPosition, wx.DefaultSize, ['Tranquility', 'Singularity'], 1, wx.RA_SPECIFY_COLS) + + self.rbMode.SetSelection(self.settings.get('mode')) + self.rbServer.SetSelection(self.settings.get('server')) + + rbSizer.Add(self.rbMode, 1, wx.TOP | wx.RIGHT, 5 ) + rbSizer.Add(self.rbServer, 1, wx.ALL, 5 ) + + self.rbMode.Bind(wx.EVT_RADIOBOX, self.OnModeChange) + self.rbServer.Bind(wx.EVT_RADIOBOX, self.OnServerChange) + + mainSizer.Add(rbSizer, 1, wx.ALL|wx.EXPAND, 0) + + detailsTitle = wx.StaticText( panel, wx.ID_ANY, "CREST client details", wx.DefaultPosition, wx.DefaultSize, 0 ) + detailsTitle.Wrap( -1 ) + detailsTitle.SetFont( wx.Font( 12, 70, 90, 90, False, wx.EmptyString ) ) + + mainSizer.Add( detailsTitle, 0, wx.ALL, 5 ) + mainSizer.Add( wx.StaticLine( panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ), 0, wx.EXPAND, 5 ) + + + fgAddrSizer = wx.FlexGridSizer( 2, 2, 0, 0 ) + fgAddrSizer.AddGrowableCol( 1 ) + fgAddrSizer.SetFlexibleDirection( wx.BOTH ) + fgAddrSizer.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED ) + + self.stSetID = wx.StaticText( panel, wx.ID_ANY, u"Client ID:", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stSetID.Wrap( -1 ) + fgAddrSizer.Add( self.stSetID, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 ) + + self.inputClientID = wx.TextCtrl( panel, wx.ID_ANY, self.settings.get('clientID'), wx.DefaultPosition, wx.DefaultSize, 0 ) + + fgAddrSizer.Add( self.inputClientID, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, 5 ) + + self.stSetSecret = wx.StaticText( panel, wx.ID_ANY, u"Client Secret:", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.stSetSecret.Wrap( -1 ) + + fgAddrSizer.Add( self.stSetSecret, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5 ) + + self.inputClientSecret = wx.TextCtrl( panel, wx.ID_ANY, self.settings.get('clientSecret'), wx.DefaultPosition, wx.DefaultSize, 0 ) + + fgAddrSizer.Add( self.inputClientSecret, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, 5 ) + + self.btnApply = wx.Button( panel, wx.ID_ANY, u"Save Client Settings", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.btnApply.Bind(wx.EVT_BUTTON, self.OnBtnApply) + + mainSizer.Add( fgAddrSizer, 0, wx.EXPAND, 5) + mainSizer.Add( self.btnApply, 0, wx.ALIGN_RIGHT, 5) + + self.ToggleProxySettings(self.settings.get('mode')) + + panel.SetSizer( mainSizer ) + panel.Layout() + + def OnModeChange(self, event): + self.settings.set('mode', event.GetInt()) + self.ToggleProxySettings(self.settings.get('mode')) + service.Crest.restartService() + + def OnServerChange(self, event): + self.settings.set('server', event.GetInt()) + service.Crest.restartService() + + def OnBtnApply(self, event): + self.settings.set('clientID', self.inputClientID.GetValue()) + self.settings.set('clientSecret', self.inputClientSecret.GetValue()) + sCrest = service.Crest.getInstance() + sCrest.delAllCharacters() + + def ToggleProxySettings(self, mode): + if mode: + self.stSetID.Enable() + self.inputClientID.Enable() + self.stSetSecret.Enable() + self.inputClientSecret.Enable() + else: + self.stSetID.Disable() + self.inputClientID.Disable() + self.stSetSecret.Disable() + self.inputClientSecret.Disable() + + def getImage(self): + return BitmapLoader.getBitmap("eve", "gui") + +PFCrestPref.register() diff --git a/gui/builtinPreferenceViews/pyfaGaugePreferences.py b/gui/builtinPreferenceViews/pyfaGaugePreferences.py index f96e67618..4163eeaf4 100644 --- a/gui/builtinPreferenceViews/pyfaGaugePreferences.py +++ b/gui/builtinPreferenceViews/pyfaGaugePreferences.py @@ -6,7 +6,7 @@ import wx import copy from gui.preferenceView import PreferenceView -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader from gui.utils import colorUtils import gui.utils.drawUtils as drawUtils @@ -313,7 +313,7 @@ class PFGaugePref ( PreferenceView): self.cp103105E.Bind( wx.EVT_COLOURPICKER_CHANGED, self.OnColourChanged ) def getImage(self): - return bitmapLoader.getBitmap("pref-gauges_big", "icons") + return BitmapLoader.getBitmap("pref-gauges_big", "gui") def InitDefaultColours(self): self.c0100S = wx.Colour(191, 191, 191, 255) diff --git a/gui/builtinPreferenceViews/pyfaGeneralPreferences.py b/gui/builtinPreferenceViews/pyfaGeneralPreferences.py index 87f506ba6..75d1273c0 100644 --- a/gui/builtinPreferenceViews/pyfaGeneralPreferences.py +++ b/gui/builtinPreferenceViews/pyfaGeneralPreferences.py @@ -1,7 +1,7 @@ import wx from gui.preferenceView import PreferenceView -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader import gui.mainFrame import service @@ -144,6 +144,6 @@ class PFGeneralPref ( PreferenceView): self.sFit.serviceFittingOptions["showMarketShortcuts"] = self.cbMarketShortcuts.GetValue() def getImage(self): - return bitmapLoader.getBitmap("prefs_settings", "icons") + return BitmapLoader.getBitmap("prefs_settings", "gui") PFGeneralPref.register() diff --git a/gui/builtinPreferenceViews/pyfaHTMLExportPreferences.py b/gui/builtinPreferenceViews/pyfaHTMLExportPreferences.py index 992fff1a3..e028ef478 100644 --- a/gui/builtinPreferenceViews/pyfaHTMLExportPreferences.py +++ b/gui/builtinPreferenceViews/pyfaHTMLExportPreferences.py @@ -2,7 +2,7 @@ import wx import os from gui.preferenceView import PreferenceView -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader import gui.mainFrame import service @@ -76,6 +76,6 @@ class PFHTMLExportPref ( PreferenceView): self.HTMLExportSettings.setEnabled(self.exportEnabled.GetValue()) def getImage(self): - return bitmapLoader.getBitmap("prefs_html", "icons") + return BitmapLoader.getBitmap("prefs_html", "gui") PFHTMLExportPref.register() diff --git a/gui/builtinPreferenceViews/pyfaNetworkPreferences.py b/gui/builtinPreferenceViews/pyfaNetworkPreferences.py index 059a505de..b4c0dedae 100644 --- a/gui/builtinPreferenceViews/pyfaNetworkPreferences.py +++ b/gui/builtinPreferenceViews/pyfaNetworkPreferences.py @@ -1,7 +1,7 @@ import wx from gui.preferenceView import PreferenceView -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader import gui.mainFrame import service @@ -223,6 +223,6 @@ class PFNetworkPref ( PreferenceView): self.editProxySettingsPort.Disable() def getImage(self): - return bitmapLoader.getBitmap("prefs_proxy", "icons") + return BitmapLoader.getBitmap("prefs_proxy", "gui") PFNetworkPref.register() diff --git a/gui/builtinPreferenceViews/pyfaUpdatePreferences.py b/gui/builtinPreferenceViews/pyfaUpdatePreferences.py index f76542b39..260987287 100644 --- a/gui/builtinPreferenceViews/pyfaUpdatePreferences.py +++ b/gui/builtinPreferenceViews/pyfaUpdatePreferences.py @@ -3,7 +3,7 @@ import service import os from gui.preferenceView import PreferenceView -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader import service import gui.globalEvents as GE @@ -99,6 +99,6 @@ class PFUpdatePref (PreferenceView): wx.LaunchDefaultBrowser('https://github.com/DarkFenX/Pyfa/releases/tag/'+self.UpdateSettings.get('version')) def getImage(self): - return bitmapLoader.getBitmap("prefs_update", "icons") + return BitmapLoader.getBitmap("prefs_update", "gui") PFUpdatePref.register() diff --git a/gui/builtinStatsViews/capacitorViewFull.py b/gui/builtinStatsViews/capacitorViewFull.py index b140aea36..c07045199 100644 --- a/gui/builtinStatsViews/capacitorViewFull.py +++ b/gui/builtinStatsViews/capacitorViewFull.py @@ -20,7 +20,7 @@ import wx from gui.statsView import StatsView from gui import builtinStatsViews -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader from gui.utils.numberFormatter import formatAmount class CapacitorViewFull(StatsView): @@ -48,7 +48,7 @@ class CapacitorViewFull(StatsView): baseBox = wx.BoxSizer(wx.HORIZONTAL) sizerCapacitor.Add(baseBox, 0, wx.ALIGN_LEFT) - bitmap = bitmapLoader.getStaticBitmap("capacitorInfo_big", parent, "icons") + bitmap = BitmapLoader.getStaticBitmap("capacitorInfo_big", parent, "gui") tooltip = wx.ToolTip("Capacitor stability") bitmap.SetToolTip(tooltip) baseBox.Add(bitmap, 0, wx.ALIGN_CENTER) @@ -83,7 +83,7 @@ class CapacitorViewFull(StatsView): sizerCapacitor.Add(baseBox, 0, wx.ALIGN_CENTER_HORIZONTAL) tooltip = wx.ToolTip("Capacitor throughput") - bitmap = bitmapLoader.getStaticBitmap("capacitorRecharge_big", parent, "icons") + bitmap = BitmapLoader.getStaticBitmap("capacitorRecharge_big", parent, "gui") bitmap.SetToolTip(tooltip) baseBox.Add(bitmap, 0, wx.ALIGN_CENTER) diff --git a/gui/builtinStatsViews/firepowerViewFull.py b/gui/builtinStatsViews/firepowerViewFull.py index a7180252e..0e8d1c070 100644 --- a/gui/builtinStatsViews/firepowerViewFull.py +++ b/gui/builtinStatsViews/firepowerViewFull.py @@ -21,7 +21,7 @@ import wx import service import gui.mainFrame from gui.statsView import StatsView -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader from gui.utils.numberFormatter import formatAmount class FirepowerViewFull(StatsView): @@ -61,7 +61,7 @@ class FirepowerViewFull(StatsView): baseBox = wx.BoxSizer(wx.HORIZONTAL) sizerFirepower.Add(baseBox, 1, wx.ALIGN_LEFT if counter == 0 else wx.ALIGN_CENTER_HORIZONTAL) - baseBox.Add(bitmapLoader.getStaticBitmap("%s_big" % image, parent, "icons"), 0, wx.ALIGN_CENTER) + baseBox.Add(BitmapLoader.getStaticBitmap("%s_big" % image, parent, "gui"), 0, wx.ALIGN_CENTER) box = wx.BoxSizer(wx.VERTICAL) baseBox.Add(box, 0, wx.ALIGN_CENTER) @@ -82,7 +82,7 @@ class FirepowerViewFull(StatsView): baseBox = wx.BoxSizer(wx.HORIZONTAL) targetSizer.Add(baseBox, 0, wx.ALIGN_RIGHT) - baseBox.Add(bitmapLoader.getStaticBitmap("volley_big", parent, "icons"), 0, wx.ALIGN_CENTER) + baseBox.Add(BitmapLoader.getStaticBitmap("volley_big", parent, "gui"), 0, wx.ALIGN_CENTER) gridS = wx.GridSizer(2,2,0,0) @@ -103,7 +103,7 @@ class FirepowerViewFull(StatsView): gridS.Add(lbl, 0, wx.ALIGN_LEFT) - image = bitmapLoader.getBitmap("mining_small", "icons") + image = BitmapLoader.getBitmap("mining_small", "gui") self.miningyield = wx.BitmapButton(contentPanel, -1, image) self.miningyield.SetToolTip(wx.ToolTip("Click to toggle to Mining Yield ")) self.miningyield.Bind(wx.EVT_BUTTON, self.switchToMiningYieldView) diff --git a/gui/builtinStatsViews/miningyieldViewFull.py b/gui/builtinStatsViews/miningyieldViewFull.py index a83800d70..ab4df69e9 100644 --- a/gui/builtinStatsViews/miningyieldViewFull.py +++ b/gui/builtinStatsViews/miningyieldViewFull.py @@ -21,7 +21,7 @@ import wx import service import gui.mainFrame from gui.statsView import StatsView -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader from gui.utils.numberFormatter import formatAmount class MiningYieldViewFull(StatsView): @@ -55,7 +55,7 @@ class MiningYieldViewFull(StatsView): baseBox = wx.BoxSizer(wx.HORIZONTAL) sizerMiningYield.Add(baseBox, 1, wx.ALIGN_LEFT if counter == 0 else wx.ALIGN_CENTER_HORIZONTAL) - baseBox.Add(bitmapLoader.getStaticBitmap("%s_big" % image, parent, "icons"), 0, wx.ALIGN_CENTER) + baseBox.Add(BitmapLoader.getStaticBitmap("%s_big" % image, parent, "gui"), 0, wx.ALIGN_CENTER) box = wx.BoxSizer(wx.VERTICAL) baseBox.Add(box, 0, wx.ALIGN_CENTER) @@ -76,7 +76,7 @@ class MiningYieldViewFull(StatsView): baseBox = wx.BoxSizer(wx.HORIZONTAL) targetSizer.Add(baseBox, 0, wx.ALIGN_LEFT) - baseBox.Add(bitmapLoader.getStaticBitmap("cargoBay_big", parent, "icons"), 0, wx.ALIGN_CENTER) + baseBox.Add(BitmapLoader.getStaticBitmap("cargoBay_big", parent, "gui"), 0, wx.ALIGN_CENTER) box = wx.BoxSizer(wx.VERTICAL) baseBox.Add(box, 0, wx.EXPAND) @@ -92,7 +92,7 @@ class MiningYieldViewFull(StatsView): self._cachedValues.append(0) - image = bitmapLoader.getBitmap("turret_small", "icons") + image = BitmapLoader.getBitmap("turret_small", "gui") firepower = wx.BitmapButton(contentPanel, -1, image) firepower.SetToolTip(wx.ToolTip("Click to toggle to Firepower View")) firepower.Bind(wx.EVT_BUTTON, self.switchToFirepowerView) diff --git a/gui/builtinStatsViews/priceViewFull.py b/gui/builtinStatsViews/priceViewFull.py index f1d3fbd1d..ea7d53340 100644 --- a/gui/builtinStatsViews/priceViewFull.py +++ b/gui/builtinStatsViews/priceViewFull.py @@ -20,7 +20,7 @@ import wx from gui.statsView import StatsView from gui import builtinStatsViews -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader from gui.utils.numberFormatter import formatAmount import service import locale @@ -56,7 +56,7 @@ class PriceViewFull(StatsView): box = wx.BoxSizer(wx.HORIZONTAL) gridPrice.Add(box, 0, wx.ALIGN_TOP) - box.Add(bitmapLoader.getStaticBitmap(image, contentPanel, "icons"), 0, wx.ALIGN_CENTER) + box.Add(BitmapLoader.getStaticBitmap(image, contentPanel, "gui"), 0, wx.ALIGN_CENTER) vbox = wx.BoxSizer(wx.VERTICAL) box.Add(vbox, 1, wx.EXPAND) diff --git a/gui/builtinStatsViews/rechargeViewFull.py b/gui/builtinStatsViews/rechargeViewFull.py index 8ec9a9b55..c73aaf0b4 100644 --- a/gui/builtinStatsViews/rechargeViewFull.py +++ b/gui/builtinStatsViews/rechargeViewFull.py @@ -19,7 +19,7 @@ import wx from gui.statsView import StatsView -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader from gui.utils.numberFormatter import formatAmount import gui.mainFrame import gui.builtinStatsViews.resistancesViewFull as rvf @@ -62,14 +62,14 @@ class RechargeViewFull(StatsView): sizerTankStats.Add(wx.StaticText(contentPanel, wx.ID_ANY, ""), 0) toolTipText = {"shieldPassive" : "Passive shield recharge", "shieldActive" : "Active shield boost", "armorActive" : "Armor repair amount", "hullActive" : "Hull repair amount"} for tankType in ("shieldPassive", "shieldActive", "armorActive", "hullActive"): - bitmap = bitmapLoader.getStaticBitmap("%s_big" % tankType, contentPanel, "icons") + bitmap = BitmapLoader.getStaticBitmap("%s_big" % tankType, contentPanel, "gui") tooltip = wx.ToolTip(toolTipText[tankType]) bitmap.SetToolTip(tooltip) sizerTankStats.Add(bitmap, 0, wx.ALIGN_CENTER) toolTipText = {"reinforced" : "Reinforced", "sustained" : "Sustained"} for stability in ("reinforced", "sustained"): - bitmap = bitmapLoader.getStaticBitmap("regen%s_big" % stability.capitalize(), contentPanel, "icons") + bitmap = BitmapLoader.getStaticBitmap("regen%s_big" % stability.capitalize(), contentPanel, "gui") tooltip = wx.ToolTip(toolTipText[stability]) bitmap.SetToolTip(tooltip) sizerTankStats.Add(bitmap, 0, wx.ALIGN_CENTER) diff --git a/gui/builtinStatsViews/resistancesViewFull.py b/gui/builtinStatsViews/resistancesViewFull.py index a35424335..85f9dbd06 100644 --- a/gui/builtinStatsViews/resistancesViewFull.py +++ b/gui/builtinStatsViews/resistancesViewFull.py @@ -20,7 +20,7 @@ import wx from gui.statsView import StatsView from gui import builtinStatsViews -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader from gui import pygauge as PG from gui.utils.numberFormatter import formatAmount import service @@ -74,18 +74,15 @@ class ResistancesViewFull(StatsView): # Display table col = 0 row = 0 - sizerResistances = wx.GridBagSizer(0, 0) + sizerResistances = wx.GridBagSizer() contentSizer.Add( sizerResistances, 0, wx.EXPAND , 0) - for i in xrange(6): - sizerResistances.AddGrowableCol(i + 1) - # Add an empty label, then the rest. sizerResistances.Add(wx.StaticText(contentPanel, wx.ID_ANY), wx.GBPosition( row, col ), wx.GBSpan( 1, 1 )) col+=1 toolTipText = {"em" : "Electromagnetic resistance", "thermal" : "Thermal resistance", "kinetic" : "Kinetic resistance", "explosive" : "Explosive resistance"} for damageType in ("em", "thermal", "kinetic", "explosive"): - bitmap = bitmapLoader.getStaticBitmap("%s_big" % damageType, contentPanel, "icons") + bitmap = BitmapLoader.getStaticBitmap("%s_big" % damageType, contentPanel, "gui") tooltip = wx.ToolTip(toolTipText[damageType]) bitmap.SetToolTip(tooltip) sizerResistances.Add(bitmap, wx.GBPosition( row, col ), wx.GBSpan( 1, 1 ), wx.ALIGN_CENTER) @@ -95,6 +92,8 @@ class ResistancesViewFull(StatsView): self.stEHPs.Bind(wx.EVT_BUTTON, self.toggleEHP) + for i in xrange(4): + sizerResistances.AddGrowableCol(i+1) sizerResistances.Add(self.stEHPs, wx.GBPosition( row, col ), wx.GBSpan( 1, 1 ), wx.ALIGN_CENTER) col=0 @@ -105,7 +104,7 @@ class ResistancesViewFull(StatsView): toolTipText = {"shield" : "Shield resistance", "armor" : "Armor resistance", "hull" : "Hull resistance", "damagePattern" : "Incoming damage pattern"} for tankType in ("shield", "armor", "hull", "separator", "damagePattern"): if tankType != "separator": - bitmap = bitmapLoader.getStaticBitmap("%s_big" % tankType, contentPanel, "icons") + bitmap = BitmapLoader.getStaticBitmap("%s_big" % tankType, contentPanel, "gui") tooltip = wx.ToolTip(toolTipText[tankType]) bitmap.SetToolTip(tooltip) sizerResistances.Add(bitmap, wx.GBPosition( row, col ), wx.GBSpan( 1, 1 ), wx.ALIGN_CENTER) diff --git a/gui/builtinStatsViews/resourcesViewFull.py b/gui/builtinStatsViews/resourcesViewFull.py index a06c75a7e..24497ecfc 100644 --- a/gui/builtinStatsViews/resourcesViewFull.py +++ b/gui/builtinStatsViews/resourcesViewFull.py @@ -20,7 +20,7 @@ import wx from gui.statsView import StatsView from gui import builtinStatsViews -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader from gui import pygauge as PG import gui.mainFrame import gui.chromeTabs @@ -91,7 +91,7 @@ class ResourcesViewFull(StatsView): for type in ("turret", "launcher", "drones", "calibration"): box = wx.BoxSizer(wx.HORIZONTAL) - bitmap = bitmapLoader.getStaticBitmap("%s_big" % type, parent, "icons") + bitmap = BitmapLoader.getStaticBitmap("%s_big" % type, parent, "gui") tooltip = wx.ToolTip(tooltipText[type]) bitmap.SetToolTip(tooltip) @@ -119,7 +119,7 @@ class ResourcesViewFull(StatsView): for type in group: capitalizedType = type[0].capitalize() + type[1:] - bitmap = bitmapLoader.getStaticBitmap(type + "_big", parent, "icons") + bitmap = BitmapLoader.getStaticBitmap(type + "_big", parent, "gui") tooltip = wx.ToolTip(tooltipText[type]) bitmap.SetToolTip(tooltip) diff --git a/gui/builtinStatsViews/targetingMiscViewFull.py b/gui/builtinStatsViews/targetingMiscViewFull.py index afb97fdee..714294323 100644 --- a/gui/builtinStatsViews/targetingMiscViewFull.py +++ b/gui/builtinStatsViews/targetingMiscViewFull.py @@ -52,7 +52,7 @@ class TargetingMiscViewFull(StatsView): gridTargetingMisc.AddGrowableCol(2) # Targeting - gridTargeting = wx.FlexGridSizer(4, 2) + gridTargeting = wx.FlexGridSizer(5, 2) gridTargeting.AddGrowableCol(1) gridTargetingMisc.Add(gridTargeting, 0, wx.ALIGN_LEFT | wx.ALL, 5) @@ -77,7 +77,7 @@ class TargetingMiscViewFull(StatsView): # Misc gridTargetingMisc.Add( wx.StaticLine( contentPanel, wx.ID_ANY, style = wx.VERTICAL),0, wx.EXPAND, 3 ) - gridMisc = wx.FlexGridSizer(4, 2) + gridMisc = wx.FlexGridSizer(5, 2) gridMisc.AddGrowableCol(1) gridTargetingMisc.Add(gridMisc,0 , wx.ALIGN_LEFT | wx.ALL, 5) diff --git a/gui/builtinViewColumns/ammo.py b/gui/builtinViewColumns/ammo.py index fe50c6fbd..ba22229af 100644 --- a/gui/builtinViewColumns/ammo.py +++ b/gui/builtinViewColumns/ammo.py @@ -19,7 +19,7 @@ from gui import builtinViewColumns from gui.viewColumn import ViewColumn -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader import wx class Ammo(ViewColumn): @@ -27,20 +27,21 @@ class Ammo(ViewColumn): def __init__(self, fittingView, params): ViewColumn.__init__(self, fittingView) self.mask = wx.LIST_MASK_IMAGE - self.imageId = fittingView.imageList.GetImageIndex("damagePattern_small", "icons") - self.bitmap = bitmapLoader.getBitmap("damagePattern_small", "icons") + self.imageId = fittingView.imageList.GetImageIndex("damagePattern_small", "gui") + self.bitmap = BitmapLoader.getBitmap("damagePattern_small", "gui") def getText(self, stuff): if getattr(stuff, "charge", None) is not None: - shots = stuff.numShots - if shots > 0: - text = "%s (%s)" % (stuff.charge.name, stuff.numShots) + charges = stuff.numCharges + if charges > 0: + cycles = stuff.numShots + if cycles !=0 and charges != cycles: + return "%s (%d, %d cycles)" % (stuff.charge.name, charges, cycles) + else: + return "%s (%d)" % (stuff.charge.name, charges) else: - text = stuff.charge.name - else: - text = "" - - return text + return stuff.charge.name + return "" def getImageId(self, mod): return -1 diff --git a/gui/builtinViewColumns/ammoIcon.py b/gui/builtinViewColumns/ammoIcon.py index 1dfddf791..262f01efa 100644 --- a/gui/builtinViewColumns/ammoIcon.py +++ b/gui/builtinViewColumns/ammoIcon.py @@ -19,7 +19,7 @@ from gui import builtinViewColumns from gui.viewColumn import ViewColumn -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader import wx from eos.types import Module @@ -27,7 +27,7 @@ class AmmoIcon(ViewColumn): name = "Ammo Icon" def __init__(self, fittingView, params): ViewColumn.__init__(self, fittingView) - self.size = 16 + self.size = 24 self.maxsize = self.size self.mask = wx.LIST_MASK_IMAGE self.columnText = "" @@ -44,7 +44,7 @@ class AmmoIcon(ViewColumn): else: iconFile = stuff.charge.icon.iconFile if stuff.item.icon else "" if iconFile: - return self.fittingView.imageList.GetImageIndex(iconFile, "pack") + return self.fittingView.imageList.GetImageIndex(iconFile, "icons") else: return -1 diff --git a/gui/builtinViewColumns/attributeDisplay.py b/gui/builtinViewColumns/attributeDisplay.py index 86966574b..47d9aa043 100644 --- a/gui/builtinViewColumns/attributeDisplay.py +++ b/gui/builtinViewColumns/attributeDisplay.py @@ -19,7 +19,7 @@ from gui import builtinViewColumns from gui.viewColumn import ViewColumn -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader from gui.utils.numberFormatter import formatAmount import service @@ -35,13 +35,13 @@ class AttributeDisplay(ViewColumn): if params["showIcon"]: if info.name == "power": iconFile = "pg_small" - iconType = "icons" + iconType = "gui" else: iconFile = info.icon.iconFile if info.icon else None - iconType = "pack" + iconType = "icons" if iconFile: self.imageId = fittingView.imageList.GetImageIndex(iconFile, iconType) - self.bitmap = bitmapLoader.getBitmap(iconFile, iconType) + self.bitmap = BitmapLoader.getBitmap(iconFile, iconType) else: self.imageId = -1 diff --git a/gui/builtinViewColumns/baseIcon.py b/gui/builtinViewColumns/baseIcon.py index 5f88227a6..30cbf6fb2 100644 --- a/gui/builtinViewColumns/baseIcon.py +++ b/gui/builtinViewColumns/baseIcon.py @@ -1,6 +1,6 @@ from gui import builtinViewColumns from gui.viewColumn import ViewColumn -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader import wx from eos.types import Drone, Fit, Module, Slot, Rack @@ -8,11 +8,11 @@ class BaseIcon(ViewColumn): name = "Base Icon" def __init__(self, fittingView, params): ViewColumn.__init__(self, fittingView) - self.size = 16 + self.size = 24 self.maxsize = self.size self.mask = wx.LIST_MASK_IMAGE self.columnText = "" - self.shipImage = fittingView.imageList.GetImageIndex("ship_small", "icons") + self.shipImage = fittingView.imageList.GetImageIndex("ship_small", "gui") def getImageId(self, stuff): if isinstance(stuff, Drone): @@ -23,7 +23,7 @@ class BaseIcon(ViewColumn): return -1 if isinstance(stuff, Module): if stuff.isEmpty: - return self.fittingView.imageList.GetImageIndex("slot_%s_small" % Slot.getName(stuff.slot).lower(), "icons") + return self.fittingView.imageList.GetImageIndex("slot_%s_small" % Slot.getName(stuff.slot).lower(), "gui") else: return self.loadIconFile(stuff.item.icon.iconFile if stuff.item.icon else "") @@ -32,7 +32,7 @@ class BaseIcon(ViewColumn): def loadIconFile(self, iconFile): if iconFile: - return self.fittingView.imageList.GetImageIndex(iconFile, "pack") + return self.fittingView.imageList.GetImageIndex(iconFile, "icons") else: return -1 diff --git a/gui/builtinViewColumns/baseName.py b/gui/builtinViewColumns/baseName.py index 97b992337..e5f59a9e2 100644 --- a/gui/builtinViewColumns/baseName.py +++ b/gui/builtinViewColumns/baseName.py @@ -32,7 +32,7 @@ class BaseName(ViewColumn): self.mainFrame = gui.mainFrame.MainFrame.getInstance() self.columnText = "Name" - self.shipImage = fittingView.imageList.GetImageIndex("ship_small", "icons") + self.shipImage = fittingView.imageList.GetImageIndex("ship_small", "gui") self.mask = wx.LIST_MASK_TEXT self.projectedView = isinstance(fittingView, gui.projectedView.ProjectedView) @@ -70,6 +70,7 @@ class BaseName(ViewColumn): if marketShortcut: # use unicode subscript to display shortcut value shortcut = unichr(marketShortcut+8320)+u" " + del item.marketShortcut return shortcut+item.name return item.name diff --git a/gui/builtinViewColumns/capacitorUse.py b/gui/builtinViewColumns/capacitorUse.py index 497869a66..4a3407ab9 100644 --- a/gui/builtinViewColumns/capacitorUse.py +++ b/gui/builtinViewColumns/capacitorUse.py @@ -22,7 +22,7 @@ import service from gui.utils.numberFormatter import formatAmount from gui.viewColumn import ViewColumn -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader from eos.types import Mode class CapacitorUse(ViewColumn): @@ -34,8 +34,8 @@ class CapacitorUse(ViewColumn): sAttr = service.Attribute.getInstance() info = sAttr.getAttributeInfo("capacitorNeed") - self.imageId = fittingView.imageList.GetImageIndex("capacitorRecharge_small", "icons") - self.bitmap = bitmapLoader.getBitmap("capacitorRecharge_small", "icons") + self.imageId = fittingView.imageList.GetImageIndex("capacitorRecharge_small", "gui") + self.bitmap = BitmapLoader.getBitmap("capacitorRecharge_small", "gui") def getText(self, mod): if isinstance(mod, Mode): diff --git a/gui/builtinViewColumns/maxRange.py b/gui/builtinViewColumns/maxRange.py index 17d27ef5d..eb8f8d693 100644 --- a/gui/builtinViewColumns/maxRange.py +++ b/gui/builtinViewColumns/maxRange.py @@ -19,7 +19,7 @@ from gui import builtinViewColumns from gui.viewColumn import ViewColumn -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader import service from gui.utils.numberFormatter import formatAmount import wx @@ -39,8 +39,8 @@ class MaxRange(ViewColumn): if params["showIcon"]: iconFile = info.icon.iconFile if info.icon else None if iconFile: - self.imageId = fittingView.imageList.GetImageIndex(iconFile, "pack") - self.bitmap = bitmapLoader.getBitmap(iconFile, "pack") + self.imageId = fittingView.imageList.GetImageIndex(iconFile, "icons") + self.bitmap = BitmapLoader.getBitmap(iconFile, "icons") else: self.imageId = -1 self.mask = wx.LIST_MASK_IMAGE diff --git a/gui/builtinViewColumns/misc.py b/gui/builtinViewColumns/misc.py index 75b127bbd..034ef792d 100644 --- a/gui/builtinViewColumns/misc.py +++ b/gui/builtinViewColumns/misc.py @@ -20,7 +20,7 @@ import gui.mainFrame from gui.viewColumn import ViewColumn -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader from gui.utils.numberFormatter import formatAmount from gui.utils.listFormatter import formatList from service.fit import Fit, Market @@ -35,8 +35,8 @@ class Miscellanea(ViewColumn): "displayName": False} ViewColumn.__init__(self, fittingView) if params["showIcon"]: - self.imageId = fittingView.imageList.GetImageIndex("column_misc", "icons") - self.bitmap = bitmapLoader.getBitmap("column_misc", "icons") + self.imageId = fittingView.imageList.GetImageIndex("column_misc", "gui") + self.bitmap = BitmapLoader.getBitmap("column_misc", "gui") self.mask = wx.LIST_MASK_IMAGE else: self.imageId = -1 @@ -374,7 +374,7 @@ class Miscellanea(ViewColumn): tooltip = "Optimal signature radius" return text, tooltip elif itemGroup in ("Frequency Mining Laser", "Strip Miner", "Mining Laser", "Gas Cloud Harvester"): - miningAmount = stuff.getModifiedItemAttr("miningAmount") + miningAmount = stuff.getModifiedItemAttr("specialtyMiningAmount") or stuff.getModifiedItemAttr("miningAmount") cycleTime = stuff.cycleTime if not miningAmount or not cycleTime: return "", None diff --git a/gui/builtinViewColumns/price.py b/gui/builtinViewColumns/price.py index c046a4b55..74d2fc890 100644 --- a/gui/builtinViewColumns/price.py +++ b/gui/builtinViewColumns/price.py @@ -18,7 +18,7 @@ #=============================================================================== from gui.viewColumn import ViewColumn -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader from gui.utils.numberFormatter import formatAmount from eos.types import Drone, Cargo import wx @@ -29,8 +29,8 @@ class Price(ViewColumn): def __init__(self, fittingView, params): ViewColumn.__init__(self, fittingView) self.mask = wx.LIST_MASK_IMAGE - self.bitmap = bitmapLoader.getBitmap("totalPrice_small", "icons") - self.imageId = fittingView.imageList.GetImageIndex("totalPrice_small", "icons") + self.bitmap = BitmapLoader.getBitmap("totalPrice_small", "gui") + self.imageId = fittingView.imageList.GetImageIndex("totalPrice_small", "gui") def getText(self, stuff): if stuff.item is None or stuff.item.group.name == "Ship Modifiers": diff --git a/gui/builtinViewColumns/propertyDisplay.py b/gui/builtinViewColumns/propertyDisplay.py index bd471f351..0bfee5899 100644 --- a/gui/builtinViewColumns/propertyDisplay.py +++ b/gui/builtinViewColumns/propertyDisplay.py @@ -18,7 +18,7 @@ #=============================================================================== from gui.viewColumn import ViewColumn -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader from gui.utils.numberFormatter import formatAmount import wx import service @@ -39,10 +39,10 @@ class PropertyDisplay(ViewColumn): if params["showIcon"]: if info.name == "power": iconFile = "pg_small" - iconType = "icons" + iconType = "gui" else: iconFile = info.icon.iconFile if info.icon else None - iconType = "pack" + iconType = "icons" if iconFile: self.imageId = fittingView.imageList.GetImageIndex(iconFile, iconType) else: diff --git a/gui/builtinViewColumns/state.py b/gui/builtinViewColumns/state.py index 8110a85ad..c12db54df 100644 --- a/gui/builtinViewColumns/state.py +++ b/gui/builtinViewColumns/state.py @@ -18,7 +18,7 @@ #=============================================================================== from gui.viewColumn import ViewColumn -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader import gui.mainFrame import wx @@ -43,8 +43,8 @@ class State(ViewColumn): return State_.getName(mod.state).title() def getImageId(self, stuff): - generic_active = self.fittingView.imageList.GetImageIndex("state_%s_small" % State_.getName(1).lower(), "icons") - generic_inactive = self.fittingView.imageList.GetImageIndex("state_%s_small" % State_.getName(-1).lower(), "icons") + generic_active = self.fittingView.imageList.GetImageIndex("state_%s_small" % State_.getName(1).lower(), "gui") + generic_inactive = self.fittingView.imageList.GetImageIndex("state_%s_small" % State_.getName(-1).lower(), "gui") if isinstance(stuff, Drone): if stuff.amountActive > 0: @@ -57,7 +57,7 @@ class State(ViewColumn): if stuff.isEmpty: return -1 else: - return self.fittingView.imageList.GetImageIndex("state_%s_small" % State_.getName(stuff.state).lower(), "icons") + return self.fittingView.imageList.GetImageIndex("state_%s_small" % State_.getName(stuff.state).lower(), "gui") elif isinstance(stuff, Fit): fitID = self.mainFrame.getActiveFit() projectionInfo = stuff.getProjectionInfo(fitID) diff --git a/gui/builtinViews/fittingView.py b/gui/builtinViews/fittingView.py index 76c291cdd..b58674043 100644 --- a/gui/builtinViews/fittingView.py +++ b/gui/builtinViews/fittingView.py @@ -28,7 +28,7 @@ import gui.shipBrowser import gui.multiSwitch from eos.types import Slot, Rack, Module from gui.builtinViewColumns.state import State -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader import gui.builtinViews.emptyView from gui.utils.exportHtml import exportHtml @@ -57,7 +57,7 @@ class FitSpawner(gui.multiSwitch.TabSpawner): startup = getattr(event, "startup", False) # see OpenFitsThread in gui.mainFrame mstate = wx.GetMouseState() - if mstate.CmdDown() or mstate.MiddleDown() or startup: + if mstate.CmdDown() or startup: self.multiSwitch.AddPage() view = FittingView(self.multiSwitch) @@ -292,9 +292,9 @@ class FittingView(d.Display): def updateTab(self): sFit = service.Fit.getInstance() - fit = sFit.getFit(self.getActiveFit()) + fit = sFit.getFit(self.getActiveFit(), basic=True) - bitmap = bitmapLoader.getImage("race_%s_small" % fit.ship.item.race, "icons") + bitmap = BitmapLoader.getImage("race_%s_small" % fit.ship.item.race, "gui") text = "%s: %s" % (fit.ship.item.name, fit.name) pageIndex = self.parent.GetPageIndex(self) @@ -521,7 +521,7 @@ class FittingView(d.Display): sFit = service.Fit.getInstance() fitID = self.mainFrame.getActiveFit() ctrl = wx.GetMouseState().CmdDown() or wx.GetMouseState().MiddleDown() - click = "ctrl" if ctrl is True else "right" if event.Button == 3 else "left" + click = "ctrl" if ctrl is True else "right" if event.GetButton() == 3 else "left" sFit.toggleModulesState(fitID, self.mods[self.GetItemData(row)], mods, click) # update state tooltip @@ -592,7 +592,7 @@ class FittingView(d.Display): pass def OnShow(self, event): - if not event.GetShow(): + if event.GetShow(): try: self.MakeSnapshot() except: diff --git a/gui/builtinViews/fleetView.py b/gui/builtinViews/fleetView.py index fa9916d63..bc6eef9a2 100644 --- a/gui/builtinViews/fleetView.py +++ b/gui/builtinViews/fleetView.py @@ -1,7 +1,7 @@ import wx.gizmos import gui.fleetBrowser import service -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader #Tab spawning handler class FleetSpawner(gui.multiSwitch.TabSpawner): @@ -28,7 +28,7 @@ class FleetView(wx.gizmos.TreeListCtrl): self.tabManager = parent self.fleetId = None - self.fleetImg = bitmapLoader.getImage("53_16", "pack") + self.fleetImg = BitmapLoader.getImage("53_16", "icons") self.imageList = wx.ImageList(16, 16) self.SetImageList(self.imageList) @@ -38,9 +38,9 @@ class FleetView(wx.gizmos.TreeListCtrl): self.SetMainColumn(1) self.icons = {} - self.addImage = self.imageList.Add(bitmapLoader.getBitmap("add_small", "icons")) + self.addImage = self.imageList.Add(BitmapLoader.getBitmap("add_small", "gui")) for icon in ("fb", "fc", "sb", "sc", "wb", "wc"): - self.icons[icon] = self.imageList.Add(bitmapLoader.getBitmap("fleet_%s_small" % icon, "icons")) + self.icons[icon] = self.imageList.Add(BitmapLoader.getBitmap("fleet_%s_small" % icon, "gui")) self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.checkNew) self.mainFrame = gui.mainFrame.MainFrame.getInstance() diff --git a/gui/cachingImageList.py b/gui/cachingImageList.py index 904a2c4a8..4ec0b2f69 100644 --- a/gui/cachingImageList.py +++ b/gui/cachingImageList.py @@ -18,7 +18,7 @@ #=============================================================================== import wx -import bitmapLoader +from gui.bitmapLoader import BitmapLoader class CachingImageList(wx.ImageList): def __init__(self, width, height): @@ -28,7 +28,7 @@ class CachingImageList(wx.ImageList): def GetImageIndex(self, *loaderArgs): id = self.map.get(loaderArgs) if id is None: - bitmap = bitmapLoader.getBitmap(*loaderArgs) + bitmap = BitmapLoader.getBitmap(*loaderArgs) if bitmap is None: return -1 id = self.map[loaderArgs] = wx.ImageList.Add(self,bitmap) diff --git a/gui/characterEditor.py b/gui/characterEditor.py index c64470c5d..c52ec3b8e 100644 --- a/gui/characterEditor.py +++ b/gui/characterEditor.py @@ -22,7 +22,7 @@ import wx import gui.mainFrame import wx.lib.newevent import wx.gizmos -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader import service import gui.display as d from gui.contextMenu import ContextMenu @@ -34,11 +34,11 @@ class CharacterEditor(wx.Frame): wx.Frame.__init__ (self, parent, id=wx.ID_ANY, title=u"pyfa: Character Editor", pos=wx.DefaultPosition, size=wx.Size(641, 600), style=wx.DEFAULT_FRAME_STYLE|wx.FRAME_FLOAT_ON_PARENT|wx.TAB_TRAVERSAL) - self.mainFrame = parent - - i = wx.IconFromBitmap(bitmapLoader.getBitmap("character_small", "icons")) + i = wx.IconFromBitmap(BitmapLoader.getBitmap("character_small", "gui")) self.SetIcon(i) + self.mainFrame = parent + self.disableWin= wx.WindowDisabler(self) self.SetSizeHintsSz(wx.Size(640, 600), wx.DefaultSize) self.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) @@ -66,8 +66,11 @@ class CharacterEditor(wx.Frame): if active: self.charChoice.SetSelection(i) + self.navSizer.Add(self.btnSave, 0, wx.ALL , 5) + + buttons = (("new", wx.ART_NEW), - ("rename", bitmapLoader.getBitmap("rename", "icons")), + ("rename", BitmapLoader.getBitmap("rename", "gui")), ("copy", wx.ART_COPY), ("delete", wx.ART_DELETE)) @@ -111,19 +114,19 @@ class CharacterEditor(wx.Frame): bSizerButtons = wx.BoxSizer(wx.HORIZONTAL) - self.btnSave = wx.Button(self, wx.ID_ANY, "Save") + self.btnSaveChar = wx.Button(self, wx.ID_ANY, "Save") self.btnSaveAs = wx.Button(self, wx.ID_ANY, "Save As...") self.btnRevert = wx.Button(self, wx.ID_ANY, "Revert") self.btnOK = wx.Button(self, wx.ID_OK) - bSizerButtons.Add(self.btnSave, 0, wx.ALL, 5) + bSizerButtons.Add(self.btnSaveChar, 0, wx.ALL, 5) bSizerButtons.Add(self.btnSaveAs, 0, wx.ALL, 5) bSizerButtons.Add(self.btnRevert, 0, wx.ALL, 5) bSizerButtons.AddStretchSpacer() bSizerButtons.Add(self.btnOK, 0, wx.ALL, 5) - self.btnSave.Bind(wx.EVT_BUTTON, self.saveChar) + self.btnSaveChar.Bind(wx.EVT_BUTTON, self.saveChar) self.btnSaveAs.Bind(wx.EVT_BUTTON, self.saveCharAs) self.btnRevert.Bind(wx.EVT_BUTTON, self.revertChar) self.btnOK.Bind(wx.EVT_BUTTON, self.editingFinished) @@ -149,7 +152,7 @@ class CharacterEditor(wx.Frame): char = sChar.getCharacter(charID) # enable/disable character saving stuff - self.btnSave.Enable(not char.ro and char.isDirty) + self.btnSaveChar.Enable(not char.ro and char.isDirty) self.btnSaveAs.Enable(char.isDirty) self.btnRevert.Enable(char.isDirty) @@ -187,7 +190,6 @@ class CharacterEditor(wx.Frame): charID = self.getActiveCharacter() dlg = SaveCharacterAs(self, charID) dlg.ShowModal() - dlg.Destroy() self.sview.populateSkillTree() def revertChar(self, event): @@ -261,10 +263,8 @@ class CharacterEditor(wx.Frame): self.characterRename.SetFocus() for btn in (self.btnNew, self.btnCopy, self.btnRename, self.btnDelete): btn.Hide() - self.navSizer.Remove(btn) self.btnSave.Show() - self.navSizer.Add(self.btnSave, 0, wx.ALIGN_CENTER) self.navSizer.Layout() sChar = service.Character.getInstance() @@ -287,9 +287,7 @@ class CharacterEditor(wx.Frame): self.navSizer.Replace(self.characterRename, self.charChoice) for btn in (self.btnNew, self.btnCopy, self.btnRename, self.btnDelete): btn.Show() - self.navSizer.Add(btn, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 2) - self.navSizer.Remove(self.btnSave) self.btnSave.Hide() self.navSizer.Layout() self.refreshCharacterList() @@ -305,16 +303,21 @@ class CharacterEditor(wx.Frame): wx.PostEvent(self, GE.CharChanged()) def delete(self, event): - sChar = service.Character.getInstance() - sChar.delete(self.getActiveCharacter()) - sel = self.charChoice.GetSelection() - self.charChoice.Delete(sel) - self.charChoice.SetSelection(sel - 1) - newSelection = self.getActiveCharacter() - if sChar.getCharName(newSelection) in ("All 0", "All 5"): - self.restrict() + dlg = wx.MessageDialog(self, + "Do you really want to delete this character?", + "Confirm Delete", wx.YES | wx.NO | wx.ICON_QUESTION) - wx.PostEvent(self, GE.CharChanged()) + if dlg.ShowModal() == wx.ID_YES: + sChar = service.Character.getInstance() + sChar.delete(self.getActiveCharacter()) + sel = self.charChoice.GetSelection() + self.charChoice.Delete(sel) + self.charChoice.SetSelection(sel - 1) + newSelection = self.getActiveCharacter() + if sChar.getCharName(newSelection) in ("All 0", "All 5"): + self.restrict() + + wx.PostEvent(self, GE.CharChanged()) def Destroy(self): sFit = service.Fit.getInstance() @@ -338,7 +341,7 @@ class SkillTreeView (wx.Panel): self.imageList = wx.ImageList(16, 16) tree.SetImageList(self.imageList) - self.skillBookImageId = self.imageList.Add(bitmapLoader.getBitmap("skill_small", "icons")) + self.skillBookImageId = self.imageList.Add(BitmapLoader.getBitmap("skill_small", "gui")) tree.AddColumn("Skill") tree.AddColumn("Level") @@ -478,7 +481,7 @@ class ImplantsTreeView (wx.Panel): def addMarketViewImage(self, iconFile): if iconFile is None: return -1 - bitmap = bitmapLoader.getBitmap(iconFile, "pack") + bitmap = BitmapLoader.getBitmap(iconFile, "icons") if bitmap is None: return -1 else: @@ -504,15 +507,18 @@ class ImplantsTreeView (wx.Panel): availableSizer.Add(self.availableImplantsTree, 1, wx.EXPAND) buttonSizer = wx.BoxSizer(wx.VERTICAL) - buttonSizer.AddStretchSpacer() - self.btnAdd = GenBitmapButton(self, wx.ID_ADD, bitmapLoader.getBitmap("fit_add_small", "icons"), style = wx.BORDER_NONE) + + pmainSizer.Add(buttonSizer, 0, wx.TOP, 5) + + self.btnAdd = GenBitmapButton(self, wx.ID_ADD, BitmapLoader.getBitmap("fit_add_small", "gui"), style = wx.BORDER_NONE) + buttonSizer.Add(self.btnAdd, 0) - self.btnRemove = GenBitmapButton(self, wx.ID_REMOVE, bitmapLoader.getBitmap("fit_delete_small", "icons"), style = wx.BORDER_NONE) + self.btnRemove = GenBitmapButton(self, wx.ID_REMOVE, BitmapLoader.getBitmap("fit_delete_small", "gui"), style = wx.BORDER_NONE) buttonSizer.Add(self.btnRemove, 0) buttonSizer.AddStretchSpacer() pmainSizer.Add(buttonSizer, 0, wx.EXPAND, 5) - + self.pluggedImplantsTree = AvailableImplantsView(self) sChar = service.Character.getInstance() @@ -814,5 +820,5 @@ class SaveCharacterAs(wx.Dialog): wx.PostEvent(self.parent, GE.CharListUpdated()) event.Skip() - self.Destroy() + self.Close() diff --git a/gui/characterSelection.py b/gui/characterSelection.py index c9328750a..990dc8bf5 100644 --- a/gui/characterSelection.py +++ b/gui/characterSelection.py @@ -19,7 +19,7 @@ import wx import service -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader import gui.globalEvents as GE import gui.mainFrame @@ -41,10 +41,10 @@ class CharacterSelection(wx.Panel): self.refreshCharacterList() - self.cleanSkills = bitmapLoader.getBitmap("skill_big", "icons") - self.redSkills = bitmapLoader.getBitmap("skillRed_big", "icons") - self.greenSkills = bitmapLoader.getBitmap("skillGreen_big", "icons") - self.refresh = bitmapLoader.getBitmap("refresh", "icons") + self.cleanSkills = BitmapLoader.getBitmap("skill_big", "gui") + self.redSkills = BitmapLoader.getBitmap("skillRed_big", "gui") + self.greenSkills = BitmapLoader.getBitmap("skillGreen_big", "gui") + self.refresh = BitmapLoader.getBitmap("refresh", "gui") self.btnRefresh = wx.BitmapButton(self, wx.ID_ANY, self.refresh) size = self.btnRefresh.GetSize() diff --git a/gui/chromeTabs.py b/gui/chromeTabs.py index 3a0c7b11c..27f077d58 100644 --- a/gui/chromeTabs.py +++ b/gui/chromeTabs.py @@ -21,7 +21,8 @@ import wx import wx.lib.newevent import gui.utils.colorUtils as colorUtils import gui.utils.drawUtils as drawUtils -from gui import bitmapLoader +import gui.utils.fonts as fonts +from gui.bitmapLoader import BitmapLoader import gui.utils.fonts as fonts import service @@ -277,7 +278,7 @@ class PFNotebook(wx.Panel): bx, by = self.GetBorders() ww -= bx * 4 wh -= by * 4 - self.activePage.SetSize((ww, wh)) + self.activePage.SetSize((max(ww, -1), max(wh, -1))) self.activePage.SetPosition((0, 0)) if not resizeOnly: @@ -335,10 +336,10 @@ class PFTabRenderer: closeButton -- True if tab can be closed """ # tab left/right zones inclination - self.ctabLeft = bitmapLoader.getImage("ctableft", "icons") - self.ctabMiddle = bitmapLoader.getImage("ctabmiddle", "icons") - self.ctabRight = bitmapLoader.getImage("ctabright", "icons") - self.ctabClose = bitmapLoader.getImage("ctabclose", "icons") + self.ctabLeft = BitmapLoader.getImage("ctableft", "gui") + self.ctabMiddle = BitmapLoader.getImage("ctabmiddle", "gui") + self.ctabRight = BitmapLoader.getImage("ctabright", "gui") + self.ctabClose = BitmapLoader.getImage("ctabclose", "gui") self.leftWidth = self.ctabLeft.GetWidth() self.rightWidth = self.ctabRight.GetWidth() @@ -594,7 +595,7 @@ class PFTabRenderer: class PFAddRenderer: def __init__(self): """Renders the add tab button""" - self.addImg = bitmapLoader.getImage("ctabadd", "icons") + self.addImg = BitmapLoader.getImage("ctabadd", "gui") self.width = self.addImg.GetWidth() self.height = self.addImg.GetHeight() @@ -671,6 +672,8 @@ class PFTabsContainer(wx.Panel): """ wx.Panel.__init__(self, parent, id, pos, size) + if wx.VERSION >= (3,0): + self.SetBackgroundStyle(wx.BG_STYLE_PAINT) self.tabs = [] width, height = size @@ -1073,13 +1076,12 @@ class PFTabsContainer(wx.Panel): selected = 0 - if 'wxMac' in wx.PlatformInfo: + if 'wxMac' in wx.PlatformInfo and wx.VERSION < (3,0): color = wx.Colour(0, 0, 0) brush = wx.Brush(color) from Carbon.Appearance import kThemeBrushDialogBackgroundActive brush.MacSetTheme(kThemeBrushDialogBackgroundActive) - else: color = wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE) brush = wx.Brush(color) diff --git a/gui/copySelectDialog.py b/gui/copySelectDialog.py index 0faf850cb..14ee68703 100644 --- a/gui/copySelectDialog.py +++ b/gui/copySelectDialog.py @@ -25,16 +25,18 @@ class CopySelectDialog(wx.Dialog): copyFormatEftImps = 1 copyFormatXml = 2 copyFormatDna = 3 + copyFormatCrest = 4 def __init__(self, parent): wx.Dialog.__init__(self, parent, id = wx.ID_ANY, title = u"Select a format", size = (-1,-1), style = wx.DEFAULT_DIALOG_STYLE) mainSizer = wx.BoxSizer(wx.VERTICAL) - copyFormats = [u"EFT", u"EFT (Implants)", u"XML", u"DNA"] + copyFormats = [u"EFT", u"EFT (Implants)", u"XML", u"DNA", u"CREST"] copyFormatTooltips = {CopySelectDialog.copyFormatEft: u"EFT text format", CopySelectDialog.copyFormatEftImps: u"EFT text format", CopySelectDialog.copyFormatXml: u"EVE native XML format", - CopySelectDialog.copyFormatDna: u"A one-line text format"} + CopySelectDialog.copyFormatDna: u"A one-line text format", + CopySelectDialog.copyFormatCrest: u"A JSON format used for EVE CREST"} selector = wx.RadioBox(self, wx.ID_ANY, label = u"Copy to the clipboard using:", choices = copyFormats, style = wx.RA_SPECIFY_ROWS) selector.Bind(wx.EVT_RADIOBOX, self.Selected) for format, tooltip in copyFormatTooltips.iteritems(): diff --git a/gui/crestFittings.py b/gui/crestFittings.py new file mode 100644 index 000000000..2348b6866 --- /dev/null +++ b/gui/crestFittings.py @@ -0,0 +1,407 @@ +import time +import webbrowser +import json +import wx +import requests + +import service +from service.crest import CrestModes + +from eos.types import Cargo +from eos.db import getItem + +import gui.display as d +import gui.globalEvents as GE + + +class CrestFittings(wx.Frame): + + def __init__(self, parent): + wx.Frame.__init__(self, parent, id=wx.ID_ANY, title="Browse EVE Fittings", pos=wx.DefaultPosition, size=wx.Size( 550,450 ), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) + + self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNFACE)) + + self.mainFrame = parent + mainSizer = wx.BoxSizer(wx.VERTICAL) + sCrest = service.Crest.getInstance() + + characterSelectSizer = wx.BoxSizer( wx.HORIZONTAL ) + + if sCrest.settings.get('mode') == CrestModes.IMPLICIT: + self.stLogged = wx.StaticText(self, wx.ID_ANY, "Currently logged in as %s"%sCrest.implicitCharacter.name, wx.DefaultPosition, wx.DefaultSize) + self.stLogged.Wrap( -1 ) + + characterSelectSizer.Add( self.stLogged, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 ) + else: + self.charChoice = wx.Choice(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, []) + characterSelectSizer.Add( self.charChoice, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 ) + self.updateCharList() + + self.fetchBtn = wx.Button( self, wx.ID_ANY, u"Fetch Fits", wx.DefaultPosition, wx.DefaultSize, 5 ) + characterSelectSizer.Add( self.fetchBtn, 0, wx.ALL, 5 ) + mainSizer.Add( characterSelectSizer, 0, wx.EXPAND, 5 ) + + self.sl = wx.StaticLine( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL ) + mainSizer.Add( self.sl, 0, wx.EXPAND |wx.ALL, 5 ) + + contentSizer = wx.BoxSizer( wx.HORIZONTAL ) + browserSizer = wx.BoxSizer( wx.VERTICAL ) + + self.fitTree = FittingsTreeView(self) + browserSizer.Add( self.fitTree, 1, wx.ALL|wx.EXPAND, 5 ) + contentSizer.Add( browserSizer, 1, wx.EXPAND, 0 ) + fitSizer = wx.BoxSizer( wx.VERTICAL ) + + self.fitView = FitView(self) + fitSizer.Add( self.fitView, 1, wx.ALL|wx.EXPAND, 5 ) + + btnSizer = wx.BoxSizer( wx.HORIZONTAL ) + self.importBtn = wx.Button( self, wx.ID_ANY, u"Import to pyfa", wx.DefaultPosition, wx.DefaultSize, 5 ) + self.deleteBtn = wx.Button( self, wx.ID_ANY, u"Delete from EVE", wx.DefaultPosition, wx.DefaultSize, 5 ) + btnSizer.Add( self.importBtn, 1, wx.ALL, 5 ) + btnSizer.Add( self.deleteBtn, 1, wx.ALL, 5 ) + fitSizer.Add( btnSizer, 0, wx.EXPAND ) + + contentSizer.Add(fitSizer, 1, wx.EXPAND, 0) + mainSizer.Add(contentSizer, 1, wx.EXPAND, 5) + + self.fetchBtn.Bind(wx.EVT_BUTTON, self.fetchFittings) + self.importBtn.Bind(wx.EVT_BUTTON, self.importFitting) + self.deleteBtn.Bind(wx.EVT_BUTTON, self.deleteFitting) + + self.mainFrame.Bind(GE.EVT_SSO_LOGOUT, self.ssoLogout) + self.mainFrame.Bind(GE.EVT_SSO_LOGIN, self.ssoLogin) + self.Bind(wx.EVT_CLOSE, self.OnClose) + + self.statusbar = wx.StatusBar(self) + self.statusbar.SetFieldsCount() + self.SetStatusBar(self.statusbar) + + self.cacheTimer = wx.Timer(self) + self.Bind(wx.EVT_TIMER, self.updateCacheStatus, self.cacheTimer) + + self.SetSizer(mainSizer) + self.Layout() + + self.Centre(wx.BOTH) + + def ssoLogin(self, event): + self.updateCharList() + event.Skip() + + def updateCharList(self): + sCrest = service.Crest.getInstance() + chars = sCrest.getCrestCharacters() + + if len(chars) == 0: + self.Close() + + self.charChoice.Clear() + for char in chars: + self.charChoice.Append(char.name, char.ID) + + self.charChoice.SetSelection(0) + + def updateCacheStatus(self, event): + t = time.gmtime(self.cacheTime-time.time()) + if t < 0: + self.cacheTimer.Stop() + else: + sTime = time.strftime("%H:%M:%S", t) + self.statusbar.SetStatusText("Cached for %s"%sTime, 0) + + def ssoLogout(self, event): + if event.type == CrestModes.IMPLICIT: + self.Close() + else: + self.updateCharList() + event.Skip() # continue event + + def OnClose(self, event): + self.mainFrame.Unbind(GE.EVT_SSO_LOGOUT, handler=self.ssoLogout) + self.mainFrame.Unbind(GE.EVT_SSO_LOGIN, handler=self.ssoLogin) + event.Skip() + + def getActiveCharacter(self): + sCrest = service.Crest.getInstance() + + if sCrest.settings.get('mode') == CrestModes.IMPLICIT: + return sCrest.implicitCharacter.ID + + selection = self.charChoice.GetCurrentSelection() + return self.charChoice.GetClientData(selection) if selection is not None else None + + def fetchFittings(self, event): + sCrest = service.Crest.getInstance() + try: + waitDialog = wx.BusyInfo("Fetching fits, please wait...", parent=self) + fittings = sCrest.getFittings(self.getActiveCharacter()) + self.cacheTime = fittings.get('cached_until') + self.updateCacheStatus(None) + self.cacheTimer.Start(1000) + self.fitTree.populateSkillTree(fittings) + except requests.exceptions.ConnectionError: + self.statusbar.SetStatusText("Connection error, please check your internet connection") + finally: + del waitDialog + + def importFitting(self, event): + selection = self.fitView.fitSelection + if not selection: + return + data = self.fitTree.fittingsTreeCtrl.GetPyData(selection) + sFit = service.Fit.getInstance() + fits = sFit.importFitFromBuffer(data) + self.mainFrame._openAfterImport(fits) + + def deleteFitting(self, event): + sCrest = service.Crest.getInstance() + selection = self.fitView.fitSelection + if not selection: + return + data = json.loads(self.fitTree.fittingsTreeCtrl.GetPyData(selection)) + + dlg = wx.MessageDialog(self, + "Do you really want to delete %s (%s) from EVE?"%(data['name'], data['ship']['name']), + "Confirm Delete", wx.YES | wx.NO | wx.ICON_QUESTION) + + if dlg.ShowModal() == wx.ID_YES: + try: + sCrest.delFitting(self.getActiveCharacter(), data['fittingID']) + except requests.exceptions.ConnectionError: + self.statusbar.SetStatusText("Connection error, please check your internet connection") + + +class ExportToEve(wx.Frame): + + def __init__(self, parent): + wx.Frame.__init__(self, parent, id=wx.ID_ANY, title="Export fit to EVE", pos=wx.DefaultPosition, size=(wx.Size(350,100)), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) + + self.mainFrame = parent + self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNFACE)) + + sCrest = service.Crest.getInstance() + mainSizer = wx.BoxSizer(wx.VERTICAL) + hSizer = wx.BoxSizer(wx.HORIZONTAL) + + if sCrest.settings.get('mode') == CrestModes.IMPLICIT: + self.stLogged = wx.StaticText(self, wx.ID_ANY, "Currently logged in as %s"%sCrest.implicitCharacter.name, wx.DefaultPosition, wx.DefaultSize) + self.stLogged.Wrap( -1 ) + + hSizer.Add( self.stLogged, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 ) + else: + self.charChoice = wx.Choice(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, []) + hSizer.Add( self.charChoice, 1, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 ) + self.updateCharList() + self.charChoice.SetSelection(0) + + self.exportBtn = wx.Button( self, wx.ID_ANY, u"Export Fit", wx.DefaultPosition, wx.DefaultSize, 5 ) + hSizer.Add( self.exportBtn, 0, wx.ALL, 5 ) + + mainSizer.Add( hSizer, 0, wx.EXPAND, 5 ) + + self.exportBtn.Bind(wx.EVT_BUTTON, self.exportFitting) + + self.statusbar = wx.StatusBar(self) + self.statusbar.SetFieldsCount(2) + self.statusbar.SetStatusWidths([100, -1]) + + self.mainFrame.Bind(GE.EVT_SSO_LOGOUT, self.ssoLogout) + self.mainFrame.Bind(GE.EVT_SSO_LOGIN, self.ssoLogin) + self.Bind(wx.EVT_CLOSE, self.OnClose) + + self.SetSizer(hSizer) + self.SetStatusBar(self.statusbar) + self.Layout() + + self.Centre(wx.BOTH) + + def updateCharList(self): + sCrest = service.Crest.getInstance() + chars = sCrest.getCrestCharacters() + + if len(chars) == 0: + self.Close() + + self.charChoice.Clear() + for char in chars: + self.charChoice.Append(char.name, char.ID) + + self.charChoice.SetSelection(0) + + def ssoLogin(self, event): + self.updateCharList() + event.Skip() + + def ssoLogout(self, event): + if event.type == CrestModes.IMPLICIT: + self.Close() + else: + self.updateCharList() + event.Skip() # continue event + + def OnClose(self, event): + self.mainFrame.Unbind(GE.EVT_SSO_LOGOUT, handler=self.ssoLogout) + event.Skip() + + def getActiveCharacter(self): + sCrest = service.Crest.getInstance() + + if sCrest.settings.get('mode') == CrestModes.IMPLICIT: + return sCrest.implicitCharacter.ID + + selection = self.charChoice.GetCurrentSelection() + return self.charChoice.GetClientData(selection) if selection is not None else None + + def exportFitting(self, event): + self.statusbar.SetStatusText("", 0) + self.statusbar.SetStatusText("Sending request and awaiting response", 1) + sCrest = service.Crest.getInstance() + + try: + sFit = service.Fit.getInstance() + data = sFit.exportCrest(self.mainFrame.getActiveFit()) + res = sCrest.postFitting(self.getActiveCharacter(), data) + + self.statusbar.SetStatusText("%d: %s"%(res.status_code, res.reason), 0) + try: + text = json.loads(res.text) + self.statusbar.SetStatusText(text['message'], 1) + except ValueError: + self.statusbar.SetStatusText("", 1) + except requests.exceptions.ConnectionError: + self.statusbar.SetStatusText("Connection error, please check your internet connection", 1) + + +class CrestMgmt(wx.Dialog): + + def __init__( self, parent ): + wx.Dialog.__init__ ( self, parent, id = wx.ID_ANY, title = "CREST Character Management", pos = wx.DefaultPosition, size = wx.Size( 550,250 ), style = wx.DEFAULT_DIALOG_STYLE ) + self.mainFrame = parent + mainSizer = wx.BoxSizer( wx.HORIZONTAL ) + + self.lcCharacters = wx.ListCtrl( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LC_REPORT) + + self.lcCharacters.InsertColumn(0, heading='Character') + self.lcCharacters.InsertColumn(1, heading='Refresh Token') + + self.popCharList() + + mainSizer.Add( self.lcCharacters, 1, wx.ALL|wx.EXPAND, 5 ) + + btnSizer = wx.BoxSizer( wx.VERTICAL ) + + self.addBtn = wx.Button( self, wx.ID_ANY, u"Add Character", wx.DefaultPosition, wx.DefaultSize, 0 ) + btnSizer.Add( self.addBtn, 0, wx.ALL | wx.EXPAND, 5 ) + + self.deleteBtn = wx.Button( self, wx.ID_ANY, u"Revoke Character", wx.DefaultPosition, wx.DefaultSize, 0 ) + btnSizer.Add( self.deleteBtn, 0, wx.ALL | wx.EXPAND, 5 ) + + mainSizer.Add( btnSizer, 0, wx.EXPAND, 5 ) + + self.addBtn.Bind(wx.EVT_BUTTON, self.addChar) + self.deleteBtn.Bind(wx.EVT_BUTTON, self.delChar) + + self.mainFrame.Bind(GE.EVT_SSO_LOGIN, self.ssoLogin) + + self.SetSizer( mainSizer ) + self.Layout() + + self.Centre( wx.BOTH ) + + def ssoLogin(self, event): + self.popCharList() + event.Skip() + + def popCharList(self): + sCrest = service.Crest.getInstance() + chars = sCrest.getCrestCharacters() + + self.lcCharacters.DeleteAllItems() + + for index, char in enumerate(chars): + self.lcCharacters.InsertStringItem(index, char.name) + self.lcCharacters.SetStringItem(index, 1, char.refresh_token) + self.lcCharacters.SetItemData(index, char.ID) + + self.lcCharacters.SetColumnWidth(0, wx.LIST_AUTOSIZE) + self.lcCharacters.SetColumnWidth(1, wx.LIST_AUTOSIZE) + + def addChar(self, event): + sCrest = service.Crest.getInstance() + uri = sCrest.startServer() + webbrowser.open(uri) + + def delChar(self, event): + item = self.lcCharacters.GetFirstSelected() + if item > -1: + charID = self.lcCharacters.GetItemData(item) + sCrest = service.Crest.getInstance() + sCrest.delCrestCharacter(charID) + self.popCharList() + + +class FittingsTreeView(wx.Panel): + def __init__(self, parent): + wx.Panel.__init__(self, parent, id=wx.ID_ANY) + self.parent = parent + pmainSizer = wx.BoxSizer(wx.VERTICAL) + + tree = self.fittingsTreeCtrl = wx.TreeCtrl(self, wx.ID_ANY, style=wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT) + pmainSizer.Add(tree, 1, wx.EXPAND | wx.ALL, 0) + + self.root = tree.AddRoot("Fits") + self.populateSkillTree(None) + + self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.displayFit) + + self.SetSizer(pmainSizer) + + self.Layout() + + def populateSkillTree(self, data): + if data is None: + return + root = self.root + tree = self.fittingsTreeCtrl + tree.DeleteChildren(root) + + dict = {} + fits = data['items'] + for fit in fits: + if fit['ship']['name'] not in dict: + dict[fit['ship']['name']] = [] + dict[fit['ship']['name']].append(fit) + + for name, fits in dict.iteritems(): + shipID = tree.AppendItem(root, name) + for fit in fits: + fitId = tree.AppendItem(shipID, fit['name']) + tree.SetPyData(fitId, json.dumps(fit)) + + tree.SortChildren(root) + + def displayFit(self, event): + selection = self.fittingsTreeCtrl.GetSelection() + fit = json.loads(self.fittingsTreeCtrl.GetPyData(selection)) + list = [] + + for item in fit['items']: + try: + cargo = Cargo(getItem(item['type']['id'])) + cargo.amount = item['quantity'] + list.append(cargo) + except: + pass + + self.parent.fitView.fitSelection = selection + self.parent.fitView.update(list) + + +class FitView(d.Display): + DEFAULT_COLS = ["Base Icon", + "Base Name"] + + def __init__(self, parent): + d.Display.__init__(self, parent, style=wx.LC_SINGLE_SEL) + self.fitSelection = None diff --git a/gui/fleetBrowser.py b/gui/fleetBrowser.py index 3e287de29..7476d7d7f 100644 --- a/gui/fleetBrowser.py +++ b/gui/fleetBrowser.py @@ -1,6 +1,6 @@ import wx import copy -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader import gui.mainFrame from gui.PFListPane import PFListPane import service.fleet @@ -135,7 +135,7 @@ class FleetBrowserHeader (wx.Panel): wx.Panel.__init__ (self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.Size(500, 24), style=wx.TAB_TRAVERSAL) self.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) - self.newBmp = bitmapLoader.getBitmap("fit_add_small","icons") + self.newBmp = BitmapLoader.getBitmap("fit_add_small","gui") bmpSize = (16,16) mainSizer = wx.BoxSizer(wx.HORIZONTAL) @@ -264,11 +264,11 @@ class FleetItem(SFItem.SFBrowserItem): self.fontNormal = wx.FontFromPixelSize((0,14),wx.SWISS, wx.NORMAL, wx.NORMAL, False) self.fontSmall = wx.FontFromPixelSize((0,12),wx.SWISS, wx.NORMAL, wx.NORMAL, False) - self.copyBmp = bitmapLoader.getBitmap("fit_add_small", "icons") - self.renameBmp = bitmapLoader.getBitmap("fit_rename_small", "icons") - self.deleteBmp = bitmapLoader.getBitmap("fit_delete_small","icons") - self.acceptBmp = bitmapLoader.getBitmap("faccept_small", "icons") - self.fleetBmp = bitmapLoader.getBitmap("fleet_item_big", "icons") + self.copyBmp = BitmapLoader.getBitmap("fit_add_small", "gui") + self.renameBmp = BitmapLoader.getBitmap("fit_rename_small", "gui") + self.deleteBmp = BitmapLoader.getBitmap("fit_delete_small","gui") + self.acceptBmp = BitmapLoader.getBitmap("faccept_small", "gui") + self.fleetBmp = BitmapLoader.getBitmap("fleet_item_big", "gui") fleetImg = self.fleetBmp.ConvertToImage() fleetImg = fleetImg.Blur(2) @@ -453,4 +453,4 @@ class PFGenBitmapButton(GenBitmapButton): self.bgcolor = wx.Brush(color) def GetBackgroundBrush(self, dc): - return self.bgcolor \ No newline at end of file + return self.bgcolor diff --git a/gui/globalEvents.py b/gui/globalEvents.py index afb2d7bb3..18f91d348 100644 --- a/gui/globalEvents.py +++ b/gui/globalEvents.py @@ -3,3 +3,6 @@ import wx.lib.newevent FitChanged, FIT_CHANGED = wx.lib.newevent.NewEvent() CharListUpdated, CHAR_LIST_UPDATED = wx.lib.newevent.NewEvent() CharChanged, CHAR_CHANGED = wx.lib.newevent.NewEvent() + +SsoLogin, EVT_SSO_LOGIN = wx.lib.newevent.NewEvent() +SsoLogout, EVT_SSO_LOGOUT = wx.lib.newevent.NewEvent() diff --git a/gui/graphFrame.py b/gui/graphFrame.py index 96472812a..2cedc84d1 100644 --- a/gui/graphFrame.py +++ b/gui/graphFrame.py @@ -19,7 +19,7 @@ import wx import os -import bitmapLoader +from gui.bitmapLoader import BitmapLoader import gui.display import gui.globalEvents as GE @@ -70,7 +70,7 @@ class GraphFrame(wx.Frame): wx.Frame.__init__(self, parent, title=u"pyfa: Graph Generator", style=style, size=(520, 390)) - i = wx.IconFromBitmap(bitmapLoader.getBitmap("graphs_small", "icons")) + i = wx.IconFromBitmap(BitmapLoader.getBitmap("graphs_small", "gui")) self.SetIcon(i) self.mainFrame = gui.mainFrame.MainFrame.getInstance() self.CreateStatusBar() diff --git a/gui/itemStats.py b/gui/itemStats.py index 9d971aaa7..ce58ac09f 100644 --- a/gui/itemStats.py +++ b/gui/itemStats.py @@ -20,7 +20,7 @@ import wx import re import gui.mainFrame -import bitmapLoader +from gui.bitmapLoader import BitmapLoader import sys import wx.lib.mixins.listctrl as listmix import wx.html @@ -77,10 +77,10 @@ class ItemStatsDialog(wx.Dialog): if item.icon is not None: before,sep,after = item.icon.iconFile.rpartition("_") iconFile = "%s%s%s" % (before,sep,"0%s" % after if len(after) < 2 else after) - itemImg = bitmapLoader.getBitmap(iconFile, "pack") + itemImg = BitmapLoader.getBitmap(iconFile, "icons") if itemImg is not None: self.SetIcon(wx.IconFromBitmap(itemImg)) - self.SetTitle("%s: %s" % ("%s Stats" % itmContext if itmContext is not None else "Stats", item.name)) + self.SetTitle("%s: %s%s" % ("%s Stats" % itmContext if itmContext is not None else "Stats", item.name, " (%d)"%item.ID if config.debug else "")) self.SetMinSize((300, 200)) if "wxGTK" in wx.PlatformInfo: # GTK has huge tab widgets, give it a bit more room @@ -364,16 +364,16 @@ class ItemParams (wx.Panel): if info: if info.icon is not None: iconFile = info.icon.iconFile - icon = bitmapLoader.getBitmap(iconFile, "pack") + icon = BitmapLoader.getBitmap(iconFile, "icons") if icon is None: - icon = bitmapLoader.getBitmap("transparent16x16", "icons") + icon = BitmapLoader.getBitmap("transparent16x16", "gui") attrIcon = self.imageList.Add(icon) else: - attrIcon = self.imageList.Add(bitmapLoader.getBitmap("07_15", "pack")) + attrIcon = self.imageList.Add(BitmapLoader.getBitmap("07_15", "icons")) else: - attrIcon = self.imageList.Add(bitmapLoader.getBitmap("07_15", "pack")) + attrIcon = self.imageList.Add(BitmapLoader.getBitmap("07_15", "icons")) index = self.paramList.InsertImageStringItem(sys.maxint, attrName,attrIcon) @@ -461,7 +461,7 @@ class ItemRequirements ( wx.Panel ): self.imageList = wx.ImageList(16, 16) self.reqTree.SetImageList(self.imageList) - skillBookId = self.imageList.Add(bitmapLoader.getBitmap("skill_small", "icons")) + skillBookId = self.imageList.Add(BitmapLoader.getBitmap("skill_small", "gui")) self.getFullSkillTree(item,self.root,skillBookId) @@ -753,7 +753,7 @@ class ItemAffectedBy (wx.Panel): if thing == self.stuff: parent = root else: # projected fit - icon = self.imageList.Add(bitmapLoader.getBitmap("ship_small", "icons")) + icon = self.imageList.Add(BitmapLoader.getBitmap("ship_small", "gui")) child = self.affectedBy.AppendItem(root, "{} ({})".format(thing.name, thing.ship.item.name), icon) parent = child @@ -767,14 +767,14 @@ class ItemAffectedBy (wx.Panel): if attrInfo: if attrInfo.icon is not None: iconFile = attrInfo.icon.iconFile - icon = bitmapLoader.getBitmap(iconFile, "pack") + icon = BitmapLoader.getBitmap(iconFile, "icons") if icon is None: - icon = bitmapLoader.getBitmap("transparent16x16", "icons") + icon = BitmapLoader.getBitmap("transparent16x16", "gui") attrIcon = self.imageList.Add(icon) else: - attrIcon = self.imageList.Add(bitmapLoader.getBitmap("07_15", "pack")) + attrIcon = self.imageList.Add(BitmapLoader.getBitmap("07_15", "icons")) else: - attrIcon = self.imageList.Add(bitmapLoader.getBitmap("07_15", "pack")) + attrIcon = self.imageList.Add(BitmapLoader.getBitmap("07_15", "icons")) if self.showRealNames: display = attrName @@ -794,9 +794,9 @@ class ItemAffectedBy (wx.Panel): afflictorType, afflictor, item, attrModifier, attrAmount, projected = itemInfo if afflictorType == Ship: - itemIcon = self.imageList.Add(bitmapLoader.getBitmap("ship_small", "icons")) + itemIcon = self.imageList.Add(BitmapLoader.getBitmap("ship_small", "gui")) elif item.icon: - bitmap = bitmapLoader.getBitmap(item.icon.iconFile, "pack") + bitmap = BitmapLoader.getBitmap(item.icon.iconFile, "icons") itemIcon = self.imageList.Add(bitmap) if bitmap else -1 else: itemIcon = -1 @@ -884,7 +884,7 @@ class ItemAffectedBy (wx.Panel): if thing == self.stuff: parent = root else: # projected fit - icon = self.imageList.Add(bitmapLoader.getBitmap("ship_small", "icons")) + icon = self.imageList.Add(BitmapLoader.getBitmap("ship_small", "gui")) child = self.affectedBy.AppendItem(root, "{} ({})".format(thing.name, thing.ship.item.name), icon) parent = child @@ -897,9 +897,9 @@ class ItemAffectedBy (wx.Panel): afflictorType, afflictors, attrData, item, projected = info counter = len(afflictors) if afflictorType == Ship: - itemIcon = self.imageList.Add(bitmapLoader.getBitmap("ship_small", "icons")) + itemIcon = self.imageList.Add(BitmapLoader.getBitmap("ship_small", "gui")) elif item.icon: - bitmap = bitmapLoader.getBitmap(item.icon.iconFile, "pack") + bitmap = BitmapLoader.getBitmap(item.icon.iconFile, "icons") itemIcon = self.imageList.Add(bitmap) if bitmap else -1 else: itemIcon = -1 @@ -925,15 +925,15 @@ class ItemAffectedBy (wx.Panel): if attrInfo: if attrInfo.icon is not None: iconFile = attrInfo.icon.iconFile - icon = bitmapLoader.getBitmap(iconFile, "pack") + icon = BitmapLoader.getBitmap(iconFile, "icons") if icon is None: - icon = bitmapLoader.getBitmap("transparent16x16", "icons") + icon = BitmapLoader.getBitmap("transparent16x16", "gui") attrIcon = self.imageList.Add(icon) else: - attrIcon = self.imageList.Add(bitmapLoader.getBitmap("07_15", "pack")) + attrIcon = self.imageList.Add(BitmapLoader.getBitmap("07_15", "icons")) else: - attrIcon = self.imageList.Add(bitmapLoader.getBitmap("07_15", "pack")) + attrIcon = self.imageList.Add(BitmapLoader.getBitmap("07_15", "icons")) if attrModifier == "s*": attrModifier = "*" diff --git a/gui/mainFrame.py b/gui/mainFrame.py index 590b2b4be..01e44439c 100644 --- a/gui/mainFrame.py +++ b/gui/mainFrame.py @@ -30,13 +30,14 @@ from wx.lib.wordwrap import wordwrap import service import config import threading +import webbrowser import gui.aboutData import gui.chromeTabs import gui.utils.animUtils as animUtils import gui.globalEvents as GE -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader from gui.mainMenuBar import MainMenuBar from gui.additionsPane import AdditionsPane from gui.marketBrowser import MarketBrowser, ItemSelected @@ -55,10 +56,21 @@ from gui.fleetBrowser import FleetBrowser from gui.updateDialog import UpdateDialog from gui.builtinViews import * +# import this to access override setting +from eos.modifiedAttributeDict import ModifiedAttributeDict + from time import gmtime, strftime -import locale -locale.setlocale(locale.LC_ALL, '') +if not 'wxMac' in wx.PlatformInfo or ('wxMac' in wx.PlatformInfo and wx.VERSION >= (3,0)): + from service.crest import CrestModes + from gui.crestFittings import CrestFittings, ExportToEve, CrestMgmt + + try: + from gui.propertyEditor import AttributeEditor + disableOverrideEditor = False + except ImportError, e: + print "Error loading Attribute Editor: %s.\nAccess to Attribute Editor is disabled."%e.message + disableOverrideEditor = True #dummy panel(no paint no erasebk) class PFPanel(wx.Panel): @@ -103,8 +115,8 @@ class MainFrame(wx.Frame): return cls.__instance if cls.__instance is not None else MainFrame() def __init__(self): - title="pyfa %s%s - Python Fitting Assistant"%(config.version, "" if config.tag.lower() != 'git' else " (git)") - wx.Frame.__init__(self, None, wx.ID_ANY, title) + self.title="pyfa %s%s - Python Fitting Assistant"%(config.version, "" if config.tag.lower() != 'git' else " (git)") + wx.Frame.__init__(self, None, wx.ID_ANY, self.title) MainFrame.__instance = self @@ -116,33 +128,24 @@ class MainFrame(wx.Frame): self.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_BTNFACE ) ) #Load and set the icon for pyfa main window - i = wx.IconFromBitmap(bitmapLoader.getBitmap("pyfa", "icons")) + i = wx.IconFromBitmap(BitmapLoader.getBitmap("pyfa", "gui")) self.SetIcon(i) #Create the layout and windows mainSizer = wx.BoxSizer(wx.HORIZONTAL) - self.splitter = wx.SplitterWindow(self, style = wx.SP_LIVE_UPDATE) + self.browser_fitting_split = wx.SplitterWindow(self, style = wx.SP_LIVE_UPDATE) + self.fitting_additions_split = wx.SplitterWindow(self.browser_fitting_split, style = wx.SP_LIVE_UPDATE) - mainSizer.Add(self.splitter,1,wx.EXPAND | wx.LEFT, 2) + mainSizer.Add(self.browser_fitting_split, 1, wx.EXPAND | wx.LEFT, 2) - self.FitviewAdditionsPanel = PFPanel(self.splitter) - faSizer = wx.BoxSizer(wx.VERTICAL) + self.fitMultiSwitch = MultiSwitch(self.fitting_additions_split) + self.additionsPane = AdditionsPane(self.fitting_additions_split) - self.fitMultiSwitch = MultiSwitch(self.FitviewAdditionsPanel) + self.notebookBrowsers = gui.chromeTabs.PFNotebook(self.browser_fitting_split, False) - faSizer.Add(self.fitMultiSwitch,1,wx.EXPAND) - - self.additionsPane = AdditionsPane(self.FitviewAdditionsPanel) - faSizer.Add(self.additionsPane, 0, wx.EXPAND) - - self.FitviewAdditionsPanel.SetSizer(faSizer) - - - self.notebookBrowsers = gui.chromeTabs.PFNotebook(self.splitter, False) - - marketImg = bitmapLoader.getImage("market_small", "icons") - shipBrowserImg = bitmapLoader.getImage("ship_small", "icons") + marketImg = BitmapLoader.getImage("market_small", "gui") + shipBrowserImg = BitmapLoader.getImage("ship_small", "gui") self.marketBrowser = MarketBrowser(self.notebookBrowsers) self.notebookBrowsers.AddPage(self.marketBrowser, "Market", tabImage = marketImg, showClose = False) @@ -159,9 +162,14 @@ class MainFrame(wx.Frame): self.notebookBrowsers.SetSelection(1) - self.splitter.SplitVertically(self.notebookBrowsers, self.FitviewAdditionsPanel) - self.splitter.SetMinimumPaneSize(204) - self.splitter.SetSashPosition(self.browserWidth) + self.browser_fitting_split.SplitVertically(self.notebookBrowsers, self.fitting_additions_split) + self.browser_fitting_split.SetMinimumPaneSize(204) + self.browser_fitting_split.SetSashPosition(self.browserWidth) + + self.fitting_additions_split.SplitHorizontally(self.fitMultiSwitch, self.additionsPane, -200) + self.fitting_additions_split.SetMinimumPaneSize(200) + self.fitting_additions_split.SetSashPosition(self.fittingHeight) + self.fitting_additions_split.SetSashGravity(1.0) cstatsSizer = wx.BoxSizer(wx.VERTICAL) @@ -199,10 +207,16 @@ class MainFrame(wx.Frame): self.sUpdate = service.Update.getInstance() self.sUpdate.CheckUpdate(self.ShowUpdateBox) + if not 'wxMac' in wx.PlatformInfo or ('wxMac' in wx.PlatformInfo and wx.VERSION >= (3,0)): + self.Bind(GE.EVT_SSO_LOGIN, self.onSSOLogin) + self.Bind(GE.EVT_SSO_LOGOUT, self.onSSOLogout) + + self.titleTimer = wx.Timer(self) + self.Bind(wx.EVT_TIMER, self.updateTitle, self.titleTimer) + def ShowUpdateBox(self, release): dlg = UpdateDialog(self, release) dlg.ShowModal() - dlg.Destroy() def LoadPreviousOpenFits(self): sFit = service.Fit.getInstance() @@ -213,7 +227,7 @@ class MainFrame(wx.Frame): # Remove any fits that cause exception when fetching (non-existent fits) for id in fits[:]: try: - sFit.getFit(id) + sFit.getFit(id, basic=True) except: fits.remove(id) @@ -222,13 +236,11 @@ class MainFrame(wx.Frame): self.fitMultiSwitch.AddPage() return - self.waitDialog = animUtils.WaitDialog(self, title="Opening previous fits") + self.waitDialog = wx.BusyInfo("Loading previous fits...") OpenFitsThread(fits, self.closeWaitDialog) - self.waitDialog.ShowModal() - def LoadMainFrameAttribs(self): - mainFrameDefaultAttribs = {"wnd_width": 1000, "wnd_height": 680, "wnd_maximized": False, "browser_width": 300, "market_height": 0} + mainFrameDefaultAttribs = {"wnd_width": 1000, "wnd_height": 700, "wnd_maximized": False, "browser_width": 300, "market_height": 0, "fitting_height": -200} self.mainFrameAttribs = service.SettingsProvider.getInstance().getSettings("pyfaMainWindowAttribs", mainFrameDefaultAttribs) if self.mainFrameAttribs["wnd_maximized"]: @@ -244,6 +256,7 @@ class MainFrame(wx.Frame): self.browserWidth = self.mainFrameAttribs["browser_width"] self.marketHeight = self.mainFrameAttribs["market_height"] + self.fittingHeight = self.mainFrameAttribs["fitting_height"] def UpdateMainFrameAttribs(self): if self.IsIconized(): @@ -256,6 +269,7 @@ class MainFrame(wx.Frame): self.mainFrameAttribs["browser_width"] = self.notebookBrowsers.GetSize()[0] self.mainFrameAttribs["market_height"] = self.marketBrowser.marketView.GetSize()[1] + self.mainFrameAttribs["fitting_height"] = self.fitting_additions_split.GetSashPosition() def SetActiveStatsWindow(self, wnd): self.activeStatsWnd = wnd @@ -336,6 +350,10 @@ class MainFrame(wx.Frame): dlg=CharacterEditor(self) dlg.Show() + def showAttrEditor(self, event): + dlg=AttributeEditor(self) + dlg.Show() + def showTargetResistsEditor(self, event): dlg=ResistsEditorDlg(self) dlg.ShowModal() @@ -375,13 +393,12 @@ class MainFrame(wx.Frame): def showPreferenceDialog(self, event): dlg = PreferenceDialog(self) dlg.ShowModal() - dlg.Destroy() def goWiki(self, event): - wx.LaunchDefaultBrowser('https://github.com/DarkFenX/Pyfa/wiki') + webbrowser.open('https://github.com/DarkFenX/Pyfa/wiki') def goForums(self, event): - wx.LaunchDefaultBrowser('https://forums.eveonline.com/default.aspx?g=posts&t=247609') + webbrowser.open('https://forums.eveonline.com/default.aspx?g=posts&t=247609') def registerMenu(self): menuBar = self.GetMenuBar() @@ -425,6 +442,18 @@ class MainFrame(wx.Frame): # Save current character self.Bind(wx.EVT_MENU, self.revertChar, id = menuBar.revertCharId) + # Browse fittings + self.Bind(wx.EVT_MENU, self.eveFittings, id = menuBar.eveFittingsId) + # Export to EVE + self.Bind(wx.EVT_MENU, self.exportToEve, id = menuBar.exportToEveId) + # Handle SSO event (login/logout/manage characters, depending on mode and current state) + self.Bind(wx.EVT_MENU, self.ssoHandler, id = menuBar.ssoLoginId) + + # Open attribute editor + self.Bind(wx.EVT_MENU, self.showAttrEditor, id = menuBar.attrEditorId) + # Toggle Overrides + self.Bind(wx.EVT_MENU, self.toggleOverrides, id = menuBar.toggleOverridesId) + #Clipboard exports self.Bind(wx.EVT_MENU, self.exportToClipboard, id=wx.ID_COPY) @@ -488,6 +517,80 @@ class MainFrame(wx.Frame): atable = wx.AcceleratorTable(actb) self.SetAcceleratorTable(atable) + def eveFittings(self, event): + dlg=CrestFittings(self) + dlg.Show() + + def updateTitle(self, event): + sCrest = service.Crest.getInstance() + char = sCrest.implicitCharacter + if char: + t = time.gmtime(char.eve.expires-time.time()) + sTime = time.strftime("%H:%M:%S", t if t >= 0 else 0) + newTitle = "%s | %s - %s"%(self.title, char.name, sTime) + self.SetTitle(newTitle) + + def onSSOLogin(self, event): + menu = self.GetMenuBar() + menu.Enable(menu.eveFittingsId, True) + menu.Enable(menu.exportToEveId, True) + + if event.type == CrestModes.IMPLICIT: + menu.SetLabel(menu.ssoLoginId, "Logout Character") + self.titleTimer.Start(1000) + + def onSSOLogout(self, event): + self.titleTimer.Stop() + self.SetTitle(self.title) + + menu = self.GetMenuBar() + if event.type == CrestModes.IMPLICIT or event.numChars == 0: + menu.Enable(menu.eveFittingsId, False) + menu.Enable(menu.exportToEveId, False) + + if event.type == CrestModes.IMPLICIT: + menu.SetLabel(menu.ssoLoginId, "Login to EVE") + + def updateCrestMenus(self, type): + # in case we are logged in when switching, change title back + self.titleTimer.Stop() + self.SetTitle(self.title) + + menu = self.GetMenuBar() + sCrest = service.Crest.getInstance() + + if type == CrestModes.IMPLICIT: + menu.SetLabel(menu.ssoLoginId, "Login to EVE") + menu.Enable(menu.eveFittingsId, False) + menu.Enable(menu.exportToEveId, False) + else: + menu.SetLabel(menu.ssoLoginId, "Manage Characters") + enable = len(sCrest.getCrestCharacters()) == 0 + menu.Enable(menu.eveFittingsId, not enable) + menu.Enable(menu.exportToEveId, not enable) + + def ssoHandler(self, event): + sCrest = service.Crest.getInstance() + if sCrest.settings.get('mode') == CrestModes.IMPLICIT: + if sCrest.implicitCharacter is not None: + sCrest.logout() + else: + uri = sCrest.startServer() + webbrowser.open(uri) + else: + dlg=CrestMgmt(self) + dlg.Show() + + def exportToEve(self, event): + dlg=ExportToEve(self) + dlg.Show() + + def toggleOverrides(self, event): + ModifiedAttributeDict.OVERRIDES = not ModifiedAttributeDict.OVERRIDES + wx.PostEvent(self, GE.FitChanged(fitID=self.getActiveFit())) + menu = self.GetMenuBar() + menu.SetLabel(menu.toggleOverridesId, "Turn Overrides Off" if ModifiedAttributeDict.OVERRIDES else "Turn Overrides On") + def saveChar(self, event): sChr = service.Character.getInstance() charID = self.charSelection.getActiveCharacter() @@ -498,7 +601,6 @@ class MainFrame(wx.Frame): charID = self.charSelection.getActiveCharacter() dlg = SaveCharacterAs(self, charID) dlg.ShowModal() - dlg.Destroy() def revertChar(self, event): sChr = service.Character.getInstance() @@ -550,6 +652,10 @@ class MainFrame(wx.Frame): sFit = service.Fit.getInstance() toClipboard(sFit.exportDna(self.getActiveFit())) + def clipboardCrest(self): + sFit = service.Fit.getInstance() + toClipboard(sFit.exportCrest(self.getActiveFit())) + def clipboardXml(self): sFit = service.Fit.getInstance() toClipboard(sFit.exportXml(None, self.getActiveFit())) @@ -567,96 +673,17 @@ class MainFrame(wx.Frame): CopySelectDict = {CopySelectDialog.copyFormatEft: self.clipboardEft, CopySelectDialog.copyFormatEftImps: self.clipboardEftImps, CopySelectDialog.copyFormatXml: self.clipboardXml, - CopySelectDialog.copyFormatDna: self.clipboardDna} + CopySelectDialog.copyFormatDna: self.clipboardDna, + CopySelectDialog.copyFormatCrest: self.clipboardCrest} dlg = CopySelectDialog(self) dlg.ShowModal() selected = dlg.GetSelected() - try: - CopySelectDict[selected]() - except: - pass + + CopySelectDict[selected]() + + dlg.Destroy() - def fileImportDialog(self, event): - """Handles importing single/multiple EVE XML / EFT cfg fit files""" - sFit = service.Fit.getInstance() - dlg = wx.FileDialog(self, "Open One Or More Fitting Files", - wildcard = "EVE XML fitting files (*.xml)|*.xml|" \ - "EFT text fitting files (*.cfg)|*.cfg|" \ - "All Files (*)|*", - style = wx.FD_OPEN | wx.FD_FILE_MUST_EXIST | wx.FD_MULTIPLE) - if (dlg.ShowModal() == wx.ID_OK): - self.progressDialog = wx.ProgressDialog( - "Importing fits", - " "*100, # set some arbitrary spacing to create wifth in window - parent=self, style = wx.PD_APP_MODAL | wx.PD_ELAPSED_TIME) - self.progressDialog.message = None - sFit.importFitsThreaded(dlg.GetPaths(), self.fileImportCallback) - self.progressDialog.ShowModal() - dlg.Destroy() - - def fileImportCallback(self, info, fits=None): - """ - While importing fits from file, the logic calls back to this function to - update progress bar to show activity. XML files can contain multiple - ships with multiple fits, whereas EFT cfg files contain many fits of - a single ship. When iterating through the files, we update the message - when we start a new file, and then Pulse the progress bar with every fit - that is processed. - """ - - if info == -1: - # Done processing - self.progressDialog.Hide() - self._openAfterImport(fits) - elif info != self.progressDialog.message and info is not None: - # New message, overwrite cached message and update - self.progressDialog.message = info - self.progressDialog.Pulse(info) - else: - # Simply Pulse() if we don't have anything else to do - self.progressDialog.Pulse() - - def _openAfterImport(self, fits): - if len(fits) > 0: - if len(fits) == 1: - fit = fits[0] - wx.PostEvent(self, FitSelected(fitID=fit.ID)) - wx.PostEvent(self.shipBrowser, Stage3Selected(shipID=fit.shipID, back=True)) - else: - wx.PostEvent(self.shipBrowser, ImportSelected(fits=fits, back=True)) - - def backupToXml(self, event): - """ Back up all fits to EVE XML file """ - defaultFile = "pyfa-fits-%s.xml"%strftime("%Y%m%d_%H%M%S", gmtime()) - - saveDialog = wx.FileDialog(self, "Save Backup As...", - wildcard = "EVE XML fitting file (*.xml)|*.xml", - style = wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT, - defaultFile=defaultFile) - - if saveDialog.ShowModal() == wx.ID_OK: - filePath = saveDialog.GetPath() - if '.' not in os.path.basename(filePath): - filePath += ".xml" - - sFit = service.Fit.getInstance() - max = sFit.countAllFits() - - self.progressDialog = wx.ProgressDialog("Backup fits", - "Backing up %d fits to: %s"%(max, filePath), - maximum=max, parent=self, - style=wx.PD_APP_MODAL | wx.PD_ELAPSED_TIME) - - sFit.backupFits(filePath, self.backupCallback) - self.progressDialog.ShowModal() - - def backupCallback(self, info): - if info == -1: - self.progressDialog.Hide() - else: - self.progressDialog.Update(info) - def exportSkillsNeeded(self, event): """ Exports skills needed for active fit and active character """ sCharacter = service.Character.getInstance() @@ -680,12 +707,122 @@ class MainFrame(wx.Frame): if '.' not in os.path.basename(filePath): filePath += ".{0}".format(saveFmt) - self.waitDialog = animUtils.WaitDialog(self) + self.waitDialog = wx.BusyInfo("Exporting skills needed...") sCharacter.backupSkills(filePath, saveFmt, self.getActiveFit(), self.closeWaitDialog) - self.waitDialog.ShowModal() saveDialog.Destroy() + def fileImportDialog(self, event): + """Handles importing single/multiple EVE XML / EFT cfg fit files""" + sFit = service.Fit.getInstance() + dlg = wx.FileDialog(self, "Open One Or More Fitting Files", + wildcard = "EVE XML fitting files (*.xml)|*.xml|" \ + "EFT text fitting files (*.cfg)|*.cfg|" \ + "All Files (*)|*", + style = wx.FD_OPEN | wx.FD_FILE_MUST_EXIST | wx.FD_MULTIPLE) + if (dlg.ShowModal() == wx.ID_OK): + self.progressDialog = wx.ProgressDialog( + "Importing fits", + " "*100, # set some arbitrary spacing to create width in window + parent=self, style = wx.PD_APP_MODAL | wx.PD_ELAPSED_TIME) + self.progressDialog.message = None + sFit.importFitsThreaded(dlg.GetPaths(), self.fileImportCallback) + self.progressDialog.ShowModal() + dlg.Destroy() + + def backupToXml(self, event): + """ Back up all fits to EVE XML file """ + defaultFile = "pyfa-fits-%s.xml"%strftime("%Y%m%d_%H%M%S", gmtime()) + + saveDialog = wx.FileDialog(self, "Save Backup As...", + wildcard = "EVE XML fitting file (*.xml)|*.xml", + style = wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT, + defaultFile=defaultFile) + + if saveDialog.ShowModal() == wx.ID_OK: + filePath = saveDialog.GetPath() + if '.' not in os.path.basename(filePath): + filePath += ".xml" + + sFit = service.Fit.getInstance() + max = sFit.countAllFits() + + self.progressDialog = wx.ProgressDialog("Backup fits", + "Backing up %d fits to: %s"%(max, filePath), + maximum=max, parent=self, + style=wx.PD_APP_MODAL | wx.PD_ELAPSED_TIME) + sFit.backupFits(filePath, self.backupCallback) + self.progressDialog.ShowModal() + + def exportHtml(self, event): + from gui.utils.exportHtml import exportHtml + sFit = service.Fit.getInstance() + settings = service.settings.HTMLExportSettings.getInstance() + + max = sFit.countAllFits() + path = settings.getPath() + + if not os.path.isdir(os.path.dirname(path)): + dlg = wx.MessageDialog(self, + "Invalid Path\n\nThe following path is invalid or does not exist: \n%s\n\nPlease verify path location pyfa's preferences."%path, + "Error", wx.OK | wx.ICON_ERROR) + + if dlg.ShowModal() == wx.ID_OK: + return + + self.progressDialog = wx.ProgressDialog("Backup fits", + "Generating HTML file at: %s"%path, + maximum=max, parent=self, + style=wx.PD_APP_MODAL | wx.PD_ELAPSED_TIME) + + exportHtml.getInstance().refreshFittingHtml(True, self.backupCallback) + self.progressDialog.ShowModal() + + def backupCallback(self, info): + if info == -1: + self.closeProgressDialog() + else: + self.progressDialog.Update(info) + + def fileImportCallback(self, info, fits=None): + """ + While importing fits from file, the logic calls back to this function to + update progress bar to show activity. XML files can contain multiple + ships with multiple fits, whereas EFT cfg files contain many fits of + a single ship. When iterating through the files, we update the message + when we start a new file, and then Pulse the progress bar with every fit + that is processed. + """ + + if info == -1: + self.closeProgressDialog() + self._openAfterImport(fits) + elif info != self.progressDialog.message and info is not None: + # New message, overwrite cached message and update + self.progressDialog.message = info + self.progressDialog.Pulse(info) + else: + # Simply Pulse() if we don't have anything else to do + self.progressDialog.Pulse() + + def _openAfterImport(self, fits): + if len(fits) > 0: + if len(fits) == 1: + fit = fits[0] + wx.PostEvent(self, FitSelected(fitID=fit.ID)) + wx.PostEvent(self.shipBrowser, Stage3Selected(shipID=fit.shipID, back=True)) + else: + wx.PostEvent(self.shipBrowser, ImportSelected(fits=fits, back=True)) + + def closeProgressDialog(self): + # Windows apparently handles ProgressDialogs differently. We can + # simply Destroy it here, but for other platforms we must Close it + if 'wxMSW' in wx.PlatformInfo: + self.progressDialog.Destroy() + else: + self.progressDialog.EndModal(wx.ID_OK) + self.progressDialog.Close() + def importCharacter(self, event): """ Imports character XML file from EVE API """ dlg = wx.FileDialog(self, "Open One Or More Character Files", @@ -694,33 +831,16 @@ class MainFrame(wx.Frame): style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST | wx.FD_MULTIPLE) if dlg.ShowModal() == wx.ID_OK: - self.waitDialog = animUtils.WaitDialog(self, title="Importing Character") + self.waitDialog = wx.BusyInfo("Importing Character...") sCharacter = service.Character.getInstance() sCharacter.importCharacter(dlg.GetPaths(), self.importCharacterCallback) - dlg.Destroy() - self.waitDialog.ShowModal() def importCharacterCallback(self): - self.waitDialog.Destroy() + self.closeWaitDialog() wx.PostEvent(self, GE.CharListUpdated()) - def exportHtml(self, event): - from gui.utils.exportHtml import exportHtml - sFit = service.Fit.getInstance() - settings = service.settings.HTMLExportSettings.getInstance() - - max = sFit.countAllFits() - path = settings.getPath() - self.progressDialog = wx.ProgressDialog("Backup fits", - "Generating HTML file at: %s"%path, - maximum=max, parent=self, - style=wx.PD_APP_MODAL | wx.PD_ELAPSED_TIME) - - exportHtml.getInstance().refreshFittingHtml(True, self.backupCallback) - self.progressDialog.ShowModal() - def closeWaitDialog(self): - self.waitDialog.Destroy() + del self.waitDialog def openGraphFrame(self, event): if not self.graphFrame: diff --git a/gui/mainMenuBar.py b/gui/mainMenuBar.py index f8224b195..0e636a3e6 100644 --- a/gui/mainMenuBar.py +++ b/gui/mainMenuBar.py @@ -19,12 +19,15 @@ import wx import config -import bitmapLoader +from gui.bitmapLoader import BitmapLoader import gui.mainFrame import gui.graphFrame import gui.globalEvents as GE import service +if not 'wxMac' in wx.PlatformInfo or ('wxMac' in wx.PlatformInfo and wx.VERSION >= (3,0)): + from service.crest import CrestModes + class MainMenuBar(wx.MenuBar): def __init__(self): self.characterEditorId = wx.NewId() @@ -40,9 +43,13 @@ class MainMenuBar(wx.MenuBar): self.saveCharId = wx.NewId() self.saveCharAsId = wx.NewId() self.revertCharId = wx.NewId() + self.eveFittingsId = wx.NewId() + self.exportToEveId = wx.NewId() + self.ssoLoginId = wx.NewId() + self.attrEditorId = wx.NewId() + self.toggleOverridesId = wx.NewId() self.mainFrame = gui.mainFrame.MainFrame.getInstance() - wx.MenuBar.__init__(self) # File menu @@ -78,30 +85,56 @@ class MainMenuBar(wx.MenuBar): editMenu.Append(self.saveCharId, "Save Character") editMenu.Append(self.saveCharAsId, "Save Character As...") editMenu.Append(self.revertCharId, "Revert Character") + # Character menu windowMenu = wx.Menu() self.Append(windowMenu, "&Window") charEditItem = wx.MenuItem(windowMenu, self.characterEditorId, "&Character Editor\tCTRL+E") - charEditItem.SetBitmap(bitmapLoader.getBitmap("character_small", "icons")) + charEditItem.SetBitmap(BitmapLoader.getBitmap("character_small", "gui")) windowMenu.AppendItem(charEditItem) damagePatternEditItem = wx.MenuItem(windowMenu, self.damagePatternEditorId, "Damage Pattern Editor\tCTRL+D") - damagePatternEditItem.SetBitmap(bitmapLoader.getBitmap("damagePattern_small", "icons")) + damagePatternEditItem.SetBitmap(BitmapLoader.getBitmap("damagePattern_small", "gui")) windowMenu.AppendItem(damagePatternEditItem) targetResistsEditItem = wx.MenuItem(windowMenu, self.targetResistsEditorId, "Target Resists Editor\tCTRL+R") - targetResistsEditItem.SetBitmap(bitmapLoader.getBitmap("explosive_big", "icons")) + targetResistsEditItem.SetBitmap(BitmapLoader.getBitmap("explosive_big", "gui")) windowMenu.AppendItem(targetResistsEditItem) graphFrameItem = wx.MenuItem(windowMenu, self.graphFrameId, "Graphs\tCTRL+G") - graphFrameItem.SetBitmap(bitmapLoader.getBitmap("graphs_small", "icons")) + graphFrameItem.SetBitmap(BitmapLoader.getBitmap("graphs_small", "gui")) windowMenu.AppendItem(graphFrameItem) preferencesItem = wx.MenuItem(windowMenu, wx.ID_PREFERENCES, "Preferences\tCTRL+P") - preferencesItem.SetBitmap(bitmapLoader.getBitmap("preferences_small", "icons")) + preferencesItem.SetBitmap(BitmapLoader.getBitmap("preferences_small", "gui")) windowMenu.AppendItem(preferencesItem) + if not 'wxMac' in wx.PlatformInfo or ('wxMac' in wx.PlatformInfo and wx.VERSION >= (3,0)): + self.sCrest = service.Crest.getInstance() + + # CREST Menu + crestMenu = wx.Menu() + self.Append(crestMenu, "&CREST") + if self.sCrest.settings.get('mode') != CrestModes.IMPLICIT: + crestMenu.Append(self.ssoLoginId, "Manage Characters") + else: + crestMenu.Append(self.ssoLoginId, "Login to EVE") + crestMenu.Append(self.eveFittingsId, "Browse EVE Fittings") + crestMenu.Append(self.exportToEveId, "Export To EVE") + + if self.sCrest.settings.get('mode') == CrestModes.IMPLICIT or len(self.sCrest.getCrestCharacters()) == 0: + self.Enable(self.eveFittingsId, False) + self.Enable(self.exportToEveId, False) + + if not gui.mainFrame.disableOverrideEditor: + attrItem = wx.MenuItem(windowMenu, self.attrEditorId, "Attribute Overrides\tCTRL+B") + attrItem.SetBitmap(BitmapLoader.getBitmap("fit_rename_small", "gui")) + windowMenu.AppendItem(attrItem) + + editMenu.AppendSeparator() + editMenu.Append(self.toggleOverridesId, "Turn Overrides On") + # Help menu helpMenu = wx.Menu() self.Append(helpMenu, "&Help") @@ -131,3 +164,5 @@ class MainMenuBar(wx.MenuBar): self.Enable(self.revertCharId, char.isDirty) event.Skip() + + diff --git a/gui/marketBrowser.py b/gui/marketBrowser.py index 1c8329a1b..14dea666c 100644 --- a/gui/marketBrowser.py +++ b/gui/marketBrowser.py @@ -24,7 +24,7 @@ from gui.cachingImageList import CachingImageList from gui.contextMenu import ContextMenu import gui.PFSearchBox as SBox -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader ItemSelected, ITEM_SELECTED = wx.lib.newevent.NewEvent() @@ -103,10 +103,10 @@ class MarketBrowser(wx.Panel): self.marketView.jump(item) class SearchBox(SBox.PFSearchBox): - def __init__(self, parent): - SBox.PFSearchBox.__init__(self, parent) - cancelBitmap = bitmapLoader.getBitmap("fit_delete_small","icons") - searchBitmap = bitmapLoader.getBitmap("fsearch_small","icons") + def __init__(self, parent, **kwargs): + SBox.PFSearchBox.__init__(self, parent, **kwargs) + cancelBitmap = BitmapLoader.getBitmap("fit_delete_small","gui") + searchBitmap = BitmapLoader.getBitmap("fsearch_small","gui") self.SetSearchBitmap(searchBitmap) self.SetCancelBitmap(cancelBitmap) self.ShowSearchButton() @@ -134,13 +134,13 @@ class MarketTree(wx.TreeCtrl): self.SortChildren(self.root) # Add recently used modules node - rumIconId = self.addImage("market_small", "icons") + rumIconId = self.addImage("market_small", "gui") self.AppendItem(self.root, "Recently Used Modules", rumIconId, data = wx.TreeItemData(RECENTLY_USED_MODULES)) # Bind our lookup method to when the tree gets expanded self.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.expandLookup) - def addImage(self, iconFile, location = "pack"): + def addImage(self, iconFile, location="icons"): if iconFile is None: return -1 return self.imageList.GetImageIndex(iconFile, location) diff --git a/gui/patternEditor.py b/gui/patternEditor.py index 8bcdde295..40b8e45aa 100644 --- a/gui/patternEditor.py +++ b/gui/patternEditor.py @@ -18,7 +18,7 @@ #=============================================================================== import wx -import bitmapLoader +from gui.bitmapLoader import BitmapLoader import service from wx.lib.intctrl import IntCtrl from gui.utils.clipboard import toClipboard, fromClipboard @@ -58,14 +58,10 @@ class DmgPatternEditorDlg(wx.Dialog): self.namePicker.Bind(wx.EVT_TEXT_ENTER, self.processRename) self.namePicker.Hide() - self.btnSave = wx.Button(self, wx.ID_SAVE) - self.btnSave.Hide() - self.btnSave.Bind(wx.EVT_BUTTON, self.processRename) - size = None headerSizer.Add(self.ccDmgPattern, 1, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT|wx.LEFT, 3) buttons = (("new", wx.ART_NEW), - ("rename", bitmapLoader.getBitmap("rename", "icons")), + ("rename", BitmapLoader.getBitmap("rename", "gui")), ("copy", wx.ART_COPY), ("delete", wx.ART_DELETE)) for name, art in buttons: @@ -83,6 +79,10 @@ class DmgPatternEditorDlg(wx.Dialog): btn.SetToolTipString("%s pattern" % name.capitalize()) headerSizer.Add(btn, 0, wx.ALIGN_CENTER_VERTICAL) + self.btnSave = wx.Button(self, wx.ID_SAVE) + self.btnSave.Hide() + self.btnSave.Bind(wx.EVT_BUTTON, self.processRename) + self.headerSizer.Add(self.btnSave, 0, wx.ALIGN_CENTER) mainSizer.Add(headerSizer, 0, wx.EXPAND | wx.ALL, 2) @@ -90,10 +90,10 @@ class DmgPatternEditorDlg(wx.Dialog): mainSizer.Add(self.sl, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 5) contentSizer = wx.BoxSizer(wx.VERTICAL) - self.embitmap = bitmapLoader.getBitmap("em_big", "icons") - self.thermbitmap = bitmapLoader.getBitmap("thermal_big", "icons") - self.kinbitmap = bitmapLoader.getBitmap("kinetic_big", "icons") - self.expbitmap = bitmapLoader.getBitmap("explosive_big", "icons") + self.embitmap = BitmapLoader.getBitmap("em_big", "gui") + self.thermbitmap = BitmapLoader.getBitmap("thermal_big", "gui") + self.kinbitmap = BitmapLoader.getBitmap("kinetic_big", "gui") + self.expbitmap = BitmapLoader.getBitmap("explosive_big", "gui") dmgeditSizer = wx.FlexGridSizer(2, 6, 0, 2) dmgeditSizer.AddGrowableCol(0) @@ -105,7 +105,7 @@ class DmgPatternEditorDlg(wx.Dialog): defSize = wx.Size(width,-1) for i, type in enumerate(self.DAMAGE_TYPES): - bmp = wx.StaticBitmap(self, wx.ID_ANY, bitmapLoader.getBitmap("%s_big"%type, "icons")) + bmp = wx.StaticBitmap(self, wx.ID_ANY, BitmapLoader.getBitmap("%s_big"%type, "gui")) if i%2: style = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | wx.LEFT border = 10 @@ -276,9 +276,7 @@ class DmgPatternEditorDlg(wx.Dialog): for btn in (self.new, self.rename, self.delete, self.copy): btn.Hide() - self.headerSizer.Remove(btn) - self.headerSizer.Add(self.btnSave, 0, wx.ALIGN_CENTER) self.btnSave.Show() self.headerSizer.Layout() if event is not None: @@ -311,9 +309,7 @@ class DmgPatternEditorDlg(wx.Dialog): self.ccDmgPattern.Show() self.namePicker.Hide() self.btnSave.Hide() - self.headerSizer.Remove(self.btnSave) for btn in (self.new, self.rename, self.delete, self.copy): - self.headerSizer.Add(btn, 0, wx.ALIGN_CENTER_VERTICAL) btn.Show() sel = self.ccDmgPattern.GetSelection() diff --git a/gui/preferenceDialog.py b/gui/preferenceDialog.py index c3a1f9f1a..ada936114 100644 --- a/gui/preferenceDialog.py +++ b/gui/preferenceDialog.py @@ -19,22 +19,22 @@ import wx from gui.preferenceView import PreferenceView -import bitmapLoader +from gui.bitmapLoader import BitmapLoader class PreferenceDialog(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, id=wx.ID_ANY, size=wx.DefaultSize, style=wx.DEFAULT_DIALOG_STYLE) self.SetTitle("pyfa - Preferences") - i = wx.IconFromBitmap(bitmapLoader.getBitmap("preferences_small", "icons")) + i = wx.IconFromBitmap(BitmapLoader.getBitmap("preferences_small", "gui")) self.SetIcon(i) mainSizer = wx.BoxSizer(wx.VERTICAL) self.listbook = wx.Listbook(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LB_DEFAULT) self.listview = self.listbook.GetListView() - self.listview.SetMinSize((500, -1)) - self.listview.SetSize((500, -1)) + #self.listview.SetMinSize((500, -1)) + #self.listview.SetSize((500, -1)) self.imageList = wx.ImageList(32,32) self.listbook.SetImageList(self.imageList) @@ -77,4 +77,4 @@ class PreferenceDialog(wx.Dialog): self.btnOK.Bind(wx.EVT_BUTTON, self.OnBtnOK) def OnBtnOK(self, event): - self.Destroy() \ No newline at end of file + self.Close() diff --git a/gui/projectedView.py b/gui/projectedView.py index 3b0d8f3af..0043ac639 100644 --- a/gui/projectedView.py +++ b/gui/projectedView.py @@ -26,19 +26,29 @@ from gui.builtinViewColumns.state import State from gui.contextMenu import ContextMenu import eos.types -class ProjectedViewDrop(wx.PyDropTarget): - def __init__(self, dropFn): - wx.PyDropTarget.__init__(self) - self.dropFn = dropFn - # this is really transferring an EVE itemID - self.dropData = wx.PyTextDataObject() - self.SetDataObject(self.dropData) - def OnData(self, x, y, t): - if self.GetData(): - data = self.dropData.GetText().split(':') - self.dropFn(x, y, data) - return t +class DummyItem: + def __init__(self, txt): + self.name = txt + self.icon = None + +class DummyEntry: + def __init__(self, txt): + self.item = DummyItem(txt) + +class ProjectedViewDrop(wx.PyDropTarget): + def __init__(self, dropFn): + wx.PyDropTarget.__init__(self) + self.dropFn = dropFn + # this is really transferring an EVE itemID + self.dropData = wx.PyTextDataObject() + self.SetDataObject(self.dropData) + + def OnData(self, x, y, t): + if self.GetData(): + data = self.dropData.GetText().split(':') + self.dropFn(x, y, data) + return t class ProjectedView(d.Display): DEFAULT_COLS = ["State", @@ -96,8 +106,6 @@ class ProjectedView(d.Display): sFit.removeProjected(fitID, self.get(row)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) - event.Skip() - def handleDrag(self, type, fitID): #Those are drags coming from pyfa sources, NOT builtin wx drags if type == "fit": @@ -180,11 +188,20 @@ class ProjectedView(d.Display): self.EnsureVisible(item) self.deselectItems() + + if stuff == []: + stuff = [DummyEntry("Drag an item or fit, or use right-click menu for system effects")] + self.update(stuff) def get(self, row): numMods = len(self.modules) numDrones = len(self.drones) + numFits = len(self.fits) + + if (numMods + numDrones + numFits) == 0: + return None + if row < numMods: stuff = self.modules[row] elif row - numMods < numDrones: diff --git a/gui/propertyEditor.py b/gui/propertyEditor.py new file mode 100644 index 000000000..48c2689cd --- /dev/null +++ b/gui/propertyEditor.py @@ -0,0 +1,271 @@ +import wx + +try: + import wx.propgrid as wxpg +except: + if wx.VERSION < (2, 9): + raise ImportError("wx.propgrid is only available in wxPython >= 2.9") + else: + raise + +import gui.PFSearchBox as SBox +from gui.marketBrowser import SearchBox +import gui.display as d +import gui.globalEvents as GE +from gui.bitmapLoader import BitmapLoader +import service +import csv +import eos.db + +import logging + +logger = logging.getLogger(__name__) + +class AttributeEditor( wx.Frame ): + + def __init__( self, parent ): + wx.Frame.__init__(self, parent, wx.ID_ANY, title="Attribute Editor", pos=wx.DefaultPosition, + size=wx.Size(650, 600), style=wx.DEFAULT_FRAME_STYLE|wx.FRAME_FLOAT_ON_PARENT|wx.TAB_TRAVERSAL) + + i = wx.IconFromBitmap(BitmapLoader.getBitmap("fit_rename_small", "gui")) + self.SetIcon(i) + + self.mainFrame = parent + + menubar = wx.MenuBar() + fileMenu = wx.Menu() + fileImport = fileMenu.Append(wx.ID_ANY, 'Import', 'Import overrides') + fileExport = fileMenu.Append(wx.ID_ANY, 'Export', 'Import overrides') + fileClear = fileMenu.Append(wx.ID_ANY, 'Clear All', 'Clear all overrides') + + menubar.Append(fileMenu, '&File') + self.SetMenuBar(menubar) + + self.Bind(wx.EVT_MENU, self.OnImport, fileImport) + self.Bind(wx.EVT_MENU, self.OnExport, fileExport) + self.Bind(wx.EVT_MENU, self.OnClear, fileClear) + + + i = wx.IconFromBitmap(BitmapLoader.getBitmap("fit_rename_small", "gui")) + self.SetIcon(i) + + self.mainFrame = parent + self.panel = panel = wx.Panel(self, wx.ID_ANY) + + mainSizer = wx.BoxSizer(wx.HORIZONTAL) + + leftSizer = wx.BoxSizer(wx.VERTICAL) + leftPanel = wx.Panel(panel, wx.ID_ANY, style=wx.DOUBLE_BORDER if 'wxMSW' in wx.PlatformInfo else wx.SIMPLE_BORDER) + + self.searchBox = SearchBox(leftPanel) + self.itemView = ItemView(leftPanel) + + leftSizer.Add(self.searchBox, 0, wx.EXPAND) + leftSizer.Add(self.itemView, 1, wx.EXPAND) + + leftPanel.SetSizer(leftSizer) + mainSizer.Add(leftPanel, 1, wx.ALL | wx.EXPAND, 5) + + rightSizer = wx.BoxSizer(wx.VERTICAL) + self.btnRemoveOverrides = wx.Button( panel, wx.ID_ANY, u"Remove Overides for Item", wx.DefaultPosition, wx.DefaultSize, 0 ) + self.pg = AttributeGrid(panel) + rightSizer.Add(self.pg, 1, wx.ALL|wx.EXPAND, 5) + rightSizer.Add(self.btnRemoveOverrides, 0, wx.ALL | wx.EXPAND, 5 ) + self.btnRemoveOverrides.Bind(wx.EVT_BUTTON, self.pg.removeOverrides) + self.btnRemoveOverrides.Enable(False) + + mainSizer.Add(rightSizer, 1, wx.EXPAND) + + panel.SetSizer(mainSizer) + mainSizer.SetSizeHints(panel) + + sizer = wx.BoxSizer(wx.VERTICAL) + sizer.Add(panel, 1, wx.EXPAND) + self.SetSizer(sizer) + self.SetAutoLayout(True) + + self.Bind(wx.EVT_CLOSE, self.OnClose) + + def OnClose(self, event): + fitID = self.mainFrame.getActiveFit() + if fitID is not None: + wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fitID)) + self.Destroy() + + def OnImport(self, event): + dlg = wx.FileDialog(self, "Import pyfa override file", + wildcard = "pyfa override file (*.csv)|*.csv", + style = wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) + if (dlg.ShowModal() == wx.ID_OK): + path = dlg.GetPath() + with open(path, 'rb') as csvfile: + spamreader = csv.reader(csvfile) + for row in spamreader: + itemID, attrID, value = row + item = eos.db.getItem(int(itemID)) + attr = eos.db.getAttributeInfo(int(attrID)) + item.setOverride(attr, float(value)) + self.itemView.updateItems(True) + + def OnExport(self, event): + sMkt = service.Market.getInstance() + items = sMkt.getItemsWithOverrides() + defaultFile = "pyfa_overrides.csv" + + dlg = wx.FileDialog(self, "Save Overrides As...", + wildcard = "pyfa overrides (*.csv)|*.csv", + style = wx.FD_SAVE, + defaultFile=defaultFile) + + if dlg.ShowModal() == wx.ID_OK: + path = dlg.GetPath() + with open(path, 'wb') as csvfile: + writer = csv.writer(csvfile) + for item in items: + for key, override in item.overrides.iteritems(): + writer.writerow([item.ID, override.attrID, override.value]) + + def OnClear(self, event): + dlg = wx.MessageDialog(self, + "Are you sure you want to delete all overrides?", + "Confirm Delete", wx.YES | wx.NO | wx.ICON_EXCLAMATION) + + if dlg.ShowModal() == wx.ID_YES: + sMkt = service.Market.getInstance() + items = sMkt.getItemsWithOverrides() + # We can't just delete overrides, as loaded items will still have + # them assigned. Deleting them from the database won't propagate + # them due to the eve/user database disconnect. We must loop through + # all items that have overrides and remove them + for item in items: + for _, x in item.overrides.items(): + item.deleteOverride(x.attr) + self.itemView.updateItems(True) + self.pg.Clear() + +# This is literally a stripped down version of the market. +class ItemView(d.Display): + DEFAULT_COLS = ["Base Icon", + "Base Name", + "attr:power,,,True", + "attr:cpu,,,True"] + + def __init__(self, parent): + d.Display.__init__(self, parent) + sMkt = service.Market.getInstance() + + self.things = sMkt.getItemsWithOverrides() + self.items = self.things + + self.searchBox = parent.Parent.Parent.searchBox + # Bind search actions + self.searchBox.Bind(SBox.EVT_TEXT_ENTER, self.scheduleSearch) + self.searchBox.Bind(SBox.EVT_SEARCH_BTN, self.scheduleSearch) + self.searchBox.Bind(SBox.EVT_CANCEL_BTN, self.clearSearch) + self.searchBox.Bind(SBox.EVT_TEXT, self.scheduleSearch) + + self.update(self.items) + + def clearSearch(self, event=None): + if event: + self.searchBox.Clear() + self.items = self.things + self.update(self.items) + + def updateItems(self, updateDisplay=False): + sMkt = service.Market.getInstance() + self.things = sMkt.getItemsWithOverrides() + self.items = self.things + if updateDisplay: + self.update(self.things) + + def scheduleSearch(self, event=None): + sMkt = service.Market.getInstance() + + search = self.searchBox.GetLineText(0) + # Make sure we do not count wildcard as search symbol + realsearch = search.replace("*", "") + # Show nothing if query is too short + if len(realsearch) < 3: + self.clearSearch() + return + + sMkt.searchItems(search, self.populateSearch, False) + + def populateSearch(self, items): + self.items = list(items) + self.update(items) + + +class AttributeGrid(wxpg.PropertyGrid): + + def __init__(self, parent): + wxpg.PropertyGrid.__init__(self, parent, style=wxpg.PG_HIDE_MARGIN|wxpg.PG_HIDE_CATEGORIES|wxpg.PG_BOLD_MODIFIED|wxpg.PG_TOOLTIPS) + self.SetExtraStyle(wxpg.PG_EX_HELP_AS_TOOLTIPS) + + self.item = None + + self.itemView = parent.Parent.itemView + + self.btn = parent.Parent.btnRemoveOverrides + + self.Bind( wxpg.EVT_PG_CHANGED, self.OnPropGridChange ) + self.Bind( wxpg.EVT_PG_SELECTED, self.OnPropGridSelect ) + self.Bind( wxpg.EVT_PG_RIGHT_CLICK, self.OnPropGridRightClick ) + + self.itemView.Bind(wx.EVT_LIST_ITEM_SELECTED, self.itemActivated) + self.itemView.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.itemActivated) + + def itemActivated(self, event): + self.Clear() + self.btn.Enable(True) + sel = event.EventObject.GetFirstSelected() + self.item = item = self.itemView.items[sel] + + for key in sorted(item.attributes.keys()): + override = item.overrides.get(key, None) + default = item.attributes[key].value + if override and override.value != default: + prop = wxpg.FloatProperty(key, value=override.value) + prop.SetModifiedStatus(True) + else: + prop = wxpg.FloatProperty(key, value=default) + + prop.SetClientData(item.attributes[key]) # set this so that we may access it later + prop.SetHelpString("%s\n%s"%(item.attributes[key].displayName or key, "Default Value: %0.3f"%default)) + self.Append(prop) + + def removeOverrides(self, event): + if self.item is None: + return + + for _, x in self.item.overrides.items(): + self.item.deleteOverride(x.attr) + self.itemView.updateItems(True) + self.ClearModifiedStatus() + self.itemView.Select(self.itemView.GetFirstSelected(), on=False) + self.Clear() + + def Clear(self): + self.item = None + self.btn.Enable(False) + wxpg.PropertyGrid.Clear(self) + + def OnPropGridChange(self, event): + p = event.GetProperty() + attr = p.GetClientData() + if p.GetValue() == attr.value: + self.item.deleteOverride(attr) + p.SetModifiedStatus(False) + else: + self.item.setOverride(attr, p.GetValue()) + + self.itemView.updateItems() + + logger.debug('%s changed to "%s"' % (p.GetName(), p.GetValueAsString())) + + def OnPropGridSelect(self, event): + pass + + def OnPropGridRightClick(self, event): + pass diff --git a/gui/pyfatogglepanel.py b/gui/pyfatogglepanel.py index ce92f10c8..14bd9e2f3 100644 --- a/gui/pyfatogglepanel.py +++ b/gui/pyfatogglepanel.py @@ -24,7 +24,7 @@ ########################################################################### import wx -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader ########################################################################### ## Class TogglePanel @@ -54,8 +54,8 @@ class TogglePanel ( wx.Panel ): # Load expanded/collapsed bitmaps from the icons folder - self.bmpExpanded = bitmapLoader.getBitmap("down-arrow2","icons") - self.bmpCollapsed = bitmapLoader.getBitmap("up-arrow2","icons") + self.bmpExpanded = BitmapLoader.getBitmap("down-arrow2","gui") + self.bmpCollapsed = BitmapLoader.getBitmap("up-arrow2","gui") # Make the bitmaps have the same color as window text @@ -146,7 +146,6 @@ class TogglePanel ( wx.Panel ): else: return True - def IsExpanded(self): """ Returns ``True`` if the pane window is currently shown. """ if self._toggle == 1: @@ -154,7 +153,6 @@ class TogglePanel ( wx.Panel ): else: return True - def OnStateChange(self, sz): """ Handles the status changes (collapsing/expanding). @@ -168,9 +166,8 @@ class TogglePanel ( wx.Panel ): self.parent.GetSizer().SetSizeHints(self.parent) - if self.IsCollapsed(): - # expanded . collapsed transition + # expanded . collapsed transition if self.parent.GetSizer(): # we have just set the size hints... sz = self.parent.GetSizer().CalcMin() @@ -178,39 +175,36 @@ class TogglePanel ( wx.Panel ): # use SetClientSize() and not SetSize() otherwise the size for # e.g. a wxFrame with a menubar wouldn't be correctly set self.parent.SetClientSize(sz) - else: self.parent.Layout() - else: - - # collapsed . expanded transition - - # force our parent to "fit", i.e. expand so that it can honour - # our minimal size + # collapsed . expanded transition + # force our parent to "fit", i.e. expand so that it can honour + # our minimal size self.parent.Fit() - # Toggle the content panel (hide/show) - - def toggleContent( self, event ): + def toggleContent(self, event): self.Freeze() + if self._toggle == 1: self.contentMinSize = self.contentPanel.GetSize() - self.contentPanel.SetMinSize(wx.Size(self.contentMinSize[0],0)) - self.headerBmp.SetBitmap( self.bmpCollapsed) - - + self.contentPanel.Hide() + self.headerBmp.SetBitmap(self.bmpCollapsed) else: - self.contentPanel.SetMinSize(self.contentMinSize) - - self.headerBmp.SetBitmap( self.bmpExpanded) - - - self._toggle *=-1 + self.contentPanel.Show() + self.headerBmp.SetBitmap(self.bmpExpanded) + self._toggle *= -1 + self.Layout() self.Thaw() + if self.forceLayout == -1: - self.OnStateChange(self.GetBestSize()) + if wx.VERSION >= (3, 0): + x, y = self.GetBestSize() + y -= self.contentPanel.GetSize()[1] + else: + x, y = self.GetBestSize() + self.OnStateChange((x, y)) else: self.parent.Layout() diff --git a/gui/pygauge.py b/gui/pygauge.py index f06a78958..308004a6b 100644 --- a/gui/pygauge.py +++ b/gui/pygauge.py @@ -312,47 +312,53 @@ class PyGauge(wx.PyWindow): r = copy.copy(rect) r.width = w + if r.width > 0: + # If we draw it with zero width, GTK throws errors. This way, + # only draw it if the gauge will actually show something. + # We stick other calculations in this block to avoid wasting + # time on them if not needed. See GH issue #282 - pv = value - xv=1 - transition = 0 - - if pv <= 100: - xv = pv/100 + pv = value + xv=1 transition = 0 - elif pv <=101: - xv = pv -100 - transition = 1 + if pv <= 100: + xv = pv/100 + transition = 0 - elif pv <= 103: - xv = (pv -101)/2 - transition = 2 + elif pv <=101: + xv = pv -100 + transition = 1 - elif pv <= 105: - xv = (pv -103)/2 - transition = 3 + elif pv <= 103: + xv = (pv -101)/2 + transition = 2 - else: - pv = 106 - xv = pv -100 - transition = -1 + elif pv <= 105: + xv = (pv -103)/2 + transition = 3 - if transition != -1: - colorS,colorE = self.transitionsColors[transition] - color = colorUtils.CalculateTransitionColor(colorS, colorE, xv) - else: - color = wx.Colour(191,48,48) + else: + pv = 106 + xv = pv -100 + transition = -1 - if self.gradientEffect > 0: - gcolor = colorUtils.BrightenColor(color, float(self.gradientEffect) / 100) - gMid = colorUtils.BrightenColor(color, float(self.gradientEffect/2) / 100) - else: - gcolor = colorUtils.DarkenColor(color, float(-self.gradientEffect) / 100) - gMid = colorUtils.DarkenColor(color, float(-self.gradientEffect/2) / 100) + if transition != -1: + colorS,colorE = self.transitionsColors[transition] + color = colorUtils.CalculateTransitionColor(colorS, colorE, xv) + else: + color = wx.Colour(191,48,48) + + if self.gradientEffect > 0: + gcolor = colorUtils.BrightenColor(color, float(self.gradientEffect) / 100) + gMid = colorUtils.BrightenColor(color, float(self.gradientEffect/2) / 100) + else: + gcolor = colorUtils.DarkenColor(color, float(-self.gradientEffect) / 100) + gMid = colorUtils.DarkenColor(color, float(-self.gradientEffect/2) / 100) + + gBmp = drawUtils.DrawGradientBar(r.width, r.height, gMid, color, gcolor) + dc.DrawBitmap(gBmp, r.left, r.top) - gBmp = drawUtils.DrawGradientBar(r.width, r.height, gMid, color, gcolor) - dc.DrawBitmap(gBmp,r.left, r.top) else: colour=self.GetBarColour() dc.SetBrush(wx.Brush(colour)) @@ -397,7 +403,6 @@ class PyGauge(wx.PyWindow): dc.SetTextForeground(wx.Colour(255,255,255)) dc.DrawLabel(formatStr.format(value), rect, wx.ALIGN_CENTER) - def OnTimer(self,event): """ Handles the ``wx.EVT_TIMER`` event for L{PyfaGauge}. diff --git a/gui/resistsEditor.py b/gui/resistsEditor.py index 8dcfe4b0f..3d8ac6ef2 100644 --- a/gui/resistsEditor.py +++ b/gui/resistsEditor.py @@ -18,7 +18,7 @@ #=============================================================================== import wx -import bitmapLoader +from gui.bitmapLoader import BitmapLoader import service from gui.utils.clipboard import toClipboard, fromClipboard from service.targetResists import ImportError @@ -51,15 +51,11 @@ class ResistsEditorDlg(wx.Dialog): self.namePicker.Bind(wx.EVT_TEXT_ENTER, self.processRename) self.namePicker.Hide() - self.btnSave = wx.Button(self, wx.ID_SAVE) - self.btnSave.Hide() - self.btnSave.Bind(wx.EVT_BUTTON, self.processRename) - size = None headerSizer.Add(self.ccResists, 1, wx.ALIGN_CENTER_VERTICAL | wx.RIGHT | wx.LEFT, 3) buttons = (("new", wx.ART_NEW), - ("rename", bitmapLoader.getBitmap("rename", "icons")), + ("rename", BitmapLoader.getBitmap("rename", "gui")), ("copy", wx.ART_COPY), ("delete", wx.ART_DELETE)) for name, art in buttons: @@ -77,6 +73,12 @@ class ResistsEditorDlg(wx.Dialog): btn.SetToolTipString("%s resist profile" % name.capitalize()) headerSizer.Add(btn, 0, wx.ALIGN_CENTER_VERTICAL) + + self.btnSave = wx.Button(self, wx.ID_SAVE) + self.btnSave.Hide() + self.btnSave.Bind(wx.EVT_BUTTON, self.processRename) + headerSizer.Add(self.btnSave, 0, wx.ALIGN_CENTER) + mainSizer.Add(headerSizer, 0, wx.EXPAND | wx.ALL, 2) self.sl = wx.StaticLine(self) @@ -101,7 +103,7 @@ class ResistsEditorDlg(wx.Dialog): style = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT border = 5 - bmp = wx.StaticBitmap(self, wx.ID_ANY, bitmapLoader.getBitmap("%s_big"%type, "icons")) + bmp = wx.StaticBitmap(self, wx.ID_ANY, BitmapLoader.getBitmap("%s_big"%type, "gui")) resistEditSizer.Add(bmp, 0, style, border) # set text edit setattr(self, "%sEdit"%type, wx.TextCtrl(self, wx.ID_ANY, "", wx.DefaultPosition, defSize)) @@ -110,6 +112,9 @@ class ResistsEditorDlg(wx.Dialog): resistEditSizer.Add(wx.StaticText( self, wx.ID_ANY, u"%", wx.DefaultPosition, wx.DefaultSize, 0 ), 0, wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER_VERTICAL, 5) editObj.Bind(wx.EVT_TEXT, self.ValuesUpdated) + # Color we use to reset invalid value color + self.colorReset = wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT) + contentSizer.Add(resistEditSizer, 1, wx.EXPAND | wx.ALL, 5) self.slfooter = wx.StaticLine(self) contentSizer.Add(self.slfooter, 0, wx.EXPAND | wx.TOP, 5) @@ -196,21 +201,21 @@ class ResistsEditorDlg(wx.Dialog): # if everything checks out, set resist attribute setattr(p, "%sAmount"%type, value/100) + editObj.SetForegroundColour(self.colorReset) + self.stNotice.SetLabel("") self.totSizer.Layout() if event is not None: - # If we get here, everything is normal. Reset color - event.EventObject.SetForegroundColour(wx.NullColor) event.Skip() service.TargetResists.getInstance().saveChanges(p) except ValueError: - event.EventObject.SetForegroundColour(wx.RED) + editObj.SetForegroundColour(wx.RED) self.stNotice.SetLabel("Incorrect Formatting (decimals only)") except AssertionError: - event.EventObject.SetForegroundColour(wx.RED) + editObj.SetForegroundColour(wx.RED) self.stNotice.SetLabel("Incorrect Range (must be 0-100)") finally: # Refresh for color changes to take effect immediately self.Refresh() @@ -266,7 +271,7 @@ class ResistsEditorDlg(wx.Dialog): for type in self.DAMAGE_TYPES: editObj = getattr(self, "%sEdit"%type) editObj.ChangeValue("0.0") - editObj.SetForegroundColour(wx.NullColor) + editObj.SetForegroundColour(self.colorReset) self.Refresh() self.renamePattern() @@ -349,8 +354,6 @@ class ResistsEditorDlg(wx.Dialog): self.namePicker.SetFocus() for btn in (self.new, self.rename, self.delete, self.copy): btn.Hide() - self.headerSizer.Remove(btn) - self.headerSizer.Add(self.btnSave, 0, wx.ALIGN_CENTER) self.btnSave.Show() self.restrict() self.headerSizer.Layout() @@ -359,12 +362,10 @@ class ResistsEditorDlg(wx.Dialog): self.ccResists.Show() self.namePicker.Hide() self.btnSave.Hide() - self.headerSizer.Remove(self.btnSave) for btn in (self.new, self.rename, self.delete, self.copy): - self.headerSizer.Add(btn, 0, wx.ALIGN_CENTER_VERTICAL) btn.Show() self.unrestrict() - #self.headerSizer.Layout() + self.headerSizer.Layout() def __del__( self ): diff --git a/gui/sfBrowserItem.py b/gui/sfBrowserItem.py index 4067707c3..81294cba3 100644 --- a/gui/sfBrowserItem.py +++ b/gui/sfBrowserItem.py @@ -325,7 +325,8 @@ class SFBrowserItem(wx.Window): def OnLeftDown(self, event): - self.CaptureMouse() + if not self.HasCapture(): + self.CaptureMouse() btn = self.toolbar.MouseClick(event) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index 5301c6f7e..2642c7d7a 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -1,6 +1,6 @@ import wx import copy -from gui import bitmapLoader +from gui.bitmapLoader import BitmapLoader import gui.mainFrame import gui.globalEvents as GE import time @@ -15,6 +15,7 @@ import gui.utils.animEffects as animEffects import gui.sfBrowserItem as SFItem from gui.contextMenu import ContextMenu +import gui.utils.fonts as fonts import service import gui.utils.fonts as fonts @@ -106,9 +107,9 @@ class RaceSelector(wx.Window): self.buttonsPadding = 4 if layout == wx.VERTICAL: - self.bmpArrow = bitmapLoader.getBitmap("down-arrow2","icons") + self.bmpArrow = BitmapLoader.getBitmap("down-arrow2","gui") else: - self.bmpArrow = bitmapLoader.getBitmap("up-arrow2","icons") + self.bmpArrow = BitmapLoader.getBitmap("up-arrow2","gui") # Make the bitmaps have the same color as window text @@ -206,7 +207,7 @@ class RaceSelector(wx.Window): self.raceBmps = [] for race in races: if race: - self.raceBmps.append(bitmapLoader.getBitmap("race_%s_small" % race, "icons")) + self.raceBmps.append(BitmapLoader.getBitmap("race_%s_small" % race, "gui")) self.raceNames = races self.CalcButtonsBarPos() self.Refresh() @@ -327,14 +328,14 @@ class NavigationPanel(SFItem.SFBrowserItem): def __init__(self,parent, size = (-1, 24)): SFItem.SFBrowserItem.__init__(self,parent,size = size) - self.rewBmpH = bitmapLoader.getBitmap("frewind_small","icons") - self.forwBmp = bitmapLoader.getBitmap("fforward_small","icons") - self.searchBmpH = bitmapLoader.getBitmap("fsearch_small","icons") - self.newBmpH = bitmapLoader.getBitmap("fit_add_small","icons") - self.resetBmpH = bitmapLoader.getBitmap("freset_small","icons") - self.switchBmpH = bitmapLoader.getBitmap("fit_switch_view_mode_small","icons") + self.rewBmpH = BitmapLoader.getBitmap("frewind_small","gui") + self.forwBmp = BitmapLoader.getBitmap("fforward_small","gui") + self.searchBmpH = BitmapLoader.getBitmap("fsearch_small","gui") + self.newBmpH = BitmapLoader.getBitmap("fit_add_small","gui") + self.resetBmpH = BitmapLoader.getBitmap("freset_small","gui") + self.switchBmpH = BitmapLoader.getBitmap("fit_switch_view_mode_small","gui") - switchImg = bitmapLoader.getImage("fit_switch_view_mode_small","icons") + switchImg = BitmapLoader.getImage("fit_switch_view_mode_small","gui") switchImg = switchImg.AdjustChannels(1,1,1,0.4) self.switchBmpD = wx.BitmapFromImage(switchImg) @@ -966,7 +967,7 @@ class CategoryItem(SFItem.SFBrowserItem): SFItem.SFBrowserItem.__init__(self,parent,size = size) if categoryID: - self.shipBmp = bitmapLoader.getBitmap("ship_small","icons") + self.shipBmp = BitmapLoader.getBitmap("ship_small","gui") else: self.shipBmp = wx.EmptyBitmap(16,16) @@ -1098,26 +1099,26 @@ class ShipItem(SFItem.SFBrowserItem): self.shipBmp = None if shipID: - self.shipBmp = bitmapLoader.getBitmap(str(shipID),"ships") + self.shipBmp = BitmapLoader.getBitmap(str(shipID), "renders") if not self.shipBmp: - self.shipBmp = bitmapLoader.getBitmap("ship_no_image_big","icons") + self.shipBmp = BitmapLoader.getBitmap("ship_no_image_big", "gui") self.shipFittingInfo = shipFittingInfo self.shipName, self.shipFits = shipFittingInfo - self.newBmp = bitmapLoader.getBitmap("fit_add_small", "icons") - self.acceptBmp = bitmapLoader.getBitmap("faccept_small", "icons") + self.newBmp = BitmapLoader.getBitmap("fit_add_small", "gui") + self.acceptBmp = BitmapLoader.getBitmap("faccept_small", "gui") - self.shipEffBk = bitmapLoader.getBitmap("fshipbk_big","icons") + self.shipEffBk = BitmapLoader.getBitmap("fshipbk_big","gui") img = wx.ImageFromBitmap(self.shipEffBk) img = img.Mirror(False) self.shipEffBkMirrored = wx.BitmapFromImage(img) - self.raceBmp = bitmapLoader.getBitmap("race_%s_small" % self.shipRace, "icons") + self.raceBmp = BitmapLoader.getBitmap("race_%s_small" % self.shipRace, "gui") if not self.raceBmp: - self.raceBmp = bitmapLoader.getBitmap("fit_delete_small","icons") + self.raceBmp = BitmapLoader.getBitmap("fit_delete_small","gui") self.raceDropShadowBmp = drawUtils.CreateDropShadowBitmap(self.raceBmp, 0.2) @@ -1340,7 +1341,7 @@ class ShipItem(SFItem.SFBrowserItem): editCtl.SetPosition((fnEditPosX,fnEditPosY)) class PFBitmapFrame(wx.Frame): - def __init__ (self,parent, pos, bitmap): + def __init__ (self, parent, pos, bitmap): wx.Frame.__init__(self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = pos, size = wx.DefaultSize, style = wx.NO_BORDER | wx.FRAME_NO_TASKBAR @@ -1428,10 +1429,10 @@ class FitItem(SFItem.SFBrowserItem): self.deleted = False if shipID: - self.shipBmp = bitmapLoader.getBitmap(str(shipID),"ships") + self.shipBmp = BitmapLoader.getBitmap(str(shipID),"renders") if not self.shipBmp: - self.shipBmp = bitmapLoader.getBitmap("ship_no_image_big","icons") + self.shipBmp = BitmapLoader.getBitmap("ship_no_image_big","gui") self.shipFittingInfo = shipFittingInfo self.shipName, self.fitName, self.fitBooster, self.timestamp = shipFittingInfo @@ -1439,13 +1440,13 @@ class FitItem(SFItem.SFBrowserItem): # see GH issue #62 if self.fitBooster is None: self.fitBooster = False - self.boosterBmp = bitmapLoader.getBitmap("fleet_fc_small", "icons") - self.copyBmp = bitmapLoader.getBitmap("fit_add_small", "icons") - self.renameBmp = bitmapLoader.getBitmap("fit_rename_small", "icons") - self.deleteBmp = bitmapLoader.getBitmap("fit_delete_small","icons") - self.acceptBmp = bitmapLoader.getBitmap("faccept_small", "icons") + self.boosterBmp = BitmapLoader.getBitmap("fleet_fc_small", "gui") + self.copyBmp = BitmapLoader.getBitmap("fit_add_small", "gui") + self.renameBmp = BitmapLoader.getBitmap("fit_rename_small", "gui") + self.deleteBmp = BitmapLoader.getBitmap("fit_delete_small","gui") + self.acceptBmp = BitmapLoader.getBitmap("faccept_small", "gui") - self.shipEffBk = bitmapLoader.getBitmap("fshipbk_big","icons") + self.shipEffBk = BitmapLoader.getBitmap("fshipbk_big","gui") img = wx.ImageFromBitmap(self.shipEffBk) img = img.Mirror(False) @@ -1641,7 +1642,16 @@ class FitItem(SFItem.SFBrowserItem): self.RestoreEditButton() return - self.deleteFit() + # to prevent accidental deletion, give dialog confirmation unless shift is depressed + if wx.GetMouseState().ShiftDown() or wx.GetMouseState().MiddleDown(): + self.deleteFit() + else: + dlg = wx.MessageDialog(self, + "Do you really want to delete this fit?", + "Confirm Delete", wx.YES | wx.NO | wx.ICON_QUESTION) + + if dlg.ShowModal() == wx.ID_YES: + self.deleteFit() def deleteFit(self, event=None): if self.deleted: @@ -1708,7 +1718,8 @@ class FitItem(SFItem.SFBrowserItem): if self.dragging: if not self.dragged: if self.dragMotionTrigger < 0: - self.CaptureMouse() + if not self.HasCapture(): + self.CaptureMouse() self.dragWindow = PFBitmapFrame(self, pos, self.dragTLFBmp) self.dragWindow.Show() self.dragged = True @@ -1808,7 +1819,7 @@ class FitItem(SFItem.SFBrowserItem): self.AdjustControlSizePos(self.tcFitName, self.textStartx, self.toolbarx - self.editWidth - self.padding) tdc = wx.MemoryDC() - self.dragTLFBmp = wx.EmptyBitmap((self.toolbarx if self.toolbarx < 200 else 200), rect.height) + self.dragTLFBmp = wx.EmptyBitmap((self.toolbarx if self.toolbarx < 200 else 200), rect.height, 24) tdc.SelectObject(self.dragTLFBmp) tdc.Blit(0, 0, (self.toolbarx if self.toolbarx < 200 else 200), rect.height, mdc, 0, 0, wx.COPY) tdc.SelectObject(wx.NullBitmap) diff --git a/gui/updateDialog.py b/gui/updateDialog.py index fa5b9f83d..7dfe73790 100644 --- a/gui/updateDialog.py +++ b/gui/updateDialog.py @@ -18,7 +18,7 @@ #=============================================================================== import wx -import bitmapLoader +from gui.bitmapLoader import BitmapLoader import config import service import dateutil.parser @@ -107,7 +107,7 @@ class UpdateDialog(wx.Dialog): self.Centre( wx.BOTH ) def OnClose(self, e): - self.Destroy() + self.Close() def SuppressChange(self, e): if (self.supressCheckbox.IsChecked()): diff --git a/gui/utils/animUtils.py b/gui/utils/animUtils.py index deaa1c70d..9ee81b03a 100644 --- a/gui/utils/animUtils.py +++ b/gui/utils/animUtils.py @@ -94,8 +94,5 @@ class WaitDialog(wx.Dialog): mainSizer.Add( self.progress, 1, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 0 ) self.SetSizer( mainSizer ) self.Layout() - self.Bind(wx.EVT_CLOSE,self.OnClose) self.CenterOnParent() - def OnClose(self, event): - pass diff --git a/gui/utils/drawUtils.py b/gui/utils/drawUtils.py index 77b260afe..91e60eb98 100644 --- a/gui/utils/drawUtils.py +++ b/gui/utils/drawUtils.py @@ -33,9 +33,10 @@ def DrawFilledBitmap(width, height, color): return canvas def DrawGradientBar(width, height, gStart, gEnd, gMid = None, fillRatio = 4): + # we need to have dimensions to draw + #assert width > 0 and height > 0 canvas = wx.EmptyBitmap(width,height) - mdc = wx.MemoryDC() mdc.SelectObject(canvas) diff --git a/gui/utils/exportHtml.py b/gui/utils/exportHtml.py index 726bec265..ee3bcf05c 100644 --- a/gui/utils/exportHtml.py +++ b/gui/utils/exportHtml.py @@ -136,7 +136,7 @@ class exportHtmlThread(threading.Thread): categoryList = list(sMkt.getShipRoot()) categoryList.sort(key=lambda ship: ship.name) - count = 1 + count = 0 for group in categoryList: # init market group string to give ships something to attach to @@ -163,9 +163,9 @@ class exportHtmlThread(threading.Thread): except: pass finally: - count += 1 if self.callback: wx.CallAfter(self.callback, count) + count += 1 else: # Ship group header HTMLship = ( @@ -182,9 +182,9 @@ class exportHtmlThread(threading.Thread): except: continue finally: - count += 1 if self.callback: wx.CallAfter(self.callback, count) + count += 1 HTMLgroup += HTMLship + (' \n' ' \n') diff --git a/gui/utils/fonts.py b/gui/utils/fonts.py index 08f858f21..eb2dd95f5 100644 --- a/gui/utils/fonts.py +++ b/gui/utils/fonts.py @@ -1,3 +1,8 @@ +''' +Font file to handle the differences in font calculations between +different wxPython versions +''' + import wx if 'wxMac' in wx.PlatformInfo: diff --git a/icons/add_small.png b/icons/add_small.png deleted file mode 100644 index b4cafc171..000000000 Binary files a/icons/add_small.png and /dev/null differ diff --git a/icons/armorActive_big.png b/icons/armorActive_big.png deleted file mode 100644 index d50be2567..000000000 Binary files a/icons/armorActive_big.png and /dev/null differ diff --git a/icons/armor_big.png b/icons/armor_big.png deleted file mode 100644 index 70160a1c2..000000000 Binary files a/icons/armor_big.png and /dev/null differ diff --git a/icons/booster_small.png b/icons/booster_small.png deleted file mode 100644 index 4ab512213..000000000 Binary files a/icons/booster_small.png and /dev/null differ diff --git a/icons/calibration_big.png b/icons/calibration_big.png deleted file mode 100644 index 9ee18cfbb..000000000 Binary files a/icons/calibration_big.png and /dev/null differ diff --git a/icons/capacitorInfo_big.png b/icons/capacitorInfo_big.png deleted file mode 100644 index 65f595e14..000000000 Binary files a/icons/capacitorInfo_big.png and /dev/null differ diff --git a/icons/capacitorRecharge_big.png b/icons/capacitorRecharge_big.png deleted file mode 100644 index 17befb396..000000000 Binary files a/icons/capacitorRecharge_big.png and /dev/null differ diff --git a/icons/capacitorRecharge_small.png b/icons/capacitorRecharge_small.png deleted file mode 100644 index d1c662dd8..000000000 Binary files a/icons/capacitorRecharge_small.png and /dev/null differ diff --git a/icons/cargoBay_big.png b/icons/cargoBay_big.png deleted file mode 100644 index dd744b0ff..000000000 Binary files a/icons/cargoBay_big.png and /dev/null differ diff --git a/icons/cargo_small.png b/icons/cargo_small.png deleted file mode 100644 index 2906b9214..000000000 Binary files a/icons/cargo_small.png and /dev/null differ diff --git a/icons/character_small.png b/icons/character_small.png deleted file mode 100644 index a6dc9d668..000000000 Binary files a/icons/character_small.png and /dev/null differ diff --git a/icons/column_misc.png b/icons/column_misc.png deleted file mode 100644 index b64791990..000000000 Binary files a/icons/column_misc.png and /dev/null differ diff --git a/icons/ctabadd.png b/icons/ctabadd.png deleted file mode 100644 index 937776fd0..000000000 Binary files a/icons/ctabadd.png and /dev/null differ diff --git a/icons/ctabclose.png b/icons/ctabclose.png deleted file mode 100644 index 6ed6f083f..000000000 Binary files a/icons/ctabclose.png and /dev/null differ diff --git a/icons/ctableft.png b/icons/ctableft.png deleted file mode 100644 index 8af5fb123..000000000 Binary files a/icons/ctableft.png and /dev/null differ diff --git a/icons/ctabmiddle.png b/icons/ctabmiddle.png deleted file mode 100644 index 1b4f094be..000000000 Binary files a/icons/ctabmiddle.png and /dev/null differ diff --git a/icons/ctabright.png b/icons/ctabright.png deleted file mode 100644 index 9f85088b7..000000000 Binary files a/icons/ctabright.png and /dev/null differ diff --git a/icons/damagePattern_small.png b/icons/damagePattern_small.png deleted file mode 100644 index 69b972533..000000000 Binary files a/icons/damagePattern_small.png and /dev/null differ diff --git a/icons/down-arrow2.png b/icons/down-arrow2.png deleted file mode 100644 index d53443884..000000000 Binary files a/icons/down-arrow2.png and /dev/null differ diff --git a/icons/droneBandwidth_small.png b/icons/droneBandwidth_small.png deleted file mode 100644 index aff82b7e4..000000000 Binary files a/icons/droneBandwidth_small.png and /dev/null differ diff --git a/icons/drone_small.png b/icons/drone_small.png deleted file mode 100644 index 671ee883e..000000000 Binary files a/icons/drone_small.png and /dev/null differ diff --git a/icons/em_big.png b/icons/em_big.png deleted file mode 100644 index 1b0d7e769..000000000 Binary files a/icons/em_big.png and /dev/null differ diff --git a/icons/em_small.png b/icons/em_small.png deleted file mode 100644 index e6695544b..000000000 Binary files a/icons/em_small.png and /dev/null differ diff --git a/icons/explosive_big.png b/icons/explosive_big.png deleted file mode 100644 index db6f98db2..000000000 Binary files a/icons/explosive_big.png and /dev/null differ diff --git a/icons/explosive_small.png b/icons/explosive_small.png deleted file mode 100644 index 4cc376aa4..000000000 Binary files a/icons/explosive_small.png and /dev/null differ diff --git a/icons/faccept_small.png b/icons/faccept_small.png deleted file mode 100644 index b4b9d8ead..000000000 Binary files a/icons/faccept_small.png and /dev/null differ diff --git a/icons/fforward_small.png b/icons/fforward_small.png deleted file mode 100644 index e3870a203..000000000 Binary files a/icons/fforward_small.png and /dev/null differ diff --git a/icons/fit_add_small.png b/icons/fit_add_small.png deleted file mode 100644 index 946635f9a..000000000 Binary files a/icons/fit_add_small.png and /dev/null differ diff --git a/icons/fit_delete_small.png b/icons/fit_delete_small.png deleted file mode 100644 index d02d4b36e..000000000 Binary files a/icons/fit_delete_small.png and /dev/null differ diff --git a/icons/fit_rename_small.png b/icons/fit_rename_small.png deleted file mode 100644 index a57444cd9..000000000 Binary files a/icons/fit_rename_small.png and /dev/null differ diff --git a/icons/fit_small.png b/icons/fit_small.png deleted file mode 100644 index 72a3aa781..000000000 Binary files a/icons/fit_small.png and /dev/null differ diff --git a/icons/fit_switch_view_mode_small.png b/icons/fit_switch_view_mode_small.png deleted file mode 100644 index f48c8d36b..000000000 Binary files a/icons/fit_switch_view_mode_small.png and /dev/null differ diff --git a/icons/fleet_fb_small.png b/icons/fleet_fb_small.png deleted file mode 100644 index add33d42d..000000000 Binary files a/icons/fleet_fb_small.png and /dev/null differ diff --git a/icons/fleet_fc_small.png b/icons/fleet_fc_small.png deleted file mode 100644 index 436f701c9..000000000 Binary files a/icons/fleet_fc_small.png and /dev/null differ diff --git a/icons/fleet_sb_small.png b/icons/fleet_sb_small.png deleted file mode 100644 index 2f2ce3e9b..000000000 Binary files a/icons/fleet_sb_small.png and /dev/null differ diff --git a/icons/fleet_sc_small.png b/icons/fleet_sc_small.png deleted file mode 100644 index d42260c9a..000000000 Binary files a/icons/fleet_sc_small.png and /dev/null differ diff --git a/icons/fleet_wb_small.png b/icons/fleet_wb_small.png deleted file mode 100644 index 119a4b750..000000000 Binary files a/icons/fleet_wb_small.png and /dev/null differ diff --git a/icons/fleet_wc_small.png b/icons/fleet_wc_small.png deleted file mode 100644 index a47ab3d01..000000000 Binary files a/icons/fleet_wc_small.png and /dev/null differ diff --git a/icons/freset_small.png b/icons/freset_small.png deleted file mode 100644 index 9cebef29b..000000000 Binary files a/icons/freset_small.png and /dev/null differ diff --git a/icons/frewind_small.png b/icons/frewind_small.png deleted file mode 100644 index c2282342b..000000000 Binary files a/icons/frewind_small.png and /dev/null differ diff --git a/icons/fsearch_small.png b/icons/fsearch_small.png deleted file mode 100644 index d07c5cb1a..000000000 Binary files a/icons/fsearch_small.png and /dev/null differ diff --git a/icons/fshipbk_big.png b/icons/fshipbk_big.png deleted file mode 100644 index 1021dec3a..000000000 Binary files a/icons/fshipbk_big.png and /dev/null differ diff --git a/icons/graphs_small.png b/icons/graphs_small.png deleted file mode 100644 index b67b83c99..000000000 Binary files a/icons/graphs_small.png and /dev/null differ diff --git a/icons/hull_big.png b/icons/hull_big.png deleted file mode 100644 index 7755d2feb..000000000 Binary files a/icons/hull_big.png and /dev/null differ diff --git a/icons/implant_small.png b/icons/implant_small.png deleted file mode 100644 index ea05fedbc..000000000 Binary files a/icons/implant_small.png and /dev/null differ diff --git a/icons/kinetic_big.png b/icons/kinetic_big.png deleted file mode 100644 index 73d1c9bb7..000000000 Binary files a/icons/kinetic_big.png and /dev/null differ diff --git a/icons/kinetic_small.png b/icons/kinetic_small.png deleted file mode 100644 index 7b9f44df6..000000000 Binary files a/icons/kinetic_small.png and /dev/null differ diff --git a/icons/lvl0.png b/icons/lvl0.png deleted file mode 100644 index 7c60aa2e3..000000000 Binary files a/icons/lvl0.png and /dev/null differ diff --git a/icons/lvl1.png b/icons/lvl1.png deleted file mode 100644 index 046a88dfa..000000000 Binary files a/icons/lvl1.png and /dev/null differ diff --git a/icons/lvl2.png b/icons/lvl2.png deleted file mode 100644 index 90c566ea6..000000000 Binary files a/icons/lvl2.png and /dev/null differ diff --git a/icons/lvl3.png b/icons/lvl3.png deleted file mode 100644 index 281f1be9f..000000000 Binary files a/icons/lvl3.png and /dev/null differ diff --git a/icons/lvl4.png b/icons/lvl4.png deleted file mode 100644 index 215e7cd3d..000000000 Binary files a/icons/lvl4.png and /dev/null differ diff --git a/icons/lvl5.png b/icons/lvl5.png deleted file mode 100644 index 7c38c0d37..000000000 Binary files a/icons/lvl5.png and /dev/null differ diff --git a/icons/market_small.png b/icons/market_small.png deleted file mode 100644 index 2f8619fd3..000000000 Binary files a/icons/market_small.png and /dev/null differ diff --git a/icons/mining_small.png b/icons/mining_small.png deleted file mode 100644 index 78357a000..000000000 Binary files a/icons/mining_small.png and /dev/null differ diff --git a/icons/pg_big.png b/icons/pg_big.png deleted file mode 100644 index b3d3702b1..000000000 Binary files a/icons/pg_big.png and /dev/null differ diff --git a/icons/pg_small.png b/icons/pg_small.png deleted file mode 100644 index 188480cb6..000000000 Binary files a/icons/pg_small.png and /dev/null differ diff --git a/icons/preferences_small.png b/icons/preferences_small.png deleted file mode 100644 index ac3419887..000000000 Binary files a/icons/preferences_small.png and /dev/null differ diff --git a/icons/prefs_html.png b/icons/prefs_html.png deleted file mode 100644 index d86548cd5..000000000 Binary files a/icons/prefs_html.png and /dev/null differ diff --git a/icons/prefs_proxy.png b/icons/prefs_proxy.png deleted file mode 100644 index e54b67685..000000000 Binary files a/icons/prefs_proxy.png and /dev/null differ diff --git a/icons/prefs_settings.png b/icons/prefs_settings.png deleted file mode 100644 index 2a1e72744..000000000 Binary files a/icons/prefs_settings.png and /dev/null differ diff --git a/icons/prefs_update.png b/icons/prefs_update.png deleted file mode 100644 index c1ab75d3b..000000000 Binary files a/icons/prefs_update.png and /dev/null differ diff --git a/icons/projected_small.png b/icons/projected_small.png deleted file mode 100644 index aaed5de17..000000000 Binary files a/icons/projected_small.png and /dev/null differ diff --git a/icons/race_amarr_small.png b/icons/race_amarr_small.png deleted file mode 100644 index 7c8626a8e..000000000 Binary files a/icons/race_amarr_small.png and /dev/null differ diff --git a/icons/race_angel_small.png b/icons/race_angel_small.png deleted file mode 100644 index 761a9b23e..000000000 Binary files a/icons/race_angel_small.png and /dev/null differ diff --git a/icons/race_blood_small.png b/icons/race_blood_small.png deleted file mode 100644 index 187cf22f1..000000000 Binary files a/icons/race_blood_small.png and /dev/null differ diff --git a/icons/race_caldari_small.png b/icons/race_caldari_small.png deleted file mode 100644 index a35a5328a..000000000 Binary files a/icons/race_caldari_small.png and /dev/null differ diff --git a/icons/race_gallente_small.png b/icons/race_gallente_small.png deleted file mode 100644 index ee62d79b4..000000000 Binary files a/icons/race_gallente_small.png and /dev/null differ diff --git a/icons/race_guristas_small.png b/icons/race_guristas_small.png deleted file mode 100644 index 2645e4fcf..000000000 Binary files a/icons/race_guristas_small.png and /dev/null differ diff --git a/icons/race_jove_small.png b/icons/race_jove_small.png deleted file mode 100644 index f518ea2ab..000000000 Binary files a/icons/race_jove_small.png and /dev/null differ diff --git a/icons/race_minmatar_small.png b/icons/race_minmatar_small.png deleted file mode 100644 index 56c17d248..000000000 Binary files a/icons/race_minmatar_small.png and /dev/null differ diff --git a/icons/race_mordu_small.png b/icons/race_mordu_small.png deleted file mode 100644 index 6804d7660..000000000 Binary files a/icons/race_mordu_small.png and /dev/null differ diff --git a/icons/race_ore_small.png b/icons/race_ore_small.png deleted file mode 100644 index 7f7099d9f..000000000 Binary files a/icons/race_ore_small.png and /dev/null differ diff --git a/icons/race_sansha_small.png b/icons/race_sansha_small.png deleted file mode 100644 index b470fe771..000000000 Binary files a/icons/race_sansha_small.png and /dev/null differ diff --git a/icons/race_serpentis_small.png b/icons/race_serpentis_small.png deleted file mode 100644 index f8eecfef7..000000000 Binary files a/icons/race_serpentis_small.png and /dev/null differ diff --git a/icons/refresh.png b/icons/refresh.png deleted file mode 100644 index 0de26566d..000000000 Binary files a/icons/refresh.png and /dev/null differ diff --git a/icons/regenReinforced_big.png b/icons/regenReinforced_big.png deleted file mode 100644 index dcfca8f3a..000000000 Binary files a/icons/regenReinforced_big.png and /dev/null differ diff --git a/icons/rename.png b/icons/rename.png deleted file mode 100644 index 8ed291164..000000000 Binary files a/icons/rename.png and /dev/null differ diff --git a/icons/shieldPassive_big.png b/icons/shieldPassive_big.png deleted file mode 100644 index 8d648a689..000000000 Binary files a/icons/shieldPassive_big.png and /dev/null differ diff --git a/icons/shield_big.png b/icons/shield_big.png deleted file mode 100644 index 023c325e3..000000000 Binary files a/icons/shield_big.png and /dev/null differ diff --git a/icons/ship_small.png b/icons/ship_small.png deleted file mode 100644 index bff4817d0..000000000 Binary files a/icons/ship_small.png and /dev/null differ diff --git a/icons/skillGreen_big.png b/icons/skillGreen_big.png deleted file mode 100644 index e915bb47f..000000000 Binary files a/icons/skillGreen_big.png and /dev/null differ diff --git a/icons/skillRed_big.png b/icons/skillRed_big.png deleted file mode 100644 index 31b7f8ca6..000000000 Binary files a/icons/skillRed_big.png and /dev/null differ diff --git a/icons/skill_small.png b/icons/skill_small.png deleted file mode 100644 index 9d4d4d4eb..000000000 Binary files a/icons/skill_small.png and /dev/null differ diff --git a/icons/slot_high_small.png b/icons/slot_high_small.png deleted file mode 100644 index 40e4e6bee..000000000 Binary files a/icons/slot_high_small.png and /dev/null differ diff --git a/icons/slot_low_small.png b/icons/slot_low_small.png deleted file mode 100644 index 289465a25..000000000 Binary files a/icons/slot_low_small.png and /dev/null differ diff --git a/icons/slot_med_small.png b/icons/slot_med_small.png deleted file mode 100644 index 543f11b9f..000000000 Binary files a/icons/slot_med_small.png and /dev/null differ diff --git a/icons/slot_rig_small.png b/icons/slot_rig_small.png deleted file mode 100644 index c60152fb4..000000000 Binary files a/icons/slot_rig_small.png and /dev/null differ diff --git a/icons/slot_subsystem_small.png b/icons/slot_subsystem_small.png deleted file mode 100644 index 844e9ec37..000000000 Binary files a/icons/slot_subsystem_small.png and /dev/null differ diff --git a/icons/state_active_small.png b/icons/state_active_small.png deleted file mode 100644 index e02c02c34..000000000 Binary files a/icons/state_active_small.png and /dev/null differ diff --git a/icons/state_offline_small.png b/icons/state_offline_small.png deleted file mode 100644 index e9fbfb61a..000000000 Binary files a/icons/state_offline_small.png and /dev/null differ diff --git a/icons/state_online_small.png b/icons/state_online_small.png deleted file mode 100644 index b2e2c6969..000000000 Binary files a/icons/state_online_small.png and /dev/null differ diff --git a/icons/state_overheated_small.png b/icons/state_overheated_small.png deleted file mode 100644 index 586d90648..000000000 Binary files a/icons/state_overheated_small.png and /dev/null differ diff --git a/icons/thermal_big.png b/icons/thermal_big.png deleted file mode 100644 index ba93d261f..000000000 Binary files a/icons/thermal_big.png and /dev/null differ diff --git a/icons/thermal_small.png b/icons/thermal_small.png deleted file mode 100644 index 586d90648..000000000 Binary files a/icons/thermal_small.png and /dev/null differ diff --git a/icons/totalPrice_small.png b/icons/totalPrice_small.png deleted file mode 100644 index a775e7a01..000000000 Binary files a/icons/totalPrice_small.png and /dev/null differ diff --git a/icons/transparent16x16.png b/icons/transparent16x16.png deleted file mode 100644 index 7064b9436..000000000 Binary files a/icons/transparent16x16.png and /dev/null differ diff --git a/icons/up-arrow2.png b/icons/up-arrow2.png deleted file mode 100644 index 4388dce75..000000000 Binary files a/icons/up-arrow2.png and /dev/null differ diff --git a/icons/volley_big.png b/icons/volley_big.png deleted file mode 100644 index 04367a5e2..000000000 Binary files a/icons/volley_big.png and /dev/null differ diff --git a/imgs/gui/add_small.png b/imgs/gui/add_small.png new file mode 100644 index 000000000..a0670dd5a Binary files /dev/null and b/imgs/gui/add_small.png differ diff --git a/imgs/gui/armorActive_big.png b/imgs/gui/armorActive_big.png new file mode 100644 index 000000000..fb93f68fc Binary files /dev/null and b/imgs/gui/armorActive_big.png differ diff --git a/imgs/gui/armor_big.png b/imgs/gui/armor_big.png new file mode 100644 index 000000000..93b2fcbad Binary files /dev/null and b/imgs/gui/armor_big.png differ diff --git a/imgs/gui/booster_small.png b/imgs/gui/booster_small.png new file mode 100644 index 000000000..d2183eaa2 Binary files /dev/null and b/imgs/gui/booster_small.png differ diff --git a/imgs/gui/calibration_big.png b/imgs/gui/calibration_big.png new file mode 100644 index 000000000..25597f20f Binary files /dev/null and b/imgs/gui/calibration_big.png differ diff --git a/imgs/gui/capacitorInfo_big.png b/imgs/gui/capacitorInfo_big.png new file mode 100644 index 000000000..8d1d7c7c4 Binary files /dev/null and b/imgs/gui/capacitorInfo_big.png differ diff --git a/imgs/gui/capacitorRecharge_big.png b/imgs/gui/capacitorRecharge_big.png new file mode 100644 index 000000000..fe0fb8f6c Binary files /dev/null and b/imgs/gui/capacitorRecharge_big.png differ diff --git a/imgs/gui/capacitorRecharge_small.png b/imgs/gui/capacitorRecharge_small.png new file mode 100644 index 000000000..b03215b67 Binary files /dev/null and b/imgs/gui/capacitorRecharge_small.png differ diff --git a/imgs/gui/cargoBay_big.png b/imgs/gui/cargoBay_big.png new file mode 100644 index 000000000..3ecce1af9 Binary files /dev/null and b/imgs/gui/cargoBay_big.png differ diff --git a/imgs/gui/cargo_small.png b/imgs/gui/cargo_small.png new file mode 100644 index 000000000..c448561f2 Binary files /dev/null and b/imgs/gui/cargo_small.png differ diff --git a/icons/character_big.png b/imgs/gui/character_big.png similarity index 75% rename from icons/character_big.png rename to imgs/gui/character_big.png index c15f446c3..67aa53d94 100644 Binary files a/icons/character_big.png and b/imgs/gui/character_big.png differ diff --git a/imgs/gui/character_small.png b/imgs/gui/character_small.png new file mode 100644 index 000000000..26f6d9f01 Binary files /dev/null and b/imgs/gui/character_small.png differ diff --git a/imgs/gui/column_misc.png b/imgs/gui/column_misc.png new file mode 100644 index 000000000..7c0c80c90 Binary files /dev/null and b/imgs/gui/column_misc.png differ diff --git a/icons/cpu_big.png b/imgs/gui/cpu_big.png similarity index 74% rename from icons/cpu_big.png rename to imgs/gui/cpu_big.png index 060c03169..f142336e7 100644 Binary files a/icons/cpu_big.png and b/imgs/gui/cpu_big.png differ diff --git a/imgs/gui/ctabadd.png b/imgs/gui/ctabadd.png new file mode 100644 index 000000000..3e91d3c6c Binary files /dev/null and b/imgs/gui/ctabadd.png differ diff --git a/imgs/gui/ctabclose.png b/imgs/gui/ctabclose.png new file mode 100644 index 000000000..7a1d26e87 Binary files /dev/null and b/imgs/gui/ctabclose.png differ diff --git a/imgs/gui/ctableft.png b/imgs/gui/ctableft.png new file mode 100644 index 000000000..5247771b9 Binary files /dev/null and b/imgs/gui/ctableft.png differ diff --git a/imgs/gui/ctabmiddle.png b/imgs/gui/ctabmiddle.png new file mode 100644 index 000000000..4e43e0614 Binary files /dev/null and b/imgs/gui/ctabmiddle.png differ diff --git a/imgs/gui/ctabright.png b/imgs/gui/ctabright.png new file mode 100644 index 000000000..a05328b1c Binary files /dev/null and b/imgs/gui/ctabright.png differ diff --git a/icons/damagePattern_big.png b/imgs/gui/damagePattern_big.png similarity index 81% rename from icons/damagePattern_big.png rename to imgs/gui/damagePattern_big.png index b72b55459..2fb81170c 100644 Binary files a/icons/damagePattern_big.png and b/imgs/gui/damagePattern_big.png differ diff --git a/imgs/gui/damagePattern_small.png b/imgs/gui/damagePattern_small.png new file mode 100644 index 000000000..7a5490b62 Binary files /dev/null and b/imgs/gui/damagePattern_small.png differ diff --git a/imgs/gui/down-arrow2.png b/imgs/gui/down-arrow2.png new file mode 100644 index 000000000..ded2fc273 Binary files /dev/null and b/imgs/gui/down-arrow2.png differ diff --git a/icons/droneBandwidth_big.png b/imgs/gui/droneBandwidth_big.png similarity index 68% rename from icons/droneBandwidth_big.png rename to imgs/gui/droneBandwidth_big.png index 6ad91bc48..58d54748a 100644 Binary files a/icons/droneBandwidth_big.png and b/imgs/gui/droneBandwidth_big.png differ diff --git a/imgs/gui/droneBandwidth_small.png b/imgs/gui/droneBandwidth_small.png new file mode 100644 index 000000000..8fc515e77 Binary files /dev/null and b/imgs/gui/droneBandwidth_small.png differ diff --git a/icons/droneBay_big.png b/imgs/gui/droneBay_big.png similarity index 83% rename from icons/droneBay_big.png rename to imgs/gui/droneBay_big.png index f6d013ba8..b464e5d55 100644 Binary files a/icons/droneBay_big.png and b/imgs/gui/droneBay_big.png differ diff --git a/icons/droneDPS_big.png b/imgs/gui/droneDPS_big.png similarity index 69% rename from icons/droneDPS_big.png rename to imgs/gui/droneDPS_big.png index 318991a63..45f20e3ea 100644 Binary files a/icons/droneDPS_big.png and b/imgs/gui/droneDPS_big.png differ diff --git a/imgs/gui/drone_small.png b/imgs/gui/drone_small.png new file mode 100644 index 000000000..2b04ce3c7 Binary files /dev/null and b/imgs/gui/drone_small.png differ diff --git a/icons/drones_big.png b/imgs/gui/drones_big.png similarity index 81% rename from icons/drones_big.png rename to imgs/gui/drones_big.png index 433bdc412..ae2c3e552 100644 Binary files a/icons/drones_big.png and b/imgs/gui/drones_big.png differ diff --git a/imgs/gui/em_big.png b/imgs/gui/em_big.png new file mode 100644 index 000000000..ef3988f4b Binary files /dev/null and b/imgs/gui/em_big.png differ diff --git a/imgs/gui/em_small.png b/imgs/gui/em_small.png new file mode 100644 index 000000000..b533dd215 Binary files /dev/null and b/imgs/gui/em_small.png differ diff --git a/imgs/gui/eve.png b/imgs/gui/eve.png new file mode 100644 index 000000000..07bb38363 Binary files /dev/null and b/imgs/gui/eve.png differ diff --git a/imgs/gui/explosive_big.png b/imgs/gui/explosive_big.png new file mode 100644 index 000000000..b7ce49f09 Binary files /dev/null and b/imgs/gui/explosive_big.png differ diff --git a/imgs/gui/explosive_small.png b/imgs/gui/explosive_small.png new file mode 100644 index 000000000..aabfc57e0 Binary files /dev/null and b/imgs/gui/explosive_small.png differ diff --git a/imgs/gui/faccept_small.png b/imgs/gui/faccept_small.png new file mode 100644 index 000000000..5521f74fd Binary files /dev/null and b/imgs/gui/faccept_small.png differ diff --git a/imgs/gui/fforward_small.png b/imgs/gui/fforward_small.png new file mode 100644 index 000000000..350583030 Binary files /dev/null and b/imgs/gui/fforward_small.png differ diff --git a/imgs/gui/fit_add_small.png b/imgs/gui/fit_add_small.png new file mode 100644 index 000000000..78f659d20 Binary files /dev/null and b/imgs/gui/fit_add_small.png differ diff --git a/imgs/gui/fit_delete_small.png b/imgs/gui/fit_delete_small.png new file mode 100644 index 000000000..bd21c1d64 Binary files /dev/null and b/imgs/gui/fit_delete_small.png differ diff --git a/icons/fit_loading.gif b/imgs/gui/fit_loading.gif similarity index 100% rename from icons/fit_loading.gif rename to imgs/gui/fit_loading.gif diff --git a/imgs/gui/fit_rename_small.png b/imgs/gui/fit_rename_small.png new file mode 100644 index 000000000..954e2aff9 Binary files /dev/null and b/imgs/gui/fit_rename_small.png differ diff --git a/imgs/gui/fit_small.png b/imgs/gui/fit_small.png new file mode 100644 index 000000000..3ce6c0add Binary files /dev/null and b/imgs/gui/fit_small.png differ diff --git a/imgs/gui/fit_switch_view_mode_small.png b/imgs/gui/fit_switch_view_mode_small.png new file mode 100644 index 000000000..bd019bc1e Binary files /dev/null and b/imgs/gui/fit_switch_view_mode_small.png differ diff --git a/icons/fittingsPrice_big.png b/imgs/gui/fittingsPrice_big.png similarity index 85% rename from icons/fittingsPrice_big.png rename to imgs/gui/fittingsPrice_big.png index 0cc9cf7d8..aaceb6bcb 100644 Binary files a/icons/fittingsPrice_big.png and b/imgs/gui/fittingsPrice_big.png differ diff --git a/imgs/gui/fleet_fb_small.png b/imgs/gui/fleet_fb_small.png new file mode 100644 index 000000000..f18d6c9f9 Binary files /dev/null and b/imgs/gui/fleet_fb_small.png differ diff --git a/imgs/gui/fleet_fc_small.png b/imgs/gui/fleet_fc_small.png new file mode 100644 index 000000000..4c94b4a56 Binary files /dev/null and b/imgs/gui/fleet_fc_small.png differ diff --git a/icons/fleet_item_big.png b/imgs/gui/fleet_item_big.png similarity index 66% rename from icons/fleet_item_big.png rename to imgs/gui/fleet_item_big.png index 7b9531e59..0292c46c6 100644 Binary files a/icons/fleet_item_big.png and b/imgs/gui/fleet_item_big.png differ diff --git a/imgs/gui/fleet_sb_small.png b/imgs/gui/fleet_sb_small.png new file mode 100644 index 000000000..7249796f8 Binary files /dev/null and b/imgs/gui/fleet_sb_small.png differ diff --git a/imgs/gui/fleet_sc_small.png b/imgs/gui/fleet_sc_small.png new file mode 100644 index 000000000..964a99772 Binary files /dev/null and b/imgs/gui/fleet_sc_small.png differ diff --git a/imgs/gui/fleet_wb_small.png b/imgs/gui/fleet_wb_small.png new file mode 100644 index 000000000..79be8a8da Binary files /dev/null and b/imgs/gui/fleet_wb_small.png differ diff --git a/imgs/gui/fleet_wc_small.png b/imgs/gui/fleet_wc_small.png new file mode 100644 index 000000000..fdaf73c08 Binary files /dev/null and b/imgs/gui/fleet_wc_small.png differ diff --git a/imgs/gui/freset_small.png b/imgs/gui/freset_small.png new file mode 100644 index 000000000..70eb4e219 Binary files /dev/null and b/imgs/gui/freset_small.png differ diff --git a/imgs/gui/frewind_small.png b/imgs/gui/frewind_small.png new file mode 100644 index 000000000..0b45a62ee Binary files /dev/null and b/imgs/gui/frewind_small.png differ diff --git a/imgs/gui/fsearch_small.png b/imgs/gui/fsearch_small.png new file mode 100644 index 000000000..4a7d1c7c7 Binary files /dev/null and b/imgs/gui/fsearch_small.png differ diff --git a/imgs/gui/fshipbk_big.png b/imgs/gui/fshipbk_big.png new file mode 100644 index 000000000..26ea74c94 Binary files /dev/null and b/imgs/gui/fshipbk_big.png differ diff --git a/imgs/gui/graphs_small.png b/imgs/gui/graphs_small.png new file mode 100644 index 000000000..c4024c491 Binary files /dev/null and b/imgs/gui/graphs_small.png differ diff --git a/icons/hullActive_big.png b/imgs/gui/hullActive_big.png similarity index 80% rename from icons/hullActive_big.png rename to imgs/gui/hullActive_big.png index 9c293473d..48b8dd11e 100644 Binary files a/icons/hullActive_big.png and b/imgs/gui/hullActive_big.png differ diff --git a/imgs/gui/hull_big.png b/imgs/gui/hull_big.png new file mode 100644 index 000000000..1934f060f Binary files /dev/null and b/imgs/gui/hull_big.png differ diff --git a/imgs/gui/implant_small.png b/imgs/gui/implant_small.png new file mode 100644 index 000000000..8c3330ed9 Binary files /dev/null and b/imgs/gui/implant_small.png differ diff --git a/imgs/gui/kinetic_big.png b/imgs/gui/kinetic_big.png new file mode 100644 index 000000000..f39bfa51a Binary files /dev/null and b/imgs/gui/kinetic_big.png differ diff --git a/imgs/gui/kinetic_small.png b/imgs/gui/kinetic_small.png new file mode 100644 index 000000000..32f85c739 Binary files /dev/null and b/imgs/gui/kinetic_small.png differ diff --git a/icons/launcher_big.png b/imgs/gui/launcher_big.png similarity index 80% rename from icons/launcher_big.png rename to imgs/gui/launcher_big.png index 2efc8dc36..f4a810138 100644 Binary files a/icons/launcher_big.png and b/imgs/gui/launcher_big.png differ diff --git a/imgs/gui/lvl0.png b/imgs/gui/lvl0.png new file mode 100644 index 000000000..976b41017 Binary files /dev/null and b/imgs/gui/lvl0.png differ diff --git a/imgs/gui/lvl1.png b/imgs/gui/lvl1.png new file mode 100644 index 000000000..a8c5f7629 Binary files /dev/null and b/imgs/gui/lvl1.png differ diff --git a/imgs/gui/lvl2.png b/imgs/gui/lvl2.png new file mode 100644 index 000000000..9191e1f1f Binary files /dev/null and b/imgs/gui/lvl2.png differ diff --git a/imgs/gui/lvl3.png b/imgs/gui/lvl3.png new file mode 100644 index 000000000..d4c8a2cb5 Binary files /dev/null and b/imgs/gui/lvl3.png differ diff --git a/imgs/gui/lvl4.png b/imgs/gui/lvl4.png new file mode 100644 index 000000000..c7c0c445b Binary files /dev/null and b/imgs/gui/lvl4.png differ diff --git a/imgs/gui/lvl5.png b/imgs/gui/lvl5.png new file mode 100644 index 000000000..8210dfb9b Binary files /dev/null and b/imgs/gui/lvl5.png differ diff --git a/icons/market_big.png b/imgs/gui/market_big.png similarity index 65% rename from icons/market_big.png rename to imgs/gui/market_big.png index a834a7c5b..f8e1f7510 100644 Binary files a/icons/market_big.png and b/imgs/gui/market_big.png differ diff --git a/imgs/gui/market_small.png b/imgs/gui/market_small.png new file mode 100644 index 000000000..e6c8e8214 Binary files /dev/null and b/imgs/gui/market_small.png differ diff --git a/icons/mining_big.png b/imgs/gui/mining_big.png similarity index 74% rename from icons/mining_big.png rename to imgs/gui/mining_big.png index 38d2da081..85aeba380 100644 Binary files a/icons/mining_big.png and b/imgs/gui/mining_big.png differ diff --git a/imgs/gui/mining_small.png b/imgs/gui/mining_small.png new file mode 100644 index 000000000..b9dc1552a Binary files /dev/null and b/imgs/gui/mining_small.png differ diff --git a/imgs/gui/pg_big.png b/imgs/gui/pg_big.png new file mode 100644 index 000000000..baeedc968 Binary files /dev/null and b/imgs/gui/pg_big.png differ diff --git a/imgs/gui/pg_small.png b/imgs/gui/pg_small.png new file mode 100644 index 000000000..c505cdcaf Binary files /dev/null and b/imgs/gui/pg_small.png differ diff --git a/icons/pref-gauges_big.png b/imgs/gui/pref-gauges_big.png similarity index 89% rename from icons/pref-gauges_big.png rename to imgs/gui/pref-gauges_big.png index d8225410f..4e62df7d4 100644 Binary files a/icons/pref-gauges_big.png and b/imgs/gui/pref-gauges_big.png differ diff --git a/imgs/gui/preferences_small.png b/imgs/gui/preferences_small.png new file mode 100644 index 000000000..1e534ab18 Binary files /dev/null and b/imgs/gui/preferences_small.png differ diff --git a/imgs/gui/prefs_html.png b/imgs/gui/prefs_html.png new file mode 100644 index 000000000..bb6aec47b Binary files /dev/null and b/imgs/gui/prefs_html.png differ diff --git a/imgs/gui/prefs_proxy.png b/imgs/gui/prefs_proxy.png new file mode 100644 index 000000000..008d0f548 Binary files /dev/null and b/imgs/gui/prefs_proxy.png differ diff --git a/imgs/gui/prefs_settings.png b/imgs/gui/prefs_settings.png new file mode 100644 index 000000000..639987e5b Binary files /dev/null and b/imgs/gui/prefs_settings.png differ diff --git a/imgs/gui/prefs_update.png b/imgs/gui/prefs_update.png new file mode 100644 index 000000000..960ffab92 Binary files /dev/null and b/imgs/gui/prefs_update.png differ diff --git a/imgs/gui/projected_small.png b/imgs/gui/projected_small.png new file mode 100644 index 000000000..632b6f983 Binary files /dev/null and b/imgs/gui/projected_small.png differ diff --git a/icons/pyfa.png b/imgs/gui/pyfa.png similarity index 93% rename from icons/pyfa.png rename to imgs/gui/pyfa.png index 80c6895eb..8b51a41b8 100644 Binary files a/icons/pyfa.png and b/imgs/gui/pyfa.png differ diff --git a/icons/pyfa64.png b/imgs/gui/pyfa64.png similarity index 97% rename from icons/pyfa64.png rename to imgs/gui/pyfa64.png index 75adffcbf..8dae9bd1e 100644 Binary files a/icons/pyfa64.png and b/imgs/gui/pyfa64.png differ diff --git a/imgs/gui/race_amarr_small.png b/imgs/gui/race_amarr_small.png new file mode 100644 index 000000000..392b86279 Binary files /dev/null and b/imgs/gui/race_amarr_small.png differ diff --git a/imgs/gui/race_angel_small.png b/imgs/gui/race_angel_small.png new file mode 100644 index 000000000..50ef11d49 Binary files /dev/null and b/imgs/gui/race_angel_small.png differ diff --git a/imgs/gui/race_blood_small.png b/imgs/gui/race_blood_small.png new file mode 100644 index 000000000..d50b02a18 Binary files /dev/null and b/imgs/gui/race_blood_small.png differ diff --git a/imgs/gui/race_caldari_small.png b/imgs/gui/race_caldari_small.png new file mode 100644 index 000000000..6a8f2a5dc Binary files /dev/null and b/imgs/gui/race_caldari_small.png differ diff --git a/imgs/gui/race_gallente_small.png b/imgs/gui/race_gallente_small.png new file mode 100644 index 000000000..b7acf25dd Binary files /dev/null and b/imgs/gui/race_gallente_small.png differ diff --git a/imgs/gui/race_guristas_small.png b/imgs/gui/race_guristas_small.png new file mode 100644 index 000000000..fb9dbe7cd Binary files /dev/null and b/imgs/gui/race_guristas_small.png differ diff --git a/imgs/gui/race_jove_small.png b/imgs/gui/race_jove_small.png new file mode 100644 index 000000000..00f1516ad Binary files /dev/null and b/imgs/gui/race_jove_small.png differ diff --git a/imgs/gui/race_minmatar_small.png b/imgs/gui/race_minmatar_small.png new file mode 100644 index 000000000..47eb96307 Binary files /dev/null and b/imgs/gui/race_minmatar_small.png differ diff --git a/imgs/gui/race_mordu_small.png b/imgs/gui/race_mordu_small.png new file mode 100644 index 000000000..361309715 Binary files /dev/null and b/imgs/gui/race_mordu_small.png differ diff --git a/imgs/gui/race_ore_small.png b/imgs/gui/race_ore_small.png new file mode 100644 index 000000000..d207c3e4c Binary files /dev/null and b/imgs/gui/race_ore_small.png differ diff --git a/imgs/gui/race_sansha_small.png b/imgs/gui/race_sansha_small.png new file mode 100644 index 000000000..73518f45a Binary files /dev/null and b/imgs/gui/race_sansha_small.png differ diff --git a/imgs/gui/race_serpentis_small.png b/imgs/gui/race_serpentis_small.png new file mode 100644 index 000000000..1df612d01 Binary files /dev/null and b/imgs/gui/race_serpentis_small.png differ diff --git a/icons/race_sisters_small.png b/imgs/gui/race_sisters_small.png similarity index 54% rename from icons/race_sisters_small.png rename to imgs/gui/race_sisters_small.png index 58e92c264..f3a269a0e 100644 Binary files a/icons/race_sisters_small.png and b/imgs/gui/race_sisters_small.png differ diff --git a/imgs/gui/refresh.png b/imgs/gui/refresh.png new file mode 100644 index 000000000..fe4d70f92 Binary files /dev/null and b/imgs/gui/refresh.png differ diff --git a/icons/refresh_small.png b/imgs/gui/refresh_small.png similarity index 100% rename from icons/refresh_small.png rename to imgs/gui/refresh_small.png diff --git a/imgs/gui/regenReinforced_big.png b/imgs/gui/regenReinforced_big.png new file mode 100644 index 000000000..dd333455c Binary files /dev/null and b/imgs/gui/regenReinforced_big.png differ diff --git a/icons/regenSustained_big.png b/imgs/gui/regenSustained_big.png similarity index 72% rename from icons/regenSustained_big.png rename to imgs/gui/regenSustained_big.png index fea23212c..0d0aa59d9 100644 Binary files a/icons/regenSustained_big.png and b/imgs/gui/regenSustained_big.png differ diff --git a/imgs/gui/rename.png b/imgs/gui/rename.png new file mode 100644 index 000000000..43d386c45 Binary files /dev/null and b/imgs/gui/rename.png differ diff --git a/icons/shieldActive_big.png b/imgs/gui/shieldActive_big.png similarity index 81% rename from icons/shieldActive_big.png rename to imgs/gui/shieldActive_big.png index 386cdd0c5..e3c1d832f 100644 Binary files a/icons/shieldActive_big.png and b/imgs/gui/shieldActive_big.png differ diff --git a/imgs/gui/shieldPassive_big.png b/imgs/gui/shieldPassive_big.png new file mode 100644 index 000000000..2cb63ed6b Binary files /dev/null and b/imgs/gui/shieldPassive_big.png differ diff --git a/imgs/gui/shield_big.png b/imgs/gui/shield_big.png new file mode 100644 index 000000000..e70eef5fe Binary files /dev/null and b/imgs/gui/shield_big.png differ diff --git a/icons/ship_big.png b/imgs/gui/ship_big.png similarity index 78% rename from icons/ship_big.png rename to imgs/gui/ship_big.png index f38b3b1df..782774d1b 100644 Binary files a/icons/ship_big.png and b/imgs/gui/ship_big.png differ diff --git a/icons/ship_no_image_big.png b/imgs/gui/ship_no_image_big.png similarity index 86% rename from icons/ship_no_image_big.png rename to imgs/gui/ship_no_image_big.png index 3d96be506..dce1b7491 100644 Binary files a/icons/ship_no_image_big.png and b/imgs/gui/ship_no_image_big.png differ diff --git a/imgs/gui/ship_small.png b/imgs/gui/ship_small.png new file mode 100644 index 000000000..b29bd3cba Binary files /dev/null and b/imgs/gui/ship_small.png differ diff --git a/imgs/gui/skillGreen_big.png b/imgs/gui/skillGreen_big.png new file mode 100644 index 000000000..23ebccd04 Binary files /dev/null and b/imgs/gui/skillGreen_big.png differ diff --git a/imgs/gui/skillRed_big.png b/imgs/gui/skillRed_big.png new file mode 100644 index 000000000..a33c7c43c Binary files /dev/null and b/imgs/gui/skillRed_big.png differ diff --git a/icons/skill_big.png b/imgs/gui/skill_big.png similarity index 60% rename from icons/skill_big.png rename to imgs/gui/skill_big.png index fe5f37055..86e0e703b 100644 Binary files a/icons/skill_big.png and b/imgs/gui/skill_big.png differ diff --git a/imgs/gui/skill_small.png b/imgs/gui/skill_small.png new file mode 100644 index 000000000..1b69c28ff Binary files /dev/null and b/imgs/gui/skill_small.png differ diff --git a/imgs/gui/slot_high_small.png b/imgs/gui/slot_high_small.png new file mode 100644 index 000000000..6b86b11ac Binary files /dev/null and b/imgs/gui/slot_high_small.png differ diff --git a/imgs/gui/slot_low_small.png b/imgs/gui/slot_low_small.png new file mode 100644 index 000000000..7a010bd24 Binary files /dev/null and b/imgs/gui/slot_low_small.png differ diff --git a/imgs/gui/slot_med_small.png b/imgs/gui/slot_med_small.png new file mode 100644 index 000000000..4404938b1 Binary files /dev/null and b/imgs/gui/slot_med_small.png differ diff --git a/imgs/gui/slot_rig_small.png b/imgs/gui/slot_rig_small.png new file mode 100644 index 000000000..dd59f3f27 Binary files /dev/null and b/imgs/gui/slot_rig_small.png differ diff --git a/imgs/gui/slot_subsystem_small.png b/imgs/gui/slot_subsystem_small.png new file mode 100644 index 000000000..be828efd0 Binary files /dev/null and b/imgs/gui/slot_subsystem_small.png differ diff --git a/imgs/gui/state_active_small.png b/imgs/gui/state_active_small.png new file mode 100644 index 000000000..349677fd5 Binary files /dev/null and b/imgs/gui/state_active_small.png differ diff --git a/imgs/gui/state_offline_small.png b/imgs/gui/state_offline_small.png new file mode 100644 index 000000000..bba9fc33f Binary files /dev/null and b/imgs/gui/state_offline_small.png differ diff --git a/imgs/gui/state_online_small.png b/imgs/gui/state_online_small.png new file mode 100644 index 000000000..9e4a303d0 Binary files /dev/null and b/imgs/gui/state_online_small.png differ diff --git a/imgs/gui/state_overheated_small.png b/imgs/gui/state_overheated_small.png new file mode 100644 index 000000000..7dafd5fc6 Binary files /dev/null and b/imgs/gui/state_overheated_small.png differ diff --git a/imgs/gui/thermal_big.png b/imgs/gui/thermal_big.png new file mode 100644 index 000000000..31fd8e7e9 Binary files /dev/null and b/imgs/gui/thermal_big.png differ diff --git a/imgs/gui/thermal_small.png b/imgs/gui/thermal_small.png new file mode 100644 index 000000000..1365148a6 Binary files /dev/null and b/imgs/gui/thermal_small.png differ diff --git a/icons/totalPrice_big.png b/imgs/gui/totalPrice_big.png similarity index 81% rename from icons/totalPrice_big.png rename to imgs/gui/totalPrice_big.png index d5c397533..35a75db73 100644 Binary files a/icons/totalPrice_big.png and b/imgs/gui/totalPrice_big.png differ diff --git a/imgs/gui/totalPrice_small.png b/imgs/gui/totalPrice_small.png new file mode 100644 index 000000000..08f5e5176 Binary files /dev/null and b/imgs/gui/totalPrice_small.png differ diff --git a/imgs/gui/transparent16x16.png b/imgs/gui/transparent16x16.png new file mode 100644 index 000000000..21855ba41 Binary files /dev/null and b/imgs/gui/transparent16x16.png differ diff --git a/icons/turret_big.png b/imgs/gui/turret_big.png similarity index 80% rename from icons/turret_big.png rename to imgs/gui/turret_big.png index 4ee84e476..e4bf0defa 100644 Binary files a/icons/turret_big.png and b/imgs/gui/turret_big.png differ diff --git a/icons/turret_small.png b/imgs/gui/turret_small.png similarity index 55% rename from icons/turret_small.png rename to imgs/gui/turret_small.png index e9047086b..d902f8e52 100644 Binary files a/icons/turret_small.png and b/imgs/gui/turret_small.png differ diff --git a/imgs/gui/up-arrow2.png b/imgs/gui/up-arrow2.png new file mode 100644 index 000000000..a592502e9 Binary files /dev/null and b/imgs/gui/up-arrow2.png differ diff --git a/imgs/gui/volley_big.png b/imgs/gui/volley_big.png new file mode 100644 index 000000000..19236318a Binary files /dev/null and b/imgs/gui/volley_big.png differ diff --git a/imgs/icons/01_01.png b/imgs/icons/01_01.png new file mode 100644 index 000000000..7c348ac56 Binary files /dev/null and b/imgs/icons/01_01.png differ diff --git a/imgs/icons/01_02.png b/imgs/icons/01_02.png new file mode 100644 index 000000000..735242073 Binary files /dev/null and b/imgs/icons/01_02.png differ diff --git a/imgs/icons/01_03.png b/imgs/icons/01_03.png new file mode 100644 index 000000000..e62454a13 Binary files /dev/null and b/imgs/icons/01_03.png differ diff --git a/imgs/icons/01_04.png b/imgs/icons/01_04.png new file mode 100644 index 000000000..870445345 Binary files /dev/null and b/imgs/icons/01_04.png differ diff --git a/imgs/icons/01_05.png b/imgs/icons/01_05.png new file mode 100644 index 000000000..288aa22d0 Binary files /dev/null and b/imgs/icons/01_05.png differ diff --git a/imgs/icons/01_06.png b/imgs/icons/01_06.png new file mode 100644 index 000000000..690e0b6ae Binary files /dev/null and b/imgs/icons/01_06.png differ diff --git a/imgs/icons/01_07.png b/imgs/icons/01_07.png new file mode 100644 index 000000000..54cc85636 Binary files /dev/null and b/imgs/icons/01_07.png differ diff --git a/staticdata/icons/icon01_08.png b/imgs/icons/01_08.png similarity index 100% rename from staticdata/icons/icon01_08.png rename to imgs/icons/01_08.png diff --git a/imgs/icons/01_09.png b/imgs/icons/01_09.png new file mode 100644 index 000000000..d2c14c39a Binary files /dev/null and b/imgs/icons/01_09.png differ diff --git a/imgs/icons/01_10.png b/imgs/icons/01_10.png new file mode 100644 index 000000000..e87d72457 Binary files /dev/null and b/imgs/icons/01_10.png differ diff --git a/imgs/icons/01_11.png b/imgs/icons/01_11.png new file mode 100644 index 000000000..034c2cc82 Binary files /dev/null and b/imgs/icons/01_11.png differ diff --git a/imgs/icons/01_13.png b/imgs/icons/01_13.png new file mode 100644 index 000000000..6afb6b063 Binary files /dev/null and b/imgs/icons/01_13.png differ diff --git a/imgs/icons/01_15.png b/imgs/icons/01_15.png new file mode 100644 index 000000000..6e3af2a5e Binary files /dev/null and b/imgs/icons/01_15.png differ diff --git a/imgs/icons/01_16.png b/imgs/icons/01_16.png new file mode 100644 index 000000000..f5743acb8 Binary files /dev/null and b/imgs/icons/01_16.png differ diff --git a/imgs/icons/02_02.png b/imgs/icons/02_02.png new file mode 100644 index 000000000..0c7633836 Binary files /dev/null and b/imgs/icons/02_02.png differ diff --git a/imgs/icons/02_03.png b/imgs/icons/02_03.png new file mode 100644 index 000000000..3df4972c9 Binary files /dev/null and b/imgs/icons/02_03.png differ diff --git a/imgs/icons/02_04.png b/imgs/icons/02_04.png new file mode 100644 index 000000000..6a9778d10 Binary files /dev/null and b/imgs/icons/02_04.png differ diff --git a/imgs/icons/02_05.png b/imgs/icons/02_05.png new file mode 100644 index 000000000..240336fb8 Binary files /dev/null and b/imgs/icons/02_05.png differ diff --git a/imgs/icons/02_07.png b/imgs/icons/02_07.png new file mode 100644 index 000000000..f938fb217 Binary files /dev/null and b/imgs/icons/02_07.png differ diff --git a/imgs/icons/02_09.png b/imgs/icons/02_09.png new file mode 100644 index 000000000..716e7b85b Binary files /dev/null and b/imgs/icons/02_09.png differ diff --git a/imgs/icons/02_10.png b/imgs/icons/02_10.png new file mode 100644 index 000000000..8d4817f9a Binary files /dev/null and b/imgs/icons/02_10.png differ diff --git a/staticdata/icons/icon02_11.png b/imgs/icons/02_11.png similarity index 100% rename from staticdata/icons/icon02_11.png rename to imgs/icons/02_11.png diff --git a/imgs/icons/02_12.png b/imgs/icons/02_12.png new file mode 100644 index 000000000..841b94f7b Binary files /dev/null and b/imgs/icons/02_12.png differ diff --git a/imgs/icons/02_14.png b/imgs/icons/02_14.png new file mode 100644 index 000000000..288520496 Binary files /dev/null and b/imgs/icons/02_14.png differ diff --git a/imgs/icons/02_16.png b/imgs/icons/02_16.png new file mode 100644 index 000000000..cb978d190 Binary files /dev/null and b/imgs/icons/02_16.png differ diff --git a/imgs/icons/03_01.png b/imgs/icons/03_01.png new file mode 100644 index 000000000..ba0ebe4bf Binary files /dev/null and b/imgs/icons/03_01.png differ diff --git a/imgs/icons/03_02.png b/imgs/icons/03_02.png new file mode 100644 index 000000000..0cfc86e92 Binary files /dev/null and b/imgs/icons/03_02.png differ diff --git a/imgs/icons/03_04.png b/imgs/icons/03_04.png new file mode 100644 index 000000000..0b00feca5 Binary files /dev/null and b/imgs/icons/03_04.png differ diff --git a/imgs/icons/03_05.png b/imgs/icons/03_05.png new file mode 100644 index 000000000..2dbe0907b Binary files /dev/null and b/imgs/icons/03_05.png differ diff --git a/imgs/icons/03_06.png b/imgs/icons/03_06.png new file mode 100644 index 000000000..da54c1430 Binary files /dev/null and b/imgs/icons/03_06.png differ diff --git a/imgs/icons/03_08.png b/imgs/icons/03_08.png new file mode 100644 index 000000000..055dfbd50 Binary files /dev/null and b/imgs/icons/03_08.png differ diff --git a/imgs/icons/03_09.png b/imgs/icons/03_09.png new file mode 100644 index 000000000..73ea774f5 Binary files /dev/null and b/imgs/icons/03_09.png differ diff --git a/imgs/icons/03_10.png b/imgs/icons/03_10.png new file mode 100644 index 000000000..411edd596 Binary files /dev/null and b/imgs/icons/03_10.png differ diff --git a/imgs/icons/03_11.png b/imgs/icons/03_11.png new file mode 100644 index 000000000..9fa961ac4 Binary files /dev/null and b/imgs/icons/03_11.png differ diff --git a/imgs/icons/03_12.png b/imgs/icons/03_12.png new file mode 100644 index 000000000..9bcb64f51 Binary files /dev/null and b/imgs/icons/03_12.png differ diff --git a/imgs/icons/03_13.png b/imgs/icons/03_13.png new file mode 100644 index 000000000..e224a8d65 Binary files /dev/null and b/imgs/icons/03_13.png differ diff --git a/imgs/icons/04_01.png b/imgs/icons/04_01.png new file mode 100644 index 000000000..9e7cb5063 Binary files /dev/null and b/imgs/icons/04_01.png differ diff --git a/imgs/icons/04_09.png b/imgs/icons/04_09.png new file mode 100644 index 000000000..80670e69a Binary files /dev/null and b/imgs/icons/04_09.png differ diff --git a/imgs/icons/04_10.png b/imgs/icons/04_10.png new file mode 100644 index 000000000..3b13dd4e7 Binary files /dev/null and b/imgs/icons/04_10.png differ diff --git a/imgs/icons/04_11.png b/imgs/icons/04_11.png new file mode 100644 index 000000000..6a3a9e354 Binary files /dev/null and b/imgs/icons/04_11.png differ diff --git a/imgs/icons/04_12.png b/imgs/icons/04_12.png new file mode 100644 index 000000000..8f0e9408b Binary files /dev/null and b/imgs/icons/04_12.png differ diff --git a/imgs/icons/04_13.png b/imgs/icons/04_13.png new file mode 100644 index 000000000..7ede3bdb5 Binary files /dev/null and b/imgs/icons/04_13.png differ diff --git a/imgs/icons/05_01.png b/imgs/icons/05_01.png new file mode 100644 index 000000000..f3770ef64 Binary files /dev/null and b/imgs/icons/05_01.png differ diff --git a/imgs/icons/05_02.png b/imgs/icons/05_02.png new file mode 100644 index 000000000..87acea25f Binary files /dev/null and b/imgs/icons/05_02.png differ diff --git a/imgs/icons/05_07.png b/imgs/icons/05_07.png new file mode 100644 index 000000000..eb835d9f1 Binary files /dev/null and b/imgs/icons/05_07.png differ diff --git a/imgs/icons/05_11.png b/imgs/icons/05_11.png new file mode 100644 index 000000000..f39b27099 Binary files /dev/null and b/imgs/icons/05_11.png differ diff --git a/imgs/icons/05_12.png b/imgs/icons/05_12.png new file mode 100644 index 000000000..767babbb5 Binary files /dev/null and b/imgs/icons/05_12.png differ diff --git a/imgs/icons/05_14.png b/imgs/icons/05_14.png new file mode 100644 index 000000000..8e87fd1e7 Binary files /dev/null and b/imgs/icons/05_14.png differ diff --git a/staticdata/icons/icon07_12.png b/imgs/icons/07_12.png similarity index 100% rename from staticdata/icons/icon07_12.png rename to imgs/icons/07_12.png diff --git a/imgs/icons/07_15.png b/imgs/icons/07_15.png new file mode 100644 index 000000000..8cc35766f Binary files /dev/null and b/imgs/icons/07_15.png differ diff --git a/imgs/icons/08_01.png b/imgs/icons/08_01.png new file mode 100644 index 000000000..95771aa98 Binary files /dev/null and b/imgs/icons/08_01.png differ diff --git a/imgs/icons/08_02.png b/imgs/icons/08_02.png new file mode 100644 index 000000000..906341987 Binary files /dev/null and b/imgs/icons/08_02.png differ diff --git a/imgs/icons/08_03.png b/imgs/icons/08_03.png new file mode 100644 index 000000000..f52a90502 Binary files /dev/null and b/imgs/icons/08_03.png differ diff --git a/imgs/icons/08_04.png b/imgs/icons/08_04.png new file mode 100644 index 000000000..c11a4a9aa Binary files /dev/null and b/imgs/icons/08_04.png differ diff --git a/imgs/icons/08_05.png b/imgs/icons/08_05.png new file mode 100644 index 000000000..3ce54a83b Binary files /dev/null and b/imgs/icons/08_05.png differ diff --git a/imgs/icons/08_06.png b/imgs/icons/08_06.png new file mode 100644 index 000000000..e292bae56 Binary files /dev/null and b/imgs/icons/08_06.png differ diff --git a/imgs/icons/08_07.png b/imgs/icons/08_07.png new file mode 100644 index 000000000..1d05e9565 Binary files /dev/null and b/imgs/icons/08_07.png differ diff --git a/imgs/icons/08_08.png b/imgs/icons/08_08.png new file mode 100644 index 000000000..3c278d0de Binary files /dev/null and b/imgs/icons/08_08.png differ diff --git a/imgs/icons/08_09.png b/imgs/icons/08_09.png new file mode 100644 index 000000000..69367c15a Binary files /dev/null and b/imgs/icons/08_09.png differ diff --git a/imgs/icons/08_10.png b/imgs/icons/08_10.png new file mode 100644 index 000000000..f512f25ca Binary files /dev/null and b/imgs/icons/08_10.png differ diff --git a/imgs/icons/08_11.png b/imgs/icons/08_11.png new file mode 100644 index 000000000..c1b8fdf67 Binary files /dev/null and b/imgs/icons/08_11.png differ diff --git a/imgs/icons/08_12.png b/imgs/icons/08_12.png new file mode 100644 index 000000000..a9b26b265 Binary files /dev/null and b/imgs/icons/08_12.png differ diff --git a/imgs/icons/08_16.png b/imgs/icons/08_16.png new file mode 100644 index 000000000..612826530 Binary files /dev/null and b/imgs/icons/08_16.png differ diff --git a/imgs/icons/09_05.png b/imgs/icons/09_05.png new file mode 100644 index 000000000..42ecec3e4 Binary files /dev/null and b/imgs/icons/09_05.png differ diff --git a/imgs/icons/09_16.png b/imgs/icons/09_16.png new file mode 100644 index 000000000..bbb9fe2d8 Binary files /dev/null and b/imgs/icons/09_16.png differ diff --git a/staticdata/icons/icon105_46.png b/imgs/icons/105_46.png similarity index 100% rename from staticdata/icons/icon105_46.png rename to imgs/icons/105_46.png diff --git a/staticdata/icons/icon105_47.png b/imgs/icons/105_47.png similarity index 100% rename from staticdata/icons/icon105_47.png rename to imgs/icons/105_47.png diff --git a/staticdata/icons/icon105_48.png b/imgs/icons/105_48.png similarity index 100% rename from staticdata/icons/icon105_48.png rename to imgs/icons/105_48.png diff --git a/staticdata/icons/icon105_49.png b/imgs/icons/105_49.png similarity index 100% rename from staticdata/icons/icon105_49.png rename to imgs/icons/105_49.png diff --git a/staticdata/icons/icon107_1.png b/imgs/icons/107_1.png similarity index 100% rename from staticdata/icons/icon107_1.png rename to imgs/icons/107_1.png diff --git a/staticdata/icons/icon107_10.png b/imgs/icons/107_10.png similarity index 100% rename from staticdata/icons/icon107_10.png rename to imgs/icons/107_10.png diff --git a/staticdata/icons/icon107_11.png b/imgs/icons/107_11.png similarity index 100% rename from staticdata/icons/icon107_11.png rename to imgs/icons/107_11.png diff --git a/staticdata/icons/icon107_12.png b/imgs/icons/107_12.png similarity index 100% rename from staticdata/icons/icon107_12.png rename to imgs/icons/107_12.png diff --git a/staticdata/icons/icon107_2.png b/imgs/icons/107_2.png similarity index 100% rename from staticdata/icons/icon107_2.png rename to imgs/icons/107_2.png diff --git a/staticdata/icons/icon107_3.png b/imgs/icons/107_3.png similarity index 100% rename from staticdata/icons/icon107_3.png rename to imgs/icons/107_3.png diff --git a/staticdata/icons/icon107_64_4.png b/imgs/icons/107_64_4.png similarity index 100% rename from staticdata/icons/icon107_64_4.png rename to imgs/icons/107_64_4.png diff --git a/staticdata/icons/icon108_1.png b/imgs/icons/108_1.png similarity index 100% rename from staticdata/icons/icon108_1.png rename to imgs/icons/108_1.png diff --git a/staticdata/icons/icon108_10.png b/imgs/icons/108_10.png similarity index 100% rename from staticdata/icons/icon108_10.png rename to imgs/icons/108_10.png diff --git a/staticdata/icons/icon108_11.png b/imgs/icons/108_11.png similarity index 100% rename from staticdata/icons/icon108_11.png rename to imgs/icons/108_11.png diff --git a/staticdata/icons/icon108_12.png b/imgs/icons/108_12.png similarity index 100% rename from staticdata/icons/icon108_12.png rename to imgs/icons/108_12.png diff --git a/staticdata/icons/icon108_13.png b/imgs/icons/108_13.png similarity index 100% rename from staticdata/icons/icon108_13.png rename to imgs/icons/108_13.png diff --git a/staticdata/icons/icon108_14.png b/imgs/icons/108_14.png similarity index 100% rename from staticdata/icons/icon108_14.png rename to imgs/icons/108_14.png diff --git a/staticdata/icons/icon108_15.png b/imgs/icons/108_15.png similarity index 100% rename from staticdata/icons/icon108_15.png rename to imgs/icons/108_15.png diff --git a/staticdata/icons/icon108_16.png b/imgs/icons/108_16.png similarity index 100% rename from staticdata/icons/icon108_16.png rename to imgs/icons/108_16.png diff --git a/staticdata/icons/icon108_17.png b/imgs/icons/108_17.png similarity index 100% rename from staticdata/icons/icon108_17.png rename to imgs/icons/108_17.png diff --git a/staticdata/icons/icon108_18.png b/imgs/icons/108_18.png similarity index 100% rename from staticdata/icons/icon108_18.png rename to imgs/icons/108_18.png diff --git a/staticdata/icons/icon108_19.png b/imgs/icons/108_19.png similarity index 100% rename from staticdata/icons/icon108_19.png rename to imgs/icons/108_19.png diff --git a/staticdata/icons/icon108_2.png b/imgs/icons/108_2.png similarity index 100% rename from staticdata/icons/icon108_2.png rename to imgs/icons/108_2.png diff --git a/staticdata/icons/icon108_20.png b/imgs/icons/108_20.png similarity index 100% rename from staticdata/icons/icon108_20.png rename to imgs/icons/108_20.png diff --git a/staticdata/icons/icon108_21.png b/imgs/icons/108_21.png similarity index 100% rename from staticdata/icons/icon108_21.png rename to imgs/icons/108_21.png diff --git a/staticdata/icons/icon108_3.png b/imgs/icons/108_3.png similarity index 100% rename from staticdata/icons/icon108_3.png rename to imgs/icons/108_3.png diff --git a/staticdata/icons/icon108_4.png b/imgs/icons/108_4.png similarity index 100% rename from staticdata/icons/icon108_4.png rename to imgs/icons/108_4.png diff --git a/staticdata/icons/icon108_5.png b/imgs/icons/108_5.png similarity index 100% rename from staticdata/icons/icon108_5.png rename to imgs/icons/108_5.png diff --git a/staticdata/icons/icon108_6.png b/imgs/icons/108_6.png similarity index 100% rename from staticdata/icons/icon108_6.png rename to imgs/icons/108_6.png diff --git a/staticdata/icons/icon108_64_22.png b/imgs/icons/108_64_22.png similarity index 100% rename from staticdata/icons/icon108_64_22.png rename to imgs/icons/108_64_22.png diff --git a/staticdata/icons/icon108_7.png b/imgs/icons/108_7.png similarity index 100% rename from staticdata/icons/icon108_7.png rename to imgs/icons/108_7.png diff --git a/staticdata/icons/icon108_8.png b/imgs/icons/108_8.png similarity index 100% rename from staticdata/icons/icon108_8.png rename to imgs/icons/108_8.png diff --git a/staticdata/icons/icon109_64_1.png b/imgs/icons/109_64_1.png similarity index 100% rename from staticdata/icons/icon109_64_1.png rename to imgs/icons/109_64_1.png diff --git a/staticdata/icons/icon109_64_2.png b/imgs/icons/109_64_2.png similarity index 100% rename from staticdata/icons/icon109_64_2.png rename to imgs/icons/109_64_2.png diff --git a/imgs/icons/10_15.png b/imgs/icons/10_15.png new file mode 100644 index 000000000..f8175a48c Binary files /dev/null and b/imgs/icons/10_15.png differ diff --git a/staticdata/icons/icon113_64_1.png b/imgs/icons/113_64_1.png similarity index 100% rename from staticdata/icons/icon113_64_1.png rename to imgs/icons/113_64_1.png diff --git a/staticdata/icons/icon113_64_2.png b/imgs/icons/113_64_2.png similarity index 100% rename from staticdata/icons/icon113_64_2.png rename to imgs/icons/113_64_2.png diff --git a/staticdata/icons/icon113_64_3.png b/imgs/icons/113_64_3.png similarity index 100% rename from staticdata/icons/icon113_64_3.png rename to imgs/icons/113_64_3.png diff --git a/staticdata/icons/icon118_64_7.png b/imgs/icons/118_64_7.png similarity index 100% rename from staticdata/icons/icon118_64_7.png rename to imgs/icons/118_64_7.png diff --git a/staticdata/icons/icon119_1.png b/imgs/icons/119_1.png similarity index 100% rename from staticdata/icons/icon119_1.png rename to imgs/icons/119_1.png diff --git a/imgs/icons/11_04.png b/imgs/icons/11_04.png new file mode 100644 index 000000000..706e67ea4 Binary files /dev/null and b/imgs/icons/11_04.png differ diff --git a/imgs/icons/11_09.png b/imgs/icons/11_09.png new file mode 100644 index 000000000..6c75720b9 Binary files /dev/null and b/imgs/icons/11_09.png differ diff --git a/imgs/icons/11_14.png b/imgs/icons/11_14.png new file mode 100644 index 000000000..75fe75cbb Binary files /dev/null and b/imgs/icons/11_14.png differ diff --git a/imgs/icons/11_16.png b/imgs/icons/11_16.png new file mode 100644 index 000000000..9da4da16b Binary files /dev/null and b/imgs/icons/11_16.png differ diff --git a/imgs/icons/12_04.png b/imgs/icons/12_04.png new file mode 100644 index 000000000..c0df8184c Binary files /dev/null and b/imgs/icons/12_04.png differ diff --git a/imgs/icons/12_06.png b/imgs/icons/12_06.png new file mode 100644 index 000000000..1f2b5ee8d Binary files /dev/null and b/imgs/icons/12_06.png differ diff --git a/imgs/icons/12_07.png b/imgs/icons/12_07.png new file mode 100644 index 000000000..63029ac7e Binary files /dev/null and b/imgs/icons/12_07.png differ diff --git a/imgs/icons/12_08.png b/imgs/icons/12_08.png new file mode 100644 index 000000000..010a1cc80 Binary files /dev/null and b/imgs/icons/12_08.png differ diff --git a/imgs/icons/12_09.png b/imgs/icons/12_09.png new file mode 100644 index 000000000..50ad95864 Binary files /dev/null and b/imgs/icons/12_09.png differ diff --git a/imgs/icons/12_10.png b/imgs/icons/12_10.png new file mode 100644 index 000000000..76ee386bf Binary files /dev/null and b/imgs/icons/12_10.png differ diff --git a/imgs/icons/12_11.png b/imgs/icons/12_11.png new file mode 100644 index 000000000..bdafd77b8 Binary files /dev/null and b/imgs/icons/12_11.png differ diff --git a/imgs/icons/12_12.png b/imgs/icons/12_12.png new file mode 100644 index 000000000..d84b7c331 Binary files /dev/null and b/imgs/icons/12_12.png differ diff --git a/imgs/icons/12_13.png b/imgs/icons/12_13.png new file mode 100644 index 000000000..ed4250afd Binary files /dev/null and b/imgs/icons/12_13.png differ diff --git a/imgs/icons/12_14.png b/imgs/icons/12_14.png new file mode 100644 index 000000000..5a5a3765b Binary files /dev/null and b/imgs/icons/12_14.png differ diff --git a/imgs/icons/12_15.png b/imgs/icons/12_15.png new file mode 100644 index 000000000..cbb20242b Binary files /dev/null and b/imgs/icons/12_15.png differ diff --git a/imgs/icons/12_16.png b/imgs/icons/12_16.png new file mode 100644 index 000000000..b9fe79ded Binary files /dev/null and b/imgs/icons/12_16.png differ diff --git a/staticdata/icons/icon1337_21.png b/imgs/icons/1337_21.png similarity index 100% rename from staticdata/icons/icon1337_21.png rename to imgs/icons/1337_21.png diff --git a/staticdata/icons/icon1337_22.png b/imgs/icons/1337_22.png similarity index 100% rename from staticdata/icons/icon1337_22.png rename to imgs/icons/1337_22.png diff --git a/imgs/icons/13_01.png b/imgs/icons/13_01.png new file mode 100644 index 000000000..891eaeef8 Binary files /dev/null and b/imgs/icons/13_01.png differ diff --git a/imgs/icons/13_02.png b/imgs/icons/13_02.png new file mode 100644 index 000000000..ece9b70d6 Binary files /dev/null and b/imgs/icons/13_02.png differ diff --git a/imgs/icons/13_03.png b/imgs/icons/13_03.png new file mode 100644 index 000000000..4d1696a2d Binary files /dev/null and b/imgs/icons/13_03.png differ diff --git a/imgs/icons/13_04.png b/imgs/icons/13_04.png new file mode 100644 index 000000000..6ce3329c0 Binary files /dev/null and b/imgs/icons/13_04.png differ diff --git a/imgs/icons/13_05.png b/imgs/icons/13_05.png new file mode 100644 index 000000000..ff6d3d345 Binary files /dev/null and b/imgs/icons/13_05.png differ diff --git a/imgs/icons/13_06.png b/imgs/icons/13_06.png new file mode 100644 index 000000000..4685a0c46 Binary files /dev/null and b/imgs/icons/13_06.png differ diff --git a/imgs/icons/13_07.png b/imgs/icons/13_07.png new file mode 100644 index 000000000..f6d7bd795 Binary files /dev/null and b/imgs/icons/13_07.png differ diff --git a/imgs/icons/13_08.png b/imgs/icons/13_08.png new file mode 100644 index 000000000..4f1ae0a95 Binary files /dev/null and b/imgs/icons/13_08.png differ diff --git a/imgs/icons/13_09.png b/imgs/icons/13_09.png new file mode 100644 index 000000000..8009d02ed Binary files /dev/null and b/imgs/icons/13_09.png differ diff --git a/imgs/icons/13_10.png b/imgs/icons/13_10.png new file mode 100644 index 000000000..d9558a229 Binary files /dev/null and b/imgs/icons/13_10.png differ diff --git a/imgs/icons/13_11.png b/imgs/icons/13_11.png new file mode 100644 index 000000000..65e2c404d Binary files /dev/null and b/imgs/icons/13_11.png differ diff --git a/imgs/icons/13_12.png b/imgs/icons/13_12.png new file mode 100644 index 000000000..b7a4833f3 Binary files /dev/null and b/imgs/icons/13_12.png differ diff --git a/imgs/icons/13_13.png b/imgs/icons/13_13.png new file mode 100644 index 000000000..c81e63ead Binary files /dev/null and b/imgs/icons/13_13.png differ diff --git a/imgs/icons/13_14.png b/imgs/icons/13_14.png new file mode 100644 index 000000000..c9d342bae Binary files /dev/null and b/imgs/icons/13_14.png differ diff --git a/imgs/icons/13_15.png b/imgs/icons/13_15.png new file mode 100644 index 000000000..764660bb4 Binary files /dev/null and b/imgs/icons/13_15.png differ diff --git a/imgs/icons/13_16.png b/imgs/icons/13_16.png new file mode 100644 index 000000000..b21adbaea Binary files /dev/null and b/imgs/icons/13_16.png differ diff --git a/imgs/icons/14_01.png b/imgs/icons/14_01.png new file mode 100644 index 000000000..359f8e37f Binary files /dev/null and b/imgs/icons/14_01.png differ diff --git a/imgs/icons/14_02.png b/imgs/icons/14_02.png new file mode 100644 index 000000000..d1e622452 Binary files /dev/null and b/imgs/icons/14_02.png differ diff --git a/imgs/icons/14_03.png b/imgs/icons/14_03.png new file mode 100644 index 000000000..0ad273970 Binary files /dev/null and b/imgs/icons/14_03.png differ diff --git a/imgs/icons/14_04.png b/imgs/icons/14_04.png new file mode 100644 index 000000000..57b814a9b Binary files /dev/null and b/imgs/icons/14_04.png differ diff --git a/imgs/icons/14_05.png b/imgs/icons/14_05.png new file mode 100644 index 000000000..1f7fada49 Binary files /dev/null and b/imgs/icons/14_05.png differ diff --git a/imgs/icons/14_06.png b/imgs/icons/14_06.png new file mode 100644 index 000000000..ce9b4f4f4 Binary files /dev/null and b/imgs/icons/14_06.png differ diff --git a/imgs/icons/14_07.png b/imgs/icons/14_07.png new file mode 100644 index 000000000..bc3a0b5d0 Binary files /dev/null and b/imgs/icons/14_07.png differ diff --git a/imgs/icons/14_08.png b/imgs/icons/14_08.png new file mode 100644 index 000000000..33d8e86a3 Binary files /dev/null and b/imgs/icons/14_08.png differ diff --git a/imgs/icons/14_09.png b/imgs/icons/14_09.png new file mode 100644 index 000000000..e2ec73c6e Binary files /dev/null and b/imgs/icons/14_09.png differ diff --git a/imgs/icons/14_10.png b/imgs/icons/14_10.png new file mode 100644 index 000000000..492189081 Binary files /dev/null and b/imgs/icons/14_10.png differ diff --git a/imgs/icons/14_11.png b/imgs/icons/14_11.png new file mode 100644 index 000000000..d54fb795e Binary files /dev/null and b/imgs/icons/14_11.png differ diff --git a/imgs/icons/14_12.png b/imgs/icons/14_12.png new file mode 100644 index 000000000..6a4c61752 Binary files /dev/null and b/imgs/icons/14_12.png differ diff --git a/imgs/icons/14_13.png b/imgs/icons/14_13.png new file mode 100644 index 000000000..3c3d13ec1 Binary files /dev/null and b/imgs/icons/14_13.png differ diff --git a/imgs/icons/14_14.png b/imgs/icons/14_14.png new file mode 100644 index 000000000..4eb1fcecc Binary files /dev/null and b/imgs/icons/14_14.png differ diff --git a/imgs/icons/14_15.png b/imgs/icons/14_15.png new file mode 100644 index 000000000..b48fb5d14 Binary files /dev/null and b/imgs/icons/14_15.png differ diff --git a/imgs/icons/14_16.png b/imgs/icons/14_16.png new file mode 100644 index 000000000..3699371a0 Binary files /dev/null and b/imgs/icons/14_16.png differ diff --git a/imgs/icons/15_01.png b/imgs/icons/15_01.png new file mode 100644 index 000000000..58d528b6b Binary files /dev/null and b/imgs/icons/15_01.png differ diff --git a/imgs/icons/15_02.png b/imgs/icons/15_02.png new file mode 100644 index 000000000..c9d470e27 Binary files /dev/null and b/imgs/icons/15_02.png differ diff --git a/imgs/icons/15_03.png b/imgs/icons/15_03.png new file mode 100644 index 000000000..c8e96e617 Binary files /dev/null and b/imgs/icons/15_03.png differ diff --git a/imgs/icons/15_04.png b/imgs/icons/15_04.png new file mode 100644 index 000000000..ebfeed68d Binary files /dev/null and b/imgs/icons/15_04.png differ diff --git a/imgs/icons/15_05.png b/imgs/icons/15_05.png new file mode 100644 index 000000000..e5fad83db Binary files /dev/null and b/imgs/icons/15_05.png differ diff --git a/imgs/icons/15_06.png b/imgs/icons/15_06.png new file mode 100644 index 000000000..80b24a916 Binary files /dev/null and b/imgs/icons/15_06.png differ diff --git a/imgs/icons/15_07.png b/imgs/icons/15_07.png new file mode 100644 index 000000000..6e129dd44 Binary files /dev/null and b/imgs/icons/15_07.png differ diff --git a/imgs/icons/15_08.png b/imgs/icons/15_08.png new file mode 100644 index 000000000..55bf0d371 Binary files /dev/null and b/imgs/icons/15_08.png differ diff --git a/imgs/icons/15_09.png b/imgs/icons/15_09.png new file mode 100644 index 000000000..7d91c96c4 Binary files /dev/null and b/imgs/icons/15_09.png differ diff --git a/imgs/icons/15_10.png b/imgs/icons/15_10.png new file mode 100644 index 000000000..bceba86fa Binary files /dev/null and b/imgs/icons/15_10.png differ diff --git a/imgs/icons/15_11.png b/imgs/icons/15_11.png new file mode 100644 index 000000000..cb5c2e33e Binary files /dev/null and b/imgs/icons/15_11.png differ diff --git a/imgs/icons/15_12.png b/imgs/icons/15_12.png new file mode 100644 index 000000000..e9df7febe Binary files /dev/null and b/imgs/icons/15_12.png differ diff --git a/imgs/icons/15_13.png b/imgs/icons/15_13.png new file mode 100644 index 000000000..e84a29844 Binary files /dev/null and b/imgs/icons/15_13.png differ diff --git a/imgs/icons/15_14.png b/imgs/icons/15_14.png new file mode 100644 index 000000000..2b332ace1 Binary files /dev/null and b/imgs/icons/15_14.png differ diff --git a/imgs/icons/15_15.png b/imgs/icons/15_15.png new file mode 100644 index 000000000..0cbaed39d Binary files /dev/null and b/imgs/icons/15_15.png differ diff --git a/imgs/icons/15_16.png b/imgs/icons/15_16.png new file mode 100644 index 000000000..d70289469 Binary files /dev/null and b/imgs/icons/15_16.png differ diff --git a/imgs/icons/16_01.png b/imgs/icons/16_01.png new file mode 100644 index 000000000..69558d0df Binary files /dev/null and b/imgs/icons/16_01.png differ diff --git a/imgs/icons/16_02.png b/imgs/icons/16_02.png new file mode 100644 index 000000000..68d69e207 Binary files /dev/null and b/imgs/icons/16_02.png differ diff --git a/imgs/icons/16_03.png b/imgs/icons/16_03.png new file mode 100644 index 000000000..09e961a72 Binary files /dev/null and b/imgs/icons/16_03.png differ diff --git a/imgs/icons/16_04.png b/imgs/icons/16_04.png new file mode 100644 index 000000000..2297b4cb1 Binary files /dev/null and b/imgs/icons/16_04.png differ diff --git a/imgs/icons/16_05.png b/imgs/icons/16_05.png new file mode 100644 index 000000000..281925f93 Binary files /dev/null and b/imgs/icons/16_05.png differ diff --git a/imgs/icons/16_06.png b/imgs/icons/16_06.png new file mode 100644 index 000000000..c9d34e704 Binary files /dev/null and b/imgs/icons/16_06.png differ diff --git a/imgs/icons/16_07.png b/imgs/icons/16_07.png new file mode 100644 index 000000000..af2ba766b Binary files /dev/null and b/imgs/icons/16_07.png differ diff --git a/imgs/icons/16_08.png b/imgs/icons/16_08.png new file mode 100644 index 000000000..61040e090 Binary files /dev/null and b/imgs/icons/16_08.png differ diff --git a/imgs/icons/16_09.png b/imgs/icons/16_09.png new file mode 100644 index 000000000..9e38bf21b Binary files /dev/null and b/imgs/icons/16_09.png differ diff --git a/imgs/icons/16_10.png b/imgs/icons/16_10.png new file mode 100644 index 000000000..585279bc1 Binary files /dev/null and b/imgs/icons/16_10.png differ diff --git a/imgs/icons/16_11.png b/imgs/icons/16_11.png new file mode 100644 index 000000000..ee6f77dc3 Binary files /dev/null and b/imgs/icons/16_11.png differ diff --git a/imgs/icons/16_12.png b/imgs/icons/16_12.png new file mode 100644 index 000000000..ca93a994f Binary files /dev/null and b/imgs/icons/16_12.png differ diff --git a/imgs/icons/16_13.png b/imgs/icons/16_13.png new file mode 100644 index 000000000..6390a9631 Binary files /dev/null and b/imgs/icons/16_13.png differ diff --git a/imgs/icons/16_14.png b/imgs/icons/16_14.png new file mode 100644 index 000000000..9b46e2189 Binary files /dev/null and b/imgs/icons/16_14.png differ diff --git a/imgs/icons/16_15.png b/imgs/icons/16_15.png new file mode 100644 index 000000000..527a2330b Binary files /dev/null and b/imgs/icons/16_15.png differ diff --git a/imgs/icons/16_16.png b/imgs/icons/16_16.png new file mode 100644 index 000000000..919fa075f Binary files /dev/null and b/imgs/icons/16_16.png differ diff --git a/imgs/icons/20_01.png b/imgs/icons/20_01.png new file mode 100644 index 000000000..515a1c7a9 Binary files /dev/null and b/imgs/icons/20_01.png differ diff --git a/imgs/icons/20_02.png b/imgs/icons/20_02.png new file mode 100644 index 000000000..4c0779195 Binary files /dev/null and b/imgs/icons/20_02.png differ diff --git a/imgs/icons/20_03.png b/imgs/icons/20_03.png new file mode 100644 index 000000000..86e889735 Binary files /dev/null and b/imgs/icons/20_03.png differ diff --git a/imgs/icons/20_04.png b/imgs/icons/20_04.png new file mode 100644 index 000000000..6075dc439 Binary files /dev/null and b/imgs/icons/20_04.png differ diff --git a/imgs/icons/20_05.png b/imgs/icons/20_05.png new file mode 100644 index 000000000..fd8953c84 Binary files /dev/null and b/imgs/icons/20_05.png differ diff --git a/imgs/icons/20_06.png b/imgs/icons/20_06.png new file mode 100644 index 000000000..ebeebcc50 Binary files /dev/null and b/imgs/icons/20_06.png differ diff --git a/imgs/icons/20_07.png b/imgs/icons/20_07.png new file mode 100644 index 000000000..498bec6dd Binary files /dev/null and b/imgs/icons/20_07.png differ diff --git a/imgs/icons/20_08.png b/imgs/icons/20_08.png new file mode 100644 index 000000000..ed77340b7 Binary files /dev/null and b/imgs/icons/20_08.png differ diff --git a/imgs/icons/20_09.png b/imgs/icons/20_09.png new file mode 100644 index 000000000..959ca0464 Binary files /dev/null and b/imgs/icons/20_09.png differ diff --git a/imgs/icons/20_10.png b/imgs/icons/20_10.png new file mode 100644 index 000000000..fbaea3277 Binary files /dev/null and b/imgs/icons/20_10.png differ diff --git a/imgs/icons/20_11.png b/imgs/icons/20_11.png new file mode 100644 index 000000000..de865c14f Binary files /dev/null and b/imgs/icons/20_11.png differ diff --git a/imgs/icons/20_12.png b/imgs/icons/20_12.png new file mode 100644 index 000000000..e421993a8 Binary files /dev/null and b/imgs/icons/20_12.png differ diff --git a/imgs/icons/20_13.png b/imgs/icons/20_13.png new file mode 100644 index 000000000..162d9d3b9 Binary files /dev/null and b/imgs/icons/20_13.png differ diff --git a/imgs/icons/20_14.png b/imgs/icons/20_14.png new file mode 100644 index 000000000..11e811782 Binary files /dev/null and b/imgs/icons/20_14.png differ diff --git a/imgs/icons/20_15.png b/imgs/icons/20_15.png new file mode 100644 index 000000000..a63b85bc3 Binary files /dev/null and b/imgs/icons/20_15.png differ diff --git a/imgs/icons/20_16.png b/imgs/icons/20_16.png new file mode 100644 index 000000000..29b522e7c Binary files /dev/null and b/imgs/icons/20_16.png differ diff --git a/imgs/icons/21_01.png b/imgs/icons/21_01.png new file mode 100644 index 000000000..9ba78db57 Binary files /dev/null and b/imgs/icons/21_01.png differ diff --git a/imgs/icons/21_02.png b/imgs/icons/21_02.png new file mode 100644 index 000000000..cbcc746b0 Binary files /dev/null and b/imgs/icons/21_02.png differ diff --git a/imgs/icons/21_03.png b/imgs/icons/21_03.png new file mode 100644 index 000000000..5fdc345da Binary files /dev/null and b/imgs/icons/21_03.png differ diff --git a/imgs/icons/21_05.png b/imgs/icons/21_05.png new file mode 100644 index 000000000..9a794f584 Binary files /dev/null and b/imgs/icons/21_05.png differ diff --git a/imgs/icons/21_06.png b/imgs/icons/21_06.png new file mode 100644 index 000000000..ae8a60696 Binary files /dev/null and b/imgs/icons/21_06.png differ diff --git a/imgs/icons/21_07.png b/imgs/icons/21_07.png new file mode 100644 index 000000000..d206009cb Binary files /dev/null and b/imgs/icons/21_07.png differ diff --git a/imgs/icons/21_08.png b/imgs/icons/21_08.png new file mode 100644 index 000000000..3b8e37970 Binary files /dev/null and b/imgs/icons/21_08.png differ diff --git a/imgs/icons/21_09.png b/imgs/icons/21_09.png new file mode 100644 index 000000000..32840e056 Binary files /dev/null and b/imgs/icons/21_09.png differ diff --git a/imgs/icons/21_10.png b/imgs/icons/21_10.png new file mode 100644 index 000000000..72af02062 Binary files /dev/null and b/imgs/icons/21_10.png differ diff --git a/imgs/icons/21_11.png b/imgs/icons/21_11.png new file mode 100644 index 000000000..86f2fec39 Binary files /dev/null and b/imgs/icons/21_11.png differ diff --git a/imgs/icons/21_12.png b/imgs/icons/21_12.png new file mode 100644 index 000000000..b38113da6 Binary files /dev/null and b/imgs/icons/21_12.png differ diff --git a/imgs/icons/21_13.png b/imgs/icons/21_13.png new file mode 100644 index 000000000..17c0526d0 Binary files /dev/null and b/imgs/icons/21_13.png differ diff --git a/imgs/icons/21_14.png b/imgs/icons/21_14.png new file mode 100644 index 000000000..472d69bac Binary files /dev/null and b/imgs/icons/21_14.png differ diff --git a/imgs/icons/21_15.png b/imgs/icons/21_15.png new file mode 100644 index 000000000..6608344d0 Binary files /dev/null and b/imgs/icons/21_15.png differ diff --git a/imgs/icons/21_16.png b/imgs/icons/21_16.png new file mode 100644 index 000000000..bee819645 Binary files /dev/null and b/imgs/icons/21_16.png differ diff --git a/imgs/icons/22_01.png b/imgs/icons/22_01.png new file mode 100644 index 000000000..dfbbfa72c Binary files /dev/null and b/imgs/icons/22_01.png differ diff --git a/imgs/icons/22_02.png b/imgs/icons/22_02.png new file mode 100644 index 000000000..b84596f68 Binary files /dev/null and b/imgs/icons/22_02.png differ diff --git a/imgs/icons/22_03.png b/imgs/icons/22_03.png new file mode 100644 index 000000000..ec090c11f Binary files /dev/null and b/imgs/icons/22_03.png differ diff --git a/imgs/icons/22_04.png b/imgs/icons/22_04.png new file mode 100644 index 000000000..981f2f8a1 Binary files /dev/null and b/imgs/icons/22_04.png differ diff --git a/imgs/icons/22_05.png b/imgs/icons/22_05.png new file mode 100644 index 000000000..0b3d935ec Binary files /dev/null and b/imgs/icons/22_05.png differ diff --git a/imgs/icons/22_06.png b/imgs/icons/22_06.png new file mode 100644 index 000000000..de208f040 Binary files /dev/null and b/imgs/icons/22_06.png differ diff --git a/imgs/icons/22_07.png b/imgs/icons/22_07.png new file mode 100644 index 000000000..0f5e74391 Binary files /dev/null and b/imgs/icons/22_07.png differ diff --git a/imgs/icons/22_08.png b/imgs/icons/22_08.png new file mode 100644 index 000000000..0e1ef965a Binary files /dev/null and b/imgs/icons/22_08.png differ diff --git a/imgs/icons/22_09.png b/imgs/icons/22_09.png new file mode 100644 index 000000000..ac912c91a Binary files /dev/null and b/imgs/icons/22_09.png differ diff --git a/imgs/icons/22_10.png b/imgs/icons/22_10.png new file mode 100644 index 000000000..2739d7779 Binary files /dev/null and b/imgs/icons/22_10.png differ diff --git a/imgs/icons/22_11.png b/imgs/icons/22_11.png new file mode 100644 index 000000000..db13afd6d Binary files /dev/null and b/imgs/icons/22_11.png differ diff --git a/imgs/icons/22_12.png b/imgs/icons/22_12.png new file mode 100644 index 000000000..2e80d82ce Binary files /dev/null and b/imgs/icons/22_12.png differ diff --git a/imgs/icons/22_13.png b/imgs/icons/22_13.png new file mode 100644 index 000000000..ff56d8a06 Binary files /dev/null and b/imgs/icons/22_13.png differ diff --git a/imgs/icons/22_14.png b/imgs/icons/22_14.png new file mode 100644 index 000000000..64b14cac2 Binary files /dev/null and b/imgs/icons/22_14.png differ diff --git a/imgs/icons/22_15.png b/imgs/icons/22_15.png new file mode 100644 index 000000000..ab9f7863a Binary files /dev/null and b/imgs/icons/22_15.png differ diff --git a/imgs/icons/22_16.png b/imgs/icons/22_16.png new file mode 100644 index 000000000..66a57e26a Binary files /dev/null and b/imgs/icons/22_16.png differ diff --git a/imgs/icons/22_17.png b/imgs/icons/22_17.png new file mode 100644 index 000000000..5f8d04f5b Binary files /dev/null and b/imgs/icons/22_17.png differ diff --git a/imgs/icons/22_18.png b/imgs/icons/22_18.png new file mode 100644 index 000000000..3b2076994 Binary files /dev/null and b/imgs/icons/22_18.png differ diff --git a/imgs/icons/22_19.png b/imgs/icons/22_19.png new file mode 100644 index 000000000..515f96b0e Binary files /dev/null and b/imgs/icons/22_19.png differ diff --git a/imgs/icons/22_20.png b/imgs/icons/22_20.png new file mode 100644 index 000000000..48afc2774 Binary files /dev/null and b/imgs/icons/22_20.png differ diff --git a/imgs/icons/22_21.png b/imgs/icons/22_21.png new file mode 100644 index 000000000..2c2328f09 Binary files /dev/null and b/imgs/icons/22_21.png differ diff --git a/imgs/icons/22_22.png b/imgs/icons/22_22.png new file mode 100644 index 000000000..35a47ea13 Binary files /dev/null and b/imgs/icons/22_22.png differ diff --git a/imgs/icons/22_23.png b/imgs/icons/22_23.png new file mode 100644 index 000000000..36d1d4a8d Binary files /dev/null and b/imgs/icons/22_23.png differ diff --git a/imgs/icons/22_24.png b/imgs/icons/22_24.png new file mode 100644 index 000000000..e5604f088 Binary files /dev/null and b/imgs/icons/22_24.png differ diff --git a/imgs/icons/22_25.png b/imgs/icons/22_25.png new file mode 100644 index 000000000..61f166d4a Binary files /dev/null and b/imgs/icons/22_25.png differ diff --git a/imgs/icons/22_26.png b/imgs/icons/22_26.png new file mode 100644 index 000000000..75a5baf2b Binary files /dev/null and b/imgs/icons/22_26.png differ diff --git a/imgs/icons/22_27.png b/imgs/icons/22_27.png new file mode 100644 index 000000000..d2fafe9f5 Binary files /dev/null and b/imgs/icons/22_27.png differ diff --git a/imgs/icons/22_28.png b/imgs/icons/22_28.png new file mode 100644 index 000000000..29d0bd220 Binary files /dev/null and b/imgs/icons/22_28.png differ diff --git a/imgs/icons/25_04.png b/imgs/icons/25_04.png new file mode 100644 index 000000000..b2ab58773 Binary files /dev/null and b/imgs/icons/25_04.png differ diff --git a/imgs/icons/26_01.png b/imgs/icons/26_01.png new file mode 100644 index 000000000..b42cff607 Binary files /dev/null and b/imgs/icons/26_01.png differ diff --git a/imgs/icons/26_11.png b/imgs/icons/26_11.png new file mode 100644 index 000000000..da3fd5663 Binary files /dev/null and b/imgs/icons/26_11.png differ diff --git a/imgs/icons/26_12.png b/imgs/icons/26_12.png new file mode 100644 index 000000000..c6c614ccf Binary files /dev/null and b/imgs/icons/26_12.png differ diff --git a/imgs/icons/26_13.png b/imgs/icons/26_13.png new file mode 100644 index 000000000..a645d2fd8 Binary files /dev/null and b/imgs/icons/26_13.png differ diff --git a/imgs/icons/26_14.png b/imgs/icons/26_14.png new file mode 100644 index 000000000..7701b1d7c Binary files /dev/null and b/imgs/icons/26_14.png differ diff --git a/imgs/icons/26_15.png b/imgs/icons/26_15.png new file mode 100644 index 000000000..a932f95b0 Binary files /dev/null and b/imgs/icons/26_15.png differ diff --git a/imgs/icons/26_16.png b/imgs/icons/26_16.png new file mode 100644 index 000000000..85c5dcb25 Binary files /dev/null and b/imgs/icons/26_16.png differ diff --git a/imgs/icons/27_01.png b/imgs/icons/27_01.png new file mode 100644 index 000000000..700846655 Binary files /dev/null and b/imgs/icons/27_01.png differ diff --git a/imgs/icons/27_04.png b/imgs/icons/27_04.png new file mode 100644 index 000000000..bea7e6734 Binary files /dev/null and b/imgs/icons/27_04.png differ diff --git a/imgs/icons/27_05.png b/imgs/icons/27_05.png new file mode 100644 index 000000000..aaa52f31e Binary files /dev/null and b/imgs/icons/27_05.png differ diff --git a/imgs/icons/27_09.png b/imgs/icons/27_09.png new file mode 100644 index 000000000..63c95f61d Binary files /dev/null and b/imgs/icons/27_09.png differ diff --git a/imgs/icons/31_10.png b/imgs/icons/31_10.png new file mode 100644 index 000000000..282be8a9a Binary files /dev/null and b/imgs/icons/31_10.png differ diff --git a/imgs/icons/31_11.png b/imgs/icons/31_11.png new file mode 100644 index 000000000..3f2c9b399 Binary files /dev/null and b/imgs/icons/31_11.png differ diff --git a/imgs/icons/31_12.png b/imgs/icons/31_12.png new file mode 100644 index 000000000..ba0fd75e8 Binary files /dev/null and b/imgs/icons/31_12.png differ diff --git a/imgs/icons/31_14.png b/imgs/icons/31_14.png new file mode 100644 index 000000000..3c36f1244 Binary files /dev/null and b/imgs/icons/31_14.png differ diff --git a/imgs/icons/31_15.png b/imgs/icons/31_15.png new file mode 100644 index 000000000..907d00630 Binary files /dev/null and b/imgs/icons/31_15.png differ diff --git a/imgs/icons/31_16.png b/imgs/icons/31_16.png new file mode 100644 index 000000000..3e914b732 Binary files /dev/null and b/imgs/icons/31_16.png differ diff --git a/imgs/icons/34_01.png b/imgs/icons/34_01.png new file mode 100644 index 000000000..bb7dc4459 Binary files /dev/null and b/imgs/icons/34_01.png differ diff --git a/imgs/icons/34_02.png b/imgs/icons/34_02.png new file mode 100644 index 000000000..c92a18713 Binary files /dev/null and b/imgs/icons/34_02.png differ diff --git a/imgs/icons/34_12.png b/imgs/icons/34_12.png new file mode 100644 index 000000000..49cc0ce0d Binary files /dev/null and b/imgs/icons/34_12.png differ diff --git a/imgs/icons/34_15.png b/imgs/icons/34_15.png new file mode 100644 index 000000000..12fb8c616 Binary files /dev/null and b/imgs/icons/34_15.png differ diff --git a/staticdata/icons/icon34_16.png b/imgs/icons/34_16.png similarity index 100% rename from staticdata/icons/icon34_16.png rename to imgs/icons/34_16.png diff --git a/imgs/icons/35_01.png b/imgs/icons/35_01.png new file mode 100644 index 000000000..095ec349c Binary files /dev/null and b/imgs/icons/35_01.png differ diff --git a/imgs/icons/35_03.png b/imgs/icons/35_03.png new file mode 100644 index 000000000..7bf7f4a0e Binary files /dev/null and b/imgs/icons/35_03.png differ diff --git a/imgs/icons/35_07.png b/imgs/icons/35_07.png new file mode 100644 index 000000000..8ec572bfb Binary files /dev/null and b/imgs/icons/35_07.png differ diff --git a/imgs/icons/35_08.png b/imgs/icons/35_08.png new file mode 100644 index 000000000..6e9dfa35e Binary files /dev/null and b/imgs/icons/35_08.png differ diff --git a/imgs/icons/35_09.png b/imgs/icons/35_09.png new file mode 100644 index 000000000..a0a4138ab Binary files /dev/null and b/imgs/icons/35_09.png differ diff --git a/imgs/icons/35_12.png b/imgs/icons/35_12.png new file mode 100644 index 000000000..91186cc77 Binary files /dev/null and b/imgs/icons/35_12.png differ diff --git a/imgs/icons/35_14.png b/imgs/icons/35_14.png new file mode 100644 index 000000000..371c60e10 Binary files /dev/null and b/imgs/icons/35_14.png differ diff --git a/imgs/icons/35_15.png b/imgs/icons/35_15.png new file mode 100644 index 000000000..d14dd70db Binary files /dev/null and b/imgs/icons/35_15.png differ diff --git a/imgs/icons/36_13.png b/imgs/icons/36_13.png new file mode 100644 index 000000000..520f5e957 Binary files /dev/null and b/imgs/icons/36_13.png differ diff --git a/imgs/icons/37_12.png b/imgs/icons/37_12.png new file mode 100644 index 000000000..5653703d5 Binary files /dev/null and b/imgs/icons/37_12.png differ diff --git a/imgs/icons/40_14.png b/imgs/icons/40_14.png new file mode 100644 index 000000000..47b82c615 Binary files /dev/null and b/imgs/icons/40_14.png differ diff --git a/imgs/icons/40_16.png b/imgs/icons/40_16.png new file mode 100644 index 000000000..04aa256ed Binary files /dev/null and b/imgs/icons/40_16.png differ diff --git a/imgs/icons/45_11.png b/imgs/icons/45_11.png new file mode 100644 index 000000000..9a5970661 Binary files /dev/null and b/imgs/icons/45_11.png differ diff --git a/imgs/icons/45_12.png b/imgs/icons/45_12.png new file mode 100644 index 000000000..da68eb2d1 Binary files /dev/null and b/imgs/icons/45_12.png differ diff --git a/imgs/icons/48_01.png b/imgs/icons/48_01.png new file mode 100644 index 000000000..3ea641d3c Binary files /dev/null and b/imgs/icons/48_01.png differ diff --git a/imgs/icons/48_02.png b/imgs/icons/48_02.png new file mode 100644 index 000000000..79cebde2b Binary files /dev/null and b/imgs/icons/48_02.png differ diff --git a/imgs/icons/48_03.png b/imgs/icons/48_03.png new file mode 100644 index 000000000..256c68dd5 Binary files /dev/null and b/imgs/icons/48_03.png differ diff --git a/imgs/icons/48_04.png b/imgs/icons/48_04.png new file mode 100644 index 000000000..079426359 Binary files /dev/null and b/imgs/icons/48_04.png differ diff --git a/imgs/icons/48_05.png b/imgs/icons/48_05.png new file mode 100644 index 000000000..50a548011 Binary files /dev/null and b/imgs/icons/48_05.png differ diff --git a/imgs/icons/48_06.png b/imgs/icons/48_06.png new file mode 100644 index 000000000..07e7e4346 Binary files /dev/null and b/imgs/icons/48_06.png differ diff --git a/imgs/icons/48_07.png b/imgs/icons/48_07.png new file mode 100644 index 000000000..01972724c Binary files /dev/null and b/imgs/icons/48_07.png differ diff --git a/imgs/icons/48_08.png b/imgs/icons/48_08.png new file mode 100644 index 000000000..8ea06961b Binary files /dev/null and b/imgs/icons/48_08.png differ diff --git a/imgs/icons/48_09.png b/imgs/icons/48_09.png new file mode 100644 index 000000000..bb392da68 Binary files /dev/null and b/imgs/icons/48_09.png differ diff --git a/imgs/icons/48_10.png b/imgs/icons/48_10.png new file mode 100644 index 000000000..1ea49dfe3 Binary files /dev/null and b/imgs/icons/48_10.png differ diff --git a/imgs/icons/48_11.png b/imgs/icons/48_11.png new file mode 100644 index 000000000..630ceec6b Binary files /dev/null and b/imgs/icons/48_11.png differ diff --git a/imgs/icons/48_12.png b/imgs/icons/48_12.png new file mode 100644 index 000000000..dc9f55560 Binary files /dev/null and b/imgs/icons/48_12.png differ diff --git a/imgs/icons/48_13.png b/imgs/icons/48_13.png new file mode 100644 index 000000000..8c0c9211f Binary files /dev/null and b/imgs/icons/48_13.png differ diff --git a/imgs/icons/48_14.png b/imgs/icons/48_14.png new file mode 100644 index 000000000..f3df5af22 Binary files /dev/null and b/imgs/icons/48_14.png differ diff --git a/imgs/icons/48_15.png b/imgs/icons/48_15.png new file mode 100644 index 000000000..ed40b8b57 Binary files /dev/null and b/imgs/icons/48_15.png differ diff --git a/imgs/icons/48_16.png b/imgs/icons/48_16.png new file mode 100644 index 000000000..81041488b Binary files /dev/null and b/imgs/icons/48_16.png differ diff --git a/imgs/icons/49_05.png b/imgs/icons/49_05.png new file mode 100644 index 000000000..36ea32394 Binary files /dev/null and b/imgs/icons/49_05.png differ diff --git a/imgs/icons/49_06.png b/imgs/icons/49_06.png new file mode 100644 index 000000000..5c7148f1a Binary files /dev/null and b/imgs/icons/49_06.png differ diff --git a/imgs/icons/49_07.png b/imgs/icons/49_07.png new file mode 100644 index 000000000..5aaa37adb Binary files /dev/null and b/imgs/icons/49_07.png differ diff --git a/imgs/icons/50_03.png b/imgs/icons/50_03.png new file mode 100644 index 000000000..1717b2d19 Binary files /dev/null and b/imgs/icons/50_03.png differ diff --git a/imgs/icons/50_11.png b/imgs/icons/50_11.png new file mode 100644 index 000000000..f8a410836 Binary files /dev/null and b/imgs/icons/50_11.png differ diff --git a/imgs/icons/51_05.png b/imgs/icons/51_05.png new file mode 100644 index 000000000..5f211713e Binary files /dev/null and b/imgs/icons/51_05.png differ diff --git a/imgs/icons/51_10.png b/imgs/icons/51_10.png new file mode 100644 index 000000000..20ebbff40 Binary files /dev/null and b/imgs/icons/51_10.png differ diff --git a/imgs/icons/51_11.png b/imgs/icons/51_11.png new file mode 100644 index 000000000..e9e95b19a Binary files /dev/null and b/imgs/icons/51_11.png differ diff --git a/imgs/icons/51_12.png b/imgs/icons/51_12.png new file mode 100644 index 000000000..59f5f1007 Binary files /dev/null and b/imgs/icons/51_12.png differ diff --git a/imgs/icons/51_13.png b/imgs/icons/51_13.png new file mode 100644 index 000000000..82be4e3ca Binary files /dev/null and b/imgs/icons/51_13.png differ diff --git a/imgs/icons/51_14.png b/imgs/icons/51_14.png new file mode 100644 index 000000000..f5b406f78 Binary files /dev/null and b/imgs/icons/51_14.png differ diff --git a/imgs/icons/51_15.png b/imgs/icons/51_15.png new file mode 100644 index 000000000..576c11bf7 Binary files /dev/null and b/imgs/icons/51_15.png differ diff --git a/imgs/icons/51_16.png b/imgs/icons/51_16.png new file mode 100644 index 000000000..6d80e7081 Binary files /dev/null and b/imgs/icons/51_16.png differ diff --git a/imgs/icons/52_01.png b/imgs/icons/52_01.png new file mode 100644 index 000000000..63997ef9a Binary files /dev/null and b/imgs/icons/52_01.png differ diff --git a/imgs/icons/52_02.png b/imgs/icons/52_02.png new file mode 100644 index 000000000..cb06d7db6 Binary files /dev/null and b/imgs/icons/52_02.png differ diff --git a/imgs/icons/52_03.png b/imgs/icons/52_03.png new file mode 100644 index 000000000..6d7a4db03 Binary files /dev/null and b/imgs/icons/52_03.png differ diff --git a/imgs/icons/52_04.png b/imgs/icons/52_04.png new file mode 100644 index 000000000..459a738b3 Binary files /dev/null and b/imgs/icons/52_04.png differ diff --git a/imgs/icons/52_05.png b/imgs/icons/52_05.png new file mode 100644 index 000000000..32f445063 Binary files /dev/null and b/imgs/icons/52_05.png differ diff --git a/imgs/icons/52_06.png b/imgs/icons/52_06.png new file mode 100644 index 000000000..29c1a477f Binary files /dev/null and b/imgs/icons/52_06.png differ diff --git a/imgs/icons/52_07.png b/imgs/icons/52_07.png new file mode 100644 index 000000000..e54ab6778 Binary files /dev/null and b/imgs/icons/52_07.png differ diff --git a/imgs/icons/52_08.png b/imgs/icons/52_08.png new file mode 100644 index 000000000..5f1469da1 Binary files /dev/null and b/imgs/icons/52_08.png differ diff --git a/imgs/icons/52_10.png b/imgs/icons/52_10.png new file mode 100644 index 000000000..4ca5e77f5 Binary files /dev/null and b/imgs/icons/52_10.png differ diff --git a/imgs/icons/52_11.png b/imgs/icons/52_11.png new file mode 100644 index 000000000..738736e6b Binary files /dev/null and b/imgs/icons/52_11.png differ diff --git a/imgs/icons/52_12.png b/imgs/icons/52_12.png new file mode 100644 index 000000000..02d05199b Binary files /dev/null and b/imgs/icons/52_12.png differ diff --git a/imgs/icons/52_13.png b/imgs/icons/52_13.png new file mode 100644 index 000000000..179819806 Binary files /dev/null and b/imgs/icons/52_13.png differ diff --git a/imgs/icons/52_14.png b/imgs/icons/52_14.png new file mode 100644 index 000000000..b5822283b Binary files /dev/null and b/imgs/icons/52_14.png differ diff --git a/imgs/icons/52_15.png b/imgs/icons/52_15.png new file mode 100644 index 000000000..59f0721da Binary files /dev/null and b/imgs/icons/52_15.png differ diff --git a/imgs/icons/52_16.png b/imgs/icons/52_16.png new file mode 100644 index 000000000..2f165c61f Binary files /dev/null and b/imgs/icons/52_16.png differ diff --git a/imgs/icons/53_01.png b/imgs/icons/53_01.png new file mode 100644 index 000000000..d94d1c956 Binary files /dev/null and b/imgs/icons/53_01.png differ diff --git a/imgs/icons/53_02.png b/imgs/icons/53_02.png new file mode 100644 index 000000000..ad6dc0823 Binary files /dev/null and b/imgs/icons/53_02.png differ diff --git a/imgs/icons/53_03.png b/imgs/icons/53_03.png new file mode 100644 index 000000000..64438f7d5 Binary files /dev/null and b/imgs/icons/53_03.png differ diff --git a/imgs/icons/53_04.png b/imgs/icons/53_04.png new file mode 100644 index 000000000..5657f4464 Binary files /dev/null and b/imgs/icons/53_04.png differ diff --git a/imgs/icons/53_05.png b/imgs/icons/53_05.png new file mode 100644 index 000000000..4968233c4 Binary files /dev/null and b/imgs/icons/53_05.png differ diff --git a/imgs/icons/53_06.png b/imgs/icons/53_06.png new file mode 100644 index 000000000..565a6c19f Binary files /dev/null and b/imgs/icons/53_06.png differ diff --git a/imgs/icons/53_07.png b/imgs/icons/53_07.png new file mode 100644 index 000000000..6d31007fb Binary files /dev/null and b/imgs/icons/53_07.png differ diff --git a/imgs/icons/53_08.png b/imgs/icons/53_08.png new file mode 100644 index 000000000..8026efd48 Binary files /dev/null and b/imgs/icons/53_08.png differ diff --git a/imgs/icons/53_09.png b/imgs/icons/53_09.png new file mode 100644 index 000000000..6996aae4c Binary files /dev/null and b/imgs/icons/53_09.png differ diff --git a/imgs/icons/53_14.png b/imgs/icons/53_14.png new file mode 100644 index 000000000..b1bf0e1f1 Binary files /dev/null and b/imgs/icons/53_14.png differ diff --git a/imgs/icons/53_15.png b/imgs/icons/53_15.png new file mode 100644 index 000000000..9b617201d Binary files /dev/null and b/imgs/icons/53_15.png differ diff --git a/imgs/icons/53_16.png b/imgs/icons/53_16.png new file mode 100644 index 000000000..1ec59a4b5 Binary files /dev/null and b/imgs/icons/53_16.png differ diff --git a/imgs/icons/53_64_16.png b/imgs/icons/53_64_16.png new file mode 100644 index 000000000..bd0011937 Binary files /dev/null and b/imgs/icons/53_64_16.png differ diff --git a/imgs/icons/55_13.png b/imgs/icons/55_13.png new file mode 100644 index 000000000..615a5c0b8 Binary files /dev/null and b/imgs/icons/55_13.png differ diff --git a/imgs/icons/56_01.png b/imgs/icons/56_01.png new file mode 100644 index 000000000..fbd562c73 Binary files /dev/null and b/imgs/icons/56_01.png differ diff --git a/imgs/icons/56_02.png b/imgs/icons/56_02.png new file mode 100644 index 000000000..125958dec Binary files /dev/null and b/imgs/icons/56_02.png differ diff --git a/imgs/icons/56_03.png b/imgs/icons/56_03.png new file mode 100644 index 000000000..66a615302 Binary files /dev/null and b/imgs/icons/56_03.png differ diff --git a/imgs/icons/56_04.png b/imgs/icons/56_04.png new file mode 100644 index 000000000..3eb08b5ba Binary files /dev/null and b/imgs/icons/56_04.png differ diff --git a/imgs/icons/56_05.png b/imgs/icons/56_05.png new file mode 100644 index 000000000..0559cd72c Binary files /dev/null and b/imgs/icons/56_05.png differ diff --git a/imgs/icons/56_06.png b/imgs/icons/56_06.png new file mode 100644 index 000000000..7560ad3ea Binary files /dev/null and b/imgs/icons/56_06.png differ diff --git a/imgs/icons/56_07.png b/imgs/icons/56_07.png new file mode 100644 index 000000000..c403b593b Binary files /dev/null and b/imgs/icons/56_07.png differ diff --git a/imgs/icons/56_08.png b/imgs/icons/56_08.png new file mode 100644 index 000000000..f13a31186 Binary files /dev/null and b/imgs/icons/56_08.png differ diff --git a/imgs/icons/57_04.png b/imgs/icons/57_04.png new file mode 100644 index 000000000..66b15839c Binary files /dev/null and b/imgs/icons/57_04.png differ diff --git a/staticdata/icons/icon5_64_17.png b/imgs/icons/5_64_17.png similarity index 100% rename from staticdata/icons/icon5_64_17.png rename to imgs/icons/5_64_17.png diff --git a/staticdata/icons/icon5_64_18.png b/imgs/icons/5_64_18.png similarity index 100% rename from staticdata/icons/icon5_64_18.png rename to imgs/icons/5_64_18.png diff --git a/staticdata/icons/icon5_64_19.png b/imgs/icons/5_64_19.png similarity index 100% rename from staticdata/icons/icon5_64_19.png rename to imgs/icons/5_64_19.png diff --git a/staticdata/icons/icon5_64_20.png b/imgs/icons/5_64_20.png similarity index 100% rename from staticdata/icons/icon5_64_20.png rename to imgs/icons/5_64_20.png diff --git a/staticdata/icons/icon5_64_21.png b/imgs/icons/5_64_21.png similarity index 100% rename from staticdata/icons/icon5_64_21.png rename to imgs/icons/5_64_21.png diff --git a/imgs/icons/62_01.png b/imgs/icons/62_01.png new file mode 100644 index 000000000..4ffe26e9b Binary files /dev/null and b/imgs/icons/62_01.png differ diff --git a/imgs/icons/62_02.png b/imgs/icons/62_02.png new file mode 100644 index 000000000..299a4ccb8 Binary files /dev/null and b/imgs/icons/62_02.png differ diff --git a/imgs/icons/62_03.png b/imgs/icons/62_03.png new file mode 100644 index 000000000..04356a730 Binary files /dev/null and b/imgs/icons/62_03.png differ diff --git a/imgs/icons/62_04.png b/imgs/icons/62_04.png new file mode 100644 index 000000000..c0dc28124 Binary files /dev/null and b/imgs/icons/62_04.png differ diff --git a/imgs/icons/62_05.png b/imgs/icons/62_05.png new file mode 100644 index 000000000..c3c12250f Binary files /dev/null and b/imgs/icons/62_05.png differ diff --git a/imgs/icons/62_06.png b/imgs/icons/62_06.png new file mode 100644 index 000000000..24b30c42b Binary files /dev/null and b/imgs/icons/62_06.png differ diff --git a/imgs/icons/62_07.png b/imgs/icons/62_07.png new file mode 100644 index 000000000..e33137a8f Binary files /dev/null and b/imgs/icons/62_07.png differ diff --git a/imgs/icons/62_08.png b/imgs/icons/62_08.png new file mode 100644 index 000000000..2ca1cf196 Binary files /dev/null and b/imgs/icons/62_08.png differ diff --git a/imgs/icons/63_13.png b/imgs/icons/63_13.png new file mode 100644 index 000000000..11310df21 Binary files /dev/null and b/imgs/icons/63_13.png differ diff --git a/imgs/icons/63_14.png b/imgs/icons/63_14.png new file mode 100644 index 000000000..b47f3b3b6 Binary files /dev/null and b/imgs/icons/63_14.png differ diff --git a/imgs/icons/63_15.png b/imgs/icons/63_15.png new file mode 100644 index 000000000..afab19ca4 Binary files /dev/null and b/imgs/icons/63_15.png differ diff --git a/imgs/icons/63_16.png b/imgs/icons/63_16.png new file mode 100644 index 000000000..c745b2cfd Binary files /dev/null and b/imgs/icons/63_16.png differ diff --git a/imgs/icons/64_05.png b/imgs/icons/64_05.png new file mode 100644 index 000000000..0cf5134dc Binary files /dev/null and b/imgs/icons/64_05.png differ diff --git a/imgs/icons/64_06.png b/imgs/icons/64_06.png new file mode 100644 index 000000000..ca27a43c5 Binary files /dev/null and b/imgs/icons/64_06.png differ diff --git a/imgs/icons/64_07.png b/imgs/icons/64_07.png new file mode 100644 index 000000000..be65f0904 Binary files /dev/null and b/imgs/icons/64_07.png differ diff --git a/imgs/icons/64_08.png b/imgs/icons/64_08.png new file mode 100644 index 000000000..d7ee6295f Binary files /dev/null and b/imgs/icons/64_08.png differ diff --git a/imgs/icons/64_11.png b/imgs/icons/64_11.png new file mode 100644 index 000000000..c263086ec Binary files /dev/null and b/imgs/icons/64_11.png differ diff --git a/imgs/icons/64_12.png b/imgs/icons/64_12.png new file mode 100644 index 000000000..23f6b5b70 Binary files /dev/null and b/imgs/icons/64_12.png differ diff --git a/imgs/icons/68_01.png b/imgs/icons/68_01.png new file mode 100644 index 000000000..c51466727 Binary files /dev/null and b/imgs/icons/68_01.png differ diff --git a/imgs/icons/68_02.png b/imgs/icons/68_02.png new file mode 100644 index 000000000..33d0c75b5 Binary files /dev/null and b/imgs/icons/68_02.png differ diff --git a/imgs/icons/68_03.png b/imgs/icons/68_03.png new file mode 100644 index 000000000..006f9b149 Binary files /dev/null and b/imgs/icons/68_03.png differ diff --git a/imgs/icons/68_04.png b/imgs/icons/68_04.png new file mode 100644 index 000000000..125fda065 Binary files /dev/null and b/imgs/icons/68_04.png differ diff --git a/imgs/icons/68_09.png b/imgs/icons/68_09.png new file mode 100644 index 000000000..cfa6ccfee Binary files /dev/null and b/imgs/icons/68_09.png differ diff --git a/imgs/icons/68_10.png b/imgs/icons/68_10.png new file mode 100644 index 000000000..62abbe105 Binary files /dev/null and b/imgs/icons/68_10.png differ diff --git a/imgs/icons/68_11.png b/imgs/icons/68_11.png new file mode 100644 index 000000000..e0964982f Binary files /dev/null and b/imgs/icons/68_11.png differ diff --git a/imgs/icons/68_12.png b/imgs/icons/68_12.png new file mode 100644 index 000000000..f0f887bd9 Binary files /dev/null and b/imgs/icons/68_12.png differ diff --git a/imgs/icons/68_13.png b/imgs/icons/68_13.png new file mode 100644 index 000000000..52dbfcabf Binary files /dev/null and b/imgs/icons/68_13.png differ diff --git a/imgs/icons/68_14.png b/imgs/icons/68_14.png new file mode 100644 index 000000000..992728717 Binary files /dev/null and b/imgs/icons/68_14.png differ diff --git a/imgs/icons/68_15.png b/imgs/icons/68_15.png new file mode 100644 index 000000000..5caaba76d Binary files /dev/null and b/imgs/icons/68_15.png differ diff --git a/imgs/icons/68_16.png b/imgs/icons/68_16.png new file mode 100644 index 000000000..69d1e9707 Binary files /dev/null and b/imgs/icons/68_16.png differ diff --git a/imgs/icons/70_03.png b/imgs/icons/70_03.png new file mode 100644 index 000000000..f3fb81fda Binary files /dev/null and b/imgs/icons/70_03.png differ diff --git a/imgs/icons/70_04.png b/imgs/icons/70_04.png new file mode 100644 index 000000000..b065a4989 Binary files /dev/null and b/imgs/icons/70_04.png differ diff --git a/imgs/icons/70_05.png b/imgs/icons/70_05.png new file mode 100644 index 000000000..cdbea3d4b Binary files /dev/null and b/imgs/icons/70_05.png differ diff --git a/imgs/icons/70_06.png b/imgs/icons/70_06.png new file mode 100644 index 000000000..9ca126348 Binary files /dev/null and b/imgs/icons/70_06.png differ diff --git a/imgs/icons/70_07.png b/imgs/icons/70_07.png new file mode 100644 index 000000000..b80c6bcd1 Binary files /dev/null and b/imgs/icons/70_07.png differ diff --git a/imgs/icons/70_08.png b/imgs/icons/70_08.png new file mode 100644 index 000000000..c2a490c47 Binary files /dev/null and b/imgs/icons/70_08.png differ diff --git a/imgs/icons/70_09.png b/imgs/icons/70_09.png new file mode 100644 index 000000000..6b67b45ef Binary files /dev/null and b/imgs/icons/70_09.png differ diff --git a/imgs/icons/70_10.png b/imgs/icons/70_10.png new file mode 100644 index 000000000..477ff9a9a Binary files /dev/null and b/imgs/icons/70_10.png differ diff --git a/imgs/icons/70_12.png b/imgs/icons/70_12.png new file mode 100644 index 000000000..410ee6cbb Binary files /dev/null and b/imgs/icons/70_12.png differ diff --git a/imgs/icons/74_01.png b/imgs/icons/74_01.png new file mode 100644 index 000000000..b453dd0ae Binary files /dev/null and b/imgs/icons/74_01.png differ diff --git a/imgs/icons/74_02.png b/imgs/icons/74_02.png new file mode 100644 index 000000000..54ba13045 Binary files /dev/null and b/imgs/icons/74_02.png differ diff --git a/imgs/icons/74_03.png b/imgs/icons/74_03.png new file mode 100644 index 000000000..39b8bf90d Binary files /dev/null and b/imgs/icons/74_03.png differ diff --git a/imgs/icons/74_04.png b/imgs/icons/74_04.png new file mode 100644 index 000000000..48d7a29f4 Binary files /dev/null and b/imgs/icons/74_04.png differ diff --git a/imgs/icons/74_05.png b/imgs/icons/74_05.png new file mode 100644 index 000000000..3d50490cb Binary files /dev/null and b/imgs/icons/74_05.png differ diff --git a/imgs/icons/74_06.png b/imgs/icons/74_06.png new file mode 100644 index 000000000..3ec2556e1 Binary files /dev/null and b/imgs/icons/74_06.png differ diff --git a/imgs/icons/74_07.png b/imgs/icons/74_07.png new file mode 100644 index 000000000..b01f222bf Binary files /dev/null and b/imgs/icons/74_07.png differ diff --git a/imgs/icons/74_08.png b/imgs/icons/74_08.png new file mode 100644 index 000000000..0ea078978 Binary files /dev/null and b/imgs/icons/74_08.png differ diff --git a/imgs/icons/74_09.png b/imgs/icons/74_09.png new file mode 100644 index 000000000..85b18ae99 Binary files /dev/null and b/imgs/icons/74_09.png differ diff --git a/imgs/icons/74_10.png b/imgs/icons/74_10.png new file mode 100644 index 000000000..b9a4754bb Binary files /dev/null and b/imgs/icons/74_10.png differ diff --git a/imgs/icons/76_01.png b/imgs/icons/76_01.png new file mode 100644 index 000000000..32c79f83d Binary files /dev/null and b/imgs/icons/76_01.png differ diff --git a/imgs/icons/76_04.png b/imgs/icons/76_04.png new file mode 100644 index 000000000..2f9e14b4d Binary files /dev/null and b/imgs/icons/76_04.png differ diff --git a/imgs/icons/76_05.png b/imgs/icons/76_05.png new file mode 100644 index 000000000..89a6be139 Binary files /dev/null and b/imgs/icons/76_05.png differ diff --git a/imgs/icons/76_06.png b/imgs/icons/76_06.png new file mode 100644 index 000000000..9fcc91b9e Binary files /dev/null and b/imgs/icons/76_06.png differ diff --git a/imgs/icons/76_07.png b/imgs/icons/76_07.png new file mode 100644 index 000000000..5646a17ca Binary files /dev/null and b/imgs/icons/76_07.png differ diff --git a/imgs/icons/76_08.png b/imgs/icons/76_08.png new file mode 100644 index 000000000..882c4822b Binary files /dev/null and b/imgs/icons/76_08.png differ diff --git a/imgs/icons/76_09.png b/imgs/icons/76_09.png new file mode 100644 index 000000000..4987f64b5 Binary files /dev/null and b/imgs/icons/76_09.png differ diff --git a/imgs/icons/76_16.png b/imgs/icons/76_16.png new file mode 100644 index 000000000..07e248823 Binary files /dev/null and b/imgs/icons/76_16.png differ diff --git a/imgs/icons/79_09.png b/imgs/icons/79_09.png new file mode 100644 index 000000000..d4c345f51 Binary files /dev/null and b/imgs/icons/79_09.png differ diff --git a/imgs/icons/89_1.png b/imgs/icons/89_1.png new file mode 100644 index 000000000..d67cec722 Binary files /dev/null and b/imgs/icons/89_1.png differ diff --git a/imgs/icons/89_2.png b/imgs/icons/89_2.png new file mode 100644 index 000000000..897572f90 Binary files /dev/null and b/imgs/icons/89_2.png differ diff --git a/imgs/icons/89_3.png b/imgs/icons/89_3.png new file mode 100644 index 000000000..486cbfcd5 Binary files /dev/null and b/imgs/icons/89_3.png differ diff --git a/imgs/icons/89_4.png b/imgs/icons/89_4.png new file mode 100644 index 000000000..03539d4bf Binary files /dev/null and b/imgs/icons/89_4.png differ diff --git a/imgs/icons/94_64_9.png b/imgs/icons/94_64_9.png new file mode 100644 index 000000000..0eb00b510 Binary files /dev/null and b/imgs/icons/94_64_9.png differ diff --git a/imgs/icons/95_05.png b/imgs/icons/95_05.png new file mode 100644 index 000000000..b24ce8138 Binary files /dev/null and b/imgs/icons/95_05.png differ diff --git a/imgs/icons/99_09.png b/imgs/icons/99_09.png new file mode 100644 index 000000000..df6362c16 Binary files /dev/null and b/imgs/icons/99_09.png differ diff --git a/staticdata/icons/iconIcon_64px_Fireworks.png b/imgs/icons/Icon_64px_Fireworks.png similarity index 100% rename from staticdata/icons/iconIcon_64px_Fireworks.png rename to imgs/icons/Icon_64px_Fireworks.png diff --git a/staticdata/icons/iconMarketIcon_16px_Amarr.png b/imgs/icons/MarketIcon_16px_Amarr.png similarity index 100% rename from staticdata/icons/iconMarketIcon_16px_Amarr.png rename to imgs/icons/MarketIcon_16px_Amarr.png diff --git a/staticdata/icons/iconMarketIcon_16px_Caldari.png b/imgs/icons/MarketIcon_16px_Caldari.png similarity index 100% rename from staticdata/icons/iconMarketIcon_16px_Caldari.png rename to imgs/icons/MarketIcon_16px_Caldari.png diff --git a/staticdata/icons/iconMarketIcon_16px_Gallente.png b/imgs/icons/MarketIcon_16px_Gallente.png similarity index 100% rename from staticdata/icons/iconMarketIcon_16px_Gallente.png rename to imgs/icons/MarketIcon_16px_Gallente.png diff --git a/staticdata/icons/iconMarketIcon_16px_Minmatar.png b/imgs/icons/MarketIcon_16px_Minmatar.png similarity index 100% rename from staticdata/icons/iconMarketIcon_16px_Minmatar.png rename to imgs/icons/MarketIcon_16px_Minmatar.png diff --git a/staticdata/icons/iconremote_armor_repair.png b/imgs/icons/remote_armor_repair.png similarity index 100% rename from staticdata/icons/iconremote_armor_repair.png rename to imgs/icons/remote_armor_repair.png diff --git a/staticdata/icons/iconremote_hull_repairer.png b/imgs/icons/remote_hull_repairer.png similarity index 100% rename from staticdata/icons/iconremote_hull_repairer.png rename to imgs/icons/remote_hull_repairer.png diff --git a/imgs/renders/10254.png b/imgs/renders/10254.png new file mode 100644 index 000000000..4b9ec73c0 Binary files /dev/null and b/imgs/renders/10254.png differ diff --git a/imgs/renders/11011.png b/imgs/renders/11011.png new file mode 100644 index 000000000..aed8b78b8 Binary files /dev/null and b/imgs/renders/11011.png differ diff --git a/imgs/renders/11019.png b/imgs/renders/11019.png new file mode 100644 index 000000000..199106bca Binary files /dev/null and b/imgs/renders/11019.png differ diff --git a/imgs/renders/11129.png b/imgs/renders/11129.png new file mode 100644 index 000000000..39f0adcad Binary files /dev/null and b/imgs/renders/11129.png differ diff --git a/imgs/renders/11132.png b/imgs/renders/11132.png new file mode 100644 index 000000000..e308b9d22 Binary files /dev/null and b/imgs/renders/11132.png differ diff --git a/imgs/renders/11134.png b/imgs/renders/11134.png new file mode 100644 index 000000000..adb82d599 Binary files /dev/null and b/imgs/renders/11134.png differ diff --git a/imgs/renders/11172.png b/imgs/renders/11172.png new file mode 100644 index 000000000..829609925 Binary files /dev/null and b/imgs/renders/11172.png differ diff --git a/imgs/renders/11174.png b/imgs/renders/11174.png new file mode 100644 index 000000000..5f350acd2 Binary files /dev/null and b/imgs/renders/11174.png differ diff --git a/imgs/renders/11176.png b/imgs/renders/11176.png new file mode 100644 index 000000000..e340c1068 Binary files /dev/null and b/imgs/renders/11176.png differ diff --git a/imgs/renders/11178.png b/imgs/renders/11178.png new file mode 100644 index 000000000..b0f0eb44c Binary files /dev/null and b/imgs/renders/11178.png differ diff --git a/imgs/renders/11180.png b/imgs/renders/11180.png new file mode 100644 index 000000000..8532c4682 Binary files /dev/null and b/imgs/renders/11180.png differ diff --git a/imgs/renders/11182.png b/imgs/renders/11182.png new file mode 100644 index 000000000..bf8fe832f Binary files /dev/null and b/imgs/renders/11182.png differ diff --git a/imgs/renders/11184.png b/imgs/renders/11184.png new file mode 100644 index 000000000..a94051f39 Binary files /dev/null and b/imgs/renders/11184.png differ diff --git a/imgs/renders/11186.png b/imgs/renders/11186.png new file mode 100644 index 000000000..ff7c52502 Binary files /dev/null and b/imgs/renders/11186.png differ diff --git a/imgs/renders/11188.png b/imgs/renders/11188.png new file mode 100644 index 000000000..8b347d4db Binary files /dev/null and b/imgs/renders/11188.png differ diff --git a/imgs/renders/11190.png b/imgs/renders/11190.png new file mode 100644 index 000000000..eaeab53f9 Binary files /dev/null and b/imgs/renders/11190.png differ diff --git a/imgs/renders/11192.png b/imgs/renders/11192.png new file mode 100644 index 000000000..674ee4dc0 Binary files /dev/null and b/imgs/renders/11192.png differ diff --git a/imgs/renders/11194.png b/imgs/renders/11194.png new file mode 100644 index 000000000..8f9788ead Binary files /dev/null and b/imgs/renders/11194.png differ diff --git a/imgs/renders/11196.png b/imgs/renders/11196.png new file mode 100644 index 000000000..05d77e742 Binary files /dev/null and b/imgs/renders/11196.png differ diff --git a/imgs/renders/11198.png b/imgs/renders/11198.png new file mode 100644 index 000000000..c4d0e8279 Binary files /dev/null and b/imgs/renders/11198.png differ diff --git a/imgs/renders/11200.png b/imgs/renders/11200.png new file mode 100644 index 000000000..0e4cc3455 Binary files /dev/null and b/imgs/renders/11200.png differ diff --git a/imgs/renders/11202.png b/imgs/renders/11202.png new file mode 100644 index 000000000..8d7625dc2 Binary files /dev/null and b/imgs/renders/11202.png differ diff --git a/imgs/renders/11365.png b/imgs/renders/11365.png new file mode 100644 index 000000000..0ca250105 Binary files /dev/null and b/imgs/renders/11365.png differ diff --git a/imgs/renders/11371.png b/imgs/renders/11371.png new file mode 100644 index 000000000..cbd9f19c5 Binary files /dev/null and b/imgs/renders/11371.png differ diff --git a/imgs/renders/11373.png b/imgs/renders/11373.png new file mode 100644 index 000000000..0e7ab40cb Binary files /dev/null and b/imgs/renders/11373.png differ diff --git a/imgs/renders/11375.png b/imgs/renders/11375.png new file mode 100644 index 000000000..a4b45701f Binary files /dev/null and b/imgs/renders/11375.png differ diff --git a/imgs/renders/11377.png b/imgs/renders/11377.png new file mode 100644 index 000000000..64d447f0f Binary files /dev/null and b/imgs/renders/11377.png differ diff --git a/imgs/renders/11379.png b/imgs/renders/11379.png new file mode 100644 index 000000000..a8521af08 Binary files /dev/null and b/imgs/renders/11379.png differ diff --git a/imgs/renders/11381.png b/imgs/renders/11381.png new file mode 100644 index 000000000..ed151b9ce Binary files /dev/null and b/imgs/renders/11381.png differ diff --git a/imgs/renders/11383.png b/imgs/renders/11383.png new file mode 100644 index 000000000..2fafefbbf Binary files /dev/null and b/imgs/renders/11383.png differ diff --git a/imgs/renders/11385.png b/imgs/renders/11385.png new file mode 100644 index 000000000..a516ab624 Binary files /dev/null and b/imgs/renders/11385.png differ diff --git a/imgs/renders/11387.png b/imgs/renders/11387.png new file mode 100644 index 000000000..17f2e0168 Binary files /dev/null and b/imgs/renders/11387.png differ diff --git a/imgs/renders/11389.png b/imgs/renders/11389.png new file mode 100644 index 000000000..eedfbae4e Binary files /dev/null and b/imgs/renders/11389.png differ diff --git a/imgs/renders/11393.png b/imgs/renders/11393.png new file mode 100644 index 000000000..29f0875f1 Binary files /dev/null and b/imgs/renders/11393.png differ diff --git a/imgs/renders/11400.png b/imgs/renders/11400.png new file mode 100644 index 000000000..c3736d206 Binary files /dev/null and b/imgs/renders/11400.png differ diff --git a/imgs/renders/11567.png b/imgs/renders/11567.png new file mode 100644 index 000000000..7210fdb29 Binary files /dev/null and b/imgs/renders/11567.png differ diff --git a/imgs/renders/11591.png b/imgs/renders/11591.png new file mode 100644 index 000000000..f174e7a92 Binary files /dev/null and b/imgs/renders/11591.png differ diff --git a/imgs/renders/11936.png b/imgs/renders/11936.png new file mode 100644 index 000000000..9c20c4ead Binary files /dev/null and b/imgs/renders/11936.png differ diff --git a/imgs/renders/11938.png b/imgs/renders/11938.png new file mode 100644 index 000000000..de9ce0ab0 Binary files /dev/null and b/imgs/renders/11938.png differ diff --git a/imgs/renders/11940.png b/imgs/renders/11940.png new file mode 100644 index 000000000..b0e16c4f3 Binary files /dev/null and b/imgs/renders/11940.png differ diff --git a/imgs/renders/11942.png b/imgs/renders/11942.png new file mode 100644 index 000000000..25ad048ae Binary files /dev/null and b/imgs/renders/11942.png differ diff --git a/imgs/renders/11957.png b/imgs/renders/11957.png new file mode 100644 index 000000000..d8518d7da Binary files /dev/null and b/imgs/renders/11957.png differ diff --git a/imgs/renders/11959.png b/imgs/renders/11959.png new file mode 100644 index 000000000..120a3deb9 Binary files /dev/null and b/imgs/renders/11959.png differ diff --git a/imgs/renders/11961.png b/imgs/renders/11961.png new file mode 100644 index 000000000..dd2f214e8 Binary files /dev/null and b/imgs/renders/11961.png differ diff --git a/imgs/renders/11963.png b/imgs/renders/11963.png new file mode 100644 index 000000000..5d708df8b Binary files /dev/null and b/imgs/renders/11963.png differ diff --git a/imgs/renders/11965.png b/imgs/renders/11965.png new file mode 100644 index 000000000..d57b1cb67 Binary files /dev/null and b/imgs/renders/11965.png differ diff --git a/imgs/renders/11969.png b/imgs/renders/11969.png new file mode 100644 index 000000000..f80f1e574 Binary files /dev/null and b/imgs/renders/11969.png differ diff --git a/imgs/renders/11971.png b/imgs/renders/11971.png new file mode 100644 index 000000000..d602e06db Binary files /dev/null and b/imgs/renders/11971.png differ diff --git a/imgs/renders/11973.png b/imgs/renders/11973.png new file mode 100644 index 000000000..4446dc48e Binary files /dev/null and b/imgs/renders/11973.png differ diff --git a/imgs/renders/11978.png b/imgs/renders/11978.png new file mode 100644 index 000000000..851a8bbeb Binary files /dev/null and b/imgs/renders/11978.png differ diff --git a/imgs/renders/11980.png b/imgs/renders/11980.png new file mode 100644 index 000000000..927039197 Binary files /dev/null and b/imgs/renders/11980.png differ diff --git a/imgs/renders/11982.png b/imgs/renders/11982.png new file mode 100644 index 000000000..78454722f Binary files /dev/null and b/imgs/renders/11982.png differ diff --git a/imgs/renders/11985.png b/imgs/renders/11985.png new file mode 100644 index 000000000..f185b78d4 Binary files /dev/null and b/imgs/renders/11985.png differ diff --git a/imgs/renders/11987.png b/imgs/renders/11987.png new file mode 100644 index 000000000..266c57e49 Binary files /dev/null and b/imgs/renders/11987.png differ diff --git a/imgs/renders/11989.png b/imgs/renders/11989.png new file mode 100644 index 000000000..971201ec4 Binary files /dev/null and b/imgs/renders/11989.png differ diff --git a/imgs/renders/11991.png b/imgs/renders/11991.png new file mode 100644 index 000000000..22f78ce6e Binary files /dev/null and b/imgs/renders/11991.png differ diff --git a/imgs/renders/11993.png b/imgs/renders/11993.png new file mode 100644 index 000000000..63d292a2a Binary files /dev/null and b/imgs/renders/11993.png differ diff --git a/imgs/renders/11995.png b/imgs/renders/11995.png new file mode 100644 index 000000000..f92a4383f Binary files /dev/null and b/imgs/renders/11995.png differ diff --git a/imgs/renders/11997.png b/imgs/renders/11997.png new file mode 100644 index 000000000..edc073ccc Binary files /dev/null and b/imgs/renders/11997.png differ diff --git a/imgs/renders/11999.png b/imgs/renders/11999.png new file mode 100644 index 000000000..f0fcd725b Binary files /dev/null and b/imgs/renders/11999.png differ diff --git a/imgs/renders/12003.png b/imgs/renders/12003.png new file mode 100644 index 000000000..b7e755603 Binary files /dev/null and b/imgs/renders/12003.png differ diff --git a/imgs/renders/12005.png b/imgs/renders/12005.png new file mode 100644 index 000000000..19beded43 Binary files /dev/null and b/imgs/renders/12005.png differ diff --git a/imgs/renders/12007.png b/imgs/renders/12007.png new file mode 100644 index 000000000..46a0d93f4 Binary files /dev/null and b/imgs/renders/12007.png differ diff --git a/imgs/renders/12009.png b/imgs/renders/12009.png new file mode 100644 index 000000000..a8c90f71e Binary files /dev/null and b/imgs/renders/12009.png differ diff --git a/imgs/renders/12011.png b/imgs/renders/12011.png new file mode 100644 index 000000000..d26a22f33 Binary files /dev/null and b/imgs/renders/12011.png differ diff --git a/imgs/renders/12013.png b/imgs/renders/12013.png new file mode 100644 index 000000000..2ed7ea7e3 Binary files /dev/null and b/imgs/renders/12013.png differ diff --git a/imgs/renders/12015.png b/imgs/renders/12015.png new file mode 100644 index 000000000..064cd2551 Binary files /dev/null and b/imgs/renders/12015.png differ diff --git a/imgs/renders/12017.png b/imgs/renders/12017.png new file mode 100644 index 000000000..b239b1460 Binary files /dev/null and b/imgs/renders/12017.png differ diff --git a/imgs/renders/12019.png b/imgs/renders/12019.png new file mode 100644 index 000000000..22fa65e7f Binary files /dev/null and b/imgs/renders/12019.png differ diff --git a/imgs/renders/12021.png b/imgs/renders/12021.png new file mode 100644 index 000000000..7d1b318a9 Binary files /dev/null and b/imgs/renders/12021.png differ diff --git a/imgs/renders/12023.png b/imgs/renders/12023.png new file mode 100644 index 000000000..02c7b4669 Binary files /dev/null and b/imgs/renders/12023.png differ diff --git a/imgs/renders/12030.png b/imgs/renders/12030.png new file mode 100644 index 000000000..cf75b3dac Binary files /dev/null and b/imgs/renders/12030.png differ diff --git a/imgs/renders/12032.png b/imgs/renders/12032.png new file mode 100644 index 000000000..d800398eb Binary files /dev/null and b/imgs/renders/12032.png differ diff --git a/imgs/renders/12034.png b/imgs/renders/12034.png new file mode 100644 index 000000000..9a334dc6d Binary files /dev/null and b/imgs/renders/12034.png differ diff --git a/imgs/renders/12036.png b/imgs/renders/12036.png new file mode 100644 index 000000000..6682629ad Binary files /dev/null and b/imgs/renders/12036.png differ diff --git a/imgs/renders/12038.png b/imgs/renders/12038.png new file mode 100644 index 000000000..b33de0aa6 Binary files /dev/null and b/imgs/renders/12038.png differ diff --git a/imgs/renders/12040.png b/imgs/renders/12040.png new file mode 100644 index 000000000..f0f8578a1 Binary files /dev/null and b/imgs/renders/12040.png differ diff --git a/imgs/renders/12042.png b/imgs/renders/12042.png new file mode 100644 index 000000000..327cc470a Binary files /dev/null and b/imgs/renders/12042.png differ diff --git a/imgs/renders/12044.png b/imgs/renders/12044.png new file mode 100644 index 000000000..bba748dea Binary files /dev/null and b/imgs/renders/12044.png differ diff --git a/imgs/renders/1233.png b/imgs/renders/1233.png new file mode 100644 index 000000000..5571ab305 Binary files /dev/null and b/imgs/renders/1233.png differ diff --git a/imgs/renders/12403.png b/imgs/renders/12403.png new file mode 100644 index 000000000..f73c1b861 Binary files /dev/null and b/imgs/renders/12403.png differ diff --git a/imgs/renders/12729.png b/imgs/renders/12729.png new file mode 100644 index 000000000..dacd1ff55 Binary files /dev/null and b/imgs/renders/12729.png differ diff --git a/imgs/renders/12731.png b/imgs/renders/12731.png new file mode 100644 index 000000000..b19260d1c Binary files /dev/null and b/imgs/renders/12731.png differ diff --git a/imgs/renders/12733.png b/imgs/renders/12733.png new file mode 100644 index 000000000..97e73bae7 Binary files /dev/null and b/imgs/renders/12733.png differ diff --git a/imgs/renders/12735.png b/imgs/renders/12735.png new file mode 100644 index 000000000..96364a710 Binary files /dev/null and b/imgs/renders/12735.png differ diff --git a/imgs/renders/12743.png b/imgs/renders/12743.png new file mode 100644 index 000000000..0e3cb73c4 Binary files /dev/null and b/imgs/renders/12743.png differ diff --git a/imgs/renders/12745.png b/imgs/renders/12745.png new file mode 100644 index 000000000..1c0162e20 Binary files /dev/null and b/imgs/renders/12745.png differ diff --git a/imgs/renders/12747.png b/imgs/renders/12747.png new file mode 100644 index 000000000..082fc70ca Binary files /dev/null and b/imgs/renders/12747.png differ diff --git a/imgs/renders/12753.png b/imgs/renders/12753.png new file mode 100644 index 000000000..68f28f2df Binary files /dev/null and b/imgs/renders/12753.png differ diff --git a/imgs/renders/13202.png b/imgs/renders/13202.png new file mode 100644 index 000000000..bd956be55 Binary files /dev/null and b/imgs/renders/13202.png differ diff --git a/imgs/renders/16227.png b/imgs/renders/16227.png new file mode 100644 index 000000000..52a827ad2 Binary files /dev/null and b/imgs/renders/16227.png differ diff --git a/imgs/renders/16229.png b/imgs/renders/16229.png new file mode 100644 index 000000000..8537b5ed4 Binary files /dev/null and b/imgs/renders/16229.png differ diff --git a/imgs/renders/16231.png b/imgs/renders/16231.png new file mode 100644 index 000000000..abefbefcf Binary files /dev/null and b/imgs/renders/16231.png differ diff --git a/imgs/renders/16233.png b/imgs/renders/16233.png new file mode 100644 index 000000000..d89611a99 Binary files /dev/null and b/imgs/renders/16233.png differ diff --git a/imgs/renders/16236.png b/imgs/renders/16236.png new file mode 100644 index 000000000..f137947e7 Binary files /dev/null and b/imgs/renders/16236.png differ diff --git a/imgs/renders/16238.png b/imgs/renders/16238.png new file mode 100644 index 000000000..27beb9d69 Binary files /dev/null and b/imgs/renders/16238.png differ diff --git a/imgs/renders/16240.png b/imgs/renders/16240.png new file mode 100644 index 000000000..643375439 Binary files /dev/null and b/imgs/renders/16240.png differ diff --git a/imgs/renders/16242.png b/imgs/renders/16242.png new file mode 100644 index 000000000..31a7676ef Binary files /dev/null and b/imgs/renders/16242.png differ diff --git a/imgs/renders/17360.png b/imgs/renders/17360.png new file mode 100644 index 000000000..27e275348 Binary files /dev/null and b/imgs/renders/17360.png differ diff --git a/imgs/renders/17476.png b/imgs/renders/17476.png new file mode 100644 index 000000000..22ad9a0dd Binary files /dev/null and b/imgs/renders/17476.png differ diff --git a/imgs/renders/17478.png b/imgs/renders/17478.png new file mode 100644 index 000000000..1f80ed572 Binary files /dev/null and b/imgs/renders/17478.png differ diff --git a/imgs/renders/17480.png b/imgs/renders/17480.png new file mode 100644 index 000000000..643f9b00d Binary files /dev/null and b/imgs/renders/17480.png differ diff --git a/imgs/renders/17619.png b/imgs/renders/17619.png new file mode 100644 index 000000000..a3cf599bc Binary files /dev/null and b/imgs/renders/17619.png differ diff --git a/imgs/renders/17634.png b/imgs/renders/17634.png new file mode 100644 index 000000000..1e775e9e3 Binary files /dev/null and b/imgs/renders/17634.png differ diff --git a/imgs/renders/17636.png b/imgs/renders/17636.png new file mode 100644 index 000000000..f495bfdcb Binary files /dev/null and b/imgs/renders/17636.png differ diff --git a/imgs/renders/17703.png b/imgs/renders/17703.png new file mode 100644 index 000000000..9721d40b6 Binary files /dev/null and b/imgs/renders/17703.png differ diff --git a/imgs/renders/17705.png b/imgs/renders/17705.png new file mode 100644 index 000000000..edaa2ca33 Binary files /dev/null and b/imgs/renders/17705.png differ diff --git a/imgs/renders/17707.png b/imgs/renders/17707.png new file mode 100644 index 000000000..9d7415698 Binary files /dev/null and b/imgs/renders/17707.png differ diff --git a/imgs/renders/17709.png b/imgs/renders/17709.png new file mode 100644 index 000000000..b52de9801 Binary files /dev/null and b/imgs/renders/17709.png differ diff --git a/imgs/renders/17711.png b/imgs/renders/17711.png new file mode 100644 index 000000000..069f476fd Binary files /dev/null and b/imgs/renders/17711.png differ diff --git a/imgs/renders/17713.png b/imgs/renders/17713.png new file mode 100644 index 000000000..9780131a9 Binary files /dev/null and b/imgs/renders/17713.png differ diff --git a/imgs/renders/17715.png b/imgs/renders/17715.png new file mode 100644 index 000000000..97197a14a Binary files /dev/null and b/imgs/renders/17715.png differ diff --git a/imgs/renders/17718.png b/imgs/renders/17718.png new file mode 100644 index 000000000..54e551920 Binary files /dev/null and b/imgs/renders/17718.png differ diff --git a/imgs/renders/17720.png b/imgs/renders/17720.png new file mode 100644 index 000000000..6072b7d4d Binary files /dev/null and b/imgs/renders/17720.png differ diff --git a/imgs/renders/17722.png b/imgs/renders/17722.png new file mode 100644 index 000000000..6830c650c Binary files /dev/null and b/imgs/renders/17722.png differ diff --git a/imgs/renders/17724.png b/imgs/renders/17724.png new file mode 100644 index 000000000..a7d2c030e Binary files /dev/null and b/imgs/renders/17724.png differ diff --git a/imgs/renders/17726.png b/imgs/renders/17726.png new file mode 100644 index 000000000..d9e0290e5 Binary files /dev/null and b/imgs/renders/17726.png differ diff --git a/imgs/renders/17728.png b/imgs/renders/17728.png new file mode 100644 index 000000000..bff78c72b Binary files /dev/null and b/imgs/renders/17728.png differ diff --git a/imgs/renders/17730.png b/imgs/renders/17730.png new file mode 100644 index 000000000..d6ecda179 Binary files /dev/null and b/imgs/renders/17730.png differ diff --git a/imgs/renders/17732.png b/imgs/renders/17732.png new file mode 100644 index 000000000..a53ebf73f Binary files /dev/null and b/imgs/renders/17732.png differ diff --git a/imgs/renders/17734.png b/imgs/renders/17734.png new file mode 100644 index 000000000..a2908754e Binary files /dev/null and b/imgs/renders/17734.png differ diff --git a/imgs/renders/17736.png b/imgs/renders/17736.png new file mode 100644 index 000000000..6342411ee Binary files /dev/null and b/imgs/renders/17736.png differ diff --git a/imgs/renders/17738.png b/imgs/renders/17738.png new file mode 100644 index 000000000..d69a14222 Binary files /dev/null and b/imgs/renders/17738.png differ diff --git a/imgs/renders/17740.png b/imgs/renders/17740.png new file mode 100644 index 000000000..adf68ceca Binary files /dev/null and b/imgs/renders/17740.png differ diff --git a/imgs/renders/17812.png b/imgs/renders/17812.png new file mode 100644 index 000000000..47de84467 Binary files /dev/null and b/imgs/renders/17812.png differ diff --git a/imgs/renders/17841.png b/imgs/renders/17841.png new file mode 100644 index 000000000..79c2bed6e Binary files /dev/null and b/imgs/renders/17841.png differ diff --git a/imgs/renders/17843.png b/imgs/renders/17843.png new file mode 100644 index 000000000..f5ff0422d Binary files /dev/null and b/imgs/renders/17843.png differ diff --git a/imgs/renders/17918.png b/imgs/renders/17918.png new file mode 100644 index 000000000..6c5cd2d9f Binary files /dev/null and b/imgs/renders/17918.png differ diff --git a/imgs/renders/17920.png b/imgs/renders/17920.png new file mode 100644 index 000000000..070048992 Binary files /dev/null and b/imgs/renders/17920.png differ diff --git a/imgs/renders/17922.png b/imgs/renders/17922.png new file mode 100644 index 000000000..91e5386ae Binary files /dev/null and b/imgs/renders/17922.png differ diff --git a/imgs/renders/17924.png b/imgs/renders/17924.png new file mode 100644 index 000000000..1ed96294a Binary files /dev/null and b/imgs/renders/17924.png differ diff --git a/imgs/renders/17926.png b/imgs/renders/17926.png new file mode 100644 index 000000000..997c3af60 Binary files /dev/null and b/imgs/renders/17926.png differ diff --git a/imgs/renders/17928.png b/imgs/renders/17928.png new file mode 100644 index 000000000..c2862e5af Binary files /dev/null and b/imgs/renders/17928.png differ diff --git a/imgs/renders/17930.png b/imgs/renders/17930.png new file mode 100644 index 000000000..ea9bb55e5 Binary files /dev/null and b/imgs/renders/17930.png differ diff --git a/imgs/renders/17932.png b/imgs/renders/17932.png new file mode 100644 index 000000000..1ddd7aac8 Binary files /dev/null and b/imgs/renders/17932.png differ diff --git a/imgs/renders/1896.png b/imgs/renders/1896.png new file mode 100644 index 000000000..56879985f Binary files /dev/null and b/imgs/renders/1896.png differ diff --git a/imgs/renders/1898.png b/imgs/renders/1898.png new file mode 100644 index 000000000..8808a36ce Binary files /dev/null and b/imgs/renders/1898.png differ diff --git a/imgs/renders/1900.png b/imgs/renders/1900.png new file mode 100644 index 000000000..ad985fffd Binary files /dev/null and b/imgs/renders/1900.png differ diff --git a/imgs/renders/1902.png b/imgs/renders/1902.png new file mode 100644 index 000000000..50ef3dd5a Binary files /dev/null and b/imgs/renders/1902.png differ diff --git a/imgs/renders/1904.png b/imgs/renders/1904.png new file mode 100644 index 000000000..854490d37 Binary files /dev/null and b/imgs/renders/1904.png differ diff --git a/imgs/renders/1906.png b/imgs/renders/1906.png new file mode 100644 index 000000000..aae52b44d Binary files /dev/null and b/imgs/renders/1906.png differ diff --git a/imgs/renders/1908.png b/imgs/renders/1908.png new file mode 100644 index 000000000..1ed1034b7 Binary files /dev/null and b/imgs/renders/1908.png differ diff --git a/imgs/renders/1910.png b/imgs/renders/1910.png new file mode 100644 index 000000000..cbc3ceedc Binary files /dev/null and b/imgs/renders/1910.png differ diff --git a/imgs/renders/1912.png b/imgs/renders/1912.png new file mode 100644 index 000000000..8614b1064 Binary files /dev/null and b/imgs/renders/1912.png differ diff --git a/imgs/renders/1914.png b/imgs/renders/1914.png new file mode 100644 index 000000000..e3d48b48d Binary files /dev/null and b/imgs/renders/1914.png differ diff --git a/imgs/renders/1916.png b/imgs/renders/1916.png new file mode 100644 index 000000000..81f3e3824 Binary files /dev/null and b/imgs/renders/1916.png differ diff --git a/imgs/renders/1918.png b/imgs/renders/1918.png new file mode 100644 index 000000000..93b096876 Binary files /dev/null and b/imgs/renders/1918.png differ diff --git a/imgs/renders/1944.png b/imgs/renders/1944.png new file mode 100644 index 000000000..9c3fa8fdd Binary files /dev/null and b/imgs/renders/1944.png differ diff --git a/imgs/renders/19720.png b/imgs/renders/19720.png new file mode 100644 index 000000000..2a9dbe4e2 Binary files /dev/null and b/imgs/renders/19720.png differ diff --git a/imgs/renders/19722.png b/imgs/renders/19722.png new file mode 100644 index 000000000..b907e202e Binary files /dev/null and b/imgs/renders/19722.png differ diff --git a/imgs/renders/19724.png b/imgs/renders/19724.png new file mode 100644 index 000000000..3b4010a5f Binary files /dev/null and b/imgs/renders/19724.png differ diff --git a/imgs/renders/19726.png b/imgs/renders/19726.png new file mode 100644 index 000000000..7b7793ef1 Binary files /dev/null and b/imgs/renders/19726.png differ diff --git a/imgs/renders/19744.png b/imgs/renders/19744.png new file mode 100644 index 000000000..2f436000a Binary files /dev/null and b/imgs/renders/19744.png differ diff --git a/imgs/renders/19770.png b/imgs/renders/19770.png new file mode 100644 index 000000000..724cb2468 Binary files /dev/null and b/imgs/renders/19770.png differ diff --git a/imgs/renders/2006.png b/imgs/renders/2006.png new file mode 100644 index 000000000..af886866f Binary files /dev/null and b/imgs/renders/2006.png differ diff --git a/imgs/renders/20067.png b/imgs/renders/20067.png new file mode 100644 index 000000000..7127a29fe Binary files /dev/null and b/imgs/renders/20067.png differ diff --git a/imgs/renders/20122.png b/imgs/renders/20122.png new file mode 100644 index 000000000..c06ce933f Binary files /dev/null and b/imgs/renders/20122.png differ diff --git a/imgs/renders/20125.png b/imgs/renders/20125.png new file mode 100644 index 000000000..e9ed3cff4 Binary files /dev/null and b/imgs/renders/20125.png differ diff --git a/imgs/renders/20183.png b/imgs/renders/20183.png new file mode 100644 index 000000000..fa7cddfa6 Binary files /dev/null and b/imgs/renders/20183.png differ diff --git a/imgs/renders/20185.png b/imgs/renders/20185.png new file mode 100644 index 000000000..dc373bee8 Binary files /dev/null and b/imgs/renders/20185.png differ diff --git a/imgs/renders/20187.png b/imgs/renders/20187.png new file mode 100644 index 000000000..25cac2188 Binary files /dev/null and b/imgs/renders/20187.png differ diff --git a/imgs/renders/20189.png b/imgs/renders/20189.png new file mode 100644 index 000000000..3e9889460 Binary files /dev/null and b/imgs/renders/20189.png differ diff --git a/imgs/renders/2078.png b/imgs/renders/2078.png new file mode 100644 index 000000000..802ade32c Binary files /dev/null and b/imgs/renders/2078.png differ diff --git a/imgs/renders/21097.png b/imgs/renders/21097.png new file mode 100644 index 000000000..3b5e962e6 Binary files /dev/null and b/imgs/renders/21097.png differ diff --git a/imgs/renders/2161.png b/imgs/renders/2161.png new file mode 100644 index 000000000..7cadd4ed0 Binary files /dev/null and b/imgs/renders/2161.png differ diff --git a/imgs/renders/21628.png b/imgs/renders/21628.png new file mode 100644 index 000000000..6dfb79cc5 Binary files /dev/null and b/imgs/renders/21628.png differ diff --git a/imgs/renders/2164.png b/imgs/renders/2164.png new file mode 100644 index 000000000..2533df2b5 Binary files /dev/null and b/imgs/renders/2164.png differ diff --git a/imgs/renders/2166.png b/imgs/renders/2166.png new file mode 100644 index 000000000..1b48fd4c2 Binary files /dev/null and b/imgs/renders/2166.png differ diff --git a/imgs/renders/2168.png b/imgs/renders/2168.png new file mode 100644 index 000000000..a814bf6a6 Binary files /dev/null and b/imgs/renders/2168.png differ diff --git a/imgs/renders/22426.png b/imgs/renders/22426.png new file mode 100644 index 000000000..463dfa4ff Binary files /dev/null and b/imgs/renders/22426.png differ diff --git a/imgs/renders/22428.png b/imgs/renders/22428.png new file mode 100644 index 000000000..090ce18dc Binary files /dev/null and b/imgs/renders/22428.png differ diff --git a/imgs/renders/22430.png b/imgs/renders/22430.png new file mode 100644 index 000000000..fbb02e868 Binary files /dev/null and b/imgs/renders/22430.png differ diff --git a/imgs/renders/22432.png b/imgs/renders/22432.png new file mode 100644 index 000000000..90ec63b8a Binary files /dev/null and b/imgs/renders/22432.png differ diff --git a/imgs/renders/22434.png b/imgs/renders/22434.png new file mode 100644 index 000000000..a5f855b67 Binary files /dev/null and b/imgs/renders/22434.png differ diff --git a/imgs/renders/22436.png b/imgs/renders/22436.png new file mode 100644 index 000000000..2e46a25e1 Binary files /dev/null and b/imgs/renders/22436.png differ diff --git a/imgs/renders/22438.png b/imgs/renders/22438.png new file mode 100644 index 000000000..d7f1ec5fa Binary files /dev/null and b/imgs/renders/22438.png differ diff --git a/imgs/renders/22440.png b/imgs/renders/22440.png new file mode 100644 index 000000000..2e22ab1a4 Binary files /dev/null and b/imgs/renders/22440.png differ diff --git a/imgs/renders/22442.png b/imgs/renders/22442.png new file mode 100644 index 000000000..f5cf2aecb Binary files /dev/null and b/imgs/renders/22442.png differ diff --git a/imgs/renders/22444.png b/imgs/renders/22444.png new file mode 100644 index 000000000..a43e3bef9 Binary files /dev/null and b/imgs/renders/22444.png differ diff --git a/imgs/renders/22446.png b/imgs/renders/22446.png new file mode 100644 index 000000000..0a187659c Binary files /dev/null and b/imgs/renders/22446.png differ diff --git a/imgs/renders/22448.png b/imgs/renders/22448.png new file mode 100644 index 000000000..d20f90967 Binary files /dev/null and b/imgs/renders/22448.png differ diff --git a/imgs/renders/22450.png b/imgs/renders/22450.png new file mode 100644 index 000000000..307648fc0 Binary files /dev/null and b/imgs/renders/22450.png differ diff --git a/imgs/renders/22452.png b/imgs/renders/22452.png new file mode 100644 index 000000000..bdc6660ca Binary files /dev/null and b/imgs/renders/22452.png differ diff --git a/imgs/renders/22454.png b/imgs/renders/22454.png new file mode 100644 index 000000000..c605136c7 Binary files /dev/null and b/imgs/renders/22454.png differ diff --git a/imgs/renders/22456.png b/imgs/renders/22456.png new file mode 100644 index 000000000..6b0947f3f Binary files /dev/null and b/imgs/renders/22456.png differ diff --git a/imgs/renders/22458.png b/imgs/renders/22458.png new file mode 100644 index 000000000..bf944e374 Binary files /dev/null and b/imgs/renders/22458.png differ diff --git a/imgs/renders/22460.png b/imgs/renders/22460.png new file mode 100644 index 000000000..2c112f724 Binary files /dev/null and b/imgs/renders/22460.png differ diff --git a/imgs/renders/22462.png b/imgs/renders/22462.png new file mode 100644 index 000000000..40380580b Binary files /dev/null and b/imgs/renders/22462.png differ diff --git a/imgs/renders/22464.png b/imgs/renders/22464.png new file mode 100644 index 000000000..2270c734a Binary files /dev/null and b/imgs/renders/22464.png differ diff --git a/imgs/renders/22466.png b/imgs/renders/22466.png new file mode 100644 index 000000000..50f6a0fb6 Binary files /dev/null and b/imgs/renders/22466.png differ diff --git a/imgs/renders/22468.png b/imgs/renders/22468.png new file mode 100644 index 000000000..1ed25f229 Binary files /dev/null and b/imgs/renders/22468.png differ diff --git a/imgs/renders/22470.png b/imgs/renders/22470.png new file mode 100644 index 000000000..2a97da1bd Binary files /dev/null and b/imgs/renders/22470.png differ diff --git a/imgs/renders/22472.png b/imgs/renders/22472.png new file mode 100644 index 000000000..2c535a3c7 Binary files /dev/null and b/imgs/renders/22472.png differ diff --git a/imgs/renders/22474.png b/imgs/renders/22474.png new file mode 100644 index 000000000..609037a0d Binary files /dev/null and b/imgs/renders/22474.png differ diff --git a/imgs/renders/22544.png b/imgs/renders/22544.png new file mode 100644 index 000000000..e076d426f Binary files /dev/null and b/imgs/renders/22544.png differ diff --git a/imgs/renders/22546.png b/imgs/renders/22546.png new file mode 100644 index 000000000..bdab522f4 Binary files /dev/null and b/imgs/renders/22546.png differ diff --git a/imgs/renders/22548.png b/imgs/renders/22548.png new file mode 100644 index 000000000..205af627c Binary files /dev/null and b/imgs/renders/22548.png differ diff --git a/imgs/renders/22579.png b/imgs/renders/22579.png new file mode 100644 index 000000000..cd7299c4e Binary files /dev/null and b/imgs/renders/22579.png differ diff --git a/imgs/renders/22852.png b/imgs/renders/22852.png new file mode 100644 index 000000000..d33f80a61 Binary files /dev/null and b/imgs/renders/22852.png differ diff --git a/imgs/renders/23693.png b/imgs/renders/23693.png new file mode 100644 index 000000000..0725a9f66 Binary files /dev/null and b/imgs/renders/23693.png differ diff --git a/imgs/renders/23757.png b/imgs/renders/23757.png new file mode 100644 index 000000000..493221769 Binary files /dev/null and b/imgs/renders/23757.png differ diff --git a/imgs/renders/23773.png b/imgs/renders/23773.png new file mode 100644 index 000000000..9fd0d2137 Binary files /dev/null and b/imgs/renders/23773.png differ diff --git a/imgs/renders/23911.png b/imgs/renders/23911.png new file mode 100644 index 000000000..f2bdf4452 Binary files /dev/null and b/imgs/renders/23911.png differ diff --git a/imgs/renders/23913.png b/imgs/renders/23913.png new file mode 100644 index 000000000..e0466778a Binary files /dev/null and b/imgs/renders/23913.png differ diff --git a/imgs/renders/23915.png b/imgs/renders/23915.png new file mode 100644 index 000000000..ca7f302ef Binary files /dev/null and b/imgs/renders/23915.png differ diff --git a/imgs/renders/23917.png b/imgs/renders/23917.png new file mode 100644 index 000000000..b18d375e9 Binary files /dev/null and b/imgs/renders/23917.png differ diff --git a/imgs/renders/23919.png b/imgs/renders/23919.png new file mode 100644 index 000000000..ea97e1801 Binary files /dev/null and b/imgs/renders/23919.png differ diff --git a/imgs/renders/24448.png b/imgs/renders/24448.png new file mode 100644 index 000000000..ca5af11f8 Binary files /dev/null and b/imgs/renders/24448.png differ diff --git a/imgs/renders/24483.png b/imgs/renders/24483.png new file mode 100644 index 000000000..0aecf7da3 Binary files /dev/null and b/imgs/renders/24483.png differ diff --git a/imgs/renders/24688.png b/imgs/renders/24688.png new file mode 100644 index 000000000..3727722bc Binary files /dev/null and b/imgs/renders/24688.png differ diff --git a/imgs/renders/24690.png b/imgs/renders/24690.png new file mode 100644 index 000000000..ade11987a Binary files /dev/null and b/imgs/renders/24690.png differ diff --git a/imgs/renders/24692.png b/imgs/renders/24692.png new file mode 100644 index 000000000..6cbbe514e Binary files /dev/null and b/imgs/renders/24692.png differ diff --git a/imgs/renders/24694.png b/imgs/renders/24694.png new file mode 100644 index 000000000..5ee0176df Binary files /dev/null and b/imgs/renders/24694.png differ diff --git a/imgs/renders/24696.png b/imgs/renders/24696.png new file mode 100644 index 000000000..00e05c3d1 Binary files /dev/null and b/imgs/renders/24696.png differ diff --git a/imgs/renders/24698.png b/imgs/renders/24698.png new file mode 100644 index 000000000..9e06f2e71 Binary files /dev/null and b/imgs/renders/24698.png differ diff --git a/imgs/renders/24700.png b/imgs/renders/24700.png new file mode 100644 index 000000000..96ba886a8 Binary files /dev/null and b/imgs/renders/24700.png differ diff --git a/imgs/renders/24702.png b/imgs/renders/24702.png new file mode 100644 index 000000000..ce8fc5f7c Binary files /dev/null and b/imgs/renders/24702.png differ diff --git a/imgs/renders/25426.png b/imgs/renders/25426.png new file mode 100644 index 000000000..3d09ad258 Binary files /dev/null and b/imgs/renders/25426.png differ diff --git a/imgs/renders/25560.png b/imgs/renders/25560.png new file mode 100644 index 000000000..8ee2185a9 Binary files /dev/null and b/imgs/renders/25560.png differ diff --git a/imgs/renders/26840.png b/imgs/renders/26840.png new file mode 100644 index 000000000..64299f382 Binary files /dev/null and b/imgs/renders/26840.png differ diff --git a/imgs/renders/26842.png b/imgs/renders/26842.png new file mode 100644 index 000000000..3bd5ff519 Binary files /dev/null and b/imgs/renders/26842.png differ diff --git a/imgs/renders/26872.png b/imgs/renders/26872.png new file mode 100644 index 000000000..d5db21061 Binary files /dev/null and b/imgs/renders/26872.png differ diff --git a/imgs/renders/26874.png b/imgs/renders/26874.png new file mode 100644 index 000000000..a4e487dae Binary files /dev/null and b/imgs/renders/26874.png differ diff --git a/imgs/renders/26876.png b/imgs/renders/26876.png new file mode 100644 index 000000000..4df3f95d3 Binary files /dev/null and b/imgs/renders/26876.png differ diff --git a/imgs/renders/27299.png b/imgs/renders/27299.png new file mode 100644 index 000000000..472210e7a Binary files /dev/null and b/imgs/renders/27299.png differ diff --git a/imgs/renders/27301.png b/imgs/renders/27301.png new file mode 100644 index 000000000..9fa02961e Binary files /dev/null and b/imgs/renders/27301.png differ diff --git a/imgs/renders/27303.png b/imgs/renders/27303.png new file mode 100644 index 000000000..b0e1d2d6a Binary files /dev/null and b/imgs/renders/27303.png differ diff --git a/imgs/renders/27305.png b/imgs/renders/27305.png new file mode 100644 index 000000000..2a3ec2fe7 Binary files /dev/null and b/imgs/renders/27305.png differ diff --git a/imgs/renders/28310.png b/imgs/renders/28310.png new file mode 100644 index 000000000..a0236b7f8 Binary files /dev/null and b/imgs/renders/28310.png differ diff --git a/imgs/renders/2834.png b/imgs/renders/2834.png new file mode 100644 index 000000000..6521eb4bb Binary files /dev/null and b/imgs/renders/2834.png differ diff --git a/imgs/renders/28352.png b/imgs/renders/28352.png new file mode 100644 index 000000000..07299ca47 Binary files /dev/null and b/imgs/renders/28352.png differ diff --git a/imgs/renders/2836.png b/imgs/renders/2836.png new file mode 100644 index 000000000..5de0ff9e1 Binary files /dev/null and b/imgs/renders/2836.png differ diff --git a/imgs/renders/28606.png b/imgs/renders/28606.png new file mode 100644 index 000000000..38e28eb43 Binary files /dev/null and b/imgs/renders/28606.png differ diff --git a/imgs/renders/2863.png b/imgs/renders/2863.png new file mode 100644 index 000000000..5bff668ea Binary files /dev/null and b/imgs/renders/2863.png differ diff --git a/imgs/renders/28659.png b/imgs/renders/28659.png new file mode 100644 index 000000000..d1b3bf94f Binary files /dev/null and b/imgs/renders/28659.png differ diff --git a/imgs/renders/28661.png b/imgs/renders/28661.png new file mode 100644 index 000000000..9795bc555 Binary files /dev/null and b/imgs/renders/28661.png differ diff --git a/imgs/renders/28665.png b/imgs/renders/28665.png new file mode 100644 index 000000000..924573d58 Binary files /dev/null and b/imgs/renders/28665.png differ diff --git a/imgs/renders/28710.png b/imgs/renders/28710.png new file mode 100644 index 000000000..7733623fd Binary files /dev/null and b/imgs/renders/28710.png differ diff --git a/imgs/renders/28824.png b/imgs/renders/28824.png new file mode 100644 index 000000000..f8c159336 Binary files /dev/null and b/imgs/renders/28824.png differ diff --git a/imgs/renders/28844.png b/imgs/renders/28844.png new file mode 100644 index 000000000..66725befd Binary files /dev/null and b/imgs/renders/28844.png differ diff --git a/imgs/renders/28846.png b/imgs/renders/28846.png new file mode 100644 index 000000000..2899ac977 Binary files /dev/null and b/imgs/renders/28846.png differ diff --git a/imgs/renders/28848.png b/imgs/renders/28848.png new file mode 100644 index 000000000..c1e1dee52 Binary files /dev/null and b/imgs/renders/28848.png differ diff --git a/imgs/renders/28850.png b/imgs/renders/28850.png new file mode 100644 index 000000000..1699bb34d Binary files /dev/null and b/imgs/renders/28850.png differ diff --git a/imgs/renders/29248.png b/imgs/renders/29248.png new file mode 100644 index 000000000..ec5b084e7 Binary files /dev/null and b/imgs/renders/29248.png differ diff --git a/imgs/renders/29266.png b/imgs/renders/29266.png new file mode 100644 index 000000000..4af4dab00 Binary files /dev/null and b/imgs/renders/29266.png differ diff --git a/imgs/renders/29328.png b/imgs/renders/29328.png new file mode 100644 index 000000000..61eb23046 Binary files /dev/null and b/imgs/renders/29328.png differ diff --git a/imgs/renders/29330.png b/imgs/renders/29330.png new file mode 100644 index 000000000..93095170b Binary files /dev/null and b/imgs/renders/29330.png differ diff --git a/imgs/renders/29332.png b/imgs/renders/29332.png new file mode 100644 index 000000000..6f95ea7ec Binary files /dev/null and b/imgs/renders/29332.png differ diff --git a/imgs/renders/29334.png b/imgs/renders/29334.png new file mode 100644 index 000000000..3768a8239 Binary files /dev/null and b/imgs/renders/29334.png differ diff --git a/imgs/renders/29336.png b/imgs/renders/29336.png new file mode 100644 index 000000000..fe3e143cb Binary files /dev/null and b/imgs/renders/29336.png differ diff --git a/imgs/renders/29337.png b/imgs/renders/29337.png new file mode 100644 index 000000000..fb10739d2 Binary files /dev/null and b/imgs/renders/29337.png differ diff --git a/imgs/renders/29340.png b/imgs/renders/29340.png new file mode 100644 index 000000000..e45301331 Binary files /dev/null and b/imgs/renders/29340.png differ diff --git a/imgs/renders/29344.png b/imgs/renders/29344.png new file mode 100644 index 000000000..db9d7dd98 Binary files /dev/null and b/imgs/renders/29344.png differ diff --git a/imgs/renders/2998.png b/imgs/renders/2998.png new file mode 100644 index 000000000..e8a952550 Binary files /dev/null and b/imgs/renders/2998.png differ diff --git a/imgs/renders/29984.png b/imgs/renders/29984.png new file mode 100644 index 000000000..39f7181a0 Binary files /dev/null and b/imgs/renders/29984.png differ diff --git a/imgs/renders/29986.png b/imgs/renders/29986.png new file mode 100644 index 000000000..692156e32 Binary files /dev/null and b/imgs/renders/29986.png differ diff --git a/imgs/renders/29988.png b/imgs/renders/29988.png new file mode 100644 index 000000000..5db8690a8 Binary files /dev/null and b/imgs/renders/29988.png differ diff --git a/imgs/renders/29990.png b/imgs/renders/29990.png new file mode 100644 index 000000000..7e896b739 Binary files /dev/null and b/imgs/renders/29990.png differ diff --git a/imgs/renders/30842.png b/imgs/renders/30842.png new file mode 100644 index 000000000..c899669dd Binary files /dev/null and b/imgs/renders/30842.png differ diff --git a/imgs/renders/32207.png b/imgs/renders/32207.png new file mode 100644 index 000000000..e716f18c6 Binary files /dev/null and b/imgs/renders/32207.png differ diff --git a/imgs/renders/32209.png b/imgs/renders/32209.png new file mode 100644 index 000000000..a63206040 Binary files /dev/null and b/imgs/renders/32209.png differ diff --git a/imgs/renders/32305.png b/imgs/renders/32305.png new file mode 100644 index 000000000..94159230f Binary files /dev/null and b/imgs/renders/32305.png differ diff --git a/imgs/renders/32307.png b/imgs/renders/32307.png new file mode 100644 index 000000000..768b306a6 Binary files /dev/null and b/imgs/renders/32307.png differ diff --git a/imgs/renders/32309.png b/imgs/renders/32309.png new file mode 100644 index 000000000..b4c76a4fd Binary files /dev/null and b/imgs/renders/32309.png differ diff --git a/imgs/renders/32311.png b/imgs/renders/32311.png new file mode 100644 index 000000000..c1d42f75a Binary files /dev/null and b/imgs/renders/32311.png differ diff --git a/imgs/renders/32788.png b/imgs/renders/32788.png new file mode 100644 index 000000000..ba194d5d4 Binary files /dev/null and b/imgs/renders/32788.png differ diff --git a/imgs/renders/32790.png b/imgs/renders/32790.png new file mode 100644 index 000000000..03c13307d Binary files /dev/null and b/imgs/renders/32790.png differ diff --git a/staticdata/icons/ships/32811.png b/imgs/renders/32811.png similarity index 100% rename from staticdata/icons/ships/32811.png rename to imgs/renders/32811.png diff --git a/imgs/renders/32840.png b/imgs/renders/32840.png new file mode 100644 index 000000000..f88af5e63 Binary files /dev/null and b/imgs/renders/32840.png differ diff --git a/imgs/renders/32842.png b/imgs/renders/32842.png new file mode 100644 index 000000000..793df6054 Binary files /dev/null and b/imgs/renders/32842.png differ diff --git a/imgs/renders/32844.png b/imgs/renders/32844.png new file mode 100644 index 000000000..243f17803 Binary files /dev/null and b/imgs/renders/32844.png differ diff --git a/imgs/renders/32846.png b/imgs/renders/32846.png new file mode 100644 index 000000000..4d3998a0c Binary files /dev/null and b/imgs/renders/32846.png differ diff --git a/imgs/renders/32848.png b/imgs/renders/32848.png new file mode 100644 index 000000000..8dfb6b407 Binary files /dev/null and b/imgs/renders/32848.png differ diff --git a/imgs/renders/32872.png b/imgs/renders/32872.png new file mode 100644 index 000000000..7a2b2c94e Binary files /dev/null and b/imgs/renders/32872.png differ diff --git a/imgs/renders/32874.png b/imgs/renders/32874.png new file mode 100644 index 000000000..27b4d8163 Binary files /dev/null and b/imgs/renders/32874.png differ diff --git a/imgs/renders/32876.png b/imgs/renders/32876.png new file mode 100644 index 000000000..51d86e566 Binary files /dev/null and b/imgs/renders/32876.png differ diff --git a/imgs/renders/32878.png b/imgs/renders/32878.png new file mode 100644 index 000000000..f10039bfd Binary files /dev/null and b/imgs/renders/32878.png differ diff --git a/imgs/renders/32880.png b/imgs/renders/32880.png new file mode 100644 index 000000000..ead70e4dd Binary files /dev/null and b/imgs/renders/32880.png differ diff --git a/imgs/renders/32983.png b/imgs/renders/32983.png new file mode 100644 index 000000000..9355c4ae1 Binary files /dev/null and b/imgs/renders/32983.png differ diff --git a/imgs/renders/32985.png b/imgs/renders/32985.png new file mode 100644 index 000000000..24627af58 Binary files /dev/null and b/imgs/renders/32985.png differ diff --git a/imgs/renders/32987.png b/imgs/renders/32987.png new file mode 100644 index 000000000..f7d772e7e Binary files /dev/null and b/imgs/renders/32987.png differ diff --git a/imgs/renders/32989.png b/imgs/renders/32989.png new file mode 100644 index 000000000..442bff292 Binary files /dev/null and b/imgs/renders/32989.png differ diff --git a/imgs/renders/33079.png b/imgs/renders/33079.png new file mode 100644 index 000000000..7ca9710f3 Binary files /dev/null and b/imgs/renders/33079.png differ diff --git a/imgs/renders/33081.png b/imgs/renders/33081.png new file mode 100644 index 000000000..17b51be28 Binary files /dev/null and b/imgs/renders/33081.png differ diff --git a/imgs/renders/33083.png b/imgs/renders/33083.png new file mode 100644 index 000000000..b3a7c864e Binary files /dev/null and b/imgs/renders/33083.png differ diff --git a/imgs/renders/33151.png b/imgs/renders/33151.png new file mode 100644 index 000000000..18c5e8586 Binary files /dev/null and b/imgs/renders/33151.png differ diff --git a/imgs/renders/33153.png b/imgs/renders/33153.png new file mode 100644 index 000000000..66ca96d61 Binary files /dev/null and b/imgs/renders/33153.png differ diff --git a/imgs/renders/33155.png b/imgs/renders/33155.png new file mode 100644 index 000000000..ee90152b4 Binary files /dev/null and b/imgs/renders/33155.png differ diff --git a/imgs/renders/33157.png b/imgs/renders/33157.png new file mode 100644 index 000000000..80c59b942 Binary files /dev/null and b/imgs/renders/33157.png differ diff --git a/imgs/renders/33395.png b/imgs/renders/33395.png new file mode 100644 index 000000000..d3d1842aa Binary files /dev/null and b/imgs/renders/33395.png differ diff --git a/imgs/renders/33397.png b/imgs/renders/33397.png new file mode 100644 index 000000000..8d080a34d Binary files /dev/null and b/imgs/renders/33397.png differ diff --git a/imgs/renders/33468.png b/imgs/renders/33468.png new file mode 100644 index 000000000..9b2441964 Binary files /dev/null and b/imgs/renders/33468.png differ diff --git a/imgs/renders/33470.png b/imgs/renders/33470.png new file mode 100644 index 000000000..bb2b12e2b Binary files /dev/null and b/imgs/renders/33470.png differ diff --git a/imgs/renders/33472.png b/imgs/renders/33472.png new file mode 100644 index 000000000..56872b5bc Binary files /dev/null and b/imgs/renders/33472.png differ diff --git a/imgs/renders/33513.png b/imgs/renders/33513.png new file mode 100644 index 000000000..8a222041d Binary files /dev/null and b/imgs/renders/33513.png differ diff --git a/imgs/renders/33553.png b/imgs/renders/33553.png new file mode 100644 index 000000000..395170c94 Binary files /dev/null and b/imgs/renders/33553.png differ diff --git a/imgs/renders/33673.png b/imgs/renders/33673.png new file mode 100644 index 000000000..095487d50 Binary files /dev/null and b/imgs/renders/33673.png differ diff --git a/imgs/renders/33675.png b/imgs/renders/33675.png new file mode 100644 index 000000000..d79b1f6a9 Binary files /dev/null and b/imgs/renders/33675.png differ diff --git a/imgs/renders/33697.png b/imgs/renders/33697.png new file mode 100644 index 000000000..4cb463e67 Binary files /dev/null and b/imgs/renders/33697.png differ diff --git a/imgs/renders/33816.png b/imgs/renders/33816.png new file mode 100644 index 000000000..8715a5186 Binary files /dev/null and b/imgs/renders/33816.png differ diff --git a/imgs/renders/33818.png b/imgs/renders/33818.png new file mode 100644 index 000000000..77abade92 Binary files /dev/null and b/imgs/renders/33818.png differ diff --git a/imgs/renders/33820.png b/imgs/renders/33820.png new file mode 100644 index 000000000..8fc227285 Binary files /dev/null and b/imgs/renders/33820.png differ diff --git a/staticdata/icons/ships/34151.png b/imgs/renders/34151.png similarity index 100% rename from staticdata/icons/ships/34151.png rename to imgs/renders/34151.png diff --git a/imgs/renders/34317.png b/imgs/renders/34317.png new file mode 100644 index 000000000..237a8a093 Binary files /dev/null and b/imgs/renders/34317.png differ diff --git a/imgs/renders/34328.png b/imgs/renders/34328.png new file mode 100644 index 000000000..90be0da56 Binary files /dev/null and b/imgs/renders/34328.png differ diff --git a/staticdata/icons/ships/34496.png b/imgs/renders/34496.png similarity index 100% rename from staticdata/icons/ships/34496.png rename to imgs/renders/34496.png diff --git a/imgs/renders/34562.png b/imgs/renders/34562.png new file mode 100644 index 000000000..6eb7f784b Binary files /dev/null and b/imgs/renders/34562.png differ diff --git a/imgs/renders/34590.png b/imgs/renders/34590.png new file mode 100644 index 000000000..f7f2b837b Binary files /dev/null and b/imgs/renders/34590.png differ diff --git a/staticdata/icons/ships/34828.png b/imgs/renders/34828.png similarity index 100% rename from staticdata/icons/ships/34828.png rename to imgs/renders/34828.png diff --git a/imgs/renders/3514.png b/imgs/renders/3514.png new file mode 100644 index 000000000..3f79fde1d Binary files /dev/null and b/imgs/renders/3514.png differ diff --git a/imgs/renders/3516.png b/imgs/renders/3516.png new file mode 100644 index 000000000..ba546bf57 Binary files /dev/null and b/imgs/renders/3516.png differ diff --git a/imgs/renders/3518.png b/imgs/renders/3518.png new file mode 100644 index 000000000..6c92c28e5 Binary files /dev/null and b/imgs/renders/3518.png differ diff --git a/imgs/renders/3532.png b/imgs/renders/3532.png new file mode 100644 index 000000000..774de8610 Binary files /dev/null and b/imgs/renders/3532.png differ diff --git a/staticdata/icons/ships/35683.png b/imgs/renders/35683.png similarity index 100% rename from staticdata/icons/ships/35683.png rename to imgs/renders/35683.png diff --git a/staticdata/icons/ships/35779.png b/imgs/renders/35779.png similarity index 100% rename from staticdata/icons/ships/35779.png rename to imgs/renders/35779.png diff --git a/staticdata/icons/ships/35781.png b/imgs/renders/35781.png similarity index 100% rename from staticdata/icons/ships/35781.png rename to imgs/renders/35781.png diff --git a/imgs/renders/3628.png b/imgs/renders/3628.png new file mode 100644 index 000000000..d14767948 Binary files /dev/null and b/imgs/renders/3628.png differ diff --git a/imgs/renders/3751.png b/imgs/renders/3751.png new file mode 100644 index 000000000..25d31c085 Binary files /dev/null and b/imgs/renders/3751.png differ diff --git a/imgs/renders/3753.png b/imgs/renders/3753.png new file mode 100644 index 000000000..96299eff7 Binary files /dev/null and b/imgs/renders/3753.png differ diff --git a/imgs/renders/3756.png b/imgs/renders/3756.png new file mode 100644 index 000000000..286f87705 Binary files /dev/null and b/imgs/renders/3756.png differ diff --git a/imgs/renders/3764.png b/imgs/renders/3764.png new file mode 100644 index 000000000..30e436b9b Binary files /dev/null and b/imgs/renders/3764.png differ diff --git a/imgs/renders/3766.png b/imgs/renders/3766.png new file mode 100644 index 000000000..a20f3b222 Binary files /dev/null and b/imgs/renders/3766.png differ diff --git a/imgs/renders/3768.png b/imgs/renders/3768.png new file mode 100644 index 000000000..19c279804 Binary files /dev/null and b/imgs/renders/3768.png differ diff --git a/imgs/renders/3878.png b/imgs/renders/3878.png new file mode 100644 index 000000000..03165e220 Binary files /dev/null and b/imgs/renders/3878.png differ diff --git a/imgs/renders/4005.png b/imgs/renders/4005.png new file mode 100644 index 000000000..25f1c60d5 Binary files /dev/null and b/imgs/renders/4005.png differ diff --git a/imgs/renders/4302.png b/imgs/renders/4302.png new file mode 100644 index 000000000..5e60581b7 Binary files /dev/null and b/imgs/renders/4302.png differ diff --git a/imgs/renders/4306.png b/imgs/renders/4306.png new file mode 100644 index 000000000..bc5bf6513 Binary files /dev/null and b/imgs/renders/4306.png differ diff --git a/imgs/renders/4308.png b/imgs/renders/4308.png new file mode 100644 index 000000000..f1ecddea3 Binary files /dev/null and b/imgs/renders/4308.png differ diff --git a/imgs/renders/4310.png b/imgs/renders/4310.png new file mode 100644 index 000000000..e7e69fe8d Binary files /dev/null and b/imgs/renders/4310.png differ diff --git a/imgs/renders/4363.png b/imgs/renders/4363.png new file mode 100644 index 000000000..4ee1a9805 Binary files /dev/null and b/imgs/renders/4363.png differ diff --git a/imgs/renders/4388.png b/imgs/renders/4388.png new file mode 100644 index 000000000..f0051fb34 Binary files /dev/null and b/imgs/renders/4388.png differ diff --git a/imgs/renders/582.png b/imgs/renders/582.png new file mode 100644 index 000000000..be73ab2ce Binary files /dev/null and b/imgs/renders/582.png differ diff --git a/imgs/renders/583.png b/imgs/renders/583.png new file mode 100644 index 000000000..42ef6096a Binary files /dev/null and b/imgs/renders/583.png differ diff --git a/imgs/renders/584.png b/imgs/renders/584.png new file mode 100644 index 000000000..6de0a47d4 Binary files /dev/null and b/imgs/renders/584.png differ diff --git a/imgs/renders/585.png b/imgs/renders/585.png new file mode 100644 index 000000000..de26b5eaa Binary files /dev/null and b/imgs/renders/585.png differ diff --git a/imgs/renders/586.png b/imgs/renders/586.png new file mode 100644 index 000000000..e5b842742 Binary files /dev/null and b/imgs/renders/586.png differ diff --git a/imgs/renders/587.png b/imgs/renders/587.png new file mode 100644 index 000000000..43de47eb2 Binary files /dev/null and b/imgs/renders/587.png differ diff --git a/imgs/renders/588.png b/imgs/renders/588.png new file mode 100644 index 000000000..c44615de7 Binary files /dev/null and b/imgs/renders/588.png differ diff --git a/imgs/renders/589.png b/imgs/renders/589.png new file mode 100644 index 000000000..b268af9fa Binary files /dev/null and b/imgs/renders/589.png differ diff --git a/imgs/renders/590.png b/imgs/renders/590.png new file mode 100644 index 000000000..7b359e91b Binary files /dev/null and b/imgs/renders/590.png differ diff --git a/imgs/renders/591.png b/imgs/renders/591.png new file mode 100644 index 000000000..ef4abc5b4 Binary files /dev/null and b/imgs/renders/591.png differ diff --git a/imgs/renders/592.png b/imgs/renders/592.png new file mode 100644 index 000000000..7de72e869 Binary files /dev/null and b/imgs/renders/592.png differ diff --git a/imgs/renders/593.png b/imgs/renders/593.png new file mode 100644 index 000000000..67a6fc638 Binary files /dev/null and b/imgs/renders/593.png differ diff --git a/imgs/renders/594.png b/imgs/renders/594.png new file mode 100644 index 000000000..bc860c5f7 Binary files /dev/null and b/imgs/renders/594.png differ diff --git a/imgs/renders/595.png b/imgs/renders/595.png new file mode 100644 index 000000000..cd0f17cbb Binary files /dev/null and b/imgs/renders/595.png differ diff --git a/imgs/renders/596.png b/imgs/renders/596.png new file mode 100644 index 000000000..0ce46a26c Binary files /dev/null and b/imgs/renders/596.png differ diff --git a/imgs/renders/597.png b/imgs/renders/597.png new file mode 100644 index 000000000..7ba60f5f2 Binary files /dev/null and b/imgs/renders/597.png differ diff --git a/imgs/renders/598.png b/imgs/renders/598.png new file mode 100644 index 000000000..b42bbe4bf Binary files /dev/null and b/imgs/renders/598.png differ diff --git a/imgs/renders/599.png b/imgs/renders/599.png new file mode 100644 index 000000000..0ecd493e0 Binary files /dev/null and b/imgs/renders/599.png differ diff --git a/imgs/renders/600.png b/imgs/renders/600.png new file mode 100644 index 000000000..04a9630b2 Binary files /dev/null and b/imgs/renders/600.png differ diff --git a/imgs/renders/601.png b/imgs/renders/601.png new file mode 100644 index 000000000..50268e50b Binary files /dev/null and b/imgs/renders/601.png differ diff --git a/imgs/renders/602.png b/imgs/renders/602.png new file mode 100644 index 000000000..cca90b00a Binary files /dev/null and b/imgs/renders/602.png differ diff --git a/imgs/renders/603.png b/imgs/renders/603.png new file mode 100644 index 000000000..0160d860d Binary files /dev/null and b/imgs/renders/603.png differ diff --git a/imgs/renders/604.png b/imgs/renders/604.png new file mode 100644 index 000000000..215cb2fdf Binary files /dev/null and b/imgs/renders/604.png differ diff --git a/imgs/renders/605.png b/imgs/renders/605.png new file mode 100644 index 000000000..0e322843f Binary files /dev/null and b/imgs/renders/605.png differ diff --git a/imgs/renders/606.png b/imgs/renders/606.png new file mode 100644 index 000000000..03cde2b64 Binary files /dev/null and b/imgs/renders/606.png differ diff --git a/imgs/renders/607.png b/imgs/renders/607.png new file mode 100644 index 000000000..4627955b5 Binary files /dev/null and b/imgs/renders/607.png differ diff --git a/imgs/renders/608.png b/imgs/renders/608.png new file mode 100644 index 000000000..293c8ddd1 Binary files /dev/null and b/imgs/renders/608.png differ diff --git a/imgs/renders/609.png b/imgs/renders/609.png new file mode 100644 index 000000000..905f774e9 Binary files /dev/null and b/imgs/renders/609.png differ diff --git a/imgs/renders/610.png b/imgs/renders/610.png new file mode 100644 index 000000000..d7c9eb4a7 Binary files /dev/null and b/imgs/renders/610.png differ diff --git a/imgs/renders/611.png b/imgs/renders/611.png new file mode 100644 index 000000000..fb9ef189d Binary files /dev/null and b/imgs/renders/611.png differ diff --git a/imgs/renders/612.png b/imgs/renders/612.png new file mode 100644 index 000000000..b578fc483 Binary files /dev/null and b/imgs/renders/612.png differ diff --git a/imgs/renders/613.png b/imgs/renders/613.png new file mode 100644 index 000000000..51e4f5702 Binary files /dev/null and b/imgs/renders/613.png differ diff --git a/imgs/renders/614.png b/imgs/renders/614.png new file mode 100644 index 000000000..bd9deb159 Binary files /dev/null and b/imgs/renders/614.png differ diff --git a/imgs/renders/615.png b/imgs/renders/615.png new file mode 100644 index 000000000..4a3f79048 Binary files /dev/null and b/imgs/renders/615.png differ diff --git a/imgs/renders/616.png b/imgs/renders/616.png new file mode 100644 index 000000000..f3c753d92 Binary files /dev/null and b/imgs/renders/616.png differ diff --git a/imgs/renders/617.png b/imgs/renders/617.png new file mode 100644 index 000000000..cbfb6aaeb Binary files /dev/null and b/imgs/renders/617.png differ diff --git a/imgs/renders/618.png b/imgs/renders/618.png new file mode 100644 index 000000000..143b5e12a Binary files /dev/null and b/imgs/renders/618.png differ diff --git a/imgs/renders/619.png b/imgs/renders/619.png new file mode 100644 index 000000000..66720d2c4 Binary files /dev/null and b/imgs/renders/619.png differ diff --git a/imgs/renders/620.png b/imgs/renders/620.png new file mode 100644 index 000000000..3301ef83c Binary files /dev/null and b/imgs/renders/620.png differ diff --git a/imgs/renders/621.png b/imgs/renders/621.png new file mode 100644 index 000000000..30058205e Binary files /dev/null and b/imgs/renders/621.png differ diff --git a/imgs/renders/622.png b/imgs/renders/622.png new file mode 100644 index 000000000..56ab0727f Binary files /dev/null and b/imgs/renders/622.png differ diff --git a/imgs/renders/623.png b/imgs/renders/623.png new file mode 100644 index 000000000..a6ab23cd7 Binary files /dev/null and b/imgs/renders/623.png differ diff --git a/imgs/renders/624.png b/imgs/renders/624.png new file mode 100644 index 000000000..424b6dc5d Binary files /dev/null and b/imgs/renders/624.png differ diff --git a/imgs/renders/625.png b/imgs/renders/625.png new file mode 100644 index 000000000..4473e1563 Binary files /dev/null and b/imgs/renders/625.png differ diff --git a/imgs/renders/626.png b/imgs/renders/626.png new file mode 100644 index 000000000..805da52a6 Binary files /dev/null and b/imgs/renders/626.png differ diff --git a/imgs/renders/627.png b/imgs/renders/627.png new file mode 100644 index 000000000..96935b402 Binary files /dev/null and b/imgs/renders/627.png differ diff --git a/imgs/renders/628.png b/imgs/renders/628.png new file mode 100644 index 000000000..0addfff6d Binary files /dev/null and b/imgs/renders/628.png differ diff --git a/imgs/renders/629.png b/imgs/renders/629.png new file mode 100644 index 000000000..8a89abd32 Binary files /dev/null and b/imgs/renders/629.png differ diff --git a/imgs/renders/630.png b/imgs/renders/630.png new file mode 100644 index 000000000..e717d450d Binary files /dev/null and b/imgs/renders/630.png differ diff --git a/imgs/renders/631.png b/imgs/renders/631.png new file mode 100644 index 000000000..6f3ccb4bd Binary files /dev/null and b/imgs/renders/631.png differ diff --git a/imgs/renders/632.png b/imgs/renders/632.png new file mode 100644 index 000000000..2bed3724d Binary files /dev/null and b/imgs/renders/632.png differ diff --git a/imgs/renders/633.png b/imgs/renders/633.png new file mode 100644 index 000000000..1e660a4ce Binary files /dev/null and b/imgs/renders/633.png differ diff --git a/imgs/renders/634.png b/imgs/renders/634.png new file mode 100644 index 000000000..9fde459f7 Binary files /dev/null and b/imgs/renders/634.png differ diff --git a/imgs/renders/635.png b/imgs/renders/635.png new file mode 100644 index 000000000..3a4756c5e Binary files /dev/null and b/imgs/renders/635.png differ diff --git a/imgs/renders/636.png b/imgs/renders/636.png new file mode 100644 index 000000000..5dbd04136 Binary files /dev/null and b/imgs/renders/636.png differ diff --git a/imgs/renders/637.png b/imgs/renders/637.png new file mode 100644 index 000000000..6e903aad1 Binary files /dev/null and b/imgs/renders/637.png differ diff --git a/imgs/renders/638.png b/imgs/renders/638.png new file mode 100644 index 000000000..39977563f Binary files /dev/null and b/imgs/renders/638.png differ diff --git a/imgs/renders/639.png b/imgs/renders/639.png new file mode 100644 index 000000000..bd93ddeb2 Binary files /dev/null and b/imgs/renders/639.png differ diff --git a/imgs/renders/640.png b/imgs/renders/640.png new file mode 100644 index 000000000..4f110078b Binary files /dev/null and b/imgs/renders/640.png differ diff --git a/imgs/renders/641.png b/imgs/renders/641.png new file mode 100644 index 000000000..8378106b6 Binary files /dev/null and b/imgs/renders/641.png differ diff --git a/imgs/renders/642.png b/imgs/renders/642.png new file mode 100644 index 000000000..ba5191b71 Binary files /dev/null and b/imgs/renders/642.png differ diff --git a/imgs/renders/643.png b/imgs/renders/643.png new file mode 100644 index 000000000..76f749614 Binary files /dev/null and b/imgs/renders/643.png differ diff --git a/imgs/renders/644.png b/imgs/renders/644.png new file mode 100644 index 000000000..b0f32d489 Binary files /dev/null and b/imgs/renders/644.png differ diff --git a/imgs/renders/645.png b/imgs/renders/645.png new file mode 100644 index 000000000..b73d4a5fb Binary files /dev/null and b/imgs/renders/645.png differ diff --git a/imgs/renders/647.png b/imgs/renders/647.png new file mode 100644 index 000000000..03bccad66 Binary files /dev/null and b/imgs/renders/647.png differ diff --git a/imgs/renders/648.png b/imgs/renders/648.png new file mode 100644 index 000000000..6e6c2e07c Binary files /dev/null and b/imgs/renders/648.png differ diff --git a/imgs/renders/649.png b/imgs/renders/649.png new file mode 100644 index 000000000..5f563e5ef Binary files /dev/null and b/imgs/renders/649.png differ diff --git a/imgs/renders/650.png b/imgs/renders/650.png new file mode 100644 index 000000000..3cbc9a066 Binary files /dev/null and b/imgs/renders/650.png differ diff --git a/imgs/renders/651.png b/imgs/renders/651.png new file mode 100644 index 000000000..ac6525bf7 Binary files /dev/null and b/imgs/renders/651.png differ diff --git a/imgs/renders/652.png b/imgs/renders/652.png new file mode 100644 index 000000000..8b36a8bb9 Binary files /dev/null and b/imgs/renders/652.png differ diff --git a/imgs/renders/653.png b/imgs/renders/653.png new file mode 100644 index 000000000..848d2279f Binary files /dev/null and b/imgs/renders/653.png differ diff --git a/imgs/renders/654.png b/imgs/renders/654.png new file mode 100644 index 000000000..96d5ebbb9 Binary files /dev/null and b/imgs/renders/654.png differ diff --git a/imgs/renders/655.png b/imgs/renders/655.png new file mode 100644 index 000000000..0fee83438 Binary files /dev/null and b/imgs/renders/655.png differ diff --git a/imgs/renders/656.png b/imgs/renders/656.png new file mode 100644 index 000000000..415bf1f90 Binary files /dev/null and b/imgs/renders/656.png differ diff --git a/imgs/renders/657.png b/imgs/renders/657.png new file mode 100644 index 000000000..8c7c21f90 Binary files /dev/null and b/imgs/renders/657.png differ diff --git a/imgs/renders/658.png b/imgs/renders/658.png new file mode 100644 index 000000000..400f3af9f Binary files /dev/null and b/imgs/renders/658.png differ diff --git a/imgs/renders/659.png b/imgs/renders/659.png new file mode 100644 index 000000000..757b4276c Binary files /dev/null and b/imgs/renders/659.png differ diff --git a/imgs/renders/660.png b/imgs/renders/660.png new file mode 100644 index 000000000..12e1db3cf Binary files /dev/null and b/imgs/renders/660.png differ diff --git a/imgs/renders/661.png b/imgs/renders/661.png new file mode 100644 index 000000000..85b4c690f Binary files /dev/null and b/imgs/renders/661.png differ diff --git a/imgs/renders/662.png b/imgs/renders/662.png new file mode 100644 index 000000000..85b4c690f Binary files /dev/null and b/imgs/renders/662.png differ diff --git a/imgs/renders/663.png b/imgs/renders/663.png new file mode 100644 index 000000000..7791cc462 Binary files /dev/null and b/imgs/renders/663.png differ diff --git a/imgs/renders/664.png b/imgs/renders/664.png new file mode 100644 index 000000000..85b4c690f Binary files /dev/null and b/imgs/renders/664.png differ diff --git a/imgs/renders/665.png b/imgs/renders/665.png new file mode 100644 index 000000000..85b4c690f Binary files /dev/null and b/imgs/renders/665.png differ diff --git a/imgs/renders/666.png b/imgs/renders/666.png new file mode 100644 index 000000000..85b4c690f Binary files /dev/null and b/imgs/renders/666.png differ diff --git a/imgs/renders/667.png b/imgs/renders/667.png new file mode 100644 index 000000000..7791cc462 Binary files /dev/null and b/imgs/renders/667.png differ diff --git a/imgs/renders/668.png b/imgs/renders/668.png new file mode 100644 index 000000000..757b4276c Binary files /dev/null and b/imgs/renders/668.png differ diff --git a/imgs/renders/669.png b/imgs/renders/669.png new file mode 100644 index 000000000..757b4276c Binary files /dev/null and b/imgs/renders/669.png differ diff --git a/imgs/renders/670.png b/imgs/renders/670.png new file mode 100644 index 000000000..2d29fda02 Binary files /dev/null and b/imgs/renders/670.png differ diff --git a/imgs/renders/671.png b/imgs/renders/671.png new file mode 100644 index 000000000..b46e01e38 Binary files /dev/null and b/imgs/renders/671.png differ diff --git a/imgs/renders/672.png b/imgs/renders/672.png new file mode 100644 index 000000000..a44ede102 Binary files /dev/null and b/imgs/renders/672.png differ diff --git a/imgs/renders/9854.png b/imgs/renders/9854.png new file mode 100644 index 000000000..23c97c9f4 Binary files /dev/null and b/imgs/renders/9854.png differ diff --git a/imgs/renders/9858.png b/imgs/renders/9858.png new file mode 100644 index 000000000..cb75651bd Binary files /dev/null and b/imgs/renders/9858.png differ diff --git a/imgs/renders/9860.png b/imgs/renders/9860.png new file mode 100644 index 000000000..bed3dea30 Binary files /dev/null and b/imgs/renders/9860.png differ diff --git a/imgs/renders/9862.png b/imgs/renders/9862.png new file mode 100644 index 000000000..23c97c9f4 Binary files /dev/null and b/imgs/renders/9862.png differ diff --git a/pyfa.py b/pyfa.py index 76b7ca336..c0d361dbb 100755 --- a/pyfa.py +++ b/pyfa.py @@ -20,6 +20,19 @@ import sys import re +import config + + +from optparse import OptionParser + +# Parse command line options +usage = "usage: %prog [--root]" +parser = OptionParser(usage=usage) +parser.add_option("-r", "--root", action="store_true", dest="rootsavedata", help="if you want pyfa to store its data in root folder, use this option", default=False) +parser.add_option("-w", "--wx28", action="store_true", dest="force28", help="Force usage of wxPython 2.8", default=False) +parser.add_option("-d", "--debug", action="store_true", dest="debug", help="Set logger to debug level.", default=False) + +(options, args) = parser.parse_args() if not hasattr(sys, 'frozen'): @@ -30,18 +43,17 @@ if not hasattr(sys, 'frozen'): try: import wxversion except ImportError: - print("Cannot find wxPython\nYou can download wxPython (2.8) from http://www.wxpython.org/") + print("Cannot find wxPython\nYou can download wxPython (2.8+) from http://www.wxpython.org/") sys.exit(1) + try: - wxversion.select('2.8') - except wxversion.VersionError: - try: - wxversion.ensureMinimal('2.8') - except wxversion.VersionError: - print("Installed wxPython version doesn't meet requirements.\nYou can download wxPython (2.8) from http://www.wxpython.org/") - sys.exit(1) + if options.force28 is True: + wxversion.select('2.8') else: - print("wxPython 2.8 not found; attempting to use newer version, expect errors") + wxversion.select(['3.0', '2.8']) + except wxversion.VersionError: + print "Installed wxPython version doesn't meet requirements.\nYou can download wxPython 2.8 or 3.0 from http://www.wxpython.org/" + sys.exit(1) try: import sqlalchemy @@ -62,22 +74,27 @@ if not hasattr(sys, 'frozen'): except ImportError: print("Cannot find sqlalchemy.\nYou can download sqlalchemy (0.6+) from http://www.sqlalchemy.org/") sys.exit(1) + + # check also for dateutil module installed. + try: + import dateutil.parser # Copied import statement from service/update.py + except ImportError: + print("Cannot find python-dateutil.\nYou can download python-dateutil from https://pypi.python.org/pypi/python-dateutil") + sys.exit(1) -from optparse import OptionParser if __name__ == "__main__": - # Parse command line options - usage = "usage: %prog [--root]" - parser = OptionParser(usage=usage) - parser.add_option("-r", "--root", action="store_true", dest="rootsavedata", help="if you want pyfa to store its data in root folder, use this option", default=False) - (options, args) = parser.parse_args() - - import config # Configure paths if options.rootsavedata is True: config.saveInRoot = True + + config.debug = options.debug config.defPaths() + # Basic logging initialization + import logging + logging.basicConfig() + # Import everything import wx import os diff --git a/scripts/dist.py b/scripts/dist.py index 8fe632255..43d3727a8 100755 --- a/scripts/dist.py +++ b/scripts/dist.py @@ -4,18 +4,26 @@ Script for generating distributables based on platform skeletons. User supplies path for pyfa code base, root skeleton directory, and where the builds go. The builds are automatically named depending on the pyfa config -values of `version` and `tag`. If it's a Stable release, the naming convention is: +values of `version` and `tag`. If it's a Stable release, the naming +convention is: + pyfa-pyfaversion-expansion-expversion-platform -If it is not Stable (tag=git), we determine if the pyfa code base includes the -git repo to use as an ID. If not, uses randomly generated 6-character ID. The -unstable naming convention: + +If it is not Stable (tag=git), we determine if the pyfa code base includes +the git repo to use as an ID. If not, uses randomly generated 6-character ID. +The unstable naming convention: + pyfa-YYYMMDD-id-platform -dist.py can also build the Windows installer provided that it has a path to Inno -Setup (and, for generating on non-Windows platforms, that WINE is installed). -To build the EXE file, `win` must be included in the platforms to be built. +dist.py can also build the Windows installer provided that it has a path to +Inno Setup (and, for generating on non-Windows platforms, that WINE is +installed). To build the EXE file, `win` must be included in the platforms to +be built. """ +#@todo: ensure build directory can be written to +# todo: default build and dist directories + from optparse import OptionParser import os.path import shutil @@ -25,6 +33,7 @@ import datetime import random import string import zipfile +import errno from subprocess import call class FileStub(): @@ -34,6 +43,25 @@ class FileStub(): def flush(self, *args): pass +i = 0 +def loginfo(path, names): + # Print out a "progress" and return directories / files to ignore + global i + i += 1 + if i % 10 == 0: + sys.stdout.write(".") + sys.stdout.flush() + return () + +def copyanything(src, dst): + try: + shutil.copytree(src, dst, ignore=loginfo) + except: # python >2.5 + try: + shutil.copy(src, dst) + except: + raise + def id_generator(size=6, chars=string.ascii_uppercase + string.digits): return ''.join(random.choice(chars) for x in range(size)) @@ -42,7 +70,7 @@ def zipdir(path, zip): for file in files: zip.write(os.path.join(root, file)) -skels = ['win', 'mac', 'src'] +skels = ['win', 'mac', 'src', 'mac-wx3'] iscc = "C:\Program Files (x86)\Inno Setup 5\ISCC.exe" # inno script location via wine if __name__ == "__main__": @@ -51,8 +79,7 @@ if __name__ == "__main__": parser.add_option("-s", "--skeleton", dest="skeleton", help="Location of Pyfa-skel directory") parser.add_option("-b", "--base", dest="base", help="Location of cleaned read-only base directory") parser.add_option("-d", "--destination", dest="destination", help="Where to copy our distributable") - parser.add_option("-p", "--platforms", dest="platforms", help="Comma-separated list of platforms to build", default="win,src,mac") - parser.add_option("-t", "--static", dest="static", help="Directory containing static files") + parser.add_option("-p", "--platforms", dest="platforms", help="Comma-separated list of platforms to build", default="win,src,mac,mac-wx3") parser.add_option("-q", "--quiet", dest="silent", action="store_true") parser.add_option("-w", "--winexe", dest="winexe", action="store_true", help="Build the Windows installer file (needs Inno Setup). Must include 'win' in platform options") parser.add_option("-z", "--zip", dest="zip", action="store_true", help="zip archive instead of tar") @@ -69,88 +96,112 @@ if __name__ == "__main__": options.platforms = options.platforms.split(",") - sys.path.append(options.base) - import config as pyfaconfig - for skel in skels: if skel not in options.platforms: continue print "\n======== %s ========"%skel - infoDict = {} + + info = {} + config = {} + setup = {} skeleton = os.path.expanduser(os.path.join(options.skeleton, skel)) - info = execfile(os.path.join(skeleton, "info.py"), infoDict) - dirName = infoDict["arcname"] + + execfile(os.path.join(options.base, "config.py"), config) + execfile(os.path.join(skeleton, "info.py"), info) + execfile(os.path.join(options.base, "setup.py"), setup) + + destination = os.path.expanduser(options.destination) + if not os.path.isdir(destination) or not os.access(destination, os.W_OK | os.X_OK): + print "Destination directory does not exist or is not writable: {}".format(destination) + sys.exit() + + dirName = info["arcname"] + nowdt = datetime.datetime.now() now = "%04d%02d%02d" % (nowdt.year, nowdt.month, nowdt.day) + git = False - if pyfaconfig.tag.lower() == "git": + if config['tag'].lower() == "git": try: # if there is a git repo associated with base, use master commit - with open(os.path.join(options.base,".git","refs","heads","master"), 'r') as f: + with open(os.path.join(options.base, ".git", "refs", "heads", "master"), 'r') as f: id = f.readline()[0:6] git = True except: # else, use custom ID id = id_generator() - fileName = "pyfa-%s-%s-%s" % (now, id, infoDict["os"]) + fileName = "pyfa-{}-{}-{}".format(now, id, info["os"]) else: - fileName = "pyfa-%s-%s-%s-%s" % (pyfaconfig.version, pyfaconfig.expansionName.lower(), pyfaconfig.expansionVersion, infoDict["os"]) + fileName = "pyfa-{}-{}-{}-{}".format( + config['version'], + config['expansionName'].lower(), + config['expansionVersion'], + info["os"] + ) - archiveName = "%s.%s"%(fileName, "zip" if options.zip else "tar.bz2") - dst = os.path.join(os.getcwd(), dirName) # tmp directory where files are copied + archiveName = "{}.{}".format(fileName, "zip" if options.zip else "tar.bz2") + tmpDir = os.path.join(os.getcwd(), dirName) # tmp directory where files are copied tmpFile = os.path.join(os.getcwd(), archiveName) - config = os.path.join(skeleton, "config.py") - destination = os.path.expanduser(options.destination) - - i = 0 - gitData = (".git", ".gitignore", ".gitmodules") - def loginfo(path, names): - global i - i += 1 - if i % 10 == 0: - sys.stdout.write(".") - sys.stdout.flush() - return gitData try: - print "Copying skeleton to ", dst - i = 0 - shutil.copytree(skeleton, dst, ignore=loginfo) + print "Copying skeleton to ", tmpDir + shutil.copytree(skeleton, tmpDir, ignore=loginfo) print - base = os.path.join(dst, infoDict["base"]) - print "Copying base to ", base + source = os.path.expanduser(options.base) + root = os.path.join(tmpDir, info["base"]) - i = 0 - for stuff in os.listdir(os.path.expanduser(options.base)): - currSource = os.path.join(os.path.expanduser(options.base), stuff) - currDest = os.path.join(base, stuff) - if stuff in gitData: - continue - elif os.path.isdir(currSource): - shutil.copytree(currSource, currDest, ignore=loginfo) - else: - shutil.copy2(currSource, currDest) + # it is easier to work from the source directory + oldcwd = os.getcwd() + os.chdir(source) + + if info["library"]: + print "Injecting files into", info["library"] + libraryFile = os.path.join(root, info["library"]) + + with zipfile.ZipFile(libraryFile, 'a') as library: + for dir in setup['packages']: + zipdir(dir, library) + library.write('pyfa.py', 'pyfa__main__.py') + library.write('config.py') + else: # platforms where we don't have a packaged library + print "Copying modules into", root + for dir in setup['packages']: + copyanything(dir, os.path.join(root, dir)) + + # add some additional files to root dir for these platforms + # (hopefully can figure out a way later for OS X to use the one in + # it's library) + if skel == 'mac': + setup['include_files'] += ['pyfa.py'] + if skel == 'src': + setup['include_files'] += ['pyfa.py', 'config.py'] print + print "Copying included files:", - if os.path.exists(config): - print "Adding skeleton config file" - shutil.copy2(config, base) + for file in setup['include_files']: + print file, + copyanything(file, os.path.join(root, file)) + print + print "Creating images zipfile:", + os.chdir('imgs') + imagesFile = os.path.join(root, "imgs.zip") - if options.static is not None and os.path.exists(os.path.expanduser(options.static)): - print "Copying static data to ", os.path.join(base, "staticdata") - static = os.path.expanduser(options.static) - shutil.copytree(static, os.path.join(base, "staticdata"), ignore=loginfo) - - print "Copying done, making archive: ", tmpFile + with zipfile.ZipFile(imagesFile, 'w') as images: + for dir in setup['icon_dirs']: + print dir, + zipdir(dir, images) + os.chdir(oldcwd) + print + print "Creating archive" if options.zip: archive = zipfile.ZipFile(tmpFile, 'w', compression=zipfile.ZIP_DEFLATED) zipdir(dirName, archive) archive.close() else: archive = tarfile.open(tmpFile, "w:bz2") - archive.add(dst, arcname=infoDict["arcname"]) + archive.add(tmpDir, arcname=info["arcname"]) archive.close() print "Moving archive to ", destination @@ -159,22 +210,22 @@ if __name__ == "__main__": if "win" in skel and options.winexe: print "Compiling EXE" - if pyfaconfig.tag.lower() == "git": + if config['tag'].lower() == "git": if git: # if git repo info available, use git commit expansion = "git-%s"%(id) else: # if there is no git repo, use timestamp expansion = now else: # if code is Stable, use expansion name - expansion = "%s %s"%(pyfaconfig.expansionName, pyfaconfig.expansionVersion), + expansion = "%s %s"%(config['expansionName'], config['expansionVersion']), calllist = ["wine"] if 'win' not in sys.platform else [] call(calllist + [ iscc, - os.path.join(os.path.dirname(__file__), "pyfa-setup.iss"), - "/dMyAppVersion=%s"%(pyfaconfig.version), + "pyfa-setup.iss", + "/dMyAppVersion=%s"%(config['version']), "/dMyAppExpansion=%s"%(expansion), - "/dMyAppDir=%s"%dst, + "/dMyAppDir=pyfa", "/dMyOutputDir=%s"%destination, "/dMyOutputFile=%s"%fileName]) #stdout=devnull, stderr=devnull @@ -186,11 +237,14 @@ if __name__ == "__main__": finally: print "Deleting tmp files\n" try: - try: - shutil.rmtree("dist") # Inno dir - except: - pass - shutil.rmtree(dst) + shutil.rmtree("dist") # Inno dir + except: + pass + try: + shutil.rmtree(tmpDir) + except: + pass + try: os.unlink(tmpFile) except: pass diff --git a/scripts/effectUsedBy.py b/scripts/effectUsedBy.py index b9ee818b9..7c4a8f493 100755 --- a/scripts/effectUsedBy.py +++ b/scripts/effectUsedBy.py @@ -65,8 +65,8 @@ effects_path = os.path.join(script_dir, "..", "eos", "effects") usage = "usage: %prog --database=DB [--debug=DEBUG]" parser = OptionParser(usage=usage) parser.add_option("-d", "--database", help="path to eve cache data dump in \ - sqlite format, default to eve database file included in pyfa (../staticdata/eve.db)", - type="string", default=os.path.join(script_dir, "..", "staticdata", "eve.db")) + sqlite format, default to eve database file included in pyfa (../eve.db)", + type="string", default=os.path.join(script_dir, "..", "eve.db")) parser.add_option("-e", "--effects", help="explicit comma-separated list of \ effects to process", type="string", default="") parser.add_option("-r", "--remove", help="remove effect files that are not \ diff --git a/scripts/findNonMarket.py b/scripts/findNonMarket.py index 83d5f328e..9568b5ba2 100755 --- a/scripts/findNonMarket.py +++ b/scripts/findNonMarket.py @@ -8,7 +8,7 @@ import sqlite3 script_dir = os.path.dirname(unicode(__file__, sys.getfilesystemencoding())) # Connect to database and set up cursor -db = sqlite3.connect(os.path.join(script_dir, "..", "staticdata", "eve.db")) +db = sqlite3.connect(os.path.join(script_dir, "..", "eve.db")) cursor = db.cursor() # Queries to get raw data diff --git a/scripts/icons_update.py b/scripts/icons_update.py index 1ab128c4d..1382b4e67 100644 --- a/scripts/icons_update.py +++ b/scripts/icons_update.py @@ -19,8 +19,8 @@ args = parser.parse_args() script_dir = os.path.dirname(os.path.abspath(__file__)) -db_path = os.path.abspath(os.path.join(script_dir, '..', 'staticdata', 'eve.db')) -icons_dir = os.path.abspath(os.path.join(script_dir, '..', 'staticdata', 'icons')) +db_path = os.path.abspath(os.path.join(script_dir, '..', 'eve.db')) +icons_dir = os.path.abspath(os.path.join(script_dir, '..', 'imgs', 'icons')) export_dir = os.path.abspath(os.path.expanduser(os.path.join(args.icons, 'items'))) diff --git a/scripts/itemDiff.py b/scripts/itemDiff.py index 6f63a5cf1..a0aaa9672 100755 --- a/scripts/itemDiff.py +++ b/scripts/itemDiff.py @@ -32,7 +32,7 @@ import sqlite3 import sys script_dir = os.path.dirname(__file__) -default_old = os.path.join(script_dir, "..", "staticdata", "eve.db") +default_old = os.path.join(script_dir, "..", "eve.db") def main(old, new, groups=True, effects=True, attributes=True, renames=True): # Open both databases and get their cursors @@ -103,7 +103,7 @@ def main(old, new, groups=True, effects=True, attributes=True, renames=True): if implementedtag: print("\n[{0}] \"{1}\"\n[{2}] \"{3}\"".format(geteffst(couple[0]), couple[0], geteffst(couple[1]), couple[1])) else: - print("\n\"{0}\"\n\"{1}\"".format(couple[0], couple[1])) + print(" \"{0}\": \"{1}\",".format(couple[0], couple[1])) groupcats = {} def getgroupcat(grp): @@ -507,4 +507,4 @@ if __name__ == "__main__": parser.add_argument("-r", "--norenames", action="store_false", default=True, dest="renames", help="don't show list of renamed data") args = parser.parse_args() - main(args.old, args.new, args.groups, args.effects, args.attributes, args.renames) \ No newline at end of file + main(args.old, args.new, args.groups, args.effects, args.attributes, args.renames) diff --git a/scripts/prep_data.py b/scripts/prep_data.py index 980beb4c8..823b4d037 100644 --- a/scripts/prep_data.py +++ b/scripts/prep_data.py @@ -62,27 +62,25 @@ if not args.nojson: pickle_miner = ResourcePickleMiner(rvr) trans = Translator(pickle_miner) bulkdata_miner = BulkdataMiner(rvr, trans) - staticcache_miner = StaticdataCacheMiner(eve_path, trans) - + staticcache_miner = ResourceStaticCacheMiner(rvr, trans) miners = ( MetadataMiner(eve_path), bulkdata_miner, - TraitMiner(staticcache_miner, bulkdata_miner, trans), - SqliteMiner(eve_path, trans), staticcache_miner, - #CachedCallsMiner(rvr, trans), + TraitMiner(staticcache_miner, bulkdata_miner, trans), + SqliteMiner(rvr.paths.root, trans), + CachedCallsMiner(rvr, trans), pickle_miner ) - writers = ( JsonWriter(dump_path, indent=2), ) list = "dgmexpressions,dgmattribs,dgmeffects,dgmtypeattribs,dgmtypeeffects,"\ "dgmunits,icons,invcategories,invgroups,invmetagroups,invmetatypes,"\ - "invtypes,mapbulk_marketGroups,phbmetadata,phbtraits,fsdTypeOverrides"\ - "evegroups,evetypes" + "invtypes,mapbulk_marketGroups,phbmetadata,phbtraits,fsdTypeOverrides,"\ + "evegroups,evetypes,evecategories" FlowManager(miners, writers).run(list, "multi") @@ -100,7 +98,7 @@ jsonToSql.main("sqlite:///"+db_file, dump_path) ### Diff generation import itemDiff diff_file = os.path.join(dump_path, "diff.txt") -old_db = os.path.join(script_path, "..", "staticdata", "eve.db") +old_db = os.path.join(script_path, "..", "eve.db") header("Generating DIFF", diff_file) old_stdout = sys.stdout diff --git a/scripts/pyfa-setup.iss b/scripts/pyfa-setup.iss index 588add45a..235ed06f1 100644 --- a/scripts/pyfa-setup.iss +++ b/scripts/pyfa-setup.iss @@ -5,10 +5,10 @@ ; we do some #ifdef conditionals because automated compilation passes these as arguments #ifndef MyAppVersion - #define MyAppVersion "1.3.0" + #define MyAppVersion "1.15.0" #endif #ifndef MyAppExpansion - #define MyAppExpansion "Crius 1.0" + #define MyAppExpansion "Vanguard 1.0" #endif ; Other config @@ -18,8 +18,11 @@ #define MyAppURL "https://forums.eveonline.com/default.aspx?g=posts&t=247609&p=1" #define MyAppExeName "pyfa.exe" +; What version starts with the new structure (1.x.0). This is used to determine if we run directory structure cleanup +#define VersionFlag 16 + #ifndef MyOutputFile - #define MyOutputFile LowerCase(StringChange(MyAppName+'-'+MyAppVersion+'-'+MyAppExpansion+'-win', " ", "-")) + #define MyOutputFile LowerCase(StringChange(MyAppName+'-'+MyAppVersion+'-'+MyAppExpansion+'-win-wx3', " ", "-")) #endif #ifndef MyAppDir #define MyAppDir "pyfa" @@ -43,7 +46,7 @@ AppUpdatesURL={#MyAppURL} DefaultDirName={pf}\{#MyAppName} DefaultGroupName={#MyAppName} AllowNoIcons=yes -LicenseFile={#MyAppDir}\gpl.txt +LicenseFile={#MyAppDir}\LICENSE OutputDir={#MyOutputDir} OutputBaseFilename={#MyOutputFile} SetupIconFile={#MyAppDir}\pyfa.ico @@ -74,8 +77,13 @@ Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Fil Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent [InstallDelete] -Type: files; Name: "{app}\sqlalchemy.cprocessors.pyd" -Type: files; Name: "{app}\sqlalchemy.cresultproxy.pyd" +; These will delete left over generated files from 1.14 and below +Type: filesandordirs; Name: "{app}\eos" +Type: filesandordirs; Name: "{app}\gui" +Type: filesandordirs; Name: "{app}\service" +Type: filesandordirs; Name: "{app}\utils" +Type: files; Name: "{app}\*.pyo" +Type: files; Name: "{app}\*.pyc" [Code] @@ -105,4 +113,52 @@ begin begin Result := ''; end -end; \ No newline at end of file +end; + +function GetUninstallString: string; +var + sUnInstPath: string; + sUnInstallString: String; +begin + Result := ''; + sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{{3DA39096-C08D-49CD-90E0-1D177F32C8AA}_is1'); //Your App GUID/ID + sUnInstallString := ''; + if not RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then + RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString); + Result := sUnInstallString; +end; + +function IsUpgrade: Boolean; +begin + Result := (GetUninstallString() <> ''); +end; + +function InitializeSetup: Boolean; +var + V: Integer; + iResultCode: Integer; + sUnInstallString: string; + iOldVersion: Cardinal; +begin + Result := True; // in case when no previous version is found + if RegValueExists(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\{3DA39096-C08D-49CD-90E0-1D177F32C8AA}_is1', 'UninstallString') then //Your App GUID/ID + begin + RegQueryDWordValue(HKEY_LOCAL_MACHINE, + 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{3DA39096-C08D-49CD-90E0-1D177F32C8AA}_is1', + 'MinorVersion', iOldVersion); + if iOldVersion < {#VersionFlag} then // If old version with old structure is installed. + begin + V := MsgBox(ExpandConstant('An old version of pyfa was detected. Due to recent changes in the application structure, you must uninstall the previous version first. This will not affect your user data (saved fittings, characters, etc.). Do you want to uninstall now?'), mbInformation, MB_YESNO); //Custom Message if App installed + if V = IDYES then + begin + sUnInstallString := GetUninstallString(); + sUnInstallString := RemoveQuotes(sUnInstallString); + Exec(ExpandConstant(sUnInstallString), '', '', SW_SHOW, ewWaitUntilTerminated, iResultCode); + Result := True; //if you want to proceed after uninstall + //Exit; //if you want to quit after uninstall + end + else + Result := False; //when older version present and not uninstalled + end; + end; +end; diff --git a/scripts/renders_update.py b/scripts/renders_update.py index ffa488e9f..b3c42e5fb 100644 --- a/scripts/renders_update.py +++ b/scripts/renders_update.py @@ -19,8 +19,8 @@ args = parser.parse_args() script_dir = os.path.dirname(os.path.abspath(__file__)) -db_path = os.path.abspath(os.path.join(script_dir, '..', 'staticdata', 'eve.db')) -icons_dir = os.path.abspath(os.path.join(script_dir, '..', 'staticdata', 'icons', 'ships')) +db_path = os.path.abspath(os.path.join(script_dir, '..', 'eve.db')) +icons_dir = os.path.abspath(os.path.join(script_dir, '..', 'imgs', 'renders')) export_dir = os.path.abspath(os.path.expanduser(args.renders)) diff --git a/service/__init__.py b/service/__init__.py index 8e9e9f6f5..e7e0286d4 100644 --- a/service/__init__.py +++ b/service/__init__.py @@ -10,3 +10,9 @@ from service.update import Update from service.price import Price from service.network import Network from service.eveapi import EVEAPIConnection, ParseXML + +import wx +if not 'wxMac' in wx.PlatformInfo or ('wxMac' in wx.PlatformInfo and wx.VERSION >= (3,0)): + from service.pycrest import EVE + from service.server import StoppableHTTPServer, AuthHandler + from service.crest import Crest diff --git a/service/conversions/__init__.py b/service/conversions/__init__.py index c452fb682..c9ee794c3 100644 --- a/service/conversions/__init__.py +++ b/service/conversions/__init__.py @@ -7,7 +7,7 @@ item's name. The name of the file is usually arbitrary unless it's used in logic elsewhere (in which case can be accessed with packs[name]) """ -import os +import pkgutil # init parent dict all = {} @@ -15,10 +15,10 @@ all = {} # init container to store the separate conversion packs in case we need them packs = {} -for filename in os.listdir(os.path.dirname(__file__)): - basename, extension = filename.rsplit('.', 1) - if extension == "py" and basename not in ("__init__",): - conversionPack = __import__("%s.%s"%(__name__, basename), fromlist=True) - all.update(conversionPack.CONVERSIONS) - packs[basename] = conversionPack.CONVERSIONS +prefix = __name__ + "." +for importer, modname, ispkg in pkgutil.iter_modules(__path__, prefix): + conversionPack = __import__(modname, fromlist="dummy") + all.update(conversionPack.CONVERSIONS) + modname_tail = modname.rsplit('.', 1)[-1] + packs[modname_tail] = conversionPack.CONVERSIONS diff --git a/service/conversions/releaseParallax.py b/service/conversions/releaseParallax.py new file mode 100644 index 000000000..070962aeb --- /dev/null +++ b/service/conversions/releaseParallax.py @@ -0,0 +1,174 @@ +""" +Conversion pack for Parallax renames +""" + +CONVERSIONS = { + # Renamed items + "Basic Thermic Plating": "Basic Thermal Plating", + "Thermic Plating I": "Thermal Plating I", + "Thermic Plating II": "Thermal Plating II", + "Basic Thermic Dissipation Amplifier": "Basic Thermal Dissipation Amplifier", + "Thermic Dissipation Field I": "Thermal Dissipation Field I", + "Thermic Dissipation Field II": "Thermal Dissipation Field II", + "Thermic Dissipation Amplifier I": "Thermal Dissipation Amplifier I", + "Thermic Dissipation Amplifier II": "Thermal Dissipation Amplifier II", + "Supplemental Thermic Dissipation Amplifier": "Supplemental Thermal Dissipation Amplifier", + "Upgraded Thermic Dissipation Amplifier I": "Upgraded Thermal Dissipation Amplifier I", + "Limited Thermic Dissipation Field I": "Limited Thermal Dissipation Field I", + "Basic Energized Thermic Membrane": "Basic Energized Thermal Membrane", + "Energized Thermic Membrane I": "Energized Thermal Membrane I", + "Energized Thermic Membrane II": "Energized Thermal Membrane II", + "Armor Thermic Hardener I": "Armor Thermal Hardener I", + "Thermic Shield Compensation": "Thermal Shield Compensation", + "Armor Thermic Hardener II": "Armor Thermal Hardener II", + "Dread Guristas Thermic Dissipation Field": "Dread Guristas Thermal Dissipation Field", + "True Sansha Armor Thermic Hardener": "True Sansha Armor Thermal Hardener", + "Dark Blood Armor Thermic Hardener": "Dark Blood Armor Thermal Hardener", + "Domination Armor Thermic Hardener": "Domination Armor Thermal Hardener", + "Domination Thermic Dissipation Field": "Domination Thermal Dissipation Field", + "Domination Thermic Plating": "Domination Thermal Plating", + "True Sansha Thermic Plating": "True Sansha Thermal Plating", + "Dark Blood Thermic Plating": "Dark Blood Thermal Plating", + "Domination Thermic Dissipation Amplifier": "Domination Thermal Dissipation Amplifier", + "Dread Guristas Thermic Dissipation Amplifier": "Dread Guristas Thermal Dissipation Amplifier", + "Shadow Serpentis Thermic Plating": "Shadow Serpentis Thermal Plating", + "Shadow Serpentis Armor Thermic Hardener": "Shadow Serpentis Armor Thermal Hardener", + "Dark Blood Energized Thermic Membrane": "Dark Blood Energized Thermal Membrane", + "True Sansha Energized Thermic Membrane": "True Sansha Energized Thermal Membrane", + "Shadow Serpentis Energized Thermic Membrane": "Shadow Serpentis Energized Thermal Membrane", + "Mizuro's Modified Thermic Plating": "Mizuro's Modified Thermal Plating", + "Gotan's Modified Thermic Plating": "Gotan's Modified Thermal Plating", + "Hakim's Modified Thermic Dissipation Amplifier": "Hakim's Modified Thermal Dissipation Amplifier", + "Tobias' Modified Thermic Dissipation Amplifier": "Tobias' Modified Thermal Dissipation Amplifier", + "Kaikka's Modified Thermic Dissipation Amplifier": "Kaikka's Modified Thermal Dissipation Amplifier", + "Thon's Modified Thermic Dissipation Amplifier": "Thon's Modified Thermal Dissipation Amplifier", + "Vepas' Modified Thermic Dissipation Amplifier": "Vepas' Modified Thermal Dissipation Amplifier", + "Estamel's Modified Thermic Dissipation Amplifier": "Estamel's Modified Thermal Dissipation Amplifier", + "Kaikka's Modified Thermic Dissipation Field": "Kaikka's Modified Thermal Dissipation Field", + "Thon's Modified Thermic Dissipation Field": "Thon's Modified Thermal Dissipation Field", + "Vepas's Modified Thermic Dissipation Field": "Vepas's Modified Thermal Dissipation Field", + "Estamel's Modified Thermic Dissipation Field": "Estamel's Modified Thermal Dissipation Field", + "Brokara's Modified Thermic Plating": "Brokara's Modified Thermal Plating", + "Tairei's Modified Thermic Plating": "Tairei's Modified Thermal Plating", + "Selynne's Modified Thermic Plating": "Selynne's Modified Thermal Plating", + "Raysere's Modified Thermic Plating": "Raysere's Modified Thermal Plating", + "Vizan's Modified Thermic Plating": "Vizan's Modified Thermal Plating", + "Ahremen's Modified Thermic Plating": "Ahremen's Modified Thermal Plating", + "Chelm's Modified Thermic Plating": "Chelm's Modified Thermal Plating", + "Draclira's Modified Thermic Plating": "Draclira's Modified Thermal Plating", + "Brokara's Modified Energized Thermic Membrane": "Brokara's Modified Energized Thermal Membrane", + "Tairei's Modified Energized Thermic Membrane": "Tairei's Modified Energized Thermal Membrane", + "Selynne's Modified Energized Thermic Membrane": "Selynne's Modified Energized Thermal Membrane", + "Raysere's Modified Energized Thermic Membrane": "Raysere's Modified Energized Thermal Membrane", + "Vizan's Modified Energized Thermic Membrane": "Vizan's Modified Energized Thermal Membrane", + "Ahremen's Modified Energized Thermic Membrane": "Ahremen's Modified Energized Thermal Membrane", + "Chelm's Modified Energized Thermic Membrane": "Chelm's Modified Energized Thermal Membrane", + "Draclira's Modified Energized Thermic Membrane": "Draclira's Modified Energized Thermal Membrane", + "Brokara's Modified Armor Thermic Hardener": "Brokara's Modified Armor Thermal Hardener", + "Tairei's Modified Armor Thermic Hardener": "Tairei's Modified Armor Thermal Hardener", + "Selynne's Modified Armor Thermic Hardener": "Selynne's Modified Armor Thermal Hardener", + "Raysere's Modified Armor Thermic Hardener": "Raysere's Modified Armor Thermal Hardener", + "Vizan's Modified Armor Thermic Hardener": "Vizan's Modified Armor Thermal Hardener", + "Ahremen's Modified Armor Thermic Hardener": "Ahremen's Modified Armor Thermal Hardener", + "Chelm's Modified Armor Thermic Hardener": "Chelm's Modified Armor Thermal Hardener", + "Draclira's Modified Armor Thermic Hardener": "Draclira's Modified Armor Thermal Hardener", + "Brynn's Modified Thermic Plating": "Brynn's Modified Thermal Plating", + "Tuvan's Modified Thermic Plating": "Tuvan's Modified Thermal Plating", + "Setele's Modified Thermic Plating": "Setele's Modified Thermal Plating", + "Cormack's Modified Thermic Plating": "Cormack's Modified Thermal Plating", + "Brynn's Modified Energized Thermic Membrane": "Brynn's Modified Energized Thermal Membrane", + "Tuvan's Modified Energized Thermic Membrane": "Tuvan's Modified Energized Thermal Membrane", + "Setele's Modified Energized Thermic Membrane": "Setele's Modified Energized Thermal Membrane", + "Cormack's Modified Energized Thermic Membrane": "Cormack's Modified Energized Thermal Membrane", + "Brynn's Modified Armor Thermic Hardener": "Brynn's Modified Armor Thermal Hardener", + "Tuvan's Modified Armor Thermic Hardener": "Tuvan's Modified Armor Thermal Hardener", + "Setele's Modified Armor Thermic Hardener": "Setele's Modified Armor Thermal Hardener", + "Cormack's Modified Armor Thermic Hardener": "Cormack's Modified Armor Thermal Hardener", + "Shaqil's Modified Energized Thermic Membrane": "Shaqil's Modified Energized Thermal Membrane", + "Imperial Navy Thermic Plating": "Imperial Navy Thermal Plating", + "Republic Fleet Thermic Plating": "Republic Fleet Thermal Plating", + "Imperial Navy Armor Thermic Hardener": "Imperial Navy Armor Thermal Hardener", + "Republic Fleet Armor Thermic Hardener": "Republic Fleet Armor Thermal Hardener", + "Imperial Navy Energized Thermic Membrane": "Imperial Navy Energized Thermal Membrane", + "Federation Navy Energized Thermic Membrane": "Federation Navy Energized Thermal Membrane", + "Caldari Navy Thermic Dissipation Amplifier": "Caldari Navy Thermal Dissipation Amplifier", + "Republic Fleet Thermic Dissipation Amplifier": "Republic Fleet Thermal Dissipation Amplifier", + "Upgraded Thermic Plating I": "Upgraded Thermal Plating I", + "Limited Thermic Plating I": "Limited Thermal Plating I", + "Experimental Thermic Plating I": "Experimental Thermal Plating I", + "Prototype Thermic Plating I": "Prototype Thermal Plating I", + "Upgraded Armor Thermic Hardener I": "Upgraded Armor Thermal Hardener I", + "Limited Armor Thermic Hardener I": "Limited Armor Thermal Hardener I", + "Experimental Armor Thermic Hardener I": "Experimental Armor Thermal Hardener I", + "Prototype Armor Thermic Hardener I": "Prototype Armor Thermal Hardener I", + "Upgraded Energized Thermic Membrane I": "Upgraded Energized Thermal Membrane I", + "Limited Energized Thermic Membrane I": "Limited Energized Thermal Membrane I", + "Experimental Energized Thermic Membrane I": "Experimental Energized Thermal Membrane I", + "Prototype Energized Thermic Membrane I": "Prototype Energized Thermal Membrane I", + "Caldari Navy Thermic Dissipation Field": "Caldari Navy Thermal Dissipation Field", + "Ammatar Navy Armor Thermic Hardener": "Ammatar Navy Armor Thermal Hardener", + "Ammatar Navy Energized Thermic Membrane": "Ammatar Navy Energized Thermal Membrane", + "Federation Navy Thermic Plating": "Federation Navy Thermal Plating", + "Federation Navy Armor Thermic Hardener": "Federation Navy Armor Thermal Hardener", + "Corpii C-Type Thermic Plating": "Corpii C-Type Thermal Plating", + "Centii C-Type Thermic Plating": "Centii C-Type Thermal Plating", + "Corpii B-Type Thermic Plating": "Corpii B-Type Thermal Plating", + "Centii B-Type Thermic Plating": "Centii B-Type Thermal Plating", + "Corpii A-Type Thermic Plating": "Corpii A-Type Thermal Plating", + "Centii A-Type Thermic Plating": "Centii A-Type Thermal Plating", + "Coreli C-Type Thermic Plating": "Coreli C-Type Thermal Plating", + "Coreli B-Type Thermic Plating": "Coreli B-Type Thermal Plating", + "Coreli A-Type Thermic Plating": "Coreli A-Type Thermal Plating", + "Corelum C-Type Energized Thermic Membrane": "Corelum C-Type Energized Thermal Membrane", + "Corelum B-Type Energized Thermic Membrane": "Corelum B-Type Energized Thermal Membrane", + "Corelum A-Type Energized Thermic Membrane": "Corelum A-Type Energized Thermal Membrane", + "Corpum C-Type Energized Thermic Membrane": "Corpum C-Type Energized Thermal Membrane", + "Centum C-Type Energized Thermic Membrane": "Centum C-Type Energized Thermal Membrane", + "Corpum B-Type Energized Thermic Membrane": "Corpum B-Type Energized Thermal Membrane", + "Centum B-Type Energized Thermic Membrane": "Centum B-Type Energized Thermal Membrane", + "Corpum A-Type Energized Thermic Membrane": "Corpum A-Type Energized Thermal Membrane", + "Centum A-Type Energized Thermic Membrane": "Centum A-Type Energized Thermal Membrane", + "Corpus C-Type Armor Thermic Hardener": "Corpus C-Type Armor Thermal Hardener", + "Centus C-Type Armor Thermic Hardener": "Centus C-Type Armor Thermal Hardener", + "Corpus B-Type Armor Thermic Hardener": "Corpus B-Type Armor Thermal Hardener", + "Centus B-Type Armor Thermic Hardener": "Centus B-Type Armor Thermal Hardener", + "Corpus A-Type Armor Thermic Hardener": "Corpus A-Type Armor Thermal Hardener", + "Centus A-Type Armor Thermic Hardener": "Centus A-Type Armor Thermal Hardener", + "Corpus X-Type Armor Thermic Hardener": "Corpus X-Type Armor Thermal Hardener", + "Centus X-Type Armor Thermic Hardener": "Centus X-Type Armor Thermal Hardener", + "Core C-Type Armor Thermic Hardener": "Core C-Type Armor Thermal Hardener", + "Core B-Type Armor Thermic Hardener": "Core B-Type Armor Thermal Hardener", + "Core A-Type Armor Thermic Hardener": "Core A-Type Armor Thermal Hardener", + "Core X-Type Armor Thermic Hardener": "Core X-Type Armor Thermal Hardener", + "Pithum C-Type Thermic Dissipation Amplifier": "Pithum C-Type Thermal Dissipation Amplifier", + "Pithum B-Type Thermic Dissipation Amplifier": "Pithum B-Type Thermal Dissipation Amplifier", + "Pithum A-Type Thermic Dissipation Amplifier": "Pithum A-Type Thermal Dissipation Amplifier", + "Gistum C-Type Thermic Dissipation Amplifier": "Gistum C-Type Thermal Dissipation Amplifier", + "Gistum B-Type Thermic Dissipation Amplifier": "Gistum B-Type Thermal Dissipation Amplifier", + "Gistum A-Type Thermic Dissipation Amplifier": "Gistum A-Type Thermal Dissipation Amplifier", + "Gist C-Type Thermic Dissipation Field": "Gist C-Type Thermal Dissipation Field", + "Pith C-Type Thermic Dissipation Field": "Pith C-Type Thermal Dissipation Field", + "Gist B-Type Thermic Dissipation Field": "Gist B-Type Thermal Dissipation Field", + "Pith B-Type Thermic Dissipation Field": "Pith B-Type Thermal Dissipation Field", + "Gist A-Type Thermic Dissipation Field": "Gist A-Type Thermal Dissipation Field", + "Pith A-Type Thermic Dissipation Field": "Pith A-Type Thermal Dissipation Field", + "Gist X-Type Thermic Dissipation Field": "Gist X-Type Thermal Dissipation Field", + "Pith X-Type Thermic Dissipation Field": "Pith X-Type Thermal Dissipation Field", + "'High Noon' Thermic Dissipation Amplifier": "'High Noon' Thermal Dissipation Amplifier", + "'Desert Heat' Thermic Dissipation Field": "'Desert Heat' Thermal Dissipation Field", + "Thermic Armor Compensation": "Thermal Armor Compensation", + "'Moonshine' Energized Thermic Membrane I": "'Moonshine' Energized Thermal Membrane I", + "Large Anti-Thermic Pump I": "Large Anti-Thermal Pump I", + "Large Anti-Thermic Pump II": "Large Anti-Thermal Pump II", + "Khanid Navy Armor Thermic Hardener": "Khanid Navy Armor Thermal Hardener", + "Khanid Navy Energized Thermic Membrane": "Khanid Navy Energized Thermal Membrane", + "Khanid Navy Thermic Plating": "Khanid Navy Thermal Plating", + "Civilian Thermic Dissipation Field": "Civilian Thermal Dissipation Field", + "Small Anti-Thermic Pump I": "Small Anti-Thermal Pump I", + "Medium Anti-Thermic Pump I": "Medium Anti-Thermal Pump I", + "Capital Anti-Thermic Pump I": "Capital Anti-Thermal Pump I", + "Small Anti-Thermic Pump II": "Small Anti-Thermal Pump II", + "Medium Anti-Thermic Pump II": "Medium Anti-Thermal Pump II", + "Capital Anti-Thermic Pump II": "Capital Anti-Thermal Pump II", + "Ammatar Navy Thermic Plating": "Ammatar Navy Thermal Plating", +} diff --git a/service/crest.py b/service/crest.py new file mode 100644 index 000000000..b2771242b --- /dev/null +++ b/service/crest.py @@ -0,0 +1,219 @@ +import wx +import thread +import logging +import threading +import copy +import uuid +import time + +import eos.db +from eos.enum import Enum +from eos.types import CrestChar + +import service + +import gui.globalEvents as GE + +logger = logging.getLogger(__name__) + +class Servers(Enum): + TQ = 0 + SISI = 1 + +class CrestModes(Enum): + IMPLICIT = 0 + USER = 1 + +class Crest(): + + clientIDs = { + Servers.TQ: 'f9be379951c046339dc13a00e6be7704', + Servers.SISI: 'af87365240d644f7950af563b8418bad' + } + + # @todo: move this to settings + clientCallback = 'http://localhost:6461' + clientTest = True + + _instance = None + @classmethod + def getInstance(cls): + if cls._instance == None: + cls._instance = Crest() + + return cls._instance + + @classmethod + def restartService(cls): + # This is here to reseed pycrest values when changing preferences + # We first stop the server n case one is running, as creating a new + # instance doesn't do this. + if cls._instance.httpd: + cls._instance.stopServer() + cls._instance = Crest() + cls._instance.mainFrame.updateCrestMenus(type=cls._instance.settings.get('mode')) + return cls._instance + + def __init__(self): + """ + A note on login/logout events: the character login events happen + whenever a characters is logged into via the SSO, regardless of mod. + However, the mode should be send as an argument. Similarily, + the Logout even happens whenever the character is deleted for either + mode. The mode is sent as an argument, as well as the umber of + characters still in the cache (if USER mode) + """ + + self.settings = service.settings.CRESTSettings.getInstance() + self.scopes = ['characterFittingsRead', 'characterFittingsWrite'] + + # these will be set when needed + self.httpd = None + self.state = None + self.ssoTimer = None + + # Base EVE connection that is copied to all characters + self.eve = service.pycrest.EVE( + client_id=self.settings.get('clientID') if self.settings.get('mode') == CrestModes.USER else self.clientIDs.get(self.settings.get('server')), + api_key=self.settings.get('clientSecret') if self.settings.get('mode') == CrestModes.USER else None, + redirect_uri=self.clientCallback, + testing=self.isTestServer + ) + + self.implicitCharacter = None + + # The database cache does not seem to be working for some reason. Use + # this as a temporary measure + self.charCache = {} + + # need these here to post events + import gui.mainFrame # put this here to avoid loop + self.mainFrame = gui.mainFrame.MainFrame.getInstance() + + @property + def isTestServer(self): + return self.settings.get('server') == Servers.SISI + + def delCrestCharacter(self, charID): + char = eos.db.getCrestCharacter(charID) + del self.charCache[char.ID] + eos.db.remove(char) + wx.PostEvent(self.mainFrame, GE.SsoLogout(type=CrestModes.USER, numChars=len(self.charCache))) + + def delAllCharacters(self): + chars = eos.db.getCrestCharacters() + for char in chars: + eos.db.remove(char) + self.charCache = {} + wx.PostEvent(self.mainFrame, GE.SsoLogout(type=CrestModes.USER, numChars=0)) + + def getCrestCharacters(self): + chars = eos.db.getCrestCharacters() + # I really need to figure out that DB cache problem, this is ridiculous + chars2 = [self.getCrestCharacter(char.ID) for char in chars] + return chars2 + + def getCrestCharacter(self, charID): + ''' + Get character, and modify to include the eve connection + ''' + if self.settings.get('mode') == CrestModes.IMPLICIT: + if self.implicitCharacter.ID != charID: + raise ValueError("CharacterID does not match currently logged in character.") + return self.implicitCharacter + + if charID in self.charCache: + return self.charCache.get(charID) + + char = eos.db.getCrestCharacter(charID) + if char and not hasattr(char, "eve"): + char.eve = copy.deepcopy(self.eve) + char.eve.temptoken_authorize(refresh_token=char.refresh_token) + self.charCache[charID] = char + return char + + def getFittings(self, charID): + char = self.getCrestCharacter(charID) + return char.eve.get('%scharacters/%d/fittings/'%(char.eve._authed_endpoint,char.ID)) + + def postFitting(self, charID, json): + #@todo: new fitting ID can be recovered from Location header, ie: Location -> https://api-sisi.testeveonline.com/characters/1611853631/fittings/37486494/ + char = self.getCrestCharacter(charID) + return char.eve.post('%scharacters/%d/fittings/'%(char.eve._authed_endpoint,char.ID), data=json) + + def delFitting(self, charID, fittingID): + char = self.getCrestCharacter(charID) + return char.eve.delete('%scharacters/%d/fittings/%d/'%(char.eve._authed_endpoint, char.ID, fittingID)) + + def logout(self): + """Logout of implicit character""" + logging.debug("Character logout") + self.implicitCharacter = None + wx.PostEvent(self.mainFrame, GE.SsoLogout(type=self.settings.get('mode'))) + + def stopServer(self): + logging.debug("Stopping Server") + self.httpd.stop() + self.httpd = None + + def startServer(self): + logging.debug("Starting server") + if self.httpd: + self.stopServer() + time.sleep(1) # we need this to ensure that the previous get_request finishes, and then the socket will close + self.httpd = service.StoppableHTTPServer(('', 6461), service.AuthHandler) + thread.start_new_thread(self.httpd.serve, (self.handleLogin,)) + + self.state = str(uuid.uuid4()) + return self.eve.auth_uri(scopes=self.scopes, state=self.state) + + def handleLogin(self, message): + if not message: + return + + if message['state'][0] != self.state: + logger.warn("OAUTH state mismatch") + return + + logger.debug("Handling CREST login with: %s"%message) + + if 'access_token' in message: # implicit + eve = copy.deepcopy(self.eve) + eve.temptoken_authorize( + access_token=message['access_token'][0], + expires_in=int(message['expires_in'][0]) + ) + self.ssoTimer = threading.Timer(int(message['expires_in'][0]), self.logout) + self.ssoTimer.start() + + eve() + info = eve.whoami() + + logger.debug("Got character info: %s" % info) + + self.implicitCharacter = CrestChar(info['CharacterID'], info['CharacterName']) + self.implicitCharacter.eve = eve + #self.implicitCharacter.fetchImage() + + wx.PostEvent(self.mainFrame, GE.SsoLogin(type=CrestModes.IMPLICIT)) + elif 'code' in message: + eve = copy.deepcopy(self.eve) + eve.authorize(message['code'][0]) + eve() + info = eve.whoami() + + logger.debug("Got character info: %s" % info) + + # check if we have character already. If so, simply replace refresh_token + char = self.getCrestCharacter(int(info['CharacterID'])) + if char: + char.refresh_token = eve.refresh_token + else: + char = CrestChar(info['CharacterID'], info['CharacterName'], eve.refresh_token) + char.eve = eve + self.charCache[int(info['CharacterID'])] = char + eos.db.save(char) + + wx.PostEvent(self.mainFrame, GE.SsoLogin(type=CrestModes.USER)) + + self.stopServer() diff --git a/service/fit.py b/service/fit.py index e905dde9f..efbf95b8b 100644 --- a/service/fit.py +++ b/service/fit.py @@ -181,7 +181,8 @@ class Fit(object): # refresh any fits this fit is projected onto. Otherwise, if we have # already loaded those fits, they will not reflect the changes for projection in fit.projectedOnto.values(): - eos.db.saveddata_session.refresh(projection.victim_fit) + if projection.victim_fit in eos.db.saveddata_session: # GH issue #359 + eos.db.saveddata_session.refresh(projection.victim_fit) def copyFit(self, fitID): fit = eos.db.getFit(fitID) @@ -223,14 +224,19 @@ class Fit(object): eos.db.commit() self.recalc(fit, withBoosters=True) - def getFit(self, fitID, projected = False): + def getFit(self, fitID, projected=False, basic=False): ''' Gets fit from database, and populates fleet data. Projected is a recursion flag that is set to reduce recursions into projected fits + Basic is a flag to simply return the fit without any other processing ''' if fitID is None: return None fit = eos.db.getFit(fitID) + + if basic: + return fit + inited = getattr(fit, "inited", None) if inited is None or inited is False: @@ -814,6 +820,10 @@ class Fit(object): fit = eos.db.getFit(fitID) return Port.exportDna(fit) + def exportCrest(self, fitID, callback=None): + fit = eos.db.getFit(fitID) + return Port.exportCrest(fit, callback) + def exportXml(self, callback=None, *fitIDs): fits = map(lambda fitID: eos.db.getFit(fitID), fitIDs) return Port.exportXml(callback, *fits) diff --git a/service/market.py b/service/market.py index e0a77b8b3..9abed103c 100644 --- a/service/market.py +++ b/service/market.py @@ -116,12 +116,15 @@ class SearchWorkerThread(threading.Thread): while self.searchRequest is None: cv.wait() - request, callback = self.searchRequest + request, callback, filterOn = self.searchRequest self.searchRequest = None cv.release() sMkt = Market.getInstance() - # Rely on category data provided by eos as we don't hardcode them much in service - filter = eos.types.Category.name.in_(sMkt.SEARCH_CATEGORIES) + if filterOn: + # Rely on category data provided by eos as we don't hardcode them much in service + filter = eos.types.Category.name.in_(sMkt.SEARCH_CATEGORIES) + else: + filter=None results = eos.db.searchItems(request, where=filter, join=(eos.types.Item.group, eos.types.Group.category), eager=("icon", "group.category", "metaGroup", "metaGroup.parent")) @@ -133,9 +136,9 @@ class SearchWorkerThread(threading.Thread): items.add(item) wx.CallAfter(callback, items) - def scheduleSearch(self, text, callback): + def scheduleSearch(self, text, callback, filterOn=True): self.cv.acquire() - self.searchRequest = (text, callback) + self.searchRequest = (text, callback, filterOn) self.cv.notify() self.cv.release() @@ -665,9 +668,16 @@ class Market(): ships.add(item) return ships - def searchItems(self, name, callback): + def searchItems(self, name, callback, filterOn=True): """Find items according to given text pattern""" - self.searchWorkerThread.scheduleSearch(name, callback) + self.searchWorkerThread.scheduleSearch(name, callback, filterOn) + + def getItemsWithOverrides(self): + overrides = eos.db.getAllOverrides() + items = set() + for x in overrides: + items.add(x.item) + return list(items) def directAttrRequest(self, items, attribs): try: diff --git a/service/port.py b/service/port.py index 23721945f..fc7d308b7 100644 --- a/service/port.py +++ b/service/port.py @@ -25,6 +25,9 @@ from eos.types import State, Slot, Module, Cargo, Fit, Ship, Drone, Implant, Boo import service import wx import logging +import config +import collections +import json logger = logging.getLogger("pyfa.service.port") @@ -34,9 +37,63 @@ except ImportError: from utils.compat import OrderedDict EFT_SLOT_ORDER = [Slot.LOW, Slot.MED, Slot.HIGH, Slot.RIG, Slot.SUBSYSTEM] +INV_FLAGS = { + Slot.LOW: 11, + Slot.MED: 19, + Slot.HIGH: 27, + Slot.RIG: 92, + Slot.SUBSYSTEM: 125} class Port(object): """Service which houses all import/export format functions""" + @classmethod + def exportCrest(cls, ofit, callback=None): + # A few notes: + # max fit name length is 50 characters + # Most keys are created simply because they are required, but bogus data is okay + + nested_dict = lambda: collections.defaultdict(nested_dict) + fit = nested_dict() + sCrest = service.Crest.getInstance() + eve = sCrest.eve + + # max length is 50 characters + name = ofit.name[:47] + '...' if len(ofit.name) > 50 else ofit.name + fit['name'] = name + fit['ship']['href'] = "%stypes/%d/"%(eve._authed_endpoint, ofit.ship.item.ID) + fit['ship']['id'] = ofit.ship.item.ID + fit['ship']['name'] = '' + + fit['description'] = ""%ofit.ID + fit['items'] = [] + + slotNum = {} + for module in ofit.modules: + if module.isEmpty: + continue + + item = nested_dict() + slot = module.slot + + if slot == Slot.SUBSYSTEM: + # Order of subsystem matters based on this attr. See GH issue #130 + slot = int(module.getModifiedItemAttr("subSystemSlot")) + item['flag'] = slot + else: + if not slot in slotNum: + slotNum[slot] = INV_FLAGS[slot] + + item['flag'] = slotNum[slot] + slotNum[slot] += 1 + + item['quantity'] = 1 + item['type']['href'] = "%stypes/%d/"%(eve._authed_endpoint, module.item.ID) + item['type']['id'] = module.item.ID + item['type']['name'] = '' + + fit['items'].append(item) + + return json.dumps(fit) @classmethod def importAuto(cls, string, path=None, activeFit=None, callback=None, encoding=None): @@ -48,6 +105,10 @@ class Port(object): if re.match("<", firstLine): return "XML", cls.importXml(string, callback, encoding) + # If JSON-style start, parse os CREST/JSON + if firstLine[0] == '{': + return "JSON", (cls.importCrest(string),) + # If we've got source file name which is used to describe ship name # and first line contains something like [setup name], detect as eft config file if re.match("\[.*\]", firstLine) and path is not None: @@ -63,6 +124,47 @@ class Port(object): # Use DNA format for all other cases return "DNA", (cls.importDna(string),) + @staticmethod + def importCrest(str): + fit = json.loads(str) + sMkt = service.Market.getInstance() + + f = Fit() + f.name = fit['name'] + + try: + f.ship = Ship(sMkt.getItem(fit['ship']['id'])) + except: + return None + + items = fit['items'] + items.sort(key=lambda k: k['flag']) + for module in items: + try: + item = sMkt.getItem(module['type']['id'], eager="group.category") + if item.category.name == "Drone": + d = Drone(item) + d.amount = module['quantity'] + f.drones.append(d) + elif item.category.name == "Charge": + c = Cargo(item) + c.amount = module['quantity'] + f.cargo.append(c) + else: + try: + m = Module(item) + # When item can't be added to any slot (unknown item or just charge), ignore it + except ValueError: + continue + if m.isValidState(State.ACTIVE): + m.state = State.ACTIVE + + f.modules.append(m) + except: + continue + + return f + @staticmethod def importDna(string): sMkt = service.Market.getInstance() diff --git a/service/pycrest/__init__.py b/service/pycrest/__init__.py new file mode 100644 index 000000000..97244c957 --- /dev/null +++ b/service/pycrest/__init__.py @@ -0,0 +1,13 @@ +import logging + + +class NullHandler(logging.Handler): + def emit(self, record): + pass + +logger = logging.getLogger('pycrest') +logger.addHandler(NullHandler()) + +version = "0.0.1" + +from .eve import EVE \ No newline at end of file diff --git a/service/pycrest/compat.py b/service/pycrest/compat.py new file mode 100644 index 000000000..06320069b --- /dev/null +++ b/service/pycrest/compat.py @@ -0,0 +1,24 @@ +import sys + +PY3 = sys.version_info[0] == 3 + +if PY3: # pragma: no cover + string_types = str, + text_type = str + binary_type = bytes +else: # pragma: no cover + string_types = basestring, + text_type = unicode + binary_type = str + + +def text_(s, encoding='latin-1', errors='strict'): # pragma: no cover + if isinstance(s, binary_type): + return s.decode(encoding, errors) + return s + + +def bytes_(s, encoding='latin-1', errors='strict'): # pragma: no cover + if isinstance(s, text_type): + return s.encode(encoding, errors) + return s \ No newline at end of file diff --git a/service/pycrest/errors.py b/service/pycrest/errors.py new file mode 100644 index 000000000..33b9ca9ae --- /dev/null +++ b/service/pycrest/errors.py @@ -0,0 +1,2 @@ +class APIException(Exception): + pass \ No newline at end of file diff --git a/service/pycrest/eve.py b/service/pycrest/eve.py new file mode 100644 index 000000000..0e1585035 --- /dev/null +++ b/service/pycrest/eve.py @@ -0,0 +1,322 @@ +import os +import base64 +import time +import zlib + +import requests + +from . import version +from compat import bytes_, text_ +from errors import APIException +from requests.adapters import HTTPAdapter + +try: + from urllib.parse import urlparse, urlunparse, parse_qsl +except ImportError: # pragma: no cover + from urlparse import urlparse, urlunparse, parse_qsl + +try: + import pickle +except ImportError: # pragma: no cover + import cPickle as pickle + +try: + from urllib.parse import quote +except ImportError: # pragma: no cover + from urllib import quote +import logging +import re + +logger = logging.getLogger("pycrest.eve") +cache_re = re.compile(r'max-age=([0-9]+)') + + +class APICache(object): + def put(self, key, value): + raise NotImplementedError + + def get(self, key): + raise NotImplementedError + + def invalidate(self, key): + raise NotImplementedError + + +class FileCache(APICache): + def __init__(self, path): + self._cache = {} + self.path = path + if not os.path.isdir(self.path): + os.mkdir(self.path, 0o700) + + def _getpath(self, key): + return os.path.join(self.path, str(hash(key)) + '.cache') + + def put(self, key, value): + with open(self._getpath(key), 'wb') as f: + f.write(zlib.compress(pickle.dumps(value, -1))) + self._cache[key] = value + + def get(self, key): + if key in self._cache: + return self._cache[key] + + try: + with open(self._getpath(key), 'rb') as f: + return pickle.loads(zlib.decompress(f.read())) + except IOError as ex: + if ex.errno == 2: # file does not exist (yet) + return None + else: + raise + + def invalidate(self, key): + self._cache.pop(key, None) + + try: + os.unlink(self._getpath(key)) + except OSError as ex: + if ex.errno == 2: # does not exist + pass + else: + raise + + +class DictCache(APICache): + def __init__(self): + self._dict = {} + + def get(self, key): + return self._dict.get(key, None) + + def put(self, key, value): + self._dict[key] = value + + def invalidate(self, key): + self._dict.pop(key, None) + + +class APIConnection(object): + def __init__(self, additional_headers=None, user_agent=None, cache_dir=None, cache=None): + # Set up a Requests Session + session = requests.Session() + if additional_headers is None: + additional_headers = {} + if user_agent is None: + user_agent = "PyCrest/{0}".format(version) + session.headers.update({ + "User-Agent": user_agent, + "Accept": "application/json", + }) + session.headers.update(additional_headers) + session.mount('https://public-crest.eveonline.com', + HTTPAdapter()) + self._session = session + if cache: + if isinstance(cache, APICache): + self.cache = cache # Inherit from parents + elif isinstance(cache, type): + self.cache = cache() # Instantiate a new cache + elif cache_dir: + self.cache_dir = cache_dir + self.cache = FileCache(self.cache_dir) + else: + self.cache = DictCache() + + def get(self, resource, params=None): + logger.debug('Getting resource %s', resource) + if params is None: + params = {} + + # remove params from resource URI (needed for paginated stuff) + parsed_uri = urlparse(resource) + qs = parsed_uri.query + resource = urlunparse(parsed_uri._replace(query='')) + prms = {} + for tup in parse_qsl(qs): + prms[tup[0]] = tup[1] + + # params supplied to self.get() override parsed params + for key in params: + prms[key] = params[key] + + # check cache + key = (resource, frozenset(self._session.headers.items()), frozenset(prms.items())) + cached = self.cache.get(key) + if cached and cached['cached_until'] > time.time(): + logger.debug('Cache hit for resource %s (params=%s)', resource, prms) + return cached + elif cached: + logger.debug('Cache stale for resource %s (params=%s)', resource, prms) + self.cache.invalidate(key) + else: + logger.debug('Cache miss for resource %s (params=%s', resource, prms) + + logger.debug('Getting resource %s (params=%s)', resource, prms) + res = self._session.get(resource, params=prms) + if res.status_code != 200: + raise APIException("Got unexpected status code from server: %i" % res.status_code) + + ret = res.json() + + # cache result + expires = self._get_expires(res) + if expires > 0: + ret.update({'cached_until': time.time() + expires}) + self.cache.put(key, ret) + + return ret + + def _get_expires(self, response): + if 'Cache-Control' not in response.headers: + return 0 + if any([s in response.headers['Cache-Control'] for s in ['no-cache', 'no-store']]): + return 0 + match = cache_re.search(response.headers['Cache-Control']) + if match: + return int(match.group(1)) + return 0 + + +class EVE(APIConnection): + def __init__(self, **kwargs): + self.api_key = kwargs.pop('api_key', None) + self.client_id = kwargs.pop('client_id', None) + self.redirect_uri = kwargs.pop('redirect_uri', None) + if kwargs.pop('testing', False): + self._public_endpoint = "http://public-crest-sisi.testeveonline.com/" + self._authed_endpoint = "https://api-sisi.testeveonline.com/" + self._image_server = "https://image.testeveonline.com/" + self._oauth_endpoint = "https://sisilogin.testeveonline.com/oauth" + else: + self._public_endpoint = "https://public-crest.eveonline.com/" + self._authed_endpoint = "https://crest-tq.eveonline.com/" + self._image_server = "https://image.eveonline.com/" + self._oauth_endpoint = "https://login.eveonline.com/oauth" + self._endpoint = self._public_endpoint + self._cache = {} + self._data = None + self.token = None + self.refresh_token = None + self.expires = None + APIConnection.__init__(self, **kwargs) + + def __call__(self): + if not self._data: + self._data = APIObject(self.get(self._endpoint), self) + return self._data + + def __getattr__(self, item): + return self._data.__getattr__(item) + + def auth_uri(self, scopes=None, state=None): + s = [] if not scopes else scopes + grant_type = "token" if self.api_key is None else "code" + + return "%s/authorize?response_type=%s&redirect_uri=%s&client_id=%s%s%s" % ( + self._oauth_endpoint, + grant_type, + self.redirect_uri, + self.client_id, + "&scope=%s" % '+'.join(s) if scopes else '', + "&state=%s" % state if state else '' + ) + + def _authorize(self, params): + auth = text_(base64.b64encode(bytes_("%s:%s" % (self.client_id, self.api_key)))) + headers = {"Authorization": "Basic %s" % auth} + res = self._session.post("%s/token" % self._oauth_endpoint, params=params, headers=headers) + if res.status_code != 200: + raise APIException("Got unexpected status code from API: %i" % res.status_code) + return res.json() + + def set_auth_values(self, res): + self.__class__ = AuthedConnection + self.token = res['access_token'] + self.refresh_token = res['refresh_token'] + self.expires = int(time.time()) + res['expires_in'] + self._endpoint = self._authed_endpoint + self._session.headers.update({"Authorization": "Bearer %s" % self.token}) + + def authorize(self, code): + res = self._authorize(params={"grant_type": "authorization_code", "code": code}) + self.set_auth_values(res) + + def refr_authorize(self, refresh_token): + res = self._authorize(params={"grant_type": "refresh_token", "refresh_token": refresh_token}) + self.set_auth_values(res) + + def temptoken_authorize(self, access_token=None, expires_in=0, refresh_token=None): + self.set_auth_values({'access_token': access_token, + 'refresh_token': refresh_token, + 'expires_in': expires_in}) + + +class AuthedConnection(EVE): + + def __call__(self): + if not self._data: + self._data = APIObject(self.get(self._endpoint), self) + return self._data + + def whoami(self): + #if 'whoami' not in self._cache: + # print "Setting this whoami cache" + # self._cache['whoami'] = self.get("%s/verify" % self._oauth_endpoint) + return self.get("%s/verify" % self._oauth_endpoint) + + def get(self, resource, params=None): + if self.refresh_token and int(time.time()) >= self.expires: + self.refr_authorize(self.refresh_token) + return super(self.__class__, self).get(resource, params) + + def post(self, resource, data, params=None): + if self.refresh_token and int(time.time()) >= self.expires: + self.refr_authorize(self.refresh_token) + return self._session.post(resource, data=data, params=params) + + def delete(self, resource, params=None): + if self.refresh_token and int(time.time()) >= self.expires: + self.refr_authorize(self.refresh_token) + return self._session.delete(resource, params=params) + +class APIObject(object): + def __init__(self, parent, connection): + self._dict = {} + self.connection = connection + for k, v in parent.items(): + if type(v) is dict: + self._dict[k] = APIObject(v, connection) + elif type(v) is list: + self._dict[k] = self._wrap_list(v) + else: + self._dict[k] = v + + def _wrap_list(self, list_): + new = [] + for item in list_: + if type(item) is dict: + new.append(APIObject(item, self.connection)) + elif type(item) is list: + new.append(self._wrap_list(item)) + else: + new.append(item) + return new + + def __getattr__(self, item): + if item in self._dict: + return self._dict[item] + raise AttributeError(item) + + def __call__(self, **kwargs): + # Caching is now handled by APIConnection + if 'href' in self._dict: + return APIObject(self.connection.get(self._dict['href'], params=kwargs), self.connection) + else: + return self + + def __str__(self): # pragma: no cover + return self._dict.__str__() + + def __repr__(self): # pragma: no cover + return self._dict.__repr__() diff --git a/service/pycrest/weak_ciphers.py b/service/pycrest/weak_ciphers.py new file mode 100644 index 000000000..03de8321a --- /dev/null +++ b/service/pycrest/weak_ciphers.py @@ -0,0 +1,140 @@ +import datetime +import ssl +import sys +import warnings + +from requests.adapters import HTTPAdapter + +try: + from requests.packages import urllib3 + from requests.packages.urllib3.util import ssl_ + + from requests.packages.urllib3.exceptions import ( + SystemTimeWarning, + SecurityWarning, + ) + from requests.packages.urllib3.packages.ssl_match_hostname import \ + match_hostname +except: + import urllib3 + from urllib3.util import ssl_ + + from urllib3.exceptions import ( + SystemTimeWarning, + SecurityWarning, + ) + from urllib3.packages.ssl_match_hostname import \ + match_hostname + + + + +class WeakCiphersHTTPSConnection( + urllib3.connection.VerifiedHTTPSConnection): # pragma: no cover + + # Python versions >=2.7.9 and >=3.4.1 do not (by default) allow ciphers + # with MD5. Unfortunately, the CREST public server _only_ supports + # TLS_RSA_WITH_RC4_128_MD5 (as of 5 Jan 2015). The cipher list below is + # nearly identical except for allowing that cipher as a last resort (and + # excluding export versions of ciphers). + DEFAULT_CIPHERS = ( + 'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:' + 'ECDH+HIGH:DH+HIGH:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+HIGH:' + 'RSA+3DES:ECDH+RC4:DH+RC4:RSA+RC4:!aNULL:!eNULL:!EXP:-MD5:RSA+RC4+MD5' + ) + + def __init__(self, host, port, ciphers=None, **kwargs): + self.ciphers = ciphers if ciphers is not None else self.DEFAULT_CIPHERS + super(WeakCiphersHTTPSConnection, self).__init__(host, port, **kwargs) + + def connect(self): + # Yup, copied in VerifiedHTTPSConnection.connect just to change the + # default cipher list. + + # Add certificate verification + conn = self._new_conn() + + resolved_cert_reqs = ssl_.resolve_cert_reqs(self.cert_reqs) + resolved_ssl_version = ssl_.resolve_ssl_version(self.ssl_version) + + hostname = self.host + if getattr(self, '_tunnel_host', None): + # _tunnel_host was added in Python 2.6.3 + # (See: http://hg.python.org/cpython/rev/0f57b30a152f) + + self.sock = conn + # Calls self._set_hostport(), so self.host is + # self._tunnel_host below. + self._tunnel() + # Mark this connection as not reusable + self.auto_open = 0 + + # Override the host with the one we're requesting data from. + hostname = self._tunnel_host + + is_time_off = datetime.date.today() < urllib3.connection.RECENT_DATE + if is_time_off: + warnings.warn(( + 'System time is way off (before {0}). This will probably ' + 'lead to SSL verification errors').format( + urllib3.connection.RECENT_DATE), + SystemTimeWarning + ) + + # Wrap socket using verification with the root certs in + # trusted_root_certs + self.sock = ssl_.ssl_wrap_socket(conn, self.key_file, self.cert_file, + cert_reqs=resolved_cert_reqs, + ca_certs=self.ca_certs, + server_hostname=hostname, + ssl_version=resolved_ssl_version, + ciphers=self.ciphers) + + if self.assert_fingerprint: + ssl_.assert_fingerprint(self.sock.getpeercert(binary_form=True), + self.assert_fingerprint) + elif resolved_cert_reqs != ssl.CERT_NONE \ + and self.assert_hostname is not False: + cert = self.sock.getpeercert() + if not cert.get('subjectAltName', ()): + warnings.warn(( + 'Certificate has no `subjectAltName`, falling back to check for a `commonName` for now. ' + 'This feature is being removed by major browsers and deprecated by RFC 2818. ' + '(See https://github.com/shazow/urllib3/issues/497 for details.)'), + SecurityWarning + ) + match_hostname(cert, self.assert_hostname or hostname) + + self.is_verified = (resolved_cert_reqs == ssl.CERT_REQUIRED + or self.assert_fingerprint is not None) + + +class WeakCiphersHTTPSConnectionPool( + urllib3.connectionpool.HTTPSConnectionPool): + + ConnectionCls = WeakCiphersHTTPSConnection + + +class WeakCiphersPoolManager(urllib3.poolmanager.PoolManager): + + def _new_pool(self, scheme, host, port): + if scheme == 'https': + return WeakCiphersHTTPSConnectionPool(host, port, + **(self.connection_pool_kw)) + return super(WeakCiphersPoolManager, self)._new_pool(scheme, host, + port) + + +class WeakCiphersAdapter(HTTPAdapter): + """"Transport adapter" that allows us to use TLS_RSA_WITH_RC4_128_MD5.""" + + def init_poolmanager(self, connections, maxsize, block=False, + **pool_kwargs): + # Rewrite of the requests.adapters.HTTPAdapter.init_poolmanager method + # to use WeakCiphersPoolManager instead of urllib3's PoolManager + self._pool_connections = connections + self._pool_maxsize = maxsize + self._pool_block = block + + self.poolmanager = WeakCiphersPoolManager(num_pools=connections, + maxsize=maxsize, block=block, strict=True, **pool_kwargs) diff --git a/service/server.py b/service/server.py new file mode 100644 index 000000000..714e93d1f --- /dev/null +++ b/service/server.py @@ -0,0 +1,99 @@ +import BaseHTTPServer +import urlparse +import socket +import thread +import wx + +import logging + +logger = logging.getLogger(__name__) + +HTML = ''' + + + +Done. Please close this window. + + + +''' + +# https://github.com/fuzzysteve/CREST-Market-Downloader/ +class AuthHandler(BaseHTTPServer.BaseHTTPRequestHandler): + def do_GET(self): + if self.path == "/favicon.ico": + return + parsed_path = urlparse.urlparse(self.path) + parts = urlparse.parse_qs(parsed_path.query) + self.send_response(200) + self.end_headers() + self.wfile.write(HTML) + + wx.CallAfter(self.server.callback, parts) + + def log_message(self, format, *args): + return + +# http://code.activestate.com/recipes/425210-simple-stoppable-server-using-socket-timeout/ +class StoppableHTTPServer(BaseHTTPServer.HTTPServer): + + def server_bind(self): + BaseHTTPServer.HTTPServer.server_bind(self) + # Allow listening for 60 seconds + sec = 60 + + self.socket.settimeout(0.5) + self.max_tries = sec / self.socket.gettimeout() + self.tries = 0 + self.run = True + + def get_request(self): + while self.run: + try: + sock, addr = self.socket.accept() + sock.settimeout(None) + return (sock, addr) + except socket.timeout: + pass + + def stop(self): + self.run = False + + def handle_timeout(self): + #logger.debug("Number of tries: %d"%self.tries) + self.tries += 1 + if self.tries == self.max_tries: + logger.debug("Server timed out waiting for connection") + self.stop() + + def serve(self, callback): + self.callback = callback + while self.run: + try: + self.handle_request() + except TypeError: + pass + self.server_close() + +if __name__ == "__main__": + httpd = StoppableHTTPServer(('', 6461), AuthHandler) + thread.start_new_thread(httpd.serve, ()) + raw_input("Press to stop server\n") + httpd.stop() + diff --git a/service/settings.py b/service/settings.py index dde48f71d..10e7389b5 100644 --- a/service/settings.py +++ b/service/settings.py @@ -263,4 +263,30 @@ class UpdateSettings(): def set(self, type, value): self.serviceUpdateSettings[type] = value +class CRESTSettings(): + _instance = None + + @classmethod + def getInstance(cls): + if cls._instance is None: + cls._instance = CRESTSettings() + + return cls._instance + + def __init__(self): + + # mode + # 0 - Implicit authentication + # 1 - User-supplied client details + serviceCRESTDefaultSettings = {"mode": 0, "server": 0, "clientID": "", "clientSecret": ""} + + self.serviceCRESTSettings = SettingsProvider.getInstance().getSettings("pyfaServiceCRESTSettings", serviceCRESTDefaultSettings) + + def get(self, type): + return self.serviceCRESTSettings[type] + + def set(self, type, value): + self.serviceCRESTSettings[type] = value + + # @todo: migrate fit settings (from fit service) here? diff --git a/setup.py b/setup.py new file mode 100644 index 000000000..b4738824a --- /dev/null +++ b/setup.py @@ -0,0 +1,85 @@ +""" +Distribution builder for pyfa. + +Windows executable: python setup.py build +Windows executable + installer: python setup.py bdist_msi +""" +import requests.certs + +# The modules that contain the bulk of teh source +packages = ['eos', 'gui', 'service', 'utils'] +# Extra files that will be copied into the root directory +include_files = ['eve.db', 'LICENSE', 'README.md', (requests.certs.where(),'cacert.pem')] +# this is read by dist.py to package the icons +icon_dirs = ['gui', 'icons', 'renders'] + +includes = [] +# collection.abc due to bug: +# https://bitbucket.org/anthony_tuininga/cx_freeze/issues/127/collectionssys-error +# All the other stuff is crap that I have. VENV isn't working right for me for a few dependancies, so bleh +excludes = ['Tkinter', 'collections.abc', 'IPython', 'PyQt4', 'PIL', 'nose', 'tornado', 'zmq', 'mysql', 'scipy'] + + +if __name__ == "__main__": + import sys + from cx_Freeze import setup, Executable + import config + + + app_name = 'pyfa' + app_version = '{}'.format(config.version) + app_description = 'Python fitting assistant' + + # Windows-specific options + build_options_winexe = { + 'packages': packages, + 'include_files': include_files, + 'includes': includes, + 'excludes': excludes, + 'compressed': True, + 'optimize': 2, + 'include_msvcr': True, + } + + build_options_winmsi = { + 'upgrade_code': '{E80885AC-31BA-4D9A-A04F-9E5915608A6C}', + 'add_to_path': False, + 'initial_target_dir': r'[ProgramFilesFolder]\{}'.format(app_name), + } + + + # Mac-specific options (untested) + build_options_macapp = { + 'iconfile': 'dist_assets/mac/pyfa.icns', + 'bundle_name': app_name, + } + + build_options_macdmg = { + 'volume_label': app_name, + 'applications-shortcut': True, + } + + + # Generic executable options + executable_options = { + 'script': 'pyfa.py', + # Following are windows-specific options, they are stored + # on a per-executable basis + 'base': 'Win32GUI' if sys.platform=='win32' else None, + 'icon': 'dist_assets/win/pyfa.ico', + 'shortcutDir': 'DesktopFolder', + 'shortcutName': app_name, + } + + setup( + name=app_name, + version=app_version, + description=app_description, + options = { + 'build_exe': build_options_winexe, + 'bdist_msi': build_options_winmsi, + 'bdist_mac': build_options_macapp, + 'bdist_dmg': build_options_macdmg, + }, + executables=[Executable(**executable_options)] + ) diff --git a/staticdata/README.txt b/staticdata/README.txt deleted file mode 100644 index 81f4f7723..000000000 --- a/staticdata/README.txt +++ /dev/null @@ -1,25 +0,0 @@ -Generating a new sqlite dump HOWTO - -You'll need pyfa itself (git://dev.evefit.org/pyfa.git) -as well as phobos (git://dev.evefit.org/phobos.git) - -Phobos can dump the whole of the eve cache to json, after installing it (=python setup.py install) just do python dumpToJson.py -e /path/to/eve -c /path/to/eve/cache -s serverName -o /output/folder - -Arguments explained: -e and -c should be pretty self explanitory, they're the path to the eve install and the eve cache respectivly - --s is the serverName, its used to figure out which subfolder in the machonet folder we're intrested in. (possible values: tranquility, singularity, duality). -This is passed directly to reverence which keeps a serverName to IP address mapping. You could probably add more servers with their IPs in the reverence sourcecode (cache.py file, around like 150 in the CacheMgr class) if you need another one. - --o is the output folder to dump all json files to, it should already exist or you'll get errors. - - - -After thats done, you'll have all json files you need, and you can use a script within pyfa to generate a dump from that. - -After you checked out pyfa, don't forget to update submodules (git submodule update --init). - -and then browse to eos/utils/scripts/jsonToSql.py, which can generate the sqlite dump pyfa needs. - -python jsonToSql.py -d eve.db -j /output/folder - -Once thats done, you should have a nice little sqlite database, you can replace the one in the staticdata folder with yours and it should run right away. \ No newline at end of file diff --git a/staticdata/icons/icon01_01.png b/staticdata/icons/icon01_01.png deleted file mode 100644 index 18ab4636a..000000000 Binary files a/staticdata/icons/icon01_01.png and /dev/null differ diff --git a/staticdata/icons/icon01_02.png b/staticdata/icons/icon01_02.png deleted file mode 100644 index 9dd2e7c7e..000000000 Binary files a/staticdata/icons/icon01_02.png and /dev/null differ diff --git a/staticdata/icons/icon01_03.png b/staticdata/icons/icon01_03.png deleted file mode 100644 index 4fe0915c5..000000000 Binary files a/staticdata/icons/icon01_03.png and /dev/null differ diff --git a/staticdata/icons/icon01_04.png b/staticdata/icons/icon01_04.png deleted file mode 100644 index fb3fdde34..000000000 Binary files a/staticdata/icons/icon01_04.png and /dev/null differ diff --git a/staticdata/icons/icon01_05.png b/staticdata/icons/icon01_05.png deleted file mode 100644 index 5e726b2e0..000000000 Binary files a/staticdata/icons/icon01_05.png and /dev/null differ diff --git a/staticdata/icons/icon01_06.png b/staticdata/icons/icon01_06.png deleted file mode 100644 index fca8e6adf..000000000 Binary files a/staticdata/icons/icon01_06.png and /dev/null differ diff --git a/staticdata/icons/icon01_07.png b/staticdata/icons/icon01_07.png deleted file mode 100644 index cd9795d98..000000000 Binary files a/staticdata/icons/icon01_07.png and /dev/null differ diff --git a/staticdata/icons/icon01_09.png b/staticdata/icons/icon01_09.png deleted file mode 100644 index e04cc55f3..000000000 Binary files a/staticdata/icons/icon01_09.png and /dev/null differ diff --git a/staticdata/icons/icon01_10.png b/staticdata/icons/icon01_10.png deleted file mode 100644 index 29d7a00e9..000000000 Binary files a/staticdata/icons/icon01_10.png and /dev/null differ diff --git a/staticdata/icons/icon01_11.png b/staticdata/icons/icon01_11.png deleted file mode 100644 index 0b1c8aae1..000000000 Binary files a/staticdata/icons/icon01_11.png and /dev/null differ diff --git a/staticdata/icons/icon01_13.png b/staticdata/icons/icon01_13.png deleted file mode 100644 index 891cb8ade..000000000 Binary files a/staticdata/icons/icon01_13.png and /dev/null differ diff --git a/staticdata/icons/icon01_15.png b/staticdata/icons/icon01_15.png deleted file mode 100644 index f4d737360..000000000 Binary files a/staticdata/icons/icon01_15.png and /dev/null differ diff --git a/staticdata/icons/icon01_16.png b/staticdata/icons/icon01_16.png deleted file mode 100644 index e87e03d38..000000000 Binary files a/staticdata/icons/icon01_16.png and /dev/null differ diff --git a/staticdata/icons/icon02_02.png b/staticdata/icons/icon02_02.png deleted file mode 100644 index 8a23bb13a..000000000 Binary files a/staticdata/icons/icon02_02.png and /dev/null differ diff --git a/staticdata/icons/icon02_03.png b/staticdata/icons/icon02_03.png deleted file mode 100644 index 04b823614..000000000 Binary files a/staticdata/icons/icon02_03.png and /dev/null differ diff --git a/staticdata/icons/icon02_04.png b/staticdata/icons/icon02_04.png deleted file mode 100644 index ade371d04..000000000 Binary files a/staticdata/icons/icon02_04.png and /dev/null differ diff --git a/staticdata/icons/icon02_05.png b/staticdata/icons/icon02_05.png deleted file mode 100644 index 30cc42153..000000000 Binary files a/staticdata/icons/icon02_05.png and /dev/null differ diff --git a/staticdata/icons/icon02_07.png b/staticdata/icons/icon02_07.png deleted file mode 100644 index cf8d2316f..000000000 Binary files a/staticdata/icons/icon02_07.png and /dev/null differ diff --git a/staticdata/icons/icon02_09.png b/staticdata/icons/icon02_09.png deleted file mode 100644 index 8c6e9dba7..000000000 Binary files a/staticdata/icons/icon02_09.png and /dev/null differ diff --git a/staticdata/icons/icon02_10.png b/staticdata/icons/icon02_10.png deleted file mode 100644 index 1b94a7e89..000000000 Binary files a/staticdata/icons/icon02_10.png and /dev/null differ diff --git a/staticdata/icons/icon02_12.png b/staticdata/icons/icon02_12.png deleted file mode 100644 index fc3df9d0d..000000000 Binary files a/staticdata/icons/icon02_12.png and /dev/null differ diff --git a/staticdata/icons/icon02_14.png b/staticdata/icons/icon02_14.png deleted file mode 100644 index 00c9bddf2..000000000 Binary files a/staticdata/icons/icon02_14.png and /dev/null differ diff --git a/staticdata/icons/icon02_16.png b/staticdata/icons/icon02_16.png deleted file mode 100644 index 38ff0119c..000000000 Binary files a/staticdata/icons/icon02_16.png and /dev/null differ diff --git a/staticdata/icons/icon03_01.png b/staticdata/icons/icon03_01.png deleted file mode 100644 index 1a77b62f4..000000000 Binary files a/staticdata/icons/icon03_01.png and /dev/null differ diff --git a/staticdata/icons/icon03_02.png b/staticdata/icons/icon03_02.png deleted file mode 100644 index 0710897e5..000000000 Binary files a/staticdata/icons/icon03_02.png and /dev/null differ diff --git a/staticdata/icons/icon03_04.png b/staticdata/icons/icon03_04.png deleted file mode 100644 index 66045fdbf..000000000 Binary files a/staticdata/icons/icon03_04.png and /dev/null differ diff --git a/staticdata/icons/icon03_05.png b/staticdata/icons/icon03_05.png deleted file mode 100644 index 5f169f2d8..000000000 Binary files a/staticdata/icons/icon03_05.png and /dev/null differ diff --git a/staticdata/icons/icon03_06.png b/staticdata/icons/icon03_06.png deleted file mode 100644 index 9c2b842ee..000000000 Binary files a/staticdata/icons/icon03_06.png and /dev/null differ diff --git a/staticdata/icons/icon03_08.png b/staticdata/icons/icon03_08.png deleted file mode 100644 index 7ed756d27..000000000 Binary files a/staticdata/icons/icon03_08.png and /dev/null differ diff --git a/staticdata/icons/icon03_09.png b/staticdata/icons/icon03_09.png deleted file mode 100644 index 676bdb512..000000000 Binary files a/staticdata/icons/icon03_09.png and /dev/null differ diff --git a/staticdata/icons/icon03_10.png b/staticdata/icons/icon03_10.png deleted file mode 100644 index e011455db..000000000 Binary files a/staticdata/icons/icon03_10.png and /dev/null differ diff --git a/staticdata/icons/icon03_11.png b/staticdata/icons/icon03_11.png deleted file mode 100644 index d179363e2..000000000 Binary files a/staticdata/icons/icon03_11.png and /dev/null differ diff --git a/staticdata/icons/icon03_12.png b/staticdata/icons/icon03_12.png deleted file mode 100644 index 32754d413..000000000 Binary files a/staticdata/icons/icon03_12.png and /dev/null differ diff --git a/staticdata/icons/icon03_13.png b/staticdata/icons/icon03_13.png deleted file mode 100644 index a0c394c35..000000000 Binary files a/staticdata/icons/icon03_13.png and /dev/null differ diff --git a/staticdata/icons/icon04_01.png b/staticdata/icons/icon04_01.png deleted file mode 100644 index b3b08894d..000000000 Binary files a/staticdata/icons/icon04_01.png and /dev/null differ diff --git a/staticdata/icons/icon04_09.png b/staticdata/icons/icon04_09.png deleted file mode 100644 index 450b7d47b..000000000 Binary files a/staticdata/icons/icon04_09.png and /dev/null differ diff --git a/staticdata/icons/icon04_10.png b/staticdata/icons/icon04_10.png deleted file mode 100644 index c1abda51b..000000000 Binary files a/staticdata/icons/icon04_10.png and /dev/null differ diff --git a/staticdata/icons/icon04_11.png b/staticdata/icons/icon04_11.png deleted file mode 100644 index d30190dd5..000000000 Binary files a/staticdata/icons/icon04_11.png and /dev/null differ diff --git a/staticdata/icons/icon04_12.png b/staticdata/icons/icon04_12.png deleted file mode 100644 index a127f1d4e..000000000 Binary files a/staticdata/icons/icon04_12.png and /dev/null differ diff --git a/staticdata/icons/icon04_13.png b/staticdata/icons/icon04_13.png deleted file mode 100644 index 0e4354dee..000000000 Binary files a/staticdata/icons/icon04_13.png and /dev/null differ diff --git a/staticdata/icons/icon05_01.png b/staticdata/icons/icon05_01.png deleted file mode 100644 index 4fec42e2d..000000000 Binary files a/staticdata/icons/icon05_01.png and /dev/null differ diff --git a/staticdata/icons/icon05_02.png b/staticdata/icons/icon05_02.png deleted file mode 100644 index 681c83042..000000000 Binary files a/staticdata/icons/icon05_02.png and /dev/null differ diff --git a/staticdata/icons/icon05_07.png b/staticdata/icons/icon05_07.png deleted file mode 100644 index a9f588f47..000000000 Binary files a/staticdata/icons/icon05_07.png and /dev/null differ diff --git a/staticdata/icons/icon05_12.png b/staticdata/icons/icon05_12.png deleted file mode 100644 index 6e0ec8b1a..000000000 Binary files a/staticdata/icons/icon05_12.png and /dev/null differ diff --git a/staticdata/icons/icon05_14.png b/staticdata/icons/icon05_14.png deleted file mode 100644 index cc60480f8..000000000 Binary files a/staticdata/icons/icon05_14.png and /dev/null differ diff --git a/staticdata/icons/icon07_15.png b/staticdata/icons/icon07_15.png deleted file mode 100644 index 3fb2ed934..000000000 Binary files a/staticdata/icons/icon07_15.png and /dev/null differ diff --git a/staticdata/icons/icon08_01.png b/staticdata/icons/icon08_01.png deleted file mode 100644 index 0c658a338..000000000 Binary files a/staticdata/icons/icon08_01.png and /dev/null differ diff --git a/staticdata/icons/icon08_02.png b/staticdata/icons/icon08_02.png deleted file mode 100644 index 3be2655ea..000000000 Binary files a/staticdata/icons/icon08_02.png and /dev/null differ diff --git a/staticdata/icons/icon08_03.png b/staticdata/icons/icon08_03.png deleted file mode 100644 index 4c4aec39b..000000000 Binary files a/staticdata/icons/icon08_03.png and /dev/null differ diff --git a/staticdata/icons/icon08_04.png b/staticdata/icons/icon08_04.png deleted file mode 100644 index 037a12b48..000000000 Binary files a/staticdata/icons/icon08_04.png and /dev/null differ diff --git a/staticdata/icons/icon08_05.png b/staticdata/icons/icon08_05.png deleted file mode 100644 index 72850a7e0..000000000 Binary files a/staticdata/icons/icon08_05.png and /dev/null differ diff --git a/staticdata/icons/icon08_06.png b/staticdata/icons/icon08_06.png deleted file mode 100644 index 68cf5dbda..000000000 Binary files a/staticdata/icons/icon08_06.png and /dev/null differ diff --git a/staticdata/icons/icon08_07.png b/staticdata/icons/icon08_07.png deleted file mode 100644 index 8f51f5641..000000000 Binary files a/staticdata/icons/icon08_07.png and /dev/null differ diff --git a/staticdata/icons/icon08_08.png b/staticdata/icons/icon08_08.png deleted file mode 100644 index 18ff7c523..000000000 Binary files a/staticdata/icons/icon08_08.png and /dev/null differ diff --git a/staticdata/icons/icon08_09.png b/staticdata/icons/icon08_09.png deleted file mode 100644 index bf13579e9..000000000 Binary files a/staticdata/icons/icon08_09.png and /dev/null differ diff --git a/staticdata/icons/icon08_10.png b/staticdata/icons/icon08_10.png deleted file mode 100644 index 7eaa9244e..000000000 Binary files a/staticdata/icons/icon08_10.png and /dev/null differ diff --git a/staticdata/icons/icon08_11.png b/staticdata/icons/icon08_11.png deleted file mode 100644 index 496418e48..000000000 Binary files a/staticdata/icons/icon08_11.png and /dev/null differ diff --git a/staticdata/icons/icon08_12.png b/staticdata/icons/icon08_12.png deleted file mode 100644 index d40b95f7a..000000000 Binary files a/staticdata/icons/icon08_12.png and /dev/null differ diff --git a/staticdata/icons/icon08_16.png b/staticdata/icons/icon08_16.png deleted file mode 100644 index d1627c050..000000000 Binary files a/staticdata/icons/icon08_16.png and /dev/null differ diff --git a/staticdata/icons/icon09_05.png b/staticdata/icons/icon09_05.png deleted file mode 100644 index 69dd94eb8..000000000 Binary files a/staticdata/icons/icon09_05.png and /dev/null differ diff --git a/staticdata/icons/icon09_16.png b/staticdata/icons/icon09_16.png deleted file mode 100644 index 2f5452268..000000000 Binary files a/staticdata/icons/icon09_16.png and /dev/null differ diff --git a/staticdata/icons/icon10_15.png b/staticdata/icons/icon10_15.png deleted file mode 100644 index 7dbd5378c..000000000 Binary files a/staticdata/icons/icon10_15.png and /dev/null differ diff --git a/staticdata/icons/icon11_04.png b/staticdata/icons/icon11_04.png deleted file mode 100644 index e1941d292..000000000 Binary files a/staticdata/icons/icon11_04.png and /dev/null differ diff --git a/staticdata/icons/icon11_16.png b/staticdata/icons/icon11_16.png deleted file mode 100644 index ab4cfd484..000000000 Binary files a/staticdata/icons/icon11_16.png and /dev/null differ diff --git a/staticdata/icons/icon12_04.png b/staticdata/icons/icon12_04.png deleted file mode 100644 index c9e983e27..000000000 Binary files a/staticdata/icons/icon12_04.png and /dev/null differ diff --git a/staticdata/icons/icon12_06.png b/staticdata/icons/icon12_06.png deleted file mode 100644 index 3ff4a3a6b..000000000 Binary files a/staticdata/icons/icon12_06.png and /dev/null differ diff --git a/staticdata/icons/icon12_07.png b/staticdata/icons/icon12_07.png deleted file mode 100644 index ff42a6205..000000000 Binary files a/staticdata/icons/icon12_07.png and /dev/null differ diff --git a/staticdata/icons/icon12_08.png b/staticdata/icons/icon12_08.png deleted file mode 100644 index baf8f620c..000000000 Binary files a/staticdata/icons/icon12_08.png and /dev/null differ diff --git a/staticdata/icons/icon12_09.png b/staticdata/icons/icon12_09.png deleted file mode 100644 index f6690c912..000000000 Binary files a/staticdata/icons/icon12_09.png and /dev/null differ diff --git a/staticdata/icons/icon12_10.png b/staticdata/icons/icon12_10.png deleted file mode 100644 index 6f262fd22..000000000 Binary files a/staticdata/icons/icon12_10.png and /dev/null differ diff --git a/staticdata/icons/icon12_11.png b/staticdata/icons/icon12_11.png deleted file mode 100644 index a44a89ac9..000000000 Binary files a/staticdata/icons/icon12_11.png and /dev/null differ diff --git a/staticdata/icons/icon12_12.png b/staticdata/icons/icon12_12.png deleted file mode 100644 index 8c1dcddc8..000000000 Binary files a/staticdata/icons/icon12_12.png and /dev/null differ diff --git a/staticdata/icons/icon12_13.png b/staticdata/icons/icon12_13.png deleted file mode 100644 index 1f9bc8eb0..000000000 Binary files a/staticdata/icons/icon12_13.png and /dev/null differ diff --git a/staticdata/icons/icon12_14.png b/staticdata/icons/icon12_14.png deleted file mode 100644 index fd1892ff3..000000000 Binary files a/staticdata/icons/icon12_14.png and /dev/null differ diff --git a/staticdata/icons/icon12_15.png b/staticdata/icons/icon12_15.png deleted file mode 100644 index be11dd10b..000000000 Binary files a/staticdata/icons/icon12_15.png and /dev/null differ diff --git a/staticdata/icons/icon12_16.png b/staticdata/icons/icon12_16.png deleted file mode 100644 index cc7cfbc29..000000000 Binary files a/staticdata/icons/icon12_16.png and /dev/null differ diff --git a/staticdata/icons/icon13_01.png b/staticdata/icons/icon13_01.png deleted file mode 100644 index 637e61d5d..000000000 Binary files a/staticdata/icons/icon13_01.png and /dev/null differ diff --git a/staticdata/icons/icon13_02.png b/staticdata/icons/icon13_02.png deleted file mode 100644 index 705285b69..000000000 Binary files a/staticdata/icons/icon13_02.png and /dev/null differ diff --git a/staticdata/icons/icon13_03.png b/staticdata/icons/icon13_03.png deleted file mode 100644 index 0981ac049..000000000 Binary files a/staticdata/icons/icon13_03.png and /dev/null differ diff --git a/staticdata/icons/icon13_04.png b/staticdata/icons/icon13_04.png deleted file mode 100644 index c2236a20b..000000000 Binary files a/staticdata/icons/icon13_04.png and /dev/null differ diff --git a/staticdata/icons/icon13_05.png b/staticdata/icons/icon13_05.png deleted file mode 100644 index 74638ffff..000000000 Binary files a/staticdata/icons/icon13_05.png and /dev/null differ diff --git a/staticdata/icons/icon13_06.png b/staticdata/icons/icon13_06.png deleted file mode 100644 index fcf429c03..000000000 Binary files a/staticdata/icons/icon13_06.png and /dev/null differ diff --git a/staticdata/icons/icon13_07.png b/staticdata/icons/icon13_07.png deleted file mode 100644 index 2fad5a6a5..000000000 Binary files a/staticdata/icons/icon13_07.png and /dev/null differ diff --git a/staticdata/icons/icon13_08.png b/staticdata/icons/icon13_08.png deleted file mode 100644 index d76160311..000000000 Binary files a/staticdata/icons/icon13_08.png and /dev/null differ diff --git a/staticdata/icons/icon13_09.png b/staticdata/icons/icon13_09.png deleted file mode 100644 index 30cff32ef..000000000 Binary files a/staticdata/icons/icon13_09.png and /dev/null differ diff --git a/staticdata/icons/icon13_10.png b/staticdata/icons/icon13_10.png deleted file mode 100644 index f59d9e172..000000000 Binary files a/staticdata/icons/icon13_10.png and /dev/null differ diff --git a/staticdata/icons/icon13_11.png b/staticdata/icons/icon13_11.png deleted file mode 100644 index eb7704a87..000000000 Binary files a/staticdata/icons/icon13_11.png and /dev/null differ diff --git a/staticdata/icons/icon13_12.png b/staticdata/icons/icon13_12.png deleted file mode 100644 index f8bb99c11..000000000 Binary files a/staticdata/icons/icon13_12.png and /dev/null differ diff --git a/staticdata/icons/icon13_13.png b/staticdata/icons/icon13_13.png deleted file mode 100644 index 48ab6dda6..000000000 Binary files a/staticdata/icons/icon13_13.png and /dev/null differ diff --git a/staticdata/icons/icon13_14.png b/staticdata/icons/icon13_14.png deleted file mode 100644 index 8b6814978..000000000 Binary files a/staticdata/icons/icon13_14.png and /dev/null differ diff --git a/staticdata/icons/icon13_15.png b/staticdata/icons/icon13_15.png deleted file mode 100644 index 22b3a7f91..000000000 Binary files a/staticdata/icons/icon13_15.png and /dev/null differ diff --git a/staticdata/icons/icon13_16.png b/staticdata/icons/icon13_16.png deleted file mode 100644 index ca02e16fb..000000000 Binary files a/staticdata/icons/icon13_16.png and /dev/null differ diff --git a/staticdata/icons/icon14_01.png b/staticdata/icons/icon14_01.png deleted file mode 100644 index d9f3b4a1d..000000000 Binary files a/staticdata/icons/icon14_01.png and /dev/null differ diff --git a/staticdata/icons/icon14_02.png b/staticdata/icons/icon14_02.png deleted file mode 100644 index ba0604fb0..000000000 Binary files a/staticdata/icons/icon14_02.png and /dev/null differ diff --git a/staticdata/icons/icon14_03.png b/staticdata/icons/icon14_03.png deleted file mode 100644 index 33857cec7..000000000 Binary files a/staticdata/icons/icon14_03.png and /dev/null differ diff --git a/staticdata/icons/icon14_04.png b/staticdata/icons/icon14_04.png deleted file mode 100644 index 9a3b11b24..000000000 Binary files a/staticdata/icons/icon14_04.png and /dev/null differ diff --git a/staticdata/icons/icon14_05.png b/staticdata/icons/icon14_05.png deleted file mode 100644 index 06695d3a1..000000000 Binary files a/staticdata/icons/icon14_05.png and /dev/null differ diff --git a/staticdata/icons/icon14_06.png b/staticdata/icons/icon14_06.png deleted file mode 100644 index c668482a0..000000000 Binary files a/staticdata/icons/icon14_06.png and /dev/null differ diff --git a/staticdata/icons/icon14_07.png b/staticdata/icons/icon14_07.png deleted file mode 100644 index 70efd09b7..000000000 Binary files a/staticdata/icons/icon14_07.png and /dev/null differ diff --git a/staticdata/icons/icon14_08.png b/staticdata/icons/icon14_08.png deleted file mode 100644 index f2ad1c32d..000000000 Binary files a/staticdata/icons/icon14_08.png and /dev/null differ diff --git a/staticdata/icons/icon14_09.png b/staticdata/icons/icon14_09.png deleted file mode 100644 index cff3e612e..000000000 Binary files a/staticdata/icons/icon14_09.png and /dev/null differ diff --git a/staticdata/icons/icon14_10.png b/staticdata/icons/icon14_10.png deleted file mode 100644 index 7f0a3ae6c..000000000 Binary files a/staticdata/icons/icon14_10.png and /dev/null differ diff --git a/staticdata/icons/icon14_11.png b/staticdata/icons/icon14_11.png deleted file mode 100644 index df8a0e941..000000000 Binary files a/staticdata/icons/icon14_11.png and /dev/null differ diff --git a/staticdata/icons/icon14_12.png b/staticdata/icons/icon14_12.png deleted file mode 100644 index 2fbb77cbc..000000000 Binary files a/staticdata/icons/icon14_12.png and /dev/null differ diff --git a/staticdata/icons/icon14_13.png b/staticdata/icons/icon14_13.png deleted file mode 100644 index dbddc16c4..000000000 Binary files a/staticdata/icons/icon14_13.png and /dev/null differ diff --git a/staticdata/icons/icon14_14.png b/staticdata/icons/icon14_14.png deleted file mode 100644 index f58946b27..000000000 Binary files a/staticdata/icons/icon14_14.png and /dev/null differ diff --git a/staticdata/icons/icon14_15.png b/staticdata/icons/icon14_15.png deleted file mode 100644 index e550a788e..000000000 Binary files a/staticdata/icons/icon14_15.png and /dev/null differ diff --git a/staticdata/icons/icon14_16.png b/staticdata/icons/icon14_16.png deleted file mode 100644 index 9537a0469..000000000 Binary files a/staticdata/icons/icon14_16.png and /dev/null differ diff --git a/staticdata/icons/icon15_01.png b/staticdata/icons/icon15_01.png deleted file mode 100644 index 6d9f8a0df..000000000 Binary files a/staticdata/icons/icon15_01.png and /dev/null differ diff --git a/staticdata/icons/icon15_02.png b/staticdata/icons/icon15_02.png deleted file mode 100644 index 2b0a1a8dc..000000000 Binary files a/staticdata/icons/icon15_02.png and /dev/null differ diff --git a/staticdata/icons/icon15_03.png b/staticdata/icons/icon15_03.png deleted file mode 100644 index 03f6f5dfc..000000000 Binary files a/staticdata/icons/icon15_03.png and /dev/null differ diff --git a/staticdata/icons/icon15_04.png b/staticdata/icons/icon15_04.png deleted file mode 100644 index 9ac4059b3..000000000 Binary files a/staticdata/icons/icon15_04.png and /dev/null differ diff --git a/staticdata/icons/icon15_05.png b/staticdata/icons/icon15_05.png deleted file mode 100644 index aa81ce6db..000000000 Binary files a/staticdata/icons/icon15_05.png and /dev/null differ diff --git a/staticdata/icons/icon15_06.png b/staticdata/icons/icon15_06.png deleted file mode 100644 index 61b2de68d..000000000 Binary files a/staticdata/icons/icon15_06.png and /dev/null differ diff --git a/staticdata/icons/icon15_07.png b/staticdata/icons/icon15_07.png deleted file mode 100644 index f2022f779..000000000 Binary files a/staticdata/icons/icon15_07.png and /dev/null differ diff --git a/staticdata/icons/icon15_08.png b/staticdata/icons/icon15_08.png deleted file mode 100644 index 36eb0a89c..000000000 Binary files a/staticdata/icons/icon15_08.png and /dev/null differ diff --git a/staticdata/icons/icon15_09.png b/staticdata/icons/icon15_09.png deleted file mode 100644 index 9ae32d4f4..000000000 Binary files a/staticdata/icons/icon15_09.png and /dev/null differ diff --git a/staticdata/icons/icon15_10.png b/staticdata/icons/icon15_10.png deleted file mode 100644 index 74dc5dfd7..000000000 Binary files a/staticdata/icons/icon15_10.png and /dev/null differ diff --git a/staticdata/icons/icon15_11.png b/staticdata/icons/icon15_11.png deleted file mode 100644 index 2ccab0664..000000000 Binary files a/staticdata/icons/icon15_11.png and /dev/null differ diff --git a/staticdata/icons/icon15_12.png b/staticdata/icons/icon15_12.png deleted file mode 100644 index 82273ed2f..000000000 Binary files a/staticdata/icons/icon15_12.png and /dev/null differ diff --git a/staticdata/icons/icon15_13.png b/staticdata/icons/icon15_13.png deleted file mode 100644 index 9db97512f..000000000 Binary files a/staticdata/icons/icon15_13.png and /dev/null differ diff --git a/staticdata/icons/icon15_14.png b/staticdata/icons/icon15_14.png deleted file mode 100644 index 4de852066..000000000 Binary files a/staticdata/icons/icon15_14.png and /dev/null differ diff --git a/staticdata/icons/icon15_15.png b/staticdata/icons/icon15_15.png deleted file mode 100644 index dbd762869..000000000 Binary files a/staticdata/icons/icon15_15.png and /dev/null differ diff --git a/staticdata/icons/icon15_16.png b/staticdata/icons/icon15_16.png deleted file mode 100644 index 72128e54f..000000000 Binary files a/staticdata/icons/icon15_16.png and /dev/null differ diff --git a/staticdata/icons/icon16_01.png b/staticdata/icons/icon16_01.png deleted file mode 100644 index 2243a9065..000000000 Binary files a/staticdata/icons/icon16_01.png and /dev/null differ diff --git a/staticdata/icons/icon16_02.png b/staticdata/icons/icon16_02.png deleted file mode 100644 index 944135165..000000000 Binary files a/staticdata/icons/icon16_02.png and /dev/null differ diff --git a/staticdata/icons/icon16_03.png b/staticdata/icons/icon16_03.png deleted file mode 100644 index 69a79945d..000000000 Binary files a/staticdata/icons/icon16_03.png and /dev/null differ diff --git a/staticdata/icons/icon16_04.png b/staticdata/icons/icon16_04.png deleted file mode 100644 index 4687d215f..000000000 Binary files a/staticdata/icons/icon16_04.png and /dev/null differ diff --git a/staticdata/icons/icon16_05.png b/staticdata/icons/icon16_05.png deleted file mode 100644 index 5556ca7db..000000000 Binary files a/staticdata/icons/icon16_05.png and /dev/null differ diff --git a/staticdata/icons/icon16_06.png b/staticdata/icons/icon16_06.png deleted file mode 100644 index 7e34f47f5..000000000 Binary files a/staticdata/icons/icon16_06.png and /dev/null differ diff --git a/staticdata/icons/icon16_07.png b/staticdata/icons/icon16_07.png deleted file mode 100644 index 087da1fd3..000000000 Binary files a/staticdata/icons/icon16_07.png and /dev/null differ diff --git a/staticdata/icons/icon16_08.png b/staticdata/icons/icon16_08.png deleted file mode 100644 index 7294b222f..000000000 Binary files a/staticdata/icons/icon16_08.png and /dev/null differ diff --git a/staticdata/icons/icon16_09.png b/staticdata/icons/icon16_09.png deleted file mode 100644 index a65aa5038..000000000 Binary files a/staticdata/icons/icon16_09.png and /dev/null differ diff --git a/staticdata/icons/icon16_10.png b/staticdata/icons/icon16_10.png deleted file mode 100644 index d755d6a34..000000000 Binary files a/staticdata/icons/icon16_10.png and /dev/null differ diff --git a/staticdata/icons/icon16_11.png b/staticdata/icons/icon16_11.png deleted file mode 100644 index da00ad6bd..000000000 Binary files a/staticdata/icons/icon16_11.png and /dev/null differ diff --git a/staticdata/icons/icon16_12.png b/staticdata/icons/icon16_12.png deleted file mode 100644 index c224716ab..000000000 Binary files a/staticdata/icons/icon16_12.png and /dev/null differ diff --git a/staticdata/icons/icon16_13.png b/staticdata/icons/icon16_13.png deleted file mode 100644 index 10d80dc0b..000000000 Binary files a/staticdata/icons/icon16_13.png and /dev/null differ diff --git a/staticdata/icons/icon16_14.png b/staticdata/icons/icon16_14.png deleted file mode 100644 index a08739292..000000000 Binary files a/staticdata/icons/icon16_14.png and /dev/null differ diff --git a/staticdata/icons/icon16_15.png b/staticdata/icons/icon16_15.png deleted file mode 100644 index fda1d2108..000000000 Binary files a/staticdata/icons/icon16_15.png and /dev/null differ diff --git a/staticdata/icons/icon16_16.png b/staticdata/icons/icon16_16.png deleted file mode 100644 index bdb50fbaf..000000000 Binary files a/staticdata/icons/icon16_16.png and /dev/null differ diff --git a/staticdata/icons/icon20_01.png b/staticdata/icons/icon20_01.png deleted file mode 100644 index 5c716771a..000000000 Binary files a/staticdata/icons/icon20_01.png and /dev/null differ diff --git a/staticdata/icons/icon20_02.png b/staticdata/icons/icon20_02.png deleted file mode 100644 index b30939dea..000000000 Binary files a/staticdata/icons/icon20_02.png and /dev/null differ diff --git a/staticdata/icons/icon20_03.png b/staticdata/icons/icon20_03.png deleted file mode 100644 index 04593a424..000000000 Binary files a/staticdata/icons/icon20_03.png and /dev/null differ diff --git a/staticdata/icons/icon20_04.png b/staticdata/icons/icon20_04.png deleted file mode 100644 index 7187fc0d2..000000000 Binary files a/staticdata/icons/icon20_04.png and /dev/null differ diff --git a/staticdata/icons/icon20_05.png b/staticdata/icons/icon20_05.png deleted file mode 100644 index 23eb86d0f..000000000 Binary files a/staticdata/icons/icon20_05.png and /dev/null differ diff --git a/staticdata/icons/icon20_06.png b/staticdata/icons/icon20_06.png deleted file mode 100644 index 83e0b8034..000000000 Binary files a/staticdata/icons/icon20_06.png and /dev/null differ diff --git a/staticdata/icons/icon20_07.png b/staticdata/icons/icon20_07.png deleted file mode 100644 index 8b0acdade..000000000 Binary files a/staticdata/icons/icon20_07.png and /dev/null differ diff --git a/staticdata/icons/icon20_08.png b/staticdata/icons/icon20_08.png deleted file mode 100644 index 231035a63..000000000 Binary files a/staticdata/icons/icon20_08.png and /dev/null differ diff --git a/staticdata/icons/icon20_09.png b/staticdata/icons/icon20_09.png deleted file mode 100644 index ee3dad52b..000000000 Binary files a/staticdata/icons/icon20_09.png and /dev/null differ diff --git a/staticdata/icons/icon20_10.png b/staticdata/icons/icon20_10.png deleted file mode 100644 index 6d0670e65..000000000 Binary files a/staticdata/icons/icon20_10.png and /dev/null differ diff --git a/staticdata/icons/icon20_11.png b/staticdata/icons/icon20_11.png deleted file mode 100644 index 84a9653be..000000000 Binary files a/staticdata/icons/icon20_11.png and /dev/null differ diff --git a/staticdata/icons/icon20_12.png b/staticdata/icons/icon20_12.png deleted file mode 100644 index 295c4c10a..000000000 Binary files a/staticdata/icons/icon20_12.png and /dev/null differ diff --git a/staticdata/icons/icon20_13.png b/staticdata/icons/icon20_13.png deleted file mode 100644 index ed20d1cec..000000000 Binary files a/staticdata/icons/icon20_13.png and /dev/null differ diff --git a/staticdata/icons/icon20_14.png b/staticdata/icons/icon20_14.png deleted file mode 100644 index df9b1e890..000000000 Binary files a/staticdata/icons/icon20_14.png and /dev/null differ diff --git a/staticdata/icons/icon20_15.png b/staticdata/icons/icon20_15.png deleted file mode 100644 index b5ee9c96f..000000000 Binary files a/staticdata/icons/icon20_15.png and /dev/null differ diff --git a/staticdata/icons/icon20_16.png b/staticdata/icons/icon20_16.png deleted file mode 100644 index 5274bdc9b..000000000 Binary files a/staticdata/icons/icon20_16.png and /dev/null differ diff --git a/staticdata/icons/icon21_01.png b/staticdata/icons/icon21_01.png deleted file mode 100644 index 46a5a4ae0..000000000 Binary files a/staticdata/icons/icon21_01.png and /dev/null differ diff --git a/staticdata/icons/icon21_02.png b/staticdata/icons/icon21_02.png deleted file mode 100644 index ed1d65f9f..000000000 Binary files a/staticdata/icons/icon21_02.png and /dev/null differ diff --git a/staticdata/icons/icon21_03.png b/staticdata/icons/icon21_03.png deleted file mode 100644 index 15dc75381..000000000 Binary files a/staticdata/icons/icon21_03.png and /dev/null differ diff --git a/staticdata/icons/icon21_05.png b/staticdata/icons/icon21_05.png deleted file mode 100644 index d93fabca0..000000000 Binary files a/staticdata/icons/icon21_05.png and /dev/null differ diff --git a/staticdata/icons/icon21_06.png b/staticdata/icons/icon21_06.png deleted file mode 100644 index 95eb3199d..000000000 Binary files a/staticdata/icons/icon21_06.png and /dev/null differ diff --git a/staticdata/icons/icon21_07.png b/staticdata/icons/icon21_07.png deleted file mode 100644 index d725ce99e..000000000 Binary files a/staticdata/icons/icon21_07.png and /dev/null differ diff --git a/staticdata/icons/icon21_09.png b/staticdata/icons/icon21_09.png deleted file mode 100644 index 0d1a42015..000000000 Binary files a/staticdata/icons/icon21_09.png and /dev/null differ diff --git a/staticdata/icons/icon21_10.png b/staticdata/icons/icon21_10.png deleted file mode 100644 index 7ba85bc69..000000000 Binary files a/staticdata/icons/icon21_10.png and /dev/null differ diff --git a/staticdata/icons/icon21_11.png b/staticdata/icons/icon21_11.png deleted file mode 100644 index 2cc93e5d4..000000000 Binary files a/staticdata/icons/icon21_11.png and /dev/null differ diff --git a/staticdata/icons/icon21_12.png b/staticdata/icons/icon21_12.png deleted file mode 100644 index 7006513dd..000000000 Binary files a/staticdata/icons/icon21_12.png and /dev/null differ diff --git a/staticdata/icons/icon21_13.png b/staticdata/icons/icon21_13.png deleted file mode 100644 index 9e91f0417..000000000 Binary files a/staticdata/icons/icon21_13.png and /dev/null differ diff --git a/staticdata/icons/icon21_14.png b/staticdata/icons/icon21_14.png deleted file mode 100644 index 80797a1f9..000000000 Binary files a/staticdata/icons/icon21_14.png and /dev/null differ diff --git a/staticdata/icons/icon21_15.png b/staticdata/icons/icon21_15.png deleted file mode 100644 index d7ada1bcc..000000000 Binary files a/staticdata/icons/icon21_15.png and /dev/null differ diff --git a/staticdata/icons/icon21_16.png b/staticdata/icons/icon21_16.png deleted file mode 100644 index 9c2bb5b62..000000000 Binary files a/staticdata/icons/icon21_16.png and /dev/null differ diff --git a/staticdata/icons/icon22_01.png b/staticdata/icons/icon22_01.png deleted file mode 100644 index ef009dbdd..000000000 Binary files a/staticdata/icons/icon22_01.png and /dev/null differ diff --git a/staticdata/icons/icon22_02.png b/staticdata/icons/icon22_02.png deleted file mode 100644 index 6a9d44e5d..000000000 Binary files a/staticdata/icons/icon22_02.png and /dev/null differ diff --git a/staticdata/icons/icon22_03.png b/staticdata/icons/icon22_03.png deleted file mode 100644 index a9a21d47b..000000000 Binary files a/staticdata/icons/icon22_03.png and /dev/null differ diff --git a/staticdata/icons/icon22_04.png b/staticdata/icons/icon22_04.png deleted file mode 100644 index 2c23d35b1..000000000 Binary files a/staticdata/icons/icon22_04.png and /dev/null differ diff --git a/staticdata/icons/icon22_05.png b/staticdata/icons/icon22_05.png deleted file mode 100644 index 95b171173..000000000 Binary files a/staticdata/icons/icon22_05.png and /dev/null differ diff --git a/staticdata/icons/icon22_06.png b/staticdata/icons/icon22_06.png deleted file mode 100644 index ea8431c1d..000000000 Binary files a/staticdata/icons/icon22_06.png and /dev/null differ diff --git a/staticdata/icons/icon22_07.png b/staticdata/icons/icon22_07.png deleted file mode 100644 index 33d423310..000000000 Binary files a/staticdata/icons/icon22_07.png and /dev/null differ diff --git a/staticdata/icons/icon22_09.png b/staticdata/icons/icon22_09.png deleted file mode 100644 index 46249feb3..000000000 Binary files a/staticdata/icons/icon22_09.png and /dev/null differ diff --git a/staticdata/icons/icon22_10.png b/staticdata/icons/icon22_10.png deleted file mode 100644 index a04a38ad9..000000000 Binary files a/staticdata/icons/icon22_10.png and /dev/null differ diff --git a/staticdata/icons/icon22_11.png b/staticdata/icons/icon22_11.png deleted file mode 100644 index 3723cabb6..000000000 Binary files a/staticdata/icons/icon22_11.png and /dev/null differ diff --git a/staticdata/icons/icon22_12.png b/staticdata/icons/icon22_12.png deleted file mode 100644 index f2872d162..000000000 Binary files a/staticdata/icons/icon22_12.png and /dev/null differ diff --git a/staticdata/icons/icon22_13.png b/staticdata/icons/icon22_13.png deleted file mode 100644 index 8b0f2abef..000000000 Binary files a/staticdata/icons/icon22_13.png and /dev/null differ diff --git a/staticdata/icons/icon22_14.png b/staticdata/icons/icon22_14.png deleted file mode 100644 index 723419683..000000000 Binary files a/staticdata/icons/icon22_14.png and /dev/null differ diff --git a/staticdata/icons/icon22_15.png b/staticdata/icons/icon22_15.png deleted file mode 100644 index 85be4ddfa..000000000 Binary files a/staticdata/icons/icon22_15.png and /dev/null differ diff --git a/staticdata/icons/icon22_16.png b/staticdata/icons/icon22_16.png deleted file mode 100644 index 127ab999f..000000000 Binary files a/staticdata/icons/icon22_16.png and /dev/null differ diff --git a/staticdata/icons/icon22_17.png b/staticdata/icons/icon22_17.png deleted file mode 100644 index fb161b9b4..000000000 Binary files a/staticdata/icons/icon22_17.png and /dev/null differ diff --git a/staticdata/icons/icon22_18.png b/staticdata/icons/icon22_18.png deleted file mode 100644 index 807af6fe3..000000000 Binary files a/staticdata/icons/icon22_18.png and /dev/null differ diff --git a/staticdata/icons/icon22_19.png b/staticdata/icons/icon22_19.png deleted file mode 100644 index 5527e13af..000000000 Binary files a/staticdata/icons/icon22_19.png and /dev/null differ diff --git a/staticdata/icons/icon22_20.png b/staticdata/icons/icon22_20.png deleted file mode 100644 index 6fd0aa4db..000000000 Binary files a/staticdata/icons/icon22_20.png and /dev/null differ diff --git a/staticdata/icons/icon22_21.png b/staticdata/icons/icon22_21.png deleted file mode 100644 index aa9ec3e69..000000000 Binary files a/staticdata/icons/icon22_21.png and /dev/null differ diff --git a/staticdata/icons/icon22_22.png b/staticdata/icons/icon22_22.png deleted file mode 100644 index 4b9606e91..000000000 Binary files a/staticdata/icons/icon22_22.png and /dev/null differ diff --git a/staticdata/icons/icon22_23.png b/staticdata/icons/icon22_23.png deleted file mode 100644 index e13571e05..000000000 Binary files a/staticdata/icons/icon22_23.png and /dev/null differ diff --git a/staticdata/icons/icon22_24.png b/staticdata/icons/icon22_24.png deleted file mode 100644 index bc19ac7f9..000000000 Binary files a/staticdata/icons/icon22_24.png and /dev/null differ diff --git a/staticdata/icons/icon22_25.png b/staticdata/icons/icon22_25.png deleted file mode 100644 index e6f7a22c9..000000000 Binary files a/staticdata/icons/icon22_25.png and /dev/null differ diff --git a/staticdata/icons/icon22_26.png b/staticdata/icons/icon22_26.png deleted file mode 100644 index ebcd00a08..000000000 Binary files a/staticdata/icons/icon22_26.png and /dev/null differ diff --git a/staticdata/icons/icon22_27.png b/staticdata/icons/icon22_27.png deleted file mode 100644 index f853ef5d6..000000000 Binary files a/staticdata/icons/icon22_27.png and /dev/null differ diff --git a/staticdata/icons/icon22_28.png b/staticdata/icons/icon22_28.png deleted file mode 100644 index 28fa8f7d1..000000000 Binary files a/staticdata/icons/icon22_28.png and /dev/null differ diff --git a/staticdata/icons/icon25_04.png b/staticdata/icons/icon25_04.png deleted file mode 100644 index 3b3885d0b..000000000 Binary files a/staticdata/icons/icon25_04.png and /dev/null differ diff --git a/staticdata/icons/icon26_01.png b/staticdata/icons/icon26_01.png deleted file mode 100644 index 76a54433e..000000000 Binary files a/staticdata/icons/icon26_01.png and /dev/null differ diff --git a/staticdata/icons/icon26_11.png b/staticdata/icons/icon26_11.png deleted file mode 100644 index c8c1f0afc..000000000 Binary files a/staticdata/icons/icon26_11.png and /dev/null differ diff --git a/staticdata/icons/icon27_09.png b/staticdata/icons/icon27_09.png deleted file mode 100644 index 12a55cb53..000000000 Binary files a/staticdata/icons/icon27_09.png and /dev/null differ diff --git a/staticdata/icons/icon31_14.png b/staticdata/icons/icon31_14.png deleted file mode 100644 index 57238dcbe..000000000 Binary files a/staticdata/icons/icon31_14.png and /dev/null differ diff --git a/staticdata/icons/icon31_15.png b/staticdata/icons/icon31_15.png deleted file mode 100644 index 80549fac3..000000000 Binary files a/staticdata/icons/icon31_15.png and /dev/null differ diff --git a/staticdata/icons/icon31_16.png b/staticdata/icons/icon31_16.png deleted file mode 100644 index 97f25f619..000000000 Binary files a/staticdata/icons/icon31_16.png and /dev/null differ diff --git a/staticdata/icons/icon34_01.png b/staticdata/icons/icon34_01.png deleted file mode 100644 index 513dd3f2e..000000000 Binary files a/staticdata/icons/icon34_01.png and /dev/null differ diff --git a/staticdata/icons/icon34_02.png b/staticdata/icons/icon34_02.png deleted file mode 100644 index a5dbb061f..000000000 Binary files a/staticdata/icons/icon34_02.png and /dev/null differ diff --git a/staticdata/icons/icon34_12.png b/staticdata/icons/icon34_12.png deleted file mode 100644 index 29cfb7212..000000000 Binary files a/staticdata/icons/icon34_12.png and /dev/null differ diff --git a/staticdata/icons/icon34_15.png b/staticdata/icons/icon34_15.png deleted file mode 100644 index 855292c30..000000000 Binary files a/staticdata/icons/icon34_15.png and /dev/null differ diff --git a/staticdata/icons/icon35_01.png b/staticdata/icons/icon35_01.png deleted file mode 100644 index d734b0a8b..000000000 Binary files a/staticdata/icons/icon35_01.png and /dev/null differ diff --git a/staticdata/icons/icon35_03.png b/staticdata/icons/icon35_03.png deleted file mode 100644 index 072eed58c..000000000 Binary files a/staticdata/icons/icon35_03.png and /dev/null differ diff --git a/staticdata/icons/icon35_09.png b/staticdata/icons/icon35_09.png deleted file mode 100644 index b74e9384d..000000000 Binary files a/staticdata/icons/icon35_09.png and /dev/null differ diff --git a/staticdata/icons/icon35_12.png b/staticdata/icons/icon35_12.png deleted file mode 100644 index 3df287f44..000000000 Binary files a/staticdata/icons/icon35_12.png and /dev/null differ diff --git a/staticdata/icons/icon35_14.png b/staticdata/icons/icon35_14.png deleted file mode 100644 index 500847420..000000000 Binary files a/staticdata/icons/icon35_14.png and /dev/null differ diff --git a/staticdata/icons/icon35_15.png b/staticdata/icons/icon35_15.png deleted file mode 100644 index da171e388..000000000 Binary files a/staticdata/icons/icon35_15.png and /dev/null differ diff --git a/staticdata/icons/icon40_14.png b/staticdata/icons/icon40_14.png deleted file mode 100644 index e05999537..000000000 Binary files a/staticdata/icons/icon40_14.png and /dev/null differ diff --git a/staticdata/icons/icon40_16.png b/staticdata/icons/icon40_16.png deleted file mode 100644 index 58b63b045..000000000 Binary files a/staticdata/icons/icon40_16.png and /dev/null differ diff --git a/staticdata/icons/icon45_11.png b/staticdata/icons/icon45_11.png deleted file mode 100644 index 12e9a3f72..000000000 Binary files a/staticdata/icons/icon45_11.png and /dev/null differ diff --git a/staticdata/icons/icon45_12.png b/staticdata/icons/icon45_12.png deleted file mode 100644 index a9cc45916..000000000 Binary files a/staticdata/icons/icon45_12.png and /dev/null differ diff --git a/staticdata/icons/icon48_01.png b/staticdata/icons/icon48_01.png deleted file mode 100644 index 16617d7ac..000000000 Binary files a/staticdata/icons/icon48_01.png and /dev/null differ diff --git a/staticdata/icons/icon48_02.png b/staticdata/icons/icon48_02.png deleted file mode 100644 index 75cb7abd3..000000000 Binary files a/staticdata/icons/icon48_02.png and /dev/null differ diff --git a/staticdata/icons/icon48_03.png b/staticdata/icons/icon48_03.png deleted file mode 100644 index 5a93a7af5..000000000 Binary files a/staticdata/icons/icon48_03.png and /dev/null differ diff --git a/staticdata/icons/icon48_04.png b/staticdata/icons/icon48_04.png deleted file mode 100644 index fbfd282a9..000000000 Binary files a/staticdata/icons/icon48_04.png and /dev/null differ diff --git a/staticdata/icons/icon48_05.png b/staticdata/icons/icon48_05.png deleted file mode 100644 index 733fa656c..000000000 Binary files a/staticdata/icons/icon48_05.png and /dev/null differ diff --git a/staticdata/icons/icon48_06.png b/staticdata/icons/icon48_06.png deleted file mode 100644 index aa9481872..000000000 Binary files a/staticdata/icons/icon48_06.png and /dev/null differ diff --git a/staticdata/icons/icon48_07.png b/staticdata/icons/icon48_07.png deleted file mode 100644 index dd95232b3..000000000 Binary files a/staticdata/icons/icon48_07.png and /dev/null differ diff --git a/staticdata/icons/icon48_08.png b/staticdata/icons/icon48_08.png deleted file mode 100644 index 317d147a6..000000000 Binary files a/staticdata/icons/icon48_08.png and /dev/null differ diff --git a/staticdata/icons/icon48_09.png b/staticdata/icons/icon48_09.png deleted file mode 100644 index 59c29b0cd..000000000 Binary files a/staticdata/icons/icon48_09.png and /dev/null differ diff --git a/staticdata/icons/icon48_10.png b/staticdata/icons/icon48_10.png deleted file mode 100644 index c1baf2e89..000000000 Binary files a/staticdata/icons/icon48_10.png and /dev/null differ diff --git a/staticdata/icons/icon48_11.png b/staticdata/icons/icon48_11.png deleted file mode 100644 index f835381d6..000000000 Binary files a/staticdata/icons/icon48_11.png and /dev/null differ diff --git a/staticdata/icons/icon48_12.png b/staticdata/icons/icon48_12.png deleted file mode 100644 index 996e80f16..000000000 Binary files a/staticdata/icons/icon48_12.png and /dev/null differ diff --git a/staticdata/icons/icon48_13.png b/staticdata/icons/icon48_13.png deleted file mode 100644 index 54a93e43a..000000000 Binary files a/staticdata/icons/icon48_13.png and /dev/null differ diff --git a/staticdata/icons/icon48_14.png b/staticdata/icons/icon48_14.png deleted file mode 100644 index 49a8255e2..000000000 Binary files a/staticdata/icons/icon48_14.png and /dev/null differ diff --git a/staticdata/icons/icon48_15.png b/staticdata/icons/icon48_15.png deleted file mode 100644 index a70664d01..000000000 Binary files a/staticdata/icons/icon48_15.png and /dev/null differ diff --git a/staticdata/icons/icon48_16.png b/staticdata/icons/icon48_16.png deleted file mode 100644 index 63c0e3cb6..000000000 Binary files a/staticdata/icons/icon48_16.png and /dev/null differ diff --git a/staticdata/icons/icon49_05.png b/staticdata/icons/icon49_05.png deleted file mode 100644 index d74e953b9..000000000 Binary files a/staticdata/icons/icon49_05.png and /dev/null differ diff --git a/staticdata/icons/icon49_06.png b/staticdata/icons/icon49_06.png deleted file mode 100644 index a5142f64a..000000000 Binary files a/staticdata/icons/icon49_06.png and /dev/null differ diff --git a/staticdata/icons/icon49_07.png b/staticdata/icons/icon49_07.png deleted file mode 100644 index 50fa37dfb..000000000 Binary files a/staticdata/icons/icon49_07.png and /dev/null differ diff --git a/staticdata/icons/icon50_03.png b/staticdata/icons/icon50_03.png deleted file mode 100644 index 0ef7aea67..000000000 Binary files a/staticdata/icons/icon50_03.png and /dev/null differ diff --git a/staticdata/icons/icon50_11.png b/staticdata/icons/icon50_11.png deleted file mode 100644 index 1be51b145..000000000 Binary files a/staticdata/icons/icon50_11.png and /dev/null differ diff --git a/staticdata/icons/icon52_01.png b/staticdata/icons/icon52_01.png deleted file mode 100644 index e38478aba..000000000 Binary files a/staticdata/icons/icon52_01.png and /dev/null differ diff --git a/staticdata/icons/icon52_02.png b/staticdata/icons/icon52_02.png deleted file mode 100644 index 4ee9df2c2..000000000 Binary files a/staticdata/icons/icon52_02.png and /dev/null differ diff --git a/staticdata/icons/icon52_03.png b/staticdata/icons/icon52_03.png deleted file mode 100644 index 1acbe9082..000000000 Binary files a/staticdata/icons/icon52_03.png and /dev/null differ diff --git a/staticdata/icons/icon52_04.png b/staticdata/icons/icon52_04.png deleted file mode 100644 index c6cab7c10..000000000 Binary files a/staticdata/icons/icon52_04.png and /dev/null differ diff --git a/staticdata/icons/icon52_05.png b/staticdata/icons/icon52_05.png deleted file mode 100644 index 62950a2c5..000000000 Binary files a/staticdata/icons/icon52_05.png and /dev/null differ diff --git a/staticdata/icons/icon52_06.png b/staticdata/icons/icon52_06.png deleted file mode 100644 index c25b72b26..000000000 Binary files a/staticdata/icons/icon52_06.png and /dev/null differ diff --git a/staticdata/icons/icon52_07.png b/staticdata/icons/icon52_07.png deleted file mode 100644 index 9d2f070f1..000000000 Binary files a/staticdata/icons/icon52_07.png and /dev/null differ diff --git a/staticdata/icons/icon52_08.png b/staticdata/icons/icon52_08.png deleted file mode 100644 index a97324447..000000000 Binary files a/staticdata/icons/icon52_08.png and /dev/null differ diff --git a/staticdata/icons/icon52_10.png b/staticdata/icons/icon52_10.png deleted file mode 100644 index bf74669ab..000000000 Binary files a/staticdata/icons/icon52_10.png and /dev/null differ diff --git a/staticdata/icons/icon52_11.png b/staticdata/icons/icon52_11.png deleted file mode 100644 index b9a0e4d47..000000000 Binary files a/staticdata/icons/icon52_11.png and /dev/null differ diff --git a/staticdata/icons/icon52_12.png b/staticdata/icons/icon52_12.png deleted file mode 100644 index caeafa3e0..000000000 Binary files a/staticdata/icons/icon52_12.png and /dev/null differ diff --git a/staticdata/icons/icon52_13.png b/staticdata/icons/icon52_13.png deleted file mode 100644 index 05c7c82d9..000000000 Binary files a/staticdata/icons/icon52_13.png and /dev/null differ diff --git a/staticdata/icons/icon52_14.png b/staticdata/icons/icon52_14.png deleted file mode 100644 index 4b96de0f9..000000000 Binary files a/staticdata/icons/icon52_14.png and /dev/null differ diff --git a/staticdata/icons/icon52_15.png b/staticdata/icons/icon52_15.png deleted file mode 100644 index 89806420f..000000000 Binary files a/staticdata/icons/icon52_15.png and /dev/null differ diff --git a/staticdata/icons/icon52_16.png b/staticdata/icons/icon52_16.png deleted file mode 100644 index e1899bdcd..000000000 Binary files a/staticdata/icons/icon52_16.png and /dev/null differ diff --git a/staticdata/icons/icon53_01.png b/staticdata/icons/icon53_01.png deleted file mode 100644 index 41c3be6cb..000000000 Binary files a/staticdata/icons/icon53_01.png and /dev/null differ diff --git a/staticdata/icons/icon53_02.png b/staticdata/icons/icon53_02.png deleted file mode 100644 index 96ebb6f5b..000000000 Binary files a/staticdata/icons/icon53_02.png and /dev/null differ diff --git a/staticdata/icons/icon53_03.png b/staticdata/icons/icon53_03.png deleted file mode 100644 index b6f3980c2..000000000 Binary files a/staticdata/icons/icon53_03.png and /dev/null differ diff --git a/staticdata/icons/icon53_04.png b/staticdata/icons/icon53_04.png deleted file mode 100644 index 0a5dd43a5..000000000 Binary files a/staticdata/icons/icon53_04.png and /dev/null differ diff --git a/staticdata/icons/icon53_05.png b/staticdata/icons/icon53_05.png deleted file mode 100644 index a426c73a0..000000000 Binary files a/staticdata/icons/icon53_05.png and /dev/null differ diff --git a/staticdata/icons/icon53_06.png b/staticdata/icons/icon53_06.png deleted file mode 100644 index 1318db66b..000000000 Binary files a/staticdata/icons/icon53_06.png and /dev/null differ diff --git a/staticdata/icons/icon53_07.png b/staticdata/icons/icon53_07.png deleted file mode 100644 index 4a112ecc5..000000000 Binary files a/staticdata/icons/icon53_07.png and /dev/null differ diff --git a/staticdata/icons/icon53_08.png b/staticdata/icons/icon53_08.png deleted file mode 100644 index e951a5842..000000000 Binary files a/staticdata/icons/icon53_08.png and /dev/null differ diff --git a/staticdata/icons/icon53_09.png b/staticdata/icons/icon53_09.png deleted file mode 100644 index 499e735d3..000000000 Binary files a/staticdata/icons/icon53_09.png and /dev/null differ diff --git a/staticdata/icons/icon53_14.png b/staticdata/icons/icon53_14.png deleted file mode 100644 index 16978c24a..000000000 Binary files a/staticdata/icons/icon53_14.png and /dev/null differ diff --git a/staticdata/icons/icon53_15.png b/staticdata/icons/icon53_15.png deleted file mode 100644 index 9d2cefe6c..000000000 Binary files a/staticdata/icons/icon53_15.png and /dev/null differ diff --git a/staticdata/icons/icon53_16.png b/staticdata/icons/icon53_16.png deleted file mode 100644 index 0d8d74510..000000000 Binary files a/staticdata/icons/icon53_16.png and /dev/null differ diff --git a/staticdata/icons/icon53_64_16.png b/staticdata/icons/icon53_64_16.png deleted file mode 100644 index 0d8d74510..000000000 Binary files a/staticdata/icons/icon53_64_16.png and /dev/null differ diff --git a/staticdata/icons/icon55_13.png b/staticdata/icons/icon55_13.png deleted file mode 100644 index 8a6643cc2..000000000 Binary files a/staticdata/icons/icon55_13.png and /dev/null differ diff --git a/staticdata/icons/icon56_01.png b/staticdata/icons/icon56_01.png deleted file mode 100644 index db4477981..000000000 Binary files a/staticdata/icons/icon56_01.png and /dev/null differ diff --git a/staticdata/icons/icon56_02.png b/staticdata/icons/icon56_02.png deleted file mode 100644 index b31ce89c0..000000000 Binary files a/staticdata/icons/icon56_02.png and /dev/null differ diff --git a/staticdata/icons/icon56_03.png b/staticdata/icons/icon56_03.png deleted file mode 100644 index 3697a3231..000000000 Binary files a/staticdata/icons/icon56_03.png and /dev/null differ diff --git a/staticdata/icons/icon56_04.png b/staticdata/icons/icon56_04.png deleted file mode 100644 index d13597923..000000000 Binary files a/staticdata/icons/icon56_04.png and /dev/null differ diff --git a/staticdata/icons/icon56_05.png b/staticdata/icons/icon56_05.png deleted file mode 100644 index 67e23d5af..000000000 Binary files a/staticdata/icons/icon56_05.png and /dev/null differ diff --git a/staticdata/icons/icon56_06.png b/staticdata/icons/icon56_06.png deleted file mode 100644 index 8aba8ffb7..000000000 Binary files a/staticdata/icons/icon56_06.png and /dev/null differ diff --git a/staticdata/icons/icon56_07.png b/staticdata/icons/icon56_07.png deleted file mode 100644 index 51a90e1c5..000000000 Binary files a/staticdata/icons/icon56_07.png and /dev/null differ diff --git a/staticdata/icons/icon56_08.png b/staticdata/icons/icon56_08.png deleted file mode 100644 index 9fc97a843..000000000 Binary files a/staticdata/icons/icon56_08.png and /dev/null differ diff --git a/staticdata/icons/icon57_04.png b/staticdata/icons/icon57_04.png deleted file mode 100644 index 52dba23c1..000000000 Binary files a/staticdata/icons/icon57_04.png and /dev/null differ diff --git a/staticdata/icons/icon62_01.png b/staticdata/icons/icon62_01.png deleted file mode 100644 index 149fc2ac1..000000000 Binary files a/staticdata/icons/icon62_01.png and /dev/null differ diff --git a/staticdata/icons/icon62_02.png b/staticdata/icons/icon62_02.png deleted file mode 100644 index b1fc19b28..000000000 Binary files a/staticdata/icons/icon62_02.png and /dev/null differ diff --git a/staticdata/icons/icon62_03.png b/staticdata/icons/icon62_03.png deleted file mode 100644 index cc7d5192c..000000000 Binary files a/staticdata/icons/icon62_03.png and /dev/null differ diff --git a/staticdata/icons/icon62_04.png b/staticdata/icons/icon62_04.png deleted file mode 100644 index 24b08e1e5..000000000 Binary files a/staticdata/icons/icon62_04.png and /dev/null differ diff --git a/staticdata/icons/icon62_05.png b/staticdata/icons/icon62_05.png deleted file mode 100644 index 49d85c7a9..000000000 Binary files a/staticdata/icons/icon62_05.png and /dev/null differ diff --git a/staticdata/icons/icon62_06.png b/staticdata/icons/icon62_06.png deleted file mode 100644 index 697da9b5d..000000000 Binary files a/staticdata/icons/icon62_06.png and /dev/null differ diff --git a/staticdata/icons/icon62_07.png b/staticdata/icons/icon62_07.png deleted file mode 100644 index 82664f191..000000000 Binary files a/staticdata/icons/icon62_07.png and /dev/null differ diff --git a/staticdata/icons/icon62_08.png b/staticdata/icons/icon62_08.png deleted file mode 100644 index ad54a4d45..000000000 Binary files a/staticdata/icons/icon62_08.png and /dev/null differ diff --git a/staticdata/icons/icon63_13.png b/staticdata/icons/icon63_13.png deleted file mode 100644 index 61293f3c2..000000000 Binary files a/staticdata/icons/icon63_13.png and /dev/null differ diff --git a/staticdata/icons/icon63_14.png b/staticdata/icons/icon63_14.png deleted file mode 100644 index 1a1543f24..000000000 Binary files a/staticdata/icons/icon63_14.png and /dev/null differ diff --git a/staticdata/icons/icon63_15.png b/staticdata/icons/icon63_15.png deleted file mode 100644 index f48506a92..000000000 Binary files a/staticdata/icons/icon63_15.png and /dev/null differ diff --git a/staticdata/icons/icon63_16.png b/staticdata/icons/icon63_16.png deleted file mode 100644 index a3df80018..000000000 Binary files a/staticdata/icons/icon63_16.png and /dev/null differ diff --git a/staticdata/icons/icon64_05.png b/staticdata/icons/icon64_05.png deleted file mode 100644 index b0a96b97e..000000000 Binary files a/staticdata/icons/icon64_05.png and /dev/null differ diff --git a/staticdata/icons/icon64_06.png b/staticdata/icons/icon64_06.png deleted file mode 100644 index 0e0b30c0d..000000000 Binary files a/staticdata/icons/icon64_06.png and /dev/null differ diff --git a/staticdata/icons/icon64_07.png b/staticdata/icons/icon64_07.png deleted file mode 100644 index 3d2eeae3c..000000000 Binary files a/staticdata/icons/icon64_07.png and /dev/null differ diff --git a/staticdata/icons/icon64_08.png b/staticdata/icons/icon64_08.png deleted file mode 100644 index 508face64..000000000 Binary files a/staticdata/icons/icon64_08.png and /dev/null differ diff --git a/staticdata/icons/icon64_11.png b/staticdata/icons/icon64_11.png deleted file mode 100644 index 66f522e19..000000000 Binary files a/staticdata/icons/icon64_11.png and /dev/null differ diff --git a/staticdata/icons/icon64_12.png b/staticdata/icons/icon64_12.png deleted file mode 100644 index f4831e81f..000000000 Binary files a/staticdata/icons/icon64_12.png and /dev/null differ diff --git a/staticdata/icons/icon68_01.png b/staticdata/icons/icon68_01.png deleted file mode 100644 index 4cc4a67cd..000000000 Binary files a/staticdata/icons/icon68_01.png and /dev/null differ diff --git a/staticdata/icons/icon68_02.png b/staticdata/icons/icon68_02.png deleted file mode 100644 index b1d12db9b..000000000 Binary files a/staticdata/icons/icon68_02.png and /dev/null differ diff --git a/staticdata/icons/icon68_03.png b/staticdata/icons/icon68_03.png deleted file mode 100644 index 9623df7d2..000000000 Binary files a/staticdata/icons/icon68_03.png and /dev/null differ diff --git a/staticdata/icons/icon68_04.png b/staticdata/icons/icon68_04.png deleted file mode 100644 index 84dc423a7..000000000 Binary files a/staticdata/icons/icon68_04.png and /dev/null differ diff --git a/staticdata/icons/icon68_09.png b/staticdata/icons/icon68_09.png deleted file mode 100644 index ae7b291a0..000000000 Binary files a/staticdata/icons/icon68_09.png and /dev/null differ diff --git a/staticdata/icons/icon68_10.png b/staticdata/icons/icon68_10.png deleted file mode 100644 index 805dd11ef..000000000 Binary files a/staticdata/icons/icon68_10.png and /dev/null differ diff --git a/staticdata/icons/icon68_11.png b/staticdata/icons/icon68_11.png deleted file mode 100644 index 29f5cc5a6..000000000 Binary files a/staticdata/icons/icon68_11.png and /dev/null differ diff --git a/staticdata/icons/icon68_12.png b/staticdata/icons/icon68_12.png deleted file mode 100644 index c2c69fe6a..000000000 Binary files a/staticdata/icons/icon68_12.png and /dev/null differ diff --git a/staticdata/icons/icon68_13.png b/staticdata/icons/icon68_13.png deleted file mode 100644 index eec2f210c..000000000 Binary files a/staticdata/icons/icon68_13.png and /dev/null differ diff --git a/staticdata/icons/icon68_14.png b/staticdata/icons/icon68_14.png deleted file mode 100644 index cd43275a8..000000000 Binary files a/staticdata/icons/icon68_14.png and /dev/null differ diff --git a/staticdata/icons/icon68_15.png b/staticdata/icons/icon68_15.png deleted file mode 100644 index 2d7c7cf1f..000000000 Binary files a/staticdata/icons/icon68_15.png and /dev/null differ diff --git a/staticdata/icons/icon68_16.png b/staticdata/icons/icon68_16.png deleted file mode 100644 index 584483c40..000000000 Binary files a/staticdata/icons/icon68_16.png and /dev/null differ diff --git a/staticdata/icons/icon70_03.png b/staticdata/icons/icon70_03.png deleted file mode 100644 index 2153130f4..000000000 Binary files a/staticdata/icons/icon70_03.png and /dev/null differ diff --git a/staticdata/icons/icon70_04.png b/staticdata/icons/icon70_04.png deleted file mode 100644 index d2f471497..000000000 Binary files a/staticdata/icons/icon70_04.png and /dev/null differ diff --git a/staticdata/icons/icon70_05.png b/staticdata/icons/icon70_05.png deleted file mode 100644 index e66e0e937..000000000 Binary files a/staticdata/icons/icon70_05.png and /dev/null differ diff --git a/staticdata/icons/icon70_06.png b/staticdata/icons/icon70_06.png deleted file mode 100644 index ca2c6ca67..000000000 Binary files a/staticdata/icons/icon70_06.png and /dev/null differ diff --git a/staticdata/icons/icon70_07.png b/staticdata/icons/icon70_07.png deleted file mode 100644 index d03d0f46f..000000000 Binary files a/staticdata/icons/icon70_07.png and /dev/null differ diff --git a/staticdata/icons/icon70_08.png b/staticdata/icons/icon70_08.png deleted file mode 100644 index d746511a4..000000000 Binary files a/staticdata/icons/icon70_08.png and /dev/null differ diff --git a/staticdata/icons/icon70_09.png b/staticdata/icons/icon70_09.png deleted file mode 100644 index 090145b3e..000000000 Binary files a/staticdata/icons/icon70_09.png and /dev/null differ diff --git a/staticdata/icons/icon70_10.png b/staticdata/icons/icon70_10.png deleted file mode 100644 index 6a5385ff2..000000000 Binary files a/staticdata/icons/icon70_10.png and /dev/null differ diff --git a/staticdata/icons/icon70_12.png b/staticdata/icons/icon70_12.png deleted file mode 100644 index 295538a9f..000000000 Binary files a/staticdata/icons/icon70_12.png and /dev/null differ diff --git a/staticdata/icons/icon74_01.png b/staticdata/icons/icon74_01.png deleted file mode 100644 index 08dceaefa..000000000 Binary files a/staticdata/icons/icon74_01.png and /dev/null differ diff --git a/staticdata/icons/icon74_02.png b/staticdata/icons/icon74_02.png deleted file mode 100644 index 7ef287a9e..000000000 Binary files a/staticdata/icons/icon74_02.png and /dev/null differ diff --git a/staticdata/icons/icon74_03.png b/staticdata/icons/icon74_03.png deleted file mode 100644 index 73976dded..000000000 Binary files a/staticdata/icons/icon74_03.png and /dev/null differ diff --git a/staticdata/icons/icon74_04.png b/staticdata/icons/icon74_04.png deleted file mode 100644 index 9962b9b8d..000000000 Binary files a/staticdata/icons/icon74_04.png and /dev/null differ diff --git a/staticdata/icons/icon74_05.png b/staticdata/icons/icon74_05.png deleted file mode 100644 index 8b4471428..000000000 Binary files a/staticdata/icons/icon74_05.png and /dev/null differ diff --git a/staticdata/icons/icon74_06.png b/staticdata/icons/icon74_06.png deleted file mode 100644 index 3388d0608..000000000 Binary files a/staticdata/icons/icon74_06.png and /dev/null differ diff --git a/staticdata/icons/icon74_07.png b/staticdata/icons/icon74_07.png deleted file mode 100644 index f44fc9e32..000000000 Binary files a/staticdata/icons/icon74_07.png and /dev/null differ diff --git a/staticdata/icons/icon74_08.png b/staticdata/icons/icon74_08.png deleted file mode 100644 index 17d3e858d..000000000 Binary files a/staticdata/icons/icon74_08.png and /dev/null differ diff --git a/staticdata/icons/icon74_09.png b/staticdata/icons/icon74_09.png deleted file mode 100644 index 7a68a1fbb..000000000 Binary files a/staticdata/icons/icon74_09.png and /dev/null differ diff --git a/staticdata/icons/icon74_10.png b/staticdata/icons/icon74_10.png deleted file mode 100644 index 7aee58575..000000000 Binary files a/staticdata/icons/icon74_10.png and /dev/null differ diff --git a/staticdata/icons/icon76_01.png b/staticdata/icons/icon76_01.png deleted file mode 100644 index 71d1b9fe5..000000000 Binary files a/staticdata/icons/icon76_01.png and /dev/null differ diff --git a/staticdata/icons/icon76_04.png b/staticdata/icons/icon76_04.png deleted file mode 100644 index 67c4cb3c7..000000000 Binary files a/staticdata/icons/icon76_04.png and /dev/null differ diff --git a/staticdata/icons/icon76_05.png b/staticdata/icons/icon76_05.png deleted file mode 100644 index fdb2783ff..000000000 Binary files a/staticdata/icons/icon76_05.png and /dev/null differ diff --git a/staticdata/icons/icon76_06.png b/staticdata/icons/icon76_06.png deleted file mode 100644 index b82cf68d6..000000000 Binary files a/staticdata/icons/icon76_06.png and /dev/null differ diff --git a/staticdata/icons/icon76_07.png b/staticdata/icons/icon76_07.png deleted file mode 100644 index c2baf29f5..000000000 Binary files a/staticdata/icons/icon76_07.png and /dev/null differ diff --git a/staticdata/icons/icon76_08.png b/staticdata/icons/icon76_08.png deleted file mode 100644 index ffd4ef1ee..000000000 Binary files a/staticdata/icons/icon76_08.png and /dev/null differ diff --git a/staticdata/icons/icon76_09.png b/staticdata/icons/icon76_09.png deleted file mode 100644 index 2233095e1..000000000 Binary files a/staticdata/icons/icon76_09.png and /dev/null differ diff --git a/staticdata/icons/icon76_16.png b/staticdata/icons/icon76_16.png deleted file mode 100644 index 0e19cdd50..000000000 Binary files a/staticdata/icons/icon76_16.png and /dev/null differ diff --git a/staticdata/icons/icon79_09.png b/staticdata/icons/icon79_09.png deleted file mode 100644 index 993fd6f30..000000000 Binary files a/staticdata/icons/icon79_09.png and /dev/null differ diff --git a/staticdata/icons/icon89_1.png b/staticdata/icons/icon89_1.png deleted file mode 100644 index b0a29d271..000000000 Binary files a/staticdata/icons/icon89_1.png and /dev/null differ diff --git a/staticdata/icons/icon89_2.png b/staticdata/icons/icon89_2.png deleted file mode 100644 index 58f9800e5..000000000 Binary files a/staticdata/icons/icon89_2.png and /dev/null differ diff --git a/staticdata/icons/icon89_3.png b/staticdata/icons/icon89_3.png deleted file mode 100644 index d392fc2de..000000000 Binary files a/staticdata/icons/icon89_3.png and /dev/null differ diff --git a/staticdata/icons/icon89_4.png b/staticdata/icons/icon89_4.png deleted file mode 100644 index f5134aee1..000000000 Binary files a/staticdata/icons/icon89_4.png and /dev/null differ diff --git a/staticdata/icons/icon94_64_9.png b/staticdata/icons/icon94_64_9.png deleted file mode 100644 index fdcec1e33..000000000 Binary files a/staticdata/icons/icon94_64_9.png and /dev/null differ diff --git a/staticdata/icons/icon95_05.png b/staticdata/icons/icon95_05.png deleted file mode 100644 index 0f79176f4..000000000 Binary files a/staticdata/icons/icon95_05.png and /dev/null differ diff --git a/staticdata/icons/icon99_09.png b/staticdata/icons/icon99_09.png deleted file mode 100644 index e256bf5e9..000000000 Binary files a/staticdata/icons/icon99_09.png and /dev/null differ diff --git a/staticdata/icons/ships/11011.png b/staticdata/icons/ships/11011.png deleted file mode 100644 index 2f5fd0041..000000000 Binary files a/staticdata/icons/ships/11011.png and /dev/null differ diff --git a/staticdata/icons/ships/11129.png b/staticdata/icons/ships/11129.png deleted file mode 100644 index 14f7fa3de..000000000 Binary files a/staticdata/icons/ships/11129.png and /dev/null differ diff --git a/staticdata/icons/ships/11132.png b/staticdata/icons/ships/11132.png deleted file mode 100644 index e4479fa84..000000000 Binary files a/staticdata/icons/ships/11132.png and /dev/null differ diff --git a/staticdata/icons/ships/11134.png b/staticdata/icons/ships/11134.png deleted file mode 100644 index a3d42b8a4..000000000 Binary files a/staticdata/icons/ships/11134.png and /dev/null differ diff --git a/staticdata/icons/ships/11172.png b/staticdata/icons/ships/11172.png deleted file mode 100644 index 39f8849d9..000000000 Binary files a/staticdata/icons/ships/11172.png and /dev/null differ diff --git a/staticdata/icons/ships/11174.png b/staticdata/icons/ships/11174.png deleted file mode 100644 index 21daa1052..000000000 Binary files a/staticdata/icons/ships/11174.png and /dev/null differ diff --git a/staticdata/icons/ships/11176.png b/staticdata/icons/ships/11176.png deleted file mode 100644 index 5f173e941..000000000 Binary files a/staticdata/icons/ships/11176.png and /dev/null differ diff --git a/staticdata/icons/ships/11178.png b/staticdata/icons/ships/11178.png deleted file mode 100644 index b762484b7..000000000 Binary files a/staticdata/icons/ships/11178.png and /dev/null differ diff --git a/staticdata/icons/ships/11182.png b/staticdata/icons/ships/11182.png deleted file mode 100644 index 2cb0d151c..000000000 Binary files a/staticdata/icons/ships/11182.png and /dev/null differ diff --git a/staticdata/icons/ships/11184.png b/staticdata/icons/ships/11184.png deleted file mode 100644 index e9a61371a..000000000 Binary files a/staticdata/icons/ships/11184.png and /dev/null differ diff --git a/staticdata/icons/ships/11186.png b/staticdata/icons/ships/11186.png deleted file mode 100644 index bb30bbe72..000000000 Binary files a/staticdata/icons/ships/11186.png and /dev/null differ diff --git a/staticdata/icons/ships/11188.png b/staticdata/icons/ships/11188.png deleted file mode 100644 index ffe22a161..000000000 Binary files a/staticdata/icons/ships/11188.png and /dev/null differ diff --git a/staticdata/icons/ships/11190.png b/staticdata/icons/ships/11190.png deleted file mode 100644 index 9e273c5b6..000000000 Binary files a/staticdata/icons/ships/11190.png and /dev/null differ diff --git a/staticdata/icons/ships/11192.png b/staticdata/icons/ships/11192.png deleted file mode 100644 index bb70a1a82..000000000 Binary files a/staticdata/icons/ships/11192.png and /dev/null differ diff --git a/staticdata/icons/ships/11194.png b/staticdata/icons/ships/11194.png deleted file mode 100644 index 2bb3bbe2f..000000000 Binary files a/staticdata/icons/ships/11194.png and /dev/null differ diff --git a/staticdata/icons/ships/11196.png b/staticdata/icons/ships/11196.png deleted file mode 100644 index 570275a81..000000000 Binary files a/staticdata/icons/ships/11196.png and /dev/null differ diff --git a/staticdata/icons/ships/11198.png b/staticdata/icons/ships/11198.png deleted file mode 100644 index fbc49c112..000000000 Binary files a/staticdata/icons/ships/11198.png and /dev/null differ diff --git a/staticdata/icons/ships/11200.png b/staticdata/icons/ships/11200.png deleted file mode 100644 index 73927e76f..000000000 Binary files a/staticdata/icons/ships/11200.png and /dev/null differ diff --git a/staticdata/icons/ships/11202.png b/staticdata/icons/ships/11202.png deleted file mode 100644 index 6ffa804aa..000000000 Binary files a/staticdata/icons/ships/11202.png and /dev/null differ diff --git a/staticdata/icons/ships/11365.png b/staticdata/icons/ships/11365.png deleted file mode 100644 index a9465934e..000000000 Binary files a/staticdata/icons/ships/11365.png and /dev/null differ diff --git a/staticdata/icons/ships/11371.png b/staticdata/icons/ships/11371.png deleted file mode 100644 index b316ad619..000000000 Binary files a/staticdata/icons/ships/11371.png and /dev/null differ diff --git a/staticdata/icons/ships/11377.png b/staticdata/icons/ships/11377.png deleted file mode 100644 index e696ffc29..000000000 Binary files a/staticdata/icons/ships/11377.png and /dev/null differ diff --git a/staticdata/icons/ships/11379.png b/staticdata/icons/ships/11379.png deleted file mode 100644 index a59ebc69b..000000000 Binary files a/staticdata/icons/ships/11379.png and /dev/null differ diff --git a/staticdata/icons/ships/11381.png b/staticdata/icons/ships/11381.png deleted file mode 100644 index b2fb9a20f..000000000 Binary files a/staticdata/icons/ships/11381.png and /dev/null differ diff --git a/staticdata/icons/ships/11387.png b/staticdata/icons/ships/11387.png deleted file mode 100644 index 88190eadd..000000000 Binary files a/staticdata/icons/ships/11387.png and /dev/null differ diff --git a/staticdata/icons/ships/11393.png b/staticdata/icons/ships/11393.png deleted file mode 100644 index 483ad9c86..000000000 Binary files a/staticdata/icons/ships/11393.png and /dev/null differ diff --git a/staticdata/icons/ships/11400.png b/staticdata/icons/ships/11400.png deleted file mode 100644 index 6def80ac4..000000000 Binary files a/staticdata/icons/ships/11400.png and /dev/null differ diff --git a/staticdata/icons/ships/11567.png b/staticdata/icons/ships/11567.png deleted file mode 100644 index f7a2d821f..000000000 Binary files a/staticdata/icons/ships/11567.png and /dev/null differ diff --git a/staticdata/icons/ships/11936.png b/staticdata/icons/ships/11936.png deleted file mode 100644 index bb99f4852..000000000 Binary files a/staticdata/icons/ships/11936.png and /dev/null differ diff --git a/staticdata/icons/ships/11938.png b/staticdata/icons/ships/11938.png deleted file mode 100644 index 6c12d55a1..000000000 Binary files a/staticdata/icons/ships/11938.png and /dev/null differ diff --git a/staticdata/icons/ships/11940.png b/staticdata/icons/ships/11940.png deleted file mode 100644 index ceec33b24..000000000 Binary files a/staticdata/icons/ships/11940.png and /dev/null differ diff --git a/staticdata/icons/ships/11942.png b/staticdata/icons/ships/11942.png deleted file mode 100644 index 29749c62b..000000000 Binary files a/staticdata/icons/ships/11942.png and /dev/null differ diff --git a/staticdata/icons/ships/11957.png b/staticdata/icons/ships/11957.png deleted file mode 100644 index 66d8777eb..000000000 Binary files a/staticdata/icons/ships/11957.png and /dev/null differ diff --git a/staticdata/icons/ships/11959.png b/staticdata/icons/ships/11959.png deleted file mode 100644 index 251449334..000000000 Binary files a/staticdata/icons/ships/11959.png and /dev/null differ diff --git a/staticdata/icons/ships/11961.png b/staticdata/icons/ships/11961.png deleted file mode 100644 index 4e1e74b4c..000000000 Binary files a/staticdata/icons/ships/11961.png and /dev/null differ diff --git a/staticdata/icons/ships/11963.png b/staticdata/icons/ships/11963.png deleted file mode 100644 index 5be3c879a..000000000 Binary files a/staticdata/icons/ships/11963.png and /dev/null differ diff --git a/staticdata/icons/ships/11965.png b/staticdata/icons/ships/11965.png deleted file mode 100644 index ebc82b96a..000000000 Binary files a/staticdata/icons/ships/11965.png and /dev/null differ diff --git a/staticdata/icons/ships/11969.png b/staticdata/icons/ships/11969.png deleted file mode 100644 index 97bc74999..000000000 Binary files a/staticdata/icons/ships/11969.png and /dev/null differ diff --git a/staticdata/icons/ships/11971.png b/staticdata/icons/ships/11971.png deleted file mode 100644 index 840f83409..000000000 Binary files a/staticdata/icons/ships/11971.png and /dev/null differ diff --git a/staticdata/icons/ships/11978.png b/staticdata/icons/ships/11978.png deleted file mode 100644 index 7635ed089..000000000 Binary files a/staticdata/icons/ships/11978.png and /dev/null differ diff --git a/staticdata/icons/ships/11985.png b/staticdata/icons/ships/11985.png deleted file mode 100644 index b52764ddd..000000000 Binary files a/staticdata/icons/ships/11985.png and /dev/null differ diff --git a/staticdata/icons/ships/11987.png b/staticdata/icons/ships/11987.png deleted file mode 100644 index 136299c11..000000000 Binary files a/staticdata/icons/ships/11987.png and /dev/null differ diff --git a/staticdata/icons/ships/11989.png b/staticdata/icons/ships/11989.png deleted file mode 100644 index 3ef49b82c..000000000 Binary files a/staticdata/icons/ships/11989.png and /dev/null differ diff --git a/staticdata/icons/ships/11993.png b/staticdata/icons/ships/11993.png deleted file mode 100644 index 922b60cff..000000000 Binary files a/staticdata/icons/ships/11993.png and /dev/null differ diff --git a/staticdata/icons/ships/11995.png b/staticdata/icons/ships/11995.png deleted file mode 100644 index 71af56fc1..000000000 Binary files a/staticdata/icons/ships/11995.png and /dev/null differ diff --git a/staticdata/icons/ships/11999.png b/staticdata/icons/ships/11999.png deleted file mode 100644 index e15e1eb81..000000000 Binary files a/staticdata/icons/ships/11999.png and /dev/null differ diff --git a/staticdata/icons/ships/12003.png b/staticdata/icons/ships/12003.png deleted file mode 100644 index 491183e15..000000000 Binary files a/staticdata/icons/ships/12003.png and /dev/null differ diff --git a/staticdata/icons/ships/12005.png b/staticdata/icons/ships/12005.png deleted file mode 100644 index 7bbfcaa4d..000000000 Binary files a/staticdata/icons/ships/12005.png and /dev/null differ diff --git a/staticdata/icons/ships/12011.png b/staticdata/icons/ships/12011.png deleted file mode 100644 index 1e23178aa..000000000 Binary files a/staticdata/icons/ships/12011.png and /dev/null differ diff --git a/staticdata/icons/ships/12013.png b/staticdata/icons/ships/12013.png deleted file mode 100644 index 73c9a5bc2..000000000 Binary files a/staticdata/icons/ships/12013.png and /dev/null differ diff --git a/staticdata/icons/ships/12015.png b/staticdata/icons/ships/12015.png deleted file mode 100644 index 39ac22e30..000000000 Binary files a/staticdata/icons/ships/12015.png and /dev/null differ diff --git a/staticdata/icons/ships/12017.png b/staticdata/icons/ships/12017.png deleted file mode 100644 index 99997fe73..000000000 Binary files a/staticdata/icons/ships/12017.png and /dev/null differ diff --git a/staticdata/icons/ships/12019.png b/staticdata/icons/ships/12019.png deleted file mode 100644 index 4cf2675e6..000000000 Binary files a/staticdata/icons/ships/12019.png and /dev/null differ diff --git a/staticdata/icons/ships/12021.png b/staticdata/icons/ships/12021.png deleted file mode 100644 index 6e98f9fda..000000000 Binary files a/staticdata/icons/ships/12021.png and /dev/null differ diff --git a/staticdata/icons/ships/12023.png b/staticdata/icons/ships/12023.png deleted file mode 100644 index 0053abd33..000000000 Binary files a/staticdata/icons/ships/12023.png and /dev/null differ diff --git a/staticdata/icons/ships/12032.png b/staticdata/icons/ships/12032.png deleted file mode 100644 index 23eb1694e..000000000 Binary files a/staticdata/icons/ships/12032.png and /dev/null differ diff --git a/staticdata/icons/ships/12034.png b/staticdata/icons/ships/12034.png deleted file mode 100644 index a24b0022c..000000000 Binary files a/staticdata/icons/ships/12034.png and /dev/null differ diff --git a/staticdata/icons/ships/12038.png b/staticdata/icons/ships/12038.png deleted file mode 100644 index 681cb1c09..000000000 Binary files a/staticdata/icons/ships/12038.png and /dev/null differ diff --git a/staticdata/icons/ships/12042.png b/staticdata/icons/ships/12042.png deleted file mode 100644 index b7aadbacf..000000000 Binary files a/staticdata/icons/ships/12042.png and /dev/null differ diff --git a/staticdata/icons/ships/12044.png b/staticdata/icons/ships/12044.png deleted file mode 100644 index b0985bcec..000000000 Binary files a/staticdata/icons/ships/12044.png and /dev/null differ diff --git a/staticdata/icons/ships/12729.png b/staticdata/icons/ships/12729.png deleted file mode 100644 index e5e1e45ac..000000000 Binary files a/staticdata/icons/ships/12729.png and /dev/null differ diff --git a/staticdata/icons/ships/12731.png b/staticdata/icons/ships/12731.png deleted file mode 100644 index f552fe59b..000000000 Binary files a/staticdata/icons/ships/12731.png and /dev/null differ diff --git a/staticdata/icons/ships/12733.png b/staticdata/icons/ships/12733.png deleted file mode 100644 index cda6ac106..000000000 Binary files a/staticdata/icons/ships/12733.png and /dev/null differ diff --git a/staticdata/icons/ships/12735.png b/staticdata/icons/ships/12735.png deleted file mode 100644 index 00d76f852..000000000 Binary files a/staticdata/icons/ships/12735.png and /dev/null differ diff --git a/staticdata/icons/ships/12743.png b/staticdata/icons/ships/12743.png deleted file mode 100644 index 0fc0bf513..000000000 Binary files a/staticdata/icons/ships/12743.png and /dev/null differ diff --git a/staticdata/icons/ships/12745.png b/staticdata/icons/ships/12745.png deleted file mode 100644 index 2a0a68c6a..000000000 Binary files a/staticdata/icons/ships/12745.png and /dev/null differ diff --git a/staticdata/icons/ships/12747.png b/staticdata/icons/ships/12747.png deleted file mode 100644 index 68e90cbfa..000000000 Binary files a/staticdata/icons/ships/12747.png and /dev/null differ diff --git a/staticdata/icons/ships/12753.png b/staticdata/icons/ships/12753.png deleted file mode 100644 index d3dbe0939..000000000 Binary files a/staticdata/icons/ships/12753.png and /dev/null differ diff --git a/staticdata/icons/ships/13202.png b/staticdata/icons/ships/13202.png deleted file mode 100644 index 58e82bf33..000000000 Binary files a/staticdata/icons/ships/13202.png and /dev/null differ diff --git a/staticdata/icons/ships/16227.png b/staticdata/icons/ships/16227.png deleted file mode 100644 index 1dc4579e5..000000000 Binary files a/staticdata/icons/ships/16227.png and /dev/null differ diff --git a/staticdata/icons/ships/16229.png b/staticdata/icons/ships/16229.png deleted file mode 100644 index 3cee1b357..000000000 Binary files a/staticdata/icons/ships/16229.png and /dev/null differ diff --git a/staticdata/icons/ships/16231.png b/staticdata/icons/ships/16231.png deleted file mode 100644 index ffb8764a4..000000000 Binary files a/staticdata/icons/ships/16231.png and /dev/null differ diff --git a/staticdata/icons/ships/16233.png b/staticdata/icons/ships/16233.png deleted file mode 100644 index b079f92b2..000000000 Binary files a/staticdata/icons/ships/16233.png and /dev/null differ diff --git a/staticdata/icons/ships/16236.png b/staticdata/icons/ships/16236.png deleted file mode 100644 index 7d8d73eea..000000000 Binary files a/staticdata/icons/ships/16236.png and /dev/null differ diff --git a/staticdata/icons/ships/16238.png b/staticdata/icons/ships/16238.png deleted file mode 100644 index de7fb29b2..000000000 Binary files a/staticdata/icons/ships/16238.png and /dev/null differ diff --git a/staticdata/icons/ships/16240.png b/staticdata/icons/ships/16240.png deleted file mode 100644 index 88d2fe69f..000000000 Binary files a/staticdata/icons/ships/16240.png and /dev/null differ diff --git a/staticdata/icons/ships/16242.png b/staticdata/icons/ships/16242.png deleted file mode 100644 index 18ab708da..000000000 Binary files a/staticdata/icons/ships/16242.png and /dev/null differ diff --git a/staticdata/icons/ships/17476.png b/staticdata/icons/ships/17476.png deleted file mode 100644 index 682c795f5..000000000 Binary files a/staticdata/icons/ships/17476.png and /dev/null differ diff --git a/staticdata/icons/ships/17478.png b/staticdata/icons/ships/17478.png deleted file mode 100644 index 4ecc60c7e..000000000 Binary files a/staticdata/icons/ships/17478.png and /dev/null differ diff --git a/staticdata/icons/ships/17480.png b/staticdata/icons/ships/17480.png deleted file mode 100644 index 0bab90c69..000000000 Binary files a/staticdata/icons/ships/17480.png and /dev/null differ diff --git a/staticdata/icons/ships/17619.png b/staticdata/icons/ships/17619.png deleted file mode 100644 index 03c0feff8..000000000 Binary files a/staticdata/icons/ships/17619.png and /dev/null differ diff --git a/staticdata/icons/ships/17634.png b/staticdata/icons/ships/17634.png deleted file mode 100644 index b2db1a61c..000000000 Binary files a/staticdata/icons/ships/17634.png and /dev/null differ diff --git a/staticdata/icons/ships/17636.png b/staticdata/icons/ships/17636.png deleted file mode 100644 index aac079769..000000000 Binary files a/staticdata/icons/ships/17636.png and /dev/null differ diff --git a/staticdata/icons/ships/17703.png b/staticdata/icons/ships/17703.png deleted file mode 100644 index 34acc8fac..000000000 Binary files a/staticdata/icons/ships/17703.png and /dev/null differ diff --git a/staticdata/icons/ships/17709.png b/staticdata/icons/ships/17709.png deleted file mode 100644 index b849b467e..000000000 Binary files a/staticdata/icons/ships/17709.png and /dev/null differ diff --git a/staticdata/icons/ships/17713.png b/staticdata/icons/ships/17713.png deleted file mode 100644 index 11fe85054..000000000 Binary files a/staticdata/icons/ships/17713.png and /dev/null differ diff --git a/staticdata/icons/ships/17715.png b/staticdata/icons/ships/17715.png deleted file mode 100644 index 84df4b713..000000000 Binary files a/staticdata/icons/ships/17715.png and /dev/null differ diff --git a/staticdata/icons/ships/17718.png b/staticdata/icons/ships/17718.png deleted file mode 100644 index d37f8c33d..000000000 Binary files a/staticdata/icons/ships/17718.png and /dev/null differ diff --git a/staticdata/icons/ships/17720.png b/staticdata/icons/ships/17720.png deleted file mode 100644 index 397436324..000000000 Binary files a/staticdata/icons/ships/17720.png and /dev/null differ diff --git a/staticdata/icons/ships/17722.png b/staticdata/icons/ships/17722.png deleted file mode 100644 index f5cca8c35..000000000 Binary files a/staticdata/icons/ships/17722.png and /dev/null differ diff --git a/staticdata/icons/ships/17726.png b/staticdata/icons/ships/17726.png deleted file mode 100644 index 2e00d1407..000000000 Binary files a/staticdata/icons/ships/17726.png and /dev/null differ diff --git a/staticdata/icons/ships/17728.png b/staticdata/icons/ships/17728.png deleted file mode 100644 index e0fd58359..000000000 Binary files a/staticdata/icons/ships/17728.png and /dev/null differ diff --git a/staticdata/icons/ships/17732.png b/staticdata/icons/ships/17732.png deleted file mode 100644 index ff51309c8..000000000 Binary files a/staticdata/icons/ships/17732.png and /dev/null differ diff --git a/staticdata/icons/ships/17736.png b/staticdata/icons/ships/17736.png deleted file mode 100644 index e991a21d9..000000000 Binary files a/staticdata/icons/ships/17736.png and /dev/null differ diff --git a/staticdata/icons/ships/17738.png b/staticdata/icons/ships/17738.png deleted file mode 100644 index 01fb699cc..000000000 Binary files a/staticdata/icons/ships/17738.png and /dev/null differ diff --git a/staticdata/icons/ships/17740.png b/staticdata/icons/ships/17740.png deleted file mode 100644 index d64c2fc47..000000000 Binary files a/staticdata/icons/ships/17740.png and /dev/null differ diff --git a/staticdata/icons/ships/17812.png b/staticdata/icons/ships/17812.png deleted file mode 100644 index 89dc2f65f..000000000 Binary files a/staticdata/icons/ships/17812.png and /dev/null differ diff --git a/staticdata/icons/ships/17841.png b/staticdata/icons/ships/17841.png deleted file mode 100644 index 08d6ca7a1..000000000 Binary files a/staticdata/icons/ships/17841.png and /dev/null differ diff --git a/staticdata/icons/ships/17843.png b/staticdata/icons/ships/17843.png deleted file mode 100644 index 67e3421c7..000000000 Binary files a/staticdata/icons/ships/17843.png and /dev/null differ diff --git a/staticdata/icons/ships/17918.png b/staticdata/icons/ships/17918.png deleted file mode 100644 index 6fba8a2f2..000000000 Binary files a/staticdata/icons/ships/17918.png and /dev/null differ diff --git a/staticdata/icons/ships/17920.png b/staticdata/icons/ships/17920.png deleted file mode 100644 index baf5ba1ad..000000000 Binary files a/staticdata/icons/ships/17920.png and /dev/null differ diff --git a/staticdata/icons/ships/17922.png b/staticdata/icons/ships/17922.png deleted file mode 100644 index 1b471405c..000000000 Binary files a/staticdata/icons/ships/17922.png and /dev/null differ diff --git a/staticdata/icons/ships/17924.png b/staticdata/icons/ships/17924.png deleted file mode 100644 index 562fc7cd0..000000000 Binary files a/staticdata/icons/ships/17924.png and /dev/null differ diff --git a/staticdata/icons/ships/17926.png b/staticdata/icons/ships/17926.png deleted file mode 100644 index 2d777a812..000000000 Binary files a/staticdata/icons/ships/17926.png and /dev/null differ diff --git a/staticdata/icons/ships/17928.png b/staticdata/icons/ships/17928.png deleted file mode 100644 index ed5f44ab5..000000000 Binary files a/staticdata/icons/ships/17928.png and /dev/null differ diff --git a/staticdata/icons/ships/17930.png b/staticdata/icons/ships/17930.png deleted file mode 100644 index 4c0ce98b3..000000000 Binary files a/staticdata/icons/ships/17930.png and /dev/null differ diff --git a/staticdata/icons/ships/17932.png b/staticdata/icons/ships/17932.png deleted file mode 100644 index 2b2d76caa..000000000 Binary files a/staticdata/icons/ships/17932.png and /dev/null differ diff --git a/staticdata/icons/ships/1944.png b/staticdata/icons/ships/1944.png deleted file mode 100644 index e17f9085f..000000000 Binary files a/staticdata/icons/ships/1944.png and /dev/null differ diff --git a/staticdata/icons/ships/19720.png b/staticdata/icons/ships/19720.png deleted file mode 100644 index f472c7f6f..000000000 Binary files a/staticdata/icons/ships/19720.png and /dev/null differ diff --git a/staticdata/icons/ships/19722.png b/staticdata/icons/ships/19722.png deleted file mode 100644 index a1900bc62..000000000 Binary files a/staticdata/icons/ships/19722.png and /dev/null differ diff --git a/staticdata/icons/ships/19724.png b/staticdata/icons/ships/19724.png deleted file mode 100644 index e4a4966fb..000000000 Binary files a/staticdata/icons/ships/19724.png and /dev/null differ diff --git a/staticdata/icons/ships/19726.png b/staticdata/icons/ships/19726.png deleted file mode 100644 index 64ba54aba..000000000 Binary files a/staticdata/icons/ships/19726.png and /dev/null differ diff --git a/staticdata/icons/ships/19744.png b/staticdata/icons/ships/19744.png deleted file mode 100644 index 96367fb95..000000000 Binary files a/staticdata/icons/ships/19744.png and /dev/null differ diff --git a/staticdata/icons/ships/2006.png b/staticdata/icons/ships/2006.png deleted file mode 100644 index 84daa1d84..000000000 Binary files a/staticdata/icons/ships/2006.png and /dev/null differ diff --git a/staticdata/icons/ships/20125.png b/staticdata/icons/ships/20125.png deleted file mode 100644 index 4e6803fdf..000000000 Binary files a/staticdata/icons/ships/20125.png and /dev/null differ diff --git a/staticdata/icons/ships/20183.png b/staticdata/icons/ships/20183.png deleted file mode 100644 index e3dcbeb70..000000000 Binary files a/staticdata/icons/ships/20183.png and /dev/null differ diff --git a/staticdata/icons/ships/20185.png b/staticdata/icons/ships/20185.png deleted file mode 100644 index b15797fc6..000000000 Binary files a/staticdata/icons/ships/20185.png and /dev/null differ diff --git a/staticdata/icons/ships/20187.png b/staticdata/icons/ships/20187.png deleted file mode 100644 index 7e0f194a0..000000000 Binary files a/staticdata/icons/ships/20187.png and /dev/null differ diff --git a/staticdata/icons/ships/20189.png b/staticdata/icons/ships/20189.png deleted file mode 100644 index 89d52e98c..000000000 Binary files a/staticdata/icons/ships/20189.png and /dev/null differ diff --git a/staticdata/icons/ships/2078.png b/staticdata/icons/ships/2078.png deleted file mode 100644 index f217f8ae4..000000000 Binary files a/staticdata/icons/ships/2078.png and /dev/null differ diff --git a/staticdata/icons/ships/21097.png b/staticdata/icons/ships/21097.png deleted file mode 100644 index adaf76edc..000000000 Binary files a/staticdata/icons/ships/21097.png and /dev/null differ diff --git a/staticdata/icons/ships/2161.png b/staticdata/icons/ships/2161.png deleted file mode 100644 index e303ee85f..000000000 Binary files a/staticdata/icons/ships/2161.png and /dev/null differ diff --git a/staticdata/icons/ships/21628.png b/staticdata/icons/ships/21628.png deleted file mode 100644 index a676de1f1..000000000 Binary files a/staticdata/icons/ships/21628.png and /dev/null differ diff --git a/staticdata/icons/ships/22428.png b/staticdata/icons/ships/22428.png deleted file mode 100644 index 3544ab4e8..000000000 Binary files a/staticdata/icons/ships/22428.png and /dev/null differ diff --git a/staticdata/icons/ships/22430.png b/staticdata/icons/ships/22430.png deleted file mode 100644 index 591429d1f..000000000 Binary files a/staticdata/icons/ships/22430.png and /dev/null differ diff --git a/staticdata/icons/ships/22436.png b/staticdata/icons/ships/22436.png deleted file mode 100644 index fe6475ded..000000000 Binary files a/staticdata/icons/ships/22436.png and /dev/null differ diff --git a/staticdata/icons/ships/22440.png b/staticdata/icons/ships/22440.png deleted file mode 100644 index 08573a758..000000000 Binary files a/staticdata/icons/ships/22440.png and /dev/null differ diff --git a/staticdata/icons/ships/22442.png b/staticdata/icons/ships/22442.png deleted file mode 100644 index f276b4b35..000000000 Binary files a/staticdata/icons/ships/22442.png and /dev/null differ diff --git a/staticdata/icons/ships/22444.png b/staticdata/icons/ships/22444.png deleted file mode 100644 index 969b198d5..000000000 Binary files a/staticdata/icons/ships/22444.png and /dev/null differ diff --git a/staticdata/icons/ships/22446.png b/staticdata/icons/ships/22446.png deleted file mode 100644 index 320baf6fa..000000000 Binary files a/staticdata/icons/ships/22446.png and /dev/null differ diff --git a/staticdata/icons/ships/22448.png b/staticdata/icons/ships/22448.png deleted file mode 100644 index 8a8379ad9..000000000 Binary files a/staticdata/icons/ships/22448.png and /dev/null differ diff --git a/staticdata/icons/ships/22452.png b/staticdata/icons/ships/22452.png deleted file mode 100644 index 009da6cb1..000000000 Binary files a/staticdata/icons/ships/22452.png and /dev/null differ diff --git a/staticdata/icons/ships/22456.png b/staticdata/icons/ships/22456.png deleted file mode 100644 index 69d23a957..000000000 Binary files a/staticdata/icons/ships/22456.png and /dev/null differ diff --git a/staticdata/icons/ships/22460.png b/staticdata/icons/ships/22460.png deleted file mode 100644 index 5573b056f..000000000 Binary files a/staticdata/icons/ships/22460.png and /dev/null differ diff --git a/staticdata/icons/ships/22464.png b/staticdata/icons/ships/22464.png deleted file mode 100644 index 1fd0205c5..000000000 Binary files a/staticdata/icons/ships/22464.png and /dev/null differ diff --git a/staticdata/icons/ships/22466.png b/staticdata/icons/ships/22466.png deleted file mode 100644 index 41511983c..000000000 Binary files a/staticdata/icons/ships/22466.png and /dev/null differ diff --git a/staticdata/icons/ships/22468.png b/staticdata/icons/ships/22468.png deleted file mode 100644 index b367b0a05..000000000 Binary files a/staticdata/icons/ships/22468.png and /dev/null differ diff --git a/staticdata/icons/ships/22470.png b/staticdata/icons/ships/22470.png deleted file mode 100644 index d4378c759..000000000 Binary files a/staticdata/icons/ships/22470.png and /dev/null differ diff --git a/staticdata/icons/ships/22474.png b/staticdata/icons/ships/22474.png deleted file mode 100644 index 434c3eb44..000000000 Binary files a/staticdata/icons/ships/22474.png and /dev/null differ diff --git a/staticdata/icons/ships/22544.png b/staticdata/icons/ships/22544.png deleted file mode 100644 index 27ab11deb..000000000 Binary files a/staticdata/icons/ships/22544.png and /dev/null differ diff --git a/staticdata/icons/ships/22546.png b/staticdata/icons/ships/22546.png deleted file mode 100644 index 8795ad1f3..000000000 Binary files a/staticdata/icons/ships/22546.png and /dev/null differ diff --git a/staticdata/icons/ships/22548.png b/staticdata/icons/ships/22548.png deleted file mode 100644 index 200dd5e59..000000000 Binary files a/staticdata/icons/ships/22548.png and /dev/null differ diff --git a/staticdata/icons/ships/22852.png b/staticdata/icons/ships/22852.png deleted file mode 100644 index 3aa1f2d86..000000000 Binary files a/staticdata/icons/ships/22852.png and /dev/null differ diff --git a/staticdata/icons/ships/23757.png b/staticdata/icons/ships/23757.png deleted file mode 100644 index 3d899a7ba..000000000 Binary files a/staticdata/icons/ships/23757.png and /dev/null differ diff --git a/staticdata/icons/ships/23773.png b/staticdata/icons/ships/23773.png deleted file mode 100644 index e8efb53a8..000000000 Binary files a/staticdata/icons/ships/23773.png and /dev/null differ diff --git a/staticdata/icons/ships/23911.png b/staticdata/icons/ships/23911.png deleted file mode 100644 index f94e4ec56..000000000 Binary files a/staticdata/icons/ships/23911.png and /dev/null differ diff --git a/staticdata/icons/ships/23913.png b/staticdata/icons/ships/23913.png deleted file mode 100644 index 35a492e13..000000000 Binary files a/staticdata/icons/ships/23913.png and /dev/null differ diff --git a/staticdata/icons/ships/23915.png b/staticdata/icons/ships/23915.png deleted file mode 100644 index 0e34b58c2..000000000 Binary files a/staticdata/icons/ships/23915.png and /dev/null differ diff --git a/staticdata/icons/ships/23917.png b/staticdata/icons/ships/23917.png deleted file mode 100644 index 395229099..000000000 Binary files a/staticdata/icons/ships/23917.png and /dev/null differ diff --git a/staticdata/icons/ships/23919.png b/staticdata/icons/ships/23919.png deleted file mode 100644 index 52f97abc0..000000000 Binary files a/staticdata/icons/ships/23919.png and /dev/null differ diff --git a/staticdata/icons/ships/24483.png b/staticdata/icons/ships/24483.png deleted file mode 100644 index 340888865..000000000 Binary files a/staticdata/icons/ships/24483.png and /dev/null differ diff --git a/staticdata/icons/ships/24688.png b/staticdata/icons/ships/24688.png deleted file mode 100644 index aeb0d5b6b..000000000 Binary files a/staticdata/icons/ships/24688.png and /dev/null differ diff --git a/staticdata/icons/ships/24690.png b/staticdata/icons/ships/24690.png deleted file mode 100644 index bf5074a90..000000000 Binary files a/staticdata/icons/ships/24690.png and /dev/null differ diff --git a/staticdata/icons/ships/24692.png b/staticdata/icons/ships/24692.png deleted file mode 100644 index 6b5cafe09..000000000 Binary files a/staticdata/icons/ships/24692.png and /dev/null differ diff --git a/staticdata/icons/ships/24694.png b/staticdata/icons/ships/24694.png deleted file mode 100644 index a54d6fb77..000000000 Binary files a/staticdata/icons/ships/24694.png and /dev/null differ diff --git a/staticdata/icons/ships/24696.png b/staticdata/icons/ships/24696.png deleted file mode 100644 index 84096e2a1..000000000 Binary files a/staticdata/icons/ships/24696.png and /dev/null differ diff --git a/staticdata/icons/ships/24698.png b/staticdata/icons/ships/24698.png deleted file mode 100644 index 97448c121..000000000 Binary files a/staticdata/icons/ships/24698.png and /dev/null differ diff --git a/staticdata/icons/ships/24700.png b/staticdata/icons/ships/24700.png deleted file mode 100644 index c6ee78773..000000000 Binary files a/staticdata/icons/ships/24700.png and /dev/null differ diff --git a/staticdata/icons/ships/24702.png b/staticdata/icons/ships/24702.png deleted file mode 100644 index f4d44e19d..000000000 Binary files a/staticdata/icons/ships/24702.png and /dev/null differ diff --git a/staticdata/icons/ships/26840.png b/staticdata/icons/ships/26840.png deleted file mode 100644 index 286bcddf1..000000000 Binary files a/staticdata/icons/ships/26840.png and /dev/null differ diff --git a/staticdata/icons/ships/26842.png b/staticdata/icons/ships/26842.png deleted file mode 100644 index bcdeed5c3..000000000 Binary files a/staticdata/icons/ships/26842.png and /dev/null differ diff --git a/staticdata/icons/ships/2834.png b/staticdata/icons/ships/2834.png deleted file mode 100644 index d416a4de3..000000000 Binary files a/staticdata/icons/ships/2834.png and /dev/null differ diff --git a/staticdata/icons/ships/28352.png b/staticdata/icons/ships/28352.png deleted file mode 100644 index ea0b4f3db..000000000 Binary files a/staticdata/icons/ships/28352.png and /dev/null differ diff --git a/staticdata/icons/ships/2836.png b/staticdata/icons/ships/2836.png deleted file mode 100644 index 197345594..000000000 Binary files a/staticdata/icons/ships/2836.png and /dev/null differ diff --git a/staticdata/icons/ships/28606.png b/staticdata/icons/ships/28606.png deleted file mode 100644 index 6bf578f16..000000000 Binary files a/staticdata/icons/ships/28606.png and /dev/null differ diff --git a/staticdata/icons/ships/2863.png b/staticdata/icons/ships/2863.png deleted file mode 100644 index b3f6011d9..000000000 Binary files a/staticdata/icons/ships/2863.png and /dev/null differ diff --git a/staticdata/icons/ships/28659.png b/staticdata/icons/ships/28659.png deleted file mode 100644 index c7c023156..000000000 Binary files a/staticdata/icons/ships/28659.png and /dev/null differ diff --git a/staticdata/icons/ships/28661.png b/staticdata/icons/ships/28661.png deleted file mode 100644 index 28c57b2f1..000000000 Binary files a/staticdata/icons/ships/28661.png and /dev/null differ diff --git a/staticdata/icons/ships/28665.png b/staticdata/icons/ships/28665.png deleted file mode 100644 index b47e5232e..000000000 Binary files a/staticdata/icons/ships/28665.png and /dev/null differ diff --git a/staticdata/icons/ships/28710.png b/staticdata/icons/ships/28710.png deleted file mode 100644 index 1898bf327..000000000 Binary files a/staticdata/icons/ships/28710.png and /dev/null differ diff --git a/staticdata/icons/ships/28844.png b/staticdata/icons/ships/28844.png deleted file mode 100644 index 6c79a7389..000000000 Binary files a/staticdata/icons/ships/28844.png and /dev/null differ diff --git a/staticdata/icons/ships/28846.png b/staticdata/icons/ships/28846.png deleted file mode 100644 index 2bb85b7d5..000000000 Binary files a/staticdata/icons/ships/28846.png and /dev/null differ diff --git a/staticdata/icons/ships/28848.png b/staticdata/icons/ships/28848.png deleted file mode 100644 index 081b0d1a9..000000000 Binary files a/staticdata/icons/ships/28848.png and /dev/null differ diff --git a/staticdata/icons/ships/28850.png b/staticdata/icons/ships/28850.png deleted file mode 100644 index d8da32b81..000000000 Binary files a/staticdata/icons/ships/28850.png and /dev/null differ diff --git a/staticdata/icons/ships/29248.png b/staticdata/icons/ships/29248.png deleted file mode 100644 index 5caa9ed65..000000000 Binary files a/staticdata/icons/ships/29248.png and /dev/null differ diff --git a/staticdata/icons/ships/29266.png b/staticdata/icons/ships/29266.png deleted file mode 100644 index 67c57d27b..000000000 Binary files a/staticdata/icons/ships/29266.png and /dev/null differ diff --git a/staticdata/icons/ships/29336.png b/staticdata/icons/ships/29336.png deleted file mode 100644 index c0105ee92..000000000 Binary files a/staticdata/icons/ships/29336.png and /dev/null differ diff --git a/staticdata/icons/ships/29337.png b/staticdata/icons/ships/29337.png deleted file mode 100644 index a07f447f6..000000000 Binary files a/staticdata/icons/ships/29337.png and /dev/null differ diff --git a/staticdata/icons/ships/29340.png b/staticdata/icons/ships/29340.png deleted file mode 100644 index 90a07cc8a..000000000 Binary files a/staticdata/icons/ships/29340.png and /dev/null differ diff --git a/staticdata/icons/ships/29344.png b/staticdata/icons/ships/29344.png deleted file mode 100644 index 4f152a74c..000000000 Binary files a/staticdata/icons/ships/29344.png and /dev/null differ diff --git a/staticdata/icons/ships/2998.png b/staticdata/icons/ships/2998.png deleted file mode 100644 index f776fb7b1..000000000 Binary files a/staticdata/icons/ships/2998.png and /dev/null differ diff --git a/staticdata/icons/ships/29984.png b/staticdata/icons/ships/29984.png deleted file mode 100644 index 90f235581..000000000 Binary files a/staticdata/icons/ships/29984.png and /dev/null differ diff --git a/staticdata/icons/ships/29986.png b/staticdata/icons/ships/29986.png deleted file mode 100644 index 77798231f..000000000 Binary files a/staticdata/icons/ships/29986.png and /dev/null differ diff --git a/staticdata/icons/ships/29988.png b/staticdata/icons/ships/29988.png deleted file mode 100644 index f81713367..000000000 Binary files a/staticdata/icons/ships/29988.png and /dev/null differ diff --git a/staticdata/icons/ships/29990.png b/staticdata/icons/ships/29990.png deleted file mode 100644 index c996b16f7..000000000 Binary files a/staticdata/icons/ships/29990.png and /dev/null differ diff --git a/staticdata/icons/ships/30842.png b/staticdata/icons/ships/30842.png deleted file mode 100644 index 3c9f044a5..000000000 Binary files a/staticdata/icons/ships/30842.png and /dev/null differ diff --git a/staticdata/icons/ships/32207.png b/staticdata/icons/ships/32207.png deleted file mode 100644 index 8d00d5b69..000000000 Binary files a/staticdata/icons/ships/32207.png and /dev/null differ diff --git a/staticdata/icons/ships/32209.png b/staticdata/icons/ships/32209.png deleted file mode 100644 index e7ee39be6..000000000 Binary files a/staticdata/icons/ships/32209.png and /dev/null differ diff --git a/staticdata/icons/ships/32305.png b/staticdata/icons/ships/32305.png deleted file mode 100644 index 2ffa5fd8e..000000000 Binary files a/staticdata/icons/ships/32305.png and /dev/null differ diff --git a/staticdata/icons/ships/32307.png b/staticdata/icons/ships/32307.png deleted file mode 100644 index f9f97cab8..000000000 Binary files a/staticdata/icons/ships/32307.png and /dev/null differ diff --git a/staticdata/icons/ships/32309.png b/staticdata/icons/ships/32309.png deleted file mode 100644 index ddb5aa9ec..000000000 Binary files a/staticdata/icons/ships/32309.png and /dev/null differ diff --git a/staticdata/icons/ships/32311.png b/staticdata/icons/ships/32311.png deleted file mode 100644 index 538e98dfc..000000000 Binary files a/staticdata/icons/ships/32311.png and /dev/null differ diff --git a/staticdata/icons/ships/32788.png b/staticdata/icons/ships/32788.png deleted file mode 100644 index 92263269b..000000000 Binary files a/staticdata/icons/ships/32788.png and /dev/null differ diff --git a/staticdata/icons/ships/32790.png b/staticdata/icons/ships/32790.png deleted file mode 100644 index 0b700d88f..000000000 Binary files a/staticdata/icons/ships/32790.png and /dev/null differ diff --git a/staticdata/icons/ships/32872.png b/staticdata/icons/ships/32872.png deleted file mode 100644 index 1bdbf6ee5..000000000 Binary files a/staticdata/icons/ships/32872.png and /dev/null differ diff --git a/staticdata/icons/ships/32874.png b/staticdata/icons/ships/32874.png deleted file mode 100644 index 734fa59eb..000000000 Binary files a/staticdata/icons/ships/32874.png and /dev/null differ diff --git a/staticdata/icons/ships/32876.png b/staticdata/icons/ships/32876.png deleted file mode 100644 index 86eb1b5b7..000000000 Binary files a/staticdata/icons/ships/32876.png and /dev/null differ diff --git a/staticdata/icons/ships/32878.png b/staticdata/icons/ships/32878.png deleted file mode 100644 index 1ec46f042..000000000 Binary files a/staticdata/icons/ships/32878.png and /dev/null differ diff --git a/staticdata/icons/ships/32880.png b/staticdata/icons/ships/32880.png deleted file mode 100644 index 350d2360b..000000000 Binary files a/staticdata/icons/ships/32880.png and /dev/null differ diff --git a/staticdata/icons/ships/33079.png b/staticdata/icons/ships/33079.png deleted file mode 100644 index 9397d6fb8..000000000 Binary files a/staticdata/icons/ships/33079.png and /dev/null differ diff --git a/staticdata/icons/ships/33081.png b/staticdata/icons/ships/33081.png deleted file mode 100644 index 51160c801..000000000 Binary files a/staticdata/icons/ships/33081.png and /dev/null differ diff --git a/staticdata/icons/ships/33083.png b/staticdata/icons/ships/33083.png deleted file mode 100644 index 5026ea02c..000000000 Binary files a/staticdata/icons/ships/33083.png and /dev/null differ diff --git a/staticdata/icons/ships/33151.png b/staticdata/icons/ships/33151.png deleted file mode 100644 index 51532cbe1..000000000 Binary files a/staticdata/icons/ships/33151.png and /dev/null differ diff --git a/staticdata/icons/ships/33153.png b/staticdata/icons/ships/33153.png deleted file mode 100644 index c4c415704..000000000 Binary files a/staticdata/icons/ships/33153.png and /dev/null differ diff --git a/staticdata/icons/ships/33155.png b/staticdata/icons/ships/33155.png deleted file mode 100644 index 08098ed89..000000000 Binary files a/staticdata/icons/ships/33155.png and /dev/null differ diff --git a/staticdata/icons/ships/33157.png b/staticdata/icons/ships/33157.png deleted file mode 100644 index 6d665f953..000000000 Binary files a/staticdata/icons/ships/33157.png and /dev/null differ diff --git a/staticdata/icons/ships/33395.png b/staticdata/icons/ships/33395.png deleted file mode 100644 index eada0e1c5..000000000 Binary files a/staticdata/icons/ships/33395.png and /dev/null differ diff --git a/staticdata/icons/ships/33397.png b/staticdata/icons/ships/33397.png deleted file mode 100644 index e837011b0..000000000 Binary files a/staticdata/icons/ships/33397.png and /dev/null differ diff --git a/staticdata/icons/ships/33468.png b/staticdata/icons/ships/33468.png deleted file mode 100644 index 234383c6c..000000000 Binary files a/staticdata/icons/ships/33468.png and /dev/null differ diff --git a/staticdata/icons/ships/33470.png b/staticdata/icons/ships/33470.png deleted file mode 100644 index d2e66681d..000000000 Binary files a/staticdata/icons/ships/33470.png and /dev/null differ diff --git a/staticdata/icons/ships/33472.png b/staticdata/icons/ships/33472.png deleted file mode 100644 index 64f26b93a..000000000 Binary files a/staticdata/icons/ships/33472.png and /dev/null differ diff --git a/staticdata/icons/ships/33513.png b/staticdata/icons/ships/33513.png deleted file mode 100644 index 3f16ba828..000000000 Binary files a/staticdata/icons/ships/33513.png and /dev/null differ diff --git a/staticdata/icons/ships/33553.png b/staticdata/icons/ships/33553.png deleted file mode 100644 index 08bcf8bdc..000000000 Binary files a/staticdata/icons/ships/33553.png and /dev/null differ diff --git a/staticdata/icons/ships/33673.png b/staticdata/icons/ships/33673.png deleted file mode 100644 index ea1d95cff..000000000 Binary files a/staticdata/icons/ships/33673.png and /dev/null differ diff --git a/staticdata/icons/ships/33675.png b/staticdata/icons/ships/33675.png deleted file mode 100644 index 9a1ecf5bb..000000000 Binary files a/staticdata/icons/ships/33675.png and /dev/null differ diff --git a/staticdata/icons/ships/33697.png b/staticdata/icons/ships/33697.png deleted file mode 100644 index f897827f7..000000000 Binary files a/staticdata/icons/ships/33697.png and /dev/null differ diff --git a/staticdata/icons/ships/33816.png b/staticdata/icons/ships/33816.png deleted file mode 100644 index fa8373a1b..000000000 Binary files a/staticdata/icons/ships/33816.png and /dev/null differ diff --git a/staticdata/icons/ships/33818.png b/staticdata/icons/ships/33818.png deleted file mode 100644 index eeee2dd25..000000000 Binary files a/staticdata/icons/ships/33818.png and /dev/null differ diff --git a/staticdata/icons/ships/33820.png b/staticdata/icons/ships/33820.png deleted file mode 100644 index 7fd8f17fe..000000000 Binary files a/staticdata/icons/ships/33820.png and /dev/null differ diff --git a/staticdata/icons/ships/34317.png b/staticdata/icons/ships/34317.png deleted file mode 100644 index 4ee292a54..000000000 Binary files a/staticdata/icons/ships/34317.png and /dev/null differ diff --git a/staticdata/icons/ships/34328.png b/staticdata/icons/ships/34328.png deleted file mode 100644 index 511da8b21..000000000 Binary files a/staticdata/icons/ships/34328.png and /dev/null differ diff --git a/staticdata/icons/ships/34562.png b/staticdata/icons/ships/34562.png deleted file mode 100644 index ddcf4fc4b..000000000 Binary files a/staticdata/icons/ships/34562.png and /dev/null differ diff --git a/staticdata/icons/ships/34590.png b/staticdata/icons/ships/34590.png deleted file mode 100644 index ebd67d51a..000000000 Binary files a/staticdata/icons/ships/34590.png and /dev/null differ diff --git a/staticdata/icons/ships/3514.png b/staticdata/icons/ships/3514.png deleted file mode 100644 index f92b14e53..000000000 Binary files a/staticdata/icons/ships/3514.png and /dev/null differ diff --git a/staticdata/icons/ships/3516.png b/staticdata/icons/ships/3516.png deleted file mode 100644 index c63adcd8e..000000000 Binary files a/staticdata/icons/ships/3516.png and /dev/null differ diff --git a/staticdata/icons/ships/3518.png b/staticdata/icons/ships/3518.png deleted file mode 100644 index e67af7ec2..000000000 Binary files a/staticdata/icons/ships/3518.png and /dev/null differ diff --git a/staticdata/icons/ships/3532.png b/staticdata/icons/ships/3532.png deleted file mode 100644 index ba8aef4be..000000000 Binary files a/staticdata/icons/ships/3532.png and /dev/null differ diff --git a/staticdata/icons/ships/3756.png b/staticdata/icons/ships/3756.png deleted file mode 100644 index 3988c9096..000000000 Binary files a/staticdata/icons/ships/3756.png and /dev/null differ diff --git a/staticdata/icons/ships/3764.png b/staticdata/icons/ships/3764.png deleted file mode 100644 index f40d9355f..000000000 Binary files a/staticdata/icons/ships/3764.png and /dev/null differ diff --git a/staticdata/icons/ships/3766.png b/staticdata/icons/ships/3766.png deleted file mode 100644 index 51550818a..000000000 Binary files a/staticdata/icons/ships/3766.png and /dev/null differ diff --git a/staticdata/icons/ships/4302.png b/staticdata/icons/ships/4302.png deleted file mode 100644 index bf64f07a2..000000000 Binary files a/staticdata/icons/ships/4302.png and /dev/null differ diff --git a/staticdata/icons/ships/4306.png b/staticdata/icons/ships/4306.png deleted file mode 100644 index eb7d6a19e..000000000 Binary files a/staticdata/icons/ships/4306.png and /dev/null differ diff --git a/staticdata/icons/ships/4308.png b/staticdata/icons/ships/4308.png deleted file mode 100644 index e2955fda6..000000000 Binary files a/staticdata/icons/ships/4308.png and /dev/null differ diff --git a/staticdata/icons/ships/4310.png b/staticdata/icons/ships/4310.png deleted file mode 100644 index 7fcf5b9a7..000000000 Binary files a/staticdata/icons/ships/4310.png and /dev/null differ diff --git a/staticdata/icons/ships/4363.png b/staticdata/icons/ships/4363.png deleted file mode 100644 index d8c4db940..000000000 Binary files a/staticdata/icons/ships/4363.png and /dev/null differ diff --git a/staticdata/icons/ships/4388.png b/staticdata/icons/ships/4388.png deleted file mode 100644 index 23dc1da00..000000000 Binary files a/staticdata/icons/ships/4388.png and /dev/null differ diff --git a/staticdata/icons/ships/582.png b/staticdata/icons/ships/582.png deleted file mode 100644 index e104efb03..000000000 Binary files a/staticdata/icons/ships/582.png and /dev/null differ diff --git a/staticdata/icons/ships/583.png b/staticdata/icons/ships/583.png deleted file mode 100644 index 2b7fedebd..000000000 Binary files a/staticdata/icons/ships/583.png and /dev/null differ diff --git a/staticdata/icons/ships/584.png b/staticdata/icons/ships/584.png deleted file mode 100644 index 9258d9674..000000000 Binary files a/staticdata/icons/ships/584.png and /dev/null differ diff --git a/staticdata/icons/ships/585.png b/staticdata/icons/ships/585.png deleted file mode 100644 index cb2ab14db..000000000 Binary files a/staticdata/icons/ships/585.png and /dev/null differ diff --git a/staticdata/icons/ships/586.png b/staticdata/icons/ships/586.png deleted file mode 100644 index 4a23d6c2d..000000000 Binary files a/staticdata/icons/ships/586.png and /dev/null differ diff --git a/staticdata/icons/ships/587.png b/staticdata/icons/ships/587.png deleted file mode 100644 index 893185ef7..000000000 Binary files a/staticdata/icons/ships/587.png and /dev/null differ diff --git a/staticdata/icons/ships/588.png b/staticdata/icons/ships/588.png deleted file mode 100644 index 65798f8cf..000000000 Binary files a/staticdata/icons/ships/588.png and /dev/null differ diff --git a/staticdata/icons/ships/589.png b/staticdata/icons/ships/589.png deleted file mode 100644 index 528ee1cb6..000000000 Binary files a/staticdata/icons/ships/589.png and /dev/null differ diff --git a/staticdata/icons/ships/590.png b/staticdata/icons/ships/590.png deleted file mode 100644 index 3ccf54af7..000000000 Binary files a/staticdata/icons/ships/590.png and /dev/null differ diff --git a/staticdata/icons/ships/591.png b/staticdata/icons/ships/591.png deleted file mode 100644 index 6c755e1b2..000000000 Binary files a/staticdata/icons/ships/591.png and /dev/null differ diff --git a/staticdata/icons/ships/592.png b/staticdata/icons/ships/592.png deleted file mode 100644 index b8cbd1b20..000000000 Binary files a/staticdata/icons/ships/592.png and /dev/null differ diff --git a/staticdata/icons/ships/593.png b/staticdata/icons/ships/593.png deleted file mode 100644 index 5488d75ae..000000000 Binary files a/staticdata/icons/ships/593.png and /dev/null differ diff --git a/staticdata/icons/ships/594.png b/staticdata/icons/ships/594.png deleted file mode 100644 index 07a943570..000000000 Binary files a/staticdata/icons/ships/594.png and /dev/null differ diff --git a/staticdata/icons/ships/596.png b/staticdata/icons/ships/596.png deleted file mode 100644 index ebd61de6f..000000000 Binary files a/staticdata/icons/ships/596.png and /dev/null differ diff --git a/staticdata/icons/ships/597.png b/staticdata/icons/ships/597.png deleted file mode 100644 index 233b955e6..000000000 Binary files a/staticdata/icons/ships/597.png and /dev/null differ diff --git a/staticdata/icons/ships/598.png b/staticdata/icons/ships/598.png deleted file mode 100644 index 64933536e..000000000 Binary files a/staticdata/icons/ships/598.png and /dev/null differ diff --git a/staticdata/icons/ships/599.png b/staticdata/icons/ships/599.png deleted file mode 100644 index 0c73731a0..000000000 Binary files a/staticdata/icons/ships/599.png and /dev/null differ diff --git a/staticdata/icons/ships/601.png b/staticdata/icons/ships/601.png deleted file mode 100644 index eed3dc0d4..000000000 Binary files a/staticdata/icons/ships/601.png and /dev/null differ diff --git a/staticdata/icons/ships/602.png b/staticdata/icons/ships/602.png deleted file mode 100644 index 9c39209c0..000000000 Binary files a/staticdata/icons/ships/602.png and /dev/null differ diff --git a/staticdata/icons/ships/603.png b/staticdata/icons/ships/603.png deleted file mode 100644 index bf1c6cd0a..000000000 Binary files a/staticdata/icons/ships/603.png and /dev/null differ diff --git a/staticdata/icons/ships/605.png b/staticdata/icons/ships/605.png deleted file mode 100644 index a246141f4..000000000 Binary files a/staticdata/icons/ships/605.png and /dev/null differ diff --git a/staticdata/icons/ships/606.png b/staticdata/icons/ships/606.png deleted file mode 100644 index 4a916e83f..000000000 Binary files a/staticdata/icons/ships/606.png and /dev/null differ diff --git a/staticdata/icons/ships/607.png b/staticdata/icons/ships/607.png deleted file mode 100644 index 9ea4778a6..000000000 Binary files a/staticdata/icons/ships/607.png and /dev/null differ diff --git a/staticdata/icons/ships/608.png b/staticdata/icons/ships/608.png deleted file mode 100644 index 63f60a6de..000000000 Binary files a/staticdata/icons/ships/608.png and /dev/null differ diff --git a/staticdata/icons/ships/609.png b/staticdata/icons/ships/609.png deleted file mode 100644 index fa3cb1db3..000000000 Binary files a/staticdata/icons/ships/609.png and /dev/null differ diff --git a/staticdata/icons/ships/615.png b/staticdata/icons/ships/615.png deleted file mode 100644 index 217325e18..000000000 Binary files a/staticdata/icons/ships/615.png and /dev/null differ diff --git a/staticdata/icons/ships/617.png b/staticdata/icons/ships/617.png deleted file mode 100644 index 6f93e0917..000000000 Binary files a/staticdata/icons/ships/617.png and /dev/null differ diff --git a/staticdata/icons/ships/620.png b/staticdata/icons/ships/620.png deleted file mode 100644 index 130d29aba..000000000 Binary files a/staticdata/icons/ships/620.png and /dev/null differ diff --git a/staticdata/icons/ships/621.png b/staticdata/icons/ships/621.png deleted file mode 100644 index 9c0c270aa..000000000 Binary files a/staticdata/icons/ships/621.png and /dev/null differ diff --git a/staticdata/icons/ships/622.png b/staticdata/icons/ships/622.png deleted file mode 100644 index cbed1a50f..000000000 Binary files a/staticdata/icons/ships/622.png and /dev/null differ diff --git a/staticdata/icons/ships/623.png b/staticdata/icons/ships/623.png deleted file mode 100644 index 5699d3311..000000000 Binary files a/staticdata/icons/ships/623.png and /dev/null differ diff --git a/staticdata/icons/ships/624.png b/staticdata/icons/ships/624.png deleted file mode 100644 index e73c9af3d..000000000 Binary files a/staticdata/icons/ships/624.png and /dev/null differ diff --git a/staticdata/icons/ships/625.png b/staticdata/icons/ships/625.png deleted file mode 100644 index b2800bed4..000000000 Binary files a/staticdata/icons/ships/625.png and /dev/null differ diff --git a/staticdata/icons/ships/626.png b/staticdata/icons/ships/626.png deleted file mode 100644 index b4507719e..000000000 Binary files a/staticdata/icons/ships/626.png and /dev/null differ diff --git a/staticdata/icons/ships/627.png b/staticdata/icons/ships/627.png deleted file mode 100644 index 165b11a13..000000000 Binary files a/staticdata/icons/ships/627.png and /dev/null differ diff --git a/staticdata/icons/ships/628.png b/staticdata/icons/ships/628.png deleted file mode 100644 index 9a7a5ebc5..000000000 Binary files a/staticdata/icons/ships/628.png and /dev/null differ diff --git a/staticdata/icons/ships/629.png b/staticdata/icons/ships/629.png deleted file mode 100644 index 09ca053b8..000000000 Binary files a/staticdata/icons/ships/629.png and /dev/null differ diff --git a/staticdata/icons/ships/630.png b/staticdata/icons/ships/630.png deleted file mode 100644 index de7f4fbbf..000000000 Binary files a/staticdata/icons/ships/630.png and /dev/null differ diff --git a/staticdata/icons/ships/631.png b/staticdata/icons/ships/631.png deleted file mode 100644 index d0505457e..000000000 Binary files a/staticdata/icons/ships/631.png and /dev/null differ diff --git a/staticdata/icons/ships/632.png b/staticdata/icons/ships/632.png deleted file mode 100644 index 178c931b5..000000000 Binary files a/staticdata/icons/ships/632.png and /dev/null differ diff --git a/staticdata/icons/ships/633.png b/staticdata/icons/ships/633.png deleted file mode 100644 index 9777ac2fd..000000000 Binary files a/staticdata/icons/ships/633.png and /dev/null differ diff --git a/staticdata/icons/ships/634.png b/staticdata/icons/ships/634.png deleted file mode 100644 index a033cdde2..000000000 Binary files a/staticdata/icons/ships/634.png and /dev/null differ diff --git a/staticdata/icons/ships/635.png b/staticdata/icons/ships/635.png deleted file mode 100644 index ab8bced89..000000000 Binary files a/staticdata/icons/ships/635.png and /dev/null differ diff --git a/staticdata/icons/ships/638.png b/staticdata/icons/ships/638.png deleted file mode 100644 index 041685249..000000000 Binary files a/staticdata/icons/ships/638.png and /dev/null differ diff --git a/staticdata/icons/ships/639.png b/staticdata/icons/ships/639.png deleted file mode 100644 index 2b3f0f3cc..000000000 Binary files a/staticdata/icons/ships/639.png and /dev/null differ diff --git a/staticdata/icons/ships/640.png b/staticdata/icons/ships/640.png deleted file mode 100644 index c929b3ac5..000000000 Binary files a/staticdata/icons/ships/640.png and /dev/null differ diff --git a/staticdata/icons/ships/641.png b/staticdata/icons/ships/641.png deleted file mode 100644 index 75cf76331..000000000 Binary files a/staticdata/icons/ships/641.png and /dev/null differ diff --git a/staticdata/icons/ships/642.png b/staticdata/icons/ships/642.png deleted file mode 100644 index 8afcc5480..000000000 Binary files a/staticdata/icons/ships/642.png and /dev/null differ diff --git a/staticdata/icons/ships/643.png b/staticdata/icons/ships/643.png deleted file mode 100644 index ebf0e130c..000000000 Binary files a/staticdata/icons/ships/643.png and /dev/null differ diff --git a/staticdata/icons/ships/644.png b/staticdata/icons/ships/644.png deleted file mode 100644 index b3b920fe9..000000000 Binary files a/staticdata/icons/ships/644.png and /dev/null differ diff --git a/staticdata/icons/ships/645.png b/staticdata/icons/ships/645.png deleted file mode 100644 index 4504a0ec4..000000000 Binary files a/staticdata/icons/ships/645.png and /dev/null differ diff --git a/staticdata/icons/ships/648.png b/staticdata/icons/ships/648.png deleted file mode 100644 index b21bed85a..000000000 Binary files a/staticdata/icons/ships/648.png and /dev/null differ diff --git a/staticdata/icons/ships/649.png b/staticdata/icons/ships/649.png deleted file mode 100644 index f80819c26..000000000 Binary files a/staticdata/icons/ships/649.png and /dev/null differ diff --git a/staticdata/icons/ships/650.png b/staticdata/icons/ships/650.png deleted file mode 100644 index 918520042..000000000 Binary files a/staticdata/icons/ships/650.png and /dev/null differ diff --git a/staticdata/icons/ships/651.png b/staticdata/icons/ships/651.png deleted file mode 100644 index 6bdc6758e..000000000 Binary files a/staticdata/icons/ships/651.png and /dev/null differ diff --git a/staticdata/icons/ships/652.png b/staticdata/icons/ships/652.png deleted file mode 100644 index 310427302..000000000 Binary files a/staticdata/icons/ships/652.png and /dev/null differ diff --git a/staticdata/icons/ships/653.png b/staticdata/icons/ships/653.png deleted file mode 100644 index 05eb511d3..000000000 Binary files a/staticdata/icons/ships/653.png and /dev/null differ diff --git a/staticdata/icons/ships/654.png b/staticdata/icons/ships/654.png deleted file mode 100644 index 325c2ac9e..000000000 Binary files a/staticdata/icons/ships/654.png and /dev/null differ diff --git a/staticdata/icons/ships/655.png b/staticdata/icons/ships/655.png deleted file mode 100644 index 994507b2a..000000000 Binary files a/staticdata/icons/ships/655.png and /dev/null differ diff --git a/staticdata/icons/ships/656.png b/staticdata/icons/ships/656.png deleted file mode 100644 index 0528029f6..000000000 Binary files a/staticdata/icons/ships/656.png and /dev/null differ diff --git a/staticdata/icons/ships/657.png b/staticdata/icons/ships/657.png deleted file mode 100644 index 650b911c8..000000000 Binary files a/staticdata/icons/ships/657.png and /dev/null differ diff --git a/staticdata/icons/ships/671.png b/staticdata/icons/ships/671.png deleted file mode 100644 index d9760b126..000000000 Binary files a/staticdata/icons/ships/671.png and /dev/null differ diff --git a/staticdata/icons/ships/672.png b/staticdata/icons/ships/672.png deleted file mode 100644 index adaf76edc..000000000 Binary files a/staticdata/icons/ships/672.png and /dev/null differ diff --git a/staticdata/icons/version.xml b/staticdata/icons/version.xml deleted file mode 100644 index 542abefd8..000000000 --- a/staticdata/icons/version.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - Inferno - 1.1 - - - 4 - Icons for new modules - -