using apiwrappercli;
using apiwrappercli.listener;
using apiwrappercli.spmessage.core;
using Microsoft.Win32;
using SciChart.Charting.Visuals;
using SPTrader.BusinessLayer;
using SPTrader.Common;
using SPTrader.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using WpfStandaloneApp;
using WpfStandaloneApp.listener;
using WpfStandaloneApp.orderticket;
namespace SPTrader.Views
{
/// <summary>
/// Interaction logic for MainContainer.xaml
/// </summary>
public partial class MainSPTrame : SPBindableWindowChrome, SPApiProxyEventListener
{
private DaemonApiEventListener daemonApiEventListener;
private MarginCallWindow marginCallWindow = null;
private TwoFAWindow spAuthWindow = null;
double parentOldTop = 0;
double parentOldLeft = 0;
private bool isAE = false;
private string errMsg = string.Empty;
private bool isLoggedIn = false;
public MainSPTrame(string loginErrMsg)
{
InitializeComponent();
//DataContext = this;
daemonApiEventListener = new DaemonApiEventListener();
errMsg = loginErrMsg;
}
private void OnLoaded(object sender, RoutedEventArgs e)
{
ea.GetEvent<SwitchLanguageEvent>().Subscribe(OnLanguageChanged);
ea.GetEvent<RefreshDesktopSubWindowEvent>().Subscribe(UpdateDesktopSubWindowItems);
ea.GetEvent<SwitchColorThemeEvent>().Subscribe(OnColorThemeChanged);
WindowState = WindowState.Maximized;
apiProxy.CoreService.AddListener(this);
apiProxy.OrderService.AddListener(daemonApiEventListener);
this.parentOldLeft = this.Left;
this.parentOldTop = this.Top;
accountMenu.Visibility = Visibility.Collapsed;
adminMenu.Visibility = Visibility.Collapsed;
desktopMenu.Visibility = Visibility.Collapsed;
helpMenu.Visibility = Visibility.Visible;
oldMenu.Visibility = Visibility.Collapsed;
PreloadSciChartResource(); // preload scichart resources
ShowLoginWindow(errMsg);
}
private void OnLoggedIn()
{
DesktopSetting.Instance.IsLoggingOut = false;
UpdateTitle();
LoadDesktopWindows();
UpdateDesktopSubWindowItems();
}
public override void SaveDesktop()
{
}
private void UpdateTitle()
{
var prof = Profiler.Instance.CurrentLoggedInProfile;
rtSpTitle.Text = string.Format($"{AppConstants.SPSYSTEM_TITLE} {AppConstants.SPSYSTEM_VERSION}");
rtLoginId.Text = prof.User;
rtLoginHost.Text = string.Format($"{prof.Host}:{prof.Port}");
rtDateTime.Text = DateTime.Now.ToString("yyyy/MM/dd");
}
private void OnColorThemeChanged(ColorThemeEnum color)
{
UpdateDesktopSubWindowItems();
}
private void OnLanguageChanged(LanguageEnum lang)
{
UpdateDesktopSubWindowItems();
}
private void LoadDesktopWindows()
{
SPBindableWindow window = null;
var openWin = DesktopSetting.Instance.Load(SPCLI.Instance.GetUniqueLoggedInUserId());
isAE = apiProxy.TradeContext.IsAEMode();
foreach (var win in openWin)
{
var windowId = win.Key;
var winName = win.Value;
// re-open windows on login
switch (winName)
{
case DesktopSetting.MarketPriceWindow: window = new MarketPriceWindow(windowId); break;
case DesktopSetting.AccInfoWindow: window = new AccInfoWindow(windowId); break;
case DesktopSetting.TickerWindow: window = new TickerWindow(windowId); break;
case DesktopSetting.PriceDepthWindow: window = new PriceDepthWindow(windowId); break;
case DesktopSetting.EnterOrder: window = new EnterOrder(windowId); break;
case DesktopSetting.OptionMasterWindow: window = new OptionMasterWindow(windowId); break;
case DesktopSetting.TradeStatisticsWindow: window = new TradeStatisticsWindow(windowId); break;
case DesktopSetting.ChartTickerWindow: window = new ChartTickerWindow(windowId); break;
case DesktopSetting.ChartIntradayWindow: window = new ChartIntradayWindow(windowId); break;
case DesktopSetting.ChartAnalysisProWindow: window = new ChartAnalysisProWindow(windowId); break;
case DesktopSetting.PlaceOrderWindow: window = new PlaceOrderWindow(windowId); break;
case DesktopSetting.MarketPlaceWindow: window = new MarketPlaceWindow(windowId); break;
default: window = null; break;
}
// re-open windows for AE account
if (isAE && window == null)
{
switch (winName)
{
// there can be only 1 margin call window
case DesktopSetting.MarginCallWindow:
{
if (marginCallWindow == null)
{
window = new MarginCallWindow(windowId);
marginCallWindow = window as MarginCallWindow;
}
}
break;
case DesktopSetting.MarginCheckWindow: window = new MarginCheckWindow(windowId); break;
case DesktopSetting.TradeConfirmWindow: window = new TradeConfirmWindow(windowId); break;
case DesktopSetting.OrderApprovalWindow: window = new OrderApprovalWindow(windowId); break;
default: window = null; break;
}
}
if (window != null)
{
window.ShowInTaskbar = false;
window.Owner = this;
window.Show();
}
}
// make sure some windows show
MarginCallList_Click(null, null);
}
private void UpdateDesktopSubWindowItems()
{
// remove sub windows first
var winItems = desktopMenu.Items.OfType<MenuItem>();
foreach (var menu in winItems.ToList()) {
if (menu != null && menu.Tag != null)
desktopMenu.Items.Remove(menu);
}
// re-initialize sub-windows into menu list
foreach (Window win in App.Current.Windows)
{
if (win is SPBindableWindow) // SPBindableWindowChrome
{
var spwin = win as SPBindableWindow;
if (spwin != this)
{
if (string.IsNullOrEmpty(spwin.Title))
continue;
var subWin = new MenuItem();
subWin.Header = spwin.Title;
subWin.Style = this.TryFindResource("MindSystemMenuItem") as Style;
subWin.Click += SubWin_Click;
subWin.Tag = spwin.windowId;
desktopMenu.Items.Add(subWin);
}
}
}
}
private void SubWin_Click(object sender, RoutedEventArgs e)
{
var subWin = sender as MenuItem;
var winId = subWin.Tag.ToString();
CenterFocusWindowById(winId);
}
private void CenterFocusWindowById(string windowId)
{
foreach (Window win in App.Current.Windows)
{
if (win is SPBindableWindow)
{
var spwin = win as SPBindableWindow;
if (spwin != this)
{
if (spwin.windowId.Equals(windowId))
{
// center to screen
double screenWidth = SystemParameters.PrimaryScreenWidth;
double screenHeight = SystemParameters.PrimaryScreenHeight;
double windowWidth = spwin.Width;
double windowHeight = spwin.Height;
spwin.Left = (screenWidth / 2) - (windowWidth / 2);
spwin.Top = (screenHeight / 2) - (windowHeight / 2);
spwin.WindowState = WindowState.Normal;
spwin.Focus();
break;
}
}
}
}
}
private void OnClosing(object sender, CancelEventArgs e)
{
apiProxy.CoreService.RemoveListener(this);
apiProxy.OrderService.RemoveListener(daemonApiEventListener);
CloseChildWindows();
Logout();
}
private void OnLocationChanged(object sender, EventArgs e)
{
foreach (Window win in this.OwnedWindows)
{
win.Top += (this.Top - parentOldTop);
win.Left += (this.Left - parentOldLeft);
}
this.parentOldLeft = this.Left;
this.parentOldTop = this.Top;
}
public void ShowSPAuthWindow()
{
if (spAuthWindow == null)
{
spAuthWindow = new TwoFAWindow();
spAuthWindow.ShowInTaskbar = false;
spAuthWindow.Owner = this;
spAuthWindow.ShowDialog();
}
}
private void CloseChildWindows()
{
foreach (Window win in App.Current.Windows)
{
if ((!win.IsFocused && win.Owner == this) || win is SPBindableWindow)
{
if (win != this)
win.Close();
}
}
}
private void LockDesktopWindows()
{
foreach (Window win in App.Current.Windows)
{
if (win is SPBindableWindow)
{
if (win != this)
{
var spwin = win as SPBindableWindow;
spwin.Hide();
}
}
}
}
private void UnLockDesktopWindows()
{
foreach (Window win in App.Current.Windows)
{
if (win is SPBindableWindow)
{
var spwin = win as SPBindableWindow;
if (win != this && spwin.ActualWidth > 0 && spwin.ActualHeight > 0)
spwin.Show();
}
}
}
private void Logout()
{
DesktopSetting.Instance.IsLoggingOut = true;
DesktopSetting.Instance.Save(SPCLI.Instance.GetUniqueLoggedInUserId());
GlobalSettings.Instance.SaveSetting();
CloseChildWindows();
apiProxy.LogoutAll();
accountMenu.Visibility = Visibility.Collapsed;
adminMenu.Visibility = Visibility.Collapsed;
statusMenu.Visibility = Visibility.Collapsed;
desktopMenu.Visibility = Visibility.Collapsed;
helpMenu.Visibility = Visibility.Visible;
oldMenu.Visibility = Visibility.Collapsed;
isLoggedIn = false;
}
//void MainContainer_SourceInitialized(object sender, EventArgs e)
//{
// HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
// source.AddHook(new HwndSourceHook(WndProc));
//}
//private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
//{
// switch (msg)
// {
// case 0x00A3: /* WM_NCLBUTTONDBLCLK */
// {
// handled = true; //prevent double click from maximizing the window.
// }
// break;
// }
// return IntPtr.Zero;
//}
private void UpdateConnectionStatus(ConnectionStatusInfo info)
{
var statusList = new List<ConnectionInfo>();
statusList.Add(info.TransactionLink);
statusList.Add(info.QuotePriceLink);
statusList.Add(info.TickerLink);
if (apiProxy.TradeContext.IsAEMode())
statusList.Add(info.MarginCheckerLink);
var found = statusList.Where(x => x.IsConnected == false);
if (found.Count() > 0)
btn_conn.Foreground = ColorThemeSetting.GetColorValue("DangerColor");
else
btn_conn.Foreground = ColorThemeSetting.GetColorValue("ConfirmColor");
}
public void OnTServerLoginReply(LoginReplyMessage message)
{
}
public void OnTServerHostResponse(HostResponseMessage message)
{
}
public void OnPServerLoginReply(LoginPServerReplyMessage message)
{
}
public void OnForceLogoutPush(ForceLogoutPushMessage message)
{
if (message.reasonCode == 1)
{
DesktopSetting.Instance.Save(SPCLI.Instance.GetUniqueLoggedInUserId());
GlobalSettings.Instance.SaveSetting();
var dir = Directory.GetCurrentDirectory();
var exe = dir + "\\sptrader.exe";
// set up argument for new process [-e] is show error in login message
string args = string.Format("-e \"{0}\"", message.reasonText);
CommonUtil.StartProcess(exe, args);
Environment.Exit(0);
}
}
public void OnSwitchSystemUserListPush(SwitchSystemUserListPushMessage message)
{
}
public void OnTServerDisabledMobileApi()
{
}
public void OnBusinessDatePush(uint businessDate)
{
}
public void OnDisclaimerUrlReady(HyperlinkPushMessage message)
{
}
public void OnHyperlinkPush(HyperlinkPushMessage message)
{
}
public void OnPasswordChangeReply(PasswordChangeReplyMessage message)
{
}
public void OnUserMessagePush(UserMessage message)
{
}
public void OnHeartbeatReceived(ushort hostType)
{
}
public void OnUserChallengeNotification(UserChallengeNotificationMessage message)
{
Application.Current.Dispatcher.InvokeAsync((Action)delegate
{
bool isServerNewDevice = message.serverNewDevice;
bool isClientNewDevice = !apiProxy.CoreService.IsRegisteredDevice();
if (isClientNewDevice && !isServerNewDevice)
{
apiProxy.CoreService.ResendUserChallengeRequest();
ShowSPAuthWindow();
}
else if (isClientNewDevice || isServerNewDevice)
{
ShowSPAuthWindow();
}
else
{
apiProxy.CoreService.SendStoredUserChallengeAnswerRequest();
}
});
}
public void OnUserChallengeAnswerReply(UserChallengeAnswerReplyMessage message)
{
Application.Current.Dispatcher.InvokeAsync((Action)delegate
{
if (message.returnCode != 0)
{
if (spAuthWindow != null)
{
if (message.returnCode == SPErrorCode.ERR_2FA_TOO_MANY_WRONG_PSW)
{
MessageBoxResult result = MessageBox.Show(message.errMsg, "Authentication Error", MessageBoxButton.OK, MessageBoxImage.Error);
if (result == MessageBoxResult.OK)
{
Close();
}
}
}
else
{
ShowSPAuthWindow();
}
}
});
}
public void OnDeviceListReply(DeviceListReplyMessage message)
{
}
public void OnUpdatedConnectionStatusInfo(ConnectionStatusInfo info)
{
btn_conn.Dispatcher.Invoke((Action)delegate
{
UpdateConnectionStatus(info);
});
}
public void OnAlreadyConnected(int hostType)
{
}
public void OnConnecting(int hostType)
{
}
public void OnFailedToConnect(int hostType, SPConnectionException e)
{
}
public void OnConnectionError(int hostType, SPConnectionException e, ulong lastHeartBeatSentTime)
{
}
public void OnConnectSuccess(int hostType)
{
}
private void AdvancedOrderMenuItem_Click(object sender, RoutedEventArgs e)
{
ShowAdvancedOrderTicket();
}
private void ConnectionStatusMenuItem_Click(object sender, RoutedEventArgs e)
{
ShowConnectionStatusWindow();
}
private void MarginCallListMenuItem_Click(object sender, RoutedEventArgs e)
{
ShowMarginCallListWindow();
}
private void MarginCheckMenuItem_Click(object sender, RoutedEventArgs e)
{
ShowMarginCheckWindow();
}
private void ShowAdvancedOrderTicket()
{
var win = new AddOrderWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void ShowConnectionStatusWindow()
{
var win = new ConnectionStatusWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void ShowMarginCallListWindow()
{
if (isAE)
{
var win = new MarginCallListWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
}
private void ShowApprovalOrderListWindow()
{
if (isAE)
{
var win = new ApprovalOrderListWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
}
private void ShowTradeConfirmationWindow()
{
if (isAE)
{
var win = new TradeConfirmationWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
}
private void ShowMarginCheckWindow()
{
if (isAE)
{
var win = new WpfStandaloneApp.MarginCheckWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
}
private void ApprovalOrderListMenuItem_Click(object sender, RoutedEventArgs e)
{
ShowApprovalOrderListWindow();
}
private void TradeConfirmationMenuItem_Click(object sender, RoutedEventArgs e)
{
ShowTradeConfirmationWindow();
}
private void OnLight_Click(object sender, RoutedEventArgs e)
{
SPGlobal.SetColorTheme(ColorThemeEnum.LIGHT);
GlobalSettings.Instance.ColorThemeEnum = ColorThemeEnum.LIGHT;
ea.GetEvent<SwitchColorThemeEvent>().Publish(ColorThemeEnum.LIGHT);
}
private void OnDark_Click(object sender, RoutedEventArgs e)
{
SPGlobal.SetColorTheme(ColorThemeEnum.DARK);
GlobalSettings.Instance.ColorThemeEnum = ColorThemeEnum.DARK;
ea.GetEvent<SwitchColorThemeEvent>().Publish(ColorThemeEnum.DARK);
}
private void OnEng_Click(object sender, RoutedEventArgs e)
{
SPGlobal.SetLanguage(LanguageEnum.ENG);
GlobalSettings.Instance.LanguageEnum = LanguageEnum.ENG;
SPCLI.Instance.SwitchLanguage(LanguageEnum.ENG);
ea.GetEvent<SwitchLanguageEvent>().Publish(LanguageEnum.ENG);
}
private void OnChiTrad_Click(object sender, RoutedEventArgs e)
{
SPGlobal.SetLanguage(LanguageEnum.TCHI_UNICODE);
GlobalSettings.Instance.LanguageEnum = LanguageEnum.TCHI_UNICODE;
SPCLI.Instance.SwitchLanguage(LanguageEnum.TCHI_UNICODE);
ea.GetEvent<SwitchLanguageEvent>().Publish(LanguageEnum.TCHI_UNICODE);
}
private void OnChiSimp_Click(object sender, RoutedEventArgs e)
{
SPGlobal.SetLanguage(LanguageEnum.SCHI_UNICODE);
GlobalSettings.Instance.LanguageEnum = LanguageEnum.SCHI_UNICODE;
SPCLI.Instance.SwitchLanguage(LanguageEnum.SCHI_UNICODE);
ea.GetEvent<SwitchLanguageEvent>().Publish(LanguageEnum.SCHI_UNICODE);
}
private void ExitMenuItem_Click(object sender, RoutedEventArgs e)
{
Logout();
Close();
}
private void PreloadSciChartResource()
{
// preload SciChart resources so subsequent charts load faster
using (new SciChartSurface()) { }
}
private void ShowLoginWindow(string msg)
{
var win = new LoginWindow(msg);
win.ShowInTaskbar = false;
win.Owner = this;
isLoggedIn = (bool) win.ShowDialog();
if (isLoggedIn == true)
{
accountMenu.Visibility = Visibility.Visible;
desktopMenu.Visibility = Visibility.Visible;
helpMenu.Visibility = Visibility.Collapsed;
oldMenu.Visibility = Visibility.Visible;
isAE = apiProxy.TradeContext.IsAEMode();
if (isAE)
adminMenu.Visibility = Visibility.Visible;
OnLoggedIn();
}
}
private void OnLogin_Click(object sender, RoutedEventArgs e)
{
if (isLoggedIn == true)
return;
ShowLoginWindow(string.Empty);
}
private void OnLogout_Click(object sender, RoutedEventArgs e)
{
Logout();
}
private void DeviceManagementMenuItem_Click(object sender, RoutedEventArgs e)
{
var win = new DeviceListWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void AccInfoMenuItem_Click(object sender, RoutedEventArgs e)
{
var win = new AccInfoWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void EnterOrderMenuItem_Click(object sender, RoutedEventArgs e)
{
var win = new PlaceOrderWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void OnChangePassword_Click(object sender, RoutedEventArgs e)
{
var win = new ChangePassword();
win.ShowInTaskbar = false;
win.Owner = this;
win.ShowDialog();
}
private void MarketPriceMenuItem_Click(object sender, RoutedEventArgs e)
{
var win = new MarketPriceWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void TickerMenuItem_Click(object sender, RoutedEventArgs e)
{
var win = new TickerWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void QuotePriceMenuItem_Click(object sender, RoutedEventArgs e)
{
var win = new QuotePrice();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void OrderTradeMenuItem_Click(object sender, RoutedEventArgs e)
{
var win = new OrderTradeWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void PriceDepthMenuItem_Click(object sender, RoutedEventArgs e)
{
var win = new PriceDepthWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void MarginCheck_Click(object sender, RoutedEventArgs e)
{
if (isAE)
{
var win = new MarginCheckWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
}
private void MarginCallList_Click(object sender, RoutedEventArgs e)
{
if (!isAE) return;
// there can be only 1 margin call window
if (marginCallWindow == null)
{
marginCallWindow = new MarginCallWindow();
marginCallWindow.ShowInTaskbar = false;
marginCallWindow.Owner = this;
marginCallWindow.Show();
}
else
{
marginCallWindow.Show();
marginCallWindow.Focus();
}
}
private void ApprovalOrderList_Click(object sender, RoutedEventArgs e)
{
if (isAE)
{
var win = new OrderApprovalWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
}
private void TradeConfirmation_Click(object sender, RoutedEventArgs e)
{
if (isAE)
{
var win = new TradeConfirmWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
}
private void SaveDesktop_Click(object sender, RoutedEventArgs e)
{
// save the current desktop instance to LAST SNAPSHOT
foreach (Window win in App.Current.Windows)
{
if (win is SPBindableWindow)
{
var spwin = win as SPBindableWindow;
spwin.SaveDesktop();
}
}
DesktopSetting.Instance.Save(SPCLI.Instance.GetUniqueLoggedInUserId());
var fd = new SaveFileDialog();
fd.DefaultExt = ".sdt";
fd.InitialDirectory = Path.GetFullPath(SPGlobal.DATA_DIR);
fd.Filter = "Desktop File|*.sdt";
bool? res = fd.ShowDialog();
if (res == true)
{
File.WriteAllText(fd.FileName, "");
var filename = Path.GetFileNameWithoutExtension(fd.FileName);
var newfilename = string.Format(@"spdesktop_{0}.db", filename);
var fullpathname = SPGlobal.DATA_DIR + newfilename;
File.Copy(SPGlobal.DB_PATH, fullpathname);
}
}
private void LoadDesktop_Click(object sender, RoutedEventArgs e)
{
var fd = new OpenFileDialog();
fd.DefaultExt = ".sdt";
fd.InitialDirectory = Path.GetFullPath(SPGlobal.DATA_DIR);
fd.Filter = "Desktop File|*.sdt";
bool? res = fd.ShowDialog();
if (res == true)
{
DesktopSetting.Instance.IsLoadingPreviousDB = true;
CloseChildWindows();
DesktopSetting.Instance.ClearWindows();
DesktopSetting.Instance.Terminate(); // close all connections, release file handle lock
File.Delete(SPGlobal.DB_PATH);
var filename = Path.GetFileNameWithoutExtension(fd.FileName);
var newfilename = string.Format(@"spdesktop_{0}.db", filename);
var fullpathname = SPGlobal.DATA_DIR + newfilename;
Thread.Sleep(50); // add some lead time for OS to properly delink file
File.Copy(fullpathname, SPGlobal.DB_PATH);
Thread.Sleep(50); // add some lead time for OS to properly establish file
DesktopSetting.Instance.Initialize(); // open and connect to all db
LoadDesktopWindows();
DesktopSetting.Instance.IsLoadingPreviousDB = false;
}
}
private void OptionMasterItem_Click(object sender, RoutedEventArgs e)
{
var win = new OptionMasterWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void StrategyItem_Click(object sender, RoutedEventArgs e)
{
var win = new StrategyList();
win.ShowInTaskbar = false;
win.Owner = this;
win.ShowDialog();
}
private void SPCustomWindowChrome_Click(object sender, RoutedEventArgs e)
{
var win = new SPTestCustomWindowChrome();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void OnDeviceList_Click(object sender, RoutedEventArgs e)
{
var win = new DeviceList();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void OnConnectionStatus_Click(object sender, RoutedEventArgs e)
{
var win = new ConnectionStatusWin();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void OnUserManual_Click(object sender, RoutedEventArgs e)
{
SPWebNavigator.Instance.NavigateUserManual();
}
private void OnELearning_Click(object sender, RoutedEventArgs e)
{
SPWebNavigator.Instance.NavigateELearning();
}
private void OnWhatsNew_Click(object sender, RoutedEventArgs e)
{
SPWebNavigator.Instance.NavigateWhatsNew();
}
private void TradeStatistics_Click(object sender, RoutedEventArgs e)
{
var win = new TradeStatisticsWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void IntradayChart_Click(object sender, RoutedEventArgs e)
{
var win = new ChartIntradayWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void TickerChart_Click(object sender, RoutedEventArgs e)
{
var win = new ChartTickerWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void JavaScriptInterOp_Click(object sender, RoutedEventArgs e)
{
var win = new WebBrowserJSInterOpTest();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void EnterOrder_Click(object sender, RoutedEventArgs e)
{
var win = new EnterOrder();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void ChartProTA_Click(object sender, RoutedEventArgs e)
{
var win = new ChartAnalysisProWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void ChartProAnno_Click(object sender, RoutedEventArgs e)
{
var win = new ChartAnnotationWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
public void OnTargetPositionReply(TargetPositionReplyMessage message)
{
}
public void OnTargetPositionUpdate(TargetPositionUpdateMessage message)
{
}
private void ChangeCreditLimit_Click(object sender, RoutedEventArgs e)
{
var acc = apiProxy.TradeContext.GetAccNo();
if (string.IsNullOrEmpty(acc))
return;
var win = new ChangeDialog(AdminChangeMode.CHANGE_CREDIT_LIM);
win.ShowInTaskbar = false;
win.Owner = this;
win.ShowDialog();
}
private void ChangeMaxMargin_Click(object sender, RoutedEventArgs e)
{
var acc = apiProxy.TradeContext.GetAccNo();
if (string.IsNullOrEmpty(acc))
return;
var win = new ChangeDialog(AdminChangeMode.CHANGE_MAX_MARGIN);
win.ShowInTaskbar = false;
win.Owner = this;
win.ShowDialog();
}
private void OnAbout_Click(object sender, RoutedEventArgs e)
{
var win = new AboutDialog();
win.ShowInTaskbar = false;
win.Owner = this;
win.ShowDialog();
}
private void OnDisclaimer_Click(object sender, RoutedEventArgs e)
{
var win = new DisclaimerDialog();
win.ShowInTaskbar = false;
win.Owner = this;
win.ShowDialog();
}
private void OnComputerClock_Click(object sender, RoutedEventArgs e)
{
var win = new ComputerClock();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void OnLockDesktop_Click(object sender, RoutedEventArgs e)
{
LockDesktopWindows();
var win = new LockDesktop();
win.ShowInTaskbar = false;
win.Owner = this;
if (win.ShowDialog() == true)
{
UnLockDesktopWindows();
}
}
private void ChartAnalysis_Click(object sender, RoutedEventArgs e)
{
var win = new ChartAnalysisWindow();
win.ShowInTaskbar = false;
win.Owner = Application.Current.MainWindow;
win.Show();
}
private void ChartAnnotation_Click(object sender, RoutedEventArgs e)
{
var win = new ChartAnnotationWindow();
win.ShowInTaskbar = false;
win.Owner = Application.Current.MainWindow;
win.Show();
}
private void WebView2Chart_Click(object sender, RoutedEventArgs e)
{
var win = new SPWebView2();
win.ShowInTaskbar = false;
win.Owner = this;
win.Navigate("TradingViewWidget.html");
win.Show();
}
private void TradingView1_Click(object sender, RoutedEventArgs e)
{
var win = new SPWebView2();
win.ShowInTaskbar = false;
win.Owner = this;
win.Navigate("TradingViewSample1.html");
win.Show();
}
private void TradingView2_Click(object sender, RoutedEventArgs e)
{
var win = new SPWebView2();
win.ShowInTaskbar = false;
win.Owner = this;
win.Navigate("TradingViewSample2.html");
win.Show();
}
private void TradingView3_Click(object sender, RoutedEventArgs e)
{
var win = new SPWebView2();
win.ShowInTaskbar = false;
win.Owner = this;
win.Navigate("TradingViewSample3.html");
win.Show();
}
private void MarketPlaceItem_Click(object sender, RoutedEventArgs e)
{
var win = new MarketPlaceWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
private void UITest_Click(object sender, RoutedEventArgs e)
{
var win = new UITestWindow();
win.ShowInTaskbar = false;
win.Owner = this;
win.Show();
}
}
}