コード例 #1
0
ファイル: AvailableActions.cs プロジェクト: Sin96/GestureSign
        private void MoveDownButton_Click(object sender, RoutedEventArgs e)
        {
            var selected        = (lstAvailableActions.SelectedItem as ActionInfo);
            var actionInfoGroup =
                ActionInfos.Where(ai => ai.GestureName.Equals(selected.GestureName, StringComparison.Ordinal)).ToList();
            int index = actionInfoGroup.IndexOf(selected);

            if (index + 1 < actionInfoGroup.Count)
            {
                ActionInfos.Move(ActionInfos.IndexOf(selected), ActionInfos.IndexOf(actionInfoGroup[index + 1]));
                RefreshGroup(selected.GestureName);
                lstAvailableActions.SelectedItem = selected;


                IApplication selectedApplication = lstAvailableApplication.SelectedItem as IApplication;
                if (selectedApplication == null)
                {
                    return;
                }

                int selectedIndex = selectedApplication.Actions.FindIndex(a => a.Name.Equals(selected.ActionName, StringComparison.Ordinal));
                int nextIndex     = selectedApplication.Actions.FindIndex(selectedIndex + 1,
                                                                          a => a.GestureName.Equals(selected.GestureName, StringComparison.Ordinal));

                var temp = selectedApplication.Actions[nextIndex];
                selectedApplication.Actions[nextIndex]     = selectedApplication.Actions[selectedIndex];
                selectedApplication.Actions[selectedIndex] = temp;

                ApplicationManager.Instance.SaveApplications();
            }
        }
コード例 #2
0
ファイル: AvailableActions.cs プロジェクト: Ado77/GestureSign
        // public static event EventHandler StartCapture;
        public AvailableActions()
        {
            InitializeComponent();

            var actionsSourceView = new ListCollectionView(ActionInfos);                          //创建数据源的视图

            actionsSourceView.GroupDescriptions.Add(new PropertyGroupDescription("GestureName")); //在图中添加分组
            actionsSourceView.SortDescriptions.Add(new SortDescription("GestureName", ListSortDirection.Ascending));
            lstAvailableActions.ItemsSource = actionsSourceView;                                  //绑定数据源

            var applicationSourceView       = new ListCollectionView(_applications);
            var applicationGroupDesctrption = new PropertyGroupDescription("Group");  //设置分组列

            applicationSourceView.GroupDescriptions.Add(applicationGroupDesctrption); //在图中添加分组
            lstAvailableApplication.ItemsSource = applicationSourceView;

            ActionDialog.ActionsChanged += (o, e) =>
            {
                if (lstAvailableApplication.SelectedItem == e.Application)
                {
                    var oldActionInfo =
                        ActionInfos.FirstOrDefault(ai => ai.ActionName.Equals(e.Action.Name, StringComparison.Ordinal));
                    if (oldActionInfo != null)
                    {
                        int index         = ActionInfos.IndexOf(oldActionInfo);
                        var newActionInfo = Action2ActionInfo(e.Action);
                        ActionInfos[index] = newActionInfo;
                        RefreshGroup(e.Action.GestureName);
                        SelectAction(newActionInfo);
                    }
                    else
                    {
                        RefreshActions(false);
                    }
                }
                else
                {
                    BindApplications();
                    _selecteNewestItem = true;
                    lstAvailableApplication.SelectedItem = e.Application;
                    lstAvailableApplication.ScrollIntoView(e.Application);
                }
            };
            AvailableGestures.GestureChanged         += (o, e) => { RefreshActions(true); };
            GestureDefinition.GesturesChanged        += (o, e) => { RefreshActions(true); };
            ApplicationDialog.UserApplicationChanged += (o, e) =>
            {
                BindApplications();
                lstAvailableApplication.SelectedItem = e.Application;
                lstAvailableApplication.ScrollIntoView(e.Application);
            };

            ApplicationManager.OnLoadApplicationsCompleted += (o, e) => { this.Dispatcher.InvokeAsync(BindApplications); };

            if (ApplicationManager.FinishedLoading)
            {
                BindApplications();
            }
        }
コード例 #3
0
ファイル: AvailableActions.cs プロジェクト: Sin96/GestureSign
        void RefreshGroup(string gestureName)
        {
            lstAvailableActions.SelectedItem = null;
            var temp = ActionInfos.Where(ai => ai.GestureName.Equals(gestureName, StringComparison.Ordinal)).ToList();

            foreach (ActionInfo ai in temp)
            {
                int i = ActionInfos.IndexOf(ai);
                ActionInfos.Remove(ai);
                ActionInfos.Insert(i, ai);
            }
        }
コード例 #4
0
ファイル: AvailableActions.cs プロジェクト: Sin96/GestureSign
        private void RefreshActions(bool refreshAll)
        {
            var selectedApplication = lstAvailableApplication.SelectedItem as IApplication;

            if (selectedApplication == null)
            {
                return;
            }
            if (refreshAll)
            {
                Action <object> refreshAction = (o) =>
                {
                    Dispatcher.Invoke(() => { ActionInfos.Clear(); }, DispatcherPriority.Loaded);
                    AddActionsToGroup(selectedApplication.Actions);
                };

                if (_addActionTask == null)
                {
                    _addActionTask = Task.Factory.StartNew(refreshAction, null);
                }
                else
                {
                    _addActionTask = _addActionTask.ContinueWith(refreshAction);
                }
            }
            else
            {
                _selecteNewestItem = true;
                var newApp     = selectedApplication.Actions.Where(a => !ActionInfos.Any(ai => ai.Equals(a))).ToList();
                var deletedApp = ActionInfos.Where(ai => !selectedApplication.Actions.Any(ai.Equals)).ToList();

                if (newApp.Count == 1 && deletedApp.Count == 1)
                {
                    var newActionInfo = Action2ActionInfo(newApp[0]);
                    ActionInfos[ActionInfos.IndexOf(deletedApp[0])] = newActionInfo;
                    RefreshGroup(newApp[0].GestureName);
                    SelectAction(newActionInfo);
                }
                else
                {
                    foreach (ActionInfo ai in deletedApp)
                    {
                        ActionInfos.Remove(ai);
                    }
                    AddActionsToGroup(newApp);
                }
            }
        }
コード例 #5
0
ファイル: AvailableActions.cs プロジェクト: Sin96/GestureSign
        private void UserControl_Initialized(object sender, EventArgs eArgs)
        {
            ActionDialog.ActionsChanged += (o, e) =>
            {
                if (lstAvailableApplication.SelectedItem == e.Application)
                {
                    var oldActionInfo =
                        ActionInfos.FirstOrDefault(ai => ai.ActionName.Equals(e.Action.Name, StringComparison.Ordinal));
                    if (oldActionInfo != null)
                    {
                        int index         = ActionInfos.IndexOf(oldActionInfo);
                        var newActionInfo = Action2ActionInfo(e.Action);
                        ActionInfos[index] = newActionInfo;
                        RefreshGroup(e.Action.GestureName);
                        SelectAction(newActionInfo);
                    }
                    else
                    {
                        RefreshActions(false);
                    }
                }
                else
                {
                    BindApplications();
                    _selecteNewestItem = true;
                    lstAvailableApplication.SelectedItem = e.Application;
                    lstAvailableApplication.ScrollIntoView(e.Application);
                }
            };
            AvailableGestures.GestureChanged         += (o, e) => { RefreshActions(true); };
            GestureDefinition.GesturesChanged        += (o, e) => { RefreshActions(true); };
            ApplicationDialog.UserApplicationChanged += (o, e) =>
            {
                BindApplications();
                lstAvailableApplication.SelectedItem = e.Application;
                lstAvailableApplication.ScrollIntoView(e.Application);
            };

            ApplicationManager.OnLoadApplicationsCompleted += (o, e) => { this.Dispatcher.InvokeAsync(BindApplications); };

            if (ApplicationManager.FinishedLoading)
            {
                BindApplications();
            }
        }
コード例 #6
0
ファイル: AvailableActions.cs プロジェクト: Sin96/GestureSign
        private void EnableRelevantButtons()
        {
            cmdDelete.IsEnabled = cmdEdit.IsEnabled = lstAvailableActions.SelectedItems.Count == 1;

            var selectedActionInfo = (lstAvailableActions.SelectedItem as ActionInfo);

            if (selectedActionInfo == null)
            {
                MoveUpButton.IsEnabled = MoveDownButton.IsEnabled = false;
            }
            else
            {
                var actionInfoGroup = ActionInfos.Where(ai => ai.GestureName.Equals(selectedActionInfo.GestureName, StringComparison.Ordinal)).ToList();
                int index           = actionInfoGroup.IndexOf(selectedActionInfo);

                MoveUpButton.IsEnabled   = index != 0;
                MoveDownButton.IsEnabled = index != actionInfoGroup.Count - 1;
            }
        }
コード例 #7
0
ファイル: AvailableActions.cs プロジェクト: Sin96/GestureSign
        private void AddActionsToGroup(List <IAction> actions)
        {
            ActionInfo actionInfo = null;

            foreach (var currentAction in actions)
            {
                actionInfo = Action2ActionInfo(currentAction);

                var info = actionInfo;
                Dispatcher.Invoke(() =>
                {
                    ActionInfos.Add(info);
                }, DispatcherPriority.Input);
            }

            if (actionInfo != null && _selecteNewestItem)
            {
                Dispatcher.Invoke(() =>
                {
                    _selecteNewestItem = false;
                    SelectAction(actionInfo);
                });
            }
        }