<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->1.1. Будут обязательно в файле, а не в реестре. Но вот какой формат предпочесть, XML или INI, наверное потом решится, когда будет что настраивать<!--QuoteEnd--></div><!--QuoteEEnd-->
А что мешает сделать это в виде отдельного плагина? К примеру, описать интерфейс: enumSections(), enumProperties(section), getProperty(section, property), setProperty(section, property, value), removeProperty(section, property), removeSection(section) - ну, или как-то так. А потом сделать несколько плагинов, реализующих этот интерфейс. И чтобы все остальные плагины и само ядро редактора пользовались этим самым интерфейсом для сохранения своих настроек. А в качестве реализации - cfg_ini.dll, cfg_xml.dll, cfg_reg.dll, cfg_ftp.dll (типа свои настройки на ftp в виде файлика лежат - а плагин их оттуда читает, туда же и сохраняет - только юзернейм/пассворд ввести <!--emo&;)-->[img]style_emoticons/<#EMO_DIR#>/wink.gif[/img]<!--endemo-->. А потом можно сделать ещё плагин, который будет конвертить из одного формата в другой - используя эти же плагины и их общий интерфейс.
Зачем это нужно? А для удобства же. Многим удобно хранить конфиги в виде файла. А кому-то - кровь из носа, ну нужен реестр, потому как он админ, и у него в ведомстве 44 машины, и всем нужно срочно с помощью групповой полититки домена сделать одни и те же настройки (к примеру, препод заказал спец. конфигурацию этого редактора на один компьютерный класс). Да, конечно, можно файлы раскопировать. Но почему бы не сделать так, как предлагается - на каждый способ хранения конфига по плагину? И cfg_reg.dll реализовать можно в свободное время, и заняться этим может тот, кому это нужно - благо, архитектура позволяет.
А вот ещё идея. Встроили мы текст по OLE – и с помощью какого-нибудь cfg_ole.dll сохранили какие-нибудь важные настройки. Или некий cfg_inline.dll умеет читать настройки прямо из файла, который редактируется, как это делают VIM и Emacs:
- Код: выделить все
// vim:tw=78:ts=8:
Сие для VIM означает: ширина текста – 78 символов максимум, размер табуляции – 8 символов. А "//" – комментарий на языке программирования, на котором файл написан.
И ещё идея. База данных как в Миранде или VIM. У человека же не только настройки должны сохраняться, а ещё много чего: хистори, позиции в файлах… Например, VIM при выходе сохраняет историю команд, историю поиска, содержимое регистров (регистр – буфер обмена, коих может быть много), позицию в файле, другую всякую ерунду и полезную информацию.
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin-->Проблема не в том, как бы сделать такую панельку - это не сложно. Проблема в том, как лучше разрешить плагинам не просто открывать новые окошки, а добавлять какие-нибудь контролы в главное окно...<!--QuoteEnd--></div><!--QuoteEEnd-->
Может, сделать несколько типов окно, которые экспортируются плагинами? Например, DOCUMENT (что-то вроде документа по форме и отображению – то же Preview in Internet Explorer), PANEL, TOOLBAR, DIALOG, MODELESSDIALOG, и т.д. И передаётся при этом HWND, т.е. Виндузная структура, и тогда уже не важно, на чём плагин написан – он вставляется в нужное место как окно.
<!--QuoteBegin--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--QuoteEBegin--> 1.3. По поводу поддержки нескольких пользователей... Пока не знаю...<!--QuoteEnd--></div><!--QuoteEEnd-->
Может, просто сделать cfg_reg.dll и хранить настройки в HKEY_CURRENT_USER? Или cfg_ini.dll настроить на %APPDATA%\MyEditor\main.ini или %HOME%\myeditor.ini? Тогда настройки сами будут распихиваться куда нужно для каждого юзера.
И ещё мысли на счёт ускорения загрузки. Чтобы загружалось быстро, нужно грузить только необходимые плагины (а для диалога настроек некоторые данные вроде категории плагина и названия можно кешировать, и только в момент отображения собственно настроечных контролов подгружать плагин). К примеру, открывает человек .cpp. А из кеша плагинов ядро видит, что для .cpp:
1. используется плагин индентации indent\cpp.dll (или используется плагин indent.dll с файлом конфигуации indent\cpp.cfg)
2. используется плагин подсветки синтаксиса highlight\cpp.dll
3. используется набор шаблонов конструкций языка templates\cpp.txt (для всяких там for (;;) {}, if () {} else {} – ну, как во всех «модных» IDE)
4. используется плагин autocomplete\cpp.dll.
5. используется плагин outline\cscope.dll (который, к примеру, выгребает имена всех функций, типов, классов и показывает их в панельке где-то слева)
Т.е. при открытии .cpp подгружаются эти пять плагинов. А при открытии .txt – плагин детектирования кодировки и какой-нибудь general_indent.dll, а также autocomplete\general.dll (который, как это в VIM сделано, при нажатии Ctrl-P и Ctrl-N ищет в текущем или во всех открытых документах слова, начинающиеся с кусочка под курсором).