В Вашем случае программа имеет только один путь исполнения, + условные переходы, достаточно просто проследить каков он. У меня точно такие-же схемы как у Вас в прошлых интернет-проэктах. Просто я от этого уже ушел, и рассказываю в каком напралении.
То о чем я говорю, важно там, где есть взаимоисключающие функции. (на них я решил делать всё последовательно). Если, например, на поле выделяются обьекты рамкой, потом юзер подвинул поле с Ctrl, и продолжает выделение, а в это время есть еще несколько функций которые ждут горячих клавиш, юзер вдруг зацепил шифт, и какая-то функция включилась, или он повернул ролик и изменился масштаб и т. п. Если юзер ткнул мышкой и попал на выделеный обьект то работают функции 1,6,8,4 а если попал на невыделенный то 3,5,8,6 Для такого бреда надо не только прописывать кучу ключей и флагов, но и наглядно видеть последовательность проги. Иначе отладка становится бесконечной.