048f2175b65d68a6233ec855e1188e55f5467a9a
[apps/native/sample/ImageFeatureManager.git] / project / src / MainForm.cpp
1 //
2 // Tizen C++ SDK
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Flora License, Version 1.1 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://floralicense.org/license
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 #include <FApp.h>
19 #include "AppResourceId.h"
20 #include "MainForm.h"
21 #include "FileManagerForm.h"
22 #include "GeneratePanel.h"
23 #include "UpdatePanel.h"
24
25 using namespace Tizen::Base;
26 using namespace Tizen::App;
27 using namespace Tizen::Graphics;
28 using namespace Tizen::Ui;
29 using namespace Tizen::Ui::Controls;
30 using namespace Tizen::Ui::Scenes;
31
32 static const String SAMPLE_TITLE = L"Image feature manager";
33
34 MainForm::MainForm(void)
35     : __headerTitle(SAMPLE_TITLE)
36     , __pRadioGroupMode(null)
37     , __pFeatureManager(null)
38     , __pMessagePopup(null)
39     , __pMessageLabel(null)
40         , __visibleMenu(false)
41 {
42 }
43
44 MainForm::~MainForm(void)
45 {
46     if (__pFeatureManager)
47     {
48         delete __pFeatureManager;
49     }
50     delete __pMessagePopup;
51 }
52
53 bool
54 MainForm::Initialize(void)
55 {
56     Construct(IDF_FORM);
57     return true;
58 }
59
60 result
61 MainForm::OnInitializing(void)
62 {
63     result r = E_SUCCESS;
64
65     SetFormBackEventListener(this);
66     SetFormMenuEventListener(this);
67
68     CheckButton* pCheckButton = null;
69
70     __pRadioGroupMode = new RadioGroup();
71     __pRadioGroupMode->Construct();
72
73     pCheckButton = static_cast<CheckButton*>(GetControl(IDC_UPDATE_MODE_BUTTON, true));
74     if (pCheckButton)
75     {
76         pCheckButton->AddActionEventListener(*this);
77         pCheckButton->SetActionId(ID_BUTTON_UPDATE_MODE, 0, 0);
78         __pRadioGroupMode->Add(pCheckButton);
79     }
80
81     pCheckButton = static_cast<CheckButton*>(GetControl(IDC_GENERATION_MODE_BUTTON, true));
82     if (pCheckButton)
83     {
84         pCheckButton->SetSelected(true);
85         pCheckButton->AddActionEventListener(*this);
86         pCheckButton->SetActionId(ID_BUTTON_GENERATE_MODE, 0, 0);
87         __pRadioGroupMode->Add(pCheckButton);
88     }
89
90     Footer* pFooter = GetFooter();
91     pFooter->SetStyle(FOOTER_STYLE_BUTTON_ICON_TEXT);
92     pFooter->SetBackButton();
93
94     FooterItem pFooterItemSend;
95     pFooterItemSend.Construct(ID_FOOTER_ITEM_GENERATE);
96     pFooterItemSend.SetText(L"Generate");
97     pFooter->AddItem(pFooterItemSend);
98     pFooter->AddActionEventListener(*this);
99
100     __dbGen.Construct();
101     __dbGen.SetListener(this);
102
103     __pFeatureManager = new Tizen::Uix::Vision::ImageFeatureManager();
104     __pFeatureManager->Construct();
105
106     __pMessagePopup = new Popup();
107     __pMessagePopup->Construct(IDC_MESSAGE_POPUP);
108     __pMessagePopup->SetPropagatedKeyEventListener(this);
109     __pMessageLabel = static_cast<Label*>(__pMessagePopup->GetControl(IDC_LABEL_MASSEGE_TEXT, true));
110
111     __pOptionMenu = new OptionMenu();
112     __pOptionMenu->Construct();
113
114     __pOptionMenu->AddItem(L"Add Features", ID_OPTION_MENU_ADD);
115     __pOptionMenu->AddItem(L"Delete Features", ID_OPTION_MENU_DELETE);
116     __pOptionMenu->AddActionEventListener(*this);
117
118     Button* pButton = static_cast<Button*>(__pMessagePopup->GetControl(IDC_BUTTON_MESSAGE_CLOSE, true));
119     if (pButton)
120     {
121         pButton->AddActionEventListener(*this);
122         pButton->SetActionId(ID_BUTTON_CLOSE_RESULTS);
123     }
124
125     return r;
126 }
127
128 result
129 MainForm::OnTerminating(void)
130 {
131     result r = E_SUCCESS;
132     __dbGen.Exit();
133     return r;
134 }
135
136 bool
137 MainForm::OnKeyPressed (Control &source, const KeyEventInfo &keyEventInfo)
138 {
139         return false;
140 }
141
142 bool
143 MainForm::OnKeyReleased (Control &source, const KeyEventInfo &keyEventInfo)
144 {
145         if(keyEventInfo.GetKeyCode() == KEY_BACK)
146         {
147                 if(__pMessagePopup)
148                 {
149                         __pMessagePopup->SetShowState(false);
150                 }
151         }
152         return false;
153 }
154
155 bool
156 MainForm::OnPreviewKeyPressed (Control &source, const KeyEventInfo &keyEventInfo)
157 {
158         return false;
159 }
160
161 bool
162 MainForm::OnPreviewKeyReleased (Control &source, const KeyEventInfo &keyEventInfo)
163 {
164         return false;
165 }
166
167 bool
168 MainForm::TranslateKeyEventInfo (Control &source, KeyEventInfo &keyEventInfo)
169 {
170         return false;
171 }
172
173 void
174 MainForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
175 {
176     SceneManager* pSceneManager = SceneManager::GetInstance();
177     AppAssert(pSceneManager);
178
179     switch (actionId)
180     {
181     case ID_BUTTON_GENERATE_MODE:
182     {
183         Footer* pFooter = GetFooter();
184         pFooter->RemoveAllItems();
185         pFooter->RemoveAllButtons();
186
187         FooterItem pFooterItemGenerate;
188         pFooterItemGenerate.Construct(ID_FOOTER_ITEM_GENERATE);
189         pFooterItemGenerate.SetText(L"Generate");
190         pFooter->AddItem(pFooterItemGenerate);
191
192         pFooter->SetBackButton();
193         pFooter->AddActionEventListener(*this);
194
195         __visibleMenu = false;
196         __pFeatureManager->DeleteAllFeatures();
197         pSceneManager->GoForward(
198                 ForwardSceneTransition("GenerationModeScene",
199                         SCENE_TRANSITION_ANIMATION_TYPE_NONE,
200                         SCENE_HISTORY_OPTION_NO_HISTORY,
201                         SCENE_DESTROY_OPTION_KEEP), null);
202     }
203         break;
204     case ID_BUTTON_UPDATE_MODE:
205     {
206         Footer* pFooter = GetFooter();
207         pFooter->RemoveAllItems();
208         pFooter->RemoveAllButtons();
209
210         FooterItem pFooterItemUpdate;
211         pFooterItemUpdate.Construct(ID_FOOTER_ITEM_UPDATE);
212         pFooterItemUpdate.SetText(L"Update");
213         pFooter->AddItem(pFooterItemUpdate);
214
215         pFooter->SetBackButton();
216         pFooter->AddActionEventListener(*this);
217
218         __pFeatureManager->DeleteAllFeatures();
219         pSceneManager->GoForward(
220                 ForwardSceneTransition("UpdateModeScene",
221                         SCENE_TRANSITION_ANIMATION_TYPE_NONE,
222                         SCENE_HISTORY_OPTION_NO_HISTORY,
223                         SCENE_DESTROY_OPTION_KEEP), null);
224     }
225         break;
226     case ID_BUTTON_CLOSE_RESULTS:
227         __pMessagePopup->SetShowState(false);
228         break;
229
230     case ID_FOOTER_ITEM_GENERATE:
231     {
232         Panel* pPanel = static_cast<Panel*>(this->GetControl(IDC_GENERATION_MODE_PANEL, true));
233         if (pPanel)
234         {
235                 pPanel->SendUserEvent(GeneratePanel::REQUEST_GENERATE_FEATURE_SET, null);
236         }
237     }
238         break;
239     case ID_FOOTER_ITEM_UPDATE:
240     {
241         Panel* pPanel = static_cast<Panel*>(this->GetControl(IDC_UPDATE_MODE_PANEL, true));
242         if (pPanel)
243         {
244                 pPanel->SendUserEvent(UpdatePanel::REQUEST_UPDATE, null);
245         }
246     }
247         break;
248     case ID_OPTION_MENU_ADD:
249     {
250         Panel* pPanel = static_cast<Panel*>(this->GetControl(IDC_UPDATE_MODE_PANEL, true));
251         if (pPanel)
252         {
253                 pPanel->SendUserEvent(UpdatePanel::REQUEST_ADD, null);
254         }
255     }
256         break;
257     case ID_OPTION_MENU_DELETE:
258     {
259         Panel* pPanel = static_cast<Panel*>(this->GetControl(IDC_UPDATE_MODE_PANEL, true));
260         if (pPanel)
261         {
262                 pPanel->SendUserEvent(UpdatePanel::REQUEST_DELETE, null);
263         }
264     }
265         break;
266     default:
267         break;
268     }
269 }
270
271 void
272 MainForm::AppendImageFolder(const Tizen::Base::String& imPath, IFeatureSetGeneratorListener* listener)
273 {
274     if (listener != null)
275     {
276         __dbGen.SetListener(listener);
277     }
278     else
279     {
280         __dbGen.SetListener(this);
281     }
282     __dbGen.SetImagePath(imPath);
283     __dbGen.SetFeatureManager(__pFeatureManager);
284     this->SetEnabled(false);
285     __dbGen.Start();
286 }
287
288 void
289 MainForm::OnFormMenuRequested(Tizen::Ui::Controls::Form& source)
290 {
291         if(__visibleMenu)
292         {
293                 __pOptionMenu->SetShowState(true);
294                 __pOptionMenu->Show();
295         }
296 }
297
298 void
299 MainForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
300 {
301     UiApp* pApp = UiApp::GetInstance();
302     AppAssert(pApp);
303     pApp->Terminate();
304 }
305
306 void
307 MainForm::OnSceneActivatedN(
308         const Tizen::Ui::Scenes::SceneId& previousSceneId,
309         const Tizen::Ui::Scenes::SceneId& currentSceneId,
310         Tizen::Base::Collection::IList* pArgs)
311 {
312 }
313
314 void
315 MainForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId,
316         const Tizen::Ui::Scenes::SceneId& nextSceneId)
317 {
318 }
319
320 void
321 MainForm::OnImageProcessed(int imNo, int total)
322 {
323
324     SceneManager* pSceneManager = SceneManager::GetInstance();
325     AppAssert(pSceneManager);
326
327     if (pSceneManager->GetCurrentSceneId() == "GenerationModeScene")
328     {
329         __headerTitle = "Generating... ";
330     }
331     else if (pSceneManager->GetCurrentSceneId() == "UpdateModeScene")
332     {
333         __headerTitle = "Updating... ";
334     }
335
336     __headerTitle.Append(Integer(imNo).ToString());
337     __headerTitle.Append('/');
338     __headerTitle.Append(Integer(total).ToString());
339     RequestRedraw(true);
340 }
341
342 void
343 MainForm::OnFinish(void)
344 {
345     SendUserEvent(REQUEST_RESULT, 0);
346 }
347
348 result
349 MainForm::OnDraw(void)
350 {
351     Header* pHeader = GetHeader();
352     pHeader->SetTitleText(__headerTitle);
353     return E_SUCCESS;
354 }
355
356 void
357 MainForm::OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList* pArgs)
358 {
359     switch(requestId)
360     {
361     case REQUEST_RESULT:
362     {
363         __dbGen.GetResults(__resInfo);
364         this->SetEnabled(true);
365         this->RequestRedraw(true);
366         __headerTitle = SAMPLE_TITLE;
367                 if (__resInfo.appendedObjectsNumber != 0)
368                 {
369                         __pMessageLabel->SetText(
370                                         "\nTotal time: " + Integer(__resInfo.appendTime).ToString() + "ms" +
371                                         "\nAverage time: " + Integer(__resInfo.appendTime / __resInfo.appendedObjectsNumber).ToString() + " ms" +
372                                         "\nAdded images: " + Integer(__resInfo.appendedObjectsNumber).ToString() +
373                                         "\nRejected files: " + Integer(__resInfo.rejectedObjectsNumber).ToString() +
374                                         "\nTotal files count: " + Integer(__resInfo.totalObjectsNumber).ToString()
375                         );
376                 }
377                 else
378                 {
379                         __pMessageLabel->SetText(
380                                         "\nTotal time: " + Integer(__resInfo.appendTime).ToString() + "ms" +
381                                         "\nAdded images: " + Integer(__resInfo.appendedObjectsNumber).ToString() +
382                                         "\nRejected files: " + Integer(__resInfo.rejectedObjectsNumber).ToString() +
383                                         "\nTotal files count: " + Integer(__resInfo.totalObjectsNumber).ToString()
384                         );
385                 }
386
387                 __pMessagePopup->SetShowState(true);
388                 __pMessagePopup->Show();
389         break;
390     }
391     default:
392         break;
393     }
394 }
395
396 Tizen::Uix::Vision::ImageFeatureManager*
397 MainForm::GetFeatureManager(void)
398 {
399     return __pFeatureManager;
400 }
401
402 void
403 MainForm::SetMenuVisibility(bool visibility)
404 {
405         __visibleMenu = visibility;
406 }