Skip to content
This repository has been archived by the owner on Sep 4, 2024. It is now read-only.

Add an optional MessageDialog.RootWindow override #940

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 88 additions & 25 deletions Xwt/Xwt/MessageDialog.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//
//
// MessageDialog.cs
//
// Author:
Expand Down Expand Up @@ -32,8 +32,20 @@ namespace Xwt
{
public static class MessageDialog
{
public static WindowFrame RootWindow { get; set; }

private static WindowFrame rootWindow;

public static WindowFrame RootWindow
{
get {
if (Toolkit.CurrentEngine.Defaults.MessageDialog.DefaultRootWindowOverride != null)
return Toolkit.CurrentEngine.Defaults.MessageDialog.DefaultRootWindowOverride() ?? rootWindow;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The API here is weird. Why do we want this as a Func<WindowFrame>?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The problem is that if you show some dialog and a message using the message service, you need either to call an override with a custom parent window or set the RootWindow accordingly (and then back). It becomes even worse if you have different main windows (like VS for Mac has a main Shell and a GetToCode dialog). This also becomes a real problem if you consume some external API which is using Xwt and doesn't know your code. It won't know about your windows structure and always use RootWindow (like the Android SDK Manager in VS for Mac).

return rootWindow;
}
set {
rootWindow = value;
}
}

#region ShowError
public static void ShowError (string primaryText)
{
Expand Down Expand Up @@ -86,14 +98,14 @@ public static void ShowMessage (string primaryText, string secondaryText)
{
ShowMessage (RootWindow, primaryText, secondaryText);
}
public static void ShowMessage (string primaryText, string secondaryText, Drawing.Image icon)
{
ShowMessage (RootWindow, primaryText, secondaryText, icon);
}
public static void ShowMessage (WindowFrame parent, string primaryText, string secondaryText)
{
GenericAlert (parent, Toolkit.CurrentEngine.Defaults.MessageDialog.InformationIcon, primaryText, secondaryText, Command.Ok);
}
public static void ShowMessage (string primaryText, string secondaryText, Drawing.Image icon)
{
ShowMessage (RootWindow, primaryText, secondaryText, icon);
}
public static void ShowMessage (WindowFrame parent, string primaryText, string secondaryText, Drawing.Image icon)
{
GenericAlert (parent, icon, primaryText, secondaryText, Command.Ok);
Expand All @@ -103,22 +115,27 @@ public static void ShowMessage (WindowFrame parent, string primaryText, string s
#region Confirm
public static bool Confirm (string primaryText, Command button)
{
return Confirm (primaryText, null, button);
return Confirm (RootWindow, primaryText, button);
}


public static bool Confirm (WindowFrame window, string primaryText, Command button)
{
return Confirm (window, primaryText, null, button);
}

public static bool Confirm (string primaryText, string secondaryText, Command button)
{
return Confirm (RootWindow, primaryText, secondaryText, button);
}

public static bool Confirm (string primaryText, string secondaryText, Drawing.Image icon, Command button)
public static bool Confirm (WindowFrame window, string primaryText, string secondaryText, Command button)
{
return Confirm (RootWindow, primaryText, secondaryText, icon, button);
return Confirm (window, primaryText, secondaryText, Toolkit.CurrentEngine.Defaults.MessageDialog.QuestionIcon, button);
}

public static bool Confirm (WindowFrame window, string primaryText, string secondaryText, Command button)
public static bool Confirm (string primaryText, string secondaryText, Drawing.Image icon, Command button)
{
return GenericAlert (window, Toolkit.CurrentEngine.Defaults.MessageDialog.QuestionIcon, primaryText, secondaryText, Command.Cancel, button) == button;
return Confirm (RootWindow, primaryText, secondaryText, icon, button);
}

public static bool Confirm (WindowFrame window, string primaryText, string secondaryText, Drawing.Image icon, Command button)
Expand All @@ -128,19 +145,34 @@ public static bool Confirm (WindowFrame window, string primaryText, string secon

public static bool Confirm (string primaryText, Command button, bool confirmIsDefault)
{
return Confirm (primaryText, null, button, confirmIsDefault);
return Confirm (RootWindow, primaryText, button, confirmIsDefault);
}


public static bool Confirm (WindowFrame window, string primaryText, Command button, bool confirmIsDefault)
{
return Confirm (window, primaryText, null, button, confirmIsDefault);
}

public static bool Confirm (string primaryText, string secondaryText, Command button, bool confirmIsDefault)
{
return GenericAlert (RootWindow, Toolkit.CurrentEngine.Defaults.MessageDialog.QuestionIcon, primaryText, secondaryText, confirmIsDefault ? 0 : 1, Command.Cancel, button) == button;
return Confirm (RootWindow, primaryText, secondaryText, button, confirmIsDefault);
}

public static bool Confirm (WindowFrame window, string primaryText, string secondaryText, Command button, bool confirmIsDefault)
{
return Confirm (window, primaryText, secondaryText, Toolkit.CurrentEngine.Defaults.MessageDialog.QuestionIcon, button, confirmIsDefault);
}

public static bool Confirm (string primaryText, string secondaryText, Drawing.Image icon, Command button, bool confirmIsDefault)
{
return GenericAlert (RootWindow, icon, primaryText, secondaryText, confirmIsDefault ? 0 : 1, Command.Cancel, button) == button;
return Confirm (RootWindow, primaryText, secondaryText, icon, button, confirmIsDefault);
}


public static bool Confirm (WindowFrame window, string primaryText, string secondaryText, Drawing.Image icon, Command button, bool confirmIsDefault)
{
return GenericAlert (window, icon, primaryText, secondaryText, confirmIsDefault ? 0 : 1, Command.Cancel, button) == button;
}

public static bool Confirm (ConfirmationMessage message)
{
return Confirm (RootWindow, message);
Expand All @@ -160,29 +192,54 @@ public static Command AskQuestion (string primaryText, params Command[] buttons)

public static Command AskQuestion (string primaryText, string secondaryText, params Command[] buttons)
{
return GenericAlert (RootWindow, Toolkit.CurrentEngine.Defaults.MessageDialog.QuestionIcon, primaryText, secondaryText, buttons);
return AskQuestion (RootWindow, primaryText, secondaryText, buttons);
}

public static Command AskQuestion (WindowFrame window, string primaryText, string secondaryText, params Command[] buttons)
{
return AskQuestion (window, primaryText, secondaryText, Toolkit.CurrentEngine.Defaults.MessageDialog.QuestionIcon, buttons);
}

public static Command AskQuestion (string primaryText, string secondaryText, Drawing.Image icon, params Command [] buttons)
{
return GenericAlert (RootWindow, icon, primaryText, secondaryText, buttons);
return AskQuestion (RootWindow, primaryText, secondaryText, icon, buttons);
}

public static Command AskQuestion (WindowFrame window, string primaryText, string secondaryText, Drawing.Image icon, params Command[] buttons)
{
return GenericAlert (window, icon, primaryText, secondaryText, buttons);
}

public static Command AskQuestion (string primaryText, int defaultButton, params Command[] buttons)
{
return AskQuestion (primaryText, null, defaultButton, buttons);
return AskQuestion (RootWindow, primaryText, defaultButton, buttons);
}


public static Command AskQuestion (WindowFrame window, string primaryText, int defaultButton, params Command[] buttons)
{
return AskQuestion (window, primaryText, null, defaultButton, buttons);
}

public static Command AskQuestion (string primaryText, string secondaryText, int defaultButton, params Command[] buttons)
{
return GenericAlert (RootWindow, Toolkit.CurrentEngine.Defaults.MessageDialog.QuestionIcon, primaryText, secondaryText, defaultButton, buttons);
return AskQuestion (RootWindow, primaryText, secondaryText, defaultButton, buttons);
}

public static Command AskQuestion (WindowFrame window, string primaryText, string secondaryText, int defaultButton, params Command[] buttons)
{
return AskQuestion (window, primaryText, secondaryText, Toolkit.CurrentEngine.Defaults.MessageDialog.QuestionIcon, defaultButton, buttons);
}

public static Command AskQuestion (string primaryText, string secondaryText, Drawing.Image icon, int defaultButton, params Command [] buttons)
{
return GenericAlert (RootWindow, icon, primaryText, secondaryText, defaultButton, buttons);
return AskQuestion (RootWindow, primaryText, secondaryText, icon, defaultButton, buttons);
}


public static Command AskQuestion (WindowFrame window, string primaryText, string secondaryText, Drawing.Image icon, int defaultButton, params Command[] buttons)
{
return GenericAlert (window, icon, primaryText, secondaryText, defaultButton, buttons);
}

public static Command AskQuestion (QuestionMessage message)
{
return AskQuestion (RootWindow, message);
Expand Down Expand Up @@ -475,6 +532,12 @@ public Drawing.Image QuestionIcon {
questionIcon = value;
}
}

/// <summary>
/// Gets or sets the default root window override function.
/// </summary>
/// <value>The root window to be used instead of MessageDialog.RootWindow.</value>
public Func<WindowFrame> DefaultRootWindowOverride { get; set; }
}
}