Разработка плагина OnlineBookmarks. Part 2.3: "Settings.Endgame."

Sep 18, 2011 00:02


Продолжу повествование, так неудачно прерванное ограничением:Весь наш конфиг файл для раздела Settings будет выглядеть так:

copy to clipboardподсветка кода
  1. "1.0" encoding="UTF-8"?>  
  2.   
  3.    
      
  4.         "OnlineBookmarks" />  
  5.           
  6.             "Accounts" />  
  7.             "customwidget" label="own" name="Accounts" />  
  8.           
  9.           
  10.             "Sync options" />  
  11.             "listview" property="ActiveServices">  
  12.                 "Select services" />  
  13.               
  14.             "checkbox" property="ConfirmSend" state="off">  
  15.                 "Confirm sending bookmarks on addition" />  
  16.               
  17.             "checkbox" property="ShowServices" state="off">  
  18.                 "Ask about services to send bookmarks to" />  
  19.               
  20.             "groupbox" property="DownloadGroup" checkable="true" state="off">  
  21.                 "Download options" />  
  22.                 "combobox" property="DownloadPeriod">  
  23.                     "Download bookmarks from selected services every"/>  
  24.                     "0" default="true">  
  25.                         "on action" />  
  26.                       
  27.                     "1">  
  28.                         "day" />  
  29.                       
  30.                     "2">  
  31.                         "2 days" />  
  32.                       
  33.                     "3">  
  34.                         "3 days" />  
  35.                       
  36.                     "4">  
  37.                         "4 days" />  
  38.                       
  39.                     "5">  
  40.                         "5 days" />  
  41.                       
  42.                     "6">  
  43.                         "6 days" />  
  44.                       
  45.                     "7">  
  46.                         "week" />  
  47.                       
  48.                     "30">  
  49.                         "month" />  
  50.                       
  51.                     "365">  
  52.                         "year" />  
  53.                       
  54.                   
  55.               
  56.             "groupbox" property="UploadGroup" checkable="true" state="off">  
  57.                 "Upload options" />  
  58.                 "combobox" property="UploadPeriod" >  
  59.                     "Upload bookmarks to selected services every"/>  
  60.                     "0" default="true">  
  61.                         "on action" />  
  62.                       
  63.                     "1">  
  64.                         "day" />  
  65.                       
  66.                     "2">  
  67.                         "2 days" />  
  68.                       
  69.                     "3">  
  70.                         "3 days" />  
  71.                       
  72.                     "4">  
  73.                         "4 days" />  
  74.                       
  75.                     "5">  
  76.                         "5 days" />  
  77.                       
  78.                     "6">  
  79.                         "6 days" />  
  80.                       
  81.                     "7">  
  82.                         "week" />  
  83.                       
  84.                     "30">  
  85.                         "month" />  
  86.                       
  87.                     "365">  
  88.                        "year" />  
  89.                       
  90.                   
  91.               
  92.           
  93.       
  94.   
3. XmlSettingsManager

Следующим пунктом нам необходимо подключить к своему плагину класс XmlSettingsManager. Для всех плагинов он одинков и отличается только названием конфиг-файла. Итак встречаем:

xmlsettingsmanager.h

copy to clipboardподсветка кода
  1. #ifndef PLUGINS_POSHUKU_PLUGINS_ONLINEBOOKMARKS_XMLSETTINGSMANAGER_H  
  2. #define PLUGINS_POSHUKU_PLUGINS_ONLINEBOOKMARKS_XMLSETTINGSMANAGER_H  
  3. #include   
  4. namespace LeechCraft  
  5. {  
  6. namespace Poshuku  
  7. {  
  8. namespace OnlineBookmarks  
  9. {  
  10.     class XmlSettingsManager : public Util::BaseSettingsManager  
  11.     {  
  12.         Q_OBJECT  
  13.         XmlSettingsManager ();  
  14.     protected:  
  15.         virtual void EndSettings (QSettings*) const;  
  16.         virtual QSettings *BeginSettings() const;  
  17.     public:  
  18.         static XmlSettingsManager *Instance ();  
  19.     };  
  20. }  
  21. }
  22. }  
  23. #endif // PLUGINS_POSHUKU_PLUGINS_ONLINEBOOKMARKS_XMLSETTINGSMANAGER_H  


xmlsettingsmanager.cpp

copy to clipboardподсветка кода
  1. #include "xmlsettingsmanager.h"  
  2. #include   
  3. namespace LeechCraft  
  4. {  
  5. namespace Poshuku  
  6. {  
  7. namespace OnlineBookmarks  
  8. {  
  9.     XmlSettingsManager::XmlSettingsManager ()  : Util::BaseSettingsManager (true)  
  10.     {  
  11.         Util::BaseSettingsManager::Init ();  
  12.     }  
  13.  
  14.     XmlSettingsManager *XmlSettingsManager::Instance ()  
  15.     {  
  16.         static XmlSettingsManager xsm;  
  17.         return &xsm;  
  18.     }  
  19.  
  20.     void XmlSettingsManager::EndSettings (QSettings*) const  
  21.     {  
  22.     }  
  23.  
  24.     QSettings *XmlSettingsManager::BeginSettings () const  
  25.     {  
  26.         return new QSettings (QCoreApplication::organizationName (),  
  27.                 QCoreApplication::applicationName () + "_Poshuku_OnlineBookmarks");  
  28.     }  
  29. }  
  30. }  
  31. }  

Не забываем добавить записи в соответствующие места CMakeLists.txt4. Инициализация настроек

Теперь перейдем непосредственно к инициализации настроек. 
Для этого в файле onlinebookmarks.cpp инклудим:

#include
#include
#include "xmlsettingsmanager.h"

А в методе Init нашего класс Plugin в самом начале добавляем следующие строки:

copy to clipboardподсветка кода
  1. SettingsDialog_.reset (new Util::XmlSettingsDialog);
  2. SettingsDialog_->RegisterObject (XmlSettingsManager::Instance (), "poshukuonlinebookmarkssettings.xml");  

Вторым параметром в методе RegisterObject передается название нашего конфига для Settings.
Настройки инициализированы. Теперь они появятся в Settings. Но это еще не все. Нам же надо добавить customwidget и модель для QListView.
Делается это просто:

copy to clipboardподсветка кода
  1. SettingsDialog_->SetCustomWidget ("Accounts", /*Тут должен быть объект класса, который описывает наш виджет*/);  
  2. SettingsDialog_->SetDataSource ("ActiveServices", /*Тут должен быть модель, которую мы используем для этого виджета*/);  

Обратите внимание, что первым параметром в SetCustomWidget выступает значение аттрибута name в customwidget item.
А в SetDataSource используется значение аттрибута property в listview item.
Так же хочу отметить, что программисту не надо заботиться об удалении виджетов для customwidget. Ими владеет XSD.5. Доступ к настройкам черех XmlSettingsManager.

Тут тоже нету ничего сложного. Доступ осуществляется через методы propery - используется, если не надо возвращать дефолтное значение. (Property - если есть дефолтное значение) и setProperty. Пример чтения настроек:

copy to clipboardподсветка кода
  1. // определяем состояние DownloadGroup. Возвращаемый результат берется из аттрибута state.  
  2. XmlSettingsManager::Instance ()->property ("DownloadGroup").toBool () 
  3. // тут получаем текущее значение DownloadPeriod комбобокса. Возвращаемый результат берется из aттрибута name  
  4. XmlSettingsManager::Instance ()->property ("DownloadPeriod").toInt ()  

А пример установки значения будет выглядеть так:

copy to clipboardподсветка кода
  1. 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 итема будет в следующих частях.

программирование, plugins, leechcraftdevblog, qt, coding is my life, opensource, С++, leechcraft

Previous post Next post
Up