Bug 321380 calendar-month-view.xml needs to support removing non-workweek days. r=mvl

This commit is contained in:
jminta%gmail.com 2006-03-24 21:55:15 +00:00
parent d23aa826e7
commit 25eff7e0b1
5 changed files with 146 additions and 17 deletions

View File

@ -64,6 +64,8 @@
viewElem.weekStartOffset = pb2.getIntPref("calendar.week.start");
} catch (ex) {}
this.updateDaysOffPrefs();
// add a preference observer to monitor changes
pb2.addObserver("calendar.", this.mPrefObserver, false);
return;
@ -85,6 +87,20 @@
switch (pref) {
case "calendar.previousweeks.inview":
case "calendar.week.d0sundaysoff":
case "calendar.week.d1mondaysoff":
case "calendar.week.d2tuesdaysoff":
case "calendar.week.d3wednesdaysoff":
case "calendar.week.d4thursdaysoff":
case "calendar.week.d5fridaysoff":
case "calendar.week.d6saturdaysoff":
this.calView.updateDaysOffPrefs();
if (this.calView.selectedDay) {
this.calView.goToDay(this.calView.selectedDay);
}
break;
case "calendar.week.start":
viewElem = document.getAnonymousElementByAttribute(
this.calView, "anonid", "view-element");
@ -119,6 +135,7 @@
<body><![CDATA[
var viewElement = document.getAnonymousElementByAttribute(this, "anonid", "view-element");
viewElement.tasksInView = this.mTasksInView;
viewElement.displayDaysOff = !this.mWorkdaysOnly;
aDate = aDate.getInTimezone(viewElement.timezone);
@ -136,6 +153,7 @@
<body><![CDATA[
var monthViewElement = document.getAnonymousElementByAttribute(this, "anonid", "view-element");
var dates = monthViewElement.getDateList({});
monthViewElement.displayDaysOff = !this.mWorkdaysOnly;
// The first few dates in this list are likely in the month
// prior to the one actually being shown (since the month
@ -192,6 +210,30 @@
return;
]]></body>
</method>
<method name="updateDaysOffPrefs">
<body><![CDATA[
try {
var prefService = Components.classes[
"@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefService);
var weekBranch = prefService.getBranch("calendar.week.");
var prefNames = ["d0sundaysoff", "d1mondaysoff", "d2tuesdaysoff",
"d3wednesdaysoff", "d4thursdaysoff",
"d5fridaysoff", "d6saturdaysoff"];
var daysOff = new Array();
for (var i in prefNames) {
if (weekBranch.getBoolPref(prefNames[i])) {
daysOff.push(Number(i));
}
}
viewElem = document.getAnonymousElementByAttribute(
this, "anonid", "view-element");
viewElem.daysOffArray = daysOff;
} catch (ex) {}
]]></body>
</method>
</implementation>
</binding>
</bindings>

View File

@ -69,6 +69,8 @@
this.mWeeksInView = pb2.getIntPref("calendar.weeks.inview");
} catch (ex) {}
this.updateDaysOffPrefs();
// add a preference observer to monitor changes
pb2.addObserver("calendar.", this.mPrefObserver, false);
return;
@ -90,6 +92,20 @@
switch (pref) {
case "calendar.previousweeks.inview":
case "calendar.week.d0sundaysoff":
case "calendar.week.d1mondaysoff":
case "calendar.week.d2tuesdaysoff":
case "calendar.week.d3wednesdaysoff":
case "calendar.week.d4thursdaysoff":
case "calendar.week.d5fridaysoff":
case "calendar.week.d6saturdaysoff":
this.calView.updateDaysOffPrefs();
if (this.calView.selectedDay) {
this.calView.goToDay(this.calView.selectedDay);
}
break;
case "calendar.week.start":
viewElem = document.getAnonymousElementByAttribute(
this.calView, "anonid", "view-element");
@ -146,6 +162,7 @@
var viewElement = document.getAnonymousElementByAttribute(this, "anonid", "view-element");
viewElement.showFullMonth = false;
viewElement.tasksInView = this.mTasksInView;
viewElement.displayDaysOff = !this.mWorkdaysOnly;
aDate = aDate.getInTimezone(viewElement.timezone);
@ -219,10 +236,34 @@
</method>
<method name="removeNonWorkdays">
<body><![CDATA[
// Not supported yet
// This is handled by our pref observers and in the
// embedded view.
return;
]]></body>
</method>
<method name="updateDaysOffPrefs">
<body><![CDATA[
try {
var prefService = Components.classes[
"@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefService);
var weekBranch = prefService.getBranch("calendar.week.");
var prefNames = ["d0sundaysoff", "d1mondaysoff", "d2tuesdaysoff",
"d3wednesdaysoff", "d4thursdaysoff",
"d5fridaysoff", "d6saturdaysoff"];
var daysOff = new Array();
for (var i in prefNames) {
if (weekBranch.getBoolPref(prefNames[i])) {
daysOff.push(Number(i));
}
}
viewElem = document.getAnonymousElementByAttribute(
this, "anonid", "view-element");
viewElem.daysOffArray = daysOff;
} catch (ex) {}
]]></body>
</method>
</implementation>
</binding>
</bindings>

View File

@ -106,6 +106,22 @@
switch (pref) {
case "calendar.previousweeks.inview":
case "calendar.week.d0sundaysoff":
case "calendar.week.d1mondaysoff":
case "calendar.week.d2tuesdaysoff":
case "calendar.week.d3wednesdaysoff":
case "calendar.week.d4thursdaysoff":
case "calendar.week.d5fridaysoff":
case "calendar.week.d6saturdaysoff":
if (!this.calView.startDay || !this.calView.endDay) {
// Don't refresh if we're not initialized
return;
}
this.calView.goToDay(this.calView.selectedDay);
break;
case "calendar.view.defaultstarthour":
this.calView.mStartMin = subj.getIntPref(pref) * 60;
var viewElem = document.getAnonymousElementByAttribute(

View File

@ -462,7 +462,8 @@
<field name="mTasksInView">true</field>
<field name="mShowFullMonth">true</field>
<field name="mWeekStartOffset">0</field>
<field name="mDaysOffArray">[0,6]</field>
<field name="mDisplayDaysOff">true</field>
<field name="mSelectionObserver"><![CDATA[
({ calView: this,
@ -533,6 +534,26 @@
]]></setter>
</property>
<property name="displayDaysOff">
<getter><![CDATA[
return this.mDisplayDaysOff;
]]></getter>
<setter><![CDATA[
this.mDisplayDaysOff = val;
return val;
]]></setter>
</property>
<property name="daysOffArray">
<getter><![CDATA[
return this.mDaysOffArray;
]]></getter>
<setter><![CDATA[
this.mDaysOffArray = val;
return val;
]]></setter>
</property>
<property name="controller"
onget="return this.mController;"
onset="return this.mController = val;"/>
@ -920,9 +941,12 @@
} else {
boxClass = "calendar-month-day-box-even";
}
// XXX isWeekend?
if (date.weekday == 0 || date.weekday == 6)
function matchesDayOff(dayOffNum) { return dayOffNum == date.weekday; }
if (this.mDaysOffArray.some(matchesDayOff)) {
boxClass = "calendar-month-day-box-weekend " + boxClass;
}
box.setAttribute("class", boxClass);
curRow.appendChild(box);
@ -951,6 +975,7 @@
// Store these, so that we can access them later
this.mDateBoxes = dateBoxes;
this.hideDaysOff();
]]></body>
</method>
@ -1004,8 +1029,11 @@
var boxClass = "calendar-month-day-box-" +
((mainMonth == date.month) ? "even" : "odd");
if (date.weekday == 0 || date.weekday == 6)
function matchesDayOff(dayOffNum) { return dayOffNum == date.weekday; }
if (this.mDaysOffArray.some(matchesDayOff)) {
boxClass = "calendar-month-day-box-weekend " + boxClass;
}
box.setAttribute("class", boxClass);
box.setDate(date);
@ -1024,6 +1052,20 @@
this.mDateBoxes[0].showMonthLabel = true;
this.mDateBoxes[this.mDateBoxes.length-1].showMonthLabel = true;
}
this.hideDaysOff();
]]></body>
</method>
<method name="hideDaysOff">
<body><![CDATA[
var columns = document.getAnonymousElementByAttribute(this, "anonid", "monthgridcolumns").childNodes;
var headerkids = document.getAnonymousElementByAttribute(this, "anonid", "headerbox").childNodes;
for (var i in columns) {
var dayForColumn = (Number(i) + this.mWeekStartOffset) % 7;
var dayOff = (this.mDaysOffArray.indexOf(dayForColumn) != -1);
columns[i].collapsed = dayOff && !this.mDisplayDaysOff;
headerkids[i].collapsed = dayOff && !this.mDisplayDaysOff;
}
]]></body>
</method>

View File

@ -60,18 +60,6 @@ calendarPrefObserver.prototype =
// when calendar pref was changed, we reinitialize
switch( prefName )
{
case "calendar.previousweeks.inview":
case "calendar.week.d0sundaysoff":
case "calendar.week.d1mondaysoff":
case "calendar.week.d2tuesdaysoff":
case "calendar.week.d3wednesdaysoff":
case "calendar.week.d4thursdaysoff":
case "calendar.week.d5fridaysoff":
case "calendar.week.d6saturdaysoff":
if (this.CalendarPreferences.calendarWindow.currentView != null) {
this.CalendarPreferences.calendarWindow.currentView.refresh();
}
break;
case "calendar.week.start":
if (this.CalendarPreferences.calendarWindow.currentView != null) {
this.CalendarPreferences.calendarWindow.currentView.refresh();