настройки в sqlite

Место, где разработчики плагинов могут поделиться своим опытом.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Re: настройки в sqlite

Post by Shmuel »

Latest post of the previous page:

zg wrote:plugin — гуид плагина, file — хост файл, param — OpenPanelInfo.ShortcutData. в принципе всё это было с первой версии, но только для шорткатов. почему в истории было по другому, не знаю :)
Тогда почему выбрано имя "Param", а не "ShortcutData"? Есть другие варианты использования для этого поля?
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: настройки в sqlite

Post by zg »

Shmuel wrote:Тогда почему выбрано имя "Param", а не "ShortcutData"? Есть другие варианты использования для этого поля?
возможно.
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Re: настройки в sqlite

Post by Yegor »

Есть желание помочь сделать http://forum.farmanager.com/viewtopic.php?f=8&t=5067 пункт 30. Оно же обсуждалось здесь: http://forum.farmanager.com/viewtopic.p ... 926#p85894.

Предлагаю 3 варианта (точнее 2 с половиной):

1. Использовать SettingsControl.
В качестве Guid нужно передавать FarGuid (как и раньше).
Получение через SCTL_GET, изменение через SCTL_SET.
Root должен быть установлен одно из значений FARSETTINGS. Поле Name игнорируется.

Code: Select all

enum FARSETTINGS
{
FSETS_SHOWKEYBAR,
FSETS_SHOWMENUBAR,
...
}
2. Использовать все тот же SettingsControl.
В качестве Guid нужно передавать FarGuid.
Получение через SCTL_GET, изменение через SCTL_SET.
Root должен быть установлен в какое-то значение FARSETTINGS_ROOT (может 0).
Поле Name должно быть одним из следующих:

Code: Select all

#define MAKESETTINGNAME(i) ((wchar_t)(i))

#define FSETS_SHOWKEYBAR MAKESETTINGNAME(1)
#define FSETS_SHOWMENUBAR MAKESETTINGNAME(2)
...
3. Использовать как и раньше AdvControl.
Получение через ACTL_GETSETTING, изменение через SCTL_SETSETTING.
Передавать нужно одно из значений FARSETTINGS.

Code: Select all

enum FARSETTINGS
{
FSETS_SHOWKEYBAR,
FSETS_SHOWMENUBAR,
...
}
Я, лично, за вариант 1 или 2. Есть другие предложения?

P.S. Изменение значений не приводит к автоматической их записи в базу.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: настройки в sqlite

Post by zg »

Yegor wrote:P.S. Изменение значений не приводит к автоматической их записи в базу.
а к чему приводит?
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Re: настройки в sqlite

Post by Yegor »

Обновляет соответствующие поля структуры Opt (Options)
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: настройки в sqlite

Post by zg »

Yegor wrote:Обновляет соответствующие поля структуры Opt (Options)
не очень понятен смысл.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Re: настройки в sqlite

Post by DrKnS »

Set плагинам не нужен.
Изменение настроек втихаря от пользователя - вредительство.

Если кто-то думает иначе - вспомните sysparams, или как его там.
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Re: настройки в sqlite

Post by Yegor »

Ну, давайте, сделаем только GET.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Re: настройки в sqlite

Post by Yegor »

Что-то решили? Делать какой-то из вариантов или пока нет?
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

настройки в sqlite

Post by Yegor »

В связи с появлением получения части настроек через SettingsControl (за что огромное спасибо zg)
zg 25.12.2011 14:48:29 +0200 - build 2328

1. эксперементальное получение настроек подтверждения через SettingsControl(...,SCTL_GET,...).
Root - FSSF_CONFIRMATIONS, Name - L"CopyOverwrite", L"MoveOverwrite" и т.д.
хотел бы поделиться идей, как я хотел это реализовать.

Чтобы не писать слишком много букв в FarSettings::Get(), предложил бы следующее.
Т.к. у нас уже есть массив структур со всеми настройками CFG[] (config.cpp), то я бы добавил пару полей в структуру FARConfig:

Code: Select all

...
size_t PublicRoot;
wchar_t* PublicName;
Тогда в FarSettings::Get() нужно всего лишь сделать цикл прохода по массиву и сравнить Root и Name. ValType легко конвертируется в FARSETTINGSTYPES.

Для настроек, которые мы не хотим паблишить (делать видимыми плагинам), значения PublicRoot уставовить в ноль и/или PublicName в NULL.

В идеале PublicName должен был бы совпадать с ValName, что логично, но трудно поддерживать в случае переименования. В таком случае, я бы все-таки предложил неименованные PublicName (через макро MAKESETTINGNAME, так же как сделано в винде для ресурсов MAKEINTRESOURCE).

Это чисто мысли вслух...

P.S. Если вы видите огромные недостатки данного подхода, то зашарьте ваши мысли по этому поводу, для своего и общего развития :)
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Re: настройки в sqlite

Post by Yegor »

В связи с уходом в мир иной ACTL_GET*SETTINGS, неплохо было запаблишить замену старым настройкам, типа FIS_SHOWKEYBAR. А то пока ShowKeyBar помечена как FSSF_PRIVATE в config.cpp. А лучше по максимуму отдать все то, что скорее всего меняться не будет.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: настройки в sqlite

Post by zg »

Yegor wrote:В связи с уходом в мир иной ACTL_GET*SETTINGS, неплохо было запаблишить замену старым настройкам, типа FIS_SHOWKEYBAR.
зачем.
А лучше по максимуму отдать все то, что скорее всего меняться не будет.
так и сделано.
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Re: настройки в sqlite

Post by Yegor »

Зачем? Например, если плагину нужно отрисовать себя в зависимости от того что сейчас на экране. Узнать если keybar или нет, сейчас нельзя, если я правильно прочитал вот этот код:

Code: Select all

bool GetConfigValue(size_t Root,const wchar_t* Name,DWORD& Type,void*& Data)
{
	if(FSSF_PRIVATE!=Root)        <==    :(
	{
		for(size_t ii=0;ii<ARRAYSIZE(CFG);++ii)
zg wrote:так и сделано.
Скромненько как-то :)
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: настройки в sqlite

Post by Maximus5 »

А SettingsControl - threadsafe?
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: настройки в sqlite

Post by zg »

Yegor wrote:Скромненько как-то :)
мы люди скромные.
Maximus5 wrote:А SettingsControl - threadsafe?
нет. у фара 2 thread safe api: ACTL_SYNCHRO и ACTL_GETWINDOWTYPE.
Maximus5
Posts: 3295
Joined: Sun 11 Nov, 2007 02:03
Been thanked: 10 times
Contact:

Re: настройки в sqlite

Post by Maximus5 »

Жестко. Раньше настройки вроде без проблем отдавались, флаги же.

И вообще, как _правильно_ теперь получать настройки? Можно пример, например для "ShowKeyBar"?
Post Reply

Return to “Разработка плагинов”