class ContactsTreeComponent(ContactsTreeComponentMeta):
    LIST_EMPTY_STATE = 'listEmptyState'

    def __init__(self):
        super(ContactsTreeComponent, self).__init__()
        self._mainDP = ContactsDataProvider()
        self.onListStateChanged = Event.Event()
        self.onGroupToggled = Event.Event()

    def getMainDP(self):
        return self._mainDP

    def onGroupSelected(self, mainGroup, groupData):
        groupName = groupData.groupName
        self._mainDP.toggleGroup(mainGroup, groupName)
        self.onGroupToggled(mainGroup, groupName, not groupData.currentOpened)

    def searchLocalContact(self, searchFilter):
        if self._mainDP.setSearchFilter(searchFilter):
            self._mainDP.refresh()
            self._setSearchInfo()
        else:
            self._updateListState()

    def showContacts(self, onlineMode = True, showVisibleOthers = None, showFriends = True, showEmptyGroups = True, showGroupMenu = True):
        self._mainDP.setOnlineMode(onlineMode)
        self._mainDP.setOthersVisible(showVisibleOthers)
        self._mainDP.setFriendsVisible(showFriends)
        self._mainDP.setShowEmptyGroups(showEmptyGroups)
        self._mainDP.setFriendsGroupMutable(showGroupMenu)
        self._mainDP.buildList()
        self._mainDP.refresh()
        self._updateListState()

    def hasDisplayingContacts(self):
        return self._mainDP.hasDisplayingContacts()

    def _populate(self):
        super(ContactsTreeComponent, self)._populate()
        self._mainDP.setFlashObject(self.as_getMainDPS())
        self._mainDP.addContactsListeners()
        self._mainDP.onTotalStatusChanged += self.__onTotalStatusChanged
        self.as_setInitDataS({'accMinChars': ACCOUNT_NAME_MIN_CHARS_LENGTH,
         'accMaxChars': ACCOUNT_NAME_MAX_CHARS_LENGTH})

    def _dispose(self):
        if self._mainDP:
            self._mainDP.destroy()
            self._mainDP.removeContactsListeners()
            self._mainDP.onTotalStatusChanged -= self.__onTotalStatusChanged
            self._mainDP = None
        super(ContactsTreeComponent, self)._dispose()
        return

    def _updateListState(self):
        isListEmpty = self._mainDP.isEmpty()
        if isListEmpty:
            self.as_updateInfoMessageS(False, makeString(MESSENGER.MESSENGER_CONTACTS_SEARCHUSERS_LISTEMPTYPROMPT_TITLE), makeString(MESSENGER.MESSENGER_CONTACTS_SEARCHUSERS_LISTEMPTYPROMPT_DESCR), False)
        elif self._mainDP.pyLength():
            self.as_updateInfoMessageS(True, '', '', False)
        else:
            self.as_updateInfoMessageS(False, makeString(MESSENGER.MESSENGER_CONTACTS_SEARCHUSERS_NOONLINECONTACTS_TITLE), makeString(MESSENGER.MESSENGER_CONTACTS_SEARCHUSERS_NOONLINECONTACTS_DESCR), False)
        self.onListStateChanged(ContactsTreeComponent.LIST_EMPTY_STATE, isListEmpty)

    def _setSearchInfo(self):
        if self._mainDP.pyLength():
            self.as_updateInfoMessageS(True, '', '', False)
        else:
            self.as_updateInfoMessageS(True, makeString(MESSENGER.MESSENGER_CONTACTS_SEARCHUSERS_SEARCHFAIL_TITLE), makeString(MESSENGER.MESSENGER_CONTACTS_SEARCHUSERS_SEARCHFAIL_DESCR), False)
        self.onListStateChanged(ContactsTreeComponent.LIST_EMPTY_STATE, False)

    def __onTotalStatusChanged(self):
        self._updateListState()
class ContactsTreeComponent(ContactsTreeComponentMeta):
    LIST_EMPTY_STATE = 'listEmptyState'

    def __init__(self):
        super(ContactsTreeComponent, self).__init__()
        self._mainDP = ContactsDataProvider()
        self.onListStateChanged = Event.Event()
        self.onGroupToggled = Event.Event()

    def getMainDP(self):
        return self._mainDP

    def onGroupSelected(self, mainGroup, groupData):
        groupName = groupData.groupName
        self._mainDP.toggleGroup(mainGroup, groupName)
        self.onGroupToggled(mainGroup, groupName, not groupData.currentOpened)

    def searchLocalContact(self, searchFilter):
        if self._mainDP.setSearchFilter(searchFilter):
            self._mainDP.refresh()
            self._setSearchInfo()
        else:
            self._updateListState()

    def showContacts(self,
                     onlineMode=True,
                     showVisibleOthers=None,
                     showFriends=True,
                     showEmptyGroups=True,
                     showGroupMenu=True):
        self._mainDP.setOnlineMode(onlineMode)
        self._mainDP.setOthersVisible(showVisibleOthers)
        self._mainDP.setFriendsVisible(showFriends)
        self._mainDP.setShowEmptyGroups(showEmptyGroups)
        self._mainDP.setFriendsGroupMutable(showGroupMenu)
        self._mainDP.buildList()
        self._mainDP.refresh()
        self._updateListState()

    def hasDisplayingContacts(self):
        return self._mainDP.hasDisplayingContacts()

    def _populate(self):
        super(ContactsTreeComponent, self)._populate()
        self._mainDP.setFlashObject(self.as_getMainDPS())
        self._mainDP.addContactsListeners()
        self._mainDP.onTotalStatusChanged += self.__onTotalStatusChanged
        self.as_setInitDataS({
            'accMinChars': ACCOUNT_NAME_MIN_CHARS_LENGTH,
            'accMaxChars': ACCOUNT_NAME_MAX_CHARS_LENGTH
        })

    def _dispose(self):
        if self._mainDP:
            self._mainDP.destroy()
            self._mainDP.removeContactsListeners()
            self._mainDP.onTotalStatusChanged -= self.__onTotalStatusChanged
            self._mainDP = None
        super(ContactsTreeComponent, self)._dispose()
        return

    def _updateListState(self):
        isListEmpty = self._mainDP.isEmpty()
        if isListEmpty:
            self.as_updateInfoMessageS(
                False,
                makeString(
                    MESSENGER.
                    MESSENGER_CONTACTS_SEARCHUSERS_LISTEMPTYPROMPT_TITLE),
                makeString(
                    MESSENGER.
                    MESSENGER_CONTACTS_SEARCHUSERS_LISTEMPTYPROMPT_DESCR),
                False)
        elif self._mainDP.pyLength():
            self.as_updateInfoMessageS(True, '', '', False)
        else:
            self.as_updateInfoMessageS(
                False,
                makeString(
                    MESSENGER.
                    MESSENGER_CONTACTS_SEARCHUSERS_NOONLINECONTACTS_TITLE),
                makeString(
                    MESSENGER.
                    MESSENGER_CONTACTS_SEARCHUSERS_NOONLINECONTACTS_DESCR),
                False)
        self.onListStateChanged(ContactsTreeComponent.LIST_EMPTY_STATE,
                                isListEmpty)

    def _setSearchInfo(self):
        if self._mainDP.pyLength():
            self.as_updateInfoMessageS(True, '', '', False)
        else:
            self.as_updateInfoMessageS(
                True,
                makeString(
                    MESSENGER.MESSENGER_CONTACTS_SEARCHUSERS_SEARCHFAIL_TITLE),
                makeString(
                    MESSENGER.MESSENGER_CONTACTS_SEARCHUSERS_SEARCHFAIL_DESCR),
                False)
        self.onListStateChanged(ContactsTreeComponent.LIST_EMPTY_STATE, False)

    def __onTotalStatusChanged(self):
        self._updateListState()
 def __init__(self):
     super(ContactsTreeComponent, self).__init__()
     self._mainDP = ContactsDataProvider()
     self.onListStateChanged = Event.Event()
     self.onGroupToggled = Event.Event()
 def __init__(self):
     super(ContactsTreeComponent, self).__init__()
     self._mainDP = ContactsDataProvider()
     self.onListStateChanged = Event.Event()
     self.onGroupToggled = Event.Event()