Пример #1
0
        // запуск чата (ChatControlBackEnd)
        // arguments[0] содержит Id пользователя и перекрывает userId
        public void Start(int userId = 0, List <string> arguments = null)
        {
            if (engine == null)
            {
                engine = new ChatControlBackEnd();
                Initialize();
            }
            engine.Start();
            if (arguments != null && arguments.Count >= 1)
            {
                userId = arguments[0].ToInt(0);
            }
            if (userId != 0)
            {
                ChatSettings.Instance.Id = userId;
                if (ChatSettings.Instance.AutoLogin)
                {
                    engine.Login(userId);
                }
            }

            animationTimer.Tick    += OnAnimationTimerTicked;
            animationTimer.Interval = 500;
            animationTimer.Start();

            // 4 debug
            if (arguments != null && arguments.Count >= 3)
            {
                engine.StartSpam(arguments[1], arguments[2].ToInt(1000));
            }
        }
Пример #2
0
 public void Reset(ChatControlBackEnd engine)
 {
     allMessagesRichTextBox.Clear();
     foreach (var message in messageHistory)
     {
         PostMessage(message.a, message.b, engine);
     }
 }
Пример #3
0
 public void Initialize(
     Func<Account> getActualAccountData, Func<string> getUserLogin, 
     Action<PerformerStat> investInPAMM,
     ITradeSharpServerTrade serverProxy, ChatControlBackEnd chat)
 {
     this.getActualAccountData = getActualAccountData;
     this.getUserLogin = getUserLogin;
     this.investInPAMM = investInPAMM;
     ServerProxy = serverProxy;
     Chat = chat;
 }
Пример #4
0
 public void Initialize(
     Func <Account> getActualAccountData, Func <string> getUserLogin,
     Action <PerformerStat> investInPAMM,
     ITradeSharpServerTrade serverProxy, ChatControlBackEnd chat)
 {
     this.getActualAccountData = getActualAccountData;
     this.getUserLogin         = getUserLogin;
     this.investInPAMM         = investInPAMM;
     ServerProxy = serverProxy;
     Chat        = chat;
 }
Пример #5
0
 // остановка чата (ChatControlBackEnd)
 public void Stop()
 {
     try
     {
         engine.Stop();
         StopControl();
         engine = null;
     }
     catch (Exception ex)
     {
         Logger.Error("Ошибка остановки чата (ChatControl.Stop)", ex);
     }
 }
Пример #6
0
 public RoomListForm(ChatControlBackEnd engine)
 {
     InitializeComponent();
     roomFastGrid.Columns.Add(new FastColumn("IsBound", "*")
         {
             ImageList = imageList,
             ColumnMinWidth = 25,
             ColumnWidth = 25
         });
     roomFastGrid.Columns.Add(new FastColumn("Name", "Комната"));
     roomFastGrid.Columns.Add(new FastColumn("UserCount", "Пользователи") {ColumnWidth = 80});
     roomFastGrid.Columns.Add(new FastColumn("Description", "Описание"));
     roomFastGrid.SelectionChanged += RoomFastGridSelectionChanged;
     roomFastGrid.UserHitCell += RoomFastGridUserHitCell;
     this.engine = engine;
     this.engine.RoomsReceived += RoomsReceived;
     UpdateRooms();
 }
Пример #7
0
 public RoomListForm(ChatControlBackEnd engine)
 {
     InitializeComponent();
     roomFastGrid.Columns.Add(new FastColumn("IsBound", "*")
     {
         ImageList      = imageList,
         ColumnMinWidth = 25,
         ColumnWidth    = 25
     });
     roomFastGrid.Columns.Add(new FastColumn("Name", "Комната"));
     roomFastGrid.Columns.Add(new FastColumn("UserCount", "Пользователи")
     {
         ColumnWidth = 80
     });
     roomFastGrid.Columns.Add(new FastColumn("Description", "Описание"));
     roomFastGrid.SelectionChanged += RoomFastGridSelectionChanged;
     roomFastGrid.UserHitCell      += RoomFastGridUserHitCell;
     this.engine = engine;
     this.engine.RoomsReceived += RoomsReceived;
     UpdateRooms();
 }
Пример #8
0
 public void AddMessage(Message message, ChatControlBackEnd engine, MessageStyle style = MessageStyle.None)
 {
     messageHistory.Add(new Cortege2 <Message, MessageStyle>(message, style));
     PostMessage(message, style, engine);
 }
Пример #9
0
        private void PostMessage(Message message, MessageStyle style, ChatControlBackEnd engine)
        {
            if (style == MessageStyle.Notify && !ChatSettings.Instance.ShowNotifications)
            {
                return;
            }
            var nickName = "";
            var user     = AllUsers.Instance.GetUser(message.Sender);

            if (user != null)
            {
                nickName = user.NickName + ": ";
                style    = MessageStyle.Others;
            }
            if (message.Sender == ChatSettings.Instance.Id) // detect own
            {
                style = MessageStyle.Mine;
            }
            else // detect owner
            {
                var room = engine.GetActiveRooms().Find(r => r.Name == message.Room);
                if (room != null && message.Sender == room.Owner)
                {
                    style = MessageStyle.Owner;
                }
            }
            var text   = "[" + message.TimeStamp.ToString(ChatSettings.Instance.DateTimeFormat) + "] " + nickName + message.Text;
            var length = allMessagesRichTextBox.TextLength;

            allMessagesRichTextBox.AppendText(text + Environment.NewLine);
            if (style == MessageStyle.None)
            {
                return;
            }
            allMessagesRichTextBox.SelectionStart  = length;
            allMessagesRichTextBox.SelectionLength = text.Length;
            switch (style)
            {
            case MessageStyle.Mine:
                allMessagesRichTextBox.SelectionColor = ChatSettings.Instance.OwnColor;
                allMessagesRichTextBox.SelectionFont  = ChatSettings.Instance.OwnFont;
                break;

            case MessageStyle.Owner:
                allMessagesRichTextBox.SelectionColor = ChatSettings.Instance.OwnerColor;
                allMessagesRichTextBox.SelectionFont  = ChatSettings.Instance.OwnerFont;
                break;

            case MessageStyle.Others:
                allMessagesRichTextBox.SelectionColor = ChatSettings.Instance.OthersColor;
                allMessagesRichTextBox.SelectionFont  = ChatSettings.Instance.OthersFont;
                break;

            case MessageStyle.Error:
                allMessagesRichTextBox.SelectionColor = Color.DarkRed;
                allMessagesRichTextBox.SelectionFont  = Font;
                break;

            case MessageStyle.Notify:
                allMessagesRichTextBox.SelectionColor = Color.Gray;
                allMessagesRichTextBox.SelectionFont  = Font;
                break;
            }
            allMessagesRichTextBox.SelectionStart = allMessagesRichTextBox.TextLength;
            allMessagesRichTextBox.ScrollToCaret();
        }
Пример #10
0
        public void Initialize(Action closeHandler,
            TradeSharpServerTrade serverProxyAccount,
            Action<TradeSignalUpdate> signalUpdateSelected,
            Func<Account> getActualAccountData,
            Func<string> getUserLogin,
            Action<PerformerStat> investInPAMM,
            SavePerformersGridSelectedColumnsDel savePerformersGridSelectedColumns,
            LoadPerformersGridSelectedColumnsDel loadPerformersGridSelectedColumns,
            Func<ActionOnSignal> getActionOnSignal,
            Action<ActionOnSignal> setActionOnSignal,
            ChatControlBackEnd chat)
        {
            var gr = CreateGraphics();

            this.closeHandler = closeHandler;
            this.chat = chat;
            AccountModel.Instance.Initialize(getActualAccountData, getUserLogin, investInPAMM, serverProxyAccount.proxy, chat);
            SubscriptionModel.Instance.getActionOnSignal = getActionOnSignal;
            SubscriptionModel.Instance.setActionOnSignal = setActionOnSignal;
            subscriptionGrid.ShowTopPortfolio += portfolio =>
                {
                    LoadPortfolioSubscribers(portfolio);
                    Page = ActivePage.Performers;
                };

            // strategies
            var criterias = PerformerCriteriaFunctionCollection.Instance.criterias;
            var criteriaTitles = criterias.Select(c => c.Description).ToList();
            criteriaComboBox.Items.AddRange(criteriaTitles.Select(c => c as object).ToArray());
            criteriaComboBox.DropDownWidth = criteriaTitles.Max(c => gr.MeasureString(c, Font).ToSize().Width);
            criteriaComboBox.Width = criteriaComboBox.DropDownWidth + SystemInformation.VerticalScrollBarWidth;

            var indexInCombo = countComboBox.Items.Cast<string>().IndexOf("50");
            countComboBox.SelectedIndex = indexInCombo < 0 ? 0 : indexInCombo;

            sortOrderComboBox.Items.AddRange(EnumItem<PerformerSortOrder>.items.Cast<object>().ToArray());

            SetupSortCombos(gr);

            criteriaComboBox.SelectedIndex = criterias.IndexOf(PerformerCriteriaFunctionCollection.Instance.SelectedFunction);

            //topFilterControl.SortOrder = sortOrderComboBox.SelectedIndex == 0 ? SortOrder.Ascending : SortOrder.Descending;
            topFilterControl.PerformerCriteriaFunctionCollectionChanged += OnPerformerCriteriaFunctionCollectionChanged;
            topFilterControl.PerformerCriteriaFunctionChanged += OnPerformerCriteriaFunctionChanged;
            topFilterControl.CollapseButtonClicked += CollapseTopFilterControlButtonClick;
            topFilterControl.RefreshButtonClicked += RefreshButtonClick;
            topFilterControl.CreatePortfolioButtonClicked += CreatePortfolioButtonClick;

            IsExtendedPanelVisible = false;

            performersWorker.DoWork += GetPerformers;
            performersWorker.RunWorkerCompleted += GetPerformersCompleted;

            performerFilterWorker.DoWork += GetPerformersByFilters;
            performerFilterWorker.RunWorkerCompleted += GetPerformersByFiltersCompleted;

            // 4 refresh button
            refreshButtonColors = new[]
                {
                    refreshButton.BackColor,
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 0.9f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 0.85f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 0.8f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 0.85f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 0.9f),
                    refreshButton.BackColor,
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 1.1f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 1.15f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 1.2f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 1.15f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 1.1f)
                };
            topFilterControl.RefreshButtonEnabled = false;
            refreshButton.Enabled = false;

            performerGridCtrl.LoadPerformersGridSelectedColumns = loadPerformersGridSelectedColumns;
            performerGridCtrl.SavePerformersGridSelectedColumns = savePerformersGridSelectedColumns;
            performerGridCtrl.EnterRoomRequested += OnEnterRoomRequested;
            performerGridCtrl.PageTargeted += page => Page = page;
            performerGridCtrl.SetupGrid();

            signalFastGrid.SignalUpdateSelected += signalUpdateSelected;

            // company top portfolios
            portfoliosWorker.DoWork += GetPortfoloios;
            portfoliosWorker.RunWorkerCompleted += GetPortfoloiosCompleted;

            // my top
            myPortfoliosWorker.DoWork += GetMyPortfolio;
            myPortfoliosWorker.RunWorkerCompleted += GetMyPortfolioCompleted;

            signalsToolStripMenuItem.CheckedChanged += ParametersContextMenuStripItemClicked;
            pammsToolStripMenuItem.CheckedChanged += ParametersContextMenuStripItemClicked;
        }
Пример #11
0
 public void Reset(ChatControlBackEnd engine)
 {
     allMessagesRichTextBox.Clear();
     foreach (var message in messageHistory)
         PostMessage(message.a, message.b, engine);
 }
Пример #12
0
        public MainForm()
        {
            Instance = this;
            if (AppConfig.GetBooleanParam("SingleInstance", true))
            {
                var prc = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName);

                if (prc.Length > 1)
                {
                    MessageBox.Show(Localizer.GetString("MessageTerminalAlreadyRunning"), Localizer.GetString("TitleWarning"));
                    Process.GetCurrentProcess().Kill();
                    return;
                }
            }

            // показать окно загрузки
            SplashScreen.ShowSplash(StartupStage.Started);

            InitializeComponent();

            Localizer.LocalizeControl(this);

            bookmarkStrip.ImgList = lstGlyph32;
            SetupMenuImages();
            try
            {
                MakeFormMdi();
                Candlechart.Core.PluginManager.Instance.Initialize();
                RobotCollection.Initialize();
                ScriptManager.Initialize();
                ScriptManager.Instance.scriptListIsUpdated += ActualizeScriptMenu;
                CheckAppFolders();
                Logger.Info("Старт терминала (" + ExecutablePath.ExecPath + ")");

                InitializeTooltips();
                InitializeToolButtons(ChartToolButtonStorage.Instance.selButtons, panelChartTools);
                InitializeToolButtons(ChartToolButtonStorage.Instance.selSystemButtons, panelCommonTools);
                InitializeSeriesSettings();
                BtnFlipPanelChartToolsClick(btnFlipPanelCommonTools, null);
                BookmarkStorage.Instance.BookmarkDeleted += InstanceOnBookmarkDeleted;

                // шаг 1 завершен - обновить статус
                SplashScreen.UpdateState(StartupStage.MakeInstrumentalPanels);

                UserSettings.Instance.LoadProperties();
                EventSoundPlayer.Instance.LoadSounds();
                robotFarm = new RobotFarm(UpdateTickersCacheForRobots);
                robotFarm.OnStateChanged += RobotFarmStateChanged;
                quoteReceiver = new TcpQuoteReceiver();
                quoteReceiver.OnQuotesReceived += OnQuotesReceived;
                quoteReceiver.OnNewsReceived += OnNewsReceived;
                NewsCache.Instance.ActualizationCompleted +=
                    newsCount =>
                    AddMessageToStatusPanelSafe(DateTime.Now,
                                                string.Format("{0} ({1})", Localizer.GetString("MessageNewsRead"), newsCount));
                Contract.Util.BL.QuoteStorage.Instance.LoadQuotes(string.Format("{0}\\lastquote.txt", ExecutablePath.ExecPath));
                DalSpot.Instance.SetFavoritesList(UserSettings.Instance.FavoriteTickers.ToArray());
                navPanelControl.SetupPages(UserSettings.Instance.NavPanelPages);
                navPanelControl.closePanelClicked += () => MenuitemNavPaneClick(this, EventArgs.Empty);
                //AccountStatus.Instance.ConnectionStatusIsUpdated += InstanceOnConnectionStatusIsUpdated;
                AccountStatus.Instance.ServerConnectionStatus =
                    DalSpot.Instance.ConnectionWasEstablished ? ServerConnectionStatus.Connected : ServerConnectionStatus.NotConnected;

                // шаг 2 завершен - обновить статус
                SplashScreen.UpdateState(StartupStage.MakeQuoteStream);
                ResumeConnectionWithServer();

                // запуск чата
                ChatEngine = new ChatControlBackEnd();
                ChatEngine.Start();
                SetupChat();

                // шаг 3 завершен - обновить статус
                toolTipStatus.SetToolTip(lblConnectStatus, "");
                toolTipStatus.SetToolTip(connectionStatusImage, "");
                SplashScreen.UpdateState(StartupStage.MakeServerConnection);

                AccountStatus.Instance.OnAccountInfoUpdated += OnAccountInfoUpdated;
                AccountStatus.Instance.OnConnectionAborted += ResumeConnectionWithServer;
                AccountStatus.Instance.OnAuthenticationFailed += AuthenticationFailed;
                // вывести список открытых/закрытых за последнее время ордеров
                AccountStatus.Instance.OnAccountDataFirstReceived += ShowLast24HrOrders;
                autosaveFolder = AppConfig.GetStringParam("AutosaveFolder", "\\autosave");
                autosaveFolder = autosaveFolder.TrimEnd('\\');
                if (autosaveFolder.StartsWith("\\")) autosaveFolder = ExecutablePath.ExecPath + autosaveFolder;

                CrossChartDivergenciesSettingsWindow.GetChartsList += GetChartsList;
                printDocument.PrintPage += PrintDocumentPrintPage;
                serverProxyTrade.OnConnectionReestablished += ReviveFactory;
                SetupDragTargets();
            }
            catch (Exception ex)
            {
                Logger.Error("TradeSharp - ошибка инициализации ", ex);
                Close();
                return;
            }

            // шаг 4 завершен - обновить статус
            SplashScreen.UpdateState(StartupStage.FillDictionaries);

            // запуск процесса-планировщика
            threadSchedule = new Thread(ScheduleThreadRoutine);
            threadSchedule.Start();

            AppMessageFilter.ApplyDiffString(UserSettings.Instance.HotKeyList);
        }
Пример #13
0
        public void Initialize(Action closeHandler,
                               TradeSharpServerTrade serverProxyAccount,
                               Action <TradeSignalUpdate> signalUpdateSelected,
                               Func <Account> getActualAccountData,
                               Func <string> getUserLogin,
                               Action <PerformerStat> investInPAMM,
                               SavePerformersGridSelectedColumnsDel savePerformersGridSelectedColumns,
                               LoadPerformersGridSelectedColumnsDel loadPerformersGridSelectedColumns,
                               Func <ActionOnSignal> getActionOnSignal,
                               Action <ActionOnSignal> setActionOnSignal,
                               ChatControlBackEnd chat)
        {
            var gr = CreateGraphics();

            this.closeHandler = closeHandler;
            this.chat         = chat;
            AccountModel.Instance.Initialize(getActualAccountData, getUserLogin, investInPAMM, serverProxyAccount.proxy, chat);
            SubscriptionModel.Instance.getActionOnSignal = getActionOnSignal;
            SubscriptionModel.Instance.setActionOnSignal = setActionOnSignal;
            subscriptionGrid.ShowTopPortfolio           += portfolio =>
            {
                LoadPortfolioSubscribers(portfolio);
                Page = ActivePage.Performers;
            };

            // strategies
            var criterias      = PerformerCriteriaFunctionCollection.Instance.criterias;
            var criteriaTitles = criterias.Select(c => c.Description).ToList();

            criteriaComboBox.Items.AddRange(criteriaTitles.Select(c => c as object).ToArray());
            criteriaComboBox.DropDownWidth = criteriaTitles.Max(c => gr.MeasureString(c, Font).ToSize().Width);
            criteriaComboBox.Width         = criteriaComboBox.DropDownWidth + SystemInformation.VerticalScrollBarWidth;

            var indexInCombo = countComboBox.Items.Cast <string>().IndexOf("50");

            countComboBox.SelectedIndex = indexInCombo < 0 ? 0 : indexInCombo;

            sortOrderComboBox.Items.AddRange(EnumItem <PerformerSortOrder> .items.Cast <object>().ToArray());

            SetupSortCombos(gr);

            criteriaComboBox.SelectedIndex = criterias.IndexOf(PerformerCriteriaFunctionCollection.Instance.SelectedFunction);

            //topFilterControl.SortOrder = sortOrderComboBox.SelectedIndex == 0 ? SortOrder.Ascending : SortOrder.Descending;
            topFilterControl.PerformerCriteriaFunctionCollectionChanged += OnPerformerCriteriaFunctionCollectionChanged;
            topFilterControl.PerformerCriteriaFunctionChanged           += OnPerformerCriteriaFunctionChanged;
            topFilterControl.CollapseButtonClicked        += CollapseTopFilterControlButtonClick;
            topFilterControl.RefreshButtonClicked         += RefreshButtonClick;
            topFilterControl.CreatePortfolioButtonClicked += CreatePortfolioButtonClick;

            IsExtendedPanelVisible = false;

            performersWorker.DoWork             += GetPerformers;
            performersWorker.RunWorkerCompleted += GetPerformersCompleted;

            performerFilterWorker.DoWork             += GetPerformersByFilters;
            performerFilterWorker.RunWorkerCompleted += GetPerformersByFiltersCompleted;

            // 4 refresh button
            refreshButtonColors = new[]
            {
                refreshButton.BackColor,
                HslColor.AdjuctBrightness(refreshButton.BackColor, 0.9f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 0.85f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 0.8f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 0.85f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 0.9f),
                refreshButton.BackColor,
                HslColor.AdjuctBrightness(refreshButton.BackColor, 1.1f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 1.15f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 1.2f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 1.15f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 1.1f)
            };
            topFilterControl.RefreshButtonEnabled = false;
            refreshButton.Enabled = false;

            performerGridCtrl.LoadPerformersGridSelectedColumns = loadPerformersGridSelectedColumns;
            performerGridCtrl.SavePerformersGridSelectedColumns = savePerformersGridSelectedColumns;
            performerGridCtrl.EnterRoomRequested += OnEnterRoomRequested;
            performerGridCtrl.PageTargeted       += page => Page = page;
            performerGridCtrl.SetupGrid();

            signalFastGrid.SignalUpdateSelected += signalUpdateSelected;

            // company top portfolios
            portfoliosWorker.DoWork             += GetPortfoloios;
            portfoliosWorker.RunWorkerCompleted += GetPortfoloiosCompleted;

            // my top
            myPortfoliosWorker.DoWork             += GetMyPortfolio;
            myPortfoliosWorker.RunWorkerCompleted += GetMyPortfolioCompleted;

            signalsToolStripMenuItem.CheckedChanged += ParametersContextMenuStripItemClicked;
            pammsToolStripMenuItem.CheckedChanged   += ParametersContextMenuStripItemClicked;
        }
Пример #14
0
        public void DataBind(List <PerformerStatEx> performerStats, ChatControlBackEnd chat)
        {
            var images = imgListChartMini.Images.Cast <Image>().ToList();

            imgListChartMini.Images.Clear();
            foreach (var img in images)
            {
                img.Dispose();
            }
            var data = new List <PerformerStatEx>();

            // UserScore вычисляется на сервере
            // RecalcUserScore(performerStats);

            var userInfoExSource = new UserInfoExCache(TradeSharpAccountStatistics.Instance.proxy);
            var usersInfoEx      = userInfoExSource.GetUsersInfo(performerStats.Select(p => p.UserId).Distinct().ToList());

            var rowColors    = new[] { Color.Red, Color.ForestGreen, Color.Black };
            var stringFormat = new StringFormat
            {
                Alignment     = StringAlignment.Near,
                LineAlignment = StringAlignment.Center
            };

            using (var font = new Font(Font.FontFamily, 7))
                foreach (var performerStat in performerStats)
                {
                    // создать картинку с графиком
                    var bmp = new Bitmap(imgListChartMini.ImageSize.Width, imgListChartMini.ImageSize.Height);
                    if (performerStat.Chart != null)
                    {
                        using (var gr = Graphics.FromImage(bmp))
                        {
                            var leftValue = performerStat.AvgYearProfit;
                            var leftText  = string.Format("{0:f2}%", leftValue);

                            var leftTextWidth = gr.MeasureString(leftText, font).ToSize().Width;
                            var rightValue    = performerStat.ProfitLastMonthsAbs;
                            var rightText     = rightValue.ToStringUniformMoneyFormat(false);
                            var textWidth     = leftTextWidth + gr.MeasureString(rightText, font).ToSize().Width;
                            if (!ShowLabelsInMiniChart)
                            {
                                textWidth = 0;
                            }
                            PointF[] points;
                            if (ChartBrush != null)
                            {
                                points = MiniChartPacker.MakePolygon(performerStat.Chart,
                                                                     imgListChartMini.ImageSize.Width - textWidth,
                                                                     imgListChartMini.ImageSize.Height, 1, 1);
                            }
                            else
                            {
                                points = MiniChartPacker.MakePolyline(performerStat.Chart,
                                                                      imgListChartMini.ImageSize.Width - textWidth,
                                                                      imgListChartMini.ImageSize.Height, 1, 1);
                            }
                            gr.SmoothingMode     = SmoothingMode.AntiAlias;
                            gr.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
                            if (ShowLabelsInMiniChart)
                            {
                                for (var i = 0; i < points.Length; i++)
                                {
                                    points[i] = new PointF(points[i].X + leftTextWidth, points[i].Y);
                                }
                                gr.DrawString(leftText, font,
                                              new SolidBrush(leftValue >= 0 ? rowColors[1] : rowColors[0]), 0,
                                              imgListChartMini.ImageSize.Height / 2, stringFormat);
                                gr.DrawString(rightText, font,
                                              new SolidBrush(rightValue >= 0 ? rowColors[1] : rowColors[0]),
                                              imgListChartMini.ImageSize.Width - textWidth + leftTextWidth,
                                              imgListChartMini.ImageSize.Height / 2, stringFormat);
                            }

                            if (ChartBrush != null)
                            {
                                gr.FillPolygon(ChartBrush, points);
                            }
                            else
                            {
                                gr.DrawLines(ChartPen ?? new Pen(leftValue >= 0 ? rowColors[1] : rowColors[0], 2), points);
                            }
                        }
                    }
                    var item = new PerformerStatEx(performerStat)
                    {
                        ChartIndex = imgListChartMini.Images.Count
                    };
                    imgListChartMini.Images.Add(bmp);
                    imgListChartMini.Images.SetKeyName(item.ChartIndex, item.ChartIndex.ToString());

                    // создать фотку
                    UserInfoEx userInfoEx = null;
                    if (usersInfoEx != null)
                    {
                        userInfoEx = usersInfoEx.Find(ui => ui != null && ui.Id == performerStat.UserId);
                    }
                    if (userInfoEx != null && userInfoEx.AvatarSmall != null)
                    {
                        item.AvatarSmallIndex = imgListAvatar.Images.Count;
                        imgListAvatar.Images.Add(userInfoEx.AvatarSmall);
                        imgListAvatar.Images.SetKeyName(item.AvatarSmallIndex, item.AvatarSmallIndex.ToString());
                    }
                    else
                    {
                        item.AvatarSmallIndex = -1;
                    }

                    data.Add(item);
                }

            grid.DataBind(data);
            grid.Invalidate();

            if (this.chat != null)
            {
                this.chat.RoomsReceived -= RoomsReceived;
            }
            this.chat = chat;

            if (chat == null)
            {
                return;
            }

            chat.RoomsReceived += RoomsReceived;
            chat.GetRooms();
        }
Пример #15
0
 private void PostMessage(Message message, MessageStyle style, ChatControlBackEnd engine)
 {
     if (style == MessageStyle.Notify && !ChatSettings.Instance.ShowNotifications)
         return;
     var nickName = "";
     var user = AllUsers.Instance.GetUser(message.Sender);
     if (user != null)
     {
         nickName = user.NickName + ": ";
         style = MessageStyle.Others;
     }
     if (message.Sender == ChatSettings.Instance.Id) // detect own
         style = MessageStyle.Mine;
     else // detect owner
     {
         var room = engine.GetActiveRooms().Find(r => r.Name == message.Room);
         if (room != null && message.Sender == room.Owner)
             style = MessageStyle.Owner;
     }
     var text = "[" + message.TimeStamp.ToString(ChatSettings.Instance.DateTimeFormat) + "] " + nickName + message.Text;
     var length = allMessagesRichTextBox.TextLength;
     allMessagesRichTextBox.AppendText(text + Environment.NewLine);
     if (style == MessageStyle.None)
         return;
     allMessagesRichTextBox.SelectionStart = length;
     allMessagesRichTextBox.SelectionLength = text.Length;
     switch (style)
     {
         case MessageStyle.Mine:
             allMessagesRichTextBox.SelectionColor = ChatSettings.Instance.OwnColor;
             allMessagesRichTextBox.SelectionFont = ChatSettings.Instance.OwnFont;
             break;
         case MessageStyle.Owner:
             allMessagesRichTextBox.SelectionColor = ChatSettings.Instance.OwnerColor;
             allMessagesRichTextBox.SelectionFont = ChatSettings.Instance.OwnerFont;
             break;
         case MessageStyle.Others:
             allMessagesRichTextBox.SelectionColor = ChatSettings.Instance.OthersColor;
             allMessagesRichTextBox.SelectionFont = ChatSettings.Instance.OthersFont;
             break;
         case MessageStyle.Error:
             allMessagesRichTextBox.SelectionColor = Color.DarkRed;
             allMessagesRichTextBox.SelectionFont = Font;
             break;
         case MessageStyle.Notify:
             allMessagesRichTextBox.SelectionColor = Color.Gray;
             allMessagesRichTextBox.SelectionFont = Font;
             break;
     }
     allMessagesRichTextBox.SelectionStart = allMessagesRichTextBox.TextLength;
     allMessagesRichTextBox.ScrollToCaret();
 }
Пример #16
0
        // запуск чата (ChatControlBackEnd)
        // arguments[0] содержит Id пользователя и перекрывает userId
        public void Start(int userId = 0, List<string> arguments = null)
        {
            if (engine == null)
            {
                engine = new ChatControlBackEnd();
                Initialize();
            }
            engine.Start();
            if (arguments != null && arguments.Count >= 1)
                userId = arguments[0].ToInt(0);
            if (userId != 0)
            {
                ChatSettings.Instance.Id = userId;
                if (ChatSettings.Instance.AutoLogin)
                    engine.Login(userId);
            }

            animationTimer.Tick += OnAnimationTimerTicked;
            animationTimer.Interval = 500;
            animationTimer.Start();

            // 4 debug
            if (arguments != null && arguments.Count >= 3)
                engine.StartSpam(arguments[1], arguments[2].ToInt(1000));
        }
Пример #17
0
 // остановка чата (ChatControlBackEnd)
 public void Stop()
 {
     try
     {
         engine.Stop();
         StopControl();
         engine = null;
     }
     catch (Exception ex)
     {
         Logger.Error("Ошибка остановки чата (ChatControl.Stop)", ex);
     }
 }
Пример #18
0
 public void AddMessage(Message message, ChatControlBackEnd engine, MessageStyle style = MessageStyle.None)
 {
     messageHistory.Add(new Cortege2<Message, MessageStyle>(message, style));
     PostMessage(message, style, engine);
 }