public async Task AddNewChatWindowAsync(ChatWindowViewModelSettings settings)
 {
     await Task.Run(() =>
     {
         AddNewChatWindow(settings);
     });
 }
        public void AddNewChatWindow()
        {
            UiWindow.Window.UIThread(() =>
            {
                if (ChatWindows.Count >= 10)
                {
                    return;
                }

                long winId = 0;
                if (ChatWindows.Count > 0)
                {
                    winId = ChatWindows[ChatWindows.Count - 1].WinId + 1;
                }

                ChatWindowViewModelSettings cws = null;
                ChatWindowViewModel cwm         = null;


                var trEng = TranslationEngines;
                cws       = new ChatWindowViewModelSettings((winId + 1).ToString(), winId);
                cwm       = new ChatWindowViewModel(cws, trEng.ToList(), _AllChatCodes.ToList(), _TataruModel.HotKeyManager);


                ChatWindows.Add(cwm);


                SelectedTabIndex = ChatWindows.Count - 1;
            });
        }
        public void AddNewChatWindow(ChatWindowViewModelSettings settings)
        {
            if (ChatWindows.Count >= 10)
            {
                return;
            }

            ChatWindowViewModel cwm = null;

            var trEng = TranslationEngines;

            UiWindow.Window.UIThread(() =>
            {
                cwm = new ChatWindowViewModel(settings, trEng.ToList(), _AllChatCodes.ToList(), _TataruModel.HotKeyManager);


                try
                {
                    ChatWindows.Add(cwm);
                }
                catch (Exception e)
                {
                    Logger.WriteLog(e);
                }

                SelectedTabIndex = ChatWindows.Count - 1;
            });
        }
        public ChatWindowViewModel(ChatWindowViewModelSettings settings, List <TranslationEngine> translationEngines, List <ChatMsgType> allChatCodes, HotKeyManager hotKeyManager)
        {
            this._AsyncPropertyChanged    = new AsyncEvent <AsyncPropertyChangedEventArgs>(this.EventErrorHandler, "ChatWindowViewModel \n AsyncPropertyChanged");
            this._RequestChatClear        = new AsyncEvent <TatruEventArgs>(this.EventErrorHandler, "ChatWindowViewModel \n RequsetChatClear");
            ShowChatWindowCommand         = new TataruUICommand(ShowChatWindow);
            RestChatWindowPositionCommand = new TataruUICommand(ResetChatWindowPosition);

            _IsWindowVisible = true;

            Name   = settings.Name;
            _WinId = settings.WinId;

            ChatFontSize    = settings.ChatFontSize;
            LineBreakHeight = settings.LineBreakHeight;
            SpacingCount    = settings.SpacingCount;

            IsAlwaysOnTop  = settings.IsAlwaysOnTop;
            IsClickThrough = settings.IsClickThrough;
            IsAutoHide     = settings.IsAutoHide;

            AutoHideTimeout = settings.AutoHideTimeout;

            IsHiddenByUser = false;

            BackGroundColor = settings.BackGroundColor;

            TranslationEngines = new CollectionView(translationEngines);

            var tmpEngine = translationEngines.FirstOrDefault(x => x.EngineName == settings.TranslationEngineName);

            TranslationEngines.MoveCurrentToFirst();
            if (tmpEngine != null)
            {
                if (TranslationEngines.Contains(tmpEngine))
                {
                    TranslationEngines.MoveCurrentTo(tmpEngine);
                }
                else
                {
                    TranslationEngines.MoveCurrentToFirst();
                }
            }

            OnTranslationEngineChange(this, null);

            TrySetLangugue(_TranslateFromLanguagues, settings.FromLanguague);
            TrySetLangugue(_TranslateToLanguagues, settings.ToLanguague);

            ChatWindowRectangle = settings.ChatWindowRectangle;

            ChatCodes = LoadChatCodes(settings.ChatCodes, allChatCodes);

            _HotKeyManager = hotKeyManager;

            ShowHideChatKeys     = new HotKeyCombination(settings.ShowHideChatKeys);
            ClickThoughtChatKeys = new HotKeyCombination(settings.ClickThoughtChatKeys);
            ClearChatKeys        = new HotKeyCombination(settings.ClearChatKeys);

            _HotKeyManager.GlobalHotKeyPressed += OnGlobalHotKeyPressed;
        }
        public ChatWindowViewModelSettings GetSettings()
        {
            ChatWindowViewModelSettings settings = new ChatWindowViewModelSettings();

            settings.Name  = this.Name;
            settings.WinId = this._WinId;

            settings.ChatFontSize    = this.ChatFontSize;
            settings.LineBreakHeight = this.LineBreakHeight;
            settings.SpacingCount    = this.SpacingCount;

            settings.IsAlwaysOnTop  = this.IsAlwaysOnTop;
            settings.IsClickThrough = this.IsClickThrough;
            settings.IsAutoHide     = this.IsAutoHide;

            settings.AutoHideTimeout = this.AutoHideTimeout;

            //settings.IsHiddenByUser = this.IsHiddenByUser;

            settings.BackGroundColor = this.BackGroundColor;

            TranslationEngine engine = (TranslationEngine)this.TranslationEngines.CurrentItem;

            if (engine != null)
            {
                settings.TranslationEngineName = engine.EngineName;
            }
            else
            {
                settings.TranslationEngineName = TranslationEngineName.GoogleTranslate;
            }

            settings.FromLanguague = (TranslatorLanguague)TranslateFromLanguagues.CurrentItem;
            settings.ToLanguague   = (TranslatorLanguague)TranslateToLanguagues.CurrentItem;

            settings.ChatWindowRectangle = this.ChatWindowRectangle;

            settings.ChatCodes = this.ChatCodes.ToList().Select(entry => new ChatCodeViewModel(entry)).ToList();

            settings.ShowHideChatKeys     = new HotKeyCombination(this.ShowHideChatKeys);
            settings.ClickThoughtChatKeys = new HotKeyCombination(this.ClickThoughtChatKeys);
            settings.ClearChatKeys        = new HotKeyCombination(this.ClearChatKeys);

            return(settings);
        }
예제 #6
0
        void LoadOldSettings(UserSettings userSettings)
        {
            if (!File.Exists(GlobalSettings.OldSettings))
            {
                return;
            }

            try
            {
                var oldSettings = Helper.LoadJsonData <UserSettingsOld>(GlobalSettings.OldSettings);

                try
                {
                    File.Delete(GlobalSettings.OldSettings);
                }
                catch (Exception ex)
                {
                    Logger.WriteLog(ex);
                }

                if (userSettings.ChatWindows.Count == 0)
                {
                    ChatWindowViewModelSettings windowSettings = new ChatWindowViewModelSettings("1", 0);

                    windowSettings.ChatFontSize    = oldSettings.FontSize;
                    windowSettings.LineBreakHeight = oldSettings.LineBreakHeight;
                    windowSettings.SpacingCount    = oldSettings.InsertSpaceCount;

                    windowSettings.IsAlwaysOnTop  = oldSettings.IsAlwaysOnTop;
                    windowSettings.IsClickThrough = oldSettings.IsClickThrough;
                    windowSettings.IsAutoHide     = oldSettings.IsAutoHide;

                    windowSettings.AutoHideTimeout = oldSettings.AutoHideTimeout;

                    windowSettings.BackGroundColor = oldSettings.BackgroundColor;
                    windowSettings.IsAutoHide      = oldSettings.IsAutoHide;

                    windowSettings.TranslationEngineName = (TranslationEngineName)oldSettings.CurrentTranslationEngine;

                    var eng = WebTranslator.TranslationEngines.FirstOrDefault(x => x.EngineName == windowSettings.TranslationEngineName);
                    if (eng != null)
                    {
                        var lang1 = eng.SupportedLanguages.FirstOrDefault(x => x.ShownName == oldSettings.CurrentFFXIVLanguage);
                        var lang2 = eng.SupportedLanguages.FirstOrDefault(x => x.ShownName == oldSettings.CurrentTranslateToLanguage);
                        if (lang1 != null && lang2 != null)
                        {
                            windowSettings.FromLanguague = new TranslatorLanguague(lang1);
                            windowSettings.ToLanguague   = new TranslatorLanguague(lang2);
                        }
                    }

                    windowSettings.ChatWindowRectangle = oldSettings.ChatWindowLocation;

                    foreach (var ck in windowSettings.ChatCodes)
                    {
                        ChatMsgType msgType = null;
                        if (oldSettings.ChatCodes.TryGetValue(ck.Code, out msgType))
                        {
                            bool isCheked = (msgType.MsgType == MsgType.Translate) ? true : false;

                            ck.IsChecked = isCheked;
                            ck.Color     = msgType.Color;
                        }
                    }

                    windowSettings.ShowHideChatKeys     = new WinUtils.HotKeyCombination(oldSettings.ShowHideChatKeys.Name + "0", oldSettings.ShowHideChatKeys);
                    windowSettings.ClickThoughtChatKeys = new WinUtils.HotKeyCombination(oldSettings.ClickThoughtChatKeys.Name + "0", oldSettings.ClickThoughtChatKeys);
                    windowSettings.ClearChatKeys        = new WinUtils.HotKeyCombination(oldSettings.ClearChatKeys.Name + "0", oldSettings.ClearChatKeys);

                    userSettings.ChatWindows.Add(new ChatWindowViewModelSettings(windowSettings));
                }
            }
            catch (Exception exx)
            {
                Logger.WriteLog(exx);
            }
        }
예제 #7
0
        private async Task AsyncOnViewModelWindowsListChanged(AsyncListChangedEventHandler <ChatWindowViewModel> ea)
        {
            switch (ea.ChangedEventArgs.ListChangedType)
            {
            case ListChangedType.ItemAdded:
            {
                await UiWindow.Window.UIThreadAsync(() =>
                    {
                        ChatWindowViewModel newElem = ea.ChangedElemnt;

                        var reslut = _TataruUIModel.ChatWindows.FirstOrDefault(x => x.WinId == newElem.WinId);
                        if (reslut == null)
                        {
                            var sett = newElem.GetSettings();
                            _TataruUIModel.ChatWindows.Add(sett);

                            var binder = new PropertyBinder(_TataruUIModel.ChatWindows[_TataruUIModel.ChatWindows.Count - 1], newElem);
                            CreateBinderCouples(binder);
                            _PropertyBinders.Add(binder);
                        }
                    });
            }
            break;

            case ListChangedType.ItemDeleted:
            {
                await Task.Run(() =>
                    {
                        SpinWait.SpinUntil(() => !deletingObject);
                        lock (lockObj)
                        {
                            deletingObject = true;
                        }
                    });

                await UiWindow.Window.UIThreadAsync(() =>
                    {
                        try
                        {
                            ChatWindowViewModel deletedElem = ea.ChangedElemnt;

                            ChatWindowViewModelSettings reslut = _TataruUIModel.ChatWindows.FirstOrDefault(x => x.WinId == deletedElem.WinId);

                            if (reslut != null)
                            {
                                _TataruUIModel.ChatWindows.Remove(reslut);

                                RemoveChatWindow(_ChatWindows, reslut.WinId);

                                try
                                {
                                    PropertyBinder binder = _PropertyBinders.FirstOrDefault(x => x.Object1 == reslut && x.Object2 == deletedElem);

                                    if (binder == null)
                                    {
                                        binder = _PropertyBinders.FirstOrDefault(x => x.Object2 == reslut && x.Object1 == deletedElem);
                                    }

                                    if (binder != null)
                                    {
                                        binder.Stop();
                                        _PropertyBinders.Remove(binder);
                                    }
                                }
                                catch (Exception e)
                                {
                                    Logger.WriteLog(e);
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            Logger.WriteLog(e);
                        }
                    });

                deletingObject = false;
            }

            break;
            }
        }
예제 #8
0
        private async Task AsyncOnSettingsWindowsListChanged(AsyncListChangedEventHandler <ChatWindowViewModelSettings> ea)
        {
            switch (ea.ChangedEventArgs.ListChangedType)
            {
            case ListChangedType.ItemAdded:
            {
                await UiWindow.Window.UIThreadAsync(() =>
                    {
                        ChatWindowViewModelSettings newElem = ea.ChangedElemnt;

                        ChatWindowViewModel reslut = null;

                        reslut = _TataruViewModel.ChatWindows.FirstOrDefault(x => x.WinId == newElem.WinId);


                        if (reslut == null)
                        {
                            try
                            {
                                TataruViewModel.AddNewChatWindow(newElem);
                            }
                            catch (Exception e)
                            {
                                Logger.WriteLog(e);
                            }

                            var binder = new PropertyBinder(newElem, _TataruViewModel.ChatWindows[_TataruViewModel.ChatWindows.Count - 1]);
                            CreateBinderCouples(binder);
                            _PropertyBinders.Add(binder);
                        }
                    });
            }
            break;

            case ListChangedType.ItemDeleted:
            {
                await Task.Run(() =>
                    {
                        SpinWait.SpinUntil(() => !deletingObject);
                        lock (lockObj)
                        {
                            deletingObject = true;
                        }
                    });

                await UiWindow.Window.UIThreadAsync(() =>
                    {
                        try
                        {
                            ChatWindowViewModelSettings deletedElem = ea.ChangedElemnt;

                            var elementToDelete = _TataruViewModel.ChatWindows.FirstOrDefault(x => x.WinId == deletedElem.WinId);

                            if (elementToDelete != null)
                            {
                                _TataruViewModel.DeleteChatWindow(_TataruViewModel.ChatWindows.IndexOf(elementToDelete));

                                RemoveChatWindow(_ChatWindows, elementToDelete.WinId);

                                var binder = _PropertyBinders.FirstOrDefault(x => x.Object1 == elementToDelete && x.Object2 == deletedElem);
                                if (binder == null)
                                {
                                    binder = _PropertyBinders.FirstOrDefault(x => x.Object2 == elementToDelete && x.Object1 == deletedElem);
                                }

                                if (binder != null)
                                {
                                    binder.Stop();

                                    _PropertyBinders.Remove(binder);
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            Logger.WriteLog(e);
                        }
                    });

                deletingObject = false;
            }
            break;
            }
        }