_Link tmp class to factor out duplicate code and wx dependencies:

Files, File Links and all up to InstallerLink(Link)
TODO: self.title - where is it used - replace with self.text
InstallerLink(Link) -> InstallerLink(_Link) part I - EDIT:

Edit: # separation of presentation and data TODO move to _Link ?
Edit: _enable() also introduced

I had to introduce _initData() - it's a hack cause I sometimes need to
customize the Installers (only ?) links text and help based on selected,
data etc attributes. Consider this an implementation detail, ugly at that:

Traceback (most recent call last):
  File "bash\balt.py", line 2030, in DoItemMenu
    self.itemMenu.PopupMenu(self,Link.Frame,selected)
  File "bash\balt.py", line 2085, in PopupMenu
    link.AppendToMenu(menu,parent,*args)
  File "bash\basher.py", line 9170, in AppendToMenu
    self.help = _(u"Duplicate selected %(installername)s.") % ({'installername':self.selected[0]})
AttributeError: Installer_Duplicate instance has no attribute 'selected'
Files links ripped - REVIEW:

I can't just import settings and bashFrame from basher - they will be None
So:

----------------------- Mopy/bash/basher/files_links.py -----------------------
index 69df419..c7c9c2b 100644
@@ -28,3 +28,3 @@
 from .. import balt, bosh, bush, bolt
-from . import _Link, settings, bashFrame, ListBoxes, bashBlue
+from . import _Link, bashFrame, ListBoxes, bashBlue
 from ..bolt import CancelError, SkipError, GPath, BoltError
@@ -56,3 +56,3 @@ def __init__(self,sortCol,prefix=''):
         self.sortCol = sortCol
-        self.sortName = settings['bash.colNames'][sortCol]
+        self.sortName = bosh.settings['bash.colNames'][sortCol]
         self.prefix = prefix

And then:

------------------------- Mopy/bash/basher/__init__.py -------------------------
index 5114ead..a25f758 100644
@@ -151,2 +151,4 @@

+def refreshData(): bashFrame.RefreshData() # TODO(ut): bashFrame is None in links files, ugly
+
 # Settings --------------------------------------------------------------------

----------------------- Mopy/bash/basher/files_links.py -----------------------
index c7c9c2b..df45dcb 100644
@@ -28,3 +28,3 @@
 from .. import balt, bosh, bush, bolt
-from . import _Link, bashFrame, ListBoxes, bashBlue
+from . import _Link, ListBoxes, bashBlue, refreshData
 from ..bolt import CancelError, SkipError, GPath, BoltError
@@ -139,3 +139,3 @@ def Execute(self,event):
             pass
-        bashFrame.RefreshData()
+        refreshData()

@@ -272,3 +272,3 @@ def Execute(self,event):
         #--Refresh stuff
-        bashFrame.RefreshData()
+        refreshData()
Installers links ripped - introduced gInstallers module attribute:

Same story as basher.settings/bashFrame
Installers_Skip Links ripped - notice I renamed some for consistency
BoolLink revamp = EDIT = avoid \ escapes when not needed:

text key and help are really class and not instance attributes - so made them
such.
_enable() to base
More installers + binned balt.Tank_Open:

It was only used in Installer_Open. Notice the help message was wrong
before (would display Open 'Bash Installers' instead of Open 'X Mod').
_enable put to use
_Installer_OpenAt = reviewww
Copy Conflicts to Project + Uninstall
baseUrl in open at SQUASH
def _enable(self): return True is the defqult =SQUASH
Rip: Installer Links part I
wx wrapers in balt
Nitpick in installers
Wrong except order
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