diff options
Diffstat (limited to 'lib-contact/ct-list/inc/CtListView.h')
-rwxr-xr-x | lib-contact/ct-list/inc/CtListView.h | 415 |
1 files changed, 415 insertions, 0 deletions
diff --git a/lib-contact/ct-list/inc/CtListView.h b/lib-contact/ct-list/inc/CtListView.h new file mode 100755 index 0000000..a087396 --- /dev/null +++ b/lib-contact/ct-list/inc/CtListView.h @@ -0,0 +1,415 @@ +/* + * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0 + * + * 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 __CT_LIST_VIEW_H_ +#define __CT_LIST_VIEW_H_ + +#include <string> +#include <vector> +#include <list> +#include <memory> + +#include "WNaviframe.h" + +#include "ContactsCommon.h" +#include "IContactsTabPageView.h" +#include "CtType.h" +#include "CtView.h" +#include "ICtChangeListener.h" +#include "CtListController.h" +#include "CtThread.h" + +class CtListModel; +class CtListModelDb; +class CtListModelGroup; +class CtListDataPerson; +class CtListDataGroup; + +class CtListBasicController; +class CtListUgChooseController; +class CtListUgMultiPickController; +class CtListUgSinglePickController; + +typedef enum { + LIST_SUB_DEFAULT, + LIST_SUB_LINK_SUGGEST, + LIST_SUB_FAVORITE, + LIST_SUB_MFC, +}CtListSubListType; + +enum CtListSelectMode { + LIST_SELECT_SINGLE, + LIST_SELECT_SINGLE_OR_CREATE, + LIST_SELECT_MULTIPLE +}; + +enum CtListResultType { + LIST_RESULT_ID, + LIST_RESULT_NUMBER, + LIST_RESULT_NUMBER_FOR_CALL, + LIST_RESULT_NUMBER_FOR_MESSAGE, + LIST_RESULT_EMAIL, + LIST_RESULT_VCARD, + LIST_RESULT_NUMBER_OR_EMAIL +}; + +class WAPP_ASSIST_EXPORT CtListView : public CtView, public IContactsTabPageView, public ICtChangeListener +{ +public: + typedef std::function<void(const char*, CtListResultType)> SingleResultCb; + typedef std::function<void(const char*[], size_t)> MultiResultCb; + + CtListView(const char *vcardPath); + CtListView(CtListSelectMode selectMode, CtListResultType resultType, int limit); + CtListView(CtListViewType viewType, CtListDataType dataType, CtListCtrlType ctrlType); + virtual const char* getClassName(); + + Evas_Object* getViewWindow(void); + Evas_Object* getViewNaviframe(void); + WNaviframe* getWNaviframe(void); + + const int getListTopItemPersonId(void); + void setTopItemOnList(const int personId) {__topItemPersonId = personId;} + void setOnProgressOperation(bool onProgress); + + Elm_Object_Item* getGenlistItemByPersonId(int personId); + + void setOnSingleResult(SingleResultCb handler); + void setOnMultiResult(MultiResultCb handler); + + void sendSingleResult(const char *data, CtListResultType type) const; + void sendMultiResult(const char *data[], size_t count) const; + +protected: + virtual Evas_Object* onCreate( Evas_Object* parent, void* viewParam); + virtual void onDestroy(); + virtual void onPushed(Elm_Object_Item* naviItem); + virtual void onEvent(int eventType); + virtual void onSetAsPageContent(Elm_Object_Item* parentNaviItem); + virtual void onTabSelect(Elm_Object_Item *naviItem); + virtual void onTabUnselect(Elm_Object_Item *naviItem); + virtual bool onTabPop(); + virtual void onTabScrollStart() {return;} + virtual void onTabScrollStop() {return;} + virtual bool onPop(); + +protected: + virtual void onLanguageChanged(); + +private: + + virtual void onDbChanged(const char* viewUri); + virtual void onCompleteGetContacts(int offset); + virtual void onConditionChagned(); + + typedef struct { + int position; + int skipped_count; + char index[10]; + Elm_Object_Item *item; + } CtListFastIndexData; + + + struct CtListDataItem { + Elm_Object_Item* item; + CtListView *listView; + std::shared_ptr<CtListDataPerson> personData; + }; + + void __resetCheckitems(); + void __initialize(void); + void __hideFastScroll(void); + void __showFastScroll(void); + void __freeFastIndexData(void); + void __appendFastScrollLetter(const std::string &str); + void __showNoContent(void); + void __showGenlist(void); + void __updatetGenlistItem(void); + void __showTitleButton(bool show); + void __initViewCondition(CtListViewType viewType, CtListCtrlType ctrlType); + void __appendGenlistItems(int offset); + char* __getSearchHighlightNumber(const char *src); + void __setItemClassStyle(); + void __updateCheckRelatedInfo(); + void __updateCheckAllRelatedInfo(); + void __initFastscrollData(); + + //item style + void __setReorderItemClassStyle(void); + void __setCheckItemClassStyle(void); + void __setDefaultItemClassStyle(void); + void __setGroupTitleItemClassStyle(void); + void __setMyProfileItemClassStyle(void); + void __setSelectAllItemClassStyle(void); + void __setSearchbarItemClassStyle(void); + void __setFavoriteTitleItemClassStyle(void); + void __setMfcTitleItemClassStyle(void); + void __setLinkSuggestTitleItemClassStyle(void); +#if 0 + void __setGalSearchItemClassStyle(void); + void __setGalSearchTitleItemClassStyle(void); + void __setGalSearchMoreItemClassStyle(void); + void __setGalSearchProgressItemClassStyle(void); +#endif + static Evas_Object* __createToolbar(Evas_Object *navi); + + //Group Index + Eina_Unicode __hangulCompatibilityToJamo(Eina_Unicode unicode); + bool __compareCharacter(const char *str1, const char *str2); + void __linkItemsManually(Eina_List *indexItem, Elm_Object_Item *genItem); + void __linkItemToIndex(Elm_Object_Item *groupItem); + void __linkItemToRestIndex(); + + + Evas_Object* __createGenlist(Evas_Object* parent); + Evas_Object* __createFastscroll(Evas_Object* parent); + Evas_Object* __createSearchbar(Evas_Object* parent); + Evas_Object* __createNoContent(Evas_Object* parent); + Evas_Object* __createFloatBtn(Evas_Object* parent); + void __cleanSearchbar(void); + void __hideCreateButton(void); + void __showCreateButton(void); + Evas_Object* __setNoContentsLayout(Evas_Object* parent); + void __setNoContentsText(std::string text, std::string helptext=""); + void __hideNoContentsLayout(); + void __showNoContentsLayout(); + +#if 0 + void __clearGalSearchItems(); +#endif + +private: + + char *__getDelPopupText(); + + //view evas obj item callbacks + static void __onSelectItem(void *data, Evas_Object *obj, void *event_info); + static void __onMyProfileSelectCb(void *data, Evas_Object *obj, void *event_info); + static void __onGenlistRealizedCb(void *data, Evas_Object *obj, void *event_info); + static void __onChangedSearchEditField(void *data, Evas_Object *obj, void *event_info); + static void __onSearchbarActivatedCb(void *data, Evas_Object *obj, void *event_info); + static void __onSipUpCb(void *data, Evas_Object *obj, void *event_info); + static void __onSipDownCb(void *data, Evas_Object *obj, void *event_info); + static void __onNaviTitleCancel(void *data, Evas_Object *obj, void *event_info); + static void __deletePopupDelCb(void *data, Evas *e, Evas_Object *obj, void *event_info); + static void __onNaviTitleDone(void *data, Evas_Object *obj, void *event_info); + static void __onClickRemoveBtn(void *data, Evas_Object *obj, void *event_info); + static void __onToolbarDone(void *data, Evas_Object *obj, void *event_info); + static void __onSelectCheckAll(void *data, Evas_Object *obj, void *event_info); + static void __onSelectMenu(void *data, Evas_Object *obj, void *event_info); + static void __onSelectFloatBtn(void *data, Evas_Object *obj, void *event_info); + static void __onEntryFocused(void *data, Evas_Object *obj, void *event_info); + static void __onEntryUnfocused(void *data, Evas_Object *obj, void *event_info); + static void __onEntryBackButton(void *data, Evas_Object *obj, void *event_info); + static void __onCancelButtonClicked(void *data, Evas_Object *obj, void *event_info); + + static void __genlistReoderCb(void *data, Evas_Object *obj, void *event_info); + + static void __focusInCb(void *data, Evas_Object *obj, void *event_info); + +#if 0 + static void __onSelectGalSearchMore(void *data, Evas_Object *obj, void *event_info); + static Eina_Bool __galSearchTimeoutCb(void* data); +#endif + + //bool __checkMFC(int personId); + //fast index callbacks + static void __fastIndexChanged(void *data, Evas_Object *obj, void *event_info); + static void __fastIndexSelected(void *data, Evas_Object *obj, void *event_info); + + static bool __checkValidSpecialCharForNumber(char character); + static bool __checkValidCharForNumber(char character); + + static void __onGenlistScrollStartCb(void *data, Evas_Object *obj, void *event_info); + static void __onGenlistScrollStopCb(void *data, Evas_Object *obj, void *event_info); + static void __onNaviTransitionFinishedCb(void *data, Evas_Object *obj, void *event_info); + + static Eina_Bool __loadImageTimerCb(void *user_data); + + static void __onInitMyProfileThreadRunCb(void *data); + static void __onInitMyProfileThreadEndCb(void *data); + static Eina_Bool __onInitMyProfileIdlerCb(void *data); + + static void __reorderButtonMouseDownCb(void *data, Evas *evas, Evas_Object *obj, void *event_info); + static void __reorderButtonMouseUpCb(void *data, Evas *evas, Evas_Object *obj, void *event_info); + + static Eina_Bool __createNocontentsPopupCb(void* data); + + static void __onSearchGetContactsThreadRunCb(void *data); + static void __onSearchGetContactsThreadEndCb(void *data); + + char *__getMyProfileNumber() const; + char* __getMsisdnFromSim(); + void __initMyProfile(void); + + void __initListItems(void); + Elm_Object_Item* __addSearchbarItem(void); + Elm_Object_Item* __addSelectAllItem(void); + Elm_Object_Item* __addMyProfileItem(void); + Elm_Object_Item* __addFavoriteTitleItem(Elm_Object_Item *curItem); + Elm_Object_Item* __addFavoriteItem(Elm_Object_Item *curItem, CtListDataItem* itemData); + Elm_Object_Item* __addMfcTitleItem(Elm_Object_Item *curItem); + Elm_Object_Item* __addMfcItem(Elm_Object_Item *curItem, CtListDataItem* itemData); + Elm_Object_Item* __addDefaultItem(Elm_Object_Item *curItem, CtListDataItem* itemData, bool needGroupTitle); + Elm_Object_Item* __addLinkSuggestItem(Elm_Object_Item *curItem, CtListDataItem* itemData); + Elm_Object_Item* __addLinkSuggestTitleItem(Elm_Object_Item *curItem); + Elm_Object_Item* __appendGroupItem(Elm_Object_Item *curItem, CtListDataItem* itemData); + + void __deleteRestItems(Elm_Object_Item *curItem, bool all); + + int __addLinkSuggestList(void); + int __addFavoriteList(void); + int __addMfcList(void); + int __addDefaultList(int offset); + int __addSearchList(int offset); + + Elm_Object_Item* __getStandardItem(CtListSubListType listType); + +private: + virtual ~CtListView(); + +private: + Evas_Object* __baseLayout; + Evas_Object* __fastLayout; + Evas_Object* __fastScroll; + Evas_Object* __genlist; + Evas_Object* __selectAllObj; + Evas_Object* __compose_btn; + Evas_Object* __noContentLayout; + + Elm_Object_Item* __searchbarItem; + Elm_Object_Item* __selectAllItem; + Elm_Object_Item* __linkSuggestTitleItem; + Elm_Object_Item* __favoriteTitleItem; + Elm_Object_Item* __mfcTitleItem; + Elm_Object_Item* __myProfileItem; + +#if 0 + Elm_Object_Item* __galSearchMoreItem; + Ecore_Timer *__galSearchTimer; +#endif + + CtListController* __listController; + CtListModel* __listModel; + CtListModelGroup* __listGroupModel; + CtListViewType __viewType; + CtListCtrlType __ctrlType; + + //for group title + Elm_Object_Item *__curGroupTitleItem; + Elm_Object_Item *__unmatchedGroupTitleItem; + std::string __curGroupIndex; + + bool __onSearching; + bool __onShowGroupButton; + bool __onShowGroupList; + bool __onShowMemberList; + + bool __sipStatus; + bool __launching; + bool __genlistScrolling; + int __curAppendIndex; + int __launched; + bool __loaded; + bool __selectedCheckAll; + bool __onProgressOperation; + bool __onNoContentLayout; + + int __updateQueue; + Eina_List *__fastIndexList; + std::vector<std::shared_ptr<CtListDataPerson>> __vcPersonData; + + typedef struct { + int personId; + int prevPersonId; + int nextPersonId; + } CtListFavoriteReorderData; + std::vector <CtListFavoriteReorderData> __reorderData; + + //itc member + Elm_Genlist_Item_Class* __listItc; + Elm_Genlist_Item_Class* __groupTitleItc; + Elm_Genlist_Item_Class* __myProfileItc; + Elm_Genlist_Item_Class* __selectAllItc; + Elm_Genlist_Item_Class* __searchbarItc; + Elm_Genlist_Item_Class* __favoriteTitleItc; + Elm_Genlist_Item_Class* __mfcTitleItc; + Elm_Genlist_Item_Class* __linkSuggestTitleItc; + +#if 0 + Elm_Genlist_Item_Class* __galSearchItc; + Elm_Genlist_Item_Class* __galSearchTitleItc; + Elm_Genlist_Item_Class* __galSearchMoreItc; + Elm_Genlist_Item_Class* __galSearchProgressItc; +#endif + + //view condition + bool __hasTitle; + bool __hasSearchbar; + bool __hasFastscroll; + bool __hasToolbar; + bool __hasCreateButton; + bool __hasSelectAll; + bool __hasTotalCount; + bool __hasGroupTitle; + bool __hasMenu; + bool __hasDoneCancel; + bool __hasFavGroupTitle; + bool __hasMyProfile; + bool __enableDone; + bool __hasFavoriteList; + bool __hasMfcList; + bool __hasDefaultList; + bool __hasLinkSuggest; + bool __hasGroupButton; + + CtCheckState __selectAllState; + int __selectedPersonId; + int __topItemPersonId; + +#if 0 + int __galSearchOffset; + bool __onUpdateGalSearch; +#endif + + char* __groupName; + + CtThread *__myProfileThread; + Ecore_Idler *__myProfileIdler; + + Ecore_Timer *__loadImageTimer; + CtThread *__searchGetContactThread; + + void* __detailDllHandle; + void* __cmDllHandle; + + bool __background; + bool __isFirstGroupSync; + bool __isFirstGroupMemberSync; + + int __groupUpdateTimer; + SingleResultCb __singleResultCb; + MultiResultCb __multiResultCb; + + friend class CtListBasicController; + friend class CtListUgMultiPickController; + friend class CtListUgSinglePickController; + friend class CtListUgVcardViewController; + friend class CtListLinkContactController; +}; + +#endif |