133 lines
3.8 KiB
C++
133 lines
3.8 KiB
C++
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// NoesisGUI - http://www.noesisengine.com
|
|
// Copyright (c) 2013 Noesis Technologies S.L. All Rights Reserved.
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#ifndef __GUI_COLLECTIONVIEW_H__
|
|
#define __GUI_COLLECTIONVIEW_H__
|
|
|
|
|
|
#include <NsCore/Noesis.h>
|
|
#include <NsCore/BaseComponent.h>
|
|
#include <NsCore/Vector.h>
|
|
#include <NsCore/Delegate.h>
|
|
#include <NsCore/ReflectionDeclare.h>
|
|
#include <NsGui/CoreApi.h>
|
|
#include <NsGui/ICollectionView.h>
|
|
#include <NsGui/INotifyCollectionChanged.h>
|
|
#include <NsGui/IComponentInitializer.h>
|
|
#include <NsGui/IUITreeNode.h>
|
|
#include <NsGui/Events.h>
|
|
|
|
|
|
namespace Noesis
|
|
{
|
|
|
|
NS_INTERFACE IList;
|
|
class CollectionViewTest;
|
|
|
|
NS_WARNING_PUSH
|
|
NS_MSVC_WARNING_DISABLE(4251 4275)
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
/// Represents a view for grouping, sorting, filtering, and navigating a data collection.
|
|
///
|
|
/// https://msdn.microsoft.com/en-us/library/system.windows.data.collectionview.aspx
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
class NS_GUI_CORE_API CollectionView: public BaseComponent, public ICollectionView,
|
|
public INotifyCollectionChanged, public IComponentInitializer, public IUITreeNode
|
|
{
|
|
public:
|
|
CollectionView(IList* collection);
|
|
~CollectionView();
|
|
|
|
/// Returns the underlying unfiltered collection
|
|
IList* GetSourceCollection() const;
|
|
|
|
/// Gets the number of records in the view
|
|
/// \prop
|
|
int Count() const;
|
|
|
|
/// Retrieves the item at the specified zero-based index in the view
|
|
Ptr<BaseComponent> GetItemAt(uint32_t index) const;
|
|
|
|
/// Returns the index at which the specified item is located; -1 if the item is unknown
|
|
int IndexOf(const BaseComponent* item) const;
|
|
|
|
/// From ICollectionView
|
|
//@{
|
|
bool CanFilter() const final;
|
|
bool CanGroup() const final;
|
|
bool CanSort() const final;
|
|
bool Contains(const BaseComponent* item) const final;
|
|
Ptr<BaseComponent> CurrentItem() const final;
|
|
int CurrentPosition() const final;
|
|
bool IsCurrentAfterLast() const final;
|
|
bool IsCurrentBeforeFirst() const final;
|
|
bool IsEmpty() const final;
|
|
bool MoveCurrentTo(BaseComponent* item) final;
|
|
bool MoveCurrentToFirst() final;
|
|
bool MoveCurrentToLast() final;
|
|
bool MoveCurrentToNext() final;
|
|
bool MoveCurrentToPosition(int position) final;
|
|
bool MoveCurrentToPrevious() final;
|
|
void Refresh() final;
|
|
EventHandler& CurrentChanged() final;
|
|
//@}
|
|
|
|
/// From INotifyCollectionChanged
|
|
//@{
|
|
NotifyCollectionChangedEventHandler& CollectionChanged() final;
|
|
//@}
|
|
|
|
/// From IComponentInitializer
|
|
//@{
|
|
bool IsInitialized() const override;
|
|
void Init() override;
|
|
void BeginInit() override;
|
|
void EndInit() override;
|
|
//@}
|
|
|
|
/// From IUITreeNode
|
|
//@{
|
|
IUITreeNode* GetNodeParent() const final;
|
|
void SetNodeParent(IUITreeNode* parent) final;
|
|
BaseComponent* FindNodeResource(const char* key, bool fullElementSearch) const final;
|
|
ObjectWithNameScope FindNodeName(const char* name) const final;
|
|
//@}
|
|
|
|
NS_IMPLEMENT_INTERFACE_FIXUP
|
|
|
|
private:
|
|
void InternalCollectionChanged(BaseComponent* sender,
|
|
const NotifyCollectionChangedEventArgs& args);
|
|
|
|
void ConnectCollection();
|
|
|
|
void SetCurrentPosition(int pos);
|
|
|
|
private:
|
|
friend class CollectionViewTest;
|
|
|
|
bool mIsInitialized;
|
|
IUITreeNode* mOwner;
|
|
|
|
bool mIsDynamic;
|
|
int mCurrentPosition;
|
|
|
|
Ptr<IList> mCollection;
|
|
|
|
EventHandler mCurrentChanged;
|
|
NotifyCollectionChangedEventHandler mCollectionChanged;
|
|
|
|
NS_DECLARE_REFLECTION(CollectionView, BaseComponent)
|
|
};
|
|
|
|
NS_WARNING_POP
|
|
|
|
}
|
|
|
|
|
|
#endif
|