Программа, которую я пишу, может редактировать один проект за раз. Это означает, что открытие нового файла / проекта подразумевает закрытие предыдущего. Теперь я хочу добиться следующего рабочего процесса:
- У пользователя есть незафиксированные изменения в проекте, который он ранее никогда не сохранял, поэтому у проекта еще нет имени файла.
- Пользователь нажимает «открыть сохраненный проект».
- Появляется диалоговое окно «A», в котором говорится: «В вашем текущем проекте есть незафиксированные изменения, что бы вы хотели сделать? Прервать работу нового проекта, отменить изменения в текущем проекте или сохранить их?».
- Пользователь выбирает диалог "Сохранить".
- Диалог А закрывается.
- Появляется диалоговое окно B1 (средство выбора файлов, настроенное для операции сохранения).
- Пользователь выбирает имя файла для сохранения проекта.
- Диалог B1 закрывается, проект сохраняется.
- Всплывающее диалоговое окно B2 (тот же самый выбор файла, но настроенный для операции загрузки).
- Пользователь выбирает файл для открытия.
- Диалог B2 закрывается, проект загружается.
Таким образом, в приведенном выше примере шаги с 3 по 8 являются своего рода «прерыванием» в очевидном рабочем процессе открытия сохраненного проекта, поэтому, когда открываются диалоги A и B1, очевидный рабочий процесс останавливается и возобновляется, когда на эти диалоги отвечают.
У меня вопрос: как реализовать этот механизм остановки / возобновления нормального потока операций? До сих пор я реализовал это через стек, в котором - каждый раз, когда я открываю всплывающее диалоговое окно, - я нажимаю «обратный вызов возобновления отсюда», и каждый раз, когда я отвечаю, я извлекаю обратный вызов из.
... все же кажется, что у меня очень распространенный сценарий, для которого должен быть более простой метод (возможно, особая функция PyGTK!).
Большое спасибо заранее за вашу помощь / время!