This commit is contained in:
TheXamlGuy
2024-01-06 14:34:25 +00:00
parent 53537aa4c7
commit e1c7846e45
73 changed files with 251 additions and 198 deletions
@@ -1,3 +1,4 @@
using Hyperbar.Extensions;
using Microsoft.Extensions.DependencyInjection;
namespace Hyperbar.Widget.Contextual;
@@ -1,7 +1,7 @@
using Microsoft.UI.Xaml;
using Hyperbar.Windows.Win32;
using Microsoft.UI.Xaml.Controls.Primitives;
using Hyperbar.Windows.Win32;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Controls.Primitives;
namespace Hyperbar.Windows.Controls;
@@ -47,15 +47,19 @@ internal class DesktopFlyoutHost : Window
case DesktopFlyoutPlacement.Left:
this.Snap(WindowPlacement.Left, 0, 0);
break;
case DesktopFlyoutPlacement.Top:
this.Snap(WindowPlacement.Top, width, height);
break;
case DesktopFlyoutPlacement.Right:
this.Snap(WindowPlacement.Right, 0, 0);
break;
case DesktopFlyoutPlacement.Bottom:
this.Snap(WindowPlacement.Bottom, width, height);
break;
default:
break;
}
@@ -29,6 +29,7 @@ public class DesktopFlyoutPresenterTemplateSettings : DependencyObject
get => (double)GetValue(HeightProperty);
set => SetValue(HeightProperty, value);
}
public double NegativeHeight
{
get => (double)GetValue(NegativeHeightProperty);
@@ -2,6 +2,4 @@
public interface IPrimaryCommand
{
}
@@ -9,4 +9,3 @@ public class KeyAcceleratorCommand :
public string[]? Modifiers { get; set; }
}
@@ -1,3 +1,4 @@
using Hyperbar.Extensions;
using Microsoft.Extensions.DependencyInjection;
namespace Hyperbar.Windows.Primary;
@@ -8,4 +9,3 @@ public class PrimaryWidgetBuilder :
public void Create(IServiceCollection services) => services.AddConfiguration<PrimaryWidgetConfiguration>()
.AddWidgetTemplate<PrimaryWidgetViewModel>();
}
@@ -3,6 +3,4 @@
public class PrimaryWidgetConfiguration :
List<IPrimaryCommand>
{
}
@@ -8,12 +8,11 @@ public class PrimaryWidgetViewModel :
{
;
Add<WidgetButtonViewModel>("test 1", new Action(() => {
Add<WidgetButtonViewModel>("test 1", new Action(() =>
{
}));
Add<WidgetButtonViewModel>("test 2", new Action(() => { }));
Add<WidgetButtonViewModel>("test 4", new Action(() => { }));
Add<WidgetButtonViewModel>("test 5", new Action(() => { }));
}
}
@@ -1,8 +1,8 @@
using System;
using System.Runtime.InteropServices;
using Windows.Win32;
using Windows.Win32.Foundation;
using Windows.Win32.Graphics.Gdi;
using System.Runtime.InteropServices;
using Windows.Win32.UI.WindowsAndMessaging;
namespace Hyperbar.Windows.Win32;
@@ -72,14 +72,17 @@ public static class HwndExtensions
left = 0;
top = (info.rcWork.bottom + info.rcWork.top) / 2 - actualHeight / 2;
break;
case WindowPlacement.Top:
left = (info.rcWork.left + info.rcWork.right) / 2 - actualWidth / 2;
top = 0;
break;
case WindowPlacement.Right:
left = info.rcWork.left + info.rcWork.right - actualWidth;
top = (info.rcWork.bottom + info.rcWork.top) / 2 - actualHeight / 2;
break;
case WindowPlacement.Bottom:
left = (info.rcWork.left + info.rcWork.right) / 2 - actualWidth / 2;
top = info.rcWork.bottom + info.rcWork.top - actualHeight;
@@ -1,7 +1,6 @@
using Microsoft.UI.Windowing;
using Microsoft.UI.Xaml;
using System;
using Windows.UI.Popups;
using WinRT.Interop;
namespace Hyperbar.Windows.Win32;
+55 -3
View File
@@ -19,6 +19,7 @@ namespace Windows.Win32
return __result;
}
}
/// <inheritdoc cref = "SHAppBarMessage(uint, APPBARDATA64*)"/>
internal static unsafe nuint SHAppBarMessage(uint dwMessage, ref APPBARDATA64 pData)
{
@@ -74,6 +75,7 @@ namespace Windows.Win32
return __result;
}
}
/// <inheritdoc cref = "Shell_NotifyIcon(uint, NOTIFYICONDATAW32*)"/>
internal static unsafe bool Shell_NotifyIcon(uint dwMessage, in NOTIFYICONDATAW64 lpData)
{
@@ -134,24 +136,28 @@ namespace Windows.Win32
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-appbardata#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal uint cbSize;
/// <summary>
/// <para>Type: <b>HWND</b></para>
/// <para>The handle to the appbar window. Not all messages use this member. See the individual message page to see if you need to provide an <b>hWind</b> value.</para>
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-appbardata#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal HWND hWnd;
/// <summary>
/// <para>Type: <b>UINT</b></para>
/// <para>An application-defined message identifier. The application uses the specified identifier for notification messages that it sends to the appbar identified by the <b>hWnd</b> member. This member is used when sending the <a href="https://docs.microsoft.com/windows/desktop/shell/abm-new">ABM_NEW</a> message.</para>
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-appbardata#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal uint uCallbackMessage;
/// <summary>
/// <para>Type: <b>UINT</b> A value that specifies an edge of the screen. This member is used when sending one of these messages: </para>
/// <para>This doc was truncated.</para>
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-appbardata#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal uint uEdge;
/// <summary>
/// <para>Type: <b><a href="https://docs.microsoft.com/windows/desktop/api/windef/ns-windef-rect">RECT</a></b> A <a href="https://docs.microsoft.com/windows/desktop/api/windef/ns-windef-rect">RECT</a> structure whose use varies depending on the message:</para>
/// <para></para>
@@ -159,6 +165,7 @@ namespace Windows.Win32
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-appbardata#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal RECT rc;
/// <summary>
/// <para>Type: <b>LPARAM</b> A message-dependent value. This member is used with these messages: </para>
/// <para>This doc was truncated.</para>
@@ -179,24 +186,28 @@ namespace Windows.Win32
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-appbardata#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal uint cbSize;
/// <summary>
/// <para>Type: <b>HWND</b></para>
/// <para>The handle to the appbar window. Not all messages use this member. See the individual message page to see if you need to provide an <b>hWind</b> value.</para>
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-appbardata#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal HWND hWnd;
/// <summary>
/// <para>Type: <b>UINT</b></para>
/// <para>An application-defined message identifier. The application uses the specified identifier for notification messages that it sends to the appbar identified by the <b>hWnd</b> member. This member is used when sending the <a href="https://docs.microsoft.com/windows/desktop/shell/abm-new">ABM_NEW</a> message.</para>
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-appbardata#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal uint uCallbackMessage;
/// <summary>
/// <para>Type: <b>UINT</b> A value that specifies an edge of the screen. This member is used when sending one of these messages: </para>
/// <para>This doc was truncated.</para>
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-appbardata#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal uint uEdge;
/// <summary>
/// <para>Type: <b><a href="https://docs.microsoft.com/windows/desktop/api/windef/ns-windef-rect">RECT</a></b> A <a href="https://docs.microsoft.com/windows/desktop/api/windef/ns-windef-rect">RECT</a> structure whose use varies depending on the message:</para>
/// <para></para>
@@ -204,6 +215,7 @@ namespace Windows.Win32
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-appbardata#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal RECT rc;
/// <summary>
/// <para>Type: <b>LPARAM</b> A message-dependent value. This member is used with these messages: </para>
/// <para>This doc was truncated.</para>
@@ -211,16 +223,20 @@ namespace Windows.Win32
/// </summary>
internal LPARAM lParam;
}
internal struct __ushort_128
{
internal ushort _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, _83, _84, _85, _86, _87, _88, _89, _90, _91, _92, _93, _94, _95, _96, _97, _98, _99, _100, _101, _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, _118, _119, _120, _121, _122, _123, _124, _125, _126, _127;
/// <summary>Always <c>128</c>.</summary>
internal int Length => 128;
/// <summary>
/// Gets a ref to an individual element of the inline array.
/// ⚠ Important ⚠: When this struct is on the stack, do not let the returned reference outlive the stack frame that defines it.
/// </summary>
internal ref ushort this[int index] => ref AsSpan()[index];
/// <summary>
/// Gets this inline array as a span.
/// </summary>
@@ -249,20 +265,24 @@ namespace Windows.Win32
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal uint cbSize;
/// <summary>
/// <para>Type: <b>HWND</b></para>
/// <para>A handle to the window that receives notifications associated with an icon in the notification area.</para>
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal HWND hWnd;
/// <summary>
/// <para>Type: <b>UINT</b></para>
/// <para>The application-defined identifier of the taskbar icon. The Shell uses either (<b>hWnd</b> plus <b>uID</b>) or <b>guidItem</b> to identify which icon to operate on when <a href="https://docs.microsoft.com/windows/desktop/api/shellapi/nf-shellapi-shell_notifyicona">Shell_NotifyIcon</a> is invoked. You can have multiple icons associated with a single <b>hWnd</b> by assigning each a different <b>uID</b>. If <b>guidItem</b> is specified, <b>uID</b> is ignored.</para>
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal uint uID;
/// <summary>Type: <b>UINT</b></summary>
internal uint uFlags;
/// <summary>
/// <para>Type: <b>UINT</b></para>
/// <para>An application-defined message identifier. The system uses this identifier to send notification messages to the window identified in <b>hWnd</b>. These notification messages are sent when a mouse event or hover occurs in the bounding rectangle of the icon, when the icon is selected or activated with the keyboard, or when those actions occur in the balloon notification.</para>
@@ -273,6 +293,7 @@ namespace Windows.Win32
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal uint uCallbackMessage;
/// <summary>
/// <para>Type: <b>HICON</b></para>
/// <para>A handle to the icon to be added, modified, or deleted. Windows XP and later support icons of up to 32 BPP.</para>
@@ -280,6 +301,7 @@ namespace Windows.Win32
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal HICON hIcon;
/// <summary>
/// <para>Type: <b>TCHAR[64]</b></para>
/// <para>A null-terminated string that specifies the text for a standard tooltip. It can have a maximum of 64 characters, including the terminating null character.</para>
@@ -287,33 +309,40 @@ namespace Windows.Win32
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal __ushort_128 szTip;
/// <summary>Type: <b>DWORD</b></summary>
internal uint dwState;
/// <summary>
/// <para>Type: <b>DWORD</b></para>
/// <para><b>Windows 2000 and later</b>. A value that specifies which bits of the <b>dwState</b> member are retrieved or modified. The possible values are the same as those for <b>dwState</b>. For example, setting this member to <b>NIS_HIDDEN</b> causes only the item's hidden state to be modified while the icon sharing bit is ignored regardless of its value.</para>
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal uint dwStateMask;
/// <summary>
/// <para>Type: <b>TCHAR[256]</b></para>
/// <para><b>Windows 2000 and later</b>. A null-terminated string that specifies the text to display in a balloon notification. It can have a maximum of 256 characters, including the terminating null character, but should be restricted to 200 characters in English to accommodate localization. To remove the balloon notification from the UI, either delete the icon (with <a href="https://docs.microsoft.com/windows/desktop/api/shellapi/nf-shellapi-shell_notifyicona">NIM_DELETE</a>) or set the <b>NIF_INFO</b> flag in <b>uFlags</b> and set <b>szInfo</b> to an empty string.</para>
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal __ushort_256 szInfo;
internal _Anonymous_e__Union Anonymous;
/// <summary>
/// <para>Type: <b>TCHAR[64]</b></para>
/// <para><b>Windows 2000 and later</b>. A null-terminated string that specifies a title for a balloon notification. This title appears in a larger font immediately above the text. It can have a maximum of 64 characters, including the terminating null character, but should be restricted to 48 characters in English to accommodate localization.</para>
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal __ushort_64 szInfoTitle;
/// <summary>
/// <para>Type: <b>DWORD</b></para>
/// <para><b>Windows 2000 and later</b>. Flags that can be set to modify the behavior and appearance of a balloon notification. The icon is placed to the left of the title. If the <b>szInfoTitle</b> member is zero-length, the icon is not shown.</para>
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal uint dwInfoFlags;
/// <summary>
/// <para>Type: <b>GUID</b> <b>Windows XP and later</b>.</para>
/// <para></para>
@@ -321,6 +350,7 @@ namespace Windows.Win32
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal global::System.Guid guidItem;
/// <summary>
/// <para>Type: <b>HICON</b></para>
/// <para><b>Windows Vista and later</b>. The handle of a customized notification icon provided by the application that should be used independently of the notification area icon. If this member is non-NULL and the NIIF_USER flag is set in the <b>dwInfoFlags</b> member, this icon is used as the notification icon. If this member is <b>NULL</b>, the legacy behavior is carried out.</para>
@@ -328,17 +358,19 @@ namespace Windows.Win32
/// </summary>
internal HICON hBalloonIcon;
internal struct __ushort_256
{
internal ushort _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, _83, _84, _85, _86, _87, _88, _89, _90, _91, _92, _93, _94, _95, _96, _97, _98, _99, _100, _101, _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, _118, _119, _120, _121, _122, _123, _124, _125, _126, _127, _128, _129, _130, _131, _132, _133, _134, _135, _136, _137, _138, _139, _140, _141, _142, _143, _144, _145, _146, _147, _148, _149, _150, _151, _152, _153, _154, _155, _156, _157, _158, _159, _160, _161, _162, _163, _164, _165, _166, _167, _168, _169, _170, _171, _172, _173, _174, _175, _176, _177, _178, _179, _180, _181, _182, _183, _184, _185, _186, _187, _188, _189, _190, _191, _192, _193, _194, _195, _196, _197, _198, _199, _200, _201, _202, _203, _204, _205, _206, _207, _208, _209, _210, _211, _212, _213, _214, _215, _216, _217, _218, _219, _220, _221, _222, _223, _224, _225, _226, _227, _228, _229, _230, _231, _232, _233, _234, _235, _236, _237, _238, _239, _240, _241, _242, _243, _244, _245, _246, _247, _248, _249, _250, _251, _252, _253, _254, _255;
/// <summary>Always <c>256</c>.</summary>
internal int Length => 256;
/// <summary>
/// Gets a ref to an individual element of the inline array.
/// ⚠ Important ⚠: When this struct is on the stack, do not let the returned reference outlive the stack frame that defines it.
/// </summary>
internal ref ushort this[int index] => ref AsSpan()[index];
/// <summary>
/// Gets this inline array as a span.
/// </summary>
@@ -353,22 +385,25 @@ namespace Windows.Win32
{
[FieldOffset(0)]
internal uint uTimeout;
[FieldOffset(0)]
internal uint uVersion;
}
}
internal struct __ushort_64
{
internal ushort _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63;
/// <summary>Always <c>64</c>.</summary>
internal int Length => 64;
/// <summary>
/// Gets a ref to an individual element of the inline array.
/// ⚠ Important ⚠: When this struct is on the stack, do not let the returned reference outlive the stack frame that defines it.
/// </summary>
internal ref ushort this[int index] => ref AsSpan()[index];
/// <summary>
/// Gets this inline array as a span.
/// </summary>
@@ -378,7 +413,6 @@ namespace Windows.Win32
internal Span<ushort> AsSpan() => MemoryMarshal.CreateSpan(ref _0, 64);
}
/// <summary>Contains information that the system needs to display notifications in the notification area. Used by Shell_NotifyIcon.</summary>
/// <remarks>
/// <para>See <a href="https://msdn.microsoft.com/library/aa511497.aspx">Notifications</a> in the Windows User Experience Interaction Guidelines for more information on notification UI and content best practices.</para>
@@ -397,20 +431,24 @@ namespace Windows.Win32
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal uint cbSize;
/// <summary>
/// <para>Type: <b>HWND</b></para>
/// <para>A handle to the window that receives notifications associated with an icon in the notification area.</para>
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal HWND hWnd;
/// <summary>
/// <para>Type: <b>UINT</b></para>
/// <para>The application-defined identifier of the taskbar icon. The Shell uses either (<b>hWnd</b> plus <b>uID</b>) or <b>guidItem</b> to identify which icon to operate on when <a href="https://docs.microsoft.com/windows/desktop/api/shellapi/nf-shellapi-shell_notifyicona">Shell_NotifyIcon</a> is invoked. You can have multiple icons associated with a single <b>hWnd</b> by assigning each a different <b>uID</b>. If <b>guidItem</b> is specified, <b>uID</b> is ignored.</para>
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal uint uID;
/// <summary>Type: <b>UINT</b></summary>
internal uint uFlags;
/// <summary>
/// <para>Type: <b>UINT</b></para>
/// <para>An application-defined message identifier. The system uses this identifier to send notification messages to the window identified in <b>hWnd</b>. These notification messages are sent when a mouse event or hover occurs in the bounding rectangle of the icon, when the icon is selected or activated with the keyboard, or when those actions occur in the balloon notification.</para>
@@ -421,6 +459,7 @@ namespace Windows.Win32
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal uint uCallbackMessage;
/// <summary>
/// <para>Type: <b>HICON</b></para>
/// <para>A handle to the icon to be added, modified, or deleted. Windows XP and later support icons of up to 32 BPP.</para>
@@ -428,6 +467,7 @@ namespace Windows.Win32
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal HICON hIcon;
/// <summary>
/// <para>Type: <b>TCHAR[64]</b></para>
/// <para>A null-terminated string that specifies the text for a standard tooltip. It can have a maximum of 64 characters, including the terminating null character.</para>
@@ -435,33 +475,40 @@ namespace Windows.Win32
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal __ushort_128 szTip;
/// <summary>Type: <b>DWORD</b></summary>
internal uint dwState;
/// <summary>
/// <para>Type: <b>DWORD</b></para>
/// <para><b>Windows 2000 and later</b>. A value that specifies which bits of the <b>dwState</b> member are retrieved or modified. The possible values are the same as those for <b>dwState</b>. For example, setting this member to <b>NIS_HIDDEN</b> causes only the item's hidden state to be modified while the icon sharing bit is ignored regardless of its value.</para>
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal uint dwStateMask;
/// <summary>
/// <para>Type: <b>TCHAR[256]</b></para>
/// <para><b>Windows 2000 and later</b>. A null-terminated string that specifies the text to display in a balloon notification. It can have a maximum of 256 characters, including the terminating null character, but should be restricted to 200 characters in English to accommodate localization. To remove the balloon notification from the UI, either delete the icon (with <a href="https://docs.microsoft.com/windows/desktop/api/shellapi/nf-shellapi-shell_notifyicona">NIM_DELETE</a>) or set the <b>NIF_INFO</b> flag in <b>uFlags</b> and set <b>szInfo</b> to an empty string.</para>
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal __ushort_256 szInfo;
internal _Anonymous_e__Union Anonymous;
/// <summary>
/// <para>Type: <b>TCHAR[64]</b></para>
/// <para><b>Windows 2000 and later</b>. A null-terminated string that specifies a title for a balloon notification. This title appears in a larger font immediately above the text. It can have a maximum of 64 characters, including the terminating null character, but should be restricted to 48 characters in English to accommodate localization.</para>
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal __ushort_64 szInfoTitle;
/// <summary>
/// <para>Type: <b>DWORD</b></para>
/// <para><b>Windows 2000 and later</b>. Flags that can be set to modify the behavior and appearance of a balloon notification. The icon is placed to the left of the title. If the <b>szInfoTitle</b> member is zero-length, the icon is not shown.</para>
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal uint dwInfoFlags;
/// <summary>
/// <para>Type: <b>GUID</b> <b>Windows XP and later</b>.</para>
/// <para></para>
@@ -469,6 +516,7 @@ namespace Windows.Win32
/// <para><see href="https://docs.microsoft.com/windows/win32/api//shellapi/ns-shellapi-notifyicondataw#members">Read more on docs.microsoft.com</see>.</para>
/// </summary>
internal global::System.Guid guidItem;
/// <summary>
/// <para>Type: <b>HICON</b></para>
/// <para><b>Windows Vista and later</b>. The handle of a customized notification icon provided by the application that should be used independently of the notification area icon. If this member is non-NULL and the NIIF_USER flag is set in the <b>dwInfoFlags</b> member, this icon is used as the notification icon. If this member is <b>NULL</b>, the legacy behavior is carried out.</para>
@@ -479,13 +527,16 @@ namespace Windows.Win32
internal struct __ushort_256
{
internal ushort _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79, _80, _81, _82, _83, _84, _85, _86, _87, _88, _89, _90, _91, _92, _93, _94, _95, _96, _97, _98, _99, _100, _101, _102, _103, _104, _105, _106, _107, _108, _109, _110, _111, _112, _113, _114, _115, _116, _117, _118, _119, _120, _121, _122, _123, _124, _125, _126, _127, _128, _129, _130, _131, _132, _133, _134, _135, _136, _137, _138, _139, _140, _141, _142, _143, _144, _145, _146, _147, _148, _149, _150, _151, _152, _153, _154, _155, _156, _157, _158, _159, _160, _161, _162, _163, _164, _165, _166, _167, _168, _169, _170, _171, _172, _173, _174, _175, _176, _177, _178, _179, _180, _181, _182, _183, _184, _185, _186, _187, _188, _189, _190, _191, _192, _193, _194, _195, _196, _197, _198, _199, _200, _201, _202, _203, _204, _205, _206, _207, _208, _209, _210, _211, _212, _213, _214, _215, _216, _217, _218, _219, _220, _221, _222, _223, _224, _225, _226, _227, _228, _229, _230, _231, _232, _233, _234, _235, _236, _237, _238, _239, _240, _241, _242, _243, _244, _245, _246, _247, _248, _249, _250, _251, _252, _253, _254, _255;
/// <summary>Always <c>256</c>.</summary>
internal int Length => 256;
/// <summary>
/// Gets a ref to an individual element of the inline array.
/// ⚠ Important ⚠: When this struct is on the stack, do not let the returned reference outlive the stack frame that defines it.
/// </summary>
internal ref ushort this[int index] => ref AsSpan()[index];
/// <summary>
/// Gets this inline array as a span.
/// </summary>
@@ -500,6 +551,7 @@ namespace Windows.Win32
{
[FieldOffset(0)]
internal uint uTimeout;
[FieldOffset(0)]
internal uint uVersion;
}
+4 -3
View File
@@ -1,10 +1,11 @@
using Hyperbar.Windows.Controls;
using Hyperbar.Extensions;
using Hyperbar.Widget.Contextual;
using Hyperbar.Windows.Controls;
using Hyperbar.Windows.Primary;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.UI.Xaml;
using Hyperbar.Widget.Contextual;
using Hyperbar.Windows.Primary;
namespace Hyperbar.Windows;
@@ -1,4 +1,5 @@
using Microsoft.Extensions.DependencyInjection;
using Hyperbar.Extensions;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Hyperbar.Windows
@@ -2,7 +2,6 @@
namespace Hyperbar.Windows
{
public interface ITemplateGeneratorFactory
{
DataTemplate Create();
@@ -5,7 +5,7 @@ using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using System.Text.Json;
namespace Hyperbar;
namespace Hyperbar.Extensions;
public static class IServiceCollectionExtensions
{
@@ -24,10 +24,10 @@ public static class IServiceCollectionExtensions
where TConfiguration :
class, new()
{
services.AddOptions();
services.AddSingleton<IConfigureOptions<TConfiguration>>(new ConfigureNamedOptions<TConfiguration>("", args => { }));
_ = services.AddOptions();
_ = services.AddSingleton<IConfigureOptions<TConfiguration>>(new ConfigureNamedOptions<TConfiguration>("", args => { }));
services.AddTransient<IConfigurationWriter<TConfiguration>>(provider =>
_ = services.AddTransient<IConfigurationWriter<TConfiguration>>(provider =>
{
string? jsonFilePath = null;
if (provider.GetService<IHostEnvironment>() is IHostEnvironment hostEnvironment)
@@ -50,7 +50,7 @@ public static class IServiceCollectionExtensions
return new ConfigurationWriter<TConfiguration>(jsonFilePath, section, defaultSerializerOptions);
});
services.AddTransient<IWritableConfiguration<TConfiguration>, WritableConfiguration<TConfiguration>>();
_ = services.AddTransient<IWritableConfiguration<TConfiguration>, WritableConfiguration<TConfiguration>>();
return services;
}
@@ -63,13 +63,13 @@ public static class IServiceCollectionExtensions
string key = contentType.Name;
services.AddTransient(typeof(IWidgetViewModel), contentType);
_ = services.AddTransient(typeof(IWidgetViewModel), contentType);
services.TryAddTransient(templateType, provider => provider.GetService<IWidgetView>()!);
services.AddKeyedTransient(typeof(IWidgetViewModel), key, contentType);
services.TryAddKeyedTransient<IWidgetView>(key, (provider, key) => provider.GetService<IWidgetView>()!);
_ = services.AddKeyedTransient(typeof(IWidgetViewModel), key, contentType);
services.TryAddKeyedTransient(key, (provider, key) => provider.GetService<IWidgetView>()!);
services.AddTransient<IContentTemplateDescriptor>(provider => new ContentTemplateDescriptor
_ = services.AddTransient<IContentTemplateDescriptor>(provider => new ContentTemplateDescriptor
{
ContentType = contentType,
TemplateType = templateType,
@@ -88,13 +88,13 @@ public static class IServiceCollectionExtensions
string key = contentType.Name;
services.AddTransient(typeof(IWidgetViewModel), contentType);
_ = services.AddTransient(typeof(IWidgetViewModel), contentType);
services.TryAddTransient(templateType);
services.AddKeyedTransient(typeof(IWidgetViewModel), key, contentType);
_ = services.AddKeyedTransient(typeof(IWidgetViewModel), key, contentType);
services.TryAddKeyedTransient(templateType, key);
services.AddTransient<IContentTemplateDescriptor>(provider => new ContentTemplateDescriptor
_ = services.AddTransient<IContentTemplateDescriptor>(provider => new ContentTemplateDescriptor
{
ContentType = contentType,
TemplateType = templateType,
@@ -112,13 +112,13 @@ public static class IServiceCollectionExtensions
key ??= contentType.Name;
services.AddTransient(contentType);
_ = services.AddTransient(contentType);
services.TryAddTransient(templateType);
services.AddKeyedTransient(contentType, key);
services.AddKeyedTransient(templateType, key);
_ = services.AddKeyedTransient(contentType, key);
_ = services.AddKeyedTransient(templateType, key);
services.AddTransient<IContentTemplateDescriptor>(provider => new ContentTemplateDescriptor
_ = services.AddTransient<IContentTemplateDescriptor>(provider => new ContentTemplateDescriptor
{
ContentType = contentType,
TemplateType = templateType,
-1
View File
@@ -7,5 +7,4 @@ public interface IInitializer
public interface IDataTemplateSelector
{
}
-1
View File
@@ -3,4 +3,3 @@
public interface ICommand : ICommand<Unit>;
public interface ICommand<out TResponse> : IMessage;
+13
View File
@@ -1,5 +1,18 @@
namespace Hyperbar;
public record KeyAcceleratorCommand(string Key, string[]? Modifiers = null) :
ICommand;
public class KeyAcceleratorCommandHanler :
ICommandHandler<KeyAcceleratorCommand>
{
public ValueTask<Unit> Handle(KeyAcceleratorCommand command,
CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
}
public interface ICommandHandler<in TCommand> : ICommandHandler<TCommand, Unit>
where TCommand :
ICommand<Unit>;
-1
View File
@@ -21,4 +21,3 @@ public interface IMediator
void Subscribe(object subscriber);
}
-1
View File
@@ -1,4 +1,3 @@
namespace Hyperbar;
public interface IMessage;
-1
View File
@@ -1,4 +1,3 @@
namespace Hyperbar;
public interface INotification : IMessage;
@@ -7,4 +7,3 @@ public interface INotificationHandler<in TNotification>
ValueTask Handle(TNotification notification,
CancellationToken cancellationToken);
}
-1
View File
@@ -9,4 +9,3 @@ public interface IPipelineBehavior<TMessage, TResponse>
MessageHandlerDelegate<TMessage, TResponse> next,
CancellationToken cancellationToken = default);
}
-1
View File
@@ -13,5 +13,4 @@ public interface IRequestHandler<in TRequest> :
where TRequest :
IRequest<Unit>
{
}
-1
View File
@@ -27,4 +27,3 @@ public readonly struct Unit :
public override string ToString() => "()";
}
@@ -9,4 +9,3 @@ public record ContentTemplateDescriptor :
public required object Key { get; set; }
}
@@ -8,4 +8,3 @@ public interface IContentTemplateDescriptor
Type TemplateType { get; set; }
}
@@ -2,5 +2,4 @@
public interface IWidgetComponentViewModel
{
}
-1
View File
@@ -2,5 +2,4 @@
public interface IWidgetView
{
}
-1
View File
@@ -2,5 +2,4 @@
public interface IWidgetViewModel
{
}
@@ -44,5 +44,4 @@ public class ObservableCollectionViewModel<TItem>(IServiceFactory serviceFactory
public class ObservableCollectionViewModel(IServiceFactory serviceFactory) :
ObservableCollectionViewModel<object>(serviceFactory)
{
}