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
+78 -66
View File
@@ -8429,6 +8429,14 @@ NodeItemProvider
{ {
return -2; 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(); vint count = parent->GetChildCount();
for (vint i = 0; i < count; i++) for (vint i = 0; i < count; i++)
@@ -8451,24 +8459,6 @@ NodeItemProvider
return -1; 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) NodeItemProvider::NodeItemProvider(Ptr<INodeRootProvider> _root)
:root(_root) :root(_root)
{ {
@@ -8485,6 +8475,28 @@ NodeItemProvider
return root; 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() vint NodeItemProvider::Count()
{ {
return root->GetRootNode()->CalculateTotalVisibleNodes()-1; return root->GetRootNode()->CalculateTotalVisibleNodes()-1;
@@ -8492,20 +8504,20 @@ NodeItemProvider
WString NodeItemProvider::GetTextValue(vint itemIndex) WString NodeItemProvider::GetTextValue(vint itemIndex)
{ {
if (auto node = RequestNode(itemIndex)) #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()); return root->GetTextValue(node.Obj());
} #undef ERROR_MESSAGE_PREFIX
return L"";
} }
description::Value NodeItemProvider::GetBindingValue(vint itemIndex) description::Value NodeItemProvider::GetBindingValue(vint itemIndex)
{ {
if (auto node = RequestNode(itemIndex)) #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()); return root->GetBindingValue(node.Obj());
} #undef ERROR_MESSAGE_PREFIX
return Value();
} }
IDescriptable* NodeItemProvider::RequestView(const WString& identifier) IDescriptable* NodeItemProvider::RequestView(const WString& identifier)
@@ -8627,7 +8639,7 @@ MemoryNodeProvider
void MemoryNodeProvider::OnChildTotalVisibleNodesChanged(vint offset) void MemoryNodeProvider::OnChildTotalVisibleNodesChanged(vint offset)
{ {
totalVisibleNodeCount+=offset; totalVisibleNodeCount+=offset;
if(parent) if(parent && parent->GetExpanding())
{ {
parent->OnChildTotalVisibleNodesChanged(offset); parent->OnChildTotalVisibleNodesChanged(offset);
} }
@@ -15547,6 +15559,45 @@ TreeViewItem
TreeViewItemRootProvider TreeViewItemRootProvider
***********************************************************************/ ***********************************************************************/
TreeViewItemRootProvider::TreeViewItemRootProvider()
{
}
TreeViewItemRootProvider::~TreeViewItemRootProvider()
{
}
Ptr<TreeViewItem> TreeViewItemRootProvider::GetTreeViewData(INodeProvider* node)
{
MemoryNodeProvider* memoryNode=GetMemoryNode(node);
if(memoryNode)
{
return memoryNode->GetData().Cast<TreeViewItem>();
}
else
{
return 0;
}
}
void TreeViewItemRootProvider::SetTreeViewData(INodeProvider* node, Ptr<TreeViewItem> value)
{
MemoryNodeProvider* memoryNode=GetMemoryNode(node);
if(memoryNode)
{
memoryNode->SetData(value);
}
}
void TreeViewItemRootProvider::UpdateTreeViewData(INodeProvider* node)
{
MemoryNodeProvider* memoryNode=GetMemoryNode(node);
if(memoryNode)
{
memoryNode->NotifyDataModified();
}
}
Ptr<GuiImageData> TreeViewItemRootProvider::GetNodeImage(INodeProvider* node) Ptr<GuiImageData> TreeViewItemRootProvider::GetNodeImage(INodeProvider* node)
{ {
MemoryNodeProvider* memoryNode = dynamic_cast<MemoryNodeProvider*>(node); MemoryNodeProvider* memoryNode = dynamic_cast<MemoryNodeProvider*>(node);
@@ -15580,14 +15631,6 @@ TreeViewItemRootProvider
return Value::From(GetTreeViewData(node)); return Value::From(GetTreeViewData(node));
} }
TreeViewItemRootProvider::TreeViewItemRootProvider()
{
}
TreeViewItemRootProvider::~TreeViewItemRootProvider()
{
}
IDescriptable* TreeViewItemRootProvider::RequestView(const WString& identifier) IDescriptable* TreeViewItemRootProvider::RequestView(const WString& identifier)
{ {
if (identifier == ITreeViewItemView::Identifier) if (identifier == ITreeViewItemView::Identifier)
@@ -15599,37 +15642,6 @@ TreeViewItemRootProvider
return MemoryNodeRootProvider::RequestView(identifier); return MemoryNodeRootProvider::RequestView(identifier);
} }
} }
Ptr<TreeViewItem> TreeViewItemRootProvider::GetTreeViewData(INodeProvider* node)
{
MemoryNodeProvider* memoryNode=GetMemoryNode(node);
if(memoryNode)
{
return memoryNode->GetData().Cast<TreeViewItem>();
}
else
{
return 0;
}
}
void TreeViewItemRootProvider::SetTreeViewData(INodeProvider* node, Ptr<TreeViewItem> value)
{
MemoryNodeProvider* memoryNode=GetMemoryNode(node);
if(memoryNode)
{
memoryNode->SetData(value);
}
}
void TreeViewItemRootProvider::UpdateTreeViewData(INodeProvider* node)
{
MemoryNodeProvider* memoryNode=GetMemoryNode(node);
if(memoryNode)
{
memoryNode->NotifyDataModified();
}
}
} }
/*********************************************************************** /***********************************************************************
+18 -9
View File
@@ -1363,9 +1363,7 @@ NodeItemProvider
void OnItemExpanded(INodeProvider* node)override; void OnItemExpanded(INodeProvider* node)override;
void OnItemCollapsed(INodeProvider* node)override; void OnItemCollapsed(INodeProvider* node)override;
vint CalculateNodeVisibilityIndexInternal(INodeProvider* node); vint CalculateNodeVisibilityIndexInternal(INodeProvider* node);
vint CalculateNodeVisibilityIndex(INodeProvider* node)override;
Ptr<INodeProvider> RequestNode(vint index)override;
public: public:
/// <summary>Create an item provider using a node root provider.</summary> /// <summary>Create an item provider using a node root provider.</summary>
/// <param name="_root">The node root provider.</param> /// <param name="_root">The node root provider.</param>
@@ -1375,6 +1373,14 @@ NodeItemProvider
/// <summary>Get the owned node root provider.</summary> /// <summary>Get the owned node root provider.</summary>
/// <returns>The node root provider.</returns> /// <returns>The node root provider.</returns>
Ptr<INodeRootProvider> GetRoot(); Ptr<INodeRootProvider> GetRoot();
// ===================== list::INodeItemView =====================
Ptr<INodeProvider> RequestNode(vint index)override;
vint CalculateNodeVisibilityIndex(INodeProvider* node)override;
// ===================== list::IItemProvider =====================
vint Count()override; vint Count()override;
WString GetTextValue(vint itemIndex)override; WString GetTextValue(vint itemIndex)override;
description::Value GetBindingValue(vint itemIndex)override; description::Value GetBindingValue(vint itemIndex)override;
@@ -11265,18 +11271,11 @@ TreeViewItemRootProvider
, public virtual ITreeViewItemView , public virtual ITreeViewItemView
, public Description<TreeViewItemRootProvider> , public Description<TreeViewItemRootProvider>
{ {
protected:
Ptr<GuiImageData> GetNodeImage(INodeProvider* node)override;
WString GetTextValue(INodeProvider* node)override;
description::Value GetBindingValue(INodeProvider* node)override;
public: public:
/// <summary>Create a item root provider.</summary> /// <summary>Create a item root provider.</summary>
TreeViewItemRootProvider(); TreeViewItemRootProvider();
~TreeViewItemRootProvider(); ~TreeViewItemRootProvider();
IDescriptable* RequestView(const WString& identifier)override;
/// <summary>Get the <see cref="TreeViewItem"/> object from a node.</summary> /// <summary>Get the <see cref="TreeViewItem"/> object from a node.</summary>
/// <returns>The <see cref="TreeViewItem"/> object.</returns> /// <returns>The <see cref="TreeViewItem"/> object.</returns>
/// <param name="node">The node to get the tree view item.</param> /// <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> /// <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> /// <param name="node">The node.</param>
void UpdateTreeViewData(INodeProvider* node); 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.