Rip: Installer Links part I
wx wrappers in balt
Nitpick in installers
More InstallerLink ripped
Installers and Files links wx free
Installer_Subs & InstallerDetails Espm Links not an InstallerLink subclass:

Were not using InstallerLink methods.
New EnabledLink class to encapsulate common behavior
Notice 'data' - what the hell is it ? An integer apparently the index of
the espm - self.data should be the same I this case, so _enable() SHOULD
function correctly.
Duh
InstallerDetails Espm & Installer_Subs Links rip
InstallerProject Links and some wrapping and nitpick:

Some wrong/unneeded help attributes removed, List_Column(CheckLink).
InstallerArchive_Unpack + InstallerProject_Pack - REVIEW then SQUASH
Link.title attribute deleted:

Whenever used was set to the Link text (the _Link.text attribute) except:

Installers_UninstallAllPackages
Installers_UninstallAllUnknownFiles
Installers_AutoRefreshBethsoft
Installers_Enabled
Installer_Move

where the rather generic 'Installers' was displayed as the dialog title
(set in self.title = window.data.title).
Now those display the text of the link as the title except
Installers_Enabled which needed edit.

Notice that InstallerConverter_Apply has special title (text is set in
__init__) and also InstallerConverter_Create has different dialogTitle
from the Link text.
Interlude: wx image types to balt and image lists to constants:

The usual question - bosh.dirs initialization.
Rest of InstallerLinks
Installer_CreateNewProject -> Installers_CreateNewProject, finalizing:

InstallerLink made module private, Installer_CreateNewProject was an
Installers Link, moved to proper file
Mods Links rip:

bashFrameSetTitle introduced to workaround bashFrame being null on import.
balt.getKeyState() wrapper (wx.GetKeyState(83) - DUH)
modList

@@ -2227,3 +2228,4 @@ def __init__(self,parent):
         global modList
-        modList = ModList(left)
+        from . import mods_links
+        mods_links.modList = modList = ModList(left)
         self.list = modList
Mod_SkipDirtyCheck, Mod_AllowGhosting ESCAPE ME
Mod_*_Import/Export(_Link)

import export  fixup

rest of import/export
data vs self.data = they are the same in the case of the ModList

@@ -8998,3 +8998,9 @@ class Mod_FullLoad(EnabledLink):

-    def _enable(self): return len(self.data) == 1 # TODO(ut): was data param
+    def _enable(self):
+        print 'self data', self.data
+        return len(self.data) == 1 # TODO(ut): was data param
+
+    def AppendToMenu(self,menu,window,data):
+        print 'data', data
+        EnabledLink.AppendToMenu(self,menu,window,data)
_Link moved to balt:

+ a warning in Links:

http://stackoverflow.com/questions/3013449/list-filtering-list-comprehension-vs-lambda-filter#comment3079815_3013449
MenuLink(_Link)
Generate id + MenuLink(Link) - maybe move stuff to _Link - EDIT:

EDIT:List_Columns(balt.MenuLink) separate
EDIT:# TODO(ut) M with Enabled
EDIT: tuple as default argument in List_Columns(balt.MenuLink)

This stuff:
         Link.Popup = menu
         wx.EVT_MENU(Link.Frame,self.id,self.Execute)
         wx.EVT_MENU_HIGHLIGHT_ALL(Link.Frame,Link.ShowHelp)
         wx.EVT_MENU_OPEN(Link.Frame,Link.OnMenuOpen)
Used in List columns menu though