Skip to content

Commit 61eea9f

Browse files
Change default menu items to single row
1 parent 1153e9e commit 61eea9f

1 file changed

Lines changed: 61 additions & 24 deletions

File tree

Home Assistant Taskbar Menu/Views/MainWindow.xaml.cs

Lines changed: 61 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,19 @@
22
using System.Collections.Generic;
33
using System.Collections.ObjectModel;
44
using System.Diagnostics;
5-
using System.Drawing;
65
using System.IO;
76
using System.Linq;
87
using System.Threading.Tasks;
98
using System.Windows;
109
using System.Windows.Controls;
1110
using System.Windows.Input;
11+
using System.Windows.Media;
1212
using Home_Assistant_Taskbar_Menu.Connection;
1313
using Home_Assistant_Taskbar_Menu.Entities;
1414
using Home_Assistant_Taskbar_Menu.Utils;
1515
using Home_Assistant_Taskbar_Menu.Views;
16+
using MaterialDesignThemes.Wpf;
17+
using Icon = System.Drawing.Icon;
1618

1719
namespace Home_Assistant_Taskbar_Menu
1820
{
@@ -26,7 +28,7 @@ public partial class MainWindow : Window
2628
private ViewConfigurationWindow _viewConfigurationWindow;
2729

2830
private ViewConfiguration _viewConfiguration;
29-
private readonly List<Control> _defaultMenuItems;
31+
private readonly List<FrameworkElement> _defaultMenuItems;
3032
private readonly List<Entity> _stateObjects;
3133

3234
public ObservableCollection<UIElement> Menu { get; set; }
@@ -43,14 +45,28 @@ public MainWindow(Configuration configuration, ViewConfiguration viewConfigurati
4345
Task.Run(() => { InitConnection(configuration).Wait(); });
4446
}
4547

46-
private List<Control> CreateDefaultMenuItems(string configurationUrl,
48+
private List<FrameworkElement> CreateDefaultMenuItems(string configurationUrl,
4749
(string version, string url) latestVersion)
4850
{
51+
var showUpdate = !ResourceProvider.IsUpToDate(latestVersion);
4952
var url = configurationUrl.Replace("wss://", "https://")
5053
.Replace("ws://", "http://")
5154
.Replace("/api/websocket", "");
52-
var editView = new MenuItem {Header = "Edit view configuration"};
53-
editView.Click += (sender, args) =>
55+
Grid grid = new Grid() {MinWidth = 220};
56+
grid.ColumnDefinitions.Add(new ColumnDefinition {Width = GridLength.Auto});
57+
grid.ColumnDefinitions.Add(new ColumnDefinition());
58+
grid.ColumnDefinitions.Add(new ColumnDefinition {Width = GridLength.Auto});
59+
grid.ColumnDefinitions.Add(new ColumnDefinition());
60+
grid.ColumnDefinitions.Add(new ColumnDefinition {Width = GridLength.Auto});
61+
grid.ColumnDefinitions.Add(new ColumnDefinition());
62+
grid.ColumnDefinitions.Add(new ColumnDefinition {Width = GridLength.Auto});
63+
if (showUpdate)
64+
{
65+
grid.ColumnDefinitions.Add(new ColumnDefinition());
66+
grid.ColumnDefinitions.Add(new ColumnDefinition {Width = GridLength.Auto});
67+
}
68+
69+
CreateMenuIcon(grid, PackIconKind.Settings, "Edit Application Settings", () =>
5470
{
5571
_viewConfigurationWindow?.Close();
5672
_viewConfigurationWindow = new ViewConfigurationWindow(_stateObjects, _viewConfiguration);
@@ -60,34 +76,55 @@ private List<Control> CreateDefaultMenuItems(string configurationUrl,
6076
_viewConfiguration = _viewConfigurationWindow.ViewConfiguration;
6177
UpdateTree();
6278
}
63-
};
64-
var haItem = new MenuItem {Header = "Open HA in Browser"};
65-
haItem.Click += (sender, args) => { Process.Start(url); };
66-
var aboutItem = new MenuItem {Header = "About HA Taskbar Menu"};
67-
aboutItem.Click += (sender, args) =>
79+
});
80+
CreateMenuIcon(grid, PackIconKind.HomeAssistant, "Open Home Assistant in Browser",
81+
() => Process.Start(url));
82+
CreateMenuIcon(grid, PackIconKind.About, "About HA Taskbar Menu", () =>
6883
{
6984
_aboutWindow?.Close();
7085
_aboutWindow = new AboutWindow();
7186
_aboutWindow.ShowDialog();
72-
};
73-
74-
var updateItem = new MenuItem {Header = "Update HA Taskbar Menu"};
75-
updateItem.Click += (sender, args) => { Process.Start(latestVersion.url); };
76-
77-
var exitItem = new MenuItem {Header = "Exit"};
78-
exitItem.Click += (sender, args) => { Application.Current.Shutdown(); };
79-
80-
var list = new List<Control> {new Separator(), editView, haItem, aboutItem};
81-
if (!ResourceProvider.IsUpToDate(latestVersion))
87+
});
88+
if (showUpdate)
8289
{
83-
list.Add(updateItem);
84-
ShowNotification("Home Assistant Taskbar Menu", "Update is available");
90+
CreateMenuIcon(grid, PackIconKind.Update, "Update HA Taskbar Menu",
91+
() => Process.Start(latestVersion.url));
8592
}
8693

87-
list.Add(exitItem);
88-
return list;
94+
CreateMenuIcon(grid, PackIconKind.Close, "Exit", () => Application.Current.Shutdown());
95+
return new List<FrameworkElement> {new Separator(), grid};
8996
}
9097

98+
private static void CreateMenuIcon(Grid grid, PackIconKind kind, string tooltip, Action clickAction)
99+
{
100+
var paletteHelper = new PaletteHelper();
101+
var theme = paletteHelper.GetTheme();
102+
PackIcon icon = new PackIcon
103+
{
104+
Kind = kind,
105+
HorizontalAlignment = HorizontalAlignment.Center,
106+
VerticalAlignment = VerticalAlignment.Center,
107+
Width = double.NaN,
108+
Height = double.NaN,
109+
Margin = new Thickness(3),
110+
Foreground = new SolidColorBrush(theme.ToolTipBackground)
111+
};
112+
Button button = new Button()
113+
{
114+
Width = double.NaN,
115+
Height = double.NaN,
116+
Content = icon,
117+
ToolTip = tooltip,
118+
Padding = new Thickness(0),
119+
Background = Brushes.Transparent,
120+
BorderBrush = Brushes.Transparent
121+
};
122+
button.PreviewMouseDown += (sender, args) => { clickAction.Invoke(); };
123+
Grid.SetColumn(button, grid.Children.Count * 2);
124+
grid.Children.Add(button);
125+
}
126+
127+
91128
private void HandleNewEntitiesList(List<Entity> entitiesList)
92129
{
93130
UpdateMyStateObjects(entitiesList);

0 commit comments

Comments
 (0)