ewol/tutorial_021_Resources.html
2014-10-18 09:23:18 +02:00

184 lines
11 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<title>ewol Library</title>
<link rel="stylesheet" href="base.css">
<link rel="stylesheet" href="menu.css">
</head>
<body>
<div class="navbar navbar-fixed-top">
<div class="container">
<h1><a href="index.html">ewol library</a></h1>
<h4><a href="http://github.com/heeroyui/ewol/">&nbsp;&nbsp;&nbsp;[ sources ]</a></h4>
<h3>API:</h3> <div id="menu">
<ul class="niveau1">
<li class="sousmenu"><a href="namespace_ewol.html">ewol</a>
<ul class="niveau2">
<li><a href="namespace_ewol__translate.html">translate</a>
</li>
<li><a href="namespace_ewol__key.html">key</a>
</li>
<li><a href="namespace_ewol__widget.html">widget</a>
</li>
<li><a href="namespace_ewol__openGL.html">openGL</a>
</li>
<li class="sousmenu"><a href="namespace_ewol__context.html">context</a>
<ul class="niveau3">
<li><a href="namespace_ewol__context__clipBoard.html">clipBoard</a>
</li>
</ul>
</li>
<li><a href="namespace_ewol__compositing.html">compositing</a>
</li>
<li><a href="namespace_ewol__object.html">object</a>
</li>
<li><a href="namespace_ewol__resource.html">resource</a>
</li>
<li><a href="namespace_ewol__font.html">font</a>
</li>
<li><a href="namespace_ewol__event.html">event</a>
</li>
</ul>
</li>
<li><a href="namespace_MacOs.html">MacOs</a>
</li>
<li><a href="namespace_IOs.html">IOs</a>
</li>
</ul>
</div>
<h3>Documentation:</h3><div id="menu">
<ul class="niveau1"><li><a href="001_bases.html">Bases</a></li>
</ul><ul class="niveau1"><li><a href="faq.html">Faq</a></li>
</ul></div>
<h3>Tutorials:</h3><div id="menu">
<ul class="niveau1"><li><a href="tutorial_000_Build.html">Build</a></li>
</ul><ul class="niveau1"><li><a href="tutorial_001_HelloWord.html">Hello word</a></li>
</ul><ul class="niveau1"><li><a href="tutorial_010_ObjectModel.html">Object model</a></li>
</ul><ul class="niveau1"><li><a href="tutorial_011_ObjectConfig.html">Object config</a></li>
</ul><ul class="niveau1"><li><a href="tutorial_012_ObjectMessage.html">Object message</a></li>
</ul><ul class="niveau1"><li><a href="tutorial_020_FileAccess.html">File access</a></li>
</ul><ul class="niveau1"><li><a href="tutorial_021_Resources.html">Resources</a></li>
</ul><ul class="niveau1"><li><a href="tutorial_030_ConplexeXmlGui.html">Conplexe xml gui</a></li>
</ul><ul class="niveau1"><li><a href="tutorial_050_CreateCustomWidget.html">Create custom widget</a></li>
</ul><ul class="niveau1"><li><a href="tutorial_051_AddWidgetCustumInXML.html">Add widget custum in x m l</a></li>
</ul></div>
<br/><h3>Associate libraries:</h3><div id="menu">
<ul class="niveau1"><li><a href="../ejson/index.html">ejson</a></li>
</ul><ul class="niveau1"><li><a href="../egami/index.html">egami</a></li>
</ul><ul class="niveau1"><li><a href="../ege/index.html">ege</a></li>
</ul><ul class="niveau1"><li><a href="../esvg/index.html">esvg</a></li>
</ul><ul class="niveau1"><li><a href="../etk/index.html">etk</a></li>
</ul><ul class="niveau1"><li><a href="../exml/index.html">exml</a></li>
</ul></div>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
</div>
</div>
<div class="container" id="content">
<h1><center>resources</center></h1>
<hr><div align="left"><a href="tutorial_020_FileAccess.html">Previous: File access</a></div> <div align="right"><a href="tutorial_030_ConplexeXmlGui.html">Next: Conplexe xml gui</a></div>
<h2> Objectifs </h2>
<ul><li> Understand What is a resource</li><li> Use resources</li></ul>
<h2> What is a resource: </h2><br/>
A resource is an usique element that can be used by manny element like:
<ul><li> An image (special resolution)</li><li> A configuration file</li><li> An application manager (special case)</li><li> A sound file</li><li> ...</li></ul>
A resource have an other objective, form some platform, the graphic interface can be stopped, then we need to reload texture in the graphic inteface...
Then the texture is an other graphic interface.<br/>
<h2> Get a resource: </h2><br/>
For this example we will load a configuration file:
<pre>
<span class="code-preproc">#include &lt;ewol/object/Object.h&gt;
</span><span class="code-preproc">#include &lt;ewol/resource/ConfigFile.h&gt;
</span>namespace appl <span class="code-operator">{</span>
<span class="code-storage-keyword">class</span> MyObj : <span class="code-storage-keyword">public</span> <span class="code-class">ewol::Object</span> <span class="code-operator">{</span>
<span class="code-storage-keyword">private</span>:
<span class="code-class">std::shared_ptr</span>&lt;<span class="code-class">ewol::resource::ConfigFile</span>&gt; <span class="code-member">m_c</span>onfig;
<span class="code-type">int32_t</span> <span class="code-member">m_c</span>onfigValId;
<span class="code-storage-keyword">protected</span>:
<span class="code-doxygen">//! @brief Constructor
</span> <span class="code-function-name">MyObj(</span><span class="code-type">void</span>) :
<span class="code-member">m_c</span><span class="code-function-name">onfigValId(</span>-<span class="code-number">1</span>) <span class="code-operator">{</span>
<span class="code-comment">// nothing to do..
</span> <span class="code-operator">}</span>
<span class="code-type">void</span> <span class="code-function-name">init(</span>) <span class="code-operator">{</span>
<span class="code-class">ewol::Object</span>::<span class="code-function-name">init(</span>);
<span class="code-member">m_c</span>onfig = <span class="code-class">ewol::resource::ConfigFile</span>::<span class="code-function-name">create(</span><span class="code-text-quote">"DATA:ExapleConfig.json"</span>);
<span class="code-member">m_c</span>onfigValId = <span class="code-member">m_c</span>onfig-&gt;<span class="code-function-name">request(</span><span class="code-text-quote">"exampleConfigName"</span>);
<span class="code-operator">}</span>
<span class="code-storage-keyword">public</span>:
<span class="code-doxygen">//! @brief Destructor
</span> <span class="code-storage-keyword">virtual</span> ~<span class="code-function-name">MyObj(</span><span class="code-type">void</span>) <span class="code-operator">{</span> <span class="code-operator">}</span>
<span class="code-function-name">DECLARE_FACTORY(</span>MyObj);
<span class="code-storage-keyword">public</span>:
<span class="code-type">void</span> <span class="code-function-name">process(</span>) <span class="code-operator">{</span>
<span class="code-type">double</span> value = <span class="code-member">m_c</span>onfig-&gt;<span class="code-function-name">getNumber(</span><span class="code-member">m_c</span>onfigValId);
<span class="code-function-name">APPL_DEBUG(</span><span class="code-text-quote">"example value : "</span> &lt;&lt; value);
<span class="code-operator">}</span>
<span class="code-operator">}</span>
<span class="code-operator">}</span>
</pre><br/>
<h2> Create a new resource: </h2><br/>
A resource is a generic <a href="class_ewol__Resource.html">ewol::Resource</a> that hrited form a generic <a href="class_ewol__Object.html">ewol::Object</a>, simply change the FACTORY macro in :
<ul><li> DECLARE_RESOURCE_FACTORY(className) To declare a resource with no name (unique for every creation)</li><li> DECLARE_RESOURCE_NAMED_FACTORY(className) To create a resource that have a specific name. When created, we will find the previous resource with the specify name in the fanctory.</li><li> DECLARE_RESOURCE_SINGLE_FACTORY(className,uniqueName) This is to have a unique resource for all the application (name is specify in the Macro)</li></ul>
we have now some specific interface to compleate (if needed):<br/>
<h3> The Resource Level </h3><br/>
The resources can be reloaded, then we need to reaload in the good order (level [0 .. 5])<br/>
The resources are loaded fron 0 to 5.<br/>
Then for basic resource :<br/>
<pre>
<span class="code-preproc">#include &lt;ewol/object/Resource.h&gt;
</span>namespace appl <span class="code-operator">{</span>
<span class="code-storage-keyword">class</span> MyResource : <span class="code-storage-keyword">public</span> <span class="code-class">ewol::Resource</span> <span class="code-operator">{</span>
<span class="code-storage-keyword">protected</span>:
<span class="code-doxygen">//! @brief Constructor
</span> <span class="code-function-name">MyResource(</span>) :
<span class="code-member">m_c</span><span class="code-function-name">onfigValId(</span>-<span class="code-number">1</span>) <span class="code-operator">{</span>
<span class="code-member">m_r</span>esourceLevel = <span class="code-number">4</span>;
<span class="code-function-name">addObjectType(</span><span class="code-text-quote">"ewol::MyResource"</span>);
<span class="code-operator">}</span>
<span class="code-type">void</span> <span class="code-function-name">init(</span><span class="code-storage-keyword">const</span> std::&<span class="code-input-function"> _name</span>) <span class="code-operator">{</span>
<span class="code-class">ewol::Resource</span>::<span class="code-function-name">init(</span>_name);
<span class="code-operator">}</span>
<span class="code-storage-keyword">public</span>:
<span class="code-doxygen">//! @brief Destructor
</span> <span class="code-storage-keyword">virtual</span> ~<span class="code-function-name">MyResource(</span><span class="code-type">void</span>) <span class="code-operator">{</span> <span class="code-operator">}</span>
<span class="code-function-name">DECLARE_RESOURCE_NAMED_FACTORY(</span>MyResource);
<span class="code-operator">}</span>
<span class="code-operator">}</span>
</pre><br/>
Now we need to implement somme functions:<br/>
To send data on the hardware (openGL):
<pre>
<span class="code-type">void</span> <span class="code-function-name">updateContext(</span>);
</pre><br/>
To remove data from the the hardware (openGL):
<pre>
<span class="code-type">void</span> <span class="code-function-name">removeContext(</span>);
</pre><br/>
When loose hardware (juste update internal state):
<pre>
<span class="code-type">void</span> <span class="code-function-name">removeContextToLate(</span>);
</pre><br/>
When user request to reload all resources (can be usefull when using file type : THEME:GUI:xxx)
<pre>
<span class="code-type">void</span> <span class="code-function-name">reload(</span>);
</pre><br/>
</div>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-46753803-1', 'heeroyui.github.io');
ga('send', 'pageview');
</script>
</body>
</html>