Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/v4ss3ur/pipelinegraph.wpf
PipeLineGraph.WPF: A WPF-based graphical control for visualizing and managing pipelines, inspired by Jenkins BlueOcean. This project provides a customizable grid to represent nodes and segments, with features for adding, removing, and updating node states dynamically at runtime.
https://github.com/v4ss3ur/pipelinegraph.wpf
blueocean csharp dotnet jenkins mvvm pipeline wpf xaml
Last synced: 27 days ago
JSON representation
PipeLineGraph.WPF: A WPF-based graphical control for visualizing and managing pipelines, inspired by Jenkins BlueOcean. This project provides a customizable grid to represent nodes and segments, with features for adding, removing, and updating node states dynamically at runtime.
- Host: GitHub
- URL: https://github.com/v4ss3ur/pipelinegraph.wpf
- Owner: V4SS3UR
- License: bsd-3-clause
- Created: 2024-07-18T14:25:37.000Z (4 months ago)
- Default Branch: master
- Last Pushed: 2024-08-29T12:51:50.000Z (2 months ago)
- Last Synced: 2024-10-10T14:04:58.397Z (27 days ago)
- Topics: blueocean, csharp, dotnet, jenkins, mvvm, pipeline, wpf, xaml
- Language: C#
- Homepage:
- Size: 67.4 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PipeLineGraph.WPF
**PipeLineGraph.WPF** is a WPF-based graphical control for visualizing and managing pipelines, inspired by the Jenkins BlueOcean interface. This project provides a customizable grid to represent nodes and segments, allowing for dynamic updates and visual representation of process flows.
## Features
- **Customizable Grid**: Define and customize nodes and segments within a grid layout.
- **Node Management**: Add, remove, and update nodes with visual feedback.
- **Segment Management**: Automatically manage segments between nodes.
- **State Management**: Change node states to reflect different stages of processing.
- **Fully Responsive**: The control adjusts seamlessly to different screen sizes and resolutions.
## Getting Started
### 1. Installation
Install the [PipeLineGraph.WPF NuGet package](https://www.nuget.org/packages/PipeLineGraph.WPF/) :
```
Install-Package PipeLineGraph.WPF
```### 2. Create the View
Define the view in XAML to use the `PipeLineGrid` control:
```xml
```
### 3. Implement the ViewModel
Create a view model to manage nodes and commands. Here’s a basic example:
```csharp
public class MainWindow_ViewModel : ObservableObject
{
public ObservableCollection Nodes { get; set; }
public MainWindow_ViewModel()
{
Nodes = new ObservableCollection();
}
}
```## Example Processes
### Static Flow
The static flow demonstrates a predefined process where nodes and connections are established once and do not change dynamically during execution.
```csharp
private void StaticFlow()
{
//Define all the node
Node startNode = Node.Create("Start", "Start", 0, 0, 50, Brushes.LightGray, NodeState.Empty);
Node step1Node = Node.Create("Step 1", "Step 1", 0, 1, 50, Brushes.LightGray, NodeState.Default);
Node step2Node = Node.Create("Step 2", "Step 2", 0, 2, 50, Brushes.LightGray, NodeState.Default);
Node step2BisNode = Node.Create("Step 2b", "Step 2 bis", 1, 2, 50, Brushes.LightGray, NodeState.Default);
Node step3Node = Node.Create("Step 3", "Step 3", 0, 3, 50, Brushes.LightGray, NodeState.Default);
Node endNode = Node.Create("End", "End", 0, 4, 50, Brushes.LightGray, NodeState.Empty);//Add node connections
startNode.AddNextNode(step1Node);
step1Node.AddNextNode(step2Node);
step1Node.AddNextNode(step2BisNode);
step2Node.AddNextNode(step3Node);
step2BisNode.AddNextNode(step3Node);
step3Node.AddNextNode(endNode);//Add nodes to the ObservableCollection
Nodes.Add(startNode);
Nodes.Add(step1Node);
Nodes.Add(step2Node);
Nodes.Add(step2BisNode);
Nodes.Add(step3Node);
Nodes.Add(endNode);//Process simulation => Update the node state
Task.Run(() =>
{
// Step 1 Validation
step1Node.SetState(NodeState.Running);
System.Threading.Thread.Sleep(1500);
step1Node.SetState(NodeState.Validate);// Step 2 Failure
step2Node.SetState(NodeState.Running);
System.Threading.Thread.Sleep(1500);
step2Node.SetState(NodeState.Failed);// Step 2 bis Validation
step2BisNode.SetState(NodeState.Running);
System.Threading.Thread.Sleep(1500);
step2BisNode.SetState(NodeState.Validate);// Step 3 Validation
step3Node.SetState(NodeState.Running);
System.Threading.Thread.Sleep(1500);
step3Node.SetState(NodeState.Validate);
});
}
```### Dynamic Flow
The dynamic flow demonstrates a process where nodes and connections are created and modified dynamically during execution.
```csharp
private void DynamicFlow()
{
//Create the base nodes
Node startNode = Node.Create("Start", "Start", 0, 0, 50, Brushes.LightGray, NodeState.Empty);
Node step1Node = Node.Create("Step 1", "Step 1", 0, 1, 50, Brushes.LightGray, NodeState.Default);
Node endNode = Node.Create("End", "End", 0, 2, 50, Brushes.LightGray, NodeState.Empty);//Create the base node connections
startNode.AddNextNode(step1Node);
step1Node.AddNextNode(endNode);//Add nodes to the ObservableCollection
Nodes.Add(startNode);
Nodes.Add(step1Node);
Nodes.Add(endNode);//Process simulation => Dynamicly create and update the node state
Task.Run(() =>
{
// Step 1
step1Node.SetState(NodeState.Running);
System.Threading.Thread.Sleep(1500);
step1Node.SetState(NodeState.Validate);endNode.RemovePreviousNodes();
endNode.MoveTo(0, 3);// Step 2 => Creation & connection update
Node step2Node = Node.Create("Step 2", "Step 2", 0, 2, 50, Brushes.LightGray, NodeState.Default);
step1Node.AddNextNode(step2Node);
step2Node.AddNextNode(endNode);
AddNode(step2Node);
step2Node.SetState(NodeState.Running);
System.Threading.Thread.Sleep(1500);
step2Node.SetState(NodeState.Failed);// Step 2 bis => Creation & connection update
Node step2BisNode = Node.Create("Step 2b", "Step 2 bis", 1, 2, 50, Brushes.LightGray, NodeState.Default);
step1Node.AddNextNode(step2BisNode);
step2BisNode.AddNextNode(endNode);
AddNode(step2BisNode);
step2BisNode.SetState(NodeState.Running);
System.Threading.Thread.Sleep(1500);
step2BisNode.SetState(NodeState.Validate);endNode.RemovePreviousNodes();
endNode.MoveTo(0, 4);// Step 3 => Creation & connection update
Node step3Node = Node.Create("Step 3", "Step 3", 0, 3, 50, Brushes.LightGray, NodeState.Default);
step2Node.AddNextNode(step3Node);
step2BisNode.AddNextNode(step3Node);
step3Node.AddNextNode(endNode);
AddNode(step3Node);
step3Node.SetState(NodeState.Running);
System.Threading.Thread.Sleep(1500);
step3Node.SetState(NodeState.Validate);
});
}
```
### Support complex graph and every direction
## Contributing
Contributions are welcome!