diff --git a/.idea/.idea.NetworkDiagram/.idea/avalonia.xml b/.idea/.idea.NetworkDiagram/.idea/avalonia.xml
index f60d722..3f94c51 100644
--- a/.idea/.idea.NetworkDiagram/.idea/avalonia.xml
+++ b/.idea/.idea.NetworkDiagram/.idea/avalonia.xml
@@ -3,7 +3,10 @@
diff --git a/NetworkDiagram/Assets/assets.zip b/NetworkDiagram/Assets/assets.zip
deleted file mode 100644
index 6e6ab1f..0000000
Binary files a/NetworkDiagram/Assets/assets.zip and /dev/null differ
diff --git a/NetworkDiagram/EditDeviceWindow.axaml b/NetworkDiagram/EditDeviceWindow.axaml
index 8aed92d..6f93836 100644
--- a/NetworkDiagram/EditDeviceWindow.axaml
+++ b/NetworkDiagram/EditDeviceWindow.axaml
@@ -5,16 +5,20 @@
WindowStartupLocation="CenterOwner" CanResize="False"
Background="{DynamicResource BgWhite}"
Icon="/Assets/router.jpg">
-
+
-
+
-
-
+
+
-
+
+
+
+
diff --git a/NetworkDiagram/EditDeviceWindow.axaml.cs b/NetworkDiagram/EditDeviceWindow.axaml.cs
index 2b052a4..2f1c9e0 100644
--- a/NetworkDiagram/EditDeviceWindow.axaml.cs
+++ b/NetworkDiagram/EditDeviceWindow.axaml.cs
@@ -19,12 +19,14 @@ namespace NetworkDiagram
InitializeComponent();
_device = device;
NameBox.Text = device.Name;
+ DescBox.Text = device.Description;
IpBox.Text = string.Join(Environment.NewLine, device.IpAddresses);
}
private void Save_Click(object? sender, RoutedEventArgs e)
{
_device.Name = NameBox.Text ?? string.Empty;
+ _device.Description = DescBox.Text ?? string.Empty;
_device.IpAddresses = (IpBox.Text ?? string.Empty)
.Split(new[] { Environment.NewLine, "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries)
.ToList();
diff --git a/NetworkDiagram/Localization/Strings.cs.axaml b/NetworkDiagram/Localization/Strings.cs.axaml
index 1c85d80..30f7256 100644
--- a/NetworkDiagram/Localization/Strings.cs.axaml
+++ b/NetworkDiagram/Localization/Strings.cs.axaml
@@ -11,9 +11,10 @@
Zařízení
- Upravit zařízení
+ Upravit Zařízení
Název zařízení:
- IP adresy (jedna na řádek):
+ Popis:
+ IP Adresy (jedna na řádek):
Zrušit
Uložit
diff --git a/NetworkDiagram/Localization/Strings.en.axaml b/NetworkDiagram/Localization/Strings.en.axaml
index 69b9b4c..891c963 100644
--- a/NetworkDiagram/Localization/Strings.en.axaml
+++ b/NetworkDiagram/Localization/Strings.en.axaml
@@ -13,6 +13,7 @@
Edit Device
Device Name:
+ Description:
IP Addresses (one per line):
Cancel
Save
diff --git a/NetworkDiagram/MainWindow.axaml.cs b/NetworkDiagram/MainWindow.axaml.cs
index dc76851..7366e9e 100644
--- a/NetworkDiagram/MainWindow.axaml.cs
+++ b/NetworkDiagram/MainWindow.axaml.cs
@@ -342,6 +342,11 @@ namespace NetworkDiagram
nameText.Bind(TextBlock.TextProperty, new Avalonia.Data.Binding("Name"));
stack.Children.Add(nameText);
+ var descText = new TextBlock { FontSize = 11, FontStyle = FontStyle.Italic, HorizontalAlignment = Avalonia.Layout.HorizontalAlignment.Center, TextWrapping = TextWrapping.Wrap, TextAlignment = TextAlignment.Center, Opacity = 0.8 };
+ descText.Bind(TextBlock.TextProperty, new Avalonia.Data.Binding("Description"));
+ descText.Bind(TextBlock.IsVisibleProperty, new Avalonia.Data.Binding("Description") { Converter = Avalonia.Data.Converters.StringConverters.IsNotNullOrEmpty });
+ stack.Children.Add(descText);
+
var ips = new ItemsControl();
ips.Bind(ItemsControl.ItemsSourceProperty, new Avalonia.Data.Binding("IpAddresses"));
@@ -796,31 +801,60 @@ namespace NetworkDiagram
Background = Brushes.White,
BorderBrush = (IBrush)Application.Current!.FindResource("GridBlue")!,
BorderThickness = new Thickness(1),
- Width = original.Bounds.Width > 0 ? original.Bounds.Width : 120,
- Height = original.Bounds.Height > 0 ? original.Bounds.Height : 100,
- DataContext = device
+ MinWidth = 100,
+ MinHeight = 80,
+ MaxWidth = 180
};
var stack = new StackPanel { Spacing = 4 };
+
var img = new Image { Width = 64, Height = 64 };
- img.Bind(Image.SourceProperty, new Avalonia.Data.Binding("IconPath") { Converter = ImageConverter.Instance });
+ if (ImageConverter.Instance.Convert(device.IconPath, typeof(IImage), null, System.Globalization.CultureInfo.CurrentCulture) is IImage iimg)
+ {
+ img.Source = iimg;
+ }
+ var primaryBlue = Application.Current!.FindResource("PrimaryBlue");
var txt = new TextBlock {
Text = device.Name,
FontWeight = FontWeight.Bold,
+ FontSize = 12,
HorizontalAlignment = Avalonia.Layout.HorizontalAlignment.Center,
- Foreground = (IBrush)Application.Current!.FindResource("PrimaryBlue")!
+ TextWrapping = TextWrapping.Wrap,
+ TextAlignment = TextAlignment.Center
};
+ if (primaryBlue is IBrush brush) txt.Foreground = brush;
stack.Children.Add(img);
stack.Children.Add(txt);
- var ips = new ItemsControl { ItemsSource = device.IpAddresses };
- ips.ItemTemplate = new FuncDataTemplate((val, _) => new TextBlock {
- Text = val, FontSize = 10, HorizontalAlignment = Avalonia.Layout.HorizontalAlignment.Center,
- Foreground = (IBrush)Application.Current!.FindResource("AccentBlue")!
- });
- stack.Children.Add(ips);
+ if (!string.IsNullOrWhiteSpace(device.Description))
+ {
+ var desc = new TextBlock {
+ Text = device.Description,
+ FontSize = 11,
+ FontStyle = FontStyle.Italic,
+ HorizontalAlignment = Avalonia.Layout.HorizontalAlignment.Center,
+ TextWrapping = TextWrapping.Wrap,
+ TextAlignment = TextAlignment.Center,
+ Opacity = 0.8,
+ Foreground = Brushes.Black
+ };
+ stack.Children.Add(desc);
+ }
+
+ var accentBlue = Application.Current!.FindResource("AccentBlue");
+ foreach (var ip in device.IpAddresses)
+ {
+ var tb = new TextBlock {
+ Text = ip,
+ FontSize = 10,
+ HorizontalAlignment = Avalonia.Layout.HorizontalAlignment.Center,
+ TextWrapping = TextWrapping.Wrap
+ };
+ if (accentBlue is IBrush b) tb.Foreground = b;
+ stack.Children.Add(tb);
+ }
clone.Child = stack;
Canvas.SetLeft(clone, device.X - minX);
diff --git a/NetworkDiagram/Models/DiagramModels.cs b/NetworkDiagram/Models/DiagramModels.cs
index 636a9ba..40f1382 100644
--- a/NetworkDiagram/Models/DiagramModels.cs
+++ b/NetworkDiagram/Models/DiagramModels.cs
@@ -38,6 +38,19 @@ namespace NetworkDiagram.Models
}
}
+ private string _description = string.Empty;
+
+ [JsonPropertyName("Description")]
+ public string Description
+ {
+ get => _description;
+ set
+ {
+ _description = value;
+ OnPropertyChanged();
+ }
+ }
+
[JsonPropertyName("TemplateName")]
public string TemplateName { get; set; } = string.Empty;