Hi,

Just thought I'd share this lovely bit code from CalendarLayout. Anyway want to 
have a go at rewriting it so that's its human readable?

I particular like:
-  How it possible to get a value of s1 (eg 10) that's not in the switch 
statement.
- There's a check for !startDate first but the check for !endDate is last
- Comparisons use a mixture of < and <= and > and >=

There's a bug here - karma points for anyone who can work it out.

mx_internal function removeRangeFromSelection(startDate:Date, endDate:Date):void
 {
     for (var n:int = 0; n < selectedRangeCount; n++)
     {
         var s1:int;

         if (!startDate || startDate <= _selectedRanges[n].rangeStart)
             s1 = 1;
         else if (startDate <= _selectedRanges[n].rangeEnd)
             s1 = 2;
         else if (startDate > _selectedRanges[n].rangeEnd)
             s1 = 3;

         if (endDate < _selectedRanges[n].rangeStart)
             s1 *= 5;
         else if (endDate < _selectedRanges[n].rangeEnd)
             s1 *= 7;
         else if (!endDate || endDate >= _selectedRanges[n].rangeEnd)
             s1 *= 11;

         switch (s1)
         {
             case 5:
             case 33:
                 break;

             case 14:
             {
                 var temp:Date = _selectedRanges[n].rangeEnd;

                 _selectedRanges[n].rangeEnd = incrementDate(startDate,-1);

                 _selectedRanges[selectedRangeCount] = {};
                 _selectedRanges[selectedRangeCount].rangeStart = 
incrementDate(endDate);
                 _selectedRanges[selectedRangeCount].rangeEnd = temp;
                 selectedRangeCount += 1;
                 break;
             }

             case 7:
             {
                 _selectedRanges[n].rangeStart = incrementDate(endDate);
                 break;
             }

             case 22:
             {
                 _selectedRanges[n].rangeEnd = incrementDate(startDate,-1);
                 break;
             }

             case 11:
             {
                 _selectedRanges[n] = _selectedRanges[selectedRangeCount-1];
                 _selectedRanges[selectedRangeCount-1] = null;
                 selectedRangeCount -= 1;
                 break;
             }
         }
     }
 }

Thanks,
Justin

Reply via email to