Продолжу повествование, так неудачно прерванное ограничением:
Весь наш конфиг файл для раздела Settings будет выглядеть так:
copy to clipboard
подсветка кода - "1.0" encoding="UTF-8"?>
-
-
- "OnlineBookmarks" />
-
- "Accounts" />
- "customwidget" label="own" name="Accounts" />
-
-
- "Sync options" />
- "listview" property="ActiveServices">
- "Select services" />
-
- "checkbox" property="ConfirmSend" state="off">
- "Confirm sending bookmarks on addition" />
-
- "checkbox" property="ShowServices" state="off">
- "Ask about services to send bookmarks to" />
-
- "groupbox" property="DownloadGroup" checkable="true" state="off">
- "Download options" />
- "combobox" property="DownloadPeriod">
- "Download bookmarks from selected services every"/>
- "0" default="true">
- "on action" />
-
- "1">
- "day" />
-
- "2">
- "2 days" />
-
- "3">
- "3 days" />
-
- "4">
- "4 days" />
-
- "5">
- "5 days" />
-
- "6">
- "6 days" />
-
- "7">
- "week" />
-
- "30">
- "month" />
-
- "365">
- "year" />
-
-
-
- "groupbox" property="UploadGroup" checkable="true" state="off">
- "Upload options" />
- "combobox" property="UploadPeriod" >
- "Upload bookmarks to selected services every"/>
- "0" default="true">
- "on action" />
-
- "1">
- "day" />
-
- "2">
- "2 days" />
-
- "3">
- "3 days" />
-
- "4">
- "4 days" />
-
- "5">
- "5 days" />
-
- "6">
- "6 days" />
-
- "7">
- "week" />
-
- "30">
- "month" />
-
- "365">
- "year" />
-
-
-
-
-
-
3. XmlSettingsManager
Следующим пунктом нам необходимо подключить к своему плагину класс XmlSettingsManager. Для всех плагинов он одинков и отличается только названием конфиг-файла. Итак встречаем:
xmlsettingsmanager.h
copy to clipboard
подсветка кода - #ifndef PLUGINS_POSHUKU_PLUGINS_ONLINEBOOKMARKS_XMLSETTINGSMANAGER_H
- #define PLUGINS_POSHUKU_PLUGINS_ONLINEBOOKMARKS_XMLSETTINGSMANAGER_H
-
- #include
-
- namespace LeechCraft
- {
- namespace Poshuku
- {
- namespace OnlineBookmarks
- {
- class XmlSettingsManager : public Util::BaseSettingsManager
- {
- Q_OBJECT
-
- XmlSettingsManager ();
- protected:
- virtual void EndSettings (QSettings*) const;
- virtual QSettings *BeginSettings() const;
- public:
- static XmlSettingsManager *Instance ();
- };
- }
- }
- }
-
- #endif // PLUGINS_POSHUKU_PLUGINS_ONLINEBOOKMARKS_XMLSETTINGSMANAGER_H
-
xmlsettingsmanager.cpp
copy to clipboard
подсветка кода - #include "xmlsettingsmanager.h"
- #include
-
- namespace LeechCraft
- {
- namespace Poshuku
- {
- namespace OnlineBookmarks
- {
- XmlSettingsManager::XmlSettingsManager () : Util::BaseSettingsManager (true)
- {
- Util::BaseSettingsManager::Init ();
- }
-
- XmlSettingsManager *XmlSettingsManager::Instance ()
- {
- static XmlSettingsManager xsm;
- return &xsm;
- }
-
- void XmlSettingsManager::EndSettings (QSettings*) const
- {
- }
-
- QSettings *XmlSettingsManager::BeginSettings () const
- {
- return new QSettings (QCoreApplication::organizationName (),
- QCoreApplication::applicationName () + "_Poshuku_OnlineBookmarks");
- }
- }
- }
- }
Не забываем добавить записи в соответствующие места CMakeLists.txt4. Инициализация настроек
Теперь перейдем непосредственно к инициализации настроек.
Для этого в файле onlinebookmarks.cpp инклудим:
#include
#include
#include "xmlsettingsmanager.h"
А в методе Init нашего класс Plugin в самом начале добавляем следующие строки:
copy to clipboard
подсветка кода - SettingsDialog_.reset (new Util::XmlSettingsDialog);
- SettingsDialog_->RegisterObject (XmlSettingsManager::Instance (), "poshukuonlinebookmarkssettings.xml");
Вторым параметром в методе RegisterObject передается название нашего конфига для Settings.
Настройки инициализированы. Теперь они появятся в Settings. Но это еще не все. Нам же надо добавить customwidget и модель для QListView.
Делается это просто:
copy to clipboard
подсветка кода - SettingsDialog_->SetCustomWidget ("Accounts", /*Тут должен быть объект класса, который описывает наш виджет*/);
- SettingsDialog_->SetDataSource ("ActiveServices", /*Тут должен быть модель, которую мы используем для этого виджета*/);
Обратите внимание, что первым параметром в SetCustomWidget выступает значение аттрибута name в customwidget item.
А в SetDataSource используется значение аттрибута property в listview item.
Так же хочу отметить, что программисту не надо заботиться об удалении виджетов для customwidget. Ими владеет XSD.5. Доступ к настройкам черех XmlSettingsManager.
Тут тоже нету ничего сложного. Доступ осуществляется через методы propery - используется, если не надо возвращать дефолтное значение. (Property - если есть дефолтное значение) и setProperty. Пример чтения настроек:
copy to clipboard
подсветка кода - // определяем состояние DownloadGroup. Возвращаемый результат берется из аттрибута state.
- XmlSettingsManager::Instance ()->property ("DownloadGroup").toBool ()
- // тут получаем текущее значение DownloadPeriod комбобокса. Возвращаемый результат берется из aттрибута name
- XmlSettingsManager::Instance ()->property ("DownloadPeriod").toInt ()
А пример установки значения будет выглядеть так:
copy to clipboard
подсветка кода - XmlSettingsManager::Instance ()->setProperty ("DownloadGroup", true);
6. Последние штрихи.
Стоит помнить, что все конфиг файлы хранятся в ~/.config/Deviant/, а все файлы для создания виджетов в settings в /usr/local/share/leechcraft/settings. Так как для доступа во вторую директорию требуются админские права, то незабываем добавить в CMakeLists.txt строчку:
INSTALL (FILES poshukuonlinebookmarkssettings.xml DESTINATION ${LC_SETTINGS_DEST})
Добавляем ее рядом с другими INSTALL.
Вот те базовые знания, которые необходимы нам для работы с настройками.
О классе Core в личкрафтах и создании виджета для customwidget итема будет в следующих частях.