private void CleanupDynamicallyAddedItems()
 {
     DropDownItems
     .OfType <CopyToClipboardToolStripMenuItem>()
     .ToArray()
     .ForEach(i => DropDownItems.Remove(i));
 }
 void param_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
 {
     if (e.PropertyName == "Name")
     {
         var item = DropDownItems.OfType <ToolStripMenuItem>().FirstOrDefault(s => s.Tag == sender);
         if (item != null)
         {
             item.Text = (sender as QueryParam).Name.DefaultForEmpty("<未命名>");
         }
     }
 }
Exemplo n.º 3
0
 /// <summary>Works around a MONO bug by explicitly disposing its Items</summary>
 protected override void Dispose(bool disposing)
 {
     Debug.WriteLineIf(!disposing, "****** Missing Dispose() call for " + GetType() + " ******");
     if (disposing)
     {
         // BUG: MONO neglects to dispose DropDownItems. Do it now:
         foreach (var disposable in DropDownItems.OfType <IDisposable>().ToArray())
         {
             disposable.Dispose();
         }
     }
     base.Dispose(disposing);
 }
        private void EnableAppropriateHostsNoWlb()
        {
            if (Stopped || DropDownItems.Count == 0)
            {
                return;
            }

            var firstItem = DropDownItems[0] as VMOperationToolStripMenuSubItem;

            if (firstItem == null)
            {
                return;
            }

            // API calls could happen in CanExecute(), which take time to wait. So a Producer-Consumer-Queue with size 25 is used here to :
            //   1. Make API calls for different menu items happen in parallel;
            //   2. Limit the count of concurrent threads (now it's 25).
            workerQueueWithoutWlb = new ProduceConsumerQueue(25);

            var selection  = Command.GetSelection();
            var connection = selection[0].Connection;
            var session    = connection.DuplicateSession();

            var affinityHost = connection.Resolve(((VM)selection[0].XenObject).affinity);

            EnqueueHostMenuItem(this, session, affinityHost, firstItem, true);

            var hostMenuItems = DropDownItems.OfType <VMOperationToolStripMenuSubItem>().ToList();

            if (Stopped)
            {
                return;
            }

            foreach (VMOperationToolStripMenuSubItem item in hostMenuItems)
            {
                var host = item.Tag as Host;
                if (host != null)
                {
                    var tempItem = item;
                    EnqueueHostMenuItem(this, session, host, tempItem, false);
                }
            }
        }
        void param_PersistentChanged(object sender, EventArgs e)
        {
            var param = sender as QueryParam;

            if (param.IsPersistent)
            {
                //添加
                var item = DropDownItems.OfType <ToolStripMenuItem>().FirstOrDefault(s => s.Tag == param);
                if (item == null)
                {
                    item = new ToolStripMenuItem(param.Name.DefaultForEmpty("<未命名>"))
                    {
                        Tag = param
                    };
                    item.Click += (x, y) =>
                    {
                        var p = ((x as ToolStripMenuItem).Tag as QueryParam);
                        p.IsLoaded = true;
                        Session.UserProfile.QueryParams.SelectedQuery = p;
                        MainForm.Instance.SelectedSession             = Session;
                    };
                    DropDownItems.Add(item);
                }
                _emptyItem.Visible = false;
            }
            else
            {
                //删除
                var item = DropDownItems.OfType <ToolStripMenuItem>().FirstOrDefault(s => s.Tag == param);
                if (item != null)
                {
                    DropDownItems.Remove(item);
                }
                _emptyItem.Visible = DropDownItems.OfType <ToolStripMenuItem>().All(s => s.Tag == null);
            }
        }