N_SE-45845 issue fix
[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     if (__dbGen.IsGenerating())
133     {
134         __dbGen.Exit();
135     }
136     return r;
137 }
138
139 bool
140 MainForm::OnKeyPressed (Control &source, const KeyEventInfo &keyEventInfo)
141 {
142         return false;
143 }
144
145 bool
146 MainForm::OnKeyReleased (Control &source, const KeyEventInfo &keyEventInfo)
147 {
148         if(keyEventInfo.GetKeyCode() == KEY_BACK)
149         {
150                 if(__pMessagePopup)
151                 {
152                         __pMessagePopup->SetShowState(false);
153                 }
154         }
155         return false;
156 }
157
158 bool
159 MainForm::OnPreviewKeyPressed (Control &source, const KeyEventInfo &keyEventInfo)
160 {
161         return false;
162 }
163
164 bool
165 MainForm::OnPreviewKeyReleased (Control &source, const KeyEventInfo &keyEventInfo)
166 {
167         return false;
168 }
169
170 bool
171 MainForm::TranslateKeyEventInfo (Control &source, KeyEventInfo &keyEventInfo)
172 {
173         return false;
174 }
175
176 void
177 MainForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
178 {
179     SceneManager* pSceneManager = SceneManager::GetInstance();
180     AppAssert(pSceneManager);
181
182     switch (actionId)
183     {
184     case ID_BUTTON_GENERATE_MODE:
185     {
186         Footer* pFooter = GetFooter();
187         pFooter->RemoveAllItems();
188         pFooter->RemoveAllButtons();
189
190         FooterItem pFooterItemGenerate;
191         pFooterItemGenerate.Construct(ID_FOOTER_ITEM_GENERATE);
192         pFooterItemGenerate.SetText(L"Generate");
193         pFooter->AddItem(pFooterItemGenerate);
194
195         pFooter->SetBackButton();
196         pFooter->AddActionEventListener(*this);
197
198         __visibleMenu = false;
199         __pFeatureManager->DeleteAllFeatures();
200         pSceneManager->GoForward(
201                 ForwardSceneTransition("GenerationModeScene",
202                         SCENE_TRANSITION_ANIMATION_TYPE_NONE,
203                         SCENE_HISTORY_OPTION_NO_HISTORY,
204                         SCENE_DESTROY_OPTION_KEEP), null);
205     }
206         break;
207     case ID_BUTTON_UPDATE_MODE:
208     {
209         Footer* pFooter = GetFooter();
210         pFooter->RemoveAllItems();
211         pFooter->RemoveAllButtons();
212
213         FooterItem pFooterItemUpdate;
214         pFooterItemUpdate.Construct(ID_FOOTER_ITEM_UPDATE);
215         pFooterItemUpdate.SetText(L"Update");
216         pFooter->AddItem(pFooterItemUpdate);
217
218         pFooter->SetBackButton();
219         pFooter->AddActionEventListener(*this);
220
221         __pFeatureManager->DeleteAllFeatures();
222         pSceneManager->GoForward(
223                 ForwardSceneTransition("UpdateModeScene",
224                         SCENE_TRANSITION_ANIMATION_TYPE_NONE,
225                         SCENE_HISTORY_OPTION_NO_HISTORY,
226                         SCENE_DESTROY_OPTION_KEEP), null);
227     }
228         break;
229     case ID_BUTTON_CLOSE_RESULTS:
230         __pMessagePopup->SetShowState(false);
231         break;
232
233     case ID_FOOTER_ITEM_GENERATE:
234     {
235         Panel* pPanel = static_cast<Panel*>(this->GetControl(IDC_GENERATION_MODE_PANEL, true));
236         if (pPanel)
237         {
238                 pPanel->SendUserEvent(GeneratePanel::REQUEST_GENERATE_FEATURE_SET, null);
239         }
240     }
241         break;
242     case ID_FOOTER_ITEM_UPDATE:
243     {
244         Panel* pPanel = static_cast<Panel*>(this->GetControl(IDC_UPDATE_MODE_PANEL, true));
245         if (pPanel)
246         {
247                 pPanel->SendUserEvent(UpdatePanel::REQUEST_UPDATE, null);
248         }
249     }
250         break;
251     case ID_OPTION_MENU_ADD:
252     {
253         Panel* pPanel = static_cast<Panel*>(this->GetControl(IDC_UPDATE_MODE_PANEL, true));
254         if (pPanel)
255         {
256                 pPanel->SendUserEvent(UpdatePanel::REQUEST_ADD, null);
257         }
258     }
259         break;
260     case ID_OPTION_MENU_DELETE:
261     {
262         Panel* pPanel = static_cast<Panel*>(this->GetControl(IDC_UPDATE_MODE_PANEL, true));
263         if (pPanel)
264         {
265                 pPanel->SendUserEvent(UpdatePanel::REQUEST_DELETE, null);
266         }
267     }
268         break;
269     default:
270         break;
271     }
272 }
273
274 void
275 MainForm::AppendImageFolder(const Tizen::Base::String& imPath, IFeatureSetGeneratorListener* listener)
276 {
277     if (listener != null)
278     {
279         __dbGen.SetListener(listener);
280     }
281     else
282     {
283         __dbGen.SetListener(this);
284     }
285     __dbGen.SetImagePath(imPath);
286     __dbGen.SetFeatureManager(__pFeatureManager);
287     this->SetEnabled(false);
288     __dbGen.Start();
289 }
290
291 void
292 MainForm::OnFormMenuRequested(Tizen::Ui::Controls::Form& source)
293 {
294         if(__visibleMenu)
295         {
296                 __pOptionMenu->SetShowState(true);
297                 __pOptionMenu->Show();
298         }
299 }
300
301 void
302 MainForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
303 {
304     UiApp* pApp = UiApp::GetInstance();
305     AppAssert(pApp);
306     pApp->Terminate();
307 }
308
309 void
310 MainForm::OnSceneActivatedN(
311         const Tizen::Ui::Scenes::SceneId& previousSceneId,
312         const Tizen::Ui::Scenes::SceneId& currentSceneId,
313         Tizen::Base::Collection::IList* pArgs)
314 {
315 }
316
317 void
318 MainForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId,
319         const Tizen::Ui::Scenes::SceneId& nextSceneId)
320 {
321 }
322
323 void
324 MainForm::OnImageProcessed(int imNo, int total)
325 {
326
327     SceneManager* pSceneManager = SceneManager::GetInstance();
328     AppAssert(pSceneManager);
329
330     if (pSceneManager->GetCurrentSceneId() == "GenerationModeScene")
331     {
332         __headerTitle = "Generating... ";
333     }
334     else if (pSceneManager->GetCurrentSceneId() == "UpdateModeScene")
335     {
336         __headerTitle = "Updating... ";
337     }
338
339     __headerTitle.Append(Integer(imNo).ToString());
340     __headerTitle.Append('/');
341     __headerTitle.Append(Integer(total).ToString());
342     RequestRedraw(true);
343 }
344
345 void
346 MainForm::OnFinish(void)
347 {
348     SendUserEvent(REQUEST_RESULT, 0);
349 }
350
351 result
352 MainForm::OnDraw(void)
353 {
354     Header* pHeader = GetHeader();
355     pHeader->SetTitleText(__headerTitle);
356     return E_SUCCESS;
357 }
358
359 void
360 MainForm::OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList* pArgs)
361 {
362     switch(requestId)
363     {
364     case REQUEST_RESULT:
365     {
366         __dbGen.GetResults(__resInfo);
367         this->SetEnabled(true);
368         this->RequestRedraw(true);
369         __headerTitle = SAMPLE_TITLE;
370                 if (__resInfo.appendedObjectsNumber != 0)
371                 {
372                         __pMessageLabel->SetText(
373                                         "\nTotal time: " + Integer(__resInfo.appendTime).ToString() + "ms" +
374                                         "\nAverage time: " + Integer(__resInfo.appendTime / __resInfo.appendedObjectsNumber).ToString() + " ms" +
375                                         "\nAdded images: " + Integer(__resInfo.appendedObjectsNumber).ToString() +
376                                         "\nRejected files: " + Integer(__resInfo.rejectedObjectsNumber).ToString() +
377                                         "\nTotal files count: " + Integer(__resInfo.totalObjectsNumber).ToString()
378                         );
379                 }
380                 else
381                 {
382                         __pMessageLabel->SetText(
383                                         "\nTotal time: " + Integer(__resInfo.appendTime).ToString() + "ms" +
384                                         "\nAdded images: " + Integer(__resInfo.appendedObjectsNumber).ToString() +
385                                         "\nRejected files: " + Integer(__resInfo.rejectedObjectsNumber).ToString() +
386                                         "\nTotal files count: " + Integer(__resInfo.totalObjectsNumber).ToString()
387                         );
388                 }
389
390                 __pMessagePopup->SetShowState(true);
391                 __pMessagePopup->Show();
392         break;
393     }
394     default:
395         break;
396     }
397 }
398
399 Tizen::Uix::Vision::ImageFeatureManager*
400 MainForm::GetFeatureManager(void)
401 {
402     return __pFeatureManager;
403 }
404
405 void
406 MainForm::SetMenuVisibility(bool visibility)
407 {
408         __visibleMenu = visibility;
409 }