# Защита от ошибок

Защита от ошибок

Здесь приведён список всевозможных мелочей, призванных улучшить взаимодействие пользователя с программой. Все эти детали следует учесть при портировании Тасэдитора на другие платформы.

- Когда пользователь выходит из эмулятора, тот сначала подаёт запрос Тасэдитору, чтобы Тасэдитор мог сохранить текущий проект. Если в проекте имеются несохранённые данные, Тасэдитор выводит диалог Yes/No/Cancel. Пользователь может либо сохранить изменения, либо не сохранять их, либо отменить выход из эмулятора.
- При проигрывании fm3-проектов вне Тасэдитора (в виде обычных мувиков) пользователь может переключить эмулятор в режим Записи и попытаться осуществить перезапись. В этом случае эмулятор сообщает пользователю, что текущий мувик является проектом Тасэдитора, и предлагает начать его редактирование. В случае отказа эмулятор отключает режим Записи и продолжает проигрывание Ввода из файла проекта. В случае согласия эмулятор подаёт сигнал Тасэдитору, и в конце текущего кадра тот запустится и загрузит текущий проигрываемый проект.
- Когда в эмулятор загружен РОМ, запустить Тасэдитор можно в любой момент. Если открыть окно Тасэдитора во время записи или проигрывания мувика, Тасэдитор автоматически создаст безымянный проект, содержащий Ввод из этого мувика. При этом, если мувик начинается с сэйва, Тасэдитор выдаст предупреждение об отсутствии поддержки таких мувиков и создаст чистый мувик.
- Пока проекту не присвоено имя, функция автоматического сохранения не работает.
- При первом сохранении безымянного проекта Тасэдитор предлагает в качестве имени fm3-файла имя текущего РОМа с расширением, изменённым на fm3.
- Так как формат fm3 является надстройкой над форматом fm2, пользователь может открывать fm2-файлы как обычные проекты – через диалог "Open TAS Editor Project", выбрав фильтр "All Files (*.*)". При открытии fm2-файлов Тасэдитор дополнительно информирует об этом с помощью диалога Yes/No. Пользователь может либо загрузить fm2-файл в качестве нового проекта, либо отменить загрузку.
- После открытия fm2-файла или запорченного fm3-файла этот проект считается безымянным, хотя в заголовке окна Тасэдитора отображается имя загруженного файла. При первом сохранении (Ctrl + S) появится диалог SaveAs, где в качестве имени будет предложено имя загруженного fm2/fm3-файла с расширением, изменённым на fm3. Пользователь может либо сохранить проект под этим именем, либо изменить имя. Таким образом Тасэдитор акцентирует внимание пользователя на том, что сохраняемый проект значительно отличается от имеющегося на диске файла под тем же именем.
- В fm3-проектах хранится номер версии используемого fm3-формата. Разные версии могут быть полностью или частично не совместимы между собой. Если при загрузке проекта его версия не совпадает с текущей поддерживаемой версией, проект считается запорченным. Тасэдитор выводит диалог Yes/No/Cancel. Пользователь может либо продолжить попытку загрузки всего проекта (не рекомендуется), либо загрузить из проекта только fm2-данные о Вводе (рекомендуется), либо отменить загрузку.
- Формат fm2 (а значит, и fm3) хранит MD5-чексумму РОМа, использованного при создании мувика/проекта. При загрузке проектов Тасэдитор сверяет чексумму текущего РОМа с чексуммой из проекта, и если они не совпадают, выводит диалог Yes/No, отображающий оригинальное и текущее имя РОМа. Пользователь может либо продолжить загрузку, либо отменить её. Далее, при сохранении этого проекта Тасэдитор вновь обнаружит несовпадение чексумм и предложит заменить в сохраняемом файле имя РОМа и его MD5-чексумму. Пользователь может либо подтвердить замену, либо сохранить проект со старым именем и чексуммой, либо отменить сохранение.
- При загрузке запорченных файлов проектов Тасэдитор в меру сил пытается не допустить зависание эмулятора. При обнаружении ошибки во время загрузки дальнейшая загрузка прекращается, и незагруженные данные заменяются данными по умолчанию. В частности, если ошибка произошла во время загрузки Гринзоны, в проекте останутся только кадры Гринзоны, успешно вытащенные из файла, остальные кадры будут бледными. Сообщения об ошибках, произошедших при загрузке проекта, помещаются в Message Log эмулятора FCEUX.
- Во время загрузки проекта Тасэдитор принимает во внимание текущие настройки "Greenzone capacity" и "Undo levels". Например, если при сохранении проекта Greenzone capacity = 5000, а при загрузке Greenzone capacity = 3000, часть кадров во время загрузки будет пропущена. Это необходимо для того, чтобы проекты, сохранённые на более мощном компьютере, можно было загрузить и на слабом компьютере, у которого недостаточно памяти.
- При запуске Тасэдитор загружает данные о шаблонах из файла taseditor_patterns.txt. Если этот файл невозможно открыть (например, он удалён), Тасэдитор создаёт небольшой набор шаблонов по умолчанию, чтобы меню Patterns никогда не пустовало.
- Сохранения, используемые Гринзоной, немного отличаются от обычных сохранений. Они не содержат данные мувика, так как для Гринзоны это лишняя информация. Кроме того, они всегда сжаты, ради экономии памяти.
- Если в результате операции Delete или Lua Change пользователь удалит весь Ввод из мувика, Тасэдитор в тот же момент создаст один пустой кадр в начале мувика.
- Во время выделения региона кадров с помощью растягивания мышкой пользователь может второй рукой нажимать акселераторы и хоткеи. Чтобы не было конфликта, во время DRAG_MODE_SELECTION и DRAG_MODE_DESELECTION не срабатывают функции, свзанные с изменением выделения:

- clearSelection()
- selectAll()
- selectBetweenMarkers() – Ctrl + A
- selection.undo() – Ctrl + Q
- selection.redo() – Ctrl + W
- reselectClipboard() – Ctrl + B
- selection.Transpose() – Ctrl + Вверх, Ctrl + Вниз, Ctrl + Home, Ctrl + End
- selection.JumpPrevMarker() – Ctrl + Page Up
- selection.JumpNextMarker() – Ctrl + Page Down

- Так как столбец иконок в Piano Roll довольно узкий, пользователь может случайно промахнуться во время щелчка по этому столбцу. Поэтому при щелчке по левой границе Piano Roll, а также по пространству слева Piano Roll Тасэдитор считает, что был осуществлён щелчок по колонке иконок. В результате пользователю не нужно точно прицеливаться, когда требуется передвинуть Курсор Проигрывателя или начать его перетаскивание.
- Когда эмулятор стоит на паузе, средняя кнопка мыши работает только при условии, что правая кнопка мыши отпущена. Так как средняя кнопка обычно является колесом, пользователь может случайно надавить её при вращении колеса с зажатой правой кнопкой (перемещение Курсора Проигрывателя). Вращение колеса с зажатыми клавишами-модификаторами используется гораздо реже, поэтому для них защита не требуется.
- Щелчок средней кнопкой по окну FCEUX передаётся окну Тасэдитора. Точно так же передаётся сообщение в вращении колеса, когда фокус у окна FCEUX. А щелчок правой кнопкой по окну FCEUX никак не действует. Благодаря этому пользователь может использовать среднюю кнопку (колесо мыши), даже когда курсор мыши находится над окном FCEUX.
- Даже если включен режим Записи, во время добегания Тасэдитор не будет перезаписывать Ввод. Благодаря этой особенности можно свободно перетаскивать Курсор Проигрывателя без выключения режима Записи, не опасаясь затереть Ввод.
- Когда запущен Тасэдитор, следующие команды в меню FCEUX доступны только в режиме Записи и при отсутствии добегания:

- NES -> Reset
- NES -> Power
- NES -> Eject/insert Disk
- NES -> Switch Disk Side
- NES -> Insert Coin

- Когда запущен Тасэдитор, следующие команды в меню FCEUX не доступны:

- File -> Open ROM
- File -> Close
- File -> Recent
- File -> Savestate -> Load State
- File -> Savestate -> Save State
- File -> Savestate -> Load State From
- File -> Savestate -> Save State As
- File -> Savestate -> Next save slot
- File -> Savestate -> Previous save slot
- File -> Savestate -> View save slots
- File -> Movie -> Recent
- File -> Movie -> Record Movie
- File -> Movie -> Play Movie
- File -> Movie -> Stop Movie
- Config -> Enable -> Auto-savestates (всегда отключено во время работы Тасэдитора)
- Config -> Enable -> Backup Savestates (всегда отключено во время работы Тасэдитора)
- Config -> Enable -> Compress Savestates (всегда включено во время работы Тасэдитора)
- Config -> PAL Emulation (следует настроить это до запуска Тасэдитора)
- Config -> PPU -> New PPU / Old PPU (следует настроить это до запуска Тасэдитора)

- Также необходимо, чтобы пользователь не изменял настройки синхронизации мувика во время редактирования проекта. Когда запущен Тасэдитор, следующие элементы GUI в окне "Input Configuration" заблокированы:

- галочка "Attach four-score"
- галочка "Replace port 2 Start With Microphone"
- ListBox с выбором port0
- ListBox с выбором port1
- ListBox с выбором port2

- Когда запущен Тасэдитор, следующие хоткеи не работают:

- Hide Menu Toggle
- Fastest Speed
- Save State As...
- Load State From...
- Record Movie To...
- Play Movie From...
- Stop Movie
- Toggle Dipswitch – т.к. эти команды пока не поддерживаются форматом FM2
- Load Last Auto-save
- View save slots
- Open ROM
- Close ROM
- Undo/Redo Savestate
- Toggle Fullscreen

- Хоткеи, поведение которых меняется при запущенном Тасэдиторе:

- Power
- Reset
- Eject or Insert FDS Disk
- Switch FDS Disk Side
- Insert Coin
- Savestate Slot 0 – Savestate Slot 9
- Save State
- Save State to Slot 0 – Save State to Slot 9
- Load State
- Load State from Slot 0 – Load State from Slot 9
- Play Movie From Beginning
- Reload ROM or TAS Editor Project
- Open TAS Editor

- Так как клавиши Alt и F10 активно используются при работе в Тасэдиторе, их стандартное поведение (открытие меню программы) отключено.
- Так как клавиша Пробел по умолчанию используется в качестве хоткея, её стандартное действие (симуляция щелчка по элементу GUI, на котором находится фокус клавиатуры) отключена. Также каждый элемент GUI в окне Тасэдитора реализует обработку щелчка средней кнопкой мыши, отсылая это сообщение Проигрывателю, чтобы этот щелчок срабатывал независимо от положения курсора мыши.
- Так как контекстное меню при щелчке правой кнопкой по Piano Roll используется редко, оно появляется только когда пользователь щёлкает по выделенной строке в столбце номеров кадров (Frame#). В остальных случаях контекстное меню не появляется, зато при щелчке правой кнопкой по Piano Roll начинается удобное перетаскивание содержимого Piano Roll во все стороны.
- Так как правая кнопка часто используется для перемещения Курсора Проигрывателя колесом, программа поощряет щелчки этой кнопкой без оглядки на текущее положение курсора мыши. Теоретически пользователь может случайно щёлкнуть по Закладке. Чтобы не допустить случайных команд, Список Закладок и Дерево ответвлений требуют от пользователя нажать и отпустить правую кнопку на одной и той же Закладке. При этом, если между нажатием и отпусканием правой кнопки пользователь совершил вращение колесом, Закладка изменяться не будет.
- Пользователь может осуществлять прыжки на Закладки одинарным щелчком по желаемой иконке в Дереве ответвлений. При этом он ожидает, что голубой треугольник (иконка Курсора Проигрывателя) после щелчка окажется на этом месте в Дереве ответвлений. Это справедливо для Закладок, которые не противоречат текущей хронологии, но это не так для Закладок, представляющих альтернативные стратегии прохождения. При прыжках на кадры этих Закладок Курсор Проигрывателя будет находиться в другом ответвлении (хотя и на том же самом кадре). Чтобы заранее уведомить пользователя о возможном недопонимании с его стороны, при наведении на иконки таких Закладок курсор мыши превращается в стрелку с вопросительным знаком.
- Во время трансформации Дерева ответвлений наведение курсора мыши на его элементы не работает, потому что активная область элементов постоянно перемещается и убегает от курсора мыши.

Created with the Personal Edition of HelpNDoc: Full-featured Documentation generator