From f84a1f3fed05af3360c01bf4533e7f0d59723208 Mon Sep 17 00:00:00 2001 From: Jinkun Jang Date: Wed, 13 Mar 2013 02:11:47 +0900 Subject: [PATCH] Tizen 2.1 base --- LICENSE | 206 ++++++++++++++++++ NOTICE | 4 + description.xml | 11 + project/data/nofile.dummy | 0 project/inc/BasicApp.h | 65 ++++++ project/inc/BasicAppFrame.h | 40 ++++ project/inc/ButtonPanel.h | 43 ++++ project/inc/ImagePanel.h | 43 ++++ project/inc/MainForm.h | 52 +++++ project/manifest.xml | 21 ++ project/res/eng-GB.xml | 7 + project/res/screen-density-xhigh/tizen.png | Bin 0 -> 39063 bytes project/res/screen-size-normal/IDF_MAINFORM.xml | 32 +++ project/shared/data/nofile.dummy | 0 .../shared/res/screen-density-xhigh/mainmenu.png | Bin 0 -> 17581 bytes project/shared/trusted/nofile.dummy | 0 project/src/BasicApp.cpp | 107 +++++++++ project/src/BasicAppEntry.cpp | 61 ++++++ project/src/BasicAppFrame.cpp | 70 ++++++ project/src/ButtonPanel.cpp | 78 +++++++ project/src/ImagePanel.cpp | 106 +++++++++ project/src/MainForm.cpp | 241 +++++++++++++++++++++ sample.xml | 34 +++ screenshot.png | Bin 0 -> 6696 bytes 24 files changed, 1221 insertions(+) create mode 100644 LICENSE create mode 100644 NOTICE create mode 100644 description.xml create mode 100644 project/data/nofile.dummy create mode 100644 project/inc/BasicApp.h create mode 100644 project/inc/BasicAppFrame.h create mode 100644 project/inc/ButtonPanel.h create mode 100644 project/inc/ImagePanel.h create mode 100644 project/inc/MainForm.h create mode 100644 project/manifest.xml create mode 100644 project/res/eng-GB.xml create mode 100644 project/res/screen-density-xhigh/tizen.png create mode 100755 project/res/screen-size-normal/IDF_MAINFORM.xml create mode 100644 project/shared/data/nofile.dummy create mode 100755 project/shared/res/screen-density-xhigh/mainmenu.png create mode 100644 project/shared/trusted/nofile.dummy create mode 100644 project/src/BasicApp.cpp create mode 100644 project/src/BasicAppEntry.cpp create mode 100644 project/src/BasicAppFrame.cpp create mode 100644 project/src/ButtonPanel.cpp create mode 100644 project/src/ImagePanel.cpp create mode 100644 project/src/MainForm.cpp create mode 100644 sample.xml create mode 100644 screenshot.png diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9c95663 --- /dev/null +++ b/LICENSE @@ -0,0 +1,206 @@ +Flora License + +Version 1.0, May, 2012 + +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 Compatibility Definition Document +and passes the Compatibility Test Suite 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. + +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.0 (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/NOTICE b/NOTICE new file mode 100644 index 0000000..3997999 --- /dev/null +++ b/NOTICE @@ -0,0 +1,4 @@ +Copyright (c) Samsung Electronics Co., Ltd. All rights reserved. +Except as noted, this software is licensed under Flora License, Version 1. +Please, see the LICENSE file for Flora License terms and conditions. + diff --git a/description.xml b/description.xml new file mode 100644 index 0000000..f19dd57 --- /dev/null +++ b/description.xml @@ -0,0 +1,11 @@ + + + + + BasicApp + 1.0 + screenshot.png + +The BasicApp sample application demonstrates how you can construct forms to implement basic UI and application functionalities. + + diff --git a/project/data/nofile.dummy b/project/data/nofile.dummy new file mode 100644 index 0000000..e69de29 diff --git a/project/inc/BasicApp.h b/project/inc/BasicApp.h new file mode 100644 index 0000000..56295ab --- /dev/null +++ b/project/inc/BasicApp.h @@ -0,0 +1,65 @@ +// +// Tizen C++ SDK +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.0 (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. +// + +#ifndef _BASIC_APP_H_ +#define _BASIC_APP_H_ + +#include +#include +#include + +//application must inherit from Application class +//which provides basic features necessary to define an application. + +class BasicApp + : public Tizen::App::Application + , public Tizen::System::IScreenEventListener +{ +public: + //[HelloWorld] application must have a factory method that creates an instance of itself. + static Tizen::App::Application* CreateInstance(void); + +public: + BasicApp(void); + virtual ~BasicApp(void); + + // Called when the application is initializing. + virtual bool OnAppInitializing(Tizen::App::AppRegistry& appRegistry); + + //Called when the application is terminating. + virtual bool OnAppTerminating(Tizen::App::AppRegistry& appRegistry, bool forcedTermination = false); + + //Called when the application's frame moves to the top of the screen. + virtual void OnForeground(void); + + //Called when this application's frame is moved from top of the screen to the background. + virtual void OnBackground(void); + + //Called when the system memory is not sufficient to run the application any further. + virtual void OnLowMemory(void); + + // Called when the battery level changes. + virtual void OnBatteryLevelChanged(Tizen::System::BatteryLevel batteryLevel); + + // Called when the screen turns on. + virtual void OnScreenOn (void); + + // Called when the screen turns off. + virtual void OnScreenOff (void); +}; + +#endif diff --git a/project/inc/BasicAppFrame.h b/project/inc/BasicAppFrame.h new file mode 100644 index 0000000..2356edf --- /dev/null +++ b/project/inc/BasicAppFrame.h @@ -0,0 +1,40 @@ +// +// Tizen C++ SDK +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.0 (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. +// + +#ifndef _BASIC_APP_FRAME_H_ +#define _BASIC_APP_FRAME_H_ + +#include +#include + +class BasicAppFrame + : public Tizen::Ui::Controls::Frame +{ +public: + BasicAppFrame(void); + virtual ~BasicAppFrame(void); + + result Initialize(int panelId); + + virtual result OnInitializing(void); + virtual result OnTerminating(void); + +private: + int __panelId; +}; + +#endif //_BASIC_APP_FRAME_H_ \ No newline at end of file diff --git a/project/inc/ButtonPanel.h b/project/inc/ButtonPanel.h new file mode 100644 index 0000000..a97852b --- /dev/null +++ b/project/inc/ButtonPanel.h @@ -0,0 +1,43 @@ +// +// Tizen C++ SDK +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.0 (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. +// + +#ifndef _BUTTON_PANEL_H_ +#define _BUTTON_PANEL_H_ + +#include +#include + +class ButtonPanel + : public Tizen::Ui::Controls::Panel + , public Tizen::Ui::IActionEventListener +{ +public: + ButtonPanel(void); + virtual ~ButtonPanel(void); + + result Initialize(const Tizen::Graphics::Rectangle& Rect); + + virtual result OnInitializing(void); + virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + +private: + static const int ID_BUTTON = 101; + + Tizen::Ui::Controls::Label *__pLabel; +}; + +#endif diff --git a/project/inc/ImagePanel.h b/project/inc/ImagePanel.h new file mode 100644 index 0000000..74f2fa4 --- /dev/null +++ b/project/inc/ImagePanel.h @@ -0,0 +1,43 @@ +// +// Tizen C++ SDK +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.0 (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. +// + +#ifndef _IMAGE_PANEL_H_ +#define _IMAGE_PANEL_H_ + +#include +#include + +class ImagePanel + : public Tizen::Ui::Controls::Panel + , public Tizen::Ui::IOrientationEventListener +{ +public: + ImagePanel(void); + virtual ~ImagePanel(void); + + result Initialize(Tizen::Graphics::Rectangle rect); + + virtual result OnInitializing(void); + virtual result OnTerminating(void); + virtual result OnDraw(void); + virtual void OnOrientationChanged(const Tizen::Ui::Control &source, Tizen::Ui::OrientationStatus orientationStatus); + +private: + Tizen::Graphics::Bitmap *__pTizenBitmap; +}; + +#endif diff --git a/project/inc/MainForm.h b/project/inc/MainForm.h new file mode 100644 index 0000000..8e1182e --- /dev/null +++ b/project/inc/MainForm.h @@ -0,0 +1,52 @@ +// +// Tizen C++ SDK +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.0 (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. +// + +#ifndef _MAIN_FORM_H_ +#define _MAIN_FORM_H_ + +#include + +class MainForm + : public Tizen::Ui::Controls::Form + , public Tizen::Ui::IActionEventListener + , public Tizen::Ui::Controls::IFormBackEventListener +{ +public: + MainForm(void); + virtual ~MainForm(void); + + result Initialize(int panelId); + + virtual result OnInitializing(void); + virtual result OnTerminating(void); + virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId); + virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source); + +private: + static const int ID_HEADER_ITEM1 = 101; + static const int ID_HEADER_ITEM2 = 102; + static const int ID_HEADER_ITEM3 = 103; + static const int ID_ORIENTATION = 200; + + Tizen::Ui::Controls::Panel* __pPanel[3]; + Tizen::Ui::Controls::Button* __pButtonOrientation; + Tizen::Ui::Orientation __status; + + int __panelId; +}; + +#endif diff --git a/project/manifest.xml b/project/manifest.xml new file mode 100644 index 0000000..bba9580 --- /dev/null +++ b/project/manifest.xml @@ -0,0 +1,21 @@ + + + $(manifestAppId) + 1.0.0 + C++App + + + 2.0 + + + + + + $(projectName) + + + mainmenu.png + + + + diff --git a/project/res/eng-GB.xml b/project/res/eng-GB.xml new file mode 100644 index 0000000..6ae6172 --- /dev/null +++ b/project/res/eng-GB.xml @@ -0,0 +1,7 @@ + + + + Change Orientation + diff --git a/project/res/screen-density-xhigh/tizen.png b/project/res/screen-density-xhigh/tizen.png new file mode 100644 index 0000000000000000000000000000000000000000..56040da81291afc15cbb026f99f4a25534c7312e GIT binary patch literal 39063 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 + + + + +720 +
+ + + + +
+ + +
+
+ + +
+ + + + + + +
diff --git a/project/shared/data/nofile.dummy b/project/shared/data/nofile.dummy new file mode 100644 index 0000000..e69de29 diff --git a/project/shared/res/screen-density-xhigh/mainmenu.png b/project/shared/res/screen-density-xhigh/mainmenu.png new file mode 100755 index 0000000000000000000000000000000000000000..983c883493a0ae561b9592d54ea8204042b4b6fb GIT binary patch literal 17581 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 + +#include "BasicApp.h" +#include "BasicAppFrame.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::System; +using namespace Tizen::Ui::Controls; + +BasicApp::BasicApp(void) +{ +} + +BasicApp::~BasicApp(void) +{ +} + +Application* +BasicApp::CreateInstance(void) +{ + // Create the instance through the constructor. + return new (std::nothrow) BasicApp(); +} + +bool +BasicApp::OnAppInitializing(AppRegistry& appRegistry) +{ + int lastPanelId = 0; + String lastPanelName(L""); + String panelIDkey(L"AppLastPanelId"); + String panelNamekey(L"AppLastPanelName"); + + result r = appRegistry.Get(panelIDkey, lastPanelId); + if (r == E_KEY_NOT_FOUND) + { + lastPanelId = 0; + appRegistry.Add(panelIDkey, lastPanelId); + } + + r = appRegistry.Get(panelNamekey, lastPanelName); + if (r == E_KEY_NOT_FOUND) + { + appRegistry.Add(panelNamekey, L"Panel1"); + } + + // Create a Frame + BasicAppFrame* pBasicAppFrame = new (std::nothrow) BasicAppFrame(); + pBasicAppFrame->Initialize(lastPanelId); + pBasicAppFrame->SetName(L"BasicApp"); + AddFrame(*pBasicAppFrame); + + return true; +} + +bool +BasicApp::OnAppTerminating(AppRegistry& appRegistry, bool forcedTermination) +{ + return true; +} + +void +BasicApp::OnForeground(void) +{ +} + +void +BasicApp::OnBackground(void) +{ +} + +void +BasicApp::OnLowMemory(void) +{ +} + +void +BasicApp::OnBatteryLevelChanged(BatteryLevel batteryLevel) +{ +} + +void +BasicApp::OnScreenOn (void) +{ +} + +void +BasicApp::OnScreenOff (void) +{ +} \ No newline at end of file diff --git a/project/src/BasicAppEntry.cpp b/project/src/BasicAppEntry.cpp new file mode 100644 index 0000000..5e3737a --- /dev/null +++ b/project/src/BasicAppEntry.cpp @@ -0,0 +1,61 @@ +// +// Tizen C++ SDK +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.0 (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. +// + +/** + * This file contains the Tizen application entry point. + */ + +#include + +#include "BasicApp.h" + +using namespace Tizen::Base; +using namespace Tizen::Base::Collection; + +#ifdef __cplusplus +extern "C" +{ +#endif // __cplusplus + +_EXPORT_ int OspMain(int argc, char* pArgv[]); + +/** + * The entry function of Tizen application called by the operating system. + */ +int +OspMain(int argc, char* pArgv[]) +{ + AppLog("Application started."); + ArrayList args; + args.Construct(); + for (int i = 0; i < argc; i++) + { + args.Add(*(new (std::nothrow) String(pArgv[i]))); + } + + result r = Tizen::App::Application::Execute(BasicApp::CreateInstance, &args); + + TryLog(r == E_SUCCESS, "[%s] Application execution failed", GetErrorMessage(r)); + + args.RemoveAll(true); + AppLog("Application finished."); + + return static_cast(r); +} +#ifdef __cplusplus +} +#endif // __cplusplus diff --git a/project/src/BasicAppFrame.cpp b/project/src/BasicAppFrame.cpp new file mode 100644 index 0000000..538974e --- /dev/null +++ b/project/src/BasicAppFrame.cpp @@ -0,0 +1,70 @@ +// +// Tizen C++ SDK +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.0 (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 + +#include "BasicAppFrame.h" +#include "MainForm.h" + +using namespace Tizen::Base; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; + +BasicAppFrame::BasicAppFrame(void) + : __panelId(0) +{ +} + +BasicAppFrame::~BasicAppFrame(void) +{ +} + +result +BasicAppFrame::Initialize(int panelId) +{ + result r = Frame::Construct(); + __panelId = panelId; + + return r; +} + +result +BasicAppFrame::OnInitializing(void) +{ + // Create a form + MainForm* pMainForm = new (std::nothrow) MainForm(); + result r = pMainForm->Initialize(__panelId); + + // Add the form to the frame + AddControl(*pMainForm); + + // Set the current form + SetCurrentForm(*pMainForm); + + // Draw the form + pMainForm->Invalidate(true); + + return r; +} + +result +BasicAppFrame::OnTerminating(void) +{ + result r = E_SUCCESS; + + return r; +} diff --git a/project/src/ButtonPanel.cpp b/project/src/ButtonPanel.cpp new file mode 100644 index 0000000..48c41ae --- /dev/null +++ b/project/src/ButtonPanel.cpp @@ -0,0 +1,78 @@ +// +// Tizen C++ SDK +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.0 (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 +#include + +#include "ButtonPanel.h" + +using namespace Tizen::Base; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Graphics; + +ButtonPanel::ButtonPanel(void) + : __pLabel(null) +{ +} + +ButtonPanel::~ButtonPanel(void) +{ +} + +result +ButtonPanel::Initialize(const Tizen::Graphics::Rectangle& rect) +{ + return Panel::Construct(rect); +} + +result +ButtonPanel::OnInitializing(void) +{ + // Create a Label + __pLabel = new (std::nothrow) Label(); + __pLabel->Construct(Rectangle(45, 190, 600, 80), L"Button"); + __pLabel->SetName(L"Label1"); + __pLabel->SetTextVerticalAlignment(ALIGNMENT_MIDDLE); + __pLabel->SetTextHorizontalAlignment(ALIGNMENT_LEFT); + result r = AddControl(*__pLabel); + + // Create a Button + Button *pButton = new (std::nothrow) Button(); + pButton->Construct(Rectangle(20, 290, 680, 160)); + pButton->SetText(L"Change Text"); + pButton->SetActionId(ID_BUTTON); + pButton->AddActionEventListener(*this); + r = AddControl(*pButton); + + return r; +} + +void +ButtonPanel::OnActionPerformed(const Tizen::Ui::Control& source, int actionId) +{ + switch(actionId) + { + case ID_BUTTON: + { + __pLabel->SetText(L"Button is clicked!"); + AppLog("Button is pressed! \n"); + } + break; + } + Invalidate(true); +} + diff --git a/project/src/ImagePanel.cpp b/project/src/ImagePanel.cpp new file mode 100644 index 0000000..1e669b6 --- /dev/null +++ b/project/src/ImagePanel.cpp @@ -0,0 +1,106 @@ +// +// Tizen C++ SDK +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.0 (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 +#include + +#include "ImagePanel.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Io; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Media; +using namespace Tizen::Graphics; + +ImagePanel::ImagePanel(void) + : __pTizenBitmap(null) +{ +} + +ImagePanel::~ImagePanel(void) +{ +} + +result +ImagePanel::Initialize(Tizen::Graphics::Rectangle rect) +{ + return Panel::Construct(rect); +} + +result +ImagePanel::OnInitializing(void) +{ + Image image; + result r = image.Construct(); + String filepath = App::GetInstance()->GetAppResourcePath() + L"screen-density-xhigh/tizen.png"; + + __pTizenBitmap = image.DecodeN(filepath, BITMAP_PIXEL_FORMAT_ARGB8888); + + return r; +} + +result +ImagePanel::OnTerminating(void) +{ + result r = E_SUCCESS; + + delete __pTizenBitmap; + return r; +} + +result +ImagePanel::OnDraw(void) +{ + result r = E_SUCCESS; + + Canvas* pCanvas = GetCanvasN(); + + if (pCanvas != null && __pTizenBitmap != null) + { + Rectangle rect = GetBounds(); + + float widthRatio = float(rect.width) / __pTizenBitmap->GetWidth(); + float heightRatio = float(rect.height) / __pTizenBitmap->GetHeight(); + float ratio = (widthRatio > heightRatio) ? heightRatio : widthRatio; + + int height = int(__pTizenBitmap->GetHeight() * ratio); + int width = int(__pTizenBitmap->GetWidth() * ratio); + + r = pCanvas->DrawBitmap(Rectangle((rect.width - width) / 2, (rect.height - height) / 2, width, height), *__pTizenBitmap); + } + + delete pCanvas; + + return r; +} + +void +ImagePanel::OnOrientationChanged(const Tizen::Ui::Control &source, Tizen::Ui::OrientationStatus orientationStatus) +{ + Form *pForm = static_cast
(GetParent()); + + if (pForm != null) + { + Rectangle clientRect = pForm->GetClientAreaBounds(); + Rectangle rect(0, 0, clientRect.width, clientRect.height); + + SetBounds(rect); + } + Invalidate(true); +} diff --git a/project/src/MainForm.cpp b/project/src/MainForm.cpp new file mode 100644 index 0000000..0837e08 --- /dev/null +++ b/project/src/MainForm.cpp @@ -0,0 +1,241 @@ +// +// Tizen C++ SDK +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// Licensed under the Flora License, Version 1.0 (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 +#include + +#include "ButtonPanel.h" +#include "ImagePanel.h" +#include "MainForm.h" + +using namespace Tizen::App; +using namespace Tizen::Base; +using namespace Tizen::Ui; +using namespace Tizen::Ui::Controls; +using namespace Tizen::Graphics; + +MainForm::MainForm(void) + : __pButtonOrientation(null) + , __status(ORIENTATION_PORTRAIT) + , __panelId(0) +{ +} + +MainForm::~MainForm(void) +{ +} + +result +MainForm::Initialize(int panelId) +{ + result r = Form::Construct(L"IDF_MAINFORM"); + + if (panelId >= 0 && panelId <= 2) + { + __panelId = panelId; + } + else + { + __panelId = 0; + } + + return r; +} + +result +MainForm::OnInitializing(void) +{ + result r = E_SUCCESS; + + Rectangle clientRect = GetClientAreaBounds(); + Rectangle rect(0, 0, clientRect.width, clientRect.height); + + // Create header + Header* pHeader = GetHeader(); + if (pHeader != null) + { + pHeader->SetStyle(HEADER_STYLE_TAB); + + HeaderItem headerItem1; + headerItem1.Construct(ID_HEADER_ITEM1); + headerItem1.SetText(L"BUTTON"); + pHeader->AddItem(headerItem1); + + HeaderItem headerItem2; + headerItem2.Construct(ID_HEADER_ITEM2); + headerItem2.SetText(L"ORIENTATION"); + pHeader->AddItem(headerItem2); + + HeaderItem headerItem3; + headerItem3.Construct(ID_HEADER_ITEM3); + headerItem3.SetText(L"IMAGE"); + pHeader->AddItem(headerItem3); + + pHeader->AddActionEventListener(*this); + } + + // Create footer + Footer * pFooter = GetFooter(); + if (pFooter != null) + { + pFooter->SetStyle(FOOTER_STYLE_BUTTON_ICON); + pFooter->SetBackButton(); + SetFormBackEventListener(this); + } + + // Create the Button panel + ButtonPanel* pButtonPanel = new (std::nothrow) ButtonPanel(); + pButtonPanel->Initialize(rect); + AddControl(*pButtonPanel); + __pPanel[0] = pButtonPanel; + + // Orientation panel was created with UI Builder, + // so only its button events must be defined here + __pPanel[1] = static_cast(GetControl(L"IDC_ORIENTATIONPANEL")); + if (__pPanel[1] != null) + { + __pButtonOrientation = static_cast