[Devel] [Ошибка 5939] Сделать глобальные настройки

Evgeny Sinelnikov sin на etersoft.ru
Пт Сен 3 16:36:10 MSD 2010


3 сентября 2010 г. 11:29 пользователь  <bugs на lists.etersoft.ru> написал:
> http://bugs.etersoft.ru/show_bug.cgi?id=5939
>
>
> Илья Шпигорь <shpigor на etersoft.ru> changed:
>
>           What    |Removed                     |Added
> ----------------------------------------------------------------------------
>       Hours Worked|                            |0.5
>         AssignedTo|yv на etersoft.ru              |mdevaev на etersoft.ru
>           Severity|minor                       |major
>             Status|ASSIGNED                    |NEW
>           Priority|P4                          |P3
>
>
>
>
> --- Comment #5 from Илья Шпигорь <shpigor на etersoft.ru>  2010-09-03 11:29:26 ---
> Насколько понимаю глобальные настройки
> определяют не только поведение GUI, но и
> что-то еще (возможно порядок чистки логов,
> временных файлов, БД).
>

Ну, gconf к GTK не привязан. Он использует то же, что и большинство
наших сервисных приложений: libsigc, libglibmm, libglib, libgobject.

> В таком случае стоит сделать отдельное GUI
> приложение для работы с этими настройками.
> В качестве эксперимента предлагаю сделать
> его на python'е с использованием Qt (для оценки
> его возможностей по сравнению с Gtk).
>

экспериментировать с QT нет никакого смысла - там есть свои механизмы
сохранения настроек:
http://doc.qt.nokia.com/4.6/qsettings.html#details

Делать это отдельным приложений, в принципе, нет никакой сложности. Но
я не понимаю зачем.

Давайте перечислим все настройки, какие нам нужны. Исходить будем из
задачи восстановления сеанса запущенного приложения. Я вижу слежующий
список:
- расположение "окна управления";
- расположение "журнала сообщений";
- параметры осциллографа, по умолчанию:
  - размер временных файлов осциллографа;
  - циклическая перезапись каналов осциллографа;
  - запись всех каналов осциллографа;
- расположение и настойки параметров отдельных окон осциллографа,
список отображаемых каналов (собственно датчики, порядок их
отображения и цвета).

Какие ещё настройки видятся необходимыми?

> Задача:
> На данный момент нужен общий каркас -
> чтение неких тестовых числовых параметров
> из gconf, их отображение в графическом
> интерфейсе, изменение и сохранение их
> обратно.
>

Я уже приводил пример. Давайте сделаю отдельный собираемый вариант и
выложу в git.

> При этом надо не забывать, что GUI стенда
> тоже должно иметь доступ к этим настройкам.
> Поэтому предлагаю также разработать класс
> на C++ для их чтения.
>

Класс для чтения настроек уже написан и находится в библиотеке
libgconfmm2. Вот пример его использования:
http://people.gnome.org/~newren/tutorials/developing-with-gnome/html/apd.html

Собственно вот основной интерфейс для работы с натройками:
http://www.gtkmm.org/gnomemm2/reference/html/classGnome_1_1Conf_1_1Client.html

Вот вариант чтения настройки:
  // Determine whether button should start activated or not
  d_old_setting =
    d_conf_client->get_bool("/apps/metacity/general/reduced_resources");
  d_checkbutton->set_active(d_old_setting);

Самое главное - это разработать схему. То есть представить как будут
храниться настройки? Какими типами данных они будут представлены?

Схемы описываются в специальных файлах, которые расположены в
каталоге: /etc/gconf/schemas/
Читать и писать зарегистрированные конфиги просто. Самое главное, что
нужно понять - это как реализуются списки настроек динамических
объектов. Но не стоит беспокоится - это уже давно решённая задача. Все
апплеты - это динамические объекты.

Для сохранения динеамически создаваемых объектов (как у нас окна
осциллогрфа), создаются отдельные подкаталоги в иерархии настроек. Вот
пример у меня на сервере:
[sin на server ~]$ ls ~/.gconf/apps/panel/applets/
clock_screen0             %gconf.xml                mixer_screen0
        show_desktop_button_screen0  window_list_screen0
fast_user_switch_screen0  indicator_applet_screen0
notification_area_screen0  trashapplet_screen0
workspace_switcher_screen0

В нашем случае будет что-то вроде:
$ ls ~/.gconf/apps/standpm/oscillograph/
%gconf.xml oscillograph0 oscillograph1

И вот структуру этих подкаталогов и нужно, для начала, определить. Для
этого нужно уточнить те настройки, которые я перечислил выше.

-- 
Sin (Sinelnikov Evgeny)


Подробная информация о списке рассылки Devel