private void PopulateComboBox()
        {
            Program.AssertOnEventThread();

            ClearDataGridView();

            updatingDestinationCombobox = true;
            ClearComboBox();

            var targetConnections = ConnectionsManager.XenConnectionsCopy.Where(con => con.IsConnected).Except(ignoredConnections).ToList();

            foreach (var xenConnection in targetConnections)
            {
                DelayLoadingOptionComboBoxItem item = null;

                Pool pool = Helpers.GetPool(xenConnection);

                if (pool == null)
                {
                    Host host = Helpers.GetMaster(xenConnection);

                    if (host != null)
                    {
                        item = CreateDelayLoadingOptionComboBoxItem(host);
                        m_comboBoxConnection.Items.Add(item);
                        item.ReasonUpdated += DelayLoadedComboBoxItem_ReasonChanged;
                        item.LoadAsync();
                        host.PropertyChanged -= PropertyChanged;
                        host.PropertyChanged += PropertyChanged;
                    }
                }
                else
                {
                    item = CreateDelayLoadingOptionComboBoxItem(pool);
                    m_comboBoxConnection.Items.Add(item);
                    item.ReasonUpdated += DelayLoadedComboBoxItem_ReasonChanged;
                    item.LoadAsync();
                    pool.PropertyChanged -= PropertyChanged;
                    pool.PropertyChanged += PropertyChanged;
                }

                if (item != null && m_selectedObject != null && item.Item.Connection == m_selectedObject.Connection)
                {
                    item.PreferAsSelectedItem = true;
                }

                xenConnection.ConnectionStateChanged -= xenConnection_ConnectionStateChanged;
                xenConnection.ConnectionStateChanged += xenConnection_ConnectionStateChanged;
                xenConnection.CachePopulated         -= xenConnection_CachePopulated;
                xenConnection.CachePopulated         += xenConnection_CachePopulated;
                xenConnection.Cache.RegisterCollectionChanged <Host>(Host_CollectionChangedWithInvoke);
            }

            m_comboBoxConnection.Items.Add(new AddHostExecutingComboBoxItem());
            updatingDestinationCombobox = false;
        }
Esempio n. 2
0
        private void PopulateDataGridView(IEnableableXenObjectComboBoxItem selectedItem)
        {
            Program.AssertOnEventThread();

            updatingHomeServerList = true;
            try
            {
                var target = m_comboBoxConnection.SelectedItem as DelayLoadingOptionComboBoxItem;

                m_dataGridView.SuspendLayout();

                ClearDataGridView();

                var hasPoolSharedStorage = target != null && HasPoolSharedStorage(target.Item.Connection);

                foreach (var kvp in m_vmMappings)
                {
                    var tb = new DataGridViewTextBoxCell {
                        Value = kvp.Value.VmNameLabel, Tag = kvp.Key
                    };
                    var cb = new DataGridViewEnableableComboBoxCell {
                        FlatStyle = FlatStyle.Flat
                    };
                    var homeserverFilters = CreateTargetServerFilterList(selectedItem, new List <string> {
                        kvp.Key
                    });

                    if (target != null)
                    {
                        if (hasPoolSharedStorage)
                        {
                            foreach (var pool in target.Item.Connection.Cache.Pools)
                            {
                                var item = new NoTargetServerPoolItem(pool);
                                cb.Items.Add(item);

                                if ((m_selectedObject != null && m_selectedObject.opaque_ref == pool.opaque_ref) ||
                                    (target.Item.opaque_ref == pool.opaque_ref))
                                {
                                    cb.Value = item;
                                }

                                break; //there exists one pool per connection
                            }
                        }

                        var sortedHosts = new List <Host>(target.Item.Connection.Cache.Hosts);
                        sortedHosts.Sort();

                        foreach (var host in sortedHosts)
                        {
                            var item = new DelayLoadingOptionComboBoxItem(host, homeserverFilters);
                            cb.Items.Add(item);
                            item.ParentComboBox       = cb;
                            item.PreferAsSelectedItem = m_selectedObject != null && m_selectedObject.opaque_ref == host.opaque_ref ||
                                                        target.Item.opaque_ref == host.opaque_ref;
                            item.ReasonUpdated += DelayLoadedGridComboBoxItem_ReasonChanged;
                            item.LoadAsync();
                        }
                    }

                    SetComboBoxPreSelection(cb);

                    var row = new DataGridViewRow();
                    row.Cells.AddRange(tb, cb);
                    m_dataGridView.Rows.Add(row);
                }

                HelpersGUI.ResizeGridViewColumnToAllCells(m_colTarget); //set properly the width of the last column

                if (restoreGridHomeServerSelection)
                {
                    RestoreGridHomeServerSelectionFromMapping();
                    restoreGridHomeServerSelection = false;
                }
            }
            finally
            {
                updatingHomeServerList = false;
                m_dataGridView.ResumeLayout();
            }
        }