public void ReOrderOptionGroups(int sourceIndex, int targetIndex)
        {
            IOptionGroupViewModel sourceViewModel = this.OptionGroups[sourceIndex];

            this.OptionGroups.RemoveAt(sourceIndex);
            this.EditedCharacter.RemoveOptionGroupAt(sourceIndex);
            this.OptionGroups.Insert(targetIndex, sourceViewModel);
            this.EditedCharacter.InsertOptionGroup(targetIndex, sourceViewModel.OptionGroup);

            this.eventAggregator.GetEvent <SaveCrowdEvent>().Publish(null);
        }
        private void GroupBox_PreviewDrop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(Constants.OPTION_DRAG_KEY))
            {
                expanderExpandedForDrop = false;
                GroupBox groupBox = (GroupBox)sender;
                Tuple <IOptionGroupViewModel, int, ICharacterOption> dragDropDataTuple = e.Data.GetData(Constants.OPTION_DRAG_KEY) as Tuple <IOptionGroupViewModel, int, ICharacterOption>;
                if (dragDropDataTuple != null)
                {
                    IOptionGroupViewModel sourceViewModel = dragDropDataTuple.Item1;
                    int sourceIndex         = dragDropDataTuple.Item2;
                    ICharacterOption option = dragDropDataTuple.Item3;
                    if (this.viewModel.OptionGroup.Type == OptionType.Mixed && sourceViewModel.OptionGroup.Type != OptionType.Mixed) // do a copy paste
                    {
                        sourceIndex = -1;
                    }
                    int targetIndex = 0;

                    ListBoxItem listBoxItem;
                    FindDropTarget(groupBox, out listBoxItem, e);
                    if (listBoxItem != null)
                    {
                        ICharacterOption target = listBoxItem.DataContext as ICharacterOption;
                        if (dragDropDataTuple != null && target != null)
                        {
                            targetIndex = optionListBox.Items.IndexOf(target);
                        }
                    }
                    else
                    {
                        targetIndex = optionListBox.Items != null ? optionListBox.Items.Count : 0; // append to last of current option group
                        if (sourceIndex >= 0 && this.viewModel == sourceViewModel)                 // an item will be removed from the current option group, so reduce target index by 1
                        {
                            targetIndex -= 1;
                        }
                    }
                    if (sourceViewModel != null && sourceIndex >= 0)
                    {
                        sourceViewModel.RemoveOption(sourceIndex);
                    }
                    this.viewModel.InsertOption(targetIndex, option);
                    this.viewModel.SaveOptionGroup();
                }
            }
        }
        public OptionGroupView()
        {
            InitializeComponent();

            this.DataContextChanged += (sender, e) =>
            {
                this.viewModel = this.DataContext as IOptionGroupViewModel;
                this.viewModel.EditModeEnter += viewModel_EditModeEnter;
                this.viewModel.EditModeLeave += viewModel_EditModeLeave;
            };
            Style itemContainerStyle = this.optionListBox.ItemContainerStyle;

            if (itemContainerStyle != null && itemContainerStyle.Setters != null)
            {
                itemContainerStyle.Setters.Add(new Setter(ListBoxItem.AllowDropProperty, true));

                itemContainerStyle.Setters.Add(new EventSetter(ListBoxItem.PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(ListBoxItem_PreviewMouseLeftButtonDown)));
                itemContainerStyle.Setters.Add(new EventSetter(ListBoxItem.PreviewMouseLeftButtonUpEvent, new MouseButtonEventHandler(ListBoxItem_PreviewMouseLeftButtonUp)));
            }
        }
Example #4
0
 private void ListView_PreviewDrop(object sender, DragEventArgs e)
 {
     if (e.Data.GetDataPresent(Constants.OPTION_GROUP_DRAG_KEY))
     {
         string       draggingOPtionGroupName = e.Data.GetData(Constants.OPTION_GROUP_DRAG_KEY) as string;
         ListViewItem listViewItem;
         FindDropTarget(sender as ListView, out listViewItem, e);
         if (listViewItem != null)
         {
             IOptionGroupViewModel targetViewModel = listViewItem.DataContext as IOptionGroupViewModel;
             if (targetViewModel.OptionGroup.Name != draggingOPtionGroupName)
             {
                 var sourceViewModel = this.viewModel.OptionGroups.FirstOrDefault(vm => vm.OptionGroup.Name == draggingOPtionGroupName);
                 int sourceIndex     = this.viewModel.OptionGroups.IndexOf(sourceViewModel);
                 int targetIndex     = this.viewModel.OptionGroups.IndexOf(targetViewModel);
                 this.viewModel.ReOrderOptionGroups(sourceIndex, targetIndex);
             }
         }
     }
 }
 private void grpBoxOptionGroup_PreviewDragOver(object sender, DragEventArgs e)
 {
     if (!e.Data.GetDataPresent(Constants.OPTION_DRAG_KEY) || sender == e.Source)
     {
         e.Effects = DragDropEffects.None;
     }
     else
     {
         Tuple <IOptionGroupViewModel, int, ICharacterOption> dragDropDataTuple = e.Data.GetData(Constants.OPTION_DRAG_KEY) as Tuple <IOptionGroupViewModel, int, ICharacterOption>;
         IOptionGroupViewModel sourceViewModel = dragDropDataTuple.Item1;
         if (sourceViewModel != this.viewModel && this.viewModel.OptionGroup.Type != OptionType.Mixed)
         {
             e.Effects = DragDropEffects.None;
         }
     }
     if (e.Effects != DragDropEffects.None && !this.ExpanderOptionGroup.IsExpanded)
     {
         this.ExpanderOptionGroup.IsExpanded = expanderExpandedForDrop = true;
     }
     e.Handled = true;
 }