[Devel] Идея привязки событий к виджетам
Ilya Shpigor
shpigor на etersoft.ru
Вт Сен 28 11:51:08 MSD 2010
Существует проблема.
Есть виджеты на главной схеме и есть ряд событий которые должны обрабатываться
(нажатие на виджет).
Сейчас привязка обработчиков событий ко всем виджетам происходит в MainWindow.
Для этого:
1. Все виджеты загружаются из glade-файла (т.е. MainWindow получает указатели
на них)
2. Для каждого загруженного виджета происходит назначение обработчика
Почему это плохо, думаю, всем понятно (см. код src/GUI/MainWindow.cc и
src/GUI/MainWindow.h).
В ходе обработки событий может происходить:
1. Открытие "Списка параметров" - это создание нового экземпляра ParamViewer
2. Открытие осциллографа - означает обращение к единственному объекту
OscilClient, который является атрибутом MainWindow
3. Печать - еще не реализована, но насколько понимаю здесь тоже будет
создаваться экземпляр какого-то объекта.
Предложение сдеать так:
1. Обработчиком должен быть метод базового класса всех объектов
(USimpleObject).
Назначение обработчика происходит в этом же базовом классе. При этом дочерние
виджеты могут вешать свои обработчики нажатия мыши. В Gtk все обработчики
вызываются по цепочке.
2. Добавить класс UPopupMenu для абстракции "всплывающее меню".
Этот объект умеет:
1) Обрабатывать какждый свой пункт (открывать список параметров, осциллограф,
распечатывать информацию по объекту)
2) Генерировать пункты меню по заданному списку датчиков (пункты
типа "Осциллограф для напряжения")
Соответственно этот объект UObjectMenu должен знать:
1) Какой объект его вызвал (указатель на объект типа USimpleObject)
2) Как работать с ParamViewer
3) Как работать с печатью
4) Указатель на глобальный OscilClient и как с ним работать
В итоге:
1. Виджеты ничего не знают ни про ParamViewer, ни про осцилограф, ни про
печать
2. MainWindow ничего не знает про виджеты (не надо их загружать из glade) и не
содержит реализацию их поведения (обработчики)
--
Best regards,
Ilya Shpigor.
Подробная информация о списке рассылки Devel