Changeset 1526


Ignore:
Timestamp:
1/14/2010 10:58:24 AM (5 years ago)
Author:
lowjoel
Message:

Reviewed the LogForm? class. Addresses #275: Code Review

  • Renamed the class member variables to be CapitalCase?, as standard
  • The SelectedEntries? variable is now a SortedList?<int, LogEntry?> for easier comprehension of the code - the value type of object made it non-obvious as to the purpose of the variable
  • Optimised the following functions:
    • copySelectedEntriesToolStripMenuItem_Click
    • log_ItemActivate
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eraser6/CodeReview/Eraser/LogForm.cs

    r1450 r1526  
    2727using System.Text; 
    2828using System.Windows.Forms; 
     29using System.Globalization; 
     30using System.IO; 
    2931 
    3032using Eraser.Manager; 
    31 using System.Globalization; 
    3233using Eraser.Util; 
    33 using System.IO; 
    3434 
    3535namespace Eraser 
     
    5656 
    5757            //Display the log entries 
    58             this.task = task; 
     58            Task = task; 
    5959            RefreshMessages(); 
    6060            EnableButtons(); 
    6161 
    6262            //Register our event handler to get live log messages 
    63             task.Log.Logged += task_Logged; 
    64             task.Log.NewSession += task_NewSession; 
     63            Task.Log.Logged += task_Logged; 
     64            Task.Log.NewSession += task_NewSession; 
    6565        } 
    6666 
    6767        private void LogForm_FormClosed(object sender, FormClosedEventArgs e) 
    6868        { 
    69             task.Log.Logged -= task_Logged; 
     69            Task.Log.NewSession -= task_NewSession; 
     70            Task.Log.Logged -= task_Logged; 
    7071        } 
    7172 
     
    8384            } 
    8485 
    85             filterSessionCombobox.Items.Add(task.Log.LastSession); 
     86            filterSessionCombobox.Items.Add(Task.Log.LastSession); 
    8687        } 
    8788 
     
    9899            //display this entry when the session in question is the last one. 
    99100            if (filterSessionCombobox.SelectedItem == null || 
    100                 (DateTime)filterSessionCombobox.SelectedItem != task.Log.LastSession || 
     101                (DateTime)filterSessionCombobox.SelectedItem != Task.Log.LastSession || 
    101102                !MeetsCriteria(e.LogEntry)) 
    102103            { 
     
    105106 
    106107            //Add it to the cache and increase our virtual list size. 
    107             entryCache.Add(e.LogEntry); 
     108            EntryCache.Add(e.LogEntry); 
    108109            ++log.VirtualListSize; 
    109110 
     
    114115        private void log_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) 
    115116        { 
    116             LogEntry entry = entryCache[e.ItemIndex]; 
     117            LogEntry entry = EntryCache[e.ItemIndex]; 
    117118            e.Item = new ListViewItem(entry.Timestamp.ToString("F", CultureInfo.CurrentCulture)); 
    118119            e.Item.SubItems.Add(entry.Level.ToString()); 
     
    137138            if (e.IsSelected) 
    138139            { 
    139                 if (!selectedEntries.ContainsKey(e.ItemIndex)) 
    140                     selectedEntries.Add(e.ItemIndex, null); 
     140                SelectedEntries.Add(e.ItemIndex, EntryCache[e.ItemIndex]); 
    141141            } 
    142142            else 
    143143            { 
    144                 selectedEntries.Remove(e.ItemIndex); 
     144                SelectedEntries.Remove(e.ItemIndex); 
    145145            } 
    146146        } 
     
    152152                if (e.IsSelected) 
    153153                { 
    154                     if (!selectedEntries.ContainsKey(i)) 
    155                         selectedEntries.Add(i, null); 
     154                    SelectedEntries.Add(i, EntryCache[i]); 
    156155                } 
    157156                else 
    158157                { 
    159                     selectedEntries.Remove(i); 
     158                    SelectedEntries.Remove(i); 
    160159                } 
    161160            } 
     
    164163        private void log_ItemActivate(object sender, EventArgs e) 
    165164        { 
    166             if (selectedEntries.Count < 1) 
    167                 return; 
    168  
    169             int currentEntryIndex = 0; 
    170             LogEntry selectedEntry = new LogEntry(); 
    171             foreach (LogEntry entry in task.Log.Entries[(DateTime)filterSessionCombobox.SelectedItem]) 
    172             { 
    173                 //Only copy entries which meet the display criteria and that they are selected 
    174                 if (!MeetsCriteria(entry)) 
    175                     continue; 
    176                 if (!selectedEntries.ContainsKey(currentEntryIndex++)) 
    177                     continue; 
    178  
    179                 selectedEntry = entry; 
    180                 break; 
    181             } 
    182  
    183             //Decide on the icon 
     165            if (SelectedEntries.Count < 1) 
     166                return; 
     167 
     168            //Get the selected entry from the entry cache. 
     169            LogEntry selectedEntry = SelectedEntries.Values[0]; 
     170 
     171            //Decide on the icon. 
    184172            MessageBoxIcon icon = MessageBoxIcon.None; 
    185173            switch (selectedEntry.Level) 
     
    205193        private void logContextMenuStrip_Opening(object sender, CancelEventArgs e) 
    206194        { 
    207             copySelectedEntriesToolStripMenuItem.Enabled = selectedEntries.Count != 0; 
     195            copySelectedEntriesToolStripMenuItem.Enabled = SelectedEntries.Count != 0; 
    208196        } 
    209197 
     
    211199        { 
    212200            //Ensure we've got stuff to copy. 
    213             if (selectedEntries.Count == 0) 
     201            if (SelectedEntries.Count == 0) 
    214202                return; 
    215203 
    216204            StringBuilder csvText = new StringBuilder(); 
    217205            StringBuilder rawText = new StringBuilder(); 
    218             LogSessionDictionary logEntries = task.Log.Entries; 
     206            LogSessionDictionary logEntries = Task.Log.Entries; 
    219207 
    220208            DateTime sessionTime = (DateTime)filterSessionCombobox.SelectedItem; 
     
    222210            rawText.AppendLine(S._("Session: {0:F}", sessionTime)); 
    223211 
    224             int currentEntryIndex = 0; 
    225             foreach (LogEntry entry in logEntries[sessionTime]) 
    226             { 
    227                 //Only copy entries which meet the display criteria and that they are selected 
    228                 if (!MeetsCriteria(entry)) 
    229                     continue; 
    230                 if (!selectedEntries.ContainsKey(currentEntryIndex++)) 
    231                     continue; 
    232  
     212            foreach (LogEntry entry in SelectedEntries.Values) 
     213            { 
     214                //Append the entry's contents to our buffer. 
    233215                string timeStamp = entry.Timestamp.ToString("F", CultureInfo.CurrentCulture); 
    234216                string message = entry.Message; 
     
    259241        { 
    260242            //Clear the backing store 
    261             task.Log.Clear(); 
     243            Task.Log.Clear(); 
    262244 
    263245            //Reset the list of sessions 
     
    266248            //And reset the list-view control 
    267249            log.VirtualListSize = 0; 
    268             selectedEntries.Clear(); 
    269             entryCache.Clear(); 
     250            SelectedEntries.Clear(); 
     251            EntryCache.Clear(); 
    270252 
    271253            //Finally update the UI state. 
     
    314296        { 
    315297            //Check if we have a task 
    316             if (task == null) 
     298            if (Task == null) 
    317299                return; 
    318300 
    319301            Application.UseWaitCursor = true; 
    320             LogSessionDictionary log = task.Log.Entries; 
    321             entryCache.Clear(); 
    322             selectedEntries.Clear(); 
     302            LogSessionDictionary log = Task.Log.Entries; 
     303            EntryCache.Clear(); 
     304            SelectedEntries.Clear(); 
    323305 
    324306            //Iterate over every key 
     
    334316                    //Check if the entry meets the criteria for viewing 
    335317                    if (MeetsCriteria(entry)) 
    336                         entryCache.Add(entry); 
     318                        EntryCache.Add(entry); 
    337319                } 
    338320            } 
    339321 
    340322            //Set the list view size and update all the control states 
    341             this.log.VirtualListSize = entryCache.Count; 
     323            this.log.VirtualListSize = EntryCache.Count; 
    342324            this.log.Refresh(); 
    343325            EnableButtons(); 
     
    350332        private void EnableButtons() 
    351333        { 
    352             clear.Enabled = task.Log.Entries.Count > 0; 
     334            clear.Enabled = Task.Log.Entries.Count > 0; 
    353335        } 
    354336 
     
    356338        /// The task which this log is displaying entries for 
    357339        /// </summary> 
    358         private Task task; 
     340        private Task Task; 
    359341 
    360342        /// <summary> 
    361343        /// Stores all log entries fulfilling the current criteria for rapid access. 
    362344        /// </summary> 
    363         private List<LogEntry> entryCache = new List<LogEntry>(); 
    364  
    365         /// <summary> 
    366         /// Stores all currently selected list view entry indices. 
    367         /// </summary> 
    368         private SortedList<int, object> selectedEntries = new SortedList<int, object>(); 
     345        private List<LogEntry> EntryCache = new List<LogEntry>(); 
     346 
     347        /// <summary> 
     348        /// Stores all currently selected list view entry indices. The key is the 
     349        /// index which is selected. 
     350        /// </summary> 
     351        private SortedList<int, LogEntry> SelectedEntries = new SortedList<int, LogEntry>(); 
    369352    } 
    370353} 
Note: See TracChangeset for help on using the changeset viewer.