Update release

This commit is contained in:
vczh
2025-10-31 03:00:38 -07:00
parent 47be4f596b
commit ae080ab524
4 changed files with 104 additions and 83 deletions
+86 -74
View File
@@ -8429,6 +8429,14 @@ NodeItemProvider
{
return -2;
}
if (index == -1)
{
// Parent returned -1, which means parent has no parent (is a root node)
// Check if this parent is OUR root - if not, this is a foreign node
#define ERROR_MESSAGE_PREFIX L"vl::presentation::controls::tree::NodeItemProvider::CalculateNodeVisibilityIndexInternal(INodeProvider*)#"
CHECK_ERROR(parent.Obj() == root->GetRootNode().Obj(), ERROR_MESSAGE_PREFIX L"The node does not belong to the tree associated with this NodeItemProvider.");
#undef ERROR_MESSAGE_PREFIX
}
vint count = parent->GetChildCount();
for (vint i = 0; i < count; i++)
@@ -8451,24 +8459,6 @@ NodeItemProvider
return -1;
}
vint NodeItemProvider::CalculateNodeVisibilityIndex(INodeProvider* node)
{
vint result = CalculateNodeVisibilityIndexInternal(node);
return result < 0 ? -1 : result;
}
Ptr<INodeProvider> NodeItemProvider::RequestNode(vint index)
{
if(root->CanGetNodeByVisibleIndex())
{
return root->GetNodeByVisibleIndex(index+1);
}
else
{
return GetNodeByOffset(root->GetRootNode(), index+1);
}
}
NodeItemProvider::NodeItemProvider(Ptr<INodeRootProvider> _root)
:root(_root)
{
@@ -8485,6 +8475,28 @@ NodeItemProvider
return root;
}
Ptr<INodeProvider> NodeItemProvider::RequestNode(vint index)
{
if (index < 0 || index >= Count())
{
return nullptr;
}
else if (root->CanGetNodeByVisibleIndex())
{
return root->GetNodeByVisibleIndex(index + 1);
}
else
{
return GetNodeByOffset(root->GetRootNode(), index + 1);
}
}
vint NodeItemProvider::CalculateNodeVisibilityIndex(INodeProvider* node)
{
vint result = CalculateNodeVisibilityIndexInternal(node);
return result < 0 ? -1 : result;
}
vint NodeItemProvider::Count()
{
return root->GetRootNode()->CalculateTotalVisibleNodes()-1;
@@ -8492,20 +8504,20 @@ NodeItemProvider
WString NodeItemProvider::GetTextValue(vint itemIndex)
{
if (auto node = RequestNode(itemIndex))
{
return root->GetTextValue(node.Obj());
}
return L"";
#define ERROR_MESSAGE_PREFIX L"vl::presentation::controls::tree::NodeItemProvider::GetTextValue(vint)#"
CHECK_ERROR(0 <= itemIndex && itemIndex < Count(), ERROR_MESSAGE_PREFIX L"Index out of range.");
auto node = RequestNode(itemIndex);
return root->GetTextValue(node.Obj());
#undef ERROR_MESSAGE_PREFIX
}
description::Value NodeItemProvider::GetBindingValue(vint itemIndex)
{
if (auto node = RequestNode(itemIndex))
{
return root->GetBindingValue(node.Obj());
}
return Value();
#define ERROR_MESSAGE_PREFIX L"vl::presentation::controls::tree::NodeItemProvider::GetBindingValue(vint)#"
CHECK_ERROR(0 <= itemIndex && itemIndex < Count(), ERROR_MESSAGE_PREFIX L"Index out of range.");
auto node = RequestNode(itemIndex);
return root->GetBindingValue(node.Obj());
#undef ERROR_MESSAGE_PREFIX
}
IDescriptable* NodeItemProvider::RequestView(const WString& identifier)
@@ -8627,7 +8639,7 @@ MemoryNodeProvider
void MemoryNodeProvider::OnChildTotalVisibleNodesChanged(vint offset)
{
totalVisibleNodeCount+=offset;
if(parent)
if(parent && parent->GetExpanding())
{
parent->OnChildTotalVisibleNodesChanged(offset);
}
@@ -15547,39 +15559,6 @@ TreeViewItem
TreeViewItemRootProvider
***********************************************************************/
Ptr<GuiImageData> TreeViewItemRootProvider::GetNodeImage(INodeProvider* node)
{
MemoryNodeProvider* memoryNode=dynamic_cast<MemoryNodeProvider*>(node);
if(memoryNode)
{
Ptr<TreeViewItem> data=memoryNode->GetData().Cast<TreeViewItem>();
if(data)
{
return data->image;
}
}
return 0;
}
WString TreeViewItemRootProvider::GetTextValue(INodeProvider* node)
{
MemoryNodeProvider* memoryNode = dynamic_cast<MemoryNodeProvider*>(node);
if (memoryNode)
{
Ptr<TreeViewItem> data = memoryNode->GetData().Cast<TreeViewItem>();
if (data)
{
return data->text;
}
}
return L"";
}
description::Value TreeViewItemRootProvider::GetBindingValue(INodeProvider* node)
{
return Value::From(GetTreeViewData(node));
}
TreeViewItemRootProvider::TreeViewItemRootProvider()
{
}
@@ -15588,18 +15567,6 @@ TreeViewItemRootProvider
{
}
IDescriptable* TreeViewItemRootProvider::RequestView(const WString& identifier)
{
if(identifier==ITreeViewItemView::Identifier)
{
return (ITreeViewItemView*)this;
}
else
{
return MemoryNodeRootProvider::RequestView(identifier);
}
}
Ptr<TreeViewItem> TreeViewItemRootProvider::GetTreeViewData(INodeProvider* node)
{
MemoryNodeProvider* memoryNode=GetMemoryNode(node);
@@ -15630,6 +15597,51 @@ TreeViewItemRootProvider
memoryNode->NotifyDataModified();
}
}
Ptr<GuiImageData> TreeViewItemRootProvider::GetNodeImage(INodeProvider* node)
{
MemoryNodeProvider* memoryNode = dynamic_cast<MemoryNodeProvider*>(node);
if (memoryNode)
{
Ptr<TreeViewItem> data = memoryNode->GetData().Cast<TreeViewItem>();
if (data)
{
return data->image;
}
}
return 0;
}
WString TreeViewItemRootProvider::GetTextValue(INodeProvider* node)
{
MemoryNodeProvider* memoryNode = dynamic_cast<MemoryNodeProvider*>(node);
if (memoryNode)
{
Ptr<TreeViewItem> data = memoryNode->GetData().Cast<TreeViewItem>();
if (data)
{
return data->text;
}
}
return L"";
}
description::Value TreeViewItemRootProvider::GetBindingValue(INodeProvider* node)
{
return Value::From(GetTreeViewData(node));
}
IDescriptable* TreeViewItemRootProvider::RequestView(const WString& identifier)
{
if (identifier == ITreeViewItemView::Identifier)
{
return (ITreeViewItemView*)this;
}
else
{
return MemoryNodeRootProvider::RequestView(identifier);
}
}
}
/***********************************************************************
+18 -9
View File
@@ -1363,9 +1363,7 @@ NodeItemProvider
void OnItemExpanded(INodeProvider* node)override;
void OnItemCollapsed(INodeProvider* node)override;
vint CalculateNodeVisibilityIndexInternal(INodeProvider* node);
vint CalculateNodeVisibilityIndex(INodeProvider* node)override;
Ptr<INodeProvider> RequestNode(vint index)override;
public:
/// <summary>Create an item provider using a node root provider.</summary>
/// <param name="_root">The node root provider.</param>
@@ -1375,6 +1373,14 @@ NodeItemProvider
/// <summary>Get the owned node root provider.</summary>
/// <returns>The node root provider.</returns>
Ptr<INodeRootProvider> GetRoot();
// ===================== list::INodeItemView =====================
Ptr<INodeProvider> RequestNode(vint index)override;
vint CalculateNodeVisibilityIndex(INodeProvider* node)override;
// ===================== list::IItemProvider =====================
vint Count()override;
WString GetTextValue(vint itemIndex)override;
description::Value GetBindingValue(vint itemIndex)override;
@@ -11265,18 +11271,11 @@ TreeViewItemRootProvider
, public virtual ITreeViewItemView
, public Description<TreeViewItemRootProvider>
{
protected:
Ptr<GuiImageData> GetNodeImage(INodeProvider* node)override;
WString GetTextValue(INodeProvider* node)override;
description::Value GetBindingValue(INodeProvider* node)override;
public:
/// <summary>Create a item root provider.</summary>
TreeViewItemRootProvider();
~TreeViewItemRootProvider();
IDescriptable* RequestView(const WString& identifier)override;
/// <summary>Get the <see cref="TreeViewItem"/> object from a node.</summary>
/// <returns>The <see cref="TreeViewItem"/> object.</returns>
/// <param name="node">The node to get the tree view item.</param>
@@ -11288,6 +11287,16 @@ TreeViewItemRootProvider
/// <summary>Notify the tree view control that the node is changed. This is required when content in a <see cref="TreeViewItem"/> is modified, but both <see cref="SetTreeViewData"/> or [M:vl.presentation.controls.tree.MemoryNodeProvider.SetData] are not called.</summary>
/// <param name="node">The node.</param>
void UpdateTreeViewData(INodeProvider* node);
// ===================== list::ITreeViewItemView =====================
Ptr<GuiImageData> GetNodeImage(INodeProvider* node)override;
WString GetTextValue(INodeProvider* node)override;
description::Value GetBindingValue(INodeProvider* node)override;
// ===================== list::IItemProvider =====================
IDescriptable* RequestView(const WString& identifier)override;
};
}
Binary file not shown.
Binary file not shown.