[Tizen] Add search bar on main form (for canceling search).

This commit is contained in:
Sergey Pisarchik 2014-06-28 14:42:18 +03:00 committed by Alex Zolotarev
parent 81ae6f0d1f
commit 19678b965c
8 changed files with 134 additions and 32 deletions

View file

@ -19,7 +19,8 @@ extern int const lstItmHght; //list item height
extern int const backWdth; //back txt width
extern int const mainFontSz; //big font
extern int const mediumFontSz; //medium font
extern int const minorFontSz ; //small font
extern int const minorFontSz; //small font
extern int const searchBarHeight; //search bar on main form
//bookmark panel
extern int const markPanelHeight;

View file

@ -24,6 +24,8 @@ class MapsWithMeForm
, public Tizen::Ui::Controls::IListViewItemEventListener
, public Tizen::Ui::Scenes::ISceneEventListener
, public Tizen::Ui::Controls::IFormMenuEventListener
, public Tizen::Ui::Controls::ISearchBarEventListener
, public Tizen::Ui::ITextEventListener
{
public:
MapsWithMeForm();
@ -36,10 +38,10 @@ public:
// ITouchEventListener
virtual void OnTouchFocusIn (Tizen::Ui::Control const & source,
Tizen::Graphics::Point const & currentPosition,
Tizen::Ui::TouchEventInfo const & touchInfo);
Tizen::Ui::TouchEventInfo const & touchInfo){}
virtual void OnTouchFocusOut (Tizen::Ui::Control const & source,
Tizen::Graphics::Point const & currentPosition,
Tizen::Ui::TouchEventInfo const & touchInfo);
Tizen::Ui::TouchEventInfo const & touchInfo){}
virtual void OnTouchMoved (Tizen::Ui::Control const & source,
Tizen::Graphics::Point const & currentPosition,
Tizen::Ui::TouchEventInfo const & touchInfo);
@ -76,10 +78,15 @@ public:
virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView & listView, int index, Tizen::Ui::Controls::SweepDirection direction){}
virtual void OnListViewItemLongPressed(Tizen::Ui::Controls::ListView & listView, int index, int elementId, bool & invokeListViewItemCallback){}
// ISceneEventListener
virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId,
const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs);
virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId,
const Tizen::Ui::Scenes::SceneId& nextSceneId){}
virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId & previousSceneId,
const Tizen::Ui::Scenes::SceneId & currentSceneId, Tizen::Base::Collection::IList * pArgs);
virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId & currentSceneId,
const Tizen::Ui::Scenes::SceneId & nextSceneId){}
// ISearchBarEventListener
virtual void OnSearchBarModeChanged(Tizen::Ui::Controls::SearchBar & source, Tizen::Ui::Controls::SearchBarMode mode);
// ITextEventListener
virtual void OnTextValueChangeCanceled(const Tizen::Ui::Control & source){}
virtual void OnTextValueChanged(const Tizen::Ui::Control & source);
//IUserMarkListener
void OnUserMark(UserMarkCopy * pCopy);
@ -103,6 +110,12 @@ public:
void UpdateBookMarkSplitPanelState();
bool m_bookMArkSplitPanelEnabled;
void CreateSearchBar();
void ShowSearchBar();
void HideSearchBar();
bool m_searchBarEnabled;
Tizen::Base::String m_searchText;
private:
bool m_locationEnabled;
std::vector<std::pair<double, double> > m_prev_pts;
@ -114,7 +127,8 @@ private:
ID_MENU,
ID_STAR,
ID_BUTTON_SCALE_PLUS,
ID_BUTTON_SCALE_MINUS
ID_BUTTON_SCALE_MINUS,
ID_SEARCH_CANCEL
};
enum EMainMenuItems
@ -133,6 +147,7 @@ private:
Tizen::Ui::Controls::SplitPanel * m_pSplitPanel;
Tizen::Ui::Controls::Panel* m_pFirstPanel;
Tizen::Ui::Controls::Panel* m_pSecondPanel;
Tizen::Ui::Controls::SearchBar * m_pSearchBar;
UserMarkPanel * m_userMarkPanel;
BookMarkSplitPanel * m_bookMarkSplitPanel;

View file

@ -13,6 +13,7 @@ class SearchForm: public Tizen::Ui::Controls::Form
, public Tizen::Ui::Controls::IListViewItemEventListener
, public Tizen::Ui::ITextEventListener
, public Tizen::Ui::IKeypadEventListener
, public Tizen::Ui::Scenes::ISceneEventListener
{
public:
SearchForm();
@ -48,6 +49,11 @@ private:
virtual void OnKeypadClosed (Tizen::Ui::Control & source){}
virtual void OnKeypadOpened (Tizen::Ui::Control & source){}
virtual void OnKeypadWillOpen (Tizen::Ui::Control & source){}
// ISceneEventListener
virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId,
const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs);
virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId,
const Tizen::Ui::Scenes::SceneId& nextSceneId){}
// search
void OnSearchResultsReceived(search::Results const & results);

View file

@ -25,4 +25,9 @@
<layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="100.0" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0.0" marginLeft="0.0" marginRight="20.0" marginTop="20.0" mode="Portrait" rightRelation="IDF_MAIN_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_ZOOM_IN" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="100.0" x="600.0" y="632.0"/>
<layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="167.0" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0.0" marginLeft="0.0" marginRight="0.0" marginTop="0.0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="145.0" x="551.0" y="553.0"/>
</Button>
<SearchBar id="IDC_SEARCHBAR" parent="IDF_MAIN_FORM">
<property accessibilityHint="" backgroundBitmapPath="" buttonActionId="333" buttonText="" color="#15C783" colorOpacity="100" disabledButtonColor="" disabledButtonTextColor="" disabledSearchFieldColor="#15C783" disabledSearchFieldTextColor="" ellipsisPosition="ELLIPSIS_POSITION_END" guideText="" guideTextColor="" highlightedButtonColor="#15C783" highlightedButtonTextColor="" highlightedSearchFieldColor="#15C783" highlightedSearchFieldTextColor="" keypadAction="KEYPAD_ACTION_SEARCH" limitLength="500" lowerCaseMode="false" normalButtonColor="#15C783" normalButtonTextColor="" normalSearchFieldColor="#15C783" normalSearchFieldTextColor="" pressedButtonColor="#15C783" pressedButtonTextColor="" searchFieldTextSize="33.0" showSearchBarButton="true" text="" textPredictionEnabled="true"/>
<layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="112.0" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0.0" marginLeft="0.0" marginRight="0.0" marginTop="0.0" mode="Portrait" rightRelation="" rightRelationType="" topRelation="IDF_MAIN_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720.0" x="0.0" y="0.0"/>
<layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="86.0" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0.0" marginLeft="0.0" marginRight="0.0" marginTop="0.0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="720.0" x="0.0" y="162.0"/>
</SearchBar>
</Scene>

View file

@ -21,6 +21,7 @@ int const backWdth = 150; //back txt width
int const mainFontSz = 45; //big font
int const mediumFontSz = 33; //medium font
int const minorFontSz = 25; //small font
int const searchBarHeight = 112; //search bar on main form
int const markPanelHeight = 1.5 * lstItmHght;
int const btnSz = 55;

View file

@ -77,6 +77,7 @@ Tizen::Ui::Controls::Form * FormFactory::CreateFormN(String const & formId, Scen
{
SearchForm * pForm = new SearchForm();
pForm->Initialize();
pSceneManager->AddSceneEventListener(sceneId, *pForm);
pNewForm = pForm;
}
else if (formId == FORM_BMCATEGORIES)

View file

@ -100,6 +100,7 @@ result MapsWithMeForm::OnInitializing(void)
CreateBookMarkPanel();
CreateSplitPanel();
CreateBookMarkSplitPanel();
CreateSearchBar();
HideSplitPanel();
HideBookMarkPanel();
@ -170,9 +171,11 @@ void MapsWithMeForm::OnActionPerformed(Tizen::Ui::Control const & source, int ac
{
::Framework * pFramework = tizen::Framework::GetInstance();
pFramework->PrepareSearch(false);
ArrayList * pList = new ArrayList;
pList->Add(new String(m_searchText));
SceneManager * pSceneManager = SceneManager::GetInstance();
pSceneManager->GoForward(ForwardSceneTransition(SCENE_SEARCH,
SCENE_TRANSITION_ANIMATION_TYPE_LEFT, SCENE_HISTORY_OPTION_ADD_HISTORY, SCENE_DESTROY_OPTION_KEEP));
SCENE_TRANSITION_ANIMATION_TYPE_LEFT, SCENE_HISTORY_OPTION_ADD_HISTORY, SCENE_DESTROY_OPTION_KEEP), pList);
break;
}
}
@ -393,18 +396,6 @@ void MapsWithMeForm::OnTouchReleased(Tizen::Ui::Control const & source,
}
}
void MapsWithMeForm::OnTouchFocusIn(Tizen::Ui::Control const & source,
Point const & currentPosition,
Tizen::Ui::TouchEventInfo const & touchInfo)
{
}
void MapsWithMeForm::OnTouchFocusOut(Tizen::Ui::Control const & source,
Point const & currentPosition,
Tizen::Ui::TouchEventInfo const & touchInfo)
{
}
void MapsWithMeForm::CreateSplitPanel()
{
m_pSplitPanel = new SplitPanel();
@ -510,6 +501,49 @@ void MapsWithMeForm::UpdateBookMarkSplitPanelState()
m_bookMarkSplitPanel->UpdateState();
}
void MapsWithMeForm::OnTextValueChanged (const Tizen::Ui::Control &source)
{
tizen::Framework::GetInstance()->CancelInteractiveSearch();
HideSearchBar();
}
void MapsWithMeForm::OnSearchBarModeChanged(Tizen::Ui::Controls::SearchBar & source, SearchBarMode mode)
{
::Framework * pFramework = tizen::Framework::GetInstance();
pFramework->PrepareSearch(false);
SceneManager * pSceneManager = SceneManager::GetInstance();
ArrayList * pList = new ArrayList;
pList->Add(new String(m_searchText));
pSceneManager->GoForward(ForwardSceneTransition(SCENE_SEARCH,
SCENE_TRANSITION_ANIMATION_TYPE_LEFT, SCENE_HISTORY_OPTION_ADD_HISTORY, SCENE_DESTROY_OPTION_KEEP), pList);
}
void MapsWithMeForm::CreateSearchBar()
{
m_pSearchBar = static_cast<SearchBar *>(GetControl(IDC_SEARCHBAR, true));
m_pSearchBar->AddTouchEventListener(*this);
m_pSearchBar->AddSearchBarEventListener(*this);
m_pSearchBar->AddTextEventListener(*this);
}
void MapsWithMeForm::ShowSearchBar()
{
m_searchBarEnabled = true;
m_pSearchBar->SetMode(SEARCH_BAR_MODE_NORMAL);
m_pSearchBar->SetShowState(true);
m_pSearchBar->SetText(m_searchText);
Invalidate(true);
}
void MapsWithMeForm::HideSearchBar()
{
m_searchBarEnabled = false;
m_searchText = "";
m_pSearchBar->SetShowState(false);
Invalidate(true);
}
void MapsWithMeForm::OnFormBackRequested(Form& source)
{
if (m_splitPanelEnabled)
@ -525,6 +559,10 @@ void MapsWithMeForm::OnFormBackRequested(Form& source)
HideBookMarkSplitPanel();
ShowBookMarkPanel();
}
else if (m_searchBarEnabled)
{
HideSearchBar();
}
else
{
UiApp * pApp = UiApp::GetInstance();
@ -558,6 +596,10 @@ void MapsWithMeForm::UpdateButtons()
footerItem.SetIcon(FOOTER_ITEM_STATUS_NORMAL, GetBitmap(m_locationEnabled ? IDB_MY_POSITION_PRESSED : IDB_MY_POSITION_NORMAL));
pFooter->SetItemAt (0, footerItem);
UpdateBookMarkSplitPanelState();
if (m_searchBarEnabled)
ShowSearchBar();
else
HideSearchBar();
Invalidate(true);
}
@ -666,8 +708,20 @@ void MapsWithMeForm::OnListViewItemStateChanged(ListView & listView, int index,
void MapsWithMeForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId,
const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
{
if (currentSceneId == SceneManager::GetInstance()->GetCurrentScene()->GetSceneId())
m_searchText = "";
m_searchBarEnabled = false;
if (pArgs != null)
{
UpdateButtons();
// Come from Search Page
if (pArgs->GetCount() == 1)
{
String * pSearchText = dynamic_cast<String *>(pArgs->GetAt(0));
m_searchText = *pSearchText;
m_searchBarEnabled = true;
}
pArgs->RemoveAll(true);
delete pArgs;
}
UpdateButtons();
}

View file

@ -21,8 +21,7 @@ using namespace Tizen::Base;
using namespace Tizen::Ui;
using namespace Tizen::Ui::Controls;
using namespace Tizen::Ui::Scenes;
using namespace Tizen::App;
using namespace Tizen::Web::Controls;
using namespace Tizen::Base::Collection;
using namespace Tizen::Graphics;
using namespace search;
using namespace consts;
@ -257,18 +256,18 @@ void SearchForm::UpdateList()
void SearchForm::Search(String const & val)
{
search::SearchParams m_params;
m_params.m_callback = bind(&SearchForm::OnSearchResultsReceived, this, _1);
m_params.m_query = FromTizenString(val);
search::SearchParams params;
params.m_callback = bind(&SearchForm::OnSearchResultsReceived, this, _1);
params.m_query = FromTizenString(val);
Tizen::Locales::LanguageCode language;
if (m_searchBar->GetCurrentLanguage(language) == E_SUCCESS)
m_params.SetInputLanguage(CodeFromISO369_2to_1(GetLanguageCode(language)));
params.SetInputLanguage(CodeFromISO369_2to_1(GetLanguageCode(language)));
double lat, lon;
GetFramework()->GetCurrentPosition(lat, lon);
m_params.SetPosition(lat, lon);
params.SetPosition(lat, lon);
GetFramework()->Search(m_params);
GetFramework()->Search(params);
}
String SearchForm::GetSearchString() const
@ -286,7 +285,27 @@ void SearchForm::OnKeypadActionPerformed (Tizen::Ui::Control & source, Tizen::Ui
if (keypadAction == KEYPAD_ACTION_SEARCH)
{
GetFramework()->ShowAllSearchResults();
ArrayList * pList = new ArrayList;
pList->Construct();
pList->Add(new String(GetSearchString()));
SceneManager * pSceneManager = SceneManager::GetInstance();
pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT));
pSceneManager->GoBackward(BackwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_RIGHT), pList);
}
}
void SearchForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId,
const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
{
if (pArgs != null)
{
// Come from Main page in resume mode
if (pArgs->GetCount() == 1)
{
String * pSearchText = dynamic_cast<String *>(pArgs->GetAt(0));
m_searchBar->SetText(*pSearchText);
Search(GetSearchString());
}
pArgs->RemoveAll(true);
delete pArgs;
}
}