Initialize Tizen 2.3 tizen_2.3 2.3a_release submit/tizen_2.3/20140531.085850
authorSehong Na <sehong.na@samsung.com>
Sat, 31 May 2014 03:47:29 +0000 (12:47 +0900)
committerSehong Na <sehong.na@samsung.com>
Sat, 31 May 2014 03:47:29 +0000 (12:47 +0900)
15 files changed:
CMakeLists.txt [new file with mode: 0644]
LICENSE [new file with mode: 0644]
include/CModule.h [new file with mode: 0644]
include/c-abi.h [new file with mode: 0644]
include/debug.h [new file with mode: 0644]
include/dlist.h [new file with mode: 0644]
include/livebox-cpp.h [new file with mode: 0644]
include/livebox-cpp_PG.h [new file with mode: 0644]
include/livebox-impl.h [new file with mode: 0644]
livebox-cpp.pc.in [new file with mode: 0644]
packaging/liblivebox-cpp.manifest [new file with mode: 0644]
packaging/liblivebox-cpp.spec [new file with mode: 0644]
src/CModule.cpp [new file with mode: 0644]
src/dlist.cpp [new file with mode: 0644]
src/livebox.cpp [new file with mode: 0644]

diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644 (file)
index 0000000..3909e69
--- /dev/null
@@ -0,0 +1,56 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(livebox-cpp CXX)
+
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+SET(EXEC_PREFIX "\${prefix}")
+SET(PROJECT_NAME "${PROJECT_NAME}")
+SET(LIBDIR "\${exec_prefix}/lib")
+SET(INCLUDEDIR "\${prefix}/include/${PROJECT_NAME}")
+SET(VERSION_MAJOR 0)
+SET(VERSION "${VERSION_MAJOR}.0.1")
+
+set(CMAKE_SKIP_BUILD_RPATH true)
+
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED
+       dlog
+       livebox
+       livebox-service
+       evas
+)
+
+FOREACH(flag ${pkgs_CXXFLAGS})
+       SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+FOREACH(flag ${pkgs_CFLAGS})
+       SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} -fvisibility=hidden -fPIC -g")
+
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXXFLAGS} -g")
+
+ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"")
+ADD_DEFINITIONS("-DLOG_TAG=\"LIVEBOX_CPP\"")
+ADD_DEFINITIONS("-DNDEBUG")
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED
+       src/dlist.cpp
+       src/livebox.cpp
+       src/CModule.cpp
+)
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION ${VERSION_MAJOR})
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES VERSION ${VERSION})
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} "-ldl")
+
+CONFIGURE_FILE(${PROJECT_NAME}.pc.in ${PROJECT_NAME}.pc @ONLY)
+SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${PROJECT_NAME}.pc")
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION lib)
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc DESTINATION lib/pkgconfig)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/include/livebox-cpp.h DESTINATION include/${PROJECT_NAME})
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/include/livebox-cpp_PG.h DESTINATION /usr/share/doc/${PROJECT_NAME})
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/LICENSE DESTINATION /usr/share/license RENAME "lib${PROJECT_NAME}")
diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..571fe79
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,206 @@
+Flora License
+
+Version 1.1, April, 2013
+
+http://floralicense.org/license/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction,
+and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by
+the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and
+all other entities that control, are controlled by, or are
+under common control with that entity. For the purposes of
+this definition, "control" means (i) the power, direct or indirect,
+to cause the direction or management of such entity,
+whether by contract or otherwise, or (ii) ownership of fifty percent (50%)
+or more of the outstanding shares, or (iii) beneficial ownership of
+such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity
+exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation source,
+and configuration files.
+
+"Object" form shall mean any form resulting from mechanical
+transformation or translation of a Source form, including but
+not limited to compiled object code, generated documentation,
+and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form,
+made available under the License, as indicated by a copyright notice
+that is included in or attached to the work (an example is provided
+in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form,
+that is based on (or derived from) the Work and for which the editorial
+revisions, annotations, elaborations, or other modifications represent,
+as a whole, an original work of authorship. For the purposes of this License,
+Derivative Works shall not include works that remain separable from,
+or merely link (or bind by name) to the interfaces of, the Work and
+Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original
+version of the Work and any modifications or additions to that Work or
+Derivative Works thereof, that is intentionally submitted to Licensor
+for inclusion in the Work by the copyright owner or by an individual or
+Legal Entity authorized to submit on behalf of the copyright owner.
+For the purposes of this definition, "submitted" means any form of
+electronic, verbal, or written communication sent to the Licensor or
+its representatives, including but not limited to communication on
+electronic mailing lists, source code control systems, and issue
+tracking systems that are managed by, or on behalf of, the Licensor
+for the purpose of discussing and improving the Work, but excluding
+communication that is conspicuously marked or otherwise designated
+in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity
+on behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+"Tizen Certified Platform" shall mean a software platform that complies
+with the standards set forth in the Tizen Compliance Specification
+and passes the Tizen Compliance Tests as defined from time to time
+by the Tizen Technical Steering Group and certified by the Tizen
+Association or its designated agent.
+
+2. Grant of Copyright License.  Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the
+Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License.  Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+(except as stated in this section) patent license to make, have made,
+use, offer to sell, sell, import, and otherwise transfer the Work
+solely as incorporated into a Tizen Certified Platform, where such
+license applies only to those patent claims licensable by such
+Contributor that are necessarily infringed by their Contribution(s)
+alone or by combination of their Contribution(s) with the Work solely
+as incorporated into a Tizen Certified Platform to which such
+Contribution(s) was submitted. If You institute patent litigation
+against any entity (including a cross-claim or counterclaim
+in a lawsuit) alleging that the Work or a Contribution incorporated
+within the Work constitutes direct or contributory patent infringement,
+then any patent licenses granted to You under this License for that
+Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution.  You may reproduce and distribute copies of the
+Work or Derivative Works thereof pursuant to the copyright license
+above, in any medium, with or without modifications, and in Source or
+Object form, provided that You meet the following conditions:
+
+  1. You must give any other recipients of the Work or Derivative Works
+     a copy of this License; and
+  2. You must cause any modified files to carry prominent notices stating
+     that You changed the files; and
+  3. You must retain, in the Source form of any Derivative Works that
+     You distribute, all copyright, patent, trademark, and attribution
+     notices from the Source form of the Work, excluding those notices
+     that do not pertain to any part of the Derivative Works; and
+  4. If the Work includes a "NOTICE" text file as part of its distribution,
+     then any Derivative Works that You distribute must include a readable
+     copy of the attribution notices contained within such NOTICE file,
+     excluding those notices that do not pertain to any part of
+     the Derivative Works, in at least one of the following places:
+     within a NOTICE text file distributed as part of the Derivative Works;
+     within the Source form or documentation, if provided along with the
+     Derivative Works; or, within a display generated by the Derivative Works,
+     if and wherever such third-party notices normally appear.
+     The contents of the NOTICE file are for informational purposes only
+     and do not modify the License. You may add Your own attribution notices 
+     within Derivative Works that You distribute, alongside or as an addendum 
+     to the NOTICE text from the Work, provided that such additional attribution 
+     notices cannot be construed as modifying the License. You may add Your own
+     copyright statement to Your modifications and may provide additional or
+     different license terms and conditions for use, reproduction, or
+     distribution of Your modifications, or for any such Derivative Works
+     as a whole, provided Your use, reproduction, and distribution of
+     the Work otherwise complies with the conditions stated in this License
+     and your own copyright statement or terms and conditions do not conflict
+     the conditions stated in the License including section 3.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+any Contribution intentionally submitted for inclusion in the Work
+by You to the Licensor shall be under the terms and conditions of
+this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify
+the terms of any separate license agreement you may have executed
+with Licensor regarding such Contributions.
+
+6. Trademarks.  This License does not grant permission to use the trade
+names, trademarks, service marks, or product names of the Licensor,
+except as required for reasonable and customary use in describing the
+origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+agreed to in writing, Licensor provides the Work (and each
+Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+implied, including, without limitation, any warranties or conditions
+of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+PARTICULAR PURPOSE. You are solely responsible for determining the
+appropriateness of using or redistributing the Work and assume any
+risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+whether in tort (including negligence), contract, or otherwise,
+unless required by applicable law (such as deliberate and grossly
+negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special,
+incidental, or consequential damages of any character arising as a
+result of this License or out of the use or inability to use the
+Work (including but not limited to damages for loss of goodwill,
+work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses), even if such Contributor
+has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+the Work or Derivative Works thereof, You may choose to offer,
+and charge a fee for, acceptance of support, warranty, indemnity,
+or other liability obligations and/or rights consistent with this
+License. However, in accepting such obligations, You may act only
+on Your own behalf and on Your sole responsibility, not on behalf
+of any other Contributor, and only if You agree to indemnify,
+defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason
+of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Flora License to your work
+
+To apply the Flora License to your work, attach the following
+boilerplate notice, with the fields enclosed by brackets "[]"
+replaced with your own identifying information. (Don't include
+the brackets!) The text should be enclosed in the appropriate
+comment syntax for the file format. We also recommend that a
+file or class name and description of purpose be included on the
+same "printed page" as the copyright notice for easier
+identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Flora License, Version 1.1 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://floralicense.org/license/
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
diff --git a/include/CModule.h b/include/CModule.h
new file mode 100644 (file)
index 0000000..f7c66ac
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2013  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class CModule
+{
+private:
+       static const char *m_sModulePath;
+       static struct dlist *m_pModuleList;
+
+       void *m_pHandle;
+       void *(*m_fNew)(void);
+       char *m_sPkgname;
+       struct dlist *m_pList;
+       int (*m_fNeedToCreate)(const char *cluster, const char *category);
+       int (*m_fInitialize)(const char *pkgname);
+       int (*m_fFinalize)(void);
+
+       CModule(char *pkgname) : m_pHandle(NULL), m_fNew(NULL), m_sPkgname(pkgname), m_pList(NULL), m_fNeedToCreate(NULL), m_fInitialize(NULL), m_fFinalize(NULL) {}
+       virtual ~CModule() {}
+
+public:
+       static CModule *FindModule(const char *pkgname);
+
+       static CModule *Load(const char *pkgname);
+       int Unload(void);
+
+       int Create(const char *filename, const char *content, const char *cluster, const char *category);
+       int NeedToCreate(const char *cluster, const char *category);
+       int Destroy(CLiveBoxImpl *inst);
+
+       CLiveBoxImpl *FindLiveBox(const char *filename);
+
+       const char *PackageName(void) { return m_sPkgname; }
+};
+
+/* End of a file */
diff --git a/include/c-abi.h b/include/c-abi.h
new file mode 100644 (file)
index 0000000..d0a0666
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2013  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern int livebox_initialize(const char *pkgname);
+extern int livebox_finalize(const char *pkgname);
+
+extern int livebox_create(const char *pkgname, const char *filename, const char *content, const char *cluster, const char *category);
+extern int livebox_destroy(const char *pkgname, const char *filename);
+extern int livebox_need_to_update(const char *pkgname, const char *filename);
+extern int livebox_need_to_destroy(const char *pkgname, const char *filename);
+extern int livebox_update_content(const char *pkgname, const char *filename);
+
+/*!
+ * \param[in] event "clicked" only
+ */
+extern int livebox_clicked(const char *pkgname, const char *filename, const char *event, double timestamp, double x, double y);
+
+/*!
+ * if "source" == "filename", emission could be "pd,show", "pd,hide", "lb,show", "lb,hide".
+ */
+extern int livebox_content_event(const char *pkgname, const char *filename, const char *emission, const char *source, struct event_info *event_info);
+extern int livebox_resize(const char *pkgname, const char *filename, int type);
+extern int livebox_change_group(const char *pkgname, const char *filename, const char *cluster, const char *category);
+extern int livebox_get_info(const char *pkgname, const char *filename, int *w, int *h, double *priority, char **content, char **title);
+extern int livebox_need_to_create(const char *pkgname, const char *cluster, const char *category);
+extern char *livebox_pinup(const char *pkgname, const char *filename, int pinup);
+extern int livebox_is_pinned_up(const char *pkgname, const char *filename);
+extern int livebox_system_event(const char *pkgname, const char *filename, int event);
+
+#ifdef __cplusplus
+}
+#endif
+
+/* End of a file */
diff --git a/include/debug.h b/include/debug.h
new file mode 100644 (file)
index 0000000..6f5df3f
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2013  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define DbgPrint(format, arg...)       SECURE_LOGD(format, ##arg)
+#define ErrPrint(format, arg...)       SECURE_LOGE(format, ##arg)
+/* End of a file */
diff --git a/include/dlist.h b/include/dlist.h
new file mode 100644 (file)
index 0000000..6ce75e0
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2013  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define dlist_remove_data(list, data) do { \
+       struct dlist *l; \
+       l = dlist_find_data(list, data); \
+       list = dlist_remove(list, l); \
+} while (0)
+
+#define dlist_foreach(list, l, data) \
+       for ((l) = (list); ((data) = dlist_data(l)); (l) = dlist_next(l))
+
+#define dlist_foreach_safe(list, l, n, data) \
+       for ((l) = (list), (n) = dlist_next(l); \
+               ((data) = dlist_data(l)); \
+               (l) = (n), (n) = dlist_next(l))
+
+struct dlist;
+
+extern struct dlist *dlist_append(struct dlist *list, void *data);
+extern struct dlist *dlist_prepend(struct dlist *list, void *data);
+extern struct dlist *dlist_remove(struct dlist *list, struct dlist *l);
+extern struct dlist *dlist_find_data(struct dlist *list, void *data);
+extern void *dlist_data(struct dlist *l);
+extern struct dlist *dlist_next(struct dlist *l);
+extern struct dlist *dlist_prev(struct dlist *l);
+extern int dlist_count(struct dlist *l);
+extern struct dlist *dlist_nth(struct dlist *l, int nth);
+
+/* End of a file */
diff --git a/include/livebox-cpp.h b/include/livebox-cpp.h
new file mode 100644 (file)
index 0000000..37a8f51
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2013  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* Pure virtual class */
+class CLiveBox
+{
+public:
+       CLiveBox(void) {};
+       virtual ~CLiveBox(void) {}
+
+       virtual int Create(const char *filename, const char *content, const char *cluster, const char *category) = 0;
+       virtual int Destroy(void) = 0;
+
+       virtual int NeedToUpdate(void) = 0;
+       virtual int NeedToDestroy(void) = 0;
+       virtual int UpdateContent(void) = 0;
+
+       /*!
+        * \param[in] event "clicked" only
+        */
+       virtual int Clicked(const char *event, double timestamp, double x, double  y) = 0;
+       virtual int ContentEvent(const char *emission, const char *source, struct event_info *info) = 0;
+
+       /*!
+        * if "source" == "filename", emission could be "pd,show", "pd,hide", "lb,show", "lb,hide".
+        */
+       virtual int Resize(int type) = 0;
+       virtual int ChangeGroup(const char *cluster, const char *category) = 0;
+       virtual int GetInfo(int *w, int *h, double *priority, char **content, char **title) = 0;
+       virtual char *PinUp(int on_pin) = 0;
+       virtual const char *Filename(void) = 0;
+       virtual int IsPinnedUp(void) = 0;
+       virtual int SystemEvent(int event) = 0;
+};
+
+/* End of a file */
diff --git a/include/livebox-cpp_PG.h b/include/livebox-cpp_PG.h
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/include/livebox-impl.h b/include/livebox-impl.h
new file mode 100644 (file)
index 0000000..82a28f6
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2013  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class CLiveBoxImpl : public CLiveBox
+{
+public:
+       CLiveBoxImpl(void);
+       virtual ~CLiveBoxImpl(void);
+
+       int Create(const char *filename, const char *content, const char *cluster, const char *category);
+       int Destroy(void);
+
+       int NeedToCreate(void);
+       int UpdateContent(void);
+
+       int Clicked(const char *event, double timestamp, double x, double y);
+       int ContentEvent(const char *emission, const char *source, struct event_info *info);
+
+       int Resize(int type);
+       int ChangeGroup(const char *cluster, const char *category);
+       int GetInfo(int *w, int *h, double *priority, char **content, char **title);
+       char *PinUp(int on_pin);
+       const char *Filename(void);
+       int IsPinnedUp(void);
+       int SystemEvent(int event);
+};
+
+// End of a file
diff --git a/livebox-cpp.pc.in b/livebox-cpp.pc.in
new file mode 100644 (file)
index 0000000..66e1c50
--- /dev/null
@@ -0,0 +1,11 @@
+prefix=@PREFIX@
+exec_prefix=@EXEC_PREFIX@
+libdir=@LIBDIR@
+includedir=@INCLUDEDIR@
+
+Name: livebox-cpp
+Description: livebox CPP supporting library
+Version: @VERSION@
+Libs: -L${libdir} -llivebox-cpp
+Cflags: -I${includedir}
+cppflags: -I${includedir}
diff --git a/packaging/liblivebox-cpp.manifest b/packaging/liblivebox-cpp.manifest
new file mode 100644 (file)
index 0000000..a76fdba
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+       <request>
+               <domain name="_" />
+       </request>
+</manifest>
diff --git a/packaging/liblivebox-cpp.spec b/packaging/liblivebox-cpp.spec
new file mode 100644 (file)
index 0000000..246912f
--- /dev/null
@@ -0,0 +1,66 @@
+Name: liblivebox-cpp
+Summary: C++ adaptor for a livebox 
+Version: 0.2.8
+Release: 1
+VCS:     magnolia/apps/livebox/livebox-cpp#livebox-cpp_0.2.4-19-g18d4a8671e59384424cf0c3c189e598a8ab2aed2
+Group: HomeTF/Livebox
+License: Flora
+Source0: %{name}-%{version}.tar.gz
+Source1001: %{name}.manifest
+BuildRequires: cmake, gettext-tools, coreutils
+BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(livebox)
+BuildRequires: pkgconfig(evas)
+BuildRequires: pkgconfig(livebox-service)
+
+%description
+Livebox development library (C++)
+
+%package devel
+Summary: Files for livebox development
+Group: Development/Libraries
+Requires: %{name} = %{version}-%{release}
+
+%description devel
+Livebox development library (C++) (dev)
+
+%prep
+%setup -q
+cp %{SOURCE1001} .
+
+%build
+%if 0%{?sec_build_binary_debug_enable}
+export CFLAGS="$CFLAGS -DTIZEN_DEBUG_ENABLE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_DEBUG_ENABLE"
+export FFLAGS="$FFLAGS -DTIZEN_DEBUG_ENABLE"
+%endif
+
+%if 0%{?tizen_build_binary_release_type_eng}
+export CFLAGS="${CFLAGS} -DTIZEN_ENGINEER_MODE"
+export CXXFLAGS="${CXXFLAGS} -DTIZEN_ENGINEER_MODE"
+export FFLAGS="${FFLAGS} -DTIZEN_ENGINEER_MODE"
+%endif
+%cmake .
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+%make_install
+mkdir -p %{buildroot}/%{_datarootdir}/license
+
+%post
+
+%files -n liblivebox-cpp
+%manifest %{name}.manifest
+%defattr(-,root,root,-)
+%{_libdir}/*.so*
+%{_datarootdir}/license/*
+
+%files devel
+%manifest %{name}.manifest
+%defattr(-,root,root,-)
+%{_includedir}/livebox-cpp/livebox-cpp.h
+%{_datarootdir}/doc/livebox-cpp/livebox-cpp_PG.h
+%{_libdir}/pkgconfig/*.pc
+
+# End of a file
diff --git a/src/CModule.cpp b/src/CModule.cpp
new file mode 100644 (file)
index 0000000..8f8c967
--- /dev/null
@@ -0,0 +1,205 @@
+/*
+ * Copyright 2013  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <dlfcn.h>
+
+#include <dlog.h>
+#include <livebox-service.h>
+#include <livebox-errno.h>
+
+#include "debug.h"
+#include "livebox-cpp.h"
+#include "livebox-impl.h"
+#include "CModule.h"
+#include "dlist.h"
+
+const char *CModule::m_sModulePath = "/opt/usr/live/%s/libexec/liblive-%s.so";
+struct dlist *CModule::m_pModuleList = NULL;
+
+CModule *CModule::Load(const char *pkgname)
+{
+       CModule *inst;
+       char *tmp;
+       char *module_path;
+       int ret;
+
+       tmp = strdup(pkgname);
+       if (!tmp) {
+               ErrPrint("Memory: %s\n", strerror(errno));
+               return NULL;
+       }
+
+       try {
+               inst = new CModule(tmp);
+       } catch (...) {
+               ErrPrint("Memory\n");
+               free(tmp);
+               return NULL;
+       }
+
+       module_path = livebox_service_libexec(pkgname);
+       if (!module_path) {
+               delete inst;
+               free(tmp);
+               return NULL;
+       }
+
+       inst->m_pHandle = dlopen(module_path, RTLD_LOCAL | RTLD_NOW | RTLD_DEEPBIND);
+       free(module_path);
+
+       if (!inst->m_pHandle) {
+               ErrPrint("dlopen: %s\n", dlerror());
+               delete inst;
+               free(tmp);
+               return NULL;
+       }
+
+       inst->m_fNew = (void *(*)(void))dlsym(inst->m_pHandle, "livebox_new");
+       if (!inst->m_fNew) {
+               ErrPrint("symbol: livebox_new is not found: %s\n", dlerror());
+               dlclose(inst->m_pHandle);
+               delete inst;
+               free(tmp);
+               return NULL;
+       }
+
+       inst->m_fNeedToCreate = (int (*)(const char *, const char *))dlsym(inst->m_pHandle, "livebox_need_to_create");
+       if (!inst->m_fNeedToCreate) {
+               DbgPrint("%s has no livebox_need_to_create\n", pkgname);
+       }
+
+       inst->m_fInitialize = (int (*)(const char *))dlsym(inst->m_pHandle, "livebox_initialize");
+       if (!inst->m_fInitialize) {
+               DbgPrint("%s has no livebox_initialize\n", pkgname);
+       } else {
+               ret = inst->m_fInitialize(pkgname);
+               if (ret < 0) {
+                       ErrPrint("livebox_finalize(%s) returns %d\n", pkgname, ret);
+                       dlclose(inst->m_pHandle);
+                       delete inst;
+                       free(tmp);
+                       return NULL;
+               }
+       }
+
+       inst->m_fFinalize = (int (*)(void))dlsym(inst->m_pHandle, "livebox_finalize");
+       if (!inst->m_fFinalize) {
+               DbgPrint("%s has no livebox_finalize\n", pkgname);
+       }
+
+       m_pModuleList = dlist_append(m_pModuleList, inst);
+       return inst;
+}
+
+int CModule::Unload(void)
+{
+       struct dlist *l;
+
+       l = dlist_find_data(m_pModuleList, this);
+       m_pModuleList = dlist_remove(m_pModuleList, l);
+
+       if (m_fFinalize) {
+               int ret;
+               ret = m_fFinalize();
+               DbgPrint("livebox_finalize of %s returns %d\n", m_sPkgname, ret);
+       }
+
+       dlclose(m_pHandle);
+       free(m_sPkgname);
+       delete this;
+       return LB_STATUS_SUCCESS;
+}
+
+int CModule::Create(const char *filename, const char *content, const char *cluster, const char *category)
+{
+       CLiveBoxImpl *inst;
+
+       inst = (CLiveBoxImpl *)m_fNew();
+       if (inst) {
+               int ret;
+               ret = inst->Create(filename, content, cluster, category);
+               if (ret < 0) {
+                       delete inst;
+                       return ret;
+               }
+
+               m_pList = dlist_append(m_pList, inst);
+               return 0;
+       }
+
+       return LB_STATUS_ERROR_FAULT;
+}
+
+int CModule::Destroy(CLiveBoxImpl *inst)
+{
+       struct dlist *l;
+
+       l = dlist_find_data(m_pList, inst);
+       if (!l) {
+               return LB_STATUS_ERROR_NOT_EXIST;
+       }
+
+       m_pList = dlist_remove(m_pList, l);
+       delete inst;
+       return LB_STATUS_SUCCESS;
+}
+
+CLiveBoxImpl *CModule::FindLiveBox(const char *filename)
+{
+       struct dlist *l;
+       void *item;
+       CLiveBoxImpl *box;
+
+       dlist_foreach(m_pList, l, item) {
+               box = (CLiveBoxImpl *)item;
+               if (!strcmp(filename, box->Filename())) {
+                       return box;
+               }
+       }
+
+       return NULL;
+}
+
+int CModule::NeedToCreate(const char *cluster, const char *category)
+{
+       if (!m_fNeedToCreate) {
+               return 0;
+       }
+
+       return m_fNeedToCreate(cluster, category);
+}
+
+CModule *CModule::FindModule(const char *pkgname)
+{
+       struct dlist *l;
+       void *item;
+       CModule *module;
+
+       dlist_foreach(m_pModuleList, l, item) {
+               module = (CModule *)item;
+               if (!strcmp(pkgname, module->PackageName())) {
+                       return module;
+               }
+       }
+
+       return NULL;
+}
+
+/* End of a file */
diff --git a/src/dlist.cpp b/src/dlist.cpp
new file mode 100644 (file)
index 0000000..678afaa
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+ * Copyright 2013  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include "dlist.h"
+
+struct dlist {
+       struct dlist *next;
+       struct dlist *prev;
+       void *data;
+};
+
+struct dlist *dlist_append(struct dlist *list, void *data)
+{
+       struct dlist *item;
+
+       item = (struct dlist *)malloc(sizeof(*item));
+       if (!item) {
+               return NULL;
+       }
+
+       item->next = NULL;
+       item->data = data;
+
+       if (!list) {
+               item->prev = item;
+
+               list = item;
+       } else {
+               item->prev = list->prev;
+               item->prev->next = item;
+
+               list->prev = item;
+       }
+
+       assert(!list->prev->next && "item NEXT");
+
+       return list;
+}
+
+struct dlist *dlist_prepend(struct dlist *list, void *data)
+{
+       struct dlist *item;
+
+       item = (struct dlist *)malloc(sizeof(*item));
+       if (!item) {
+               return NULL;
+       }
+
+       if (!list) {
+               item->prev = item;
+               item->next = NULL;
+       } else {
+               item->prev = list->prev;
+               list->prev = item;
+               item->next = list;
+       }
+
+       return item;
+}
+
+struct dlist *dlist_remove(struct dlist *list, struct dlist *l)
+{
+       if (!list || !l) {
+               return NULL;
+       }
+
+       if (l == list) {
+               l->prev = list->prev;
+               list = l->next;
+       } else {
+               l->prev->next = l->next;
+       }
+
+       if (l->next) {
+               l->next->prev = l->prev;
+       }
+
+       free(l);
+       return list;
+}
+
+struct dlist *dlist_find_data(struct dlist *list, void *data)
+{
+       struct dlist *l;
+       void *_data;
+
+       dlist_foreach(list, l, _data) {
+               if (data == _data) {
+                       return l;
+               }
+       }
+
+       return NULL;
+}
+
+void *dlist_data(struct dlist *l)
+{
+       return l ? l->data : NULL;
+}
+
+struct dlist *dlist_next(struct dlist *l)
+{
+       return l ? l->next : NULL;
+}
+
+struct dlist *dlist_prev(struct dlist *l)
+{
+       return l ? l->prev : NULL;
+}
+
+int dlist_count(struct dlist *l)
+{
+       register int i;
+       struct dlist *n;
+       void *data;
+
+       i = 0;
+       dlist_foreach(l, n, data) {
+               i++;
+       }
+
+       return i;
+}
+
+struct dlist *dlist_nth(struct dlist *l, int nth)
+{
+       register int i;
+       struct dlist *n;
+       void *data;
+
+       i = 0;
+       dlist_foreach(l, n, data) {
+               if (i == nth) {
+                       return l;
+               }
+
+               i++;
+       }
+
+       return NULL;
+}
+
+/* End of a file */
diff --git a/src/livebox.cpp b/src/livebox.cpp
new file mode 100644 (file)
index 0000000..4f0006c
--- /dev/null
@@ -0,0 +1,311 @@
+/*
+ * Copyright 2013  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <errno.h>
+
+#include <dlog.h>
+#include <livebox.h>
+#include <livebox-errno.h>
+
+#include "livebox-cpp.h"
+#include "livebox-impl.h"
+#include "CModule.h"
+#include "c-abi.h"
+
+#define EAPI __attribute__((visibility("default")))
+
+EAPI int livebox_initialize(const char *pkgname)
+{
+       CModule *module;
+
+       module = CModule::FindModule(pkgname);
+       if (module) {
+               return LB_STATUS_SUCCESS;
+       }
+
+       module = CModule::Load(pkgname);
+       if (!module) {
+               return LB_STATUS_ERROR_FAULT;
+       }
+
+       return LB_STATUS_SUCCESS;
+}
+
+EAPI int livebox_finalize(const char *pkgname)
+{
+       CModule *module;
+
+       module = CModule::FindModule(pkgname);
+       if (!module) {
+               return LB_STATUS_ERROR_NOT_EXIST;
+       }
+
+       module->Unload();
+       return LB_STATUS_SUCCESS;
+}
+
+EAPI int livebox_create(const char *pkgname, const char *filename, const char *content, const char *cluster, const char *category)
+{
+       CLiveBoxImpl *box;
+       CModule *module;
+       int ret;
+
+       module = CModule::FindModule(pkgname);
+       if (!module) {
+               return LB_STATUS_ERROR_INVALID;
+       }
+
+       box = module->FindLiveBox(filename);
+       if (box) {
+               return LB_STATUS_ERROR_NOT_EXIST;
+       }
+
+       ret = module->Create(filename, content, cluster, category);
+       return ret;
+}
+
+EAPI int livebox_destroy(const char *pkgname, const char *filename)
+{
+       CModule *module;
+       CLiveBoxImpl *box;
+       int ret;
+
+       module = CModule::FindModule(pkgname);
+       if (!module) {
+               return LB_STATUS_ERROR_INVALID;
+       }
+
+       box = module->FindLiveBox(filename);
+       if (!box) {
+               return LB_STATUS_ERROR_NOT_EXIST;
+       }
+
+       ret = module->Destroy(box);
+       return ret;
+}
+
+EAPI int livebox_need_to_update(const char *pkgname, const char *filename)
+{
+       CLiveBoxImpl *box;
+       CModule *module;
+
+       module = CModule::FindModule(pkgname);
+       if (!module) {
+               return LB_STATUS_ERROR_INVALID;
+       }
+
+       box = module->FindLiveBox(filename);
+       if (!box) {
+               return LB_STATUS_ERROR_NOT_EXIST;
+       }
+
+       return box->NeedToUpdate();
+}
+
+EAPI int livebox_need_to_destroy(const char *pkgname, const char *filename)
+{
+       CLiveBoxImpl *box;
+       CModule *module;
+
+       module = CModule::FindModule(pkgname);
+       if (!module) {
+               return LB_STATUS_ERROR_INVALID;
+       }
+
+       box = module->FindLiveBox(filename);
+       if (!box) {
+               return LB_STATUS_ERROR_NOT_EXIST;
+       }
+       
+       return box->NeedToDestroy();
+}
+
+EAPI int livebox_update_content(const char *pkgname, const char *filename)
+{
+       CLiveBoxImpl *box;
+       CModule *module;
+
+       module = CModule::FindModule(pkgname);
+       if (!module) {
+               return LB_STATUS_ERROR_INVALID;
+       }
+
+       box = module->FindLiveBox(filename);
+       if (!box) {
+               return LB_STATUS_ERROR_NOT_EXIST;
+       }
+       
+       return box->UpdateContent();
+}
+
+EAPI int livebox_clicked(const char *pkgname, const char *filename, const char *event, double timestamp, double x, double y)
+{
+       CLiveBoxImpl *box;
+       CModule *module;
+
+       module = CModule::FindModule(pkgname);
+       if (!module) {
+               return LB_STATUS_ERROR_INVALID;
+       }
+
+       box = module->FindLiveBox(filename);
+       if (!box) {
+               return LB_STATUS_ERROR_NOT_EXIST;
+       }
+
+       return box->Clicked(event, timestamp, x, y);
+}
+
+EAPI int livebox_content_event(const char *pkgname, const char *filename, const char *emission, const char *source, struct event_info *event_info)
+{
+       CLiveBoxImpl *box;
+       CModule *module;
+
+       module = CModule::FindModule(pkgname);
+       if (!module) {
+               return LB_STATUS_ERROR_INVALID;
+       }
+
+       box = module->FindLiveBox(filename);
+       if (!box) {
+               return LB_STATUS_ERROR_NOT_EXIST;
+       }
+
+       return box->ContentEvent(emission, source, event_info);
+}
+
+EAPI int livebox_resize(const char *pkgname, const char *filename, int type)
+{
+       CLiveBoxImpl *box;
+       CModule *module;
+
+       module = CModule::FindModule(pkgname);
+       if (!module) {
+               return LB_STATUS_ERROR_INVALID;
+       }
+
+       box = module->FindLiveBox(filename);
+       if (!box) {
+               return LB_STATUS_ERROR_NOT_EXIST;
+       }
+
+       return box->Resize(type);
+}
+
+EAPI int livebox_change_group(const char *pkgname, const char *filename, const char *cluster, const char *category)
+{
+       CLiveBoxImpl *box;
+       CModule *module;
+
+       module = CModule::FindModule(pkgname);
+       if (!module) {
+               return LB_STATUS_ERROR_INVALID;
+       }
+
+       box = module->FindLiveBox(filename);
+       if (!box) {
+               return LB_STATUS_ERROR_NOT_EXIST;
+       }
+
+       return box->ChangeGroup(cluster, category);
+}
+
+EAPI int livebox_get_info(const char *pkgname, const char *filename, int *w, int *h, double *priority, char **content, char **title)
+{
+       CLiveBoxImpl *box;
+       CModule *module;
+
+       module = CModule::FindModule(pkgname);
+       if (!module) {
+               return LB_STATUS_ERROR_INVALID;
+       }
+
+       box = module->FindLiveBox(filename);
+       if (!box) {
+               return LB_STATUS_ERROR_NOT_EXIST;
+       }
+
+       return box->GetInfo(w, h, priority, content, title);
+}
+
+EAPI int livebox_need_to_create(const char *pkgname, const char *cluster, const char *category)
+{
+       CModule *module;
+
+       module = CModule::FindModule(pkgname);
+       if (!module) {
+               return LB_STATUS_ERROR_INVALID;
+       }
+
+       return module->NeedToCreate(cluster, category);
+}
+
+EAPI char *livebox_pinup(const char *pkgname, const char *filename, int pinup)
+{
+       CLiveBoxImpl *box;
+       CModule *module;
+
+       module = CModule::FindModule(pkgname);
+       if (!module) {
+               return NULL;
+       }
+
+       box = module->FindLiveBox(filename);
+       if (!box) {
+               return NULL;
+       }
+
+       return box->PinUp(pinup);
+}
+
+EAPI int livebox_is_pinned_up(const char *pkgname, const char *filename)
+{
+       CLiveBoxImpl *box;
+       CModule *module;
+
+       module = CModule::FindModule(pkgname);
+       if (!module) {
+               return NULL;
+       }
+
+       box = module->FindLiveBox(filename);
+       if (!box) {
+               return NULL;
+       }
+
+       return box->IsPinnedUp();
+}
+
+EAPI int livebox_system_event(const char *pkgname, const char *filename, int event)
+{
+       CLiveBoxImpl *box;
+       CModule *module;
+
+       module = CModule::FindModule(pkgname);
+       if (!module) {
+               return NULL;
+       }
+
+       box = module->FindLiveBox(filename);
+       if (!box) {
+               return NULL;
+       }
+
+       return box->SystemEvent(event);
+}
+
+/* End of a file */