Files
PowerToys/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Calculator/ResultHelper.cs
Heiko 465df35d27 [PT Run] Calculator plugin: Various improvements (#18159)
* crash fixes and error result

* small changes and test fixes

* improve exceptions and message

* double array crash fix

* overflowexception

* improve error handling

* varous improvements

* varous improvements

* fix spelling

* fix spelling

* Revert #16980

* add description

* error improvemenet

* Update tests

* spelling fixes

* small changes

* add settings

* last changes

* fix description

* update dev docs

* spell check
2022-06-02 10:44:12 +01:00

67 lines
2.1 KiB
C#

// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System.Globalization;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows;
using Wox.Plugin;
namespace Microsoft.PowerToys.Run.Plugin.Calculator
{
public static class ResultHelper
{
public static Result CreateResult(CalculateResult result, string iconPath, CultureInfo culture)
{
return CreateResult(result.RoundedResult, iconPath, culture);
}
public static Result CreateResult(decimal? roundedResult, string iconPath, CultureInfo culture)
{
// Return null when the expression is not a valid calculator query.
if (roundedResult == null)
{
return null;
}
return new Result
{
// Using CurrentCulture since this is user facing
Title = roundedResult?.ToString(culture),
IcoPath = iconPath,
Score = 300,
SubTitle = Properties.Resources.wox_plugin_calculator_copy_number_to_clipboard,
Action = c => Action(roundedResult, culture),
};
}
public static bool Action(decimal? roundedResult, CultureInfo culture)
{
var ret = false;
if (roundedResult != null)
{
var thread = new Thread(() =>
{
try
{
Clipboard.SetText(roundedResult?.ToString(culture));
ret = true;
}
catch (ExternalException)
{
MessageBox.Show(Properties.Resources.wox_plugin_calculator_copy_failed);
}
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
}
return ret;
}
}
}