This commit is contained in:
vczh
2016-07-31 02:25:39 -07:00
parent c0d76c9216
commit 3172b55c61
4 changed files with 77 additions and 111 deletions
+50 -63
View File
@@ -4771,54 +4771,14 @@ GuiBindableTextList
return itemSource->Get(index);
}
/***********************************************************************
GuiBindableListView::ListViewDataColumns
***********************************************************************/
void GuiBindableListView::ListViewDataColumns::NotifyUpdateInternal(vint start, vint count, vint newCount)
{
itemProvider->NotifyUpdate(0, itemProvider->Count());
}
GuiBindableListView::ListViewDataColumns::ListViewDataColumns()
:itemProvider(0)
{
}
GuiBindableListView::ListViewDataColumns::~ListViewDataColumns()
{
}
/***********************************************************************
GuiBindableListView::ListViewColumns
***********************************************************************/
void GuiBindableListView::ListViewColumns::NotifyUpdateInternal(vint start, vint count, vint newCount)
{
for(vint i=0;i<itemProvider->columnItemViewCallbacks.Count();i++)
{
itemProvider->columnItemViewCallbacks[i]->OnColumnChanged();
}
itemProvider->NotifyUpdate(0, itemProvider->Count());
}
GuiBindableListView::ListViewColumns::ListViewColumns()
:itemProvider(0)
{
}
GuiBindableListView::ListViewColumns::~ListViewColumns()
{
}
/***********************************************************************
GuiBindableListView::ItemSource
***********************************************************************/
GuiBindableListView::ItemSource::ItemSource()
:columns(this)
, dataColumns(this)
{
columns.itemProvider = this;
dataColumns.itemProvider = this;
}
GuiBindableListView::ItemSource::~ItemSource()
@@ -4895,15 +4855,30 @@ GuiBindableListView::ItemSource
}
}
GuiBindableListView::ListViewDataColumns& GuiBindableListView::ItemSource::GetDataColumns()
list::ListViewDataColumns& GuiBindableListView::ItemSource::GetDataColumns()
{
return dataColumns;
}
GuiBindableListView::ListViewColumns& GuiBindableListView::ItemSource::GetColumns()
list::ListViewColumns& GuiBindableListView::ItemSource::GetColumns()
{
return columns;
}
// ===================== list::IListViewItemProvider =====================
void GuiBindableListView::ItemSource::NotifyAllItemsUpdate()
{
NotifyUpdate(0, Count());
}
void GuiBindableListView::ItemSource::NotifyAllColumnsUpdate()
{
for (vint i = 0; i < columnItemViewCallbacks.Count(); i++)
{
columnItemViewCallbacks[i]->OnColumnChanged();
}
}
// ===================== GuiListControl::IItemProvider =====================
@@ -5136,12 +5111,12 @@ GuiBindableListView
{
}
GuiBindableListView::ListViewDataColumns& GuiBindableListView::GetDataColumns()
list::ListViewDataColumns& GuiBindableListView::GetDataColumns()
{
return itemSource->GetDataColumns();
}
GuiBindableListView::ListViewColumns& GuiBindableListView::GetColumns()
list::ListViewColumns& GuiBindableListView::GetColumns()
{
return itemSource->GetColumns();
}
@@ -11161,6 +11136,7 @@ ListViewTileContentProvider
GuiTableComposition* table=new GuiTableComposition;
contentComposition->AddChild(table);
table->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren);
table->SetRowsAndColumns(3, 2);
table->SetRowOption(0, GuiCellOption::PercentageOption(0.5));
table->SetRowOption(1, GuiCellOption::MinSizeOption());
@@ -11190,6 +11166,7 @@ ListViewTileContentProvider
cell->SetPreferredMinSize(Size(224, 0));
textTable=new GuiTableComposition;
textTable->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren);
textTable->SetCellPadding(1);
ResetTextTable(1);
textTable->SetAlignmentToParent(Margin(0, 0, 0, 0));
@@ -11300,6 +11277,7 @@ ListViewInformationContentProvider
GuiTableComposition* table=new GuiTableComposition;
contentComposition->AddChild(table);
table->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren);
table->SetRowsAndColumns(3, 3);
table->SetRowOption(0, GuiCellOption::PercentageOption(0.5));
table->SetRowOption(1, GuiCellOption::MinSizeOption());
@@ -11343,6 +11321,7 @@ ListViewInformationContentProvider
cell->SetPreferredMinSize(Size(224, 0));
textTable=new GuiTableComposition;
textTable->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren);
textTable->SetCellPadding(4);
textTable->SetAlignmentToParent(Margin(0, 0, 0, 0));
cell->AddChild(textTable);
@@ -11387,7 +11366,8 @@ ListViewInformationContentProvider
vint dataColumnCount=view->GetDataColumnCount();
dataTexts.Resize(dataColumnCount);
textTable->SetRowsAndColumns(dataColumnCount, 1);
textTable->SetRowsAndColumns(dataColumnCount+1, 1);
textTable->SetRowOption(dataColumnCount, GuiCellOption::PercentageOption(1.0));
textTable->SetColumnOption(0, GuiCellOption::PercentageOption(1.0));
for(vint i=0;i<dataColumnCount;i++)
{
@@ -12008,7 +11988,7 @@ ListViewColumn
if (owner)
{
vint index = owner->IndexOf(this);
owner->NotifyUpdateInternal(index, 1, 1);
owner->NotifyUpdate(index, 1);
}
}
@@ -12082,11 +12062,11 @@ ListViewDataColumns
void ListViewDataColumns::NotifyUpdateInternal(vint start, vint count, vint newCount)
{
itemProvider->NotifyUpdate(0, itemProvider->Count());
itemProvider->NotifyAllItemsUpdate();
}
ListViewDataColumns::ListViewDataColumns()
:itemProvider(0)
ListViewDataColumns::ListViewDataColumns(IListViewItemProvider* _itemProvider)
:itemProvider(_itemProvider)
{
}
@@ -12112,18 +12092,12 @@ ListViewColumns
void ListViewColumns::NotifyUpdateInternal(vint start, vint count, vint newCount)
{
for(vint i=0;i<itemProvider->columnItemViewCallbacks.Count();i++)
{
itemProvider->columnItemViewCallbacks[i]->OnColumnChanged();
}
if (count != newCount)
{
itemProvider->NotifyUpdate(0, itemProvider->Count());
}
itemProvider->NotifyAllColumnsUpdate();
itemProvider->NotifyAllItemsUpdate();
}
ListViewColumns::ListViewColumns()
:itemProvider(0)
ListViewColumns::ListViewColumns(IListViewItemProvider* _itemProvider)
:itemProvider(_itemProvider)
{
}
@@ -12147,6 +12121,19 @@ ListViewItemProvider
ListProvider<Ptr<ListViewItem>>::AfterInsert(index, value);
}
void ListViewItemProvider::NotifyAllItemsUpdate()
{
NotifyUpdate(0, Count());
}
void ListViewItemProvider::NotifyAllColumnsUpdate()
{
for (vint i = 0; i < columnItemViewCallbacks.Count(); i++)
{
columnItemViewCallbacks[i]->OnColumnChanged();
}
}
bool ListViewItemProvider::ContainsPrimaryText(vint itemIndex)
{
return true;
@@ -12289,9 +12276,9 @@ ListViewItemProvider
}
ListViewItemProvider::ListViewItemProvider()
:columns(this)
, dataColumns(this)
{
columns.itemProvider=this;
dataColumns.itemProvider=this;
}
ListViewItemProvider::~ListViewItemProvider()
+26 -47
View File
@@ -12394,42 +12394,45 @@ ListView
void SetSortingState(GuiListViewColumnHeader::ColumnSortingState value);
};
class ListViewItemProvider;
class IListViewItemProvider : public virtual Interface
{
public:
virtual void NotifyAllItemsUpdate() = 0;
virtual void NotifyAllColumnsUpdate() = 0;
};
/// <summary>List view data column container.</summary>
class ListViewDataColumns : public ItemsBase<vint>
{
friend class ListViewItemProvider;
protected:
ListViewItemProvider* itemProvider;
IListViewItemProvider* itemProvider;
void NotifyUpdateInternal(vint start, vint count, vint newCount)override;
public:
/// <summary>Create a container.</summary>
ListViewDataColumns();
ListViewDataColumns(IListViewItemProvider* _itemProvider);
~ListViewDataColumns();
};
/// <summary>List view column container.</summary>
class ListViewColumns : public ItemsBase<Ptr<ListViewColumn>>
{
friend class ListViewColumn;
friend class ListViewItemProvider;
protected:
ListViewItemProvider* itemProvider;
IListViewItemProvider* itemProvider;
void AfterInsert(vint index, const Ptr<ListViewColumn>& value)override;
void BeforeRemove(vint index, const Ptr<ListViewColumn>& value)override;
void NotifyUpdateInternal(vint start, vint count, vint newCount)override;
public:
/// <summary>Create a container.</summary>
ListViewColumns();
ListViewColumns(IListViewItemProvider* _itemProvider);
~ListViewColumns();
};
/// <summary>Item provider for <see cref="GuiListViewBase"/> and <see cref="ListViewItemStyleProvider"/>.</summary>
class ListViewItemProvider
: public ListProvider<Ptr<ListViewItem>>
, protected virtual IListViewItemProvider
, protected virtual ListViewItemStyleProvider::IListViewItemView
, protected virtual ListViewColumnItemArranger::IColumnItemView
, protected GuiListControl::IItemBindingView
@@ -12447,6 +12450,9 @@ ListView
void AfterInsert(vint index, const Ptr<ListViewItem>& value)override;
void BeforeRemove(vint index, const Ptr<ListViewItem>& value)override;
void NotifyAllItemsUpdate()override;
void NotifyAllColumnsUpdate()override;
bool ContainsPrimaryText(vint itemIndex)override;
WString GetPrimaryTextViewText(vint itemIndex)override;
Ptr<GuiImageData> GetSmallImage(vint itemIndex)override;
@@ -16746,50 +16752,18 @@ GuiBindableListView
/// <summary>A bindable List view control.</summary>
class GuiBindableListView : public GuiVirtualListView, public Description<GuiBindableListView>
{
protected:
class ItemSource;
public:
/// <summary>List view data column container.</summary>
class ListViewDataColumns : public list::ItemsBase<vint>
{
friend class ItemSource;
protected:
ItemSource* itemProvider;
void NotifyUpdateInternal(vint start, vint count, vint newCount)override;
public:
/// <summary>Create a container.</summary>
ListViewDataColumns();
~ListViewDataColumns();
};
/// <summary>List view column container.</summary>
class ListViewColumns : public list::ItemsBase<Ptr<list::ListViewColumn>>
{
friend class ItemSource;
protected:
ItemSource* itemProvider;
void NotifyUpdateInternal(vint start, vint count, vint newCount)override;
public:
/// <summary>Create a container.</summary>
ListViewColumns();
~ListViewColumns();
};
protected:
class ItemSource
: public list::ItemProviderBase
, protected virtual list::IListViewItemProvider
, protected GuiListControl::IItemBindingView
, protected virtual list::ListViewItemStyleProvider::IListViewItemView
, protected virtual list::ListViewColumnItemArranger::IColumnItemView
{
friend class ListViewDataColumns;
friend class ListViewColumns;
typedef collections::List<list::ListViewColumnItemArranger::IColumnItemViewCallback*> ColumnItemViewCallbackList;
protected:
ListViewDataColumns dataColumns;
ListViewColumns columns;
list::ListViewDataColumns dataColumns;
list::ListViewColumns columns;
ColumnItemViewCallbackList columnItemViewCallbacks;
Ptr<EventHandler> itemChangedEventHandler;
Ptr<description::IValueReadonlyList> itemSource;
@@ -16808,8 +16782,13 @@ GuiBindableListView
description::Value Get(vint index);
void UpdateBindingProperties();
bool NotifyUpdate(vint start, vint count);
ListViewDataColumns& GetDataColumns();
ListViewColumns& GetColumns();
list::ListViewDataColumns& GetDataColumns();
list::ListViewColumns& GetColumns();
// ===================== list::IListViewItemProvider =====================
void NotifyAllItemsUpdate()override;
void NotifyAllColumnsUpdate()override;
// ===================== GuiListControl::IItemProvider =====================
@@ -16859,10 +16838,10 @@ GuiBindableListView
/// <summary>Get all data columns indices in columns.</summary>
/// <returns>All data columns indices in columns.</returns>
ListViewDataColumns& GetDataColumns();
list::ListViewDataColumns& GetDataColumns();
/// <summary>Get all columns.</summary>
/// <returns>All columns.</returns>
ListViewColumns& GetColumns();
list::ListViewColumns& GetColumns();
/// <summary>Get the item source.</summary>
/// <returns>The item source.</returns>
@@ -271,7 +271,7 @@
</Cell>
<Cell Site="row:1 column:0">
<BindableListView ref.Name="listViewContacts" HorizontalAlwaysVisible="false" VerticalAlwaysVisible="false">
<BindableListView ref.Name="listViewContacts" View="Detail" IconSize="x:16 y:16" HorizontalAlwaysVisible="false" VerticalAlwaysVisible="false">
<att.BoundsComposition-set AlignmentToParent="left:0 top:0 right:0 bottom:0"/>
<att.ItemSource-bind>ViewModel.SelectedCategory.Contacts ?? null</att.ItemSource-bind>
<att.LargeImageProperty>BigImage</att.LargeImageProperty>
Binary file not shown.