Resolve the "Klocwork" detected defect and add debug feature.
[platform/framework/native/appfw.git] / inc / FAppAppResource.h
1 //
2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Apache License, Version 2.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //     http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16
17 /**
18  * @file                        FAppAppResource.h
19  * @brief                       This is the header file for the %AppResource class.
20  *
21  * This header file contains the declarations of the %AppResource class.
22  */
23
24 #ifndef _FAPP_APP_RESOURCE_H_
25 #define _FAPP_APP_RESOURCE_H_
26
27 #include <FBaseObject.h>
28 #include <FBaseString.h>
29 #include <FAppTypes.h>
30 #include <FGrpBitmapCommon.h>
31
32 namespace Tizen { namespace Graphics { class Bitmap; } }
33
34 namespace Tizen { namespace App
35 {
36
37 /**
38 * @class                AppResource
39 * @brief                This class provides convenient methods to load application resources at run time.
40 *
41 * @since        2.0
42 *
43 * @final        This class is not intended for extension.
44 *
45 * The %AppResource class provides convenient methods to load application resources at run time: @n
46 * - Use AppResource::GetString() to get handle and display localized strings.
47 * - Use AppResource::GetBitmapN() to obtain a bitmap image that matches the screen density.
48 * - If the matching image does not exist, the image of the baseline density folder, ScreenDensity-High is used.
49 *
50 * The instance of this class can be obtained through App::GetAppResource(). 
51 *
52 * The following example demonstrates how to use the %AppResource class to get strings.
53 *
54 * @code
55 #include <FApp.h>
56
57 using namespace Tizen::App;
58
59 void
60 MyClass::StringResourceSample(void)
61 {
62         String hello;
63         AppResource *pAppResource = App::GetInstance()->GetAppResource();
64         if (pAppResource)
65         {
66                 pAppResource->GetString(L"IDS_HELLO", hello);
67         }
68 }
69 * @endcode
70 *
71 *
72 *
73 * The following example demonstrates how to use the %AppResource class to retrieve bitmaps.
74 * @code
75 #include <FApp.h>
76
77 using namespace Tizen::App;
78 using namespace Tizen::Graphics;
79
80 void
81 MyClass::BitmapResourceSample(void)
82 {
83         AppResource *pAppResource = App::GetInstance()->GetAppResource();
84         Bitmap* pBitmap = null;
85
86         if (pAppResource)
87         {
88                 pBitmap = pAppResource->GetBitmapN(L"Tizen.png", BITMAP_PIXEL_FORMAT_ARGB8888);
89         }
90 }
91 * @endcode
92 */
93
94 class _OSP_EXPORT_ AppResource
95         : public Tizen::Base::Object
96 {
97 public:
98         /**
99         * Gets the string at the specified resource ID.
100         *
101         * @since        2.0
102         *
103         * @return               An error code
104         * @param[in]    resourceId              The resource ID of type Tizen::Base::String that describes the resource
105         * @param[out]   loadedString    The string obtained from the loaded application resource
106         * @exception    E_SUCCESS                                 The method is successful.
107         * @exception    E_FAILURE                       The argument passed is not found.
108         * @exception    E_INVALID_ARG                   The argument passed to a method contains an invalid resource ID.
109         */
110         result GetString(const Tizen::Base::String& resourceId, Tizen::Base::String& loadedString) const;
111
112         /**
113         * Gets the bitmap at the specified path. @n
114         * The %GetBitmapN() method interprets the given resource path and reads the best matching image file for the current device resolution. @n
115         * To load the bitmap image from a file, give the name of the file as the input parameter and not the file path (For example: "img.png").
116         * Then, the system will first look for the image file in the folder specific to the current device resolution, such as
117         * '720x1280' and if the file does not exist, it will then search the folder that corresponds to the current screen density,
118         * such as 'screen-density-xhigh'. After searching the density folder, all the other density folders are searched in the order high to low.
119         * If the requested image file is found in a density-specific folder that is different from the current screen density, the bitmap returned from this method is pre-scaled.
120         * But in case of requested image file is saved as ".#.png" (For example : "img.#.png"), then a bitmap instance which is value of returned pointer is not pre-scaled.
121         * So, it is recommended to use ".#.png" as extension (For example : "ninePatchImg.#.png") for nine-patch image file.
122         * Currently supported image formats are: JPEG, GIF, PNG, BMP, TIFF, and WBMP.
123         * For more information on the features, see <a href="../org.tizen.native.appprogramming/html/multiple_screen/autoscale_resource_fallback.htm">Resource Fallback and Prescaling.</a>
124         *
125         * @since        2.0
126         *
127         * @return       A pointer to the Bitmap instance generated from the specified file
128         * @param[in]    imagePath                               The relative path starting from the directory @b "res/screen-density-XXX/" or @b "res/AxB", @n
129         *                                                                       where A and B represent the screen width and height of the supported device models, respectively.
130         * @param[in]    pixelFormat                             The pixel format of the resulting bitmap
131         * @exception    E_SUCCESS                               The method is successful.
132         * @exception    E_INVALID_ARG                   A specified input parameter is invalid.
133         * @exception    E_UNSUPPORTED_FORMAT    The image file format or specified pixel format is not supported.
134         * @exception    E_FILE_NOT_FOUND                The specified file cannot be found.
135         * @exception    E_SYSTEM                                A system error has occurred.
136         * @remarks      
137         *                       - The specific error code can be accessed using the GetLastResult() method.
138         *                       - There is a high probability for an occurrence of an out-of-memory exception. If possible, check whether the exception is E_OUT_OF_MEMORY or not. For more information on how to handle the out-of-memory exception, refer <a href="../org.tizen.native.appprogramming/html/basics_tizen_programming/exception_check.htm">here</a>.
139         */
140         Tizen::Graphics::Bitmap* GetBitmapN(const Tizen::Base::String& imagePath, Tizen::Graphics::BitmapPixelFormat pixelFormat) const;
141
142         /**
143         * Gets the bitmap at the specified path. @n
144         * The %GetBitmapN() method interprets the given resource path and reads the best matching image file for the current device resolution. @n
145         * To load the bitmap image from a file, give the name of the file as the input parameter and not the file path (For example: "img.png").
146         * Then, the system will first look for the image file in the folder specific to the current device resolution, such as
147         * '720x1280' and if the file does not exist, it will then search the folder that corresponds to the current screen density,
148         * such as 'screen-density-xhigh'. After searching the density folder, all the other density folders are searched in the order high to low.
149         * If the requested image file is found in a density-specific folder that is different from the current screen density, the bitmap returned from this method is pre-scaled.
150         * But in case of requested image file is saved as ".#.png" (For example : "img.#.png"), then a bitmap instance which is value of returned pointer is not pre-scaled.
151         * So, it is recommended to use ".#.png" as extension (For example : "ninePatchImg.#.png") for nine-patch image file.
152         * Currently supported image formats are: JPEG, GIF, PNG, BMP, TIFF, and WBMP.
153         * For more information on the features, see <a href="../org.tizen.native.appprogramming/html/multiple_screen/autoscale_resource_fallback.htm">Resource Fallback and Prescaling.</a>
154         *
155         * @since        2.0
156         *
157         * @return       A pointer to the Tizen::Graphics::Bitmap instance generated from the specified file
158         * @param[in]    imagePath                               The relative path starting from the density directory @b "res/screen-density-XXX/" or @b "res/AxB", @n
159         *                                                                       where A and B represent the width and height of the screen of the supported device models, respectively
160         * @exception    E_SUCCESS                               The method is successful.
161         * @exception    E_INVALID_ARG                   The specified input parameter is invalid.
162         * @exception    E_UNSUPPORTED_FORMAT    The image file format is not supported.
163         * @exception    E_FILE_NOT_FOUND                The specified file cannot be found.
164         * @exception    E_SYSTEM                                A system error has occurred.
165         * @remarks      
166         *                       - The specific error code can be accessed using the GetLastResult() method.
167         *                       - There is a high probability for an occurrence of an out-of-memory exception. If possible, check whether the exception is E_OUT_OF_MEMORY or not. For more information on how to handle the out-of-memory exception, refer <a href="../org.tizen.native.appprogramming/html/basics_tizen_programming/exception_check.htm">here</a>.
168         */
169         Tizen::Graphics::Bitmap* GetBitmapN(const Tizen::Base::String& imagePath) const;
170
171         /**
172         * Gets the %AppResource instance pointer.
173         *
174         * @since  2.0
175         *
176         * @return A pointer to the %AppResource instance, @n
177         *                 else @c null if it fails
178         */
179         static AppResource* GetInstance(void);
180
181         /**
182          * Gets the resource instance of the specified resource path.
183          * @since       2.0
184          * @return              A pointer to the %AppResource instance, @n
185          *                              else @c null if it fails
186          * @param[in]   resourcePath            The relative path starting from the resource directory path of the current application
187          * @exception   E_SUCCESS                       The method is successful.
188          * @exception   E_FILE_NOT_FOUND        The specified resource path does not exist.
189          * @exception   E_INVALID_ARG           The length of the specified path is @c 0 or exceeds system limitations.
190          * @exception   E_SYSTEM                        Initializing string and bitmap resource is failed due to system error.
191          * @remarks     The specific error code can be accessed using the GetLastResult() method.
192          */
193     static AppResource* LoadAppResource(const Tizen::Base::String& resourcePath);
194
195         /**
196         * Gets the application resource instance of the specified @c appId.
197         *
198         * @since        2.0
199         *
200         * @privlevel    platform
201         * @privilege   %http://tizen.org/privilege/appsetting
202         *
203         * @return       A pointer to the %AppResource instance, @n
204         *               else @c null if it fails
205         * @param[in]    appId                The AppId of the installed application
206         * @exception    E_SUCCESS            The method is successful.
207         * @exception    E_DATA_NOT_FOUND      The instance of specified @c appId does not provide the string resource.
208         * @exception    E_OUT_OF_MEMORY      The memory is insufficient.
209         * @exception    E_APP_NOT_INSTALLED  The specified @c appId is not found in the list of installed applications.
210         * @exception    E_SYSTEM        Initializing string and bitmap resource has failed due to a system error.
211         * @exception    E_PRIVILEGE_DENIED  The application does not have the privilege to call this method.
212         * @remarks The specific error code can be accessed using the GetLastResult() method.
213         */
214         static AppResource* GetInstanceByAppId(const AppId& appId);
215
216         /**
217         * Releases the application resource instance of the specified @c appId.
218         *
219         * @since        2.0
220         *
221         * @privlevel    platform
222         * @privilege   %http://tizen.org/privilege/appsetting
223         *
224         * @return       An error code
225         * @param[in]    appId                The AppId of the installed application
226         * @exception    E_SUCCESS            The method is successful.
227         * @exception    E_OBJ_NOT_FOUND      The application resource instance of the specified @c appId is not found.
228         * @exception    E_PRIVILEGE_DENIED  The application does not have the privilege to call this method.
229         * @remarks     Individual instances are managed by the platform. @n
230         *              It is recommended to release instances to reduce memory usage.
231         */
232         static result ReleaseInstanceByAppId(const AppId& appId);
233
234 private:
235         /**
236          * This default constructor is intentionally declared as private to implement the %Singleton semantic.
237          *
238          * @since       2.0
239          */
240         AppResource(void);
241
242         /**
243          * The implementation of this copy constructor is intentionally blank and declared as private to prohibit copying of objects.
244          *
245          * @since       2.0
246          */
247         AppResource(const AppResource& rhs);
248
249         /**
250          * The implementation of this copy assignment operator is intentionally blank and declared as private to prohibit copying of objects.
251          *
252          * @since       2.0
253          */
254         AppResource& operator =(const AppResource& rhs);
255
256         /**
257          * This destructor is intentionally declared as private to implement the %Singleton semantic.
258          *
259          * @since       2.0
260          */
261         virtual ~AppResource(void);
262
263 private:
264         friend class _AppResourceImpl;
265         class _AppResourceImpl* __pAppResourceImpl;
266 }; // AppResource
267
268 } } // Tizen::App
269
270 #endif