diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-11-03 17:38:36 -0800 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-11-03 17:38:36 -0800 |
commit | 172fc1052b736505ceceec0a9253bcfd181c7698 (patch) | |
tree | 48b2423cfdd9694d7a63610342f027dcfb3c58bf /windows/WinUI/MainWindow.xaml.cs | |
parent | 523412edfbd60c8b064f2392c413d2916e2aa9b9 (diff) | |
parent | a19e82fcbc2203f0d84a0e744d344e0796bc0c33 (diff) | |
download | infinitytier-172fc1052b736505ceceec0a9253bcfd181c7698.tar.gz infinitytier-172fc1052b736505ceceec0a9253bcfd181c7698.zip |
Merge windows-ui into edge.
Diffstat (limited to 'windows/WinUI/MainWindow.xaml.cs')
-rw-r--r-- | windows/WinUI/MainWindow.xaml.cs | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/windows/WinUI/MainWindow.xaml.cs b/windows/WinUI/MainWindow.xaml.cs new file mode 100644 index 00000000..f6cb4f44 --- /dev/null +++ b/windows/WinUI/MainWindow.xaml.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Timers; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using System.Windows.Threading; + +namespace WinUI +{ + /// <summary> + /// Interaction logic for MainWindow.xaml + /// </summary> + public partial class MainWindow : Window + { + APIHandler handler = new APIHandler(); + Regex charRegex = new Regex("[0-9a-fxA-FX]"); + Regex wholeStringRegex = new Regex("^[0-9a-fxA-FX]+$"); + + Timer timer = new Timer(); + + public MainWindow() + { + InitializeComponent(); + + networksPage.SetAPIHandler(handler); + + updateStatus(); + updateNetworks(); + updatePeers(); + + DataObject.AddPastingHandler(joinNetworkID, OnPaste); + + timer.Elapsed += new ElapsedEventHandler(OnUpdateTimer); + timer.Interval = 2000; + timer.Enabled = true; + } + + private void updateStatus() + { + var status = handler.GetStatus(); + + networkId.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => + { + this.networkId.Content = status.Address; + })); + versionString.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => + { + this.versionString.Content = status.Version; + })); + onlineStatus.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => + { + this.onlineStatus.Content = (status.Online ? "ONLINE" : "OFFLINE"); + })); + } + + private void updateNetworks() + { + var networks = handler.GetNetworks(); + + networksPage.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => + { + networksPage.setNetworks(networks); + })); + } + + private void updatePeers() + { + var peers = handler.GetPeers(); + + peersPage.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => + { + peersPage.SetPeers(peers); + })); + } + + private void OnUpdateTimer(object source, ElapsedEventArgs e) + { + updateStatus(); + updateNetworks(); + updatePeers(); + } + + private void joinButton_Click(object sender, RoutedEventArgs e) + { + if (joinNetworkID.Text.Length < 16) + { + MessageBox.Show("Invalid Network ID"); + } + else + { + handler.JoinNetwork(joinNetworkID.Text); + } + } + + private void OnNetworkEntered(object sender, TextCompositionEventArgs e) + { + e.Handled = !charRegex.IsMatch(e.Text); + } + + private void OnPaste(object sender, DataObjectPastingEventArgs e) + { + var isText = e.SourceDataObject.GetDataPresent(DataFormats.UnicodeText, true); + if (!isText) return; + + var text = e.SourceDataObject.GetData(DataFormats.UnicodeText) as string; + + if (!wholeStringRegex.IsMatch(text)) + { + e.CancelCommand(); + } + } + } +} |