rework selection mode logic
Currently the selection mode logic is all over the place. Individual widgets (de)activate other widgets or make them (in)visible when the selection mode is switched. This makes widgets over-complicated and uncontained. And there is probably a lot of unnecessary duplicated logic to achieve the same goal.
Instead the selection mode state should be centralized in (probably) the root window (
window.py) and state change should be propagated up and down the widget tree as properties to the widgets involved (see
songwidget as example). Widgets (objects) should handle their own visual changes and expose helper functions if needed.