<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Home</title><link>https://sourceforge.net/p/guisettings/wiki/Home/</link><description>Recent changes to Home</description><atom:link href="https://sourceforge.net/p/guisettings/wiki/Home/feed" rel="self"/><language>en</language><lastBuildDate>Sat, 30 Mar 2013 12:30:29 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/guisettings/wiki/Home/feed" rel="self" type="application/rss+xml"/><item><title>WikiPage Home modified by borisbn</title><link>https://sourceforge.net/p/guisettings/wiki/Home/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v5
+++ v6
@@ -38,6 +38,7 @@
             
                 
                 
+                
             
             
             
@@ -96,5 +97,7 @@

 **UPD3:** Added type Color and Color Picker

+**UPD4:** Added type Double with precicion and step. (step also added to int type)
+
 [[project_admins]]
 [[download_button]]
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">borisbn</dc:creator><pubDate>Sat, 30 Mar 2013 12:30:29 -0000</pubDate><guid>https://sourceforge.net799cf377671a5dc65f7db394dae06e1d6a39f621</guid></item><item><title>WikiPage Home modified by borisbn</title><link>https://sourceforge.net/p/guisettings/wiki/Home/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v4
+++ v5
@@ -26,26 +26,32 @@
     
     
         &lt;section name="common"&gt;
-            
-                
-                
-                
-                
-                
-                
+            
+                
+                
+                
+                
+                
+                
+                
             
-            
-                
-                
+            
+                
+                
             
-            
+            
+            
+                
+                
+            
         &lt;/section&gt;
-        &lt;section name="Second sect"&gt;
-            
-            
+        &lt;section name="Second sect"&gt;
+            
+            
         &lt;/section&gt;
         { font: bold; color: blue; }
     
+

 and here is a usage of Config with this file

@@ -77,6 +83,9 @@
     cout &lt;&lt; "Greet me : " &lt;&lt; cfg.get( "Greet me" ) &lt;&lt; endl;
     cout &lt;&lt; "Invisible bool : " &lt;&lt; cfg.get( "Invisible bool" ) &lt;&lt; endl;

+    QColor textColor = cfg.get( "colors", "textColor" ).value&lt; QColor &gt;()
+    QColor outlineColor = cfg.get( "colors", "outlineColor" ).value&lt; QColor &gt;()
+
 **UPD:** Added searching parameters by name from GUI 

 **UPD2:**
@@ -85,6 +94,7 @@
 + Querying from code is easy now. You can start to read a section with beginSection( section name ); and then just query a value by get( value name );
 + File nad Directory chooser can be relative

+**UPD3:** Added type Color and Color Picker

 [[project_admins]]
 [[download_button]]
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">borisbn</dc:creator><pubDate>Thu, 20 Dec 2012 07:43:48 -0000</pubDate><guid>https://sourceforge.net8c6d459692317de4332122cfb0d3c70f66c9137a</guid></item><item><title>WikiPage Home modified by borisbn</title><link>https://sourceforge.net/p/guisettings/wiki/Home/</link><description>&lt;pre&gt;--- v3 
+++ v4 
@@ -25,56 +25,66 @@
 
     &lt;?xml version="1.0" encoding="System"?&gt;
     &lt;config&gt;
-        &lt;section visible="true" name="First section name"&gt;
-            &lt;group visible="true" checkable="true" checked="true" name="First group"&gt;
-                &lt;value visible="true" type="text" value="192.168.1.1:1234" regexp="ip-addr:port" name="Ip address:port"/&gt;
+        &lt;section visible="true" display_name="First section name" name="common"&gt;
+            &lt;group visible="true" checkable="true" checked="true" display_name="First group" name="group1"&gt;
+                &lt;value visible="true" type="text" value="192.168.1.1:1234" regexp="ip-addr:port" display_name="Ip address:port" name="ip"/&gt;
                 &lt;value visible="true" type="bool" value="false" name="Some bool value"/&gt;
                 &lt;value visible="true" type="combo" value="Just three" items="The one;The two;Just three" name="Choose 1"/&gt;
-                &lt;value visible="true" type="file" value="/etc/some/file.jpg" name="Picture or sound" filters="Images (*.png *.jpg);;Sounds (*.mp3 *.wav)"/&gt;
+                &lt;value visible="true" type="file" value="/etc/some/file.jpg" relative="true" name="Picture or sound" filters="Images (*.png *.jpg);;Sounds (*.mp3 *.wav)"/&gt;
                 &lt;value visible="true" type="radio" value="Fourth" items="First;Second;Third;Fourth" name="Choose 2"/&gt;
-                &lt;value visible="true" type="dir" value="/etc" name="Dir for log"/&gt;
+                &lt;value visible="true" type="dir" value="/etc" relative="true" name="Dir for log"/&gt;
             &lt;/group&gt;
             &lt;group visible="true" checkable="false" checked="true" name="Second group"&gt;
                 &lt;value unit=" cm" visible="true" type="int" value="18" min="1" name="Length" max="33"/&gt;
                 &lt;value unit=" kg" visible="true" type="int" value="42" min="0" name="Weight" max="100"/&gt;
             &lt;/group&gt;
             &lt;value visible="true" type="bool" value="true" name="Just bool"/&gt;
         &lt;/section&gt;
         &lt;section visible="true" name="Second sect"&gt;
             &lt;value visible="true" type="text" value="hello" regexp="(hello)+" name="Greet me"/&gt;
             &lt;value visible="false" type="bool" value="true" name="Invisible bool"/&gt;
         &lt;/section&gt;
         &lt;found_style&gt;{ font: bold; color: blue; }&lt;/found_style&gt;
     &lt;/config&gt;
 
 and here is a usage of Config with this file
 
     std::ostream &amp; operator&lt;&lt; ( std::ostream &amp; os, const QVariant &amp; var ) {
         if ( var.type() == QVariant::Bool ) {
             os &lt;&lt; var.toBool();
         }
         else if ( var.type() == QVariant::Int ) {
             os &lt;&lt; var.toInt();
         }
         else if ( var.type() == QVariant::String ) {
             os &lt;&lt; qPrintable( var.toString() );
         }
         return os;
     }
 
-    cout &lt;&lt; "First group checked : " &lt;&lt; cfg.get( "First section name", "First group" ) &lt;&lt; endl;
-    cout &lt;&lt; "Ip address:port : " &lt;&lt; cfg.get( "First section name", "Ip address:port" ) &lt;&lt; endl;
-    cout &lt;&lt; "Some bool value : " &lt;&lt; cfg.get( "First section name", "Some bool value" ) &lt;&lt; endl;
-    cout &lt;&lt; "Choose 1 : " &lt;&lt; cfg.get( "First section name", "Choose 1" ) &lt;&lt; endl;
-    cout &lt;&lt; "Picture or sound : " &lt;&lt; cfg.get( "First section name", "Picture or sound" ) &lt;&lt; endl;
-    cout &lt;&lt; "Choose 2 : " &lt;&lt; cfg.get( "First section name", "Choose 2" ) &lt;&lt; endl;
-    cout &lt;&lt; "Dir for log : " &lt;&lt; cfg.get( "First section name", "Dir for log" ) &lt;&lt; endl;
-    cout &lt;&lt; "Length : " &lt;&lt; cfg.get( "First section name", "Length" ) &lt;&lt; endl;
+    cfg.beginSection( "common" );
+    cout &lt;&lt; "First group checked : " &lt;&lt; cfg.get( "group1" ) &lt;&lt; endl;
+    cout &lt;&lt; "Ip address:port : " &lt;&lt; cfg.get( "First section name", "ip" ) &lt;&lt; endl;
+    cout &lt;&lt; "Some bool value : " &lt;&lt; cfg.get( "Some bool value" ) &lt;&lt; endl;
+    cout &lt;&lt; "Choose 1 : " &lt;&lt; cfg.get( "Choose 1" ) &lt;&lt; endl;
+    cout &lt;&lt; "Picture or sound : " &lt;&lt; cfg.get( "Picture or sound" ) &lt;&lt; endl;
+    cout &lt;&lt; "Choose 2 : " &lt;&lt; cfg.get( "Choose 2" ) &lt;&lt; endl;
+    cout &lt;&lt; "Dir for log : " &lt;&lt; cfg.get( "Dir for log" ) &lt;&lt; endl;
+    cout &lt;&lt; "Length : " &lt;&lt; cfg.get( "Length" ) &lt;&lt; endl;
     cout &lt;&lt; "Weight : " &lt;&lt; cfg.get( "First section name", "Weight" ) &lt;&lt; endl;
     cout &lt;&lt; "Just bool : " &lt;&lt; cfg.get( "First section name", "Just bool" ) &lt;&lt; endl;
-    cout &lt;&lt; "Greet me : " &lt;&lt; cfg.get( "Second sect", "Greet me" ) &lt;&lt; endl;
-    cout &lt;&lt; "Invisible bool : " &lt;&lt; cfg.get( "Second sect", "Invisible bool" ) &lt;&lt; endl;
+    cfg.beginGroup( "Second sect" );
+    cout &lt;&lt; "Greet me : " &lt;&lt; cfg.get( "Greet me" ) &lt;&lt; endl;
+    cout &lt;&lt; "Invisible bool : " &lt;&lt; cfg.get( "Invisible bool" ) &lt;&lt; endl;
 
 **UPD:** Added searching parameters by name from GUI 
+
+**UPD2:**
+
+1. There are to names now: 'display_name' for show on widget and to search and 'name' for querying from code
++ Querying from code is easy now. You can start to read a section with beginSection( section name ); and then just query a value by get( value name );
++ File nad Directory chooser can be relative
+
+
 [[project_admins]]
 [[download_button]]
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">borisbn</dc:creator><pubDate>Fri, 16 Mar 2012 15:21:53 -0000</pubDate><guid>https://sourceforge.net4938c630ff2c6e935f0fc082a2cc3f7920b9a30b</guid></item><item><title>WikiPage Home modified by borisbn</title><link>https://sourceforge.net/p/guisettings/wiki/Home/</link><description>&lt;pre&gt;--- v2 
+++ v3 
@@ -44,35 +44,37 @@
             &lt;value visible="true" type="text" value="hello" regexp="(hello)+" name="Greet me"/&gt;
             &lt;value visible="false" type="bool" value="true" name="Invisible bool"/&gt;
         &lt;/section&gt;
+        &lt;found_style&gt;{ font: bold; color: blue; }&lt;/found_style&gt;
     &lt;/config&gt;
 
 and here is a usage of Config with this file
 
     std::ostream &amp; operator&lt;&lt; ( std::ostream &amp; os, const QVariant &amp; var ) {
         if ( var.type() == QVariant::Bool ) {
             os &lt;&lt; var.toBool();
         }
         else if ( var.type() == QVariant::Int ) {
             os &lt;&lt; var.toInt();
         }
         else if ( var.type() == QVariant::String ) {
             os &lt;&lt; qPrintable( var.toString() );
         }
         return os;
     }
 
     cout &lt;&lt; "First group checked : " &lt;&lt; cfg.get( "First section name", "First group" ) &lt;&lt; endl;
     cout &lt;&lt; "Ip address:port : " &lt;&lt; cfg.get( "First section name", "Ip address:port" ) &lt;&lt; endl;
     cout &lt;&lt; "Some bool value : " &lt;&lt; cfg.get( "First section name", "Some bool value" ) &lt;&lt; endl;
     cout &lt;&lt; "Choose 1 : " &lt;&lt; cfg.get( "First section name", "Choose 1" ) &lt;&lt; endl;
     cout &lt;&lt; "Picture or sound : " &lt;&lt; cfg.get( "First section name", "Picture or sound" ) &lt;&lt; endl;
     cout &lt;&lt; "Choose 2 : " &lt;&lt; cfg.get( "First section name", "Choose 2" ) &lt;&lt; endl;
     cout &lt;&lt; "Dir for log : " &lt;&lt; cfg.get( "First section name", "Dir for log" ) &lt;&lt; endl;
     cout &lt;&lt; "Length : " &lt;&lt; cfg.get( "First section name", "Length" ) &lt;&lt; endl;
     cout &lt;&lt; "Weight : " &lt;&lt; cfg.get( "First section name", "Weight" ) &lt;&lt; endl;
     cout &lt;&lt; "Just bool : " &lt;&lt; cfg.get( "First section name", "Just bool" ) &lt;&lt; endl;
     cout &lt;&lt; "Greet me : " &lt;&lt; cfg.get( "Second sect", "Greet me" ) &lt;&lt; endl;
     cout &lt;&lt; "Invisible bool : " &lt;&lt; cfg.get( "Second sect", "Invisible bool" ) &lt;&lt; endl;
 
+**UPD:** Added searching parameters by name from GUI 
 [[project_admins]]
 [[download_button]]
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">borisbn</dc:creator><pubDate>Tue, 13 Mar 2012 16:50:04 -0000</pubDate><guid>https://sourceforge.netefba394da3fbcfef5a49c2a005e9eab867ea487b</guid></item><item><title>WikiPage Home modified by borisbn</title><link>https://sourceforge.net/p/guisettings/wiki/Home/</link><description>&lt;pre&gt;--- v1 
+++ v2 
@@ -1,8 +1,78 @@
-Welcome to your wiki!
-
-This is the default page, edit it as you see fit. To add a new page simply reference it within brackets, e.g.: [SamplePage].
-
-The wiki uses [Markdown](/p/guisettings/wiki/markdown_syntax/) syntax.
+1 Main concept
+
+If your program has some parameters, that you want to be editable from the GUI, you should just write xml-file in proper format, create an instance of class Config, call slot Config::show() and finally ask for necessary parameter via Config::get()
+
+2 Usage of class Config
+
+You can create it everywhere you wish. You can give an xml-file name/path either in c-tor or in Config::load() method. You can obtain any parameter in any place of your program by calling Config::get() method. Example of class Config's usage:
+
+    Config config( "full/path/to/settings.xml" );
+    connect( settingsAction, SIGNAL( trigger() ), &amp;config, SLOT( show() ) );
+    ... 
+    if ( config.get( "section_name", "param_name" ).toBool() ) {
+        ...
+    }
+    QFile file( config.get( "section_name", "directory_for_log" ).toString() +
+        "/prog.log" );
+
+3 Restrictions
+
+Config need QtCore, QtGui and QtXml. It uses C++11's features.
+
+4 Xml-file format
+
+Sorry, but I'm too lazy to write full description, so I'll write a full example with all features. I think, that you'll understand them all :)
+
+    &lt;?xml version="1.0" encoding="System"?&gt;
+    &lt;config&gt;
+        &lt;section visible="true" name="First section name"&gt;
+            &lt;group visible="true" checkable="true" checked="true" name="First group"&gt;
+                &lt;value visible="true" type="text" value="192.168.1.1:1234" regexp="ip-addr:port" name="Ip address:port"/&gt;
+                &lt;value visible="true" type="bool" value="false" name="Some bool value"/&gt;
+                &lt;value visible="true" type="combo" value="Just three" items="The one;The two;Just three" name="Choose 1"/&gt;
+                &lt;value visible="true" type="file" value="/etc/some/file.jpg" name="Picture or sound" filters="Images (*.png *.jpg);;Sounds (*.mp3 *.wav)"/&gt;
+                &lt;value visible="true" type="radio" value="Fourth" items="First;Second;Third;Fourth" name="Choose 2"/&gt;
+                &lt;value visible="true" type="dir" value="/etc" name="Dir for log"/&gt;
+            &lt;/group&gt;
+            &lt;group visible="true" checkable="false" checked="true" name="Second group"&gt;
+                &lt;value unit=" cm" visible="true" type="int" value="18" min="1" name="Length" max="33"/&gt;
+                &lt;value unit=" kg" visible="true" type="int" value="42" min="0" name="Weight" max="100"/&gt;
+            &lt;/group&gt;
+            &lt;value visible="true" type="bool" value="true" name="Just bool"/&gt;
+        &lt;/section&gt;
+        &lt;section visible="true" name="Second sect"&gt;
+            &lt;value visible="true" type="text" value="hello" regexp="(hello)+" name="Greet me"/&gt;
+            &lt;value visible="false" type="bool" value="true" name="Invisible bool"/&gt;
+        &lt;/section&gt;
+    &lt;/config&gt;
+
+and here is a usage of Config with this file
+
+    std::ostream &amp; operator&lt;&lt; ( std::ostream &amp; os, const QVariant &amp; var ) {
+        if ( var.type() == QVariant::Bool ) {
+            os &lt;&lt; var.toBool();
+        }
+        else if ( var.type() == QVariant::Int ) {
+            os &lt;&lt; var.toInt();
+        }
+        else if ( var.type() == QVariant::String ) {
+            os &lt;&lt; qPrintable( var.toString() );
+        }
+        return os;
+    }
+
+    cout &lt;&lt; "First group checked : " &lt;&lt; cfg.get( "First section name", "First group" ) &lt;&lt; endl;
+    cout &lt;&lt; "Ip address:port : " &lt;&lt; cfg.get( "First section name", "Ip address:port" ) &lt;&lt; endl;
+    cout &lt;&lt; "Some bool value : " &lt;&lt; cfg.get( "First section name", "Some bool value" ) &lt;&lt; endl;
+    cout &lt;&lt; "Choose 1 : " &lt;&lt; cfg.get( "First section name", "Choose 1" ) &lt;&lt; endl;
+    cout &lt;&lt; "Picture or sound : " &lt;&lt; cfg.get( "First section name", "Picture or sound" ) &lt;&lt; endl;
+    cout &lt;&lt; "Choose 2 : " &lt;&lt; cfg.get( "First section name", "Choose 2" ) &lt;&lt; endl;
+    cout &lt;&lt; "Dir for log : " &lt;&lt; cfg.get( "First section name", "Dir for log" ) &lt;&lt; endl;
+    cout &lt;&lt; "Length : " &lt;&lt; cfg.get( "First section name", "Length" ) &lt;&lt; endl;
+    cout &lt;&lt; "Weight : " &lt;&lt; cfg.get( "First section name", "Weight" ) &lt;&lt; endl;
+    cout &lt;&lt; "Just bool : " &lt;&lt; cfg.get( "First section name", "Just bool" ) &lt;&lt; endl;
+    cout &lt;&lt; "Greet me : " &lt;&lt; cfg.get( "Second sect", "Greet me" ) &lt;&lt; endl;
+    cout &lt;&lt; "Invisible bool : " &lt;&lt; cfg.get( "Second sect", "Invisible bool" ) &lt;&lt; endl;
 
 [[project_admins]]
 [[download_button]]
&lt;/pre&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">borisbn</dc:creator><pubDate>Mon, 12 Mar 2012 16:33:38 -0000</pubDate><guid>https://sourceforge.net1ab55ce19cfa0a6f3822e5689fa52a8ba0928282</guid></item><item><title>WikiPage Home modified by borisbn</title><link>https://sourceforge.net/p/guisettings/wiki/Home/</link><description>Welcome to your wiki!

This is the default page, edit it as you see fit. To add a new page simply reference it within brackets, e.g.: [SamplePage].

The wiki uses [Markdown](/p/guisettings/wiki/markdown_syntax/) syntax.

[[project_admins]]
[[download_button]]
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">borisbn</dc:creator><pubDate>Mon, 12 Mar 2012 16:24:23 -0000</pubDate><guid>https://sourceforge.nete51b5f21b5b98455dddd18564a0dc63746cd23d5</guid></item></channel></rss>