diff --git a/Import/GacUI.cpp b/Import/GacUI.cpp index 7f06bd90..7cedd53d 100644 --- a/Import/GacUI.cpp +++ b/Import/GacUI.cpp @@ -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;icolumnItemViewCallbacks.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;iIndexOf(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;icolumnItemViewCallbacks.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>::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() diff --git a/Import/GacUI.h b/Import/GacUI.h index caed0ea2..521d4c77 100644 --- a/Import/GacUI.h +++ b/Import/GacUI.h @@ -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; + }; /// List view data column container. class ListViewDataColumns : public ItemsBase { - friend class ListViewItemProvider; protected: - ListViewItemProvider* itemProvider; + IListViewItemProvider* itemProvider; void NotifyUpdateInternal(vint start, vint count, vint newCount)override; public: /// Create a container. - ListViewDataColumns(); + ListViewDataColumns(IListViewItemProvider* _itemProvider); ~ListViewDataColumns(); }; /// List view column container. class ListViewColumns : public ItemsBase> { - friend class ListViewColumn; - friend class ListViewItemProvider; protected: - ListViewItemProvider* itemProvider; + IListViewItemProvider* itemProvider; void AfterInsert(vint index, const Ptr& value)override; void BeforeRemove(vint index, const Ptr& value)override; void NotifyUpdateInternal(vint start, vint count, vint newCount)override; public: /// Create a container. - ListViewColumns(); + ListViewColumns(IListViewItemProvider* _itemProvider); ~ListViewColumns(); }; /// Item provider for and . class ListViewItemProvider : public ListProvider> + , 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& value)override; void BeforeRemove(vint index, const Ptr& value)override; + void NotifyAllItemsUpdate()override; + void NotifyAllColumnsUpdate()override; + bool ContainsPrimaryText(vint itemIndex)override; WString GetPrimaryTextViewText(vint itemIndex)override; Ptr GetSmallImage(vint itemIndex)override; @@ -16746,50 +16752,18 @@ GuiBindableListView /// A bindable List view control. class GuiBindableListView : public GuiVirtualListView, public Description { - protected: - class ItemSource; - public: - /// List view data column container. - class ListViewDataColumns : public list::ItemsBase - { - friend class ItemSource; - protected: - ItemSource* itemProvider; - - void NotifyUpdateInternal(vint start, vint count, vint newCount)override; - public: - /// Create a container. - ListViewDataColumns(); - ~ListViewDataColumns(); - }; - - /// List view column container. - class ListViewColumns : public list::ItemsBase> - { - friend class ItemSource; - protected: - ItemSource* itemProvider; - - void NotifyUpdateInternal(vint start, vint count, vint newCount)override; - public: - /// Create a container. - 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 ColumnItemViewCallbackList; protected: - ListViewDataColumns dataColumns; - ListViewColumns columns; + list::ListViewDataColumns dataColumns; + list::ListViewColumns columns; ColumnItemViewCallbackList columnItemViewCallbacks; Ptr itemChangedEventHandler; Ptr 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 /// Get all data columns indices in columns. /// All data columns indices in columns. - ListViewDataColumns& GetDataColumns(); + list::ListViewDataColumns& GetDataColumns(); /// Get all columns. /// All columns. - ListViewColumns& GetColumns(); + list::ListViewColumns& GetColumns(); /// Get the item source. /// The item source. diff --git a/Tutorial/GacUI_Controls/AddressBook/UI/Resource.xml b/Tutorial/GacUI_Controls/AddressBook/UI/Resource.xml index a987ce4f..46a91efc 100644 --- a/Tutorial/GacUI_Controls/AddressBook/UI/Resource.xml +++ b/Tutorial/GacUI_Controls/AddressBook/UI/Resource.xml @@ -271,7 +271,7 @@ - + ViewModel.SelectedCategory.Contacts ?? null BigImage diff --git a/Tutorial/GacUI_Controls/UIRes/AddressBook.bin b/Tutorial/GacUI_Controls/UIRes/AddressBook.bin index e4a91827..1cd1e108 100644 Binary files a/Tutorial/GacUI_Controls/UIRes/AddressBook.bin and b/Tutorial/GacUI_Controls/UIRes/AddressBook.bin differ