Exemple #1
0
        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);
        }