示例#1
0
        void IView.UpdateItems(IList <ViewItem> items)
        {
            using (new ScopedGuard(
                       () => {
                dropDownPanel.SuspendLayout();
                updateLock = true;
            },
                       () => {
                dropDownPanel.ResumeLayout();
                updateLock = false;
            }
                       ))
            {
                UpdateToolStripControls(mainToolStripControls, items.FirstOrDefault());

                var existingControls = dropDownPanel.Controls.OfType <ExtendedToolStrip>().ToList();

                int idx = 0;
                foreach (var item in items)
                {
                    var row = existingControls.LastOrDefault();
                    if (row != null)
                    {
                        existingControls.RemoveAt(existingControls.Count - 1);
                    }
                    else
                    {
                        row = new ExtendedToolStrip()
                        {
                            GripStyle        = ToolStripGripStyle.Hidden,
                            ImageScalingSize = mainToolStrip.ImageScalingSize,
                            Font             = mainToolStrip.Font,
                            TabStop          = true,
                        };
                        row.Tag = AddToolStripControls(row);
                        dropDownPanel.Controls.Add(row);
                        dropDownPanel.Controls.SetChildIndex(row, 0);
                    }

                    var ctrls = (ToolStripControls)row.Tag;
                    ctrls.dropdownBtnShowsList = (idx == 0) ? false : new bool?();
                    UpdateToolStripControls(ctrls, item);

                    ++idx;
                }

                existingControls.ForEach(c => c.Dispose());

                UpdateToolStripTextSizes();
            }
        }
示例#2
0
        ToolStripControls AddToolStripControls(ExtendedToolStrip toolstrip)
        {
            var ctrls = new ToolStripControls()
            {
                toolStrip = toolstrip
            };

            ctrls.dropdownBtn = new ToolStripButton()
            {
                DisplayStyle = ToolStripItemDisplayStyle.Image,
            };
            ctrls.visibleCb = new CheckBox()
            {
                Padding = new Padding(0, 3, 0, 0),
            };
            ctrls.visibleCbHost = new ToolStripControlHost(ctrls.visibleCb)
            {
                Padding = new Padding(3, 0, 3, 0)                 // todo: check if scaling by DPI is needed
            };
            ctrls.pinnedBtn = new ToolStripButton()
            {
                DisplayStyle = ToolStripItemDisplayStyle.Image,
            };
            ctrls.textLabel = new ProgressToolStripLabel()
            {
                Padding   = new Padding(6, 0, 0, 0),
                TextAlign = ContentAlignment.MiddleLeft,
                AutoSize  = false,
            };
            toolstrip.Items.AddRange(new ToolStripItem[]
            {
                ctrls.dropdownBtn,
                ctrls.visibleCbHost,
                ctrls.pinnedBtn,
                ctrls.textLabel
            });
            toolstrip.ContextMenu = new ContextMenu(new[]
            {
                ctrls.visibleMenuItem           = new MenuItem("Visible", (s, e) => viewModel.OnMenuItemClicked(ctrls.currentItem, MenuItemId.Visible)),
                ctrls.pinnedMenuItem            = new MenuItem("Pinned", (s, e) => viewModel.OnMenuItemClicked(ctrls.currentItem, MenuItemId.Pinned)),
                ctrls.visibleOnTimelineMenuItem = new MenuItem("Display on timeline", (s, e) => viewModel.OnMenuItemClicked(ctrls.currentItem, MenuItemId.VisibleOnTimeline)),
                ctrls.deleteSeparatorMenuItem   = new MenuItem("-"),
                ctrls.deleteMenuItem            = new MenuItem("Delete", (s, e) => viewModel.OnMenuItemClicked(ctrls.currentItem, MenuItemId.Delete)),
            });
            return(ctrls);
        }
示例#3
0
        void IView.SetViewModel(IViewModel viewModel)
        {
            this.viewModel = viewModel;

            var itemsUpdater = Updaters.Create(
                () => viewModel.Items,
                items =>
            {
                using (new ScopedGuard(
                           () => {
                    dropDownPanel.SuspendLayout();
                    updateLock = true;
                },
                           () => {
                    dropDownPanel.ResumeLayout();
                    updateLock = false;
                }
                           ))
                {
                    UpdateToolStripControls(mainToolStripControls, items.FirstOrDefault());

                    var existingControls = dropDownPanel.Controls.OfType <ExtendedToolStrip>().ToList();

                    int idx = 0;
                    foreach (var item in items)
                    {
                        var row = existingControls.LastOrDefault();
                        if (row != null)
                        {
                            existingControls.RemoveAt(existingControls.Count - 1);
                        }
                        else
                        {
                            row = new ExtendedToolStrip()
                            {
                                GripStyle        = ToolStripGripStyle.Hidden,
                                ImageScalingSize = mainToolStrip.ImageScalingSize,
                                Font             = mainToolStrip.Font,
                                TabStop          = true,
                            };
                            row.Tag = AddToolStripControls(row);
                            dropDownPanel.Controls.Add(row);
                            dropDownPanel.Controls.SetChildIndex(row, 0);
                        }

                        var ctrls = (ToolStripControls)row.Tag;
                        ctrls.dropdownBtnShowsList = (idx == 0) ? false : new bool?();
                        UpdateToolStripControls(ctrls, item);

                        ++idx;
                    }

                    existingControls.ForEach(c => c.Dispose());

                    UpdateToolStripTextSizes();
                }
            }
                );
            var updateVisiblity = Updaters.Create(() => viewModel.IsSearchResultsVisible, value =>
            {
                if (SearchResultsSplitContainer != null)
                {
                    SearchResultsSplitContainer.Panel2Collapsed = !value;
                }
            });

            viewModel.ChangeNotification.CreateSubscription(() =>
            {
                itemsUpdater();
                updateVisiblity();
            });
        }