Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/16/10 17:14:35 (15 years ago)
Author:
gkronber
Message:

Worked on multi-select behavior of list views in deployment server interfaces. #891 (Refactor GUI for plugin management)

Location:
trunk/sources/HeuristicLab.PluginInfrastructure
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/ConnectionSetupView.cs

    r3006 r3068  
    4747        form = new Form();
    4848        form.Name = this.Name;
     49        form.Size = this.Size;
    4950        this.Dock = DockStyle.Fill;
    5051        form.Controls.Add(this);
  • trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/LocalPluginManager.Designer.cs

    r3006 r3068  
    2626      this.components = new System.ComponentModel.Container();
    2727      System.Windows.Forms.ListViewGroup listViewGroup1 = new System.Windows.Forms.ListViewGroup("Active Plugins", System.Windows.Forms.HorizontalAlignment.Left);
    28       System.Windows.Forms.ListViewGroup listViewGroup2 = new System.Windows.Forms.ListViewGroup("Disabled Plugins", System.Windows.Forms.HorizontalAlignment.Left);
    29       this.localPluginsListView = new System.Windows.Forms.ListView();
    30       this.pluginNameHeader = new System.Windows.Forms.ColumnHeader();
     28      System.Windows.Forms.ListViewGroup listViewGroup2 = new System.Windows.Forms.ListViewGroup("Inactive Plugins", System.Windows.Forms.HorizontalAlignment.Left);
     29      this.imageListForLocalItems = new System.Windows.Forms.ImageList(this.components);
     30      this.localPluginsListView = new HeuristicLab.PluginInfrastructure.Advanced.MultiSelectListView();
     31      this.nameHeader = new System.Windows.Forms.ColumnHeader();
    3132      this.versionHeader = new System.Windows.Forms.ColumnHeader();
    32       this.pluginDescriptionHeader = new System.Windows.Forms.ColumnHeader();
    33       this.imageListForLocalItems = new System.Windows.Forms.ImageList(this.components);
     33      this.descriptionHeader = new System.Windows.Forms.ColumnHeader();
    3434      this.SuspendLayout();
     35      //
     36      // imageListForLocalItems
     37      //
     38      this.imageListForLocalItems.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
     39      this.imageListForLocalItems.ImageSize = new System.Drawing.Size(13, 13);
     40      this.imageListForLocalItems.TransparentColor = System.Drawing.Color.Transparent;
    3541      //
    3642      // localPluginsListView
     
    3844      this.localPluginsListView.CheckBoxes = true;
    3945      this.localPluginsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
    40             this.pluginNameHeader,
     46            this.nameHeader,
    4147            this.versionHeader,
    42             this.pluginDescriptionHeader});
     48            this.descriptionHeader});
    4349      this.localPluginsListView.Dock = System.Windows.Forms.DockStyle.Fill;
    44       this.localPluginsListView.FullRowSelect = true;
    4550      listViewGroup1.Header = "Active Plugins";
    4651      listViewGroup1.Name = "activePluginsGroup";
    47       listViewGroup2.Header = "Disabled Plugins";
    48       listViewGroup2.Name = "disabledPluginsGroup";
     52      listViewGroup2.Header = "Inactive Plugins";
     53      listViewGroup2.Name = "inactivePluginsGroup";
    4954      this.localPluginsListView.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] {
    5055            listViewGroup1,
     
    5459      this.localPluginsListView.Size = new System.Drawing.Size(570, 547);
    5560      this.localPluginsListView.StateImageList = this.imageListForLocalItems;
    56       this.localPluginsListView.TabIndex = 8;
     61      this.localPluginsListView.SuppressItemCheckedEvents = false;
     62      this.localPluginsListView.TabIndex = 9;
    5763      this.localPluginsListView.UseCompatibleStateImageBehavior = false;
    5864      this.localPluginsListView.View = System.Windows.Forms.View.Details;
     
    6066      this.localPluginsListView.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.pluginsListView_ItemChecked);
    6167      //
    62       // pluginNameHeader
     68      // nameHeader
    6369      //
    64       this.pluginNameHeader.Text = "Name";
    65       this.pluginNameHeader.Width = 220;
     70      this.nameHeader.Text = "Name";
     71      this.nameHeader.Width = 155;
    6672      //
    6773      // versionHeader
    6874      //
    6975      this.versionHeader.Text = "Version";
    70       this.versionHeader.Width = 120;
     76      this.versionHeader.Width = 92;
    7177      //
    72       // pluginDescriptionHeader
     78      // descriptionHeader
    7379      //
    74       this.pluginDescriptionHeader.Text = "Description";
    75       this.pluginDescriptionHeader.Width = 243;
    76       //
    77       // imageListForLocalItems
    78       //
    79       this.imageListForLocalItems.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
    80       this.imageListForLocalItems.ImageSize = new System.Drawing.Size(13, 13);
    81       this.imageListForLocalItems.TransparentColor = System.Drawing.Color.Transparent;
     80      this.descriptionHeader.Text = "Description";
     81      this.descriptionHeader.Width = 316;
    8282      //
    8383      // LocalPluginManager
     
    9494    #endregion
    9595
    96     private System.Windows.Forms.ListView localPluginsListView;
    97     private System.Windows.Forms.ColumnHeader pluginNameHeader;
     96    private System.Windows.Forms.ImageList imageListForLocalItems;
     97    private MultiSelectListView localPluginsListView;
     98    private System.Windows.Forms.ColumnHeader nameHeader;
    9899    private System.Windows.Forms.ColumnHeader versionHeader;
    99     private System.Windows.Forms.ColumnHeader pluginDescriptionHeader;
    100     private System.Windows.Forms.ImageList imageListForLocalItems;
     100    private System.Windows.Forms.ColumnHeader descriptionHeader;
    101101  }
    102102}
  • trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/LocalPluginManager.cs

    r3006 r3068  
    5252    private void UpdateControl() {
    5353      ClearPluginList();
     54      localPluginsListView.SuppressItemCheckedEvents = true;
    5455      foreach (var plugin in plugins) {
    5556        var item = CreateListViewItem(plugin);
     
    6162        localPluginsListView.Items.Add(item);
    6263      }
     64      localPluginsListView.SuppressItemCheckedEvents = false;
    6365    }
    6466
     
    7880      // checked items are marked for removal
    7981      if (e.Item.Checked) {
    80         var plugin = (IPluginDescription)e.Item.Tag;
    81         foreach (ListViewItem item in localPluginsListView.Items) {
    82           var dep = (IPluginDescription)item.Tag;
    83           if (!item.Checked && dep.Dependencies.Contains(plugin)) {
    84             item.Checked = true;
     82        List<ListViewItem> modifiedItems = new List<ListViewItem>();
     83        foreach (ListViewItem item in localPluginsListView.SelectedItems) {
     84          var plugin = (IPluginDescription)item.Tag;
     85          modifiedItems.Add(item);
     86          // also uncheck all dependent plugins
     87          foreach (ListViewItem dependentItem in localPluginsListView.Items) {
     88            var dependent = (IPluginDescription)dependentItem.Tag;
     89            if (!dependentItem.Checked && (from dep in dependent.Dependencies
     90                                           where dep.Name == plugin.Name
     91                                           where dep.Version == plugin.Version
     92                                           select dep).Any()) {
     93              modifiedItems.Add(dependentItem);
     94            }
    8595          }
    8696        }
     97        localPluginsListView.CheckItems(modifiedItems);
     98      } else {
     99        List<ListViewItem> modifiedItems = new List<ListViewItem>();
     100        foreach (ListViewItem item in localPluginsListView.SelectedItems) {
     101          var plugin = (IPluginDescription)item.Tag;
     102          modifiedItems.Add(item);
     103        }
     104        localPluginsListView.UncheckItems(modifiedItems);
    87105      }
    88106      OnItemChecked(e);
  • trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/RemotePluginInstaller.Designer.cs

    r2922 r3068  
    2525    private void InitializeComponent() {
    2626      this.components = new System.ComponentModel.Container();
    27       System.Windows.Forms.ListViewGroup listViewGroup1 = new System.Windows.Forms.ListViewGroup("Available Products", System.Windows.Forms.HorizontalAlignment.Left);
    28       System.Windows.Forms.ListViewGroup listViewGroup2 = new System.Windows.Forms.ListViewGroup("Available Plugins (Most Recent Version)", System.Windows.Forms.HorizontalAlignment.Left);
    29       System.Windows.Forms.ListViewGroup listViewGroup3 = new System.Windows.Forms.ListViewGroup("Available Plugins (All Versions)", System.Windows.Forms.HorizontalAlignment.Left);
    30       this.remotePluginsListView = new System.Windows.Forms.ListView();
    31       this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
    32       this.columnHeader2 = new System.Windows.Forms.ColumnHeader();
    33       this.columnHeader3 = new System.Windows.Forms.ColumnHeader();
     27      System.Windows.Forms.ListViewGroup listViewGroup1 = new System.Windows.Forms.ListViewGroup("Products", System.Windows.Forms.HorizontalAlignment.Left);
     28      System.Windows.Forms.ListViewGroup listViewGroup2 = new System.Windows.Forms.ListViewGroup("New Plugins", System.Windows.Forms.HorizontalAlignment.Left);
     29      System.Windows.Forms.ListViewGroup listViewGroup3 = new System.Windows.Forms.ListViewGroup("All Plugins", System.Windows.Forms.HorizontalAlignment.Left);
    3430      this.imageListForRemoteItems = new System.Windows.Forms.ImageList(this.components);
     31      this.remotePluginsListView = new HeuristicLab.PluginInfrastructure.Advanced.MultiSelectListView();
     32      this.nameHeader = new System.Windows.Forms.ColumnHeader();
     33      this.versionHeader = new System.Windows.Forms.ColumnHeader();
     34      this.descriptionHeader = new System.Windows.Forms.ColumnHeader();
    3535      this.SuspendLayout();
     36      //
     37      // imageListForRemoteItems
     38      //
     39      this.imageListForRemoteItems.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
     40      this.imageListForRemoteItems.ImageSize = new System.Drawing.Size(13, 13);
     41      this.imageListForRemoteItems.TransparentColor = System.Drawing.Color.Transparent;
    3642      //
    3743      // remotePluginsListView
     
    3945      this.remotePluginsListView.CheckBoxes = true;
    4046      this.remotePluginsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
    41             this.columnHeader1,
    42             this.columnHeader2,
    43             this.columnHeader3});
     47            this.nameHeader,
     48            this.versionHeader,
     49            this.descriptionHeader});
    4450      this.remotePluginsListView.Dock = System.Windows.Forms.DockStyle.Fill;
    45       this.remotePluginsListView.FullRowSelect = true;
    46       listViewGroup1.Header = "Available Products";
     51      listViewGroup1.Header = "Products";
    4752      listViewGroup1.Name = "productsGroup";
    48       listViewGroup2.Header = "Available Plugins (Most Recent Version)";
     53      listViewGroup2.Header = "New Plugins";
    4954      listViewGroup2.Name = "newPluginsGroup";
    50       listViewGroup3.Header = "Available Plugins (All Versions)";
     55      listViewGroup3.Header = "All Plugins";
    5156      listViewGroup3.Name = "allPluginsGroup";
    5257      this.remotePluginsListView.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] {
     
    5863      this.remotePluginsListView.Size = new System.Drawing.Size(533, 558);
    5964      this.remotePluginsListView.StateImageList = this.imageListForRemoteItems;
    60       this.remotePluginsListView.TabIndex = 10;
     65      this.remotePluginsListView.SuppressItemCheckedEvents = false;
     66      this.remotePluginsListView.TabIndex = 0;
    6167      this.remotePluginsListView.UseCompatibleStateImageBehavior = false;
    6268      this.remotePluginsListView.View = System.Windows.Forms.View.Details;
    6369      this.remotePluginsListView.ItemChecked += new System.Windows.Forms.ItemCheckedEventHandler(this.remotePluginsListView_ItemChecked);
    6470      //
    65       // columnHeader1
     71      // nameHeader
    6672      //
    67       this.columnHeader1.Text = "Name";
    68       this.columnHeader1.Width = 220;
     73      this.nameHeader.Text = "Name";
     74      this.nameHeader.Width = 115;
    6975      //
    70       // columnHeader2
     76      // versionHeader
    7177      //
    72       this.columnHeader2.Text = "Version";
    73       this.columnHeader2.Width = 120;
     78      this.versionHeader.Text = "Version";
     79      this.versionHeader.Width = 161;
    7480      //
    75       // columnHeader3
     81      // descriptionHeader
    7682      //
    77       this.columnHeader3.Text = "Description";
    78       this.columnHeader3.Width = 240;
    79       //
    80       // imageListForRemoteItems
    81       //
    82       this.imageListForRemoteItems.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
    83       this.imageListForRemoteItems.ImageSize = new System.Drawing.Size(13, 13);
    84       this.imageListForRemoteItems.TransparentColor = System.Drawing.Color.Transparent;
     83      this.descriptionHeader.Text = "Description";
     84      this.descriptionHeader.Width = 250;
    8585      //
    8686      // RemotePluginInstaller
     
    9797    #endregion
    9898
    99     private System.Windows.Forms.ListView remotePluginsListView;
    100     private System.Windows.Forms.ColumnHeader columnHeader1;
    101     private System.Windows.Forms.ColumnHeader columnHeader2;
    102     private System.Windows.Forms.ColumnHeader columnHeader3;
    10399    private System.Windows.Forms.ImageList imageListForRemoteItems;
     100    private MultiSelectListView remotePluginsListView;
     101    private System.Windows.Forms.ColumnHeader nameHeader;
     102    private System.Windows.Forms.ColumnHeader versionHeader;
     103    private System.Windows.Forms.ColumnHeader descriptionHeader;
    104104  }
    105105}
  • trunk/sources/HeuristicLab.PluginInfrastructure/Advanced/RemotePluginInstaller.cs

    r2922 r3068  
    7272    private void UpdateControl() {
    7373      ClearListView();
    74 
     74      remotePluginsListView.SuppressItemCheckedEvents = true;
    7575      foreach (var newPlugin in NewPlugins) {
    7676        var item = CreateListViewItem(newPlugin);
     
    9090        remotePluginsListView.Items.Add(item);
    9191      }
     92      remotePluginsListView.SuppressItemCheckedEvents = false;
    9293    }
    9394
     
    111112    #region item checked event handler
    112113    private void remotePluginsListView_ItemChecked(object sender, ItemCheckedEventArgs e) {
    113       // dispatch by check state and type of item (product/plugin)
    114       IPluginDescription plugin = e.Item.Tag as IPluginDescription;
    115       if (plugin != null)
    116         if (e.Item.Checked)
    117           HandlePluginChecked(plugin);
    118         else
    119           HandlePluginUnchecked(plugin);
    120       else {
    121         DeploymentService.ProductDescription product = e.Item.Tag as DeploymentService.ProductDescription;
    122         if (product != null)
     114      foreach (ListViewItem item in remotePluginsListView.SelectedItems) {
     115        // dispatch by check state and type of item (product/plugin)
     116        IPluginDescription plugin = item.Tag as IPluginDescription;
     117        if (plugin != null)
    123118          if (e.Item.Checked)
    124             HandleProductChecked(product);
     119            HandlePluginChecked(plugin);
    125120          else
    126             HandleProductUnchecked(product);
     121            HandlePluginUnchecked(plugin);
     122        else {
     123          DeploymentService.ProductDescription product = item.Tag as DeploymentService.ProductDescription;
     124          if (product != null)
     125            if (e.Item.Checked)
     126              HandleProductChecked(product);
     127            else
     128              HandleProductUnchecked(product);
     129        }
    127130      }
    128131      OnItemChecked(e);
     
    131134    private void HandleProductUnchecked(HeuristicLab.PluginInfrastructure.Advanced.DeploymentService.ProductDescription product) {
    132135      // also uncheck the plugins of the product
     136      List<ListViewItem> modifiedItems = new List<ListViewItem>();
     137      modifiedItems.Add(FindItemForProduct(product));
    133138      foreach (var plugin in product.Plugins) {
    134139        var item = FindItemForPlugin(plugin);
    135140        if (item != null && item.Checked)
    136           item.Checked = false;
    137       }
     141          modifiedItems.Add(item);
     142      }
     143      remotePluginsListView.UncheckItems(modifiedItems);
    138144    }
    139145
    140146    private void HandleProductChecked(HeuristicLab.PluginInfrastructure.Advanced.DeploymentService.ProductDescription product) {
    141147      // also check all plugins of the product
     148      List<ListViewItem> modifiedItems = new List<ListViewItem>();
     149      modifiedItems.Add(FindItemForProduct(product));
    142150      foreach (var plugin in product.Plugins) {
    143151        var item = FindItemForPlugin(plugin);
    144152        if (item != null && !item.Checked) {
    145           item.Checked = true;
    146         }
    147       }
     153          modifiedItems.Add(item);
     154        }
     155      }
     156      remotePluginsListView.CheckItems(modifiedItems);
    148157    }
    149158
    150159    private void HandlePluginUnchecked(IPluginDescription plugin) {
    151160      // also uncheck all dependent plugins
     161      List<ListViewItem> modifiedItems = new List<ListViewItem>();
     162      modifiedItems.Add(FindItemForPlugin(plugin));
    152163      var dependentPlugins = from otherPlugin in plugins
    153164                             where otherPlugin.Dependencies.Any(dep => dep.Name == plugin.Name && dep.Version == plugin.Version)
     
    156167        var item = FindItemForPlugin(dependentPlugin);
    157168        if (item != null && item.Checked) {
    158           item.Checked = false;
     169          modifiedItems.Add(item);
    159170        }
    160171      }
     
    166177        var item = FindItemForProduct(dependentProduct);
    167178        if (item != null && item.Checked) {
    168           item.Checked = false;
    169         }
    170       }
     179          modifiedItems.Add(item);
     180        }
     181      }
     182      remotePluginsListView.UncheckItems(modifiedItems);
    171183    }
    172184
    173185    private void HandlePluginChecked(IPluginDescription plugin) {
    174186      // also check all dependencies
     187      List<ListViewItem> modifiedItems = new List<ListViewItem>();
     188      modifiedItems.Add(FindItemForPlugin(plugin));
    175189      foreach (var dep in plugin.Dependencies) {
    176190        var item = FindItemForPlugin(dep);
    177191        if (item != null && !item.Checked) {
    178           item.Checked = true;
    179         }
    180       }
     192          modifiedItems.Add(item);
     193        }
     194      }
     195      remotePluginsListView.CheckItems(modifiedItems);
    181196    }
    182197
  • trunk/sources/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj

    r3006 r3068  
    139139    <Compile Include="Advanced\InstallationManagerControl.Designer.cs">
    140140      <DependentUpon>InstallationManagerControl.cs</DependentUpon>
     141    </Compile>
     142    <Compile Include="Advanced\MultiSelectListView.cs">
     143      <SubType>Component</SubType>
     144    </Compile>
     145    <Compile Include="Advanced\MultiSelectListView.Designer.cs">
     146      <DependentUpon>MultiSelectListView.cs</DependentUpon>
    141147    </Compile>
    142148    <Compile Include="Advanced\PluginView.cs">
Note: See TracChangeset for help on using the changeset viewer.