public static void SaveTerminalProperties() { CKernelTerminal kernTeminal = CKernelTerminal.GetKernelTerminalInstance(); lock (kernTeminal.TerminalConfig) { CDataBinder.UpdateTerminalConfig(kernTeminal.TerminalConfig.TerminalProperties, CViewModelDispatcher.GetTerminalViewModel()); } CUtil.TaskStart(kernTeminal.SaveTerminalSettings); }
/// <summary> ///1. Copies data from marketviewModel to config ///2. Call saving config to disk /// /// Call from /// 1. MarketViewModel.SetEmptyVewModelInstrParams - when create empty view model (task) /// 2. MarketViewModel.OnClose - when closing MainWindow (i.e close application) (synchronous, GUI thread) /// 3. OnSaveInstrumentConfig - from Views : MarketSettingsWindow.Close, from ControlAmountTextblock (task) /// </summary> public void SaveInstrumentConfig() { for (int i = 0; i < ListWorkAmount.Count; i++) { _instrumentConfig.WorkAmounts[i] = Convert.ToDecimal(ListWorkAmount[i].TextAmountValue); } CDataBinder.SaveMarketConfig(_instrumentConfig, this); _kernelTerminal.SaveInstrumentConfig(ref _instrumentConfig); }
/// <summary> /// Set instrument parameters for Empty /// viewmodel. Calling when set real /// instrument selected. /// /// If instrument was trade previously /// settings file must be exists, load data from it. /// /// If instrument was not trade previously /// settings file is not exist use ticker data receieved /// from the server /// /// Calling from CKernelTerminal.EditNonConnectedStock /// </summary> /// <param name="conId"></param> /// <param name="ticker">ticker data(instrument, step, decimals, etc) /// recieved from the server /// </param> public void SetEmptyVewModelInstrParams(int conId, CTIckerData ticker) { if (_logger == null) { _logger = new CLogger("MarketViewModel_" + ticker.TickerName); } string pathToConfig = CKernelTerminal.GetInstruemntPath(ticker.TickerName); //Config file for instrument is exists if (File.Exists(pathToConfig)) { _instrumentConfig = _kernelTerminal.LoadInstrumentConfig(ticker.TickerName); CDataBinder.LoadMarketConfig(_instrumentConfig, this); //added 2018-02-27 for bitfinix capability if (_bUpdInstrParamsFromGrid) { Step = (double)ticker.Step; DecimalVolume = ticker.DecimalVolume; Decimals = ticker.Decimals; } } //Config file for instrument is not exists else { TickerName = ticker.TickerName; Step = (double)ticker.Step; DecimalVolume = ticker.DecimalVolume; Decimals = ticker.Decimals; _instrumentConfig.Name = ticker.TickerName; _instrumentConfig.MarketProperties.StockProperties.TickerName = ticker.TickerName; _instrumentConfig.MarketProperties.StockProperties.Step = ticker.Step.ToString(); _instrumentConfig.MarketProperties.StockProperties.Decimals = ticker.Decimals.ToString(); _instrumentConfig.MarketProperties.DealsProperties.Step = ticker.Step.ToString(); _instrumentConfig.FileName = CKernelTerminal.GetInstruemntPath(ticker.TickerName); (new Task(SaveInstrumentConfig)).Start(); } //note: ConId use for both cases ConnId = conId; }
/// <summary> /// /// </summary> /// <param name="controlMarket"></param> /// <param name="marketViewModel"></param> // TODO: separate parameters and bindings to other methods. Or/and remove settings public void BindToViewModel(ref ControlMarket controlMarket, MarketViewModel marketViewModel) { //========================================================================= MARKET VIEWMODEL BINDINGS ================================================================ //bind ControlStockInstance controlMarket.ControlStockInstance.DataContext = marketViewModel; controlMarket.ControlStockInstance.BindToSystem(/*(ITradeOperations)marketViewModel*,*/ _kernelTerminal, marketViewModel.TickerName, _kernelTerminal.TerminalConfig.MaxRepaintTimeMS); marketViewModel.ForceRepaintControlStock = controlMarket.ControlStockInstance.ForceRepaint; CStockProperties sp = marketViewModel.InstrumentConfig.MarketProperties.StockProperties; CDataBinder.BindFromList(marketViewModel, controlMarket.ControlStockInstance, sp); CDealsProperties dp = new CDealsProperties(); CDataBinder.BindFromList(marketViewModel, controlMarket.ControlDealsInstance, dp); CClusterProperties cp = marketViewModel.InstrumentConfig.MarketProperties.ClusterProperties; CDataBinder.BindFromList(marketViewModel, controlMarket.ControlClustersInstance, cp); //=========================================================================END MARKET VIEWMODEL BINDINGS ================================================================ controlMarket.ControlUserPosInstance.DataContext = marketViewModel.VMUserPos; // CUtil.SetBinding(marketViewModel, "ActualWidth", (FrameworkElement)controlMarket.ControlStockInstance, FrameworkElement.ActualWidthProperty); //specific binding CUserPosProperties upp = new CUserPosProperties(); //CDataBinder.BindFromList(marketViewModel.VMUserPos, controlMarket.ControlStockInstance.DOUSerPos, upp); CDataBinder.BindAllFromViewModel(marketViewModel.VMUserPos, controlMarket.ControlStockInstance.DOUSerPos); controlMarket.DataContext = marketViewModel; //========================================================================= BIND CONTROL MARKETS PROPERTIES ===================================================================== //trick: on binding value of controlMarket.StockNum(correct) overrides with value //of MarketViewModel (incorrect) so remember old value and set it after binding int stockNum = controlMarket.StockNum; CUtil.SetBinding(marketViewModel, "StockNum", controlMarket, ControlMarket.StockNumProperty, twoWayBinding: true); marketViewModel.StockNum = stockNum; CUtil.SetBinding(marketViewModel, "SelectionMode", controlMarket, ControlMarket.SelectionModeProperty, twoWayBinding: true); CUtil.SetBinding(marketViewModel, "IsModeKeyboardTrading", controlMarket, ControlMarket.IsModeKeyboardTradingProperty); //=========================================================================END BIND CONTROL MARKETS PROPERTIES ===================================================================== //======================================================================== BIND CLUSTER PROCESSOR =================================================================================== CUtil.SetBinding(marketViewModel.ClusterProcessor, "ClusterPriceAmount", controlMarket.ControlClustersInstance, ControlClusters.ClusterPriceAmountProperty); CUtil.SetBinding(marketViewModel.ClusterProcessor, "DisablePaintClusters", controlMarket.ControlClustersInstance, ControlClusters.DisablePaintClustersProperty); CUtil.SetBinding(marketViewModel.ClusterProcessor, "DisableRecalcClusters", controlMarket.ControlClustersInstance, ControlClusters.DisableRecalcClustersProperty); CUtil.SetBinding(marketViewModel.ClusterProcessor, "LstTimes", controlMarket.ControlClustersInstance, ControlClusters.LstTimesProperty); CUtil.SetBinding(marketViewModel.ClusterProcessor, "ClusterDate", controlMarket.ControlClustersInstance, ControlClusters.ClusterDateProperty); //=========================================================================END BIND CLUSTER PROCESSOR ========================================================================================================== // ========================================================================== TERMINAL VIEWMODEL BINDINGS =========================================================== CTerminalCommonProperties tcp = _kernelTerminal.TerminalConfig.TerminalProperties.TerminalCommonProperties; CDataBinder.BindFromList(_kernelTerminal.ViewModelDispatcher.TerminalViewModel, controlMarket, tcp); //TODO move line up TerminalViewModel termViewModel = _kernelTerminal.ViewModelDispatcher.TerminalViewModel; CDataBinder.BindFromList(termViewModel, controlMarket.ControlStockInstance, tcp); CDataBinder.BindFromList(termViewModel, controlMarket.ControlDealsInstance, tcp); CDataBinder.BindFromList(termViewModel, controlMarket.ControlClustersInstance, tcp); CTerminalStockProperties tsp = _kernelTerminal.TerminalConfig.TerminalProperties.TerminalStockProperties; CDataBinder.BindFromList(termViewModel, controlMarket.ControlStockInstance, tsp); CTerminalDealsProperties tdp = _kernelTerminal.TerminalConfig.TerminalProperties.TerminalDealsProperties; CDataBinder.BindFromList(termViewModel, controlMarket.ControlDealsInstance, tdp); CTerminalClustersProperties tclstp = _kernelTerminal.TerminalConfig.TerminalProperties.TerminalClustersProperties; CDataBinder.BindFromList(termViewModel, controlMarket.ControlClustersInstance, tclstp); //controlMarket.StockClock.DataContext = termViewModel; CUtil.SetBinding(termViewModel, "StockClock", controlMarket.StockClock, TextBlock.TextProperty); //controlMarket.StockClock. // ============ =============================================================END TERMINAL VIEWMODEL BINDINGS =========================================================== controlMarket.ControlClustersInstance.UpdateSettings(); controlMarket.ControlClustersInstance.InitFontSizeScaled(); // controlMarket.ControlDealsInstance.BindToSystem(_kernelTerminal /*, (ITradeOperations)marketViewModel*/); BindWorkAmount(controlMarket, marketViewModel); // EvntDispMarketViewModel e = new EvntDispMarketViewModel(marketViewModel); }