You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by jm...@apache.org on 2013/05/09 07:56:58 UTC
[1/5] git commit: [flex-sdk] [refs/heads/develop] - Replaced
removeRangeFromSelection with sane code (thanks to Erik)
Updated Branches:
refs/heads/develop b0ddb4ec2 -> 02aa4310b
Replaced removeRangeFromSelection with sane code (thanks to Erik)
Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/fe78d41a
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/fe78d41a
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/fe78d41a
Branch: refs/heads/develop
Commit: fe78d41ad41e972e71474ec7ca15707e263d0823
Parents: b0ddb4e
Author: Justin Mclean <jm...@apache.org>
Authored: Thu May 9 10:50:35 2013 +1000
Committer: Justin Mclean <jm...@apache.org>
Committed: Thu May 9 10:50:35 2013 +1000
----------------------------------------------------------------------
.../projects/mx/src/mx/controls/CalendarLayout.as | 111 +++++++--------
1 files changed, 52 insertions(+), 59 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fe78d41a/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/mx/src/mx/controls/CalendarLayout.as b/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
index 745f43e..138b4c7 100644
--- a/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
+++ b/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
@@ -2001,66 +2001,59 @@ public class CalendarLayout extends UIComponent
* from the selected dates.
*/
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;
- }
+ {
+ var rangeEnd:Date;
+ var rangeStart:Date;
+
+ if (endDate < startDate)
+ return;
+
+ for (var n:int = 0; n < selectedRangeCount; n++)
+ {
+ rangeStart = _selectedRanges[n].rangeStart;
+
+ if (endDate < rangeStart)
+ continue;
+
+ rangeEnd = _selectedRanges[n].rangeEnd;
+
+ if (startDate <= rangeStart)
+ {
+ if (endDate < rangeEnd)
+ {
+ _selectedRanges[n].rangeStart = incrementDate(endDate);
+ }
+ else
+ {
+ _selectedRanges[n] = _selectedRanges[selectedRangeCount - 1];
+ _selectedRanges[selectedRangeCount - 1] = null;
+
+ selectedRangeCount -= 1;
+ }
+ }
+ else if (startDate <= rangeEnd)
+ {
+ if (endDate < rangeEnd)
+ {
+ 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;
+ }
+ else
+ {
+ _selectedRanges[n].rangeEnd = incrementDate(startDate, -1);
+ }
+ }
+ }
+ }
- case 11:
- {
- _selectedRanges[n] = _selectedRanges[selectedRangeCount-1];
- _selectedRanges[selectedRangeCount-1] = null;
- selectedRangeCount -= 1;
- break;
- }
- }
- }
- }
/**
* @private
[2/5] git commit: [flex-sdk] [refs/heads/develop] - FLEX-12749
Changed date maths to use real days so it works across daylight saving
boundaries
Posted by jm...@apache.org.
FLEX-12749 Changed date maths to use real days so it works across daylight saving boundaries
Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/9cd95538
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/9cd95538
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/9cd95538
Branch: refs/heads/develop
Commit: 9cd95538e563c8d34a837fd9ac37dec5b3252d58
Parents: fe78d41
Author: Justin Mclean <jm...@apache.org>
Authored: Thu May 9 11:27:19 2013 +1000
Committer: Justin Mclean <jm...@apache.org>
Committed: Thu May 9 11:27:19 2013 +1000
----------------------------------------------------------------------
.../projects/mx/src/mx/controls/CalendarLayout.as | 21 +++++++--------
1 files changed, 10 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/9cd95538/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/mx/src/mx/controls/CalendarLayout.as b/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
index 138b4c7..04676e4 100644
--- a/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
+++ b/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
@@ -941,12 +941,12 @@ public class CalendarLayout extends UIComponent
if (dayOffset < 0)
dayOffset += 7;
- tempDate = incrementDate(tempDate,dayOffset)
+ tempDate = addSubtractDays(tempDate, dayOffset);
while (tempDate < maxDate)
{
- removeRangeFromSelection(tempDate,tempDate);
- tempDate = incrementDate(tempDate,7)
+ removeRangeFromSelection(tempDate, tempDate);
+ tempDate = addSubtractDays(tempDate, 7);
}
}
}
@@ -1969,12 +1969,11 @@ public class CalendarLayout extends UIComponent
* Increments/decrements a date by 'No. of days'
* specified by amount and returns the new date.
*/
- mx_internal function incrementDate(value:Date, amount:int = 1):Date
+ mx_internal function addSubtractDays(value:Date, amount:int):Date
{
var newDate:Date = new Date(value);
- var time:Number = newDate.getTime();
- newDate.setTime(time + amount * 86400000);
- return newDate;
+
+ return new Date(newDate.fullYear, newDate.month, newDate.date + amount);
}
/**
@@ -2021,7 +2020,7 @@ public class CalendarLayout extends UIComponent
{
if (endDate < rangeEnd)
{
- _selectedRanges[n].rangeStart = incrementDate(endDate);
+ _selectedRanges[n].rangeStart = addSubtractDays(endDate, 1);
}
else
{
@@ -2037,18 +2036,18 @@ public class CalendarLayout extends UIComponent
{
var temp:Date = _selectedRanges[n].rangeEnd;
- _selectedRanges[n].rangeEnd = incrementDate(startDate, -1);
+ _selectedRanges[n].rangeEnd = addSubtractDays(startDate, -1);
_selectedRanges[selectedRangeCount] = {};
_selectedRanges[selectedRangeCount].rangeStart =
- incrementDate(endDate);
+ addSubtractDays(endDate, 1);
_selectedRanges[selectedRangeCount].rangeEnd = temp;
selectedRangeCount += 1;
}
else
{
- _selectedRanges[n].rangeEnd = incrementDate(startDate, -1);
+ _selectedRanges[n].rangeEnd = addSubtractDays(startDate, -1);
}
}
}
[3/5] git commit: [flex-sdk] [refs/heads/develop] - FLEX-13423 Date
ranges are currently used inconstantly - simpler and easier to understand if
endDate and startDates are included
Posted by jm...@apache.org.
FLEX-13423 Date ranges are currently used inconstantly - simpler and easier to understand if endDate and startDates are included
Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/8326e93f
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/8326e93f
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/8326e93f
Branch: refs/heads/develop
Commit: 8326e93f0e982c9353e0efffe2474d4e2e0519b8
Parents: 9cd9553
Author: Justin Mclean <jm...@apache.org>
Authored: Thu May 9 12:17:07 2013 +1000
Committer: Justin Mclean <jm...@apache.org>
Committed: Thu May 9 12:17:07 2013 +1000
----------------------------------------------------------------------
.../projects/mx/src/mx/controls/CalendarLayout.as | 21 +++++++--------
1 files changed, 10 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/8326e93f/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/mx/src/mx/controls/CalendarLayout.as b/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
index 04676e4..95a9586 100644
--- a/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
+++ b/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
@@ -2020,7 +2020,7 @@ public class CalendarLayout extends UIComponent
{
if (endDate < rangeEnd)
{
- _selectedRanges[n].rangeStart = addSubtractDays(endDate, 1);
+ _selectedRanges[n].rangeStart = endDate;
}
else
{
@@ -2036,18 +2036,17 @@ public class CalendarLayout extends UIComponent
{
var temp:Date = _selectedRanges[n].rangeEnd;
- _selectedRanges[n].rangeEnd = addSubtractDays(startDate, -1);
+ _selectedRanges[n].rangeEnd = startDate;
_selectedRanges[selectedRangeCount] = {};
- _selectedRanges[selectedRangeCount].rangeStart =
- addSubtractDays(endDate, 1);
+ _selectedRanges[selectedRangeCount].rangeStart = endDate;
_selectedRanges[selectedRangeCount].rangeEnd = temp;
selectedRangeCount += 1;
}
else
{
- _selectedRanges[n].rangeEnd = addSubtractDays(startDate, -1);
+ _selectedRanges[n].rangeEnd = startDate;
}
}
}
@@ -2450,12 +2449,12 @@ public class CalendarLayout extends UIComponent
{
if (alreadySelected)
{
- removeSelectionIndicator(colIndex,rowIndex);
- removeRangeFromSelection(newDate,newDate);
+ removeSelectionIndicator(colIndex, rowIndex);
+ removeRangeFromSelection(newDate, newDate);
}
else
{
- addSelectionIndicator(colIndex,rowIndex);
+ addSelectionIndicator(colIndex, rowIndex);
addToSelected(newDate);
}
}
@@ -2474,14 +2473,14 @@ public class CalendarLayout extends UIComponent
}
else if (event.ctrlKey)
{
- removeSelectionIndicator(colIndex,rowIndex);
- removeRangeFromSelection(newDate,newDate);
+ removeSelectionIndicator(colIndex, rowIndex);
+ removeRangeFromSelection(newDate, newDate);
}
}
else
{
selectedRangeCount = 0;
- addSelectionIndicator(colIndex,rowIndex);
+ addSelectionIndicator(colIndex, rowIndex);
addToSelected(newDate);
setSelectedIndicators();
}
[4/5] git commit: [flex-sdk] [refs/heads/develop] - Changed magic
numbers to static consts so code is easier to understand
Posted by jm...@apache.org.
Changed magic numbers to static consts so code is easier to understand
Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/154ee708
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/154ee708
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/154ee708
Branch: refs/heads/develop
Commit: 154ee70893570ee77247eca371203737c9ff2482
Parents: 8326e93
Author: Justin Mclean <jm...@apache.org>
Authored: Thu May 9 13:17:25 2013 +1000
Committer: Justin Mclean <jm...@apache.org>
Committed: Thu May 9 13:17:25 2013 +1000
----------------------------------------------------------------------
.../projects/mx/src/mx/controls/CalendarLayout.as | 64 ++++++++-------
1 files changed, 36 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/154ee708/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/mx/src/mx/controls/CalendarLayout.as b/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
index 95a9586..153d760 100644
--- a/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
+++ b/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
@@ -199,6 +199,11 @@ public class CalendarLayout extends UIComponent
addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
}
+
+ private static const START_END:int = 1;
+ private static const START_ONLY:int = 2;
+ private static const END_ONLY:int = 3;
+ private static const SINGLE_DATE:int = 4;
//--------------------------------------------------------------------------
//
@@ -531,7 +536,7 @@ public class CalendarLayout extends UIComponent
{
if (_disabledRanges[i] is Date)
{
- disabledRangeMode[i] = 4;
+ disabledRangeMode[i] = SINGLE_DATE;
_disabledRanges[i] = new Date(value[i].getFullYear(),
value[i].getMonth(),
value[i].getDate());
@@ -544,17 +549,17 @@ public class CalendarLayout extends UIComponent
if (!_disabledRanges[i].rangeStart &&
_disabledRanges[i].rangeEnd)
{
- disabledRangeMode[i] = 3;
+ disabledRangeMode[i] = END_ONLY;
}
else if (_disabledRanges[i].rangeStart &&
!_disabledRanges[i].rangeEnd)
{
- disabledRangeMode[i] = 2;
+ disabledRangeMode[i] = START_ONLY;
}
else if (_disabledRanges[i].rangeStart &&
_disabledRanges[i].rangeEnd)
{
- disabledRangeMode[i] = 1;
+ disabledRangeMode[i] = START_END;
}
}
}
@@ -750,7 +755,7 @@ public class CalendarLayout extends UIComponent
if (value is Date)
{
- selRangeMode = 4;
+ selRangeMode = SINGLE_DATE;
_selectableRange = new Date(value.getFullYear(),
value.getMonth(),
@@ -765,7 +770,7 @@ public class CalendarLayout extends UIComponent
if (!value.rangeStart && value.rangeEnd)
{
- selRangeMode = 3;
+ selRangeMode = END_ONLY;
_selectableRange.rangeEnd = value.rangeEnd;
if (todaysYear <= _selectableRange.rangeEnd.getFullYear())
@@ -791,7 +796,7 @@ public class CalendarLayout extends UIComponent
}
else if (!value.rangeEnd && value.rangeStart)
{
- selRangeMode = 2;
+ selRangeMode = START_ONLY;
_selectableRange.rangeStart = value.rangeStart;
if (todaysYear >= _selectableRange.rangeStart.getFullYear())
@@ -816,7 +821,7 @@ public class CalendarLayout extends UIComponent
}
else if (value.rangeStart && value.rangeEnd)
{
- selRangeMode = 1;
+ selRangeMode = START_END;
_selectableRange.rangeStart = value.rangeStart;
_selectableRange.rangeEnd = value.rangeEnd;
@@ -867,25 +872,25 @@ public class CalendarLayout extends UIComponent
public function get selectedRanges():Array
{
if (_selectableRange)
- {
+ {
switch (selRangeMode)
{
- case 1:
+ case START_END:
{
removeRangeFromSelection(null, _selectableRange.rangeStart);
removeRangeFromSelection(_selectableRange.rangeEnd, null);
break;
}
- case 2:
- case 3:
+ case START_ONLY:
+ case END_ONLY:
{
removeRangeFromSelection(_selectableRange.rangeEnd,
_selectableRange.rangeStart);
break;
}
- case 4:
+ case SINGLE_DATE:
{
removeRangeFromSelection(null, _selectableRange as Date);
removeRangeFromSelection(_selectableRange as Date, null);
@@ -900,19 +905,19 @@ public class CalendarLayout extends UIComponent
{
switch (disabledRangeMode[i])
{
- case 1:
- case 2:
- case 3:
+ case START_END:
+ case START_ONLY:
+ case END_ONLY:
{
- removeRangeFromSelection(_disabledRanges[i].rangeStart,
- _disabledRanges[i].rangeEnd);
+ removeRangeFromSelection(addSubtractDays(_disabledRanges[i].rangeStart, -1),
+ addSubtractDays(_disabledRanges[i].rangeEnd, +1));
break;
}
- case 4:
+ case SINGLE_DATE:
{
- removeRangeFromSelection(_disabledRanges[i],
- _disabledRanges[i]);
+ removeRangeFromSelection(addSubtractDays(_disabledRanges[i], -1),
+ _disabledRanges[i]);
break;
}
}
@@ -1620,7 +1625,7 @@ public class CalendarLayout extends UIComponent
// "end"::All dates before ths specified date are disabled, including the end Date
// "date"::Only that day has to be disabled
// "normal"::range is disabled including the start and end date
- if (_disabledRanges.length>0)
+ if (_disabledRanges.length > 0)
{
for (var dRanges:int = 0; dRanges < _disabledRanges.length; dRanges++)
{
@@ -1826,8 +1831,8 @@ public class CalendarLayout extends UIComponent
}
switch (rangeMode)
- {
- case 1:
+ {
+ case START_END:
{
if (value < dateRange.rangeStart ||
value > dateRange.rangeEnd)
@@ -1837,21 +1842,21 @@ public class CalendarLayout extends UIComponent
break;
}
- case 2:
+ case START_ONLY:
{
if (value < dateRange.rangeStart)
result = false;
break;
}
- case 3:
+ case END_ONLY:
{
if (value > dateRange.rangeEnd)
result = false;
break;
}
- case 4:
+ case SINGLE_DATE:
{
if (value > dateRange || value < dateRange)
result = false;
@@ -1973,7 +1978,10 @@ public class CalendarLayout extends UIComponent
{
var newDate:Date = new Date(value);
- return new Date(newDate.fullYear, newDate.month, newDate.date + amount);
+ if (value)
+ return new Date(newDate.fullYear, newDate.month, newDate.date + amount);
+ else
+ return null;
}
/**
[5/5] git commit: [flex-sdk] [refs/heads/develop] - Fix further
confusion in code about date ranges being off by one and rewrote
removeRangeFromSelection so it actually works for all cases.
Posted by jm...@apache.org.
Fix further confusion in code about date ranges being off by one and rewrote removeRangeFromSelection so it actually works for all cases.
Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/02aa4310
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/02aa4310
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/02aa4310
Branch: refs/heads/develop
Commit: 02aa4310bd4427b4b23ebc862e8dfda3c7377cc3
Parents: 154ee70
Author: Justin Mclean <jm...@apache.org>
Authored: Thu May 9 15:23:05 2013 +1000
Committer: Justin Mclean <jm...@apache.org>
Committed: Thu May 9 15:23:05 2013 +1000
----------------------------------------------------------------------
.../projects/mx/src/mx/controls/CalendarLayout.as | 114 ++++++++-------
1 files changed, 62 insertions(+), 52 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/02aa4310/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/mx/src/mx/controls/CalendarLayout.as b/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
index 153d760..05988ed 100644
--- a/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
+++ b/frameworks/projects/mx/src/mx/controls/CalendarLayout.as
@@ -299,7 +299,7 @@ public class CalendarLayout extends UIComponent
/**
* @private
*/
- mx_internal var selRangeMode:int = 1;
+ mx_internal var selRangeMode:int = START_END;
//--------------------------------------------------------------------------
//
@@ -834,7 +834,7 @@ public class CalendarLayout extends UIComponent
else if (todaysDate < _selectableRange.rangeStart)
{
callMonth = _selectableRange.rangeStart.getMonth();
- callYear = _selectableRange. rangeStart.getFullYear();
+ callYear = _selectableRange.rangeStart.getFullYear();
}
else if (todaysDate > _selectableRange.rangeEnd)
{
@@ -877,23 +877,22 @@ public class CalendarLayout extends UIComponent
{
case START_END:
{
- removeRangeFromSelection(null, _selectableRange.rangeStart);
- removeRangeFromSelection(_selectableRange.rangeEnd, null);
+ removeRangeFromSelection(null, addSubtractDays(_selectableRange.rangeStart, -1));
+ removeRangeFromSelection(addSubtractDays(_selectableRange.rangeEnd, +1), null);
break;
}
case START_ONLY:
case END_ONLY:
{
- removeRangeFromSelection(_selectableRange.rangeEnd,
- _selectableRange.rangeStart);
+ removeRangeFromSelection(addSubtractDays(_selectableRange.rangeStart, -1),
+ addSubtractDays(_selectableRange.rangeEnd, +1));
break;
}
case SINGLE_DATE:
{
- removeRangeFromSelection(null, _selectableRange as Date);
- removeRangeFromSelection(_selectableRange as Date, null);
+ removeDayFromSelection(_selectableRange as Date);
break;
}
}
@@ -909,15 +908,13 @@ public class CalendarLayout extends UIComponent
case START_ONLY:
case END_ONLY:
{
- removeRangeFromSelection(addSubtractDays(_disabledRanges[i].rangeStart, -1),
- addSubtractDays(_disabledRanges[i].rangeEnd, +1));
+ removeRangeFromSelection(_disabledRanges[i].rangeStart, _disabledRanges[i].rangeEnd);
break;
}
case SINGLE_DATE:
{
- removeRangeFromSelection(addSubtractDays(_disabledRanges[i], -1),
- _disabledRanges[i]);
+ removeDayFromSelection(_disabledRanges[i]);
break;
}
}
@@ -950,7 +947,7 @@ public class CalendarLayout extends UIComponent
while (tempDate < maxDate)
{
- removeRangeFromSelection(tempDate, tempDate);
+ removeDayFromSelection(tempDate);
tempDate = addSubtractDays(tempDate, 7);
}
}
@@ -1927,7 +1924,7 @@ public class CalendarLayout extends UIComponent
mx_internal function addToSelected(newDate:Date, range:Boolean = false):void
{
- if (!selectedRangeCount)
+ if (selectedRangeCount == 0)
rangeStartDate = null;
lastSelectedDate = newDate;
@@ -2018,48 +2015,61 @@ public class CalendarLayout extends UIComponent
for (var n:int = 0; n < selectedRangeCount; n++)
{
rangeStart = _selectedRanges[n].rangeStart;
+ rangeEnd = _selectedRanges[n].rangeEnd;
- if (endDate < rangeStart)
+ // ignore selection range outsie of date range
+ if (endDate < rangeStart || startDate > rangeEnd)
continue;
- rangeEnd = _selectedRanges[n].rangeEnd;
-
- if (startDate <= rangeStart)
+ // remove selection range inside of date range
+ if (startDate <= rangeStart && endDate >= rangeEnd)
+ {
+ _selectedRanges[n] = null;
+ }
+ // split selection range if date range inside selection range
+ else if (startDate > rangeStart && endDate < rangeEnd)
{
- if (endDate < rangeEnd)
- {
- _selectedRanges[n].rangeStart = endDate;
- }
- else
- {
- _selectedRanges[n] = _selectedRanges[selectedRangeCount - 1];
- _selectedRanges[selectedRangeCount - 1] = null;
-
- selectedRangeCount -= 1;
- }
+ var temp:Date = _selectedRanges[n].rangeEnd;
+
+ _selectedRanges[n].rangeEnd = addSubtractDays(startDate, -1);
+
+ _selectedRanges[selectedRangeCount] = {};
+ _selectedRanges[selectedRangeCount].rangeStart = addSubtractDays(endDate, +1);
+ _selectedRanges[selectedRangeCount].rangeEnd = temp;
+
+ selectedRangeCount++;
}
+ // move selection start date if end overlaps
+ else if (endDate >= rangeStart)
+ {
+ _selectedRanges[n].rangeStart = addSubtractDays(endDate, +1);
+ }
+ // move selection end date if start overlaps
else if (startDate <= rangeEnd)
{
- if (endDate < rangeEnd)
- {
- var temp:Date = _selectedRanges[n].rangeEnd;
-
- _selectedRanges[n].rangeEnd = startDate;
-
- _selectedRanges[selectedRangeCount] = {};
- _selectedRanges[selectedRangeCount].rangeStart = endDate;
- _selectedRanges[selectedRangeCount].rangeEnd = temp;
-
- selectedRangeCount += 1;
- }
- else
- {
- _selectedRanges[n].rangeEnd = startDate;
- }
+ _selectedRanges[n].rangeEnd = addSubtractDays(startDate, -1);
+ }
+ }
+
+ // clean up any removed selections
+ for (n = selectedRangeCount -1; n > 0; n--)
+ {
+ if (_selectedRanges[n] == null)
+ {
+ _selectedRanges.splice(n,1);
+ selectedRangeCount--;
}
}
}
-
+
+ /**
+ * @private
+ * Removes a single date specified by singleDate from the selected dates.
+ */
+ mx_internal function removeDayFromSelection(singleDate:Date):void
+ {
+ removeRangeFromSelection(singleDate, singleDate);
+ }
/**
* @private
@@ -2458,7 +2468,7 @@ public class CalendarLayout extends UIComponent
if (alreadySelected)
{
removeSelectionIndicator(colIndex, rowIndex);
- removeRangeFromSelection(newDate, newDate);
+ removeDayFromSelection(newDate);
}
else
{
@@ -2482,15 +2492,15 @@ public class CalendarLayout extends UIComponent
else if (event.ctrlKey)
{
removeSelectionIndicator(colIndex, rowIndex);
- removeRangeFromSelection(newDate, newDate);
+ removeDayFromSelection(newDate);
}
}
else
{
- selectedRangeCount = 0;
- addSelectionIndicator(colIndex, rowIndex);
- addToSelected(newDate);
- setSelectedIndicators();
+ selectedRangeCount = 0;
+ addSelectionIndicator(colIndex, rowIndex);
+ addToSelected(newDate);
+ setSelectedIndicators();
}
}
}