[Devel] сохранение сеанса
Pavel Vaynerman
vpashka на gmail.com
Пт Сен 17 22:01:47 MSD 2010
> Если честно, как-то не хочется делать из главного окна "Божественный
> класс", который "все сделает".
Но вы уже это сделали... Что всё через него, следовательно надо продолжать
поддерживать эту идеологию..
Если бы осцилографы у вас были самостоятельными окнами (приложениями), то
конечно - это бы делали они сами..
---
Только я вот не пойму:
Я же не прошу в MainWindow сделать все механизмы сохранения и открытия сеанса.
Я видел это примерно так:
Пусть вы решили, что храните всё что нужно при помощи gconf.
Тогда:
(сохранение сеанса):
MainWindow ловит сигнал завершения работы (это либо закрытие окна, либо меню
Выход, ли бо ещё что-то). У него есть (или оно создаёт) экземпляр gconf
(я не знаю как gconf работает, но в любом случае для нас это будет класс
(обёртка) примерно с двумя функциями сохранить "ключ-заначение", загрузить..
щаз не важно..может и по другому).
MainWindow передаёт этот экземпляр всем "нуждающимся" в сохранении и они
сохраняют свои данные.. Осцилографы - свои, какие-то виджеты - свои..
И конечно логика и сохраняемая структура - это внутренее дело этих виджетов.
И всё.
Ну, для полноты, должно быть добавлено меню "Сохранить текущий сеанс"
(которое "принудительно" вызывает это механизм сохранения).. ну и "Загрузить
сеанс"..
Теперь (восстановление сеансов):
либо автоматом последний сохранённый (либо через меню "Загрузить")..
MainWindow создаёт экземпляр класса gconf и передаёт его всем "нуждающимся"
виджетам с просьбой "восстановить данные" и каждый виджет восстанавливает..
-------
Что касается осцилографов. Как я понимаю, есть некий "менеджер" осцилографов,
кторый их запускает.. У него конечно есть их список (ну или он может его
вести). Соотвественно он когда ему передадут gconf, сохранит свою информацию
(в свой раздел) о том, сколько и каких открыто.. Соотвественно при загрузке,
восстановит...
---------
Реализация может выглядеть примерно так:
class SessionObject
{
public:
virtual bool save( gconf* )=0;
virtual bool resotre( gconf* )=0;
}
И соотвественно все виджеты, каким надо наследуються от него..
--------
Это конечно всё пока "умозрительно"..
----------- следующая часть -----------
Вложение в формате HTML было удалено...
URL: <http://lists.etersoft.ru/pipermail/devel/attachments/20100917/d99d9147/attachment.html>
Подробная информация о списке рассылки Devel