наконец-то появилось время выбраться к вам (коротки в России отпуска, понимаешь ... вышел на работу)
1.как говорил B4rr4cuda, модульность есть счастье. Глядишь другие начнут писать модули ... сам все дистрибутивы не охватишь.
с реализацией модульности определился - воспользовался одной из идеек, озвученных на форуме. Может со временем найдем лучше ... посмотрим. Пока же, пример взятый на вооружение работает и это главное. Шаблон модуля (де-факто библиотека) несет на борту форму, на которой программист разместит свои кнопочки, списки и т.д. То есть идея такова - желающий берет шаблон модуля и реализовывает свою идею. Единственное, что ему
необходимо сделать - это заполнить поля в процедуре whoami(см. ниже)
2.После не долгих размышлений пришел к выводу, что катологизация модулей все же необходима. Причем, список каталогов должен быть задан изначально, что бы потом не возникло путаницы. Список может быть потом расширен, но не изменен.
Примерны список на настоящий момент выглядит так:
1.Система
2.Оборудование
3.Точки монтирования
4.Сеть
5.Загрузка
6.Управление пакетами
7.Прочие центры управления // а почему нет
)
Если здесь есть предложения - вносите 3.Идентификация модуля как модуля для ЦУ организовал так - Подключаем библотеку, проверяем наличие процедуры whoami, если она есть - берем из нее данные о модуле. Если функции такой нет - выгружаем библиотеку и ищем следущую.
все это выглядит примерно так (все лишнее вырезано):
- Код: Выделить всё
library module_logs;
type
tinfo = record
distr : string[50]; // дистрибутив, для которого написан модуль
task : byte; // номер каталога в ЦУ, к которому относится модуль
caption : string[50]; // название модуля, которое оторбазится на кнопке запуска модуля
description : string[255]; // более подробное описание модуля
end;
procedure whoami(var info : tinfo);stdcall;
begin
info.distr:='mandriva 2007'; //если соответствует нашему дистрибутиву, но отображаем в ЦУ
info.task:=1; // отображаем в каталоге "Система"
info.caption := 'Logs';
info.description:= 'Logs viewer';
end;
exports whoami;
begin
end.
Здесь меня вот что смущает: первоначальная идея такова, если значение info.distr не соответствует нашему дистрибутиву, то отображаться модуль в ЦУ не будет. НО, дистрибутивов много, очень много ... и есть еще релизы дистрибутивов. И месторасположение одного и того же конфига может вырьироваться в зависимости от дистрибутива или даже релиза. Как здесь быть? Если жестко привязывать модуль к релизу, то модуль, работающий в мандрива 2007, не заработает в мандрива 2009, хотя конфиг будет лежать там же. В то же время, размещение ряда конфигов той же мандрива 2007 и мандрива 2006 разнятся.
Как здесь быть? Отдать на откуп пользователю? Или заставить создателей модулей реализовывать поиск расположения конфига при первом запуске и затем сохранять путь в файле настройки?
4.пока решил так - модули скидываются в отдельную папку и именно в этой папке ЦУ и будет их искать, т.е. так:
[папка с программой]
-sysconf - собственно ЦУ
-sysconf.conf - настройки программы
-{папка с модулями}
немного попахивает windows, но это избавляет нас рыскать по всему каталогу /usr/lib в поисках своих модулей. Впрочем, предложения принимаются.
Итак ваши мнения