示例#1
0
        private void BtnAddClick(object sender, EventArgs e)
        {
            using (var dialog = new AddConditionDialog(ServiceProvider, null))
            {
                if (dialog.ShowDialog() != DialogResult.OK)
                {
                    return;
                }

                var newItem      = dialog.Item;
                var listViewItem = new ConditionListViewItem(newItem);
                lvConditions.Items.Add(listViewItem);
                listViewItem.Selected = true;
            }
            InformChanges();
        }
示例#2
0
        public AddPreConditionDialog(IServiceProvider serviceProvider, PreConditionItem existing)
            : base(serviceProvider)
        {
            InitializeComponent();
            Item = existing ?? new PreConditionItem(null);
            if (existing != null)
            {
                txtName.Text             = Item.Name;
                cbUsing.SelectedIndex    = (int)Item.PatternSyntax;
                cbGrouping.SelectedIndex = (int)Item.LogicalGrouping;
                foreach (var condition in Item.Conditions)
                {
                    lvConditions.Items.Add(new ConditionListViewItem(condition));
                }
            }

            var container = new CompositeDisposable();

            FormClosed += (sender, args) => container.Dispose();

            container.Add(
                Observable.FromEventPattern <EventArgs>(btnAdd, "Click")
                .ObserveOn(System.Threading.SynchronizationContext.Current)
                .Subscribe(evt =>
            {
                var dialog = new AddConditionDialog(ServiceProvider, null);
                if (dialog.ShowDialog() != DialogResult.OK)
                {
                    return;
                }

                var newItem = dialog.Item;
                Item.Conditions.Add(newItem);
                var listViewItem = new ConditionListViewItem(newItem);
                lvConditions.Items.Add(listViewItem);
                listViewItem.Selected = true;
            }));

            container.Add(
                Observable.FromEventPattern <EventArgs>(btnRemove, "Click")
                .ObserveOn(System.Threading.SynchronizationContext.Current)
                .Subscribe(evt =>
            {
                var dialog = (IManagementUIService)GetService(typeof(IManagementUIService));
                if (
                    dialog.ShowMessage("Are you sure that you want to remove the selected condition?", "Confirm Remove",
                                       MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) !=
                    DialogResult.Yes)
                {
                    return;
                }

                var listViewItem = ((ConditionListViewItem)lvConditions.SelectedItems[0]);
                listViewItem.Remove();
                var item = listViewItem.Item;
                Item.Conditions.Remove(item);
            }));

            container.Add(
                Observable.FromEventPattern <EventArgs>(btnEdit, "Click")
                .ObserveOn(System.Threading.SynchronizationContext.Current)
                .Subscribe(evt =>
            {
                var listViewItem = ((ConditionListViewItem)lvConditions.SelectedItems[0]);
                var dialog       = new AddConditionDialog(ServiceProvider, listViewItem.Item);
                if (dialog.ShowDialog() != DialogResult.OK)
                {
                    return;
                }

                listViewItem.Update();
            }));

            container.Add(
                Observable.FromEventPattern <EventArgs>(btnMoveDown, "Click")
                .ObserveOn(System.Threading.SynchronizationContext.Current)
                .Subscribe(evt =>
            {
                var listViewItem = ((ConditionListViewItem)lvConditions.SelectedItems[0]);
                var index        = listViewItem.Index;

                var item = listViewItem.Item;
                Item.Conditions.RemoveAt(index);
                listViewItem.Remove();

                Item.Conditions.Insert(index + 1, item);
                lvConditions.Items.Insert(index + 1, listViewItem);
                listViewItem.Selected = true;
            }));

            container.Add(
                Observable.FromEventPattern <EventArgs>(btnMoveUp, "Click")
                .ObserveOn(System.Threading.SynchronizationContext.Current)
                .Subscribe(evt =>
            {
                var listViewItem = ((ConditionListViewItem)lvConditions.SelectedItems[0]);
                var index        = listViewItem.Index;

                var item = listViewItem.Item;
                Item.Conditions.RemoveAt(index);
                listViewItem.Remove();

                Item.Conditions.Insert(index - 1, item);
                lvConditions.Items.Insert(index - 1, listViewItem);
                listViewItem.Selected = true;
            }));

            container.Add(
                Observable.FromEventPattern <ListViewItemSelectionChangedEventArgs>(lvConditions, "ItemSelectionChanged")
                .ObserveOn(System.Threading.SynchronizationContext.Current)
                .Subscribe(evt =>
            {
                var hasSelection    = lvConditions.SelectedItems.Count > 0;
                btnRemove.Enabled   = btnEdit.Enabled = hasSelection;
                btnMoveDown.Enabled = hasSelection && lvConditions.SelectedItems[0].Index < lvConditions.Items.Count - 1;
                btnMoveUp.Enabled   = hasSelection && lvConditions.SelectedItems[0].Index > 0;
            }));

            container.Add(
                Observable.FromEventPattern <EventArgs>(txtName, "TextChanged")
                .Sample(TimeSpan.FromSeconds(1))
                .ObserveOn(System.Threading.SynchronizationContext.Current)
                .Subscribe(evt =>
            {
                btnOK.Enabled = !string.IsNullOrWhiteSpace(txtName.Text);
            }));

            container.Add(
                Observable.FromEventPattern <EventArgs>(btnOK, "Click")
                .ObserveOn(System.Threading.SynchronizationContext.Current)
                .Subscribe(evt =>
            {
                Item.Name            = txtName.Text;
                Item.PatternSyntax   = cbUsing.SelectedIndex;
                Item.LogicalGrouping = cbGrouping.SelectedIndex;
                Item.Conditions.Clear();
                foreach (ConditionListViewItem item in lvConditions.Items)
                {
                    Item.Conditions.Add(item.Item);
                }

                DialogResult = DialogResult.OK;
            }));
        }