2014-12-07 19:09:38 -05:00
|
|
|
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
|
2014-10-20 08:14:45 -04:00
|
|
|
|
|
|
|
|
#include "FriendsAndChatPrivatePCH.h"
|
|
|
|
|
#include "FriendViewModel.h"
|
|
|
|
|
#include "FriendsViewModel.h"
|
|
|
|
|
#include "FriendListViewModel.h"
|
2015-04-02 09:42:37 -04:00
|
|
|
#include "IFriendList.h"
|
2014-10-20 08:14:45 -04:00
|
|
|
|
2014-11-24 12:56:20 -05:00
|
|
|
#define LOCTEXT_NAMESPACE "FriendsAndChat"
|
|
|
|
|
|
2014-10-20 08:14:45 -04:00
|
|
|
class FFriendListViewModelImpl
|
|
|
|
|
: public FFriendListViewModel
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
~FFriendListViewModelImpl()
|
|
|
|
|
{
|
|
|
|
|
Uninitialize();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual const TArray< TSharedPtr< class FFriendViewModel > >& GetFriendsList() const override
|
|
|
|
|
{
|
|
|
|
|
return FriendsList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual FText GetListCountText() const override
|
|
|
|
|
{
|
|
|
|
|
return FText::AsNumber(FriendsList.Num());
|
|
|
|
|
}
|
|
|
|
|
|
2014-11-06 15:17:11 -05:00
|
|
|
virtual int32 GetListCount() const override
|
|
|
|
|
{
|
|
|
|
|
return FriendsList.Num();
|
|
|
|
|
}
|
|
|
|
|
|
2014-11-24 12:56:20 -05:00
|
|
|
virtual FText GetOnlineCountText() const override
|
|
|
|
|
{
|
|
|
|
|
FFormatNamedArguments Arguments;
|
|
|
|
|
Arguments.Add( TEXT("ListCount"), FText::AsNumber(OnlineCount));
|
|
|
|
|
const FText ListCount = FText::Format(LOCTEXT("FFriendListViewModelImpl_ListCount", "{ListCount} / "), Arguments);
|
|
|
|
|
return ListCount;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual EVisibility GetOnlineCountVisibility() const
|
|
|
|
|
{
|
|
|
|
|
return ListType == EFriendsDisplayLists::DefaultDisplay ? EVisibility::Visible : EVisibility::Collapsed;
|
|
|
|
|
}
|
|
|
|
|
|
2014-10-20 08:14:45 -04:00
|
|
|
virtual const FText GetListName() const override
|
|
|
|
|
{
|
|
|
|
|
return EFriendsDisplayLists::ToFText(ListType);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual const EFriendsDisplayLists::Type GetListType() const override
|
|
|
|
|
{
|
|
|
|
|
return ListType;
|
|
|
|
|
}
|
|
|
|
|
|
2014-11-06 15:17:11 -05:00
|
|
|
virtual EVisibility GetListVisibility() const override
|
|
|
|
|
{
|
2015-04-02 09:42:37 -04:00
|
|
|
return FriendsListContainer->IsFilterSet() || FriendsList.Num() > 0 ? EVisibility::Visible : EVisibility::Collapsed;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual void SetListFilter(const FText& CommentText) override
|
|
|
|
|
{
|
|
|
|
|
FriendsListContainer->SetListFilter(CommentText);
|
2014-11-06 15:17:11 -05:00
|
|
|
}
|
|
|
|
|
|
2014-10-20 08:14:45 -04:00
|
|
|
DECLARE_DERIVED_EVENT(FFriendListViewModelImpl , FFriendListViewModel::FFriendsListUpdated, FFriendsListUpdated);
|
|
|
|
|
virtual FFriendsListUpdated& OnFriendsListUpdated() override
|
|
|
|
|
{
|
|
|
|
|
return FriendsListUpdatedEvent;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
void Initialize()
|
|
|
|
|
{
|
2015-04-02 09:42:37 -04:00
|
|
|
FriendsListContainer->OnFriendsListUpdated().AddSP(this, &FFriendListViewModelImpl::RefreshFriendsList);
|
2014-10-20 08:14:45 -04:00
|
|
|
RefreshFriendsList();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Uninitialize()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void RefreshFriendsList()
|
|
|
|
|
{
|
|
|
|
|
FriendsList.Empty();
|
2015-04-02 09:42:37 -04:00
|
|
|
OnlineCount = FriendsListContainer->GetFriendList(FriendsList);
|
2014-10-20 08:14:45 -04:00
|
|
|
FriendsListUpdatedEvent.Broadcast();
|
|
|
|
|
}
|
|
|
|
|
|
2015-04-02 09:42:37 -04:00
|
|
|
FFriendListViewModelImpl(
|
2015-04-22 20:01:57 -04:00
|
|
|
TSharedRef<IFriendList> InFriendsListContainer,
|
|
|
|
|
EFriendsDisplayLists::Type InListType)
|
|
|
|
|
: FriendsListContainer(InFriendsListContainer)
|
|
|
|
|
, ListType(InListType)
|
2014-10-20 08:14:45 -04:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private:
|
2015-04-02 09:42:37 -04:00
|
|
|
TSharedRef<IFriendList> FriendsListContainer;
|
2014-10-20 08:14:45 -04:00
|
|
|
const EFriendsDisplayLists::Type ListType;
|
|
|
|
|
|
|
|
|
|
/** Holds the list of friends. */
|
|
|
|
|
TArray< TSharedPtr< FFriendViewModel > > FriendsList;
|
|
|
|
|
FFriendsListUpdated FriendsListUpdatedEvent;
|
2014-11-24 12:56:20 -05:00
|
|
|
int32 OnlineCount;
|
2014-10-20 08:14:45 -04:00
|
|
|
|
|
|
|
|
friend FFriendListViewModelFactory;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
TSharedRef< FFriendListViewModel > FFriendListViewModelFactory::Create(
|
2015-04-02 09:42:37 -04:00
|
|
|
TSharedRef<IFriendList> FriendsListContainer,
|
|
|
|
|
EFriendsDisplayLists::Type ListType)
|
2014-10-20 08:14:45 -04:00
|
|
|
{
|
2015-04-02 09:42:37 -04:00
|
|
|
TSharedRef< FFriendListViewModelImpl > ViewModel(new FFriendListViewModelImpl(FriendsListContainer, ListType));
|
2014-10-20 08:14:45 -04:00
|
|
|
ViewModel->Initialize();
|
|
|
|
|
return ViewModel;
|
2014-11-24 12:56:20 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#undef LOCTEXT_NAMESPACE
|