Free cookie consent management tool by TermsFeed Policy Generator

Ticket #887: UI_Lag.patch

File UI_Lag.patch, 14.7 KB (added by abeham, 16 years ago)

patch against r2866 that fixes some of the UI lags

  • HeuristicLab.Core.Views/3.3/ItemCollectionView.cs

     
    6464    protected override void OnContentChanged() {
    6565      base.OnContentChanged();
    6666      Caption = "Item Collection";
    67       while (itemsListView.Items.Count > 0) RemoveListViewItem(itemsListView.Items[0]);
    68       itemsListView.Enabled = false;
    69       detailsGroupBox.Enabled = false;
     67      RemoveAllListViewItems();
     68
    7069      viewHost.Content = null;
    71       addButton.Enabled = false;
    72       sortAscendingButton.Enabled = false;
    73       sortDescendingButton.Enabled = false;
     70     
     71      /*
     72       * Where should the following code go? Here: Then it should be removed in RemoveAllListViewItems
     73       * or in RemoveAllListViewItems in which case it should not be repeated here.
     74       * Currently the code is in RemoveAllListViewItems
     75       */
     76      /*sortAscendingButton.Enabled = false;
     77      sortDescendingButton.Enabled = false;*/
     78
    7479      removeButton.Enabled = false;
    7580
    7681      if (Content != null) {
     
    8287        sortAscendingButton.Enabled = itemsListView.Items.Count > 0;
    8388        sortDescendingButton.Enabled = itemsListView.Items.Count > 0;
    8489        SortItemsListView(SortOrder.Ascending);
     90      } else {
     91        itemsListView.Enabled = false;
     92        addButton.Enabled = false;
    8593      }
    8694    }
    8795
     
    116124      sortAscendingButton.Enabled = itemsListView.Items.Count > 0;
    117125      sortDescendingButton.Enabled = itemsListView.Items.Count > 0;
    118126    }
     127    protected virtual void RemoveAllListViewItems() {
     128      while (itemsListView.Items.Count > 0) {
     129        ListViewItem listViewItem = itemsListView.Items[0];
     130        ((T)listViewItem.Tag).Changed -= new ChangedEventHandler(Item_Changed);
     131        listViewItem.Remove();
     132      }
     133      sortAscendingButton.Enabled = false;
     134      sortDescendingButton.Enabled = false;
     135    }
    119136    protected virtual void UpdateListViewItem(ListViewItem listViewItem) {
    120137      if (!listViewItem.Text.Equals(listViewItem.Tag.ToString())) {
    121138        listViewItem.Text = listViewItem.Tag.ToString();
     
    130147    }
    131148
    132149    #region ListView Events
    133     protected virtual void itemsListView_SelectedIndexChanged(object sender, EventArgs e) {
     150    private void itemsListView_MouseUp(object sender, MouseEventArgs e) {
    134151      removeButton.Enabled = itemsListView.SelectedItems.Count > 0 && !Content.IsReadOnly;
    135152      if (itemsListView.SelectedItems.Count == 1) {
    136153        T item = (T)itemsListView.SelectedItems[0].Tag;
    137154        viewHost.Content = item;
    138         detailsGroupBox.Enabled = true;
    139155      } else {
    140156        viewHost.Content = null;
    141         detailsGroupBox.Enabled = false;
    142157      }
    143158    }
     159
     160    private void itemsListView_KeyUp(object sender, KeyEventArgs e) {
     161      if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down
     162        || e.KeyCode == Keys.PageUp || e.KeyCode == Keys.PageDown
     163        || e.KeyCode == Keys.Home || e.KeyCode == Keys.End) {
     164        removeButton.Enabled = itemsListView.SelectedItems.Count > 0 && !Content.IsReadOnly;
     165        if (itemsListView.SelectedItems.Count == 1) {
     166          T item = (T)itemsListView.SelectedItems[0].Tag;
     167          viewHost.Content = item;
     168        } else {
     169          viewHost.Content = null;
     170        }
     171      }
     172    }
    144173    protected virtual void itemsListView_SizeChanged(object sender, EventArgs e) {
    145174      if (itemsListView.Columns.Count > 0)
    146175        itemsListView.Columns[0].Width = Math.Max(0, itemsListView.Width - 25);
     
    269298      itemsListView.Sort();
    270299      itemsListView.Sorting = SortOrder.None;
    271300    }
    272     #endregion
     301    #endregion   
     302
    273303  }
    274304}
  • HeuristicLab.Core.Views/3.3/ItemCollectionView.Designer.cs

     
    111111      this.itemsListView.TabIndex = 4;
    112112      this.itemsListView.UseCompatibleStateImageBehavior = false;
    113113      this.itemsListView.View = System.Windows.Forms.View.Details;
    114       this.itemsListView.SelectedIndexChanged += new System.EventHandler(this.itemsListView_SelectedIndexChanged);
    115114      this.itemsListView.SizeChanged += new System.EventHandler(this.itemsListView_SizeChanged);
    116115      this.itemsListView.DoubleClick += new System.EventHandler(this.itemsListView_DoubleClick);
     116      this.itemsListView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.itemsListView_MouseUp);
    117117      this.itemsListView.DragDrop += new System.Windows.Forms.DragEventHandler(this.itemsListView_DragDrop);
    118118      this.itemsListView.DragEnter += new System.Windows.Forms.DragEventHandler(this.itemsListView_DragEnterOver);
     119      this.itemsListView.KeyUp += new System.Windows.Forms.KeyEventHandler(this.itemsListView_KeyUp);
    119120      this.itemsListView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.itemsListView_KeyDown);
    120121      this.itemsListView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.itemsListView_ItemDrag);
    121122      this.itemsListView.DragOver += new System.Windows.Forms.DragEventHandler(this.itemsListView_DragEnterOver);
  • HeuristicLab.Core.Views/3.3/NamedItemView.cs

     
    6363      if (Content == null) {
    6464        Caption = "NamedItem";
    6565        nameTextBox.Text = "-";
    66         nameTextBox.ReadOnly = false;
    6766        nameTextBox.Enabled = false;
    6867        descriptionTextBox.Text = "";
    69         nameTextBox.ReadOnly = false;
    7068        descriptionTextBox.Enabled = false;
    7169      } else {
    7270        Caption = Content.Name + " (" + Content.GetType().Name + ")";
  • HeuristicLab.Core.Views/3.3/ParameterizedNamedItemView.cs

     
    5252      base.OnContentChanged();
    5353      if (Content == null) {
    5454        parameterCollectionView.Content = null;
    55         parameterCollectionView.Enabled = false;
    5655      } else {
    5756        parameterCollectionView.Content = Content.Parameters;
    58         parameterCollectionView.Enabled = true;
    5957      }
    6058    }
    6159  }
  • HeuristicLab.Core.Views/3.3/ViewHost.cs

     
    3232    public Type ViewType {
    3333      get { return this.viewType; }
    3434      set {
    35         if (value != null && !ViewCanShowContent(value, content))
    36           throw new ArgumentException(string.Format("View \"{0}\" cannot display content \"{1}\".",
    37                                                     value.GetPrettyName(),
    38                                                     content.GetType().GetPrettyName()));
    39         viewType = value;
    40         UpdateView();
     35        if (viewType != value) {
     36          viewType = value;
     37          UpdateView();
     38        }
    4139      }
    4240    }
    4341
     
    6159    }
    6260
    6361    private void Initialize() {
    64       viewsLabel.Enabled = false;
    65       viewsLabel.Visible = false;
    66       viewContextMenuStrip.Enabled = false;
    67       messageLabel.Visible = false;
    68 
    69       if (viewPanel.Controls.Count > 0) viewPanel.Controls[0].Dispose();
    70       viewPanel.Controls.Clear();
    71       viewPanel.Enabled = false;
    72       viewPanel.Visible = false;
    73 
    74       if (Content != null) {
    75         if (viewContextMenuStrip.Items.Count == 0) {
    76           messageLabel.Visible = true;
    77         } else {
    78           viewsLabel.Enabled = true;
    79           viewsLabel.Visible = true;
    80           viewContextMenuStrip.Enabled = true;
    81           messageLabel.Visible = false;
    82         }
    83 
    84         if (!ViewCanShowContent(viewType, Content)) {
    85           viewType = MainFormManager.GetDefaultViewType(Content.GetType());
    86           if ((viewType == null) && (viewContextMenuStrip.Items.Count > 0))  // create first available view if default view is not available
    87             viewType = (Type)viewContextMenuStrip.Items[0].Tag;
    88         }
    89         UpdateView();
     62      if (!ViewCanShowContent(viewType, Content)) {
     63        viewType = MainFormManager.GetDefaultViewType(Content.GetType());
     64        if ((viewType == null) && (viewContextMenuStrip.Items.Count > 0))  // create first available view if default view is not available
     65          viewType = (Type)viewContextMenuStrip.Items[0].Tag;
    9066      }
     67      UpdateView();
    9168    }
    9269
    9370    private void UpdateView() {
    94       if (viewPanel.Controls.Count > 0) viewPanel.Controls[0].Dispose();
    95       viewPanel.Controls.Clear();
     71      if (viewPanel.Controls.Count > 0) {
     72        Control tmp = viewPanel.Controls[0];
     73        viewPanel.Controls.Remove(tmp);
     74        tmp.Dispose();
     75      }
    9676
    97       if (viewType == null || content == null)
     77      if (viewType == null || content == null) {
     78        if (viewsLabel.Visible) viewsLabel.Visible = false;
     79        if (viewContextMenuStrip.Enabled) viewContextMenuStrip.Enabled = false;
    9880        return;
     81      }
    9982
    100       if (!ViewCanShowContent(viewType, content))
     83      // FIXME: It's not a good idea to throw an exception here.
     84      // Such a case should be prevented to occur in those classes that use ViewHost.
     85      // Also ArgumentException seems to be the wrong type of exception to throw (the method doesn't have any arguments).
     86      // From MSDN documentation on ArgumentException: "If the method call does not have any argument or if the failure does not involve the arguments themselves, then InvalidOperationException should be used."
     87      /*if (!ViewCanShowContent(viewType, content))
    10188        throw new ArgumentException(string.Format("View \"{0}\" cannot display content \"{1}\".",
    10289                                                  viewType.GetPrettyName(),
    103                                                   Content.GetType().GetPrettyName()));
     90                                                  Content.GetType().GetPrettyName()));*/
    10491
    105       UpdateActiveMenuItem();
    10692      Control view = (Control)MainFormManager.CreateView(viewType, Content);
     93      this.SuspendLayout();
     94      viewsLabel.Visible = true;
     95      if (viewContextMenuStrip.Items.Count == 0) {
     96        viewsLabel.Enabled = false;
     97        viewContextMenuStrip.Enabled = false;
     98        messageLabel.Visible = true;
     99      } else {
     100        viewsLabel.Enabled = true;
     101        viewContextMenuStrip.Enabled = true;
     102        messageLabel.Visible = false;
     103        UpdateActiveMenuItem();
     104      }
    107105      viewPanel.Controls.Add(view);
    108106      viewPanel.Tag = view;
    109107      view.Dock = DockStyle.Fill;
    110       viewPanel.Enabled = true;
    111       viewPanel.Visible = true;
     108      this.ResumeLayout(false);
    112109    }
    113110
    114111    private void UpdateActiveMenuItem() {
  • HeuristicLab.Core.Views/3.3/ViewHost.Designer.cs

     
    4444    /// the contents of this method with the code editor.
    4545    /// </summary>
    4646    private void InitializeComponent() {
    47       this.components = new System.ComponentModel.Container(); 
     47      this.components = new System.ComponentModel.Container();
    4848      this.viewPanel = new System.Windows.Forms.Panel();
    4949      this.messageLabel = new System.Windows.Forms.Label();
    5050      this.viewsLabel = new System.Windows.Forms.Label();
     
    7171      this.messageLabel.TabIndex = 2;
    7272      this.messageLabel.Text = "No view available.";
    7373      this.messageLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
     74      this.messageLabel.Visible = false;
    7475      //
    7576      // viewsLabel
    7677      //
     
    8182      this.viewsLabel.Name = "viewsLabel";
    8283      this.viewsLabel.Size = new System.Drawing.Size(16, 16);
    8384      this.viewsLabel.TabIndex = 0;
    84       this.toolTip.SetToolTip(this.viewsLabel, "Double-click to open a new window of the current view.\r\nRight-click to change current view.");
     85      this.toolTip.SetToolTip(this.viewsLabel, "Double-click to open a new window of the current view.\r\nRight-click to change cur" +
     86              "rent view.");
     87      this.viewsLabel.Visible = false;
    8588      this.viewsLabel.DoubleClick += new System.EventHandler(this.viewsLabel_DoubleClick);
    8689      //
    8790      // viewContextMenuStrip
    8891      //
     92      this.viewContextMenuStrip.Enabled = false;
    8993      this.viewContextMenuStrip.Item = null;
    9094      this.viewContextMenuStrip.Name = "viewContextMenuStrip";
    9195      this.viewContextMenuStrip.Size = new System.Drawing.Size(61, 4);
  • HeuristicLab.Parameters.Views/3.3/ConstrainedValueParameterView.cs

     
    9090      base.OnContentChanged();
    9191      if (Content == null) {
    9292        Caption = "ConstrainedValueParameter";
    93         valueGroupBox.Enabled = false;
    9493        FillValueComboBox();
    9594        viewHost.Content = null;
    9695      } else {
    9796        Caption = Content.Name + " (" + Content.GetType().Name + ")";
    98         valueGroupBox.Enabled = true;
    9997        FillValueComboBox();
    10098        viewHost.Content = Content.Value;
    10199      }
  • HeuristicLab.Parameters.Views/3.3/ValueParameterView.cs

     
    8585        Caption = "ValueParameter";
    8686        setValueButton.Enabled = false;
    8787        clearValueButton.Enabled = false;
    88         valueGroupBox.Enabled = false;
    8988        viewHost.Content = null;
    9089      } else {
    9190        Caption = Content.Name + " (" + Content.GetType().Name + ")";
    9291        setValueButton.Enabled = Content.Value == null;
    9392        clearValueButton.Enabled = Content.Value != null;
    94         valueGroupBox.Enabled = true;
    9593        viewHost.Content = Content.Value;
    9694      }
    9795    }