[basher] Nitpick and warnings:

Warn: Comparison with None performed with equality operators
Warn: Single quoted docstrings
Warn: Assignment can be replaced with augmented assignment
Warn: Remove redundant parentheses
Warn: Function call can be replaced with set literal (set syntax escapes me a
bit so have a look):

----------------------------- Mopy/bash/basher.py -----------------------------
index 15654da..b3a3616 100644
@@ -1523,3 +1523,3 @@ def RefreshUI(self,files='ALL',detail='SAME'):
         else:
-            selected = set([detail])
+            selected = {detail}
         #--Populate
@@ -1831,3 +1831,3 @@ def RefreshUI(self,files='ALL',detail='SAME',refreshSaves=True):
         else:
-            selected = set([detail])
+            selected = {detail}
         #--Populate
@@ -2481,3 +2481,3 @@ def ToggleBashTag(self,event):
         tag = self.allTags[event.GetId()-ID_TAGS.BASE]
-        modTags = self.modTags ^ set((tag,))
+        modTags = self.modTags ^ {tag}
         self.modInfo.setBashTags(modTags)
@@ -2858,3 +2858,3 @@ def RefreshUI(self,files='ALL',detail='SAME'):
         else:
-            selected = set([detail])
+            selected = {detail}
         #--Populate
@@ -4268,3 +4268,3 @@ def RefreshUI(self,files='ALL',detail='SAME'):
         else:
-            selected = set([detail])
+            selected = {detail}
         #--Populate
@@ -4447,3 +4447,3 @@ def RefreshUI(self,files='ALL',detail='SAME'):
         else:
-            selected = set([detail])
+            selected = {detail}
         #--Populate
@@ -4756,3 +4756,3 @@ def RefreshUI(self,files='ALL',detail='SAME'):
         else:
-            selected = set([detail])
+            selected = {detail}
         #--Populate
@@ -7708,3 +7708,3 @@ def OnItemChoice(self,event):
         choiceSet = self.configChoices[item]
-        choiceSet ^= set((choice,))
+        choiceSet ^= {choice}
         if choice != u'Auto':

Chopped off some long separator (dashes) comments.
Added desktop.ini and .dropbox files to gitignore and removed ~/ which was not a
good idea. Use .git/info/exclude but avoid the tilde (shell expanded, duh).
Duplicate code: C/P AliasesPatcher:

Notice very small difference in GetConfigPanel. Docs were copy pasted -
correct that.
Duplicate code in Mod_Export links:

_parser() method and class attributes to unify Export Links Execute()
methods. Notice there are 15 Mod_.*_Export links:
- CBash_Mod_CellBlockInfo violated the naming convention, fixed.
- Mod_Groups_Export does not belong to this group really
- _parser() should maybe be a class attribute

11 Links unified - not unified:
Mod_ActorLevels_Export
Mod_Groups_Export # add it to Mods Links
Mod_Scripts_Export
Mod_SpellRecords_Export
Removed basher import from barb and belt (+ warns/import cleanup):

Notice new bash.bashFrame global introduced to eliminate the basher import
in barb - needs review, not sure if initialized when I set it in bash.
Belt only needed basher.settings -> bosh.settings (in barb too!).

Warnings corrected:
Comparison with None performed with equality operators
Unused local variables
Basher package:

Ripped constants from basher and moved basher.py to basher/__init__.py to be
further split.
Nitpick:
Made scriptText into proper camel case as Pycharm was confused, rightly so.
Corrected the progress dialog title for Mod_ActorLevels_Export.
Merge branch 'utumno-basher-package' into dev:

Under #163
basher.py -> basher/
Review:
- 3fcbe3f87a99bca3f6aa85481697c0e3b073d390: are bashFrame and bosh.settings
properly initalized in barb/belt ?
- 6d654cc16709c0289a7235133c8fe9253a43b959: set literal
cProfile
TMP:Silly optimization in bolt cuts 230 primitive calls (to is_instance I guess)
TMP:comments
Fix (?) for calling getLoadOrder twice:

 not sure  if the change in the order here is important:
@@ -3111,4 +3115,4 @@ def refresh(self,forceRefresh=False):
         if hasChanged or forceRefresh:
-            self.loadActive()
             self.loadLoadOrder()
+            self.loadActive(lo_with_corrected_master=self.LoadOrder)
TMP:Comments and not calling _uni() in liblo.GetActivePlugins
HACK: introducing dataDict cache to speed up extremely slow lambda:

See: http://stackoverflow.com/a/26644244/281545
Previous HACK applied to saveInfos - notice dataDict is passed in - TODO:

there should be a common presentation layer cache. RefreshUI()s should use
self.loDictCache where this self.loDictCache should be set once along with
isRefreshing.
(<type 'exceptions.AttributeError'>, AttributeError("SaveInfos instance has no attribute 'plugins'",), None)
Nitpick: imports (from should be less performant + bosh housekeeping)
TMP: GetLoadOrder() + _uni removed:

No diff - need to profile
refreshInfoLists - REVIEW:

While refreshInfoLists executes is self.plugins not supposed to change
extennally ?
another getOrdered call passed dataDict in - REVIEW:

Needed to modify all SortItems just to pass the loDict to:

         elif col == 'Load Order':
-            self.items = bosh.modInfos.getOrdered(self.items,False)
+            self.items = bosh.modInfos.getOrdered(self.items,asTuple=False,dataDict=dataDict)
         elif col == 'Modified':

That's because PopulateItems is a superclass method (no less than List !!!)
- so all SortItems "gain " a dataDict param - ugly but due to not having a
cache somesupeclass level. Actually define UIList and a  _DatCache class
attribute at the superclass where RefreshUI() should be defined

FIXME: datDict in the constructor of the List must go !!!
TODO: wx imports only to List !
TMP: comments