Bug 321608 First day of week setting not honoured in multiweek or month views. r=mvl

This commit is contained in:
jminta%gmail.com 2006-03-18 14:39:40 +00:00
Родитель 045ed3e89a
Коммит 5703cefa32
4 изменённых файлов: 173 добавлений и 30 удалений

Просмотреть файл

@ -53,6 +53,60 @@
</content>
<implementation implements="calIDecoratedView">
<constructor><![CDATA[
var pb2 = Components.classes
["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch2);
// Set the preference for the default start of the week
viewElem = document.getAnonymousElementByAttribute(
this, "anonid", "view-element");
try {
viewElem.weekStartOffset = pb2.getIntPref("calendar.week.start");
} catch (ex) {}
// add a preference observer to monitor changes
pb2.addObserver("calendar.", this.mPrefObserver, false);
return;
]]></constructor>
<destructor><![CDATA[
var pb2 = Components.classes
["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch2);
pb2.removeObserver("calendar.", this.mPrefObserver);
return;
]]></destructor>
<field name="mPrefObserver"><![CDATA[
({ calView: this,
observe: function calDecWeekViewPrefChange(subj, topic, pref) {
subj.QueryInterface(Components.interfaces.nsIPrefBranch2);
switch (pref) {
case "calendar.week.start":
viewElem = document.getAnonymousElementByAttribute(
this.calView, "anonid", "view-element");
viewElem.weekStartOffset = subj.getIntPref(pref);
if (!this.calView.startDay || !this.calView.endDay) {
// Don't refresh if we're not initialized
return;
}
// Refresh the view so the settings take effect
this.calView.goToDay(this.calView.selectedDay);
break;
default:
break;
}
return;
}
})
]]></field>
<property name="observerID">
<getter><![CDATA[
return "month-view-observer";

Просмотреть файл

@ -54,6 +54,60 @@
</content>
<implementation implements="calIDecoratedView">
<constructor><![CDATA[
var pb2 = Components.classes
["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch2);
// Set the preference for the default start of the week
viewElem = document.getAnonymousElementByAttribute(
this, "anonid", "view-element");
try {
viewElem.weekStartOffset = pb2.getIntPref("calendar.week.start");
} catch (ex) {}
// add a preference observer to monitor changes
pb2.addObserver("calendar.", this.mPrefObserver, false);
return;
]]></constructor>
<destructor><![CDATA[
var pb2 = Components.classes
["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch2);
pb2.removeObserver("calendar.", this.mPrefObserver);
return;
]]></destructor>
<field name="mPrefObserver"><![CDATA[
({ calView: this,
observe: function calDecWeekViewPrefChange(subj, topic, pref) {
subj.QueryInterface(Components.interfaces.nsIPrefBranch2);
switch (pref) {
case "calendar.week.start":
viewElem = document.getAnonymousElementByAttribute(
this.calView, "anonid", "view-element");
viewElem.weekStartOffset = subj.getIntPref(pref);
if (!this.calView.startDay || !this.calView.endDay) {
// Don't refresh if we're not initialized
return;
}
// Refresh the view so the settings take effect
this.calView.goToDay(this.calView.selectedDay);
break;
default:
break;
}
return;
}
})
]]></field>
<field name="mWeeksInView">4</field>
<property name="weeksInView">
@ -85,7 +139,6 @@
"@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefService);
var calBranch = prefService.getBranch("calendar.");
var weekStartOffset = calBranch.getIntPref("week.start");
// Get the first date that should be shown. This is the
// start of the week of the day that we're centering around
@ -100,23 +153,6 @@
d2.day += 7*(this.mWeeksInView-1);
d2.normalize();
// startOfWeek always returns a Sunday. If the user is in
// a locale that starts weeks on a different day, adjust
// XXX-this currently has no effect
if (weekStartOffset != 0) {
d1.day += weekStartOffset;
d2.day += weekStartOffset;
// In this case, we actually jumped a week ahead
if (aDate.weekday < weekStartOffset) {
d1.day -= 7;
d2.day -= 7;
}
d1.normalize();
d2.normalize();
}
viewElement.setDateRange(d1,d2);
if (this.mWorkdaysOnly) {

Просмотреть файл

@ -77,8 +77,12 @@
viewElement.setStartEndMinutes(this.mStartMin,
this.mEndMin);
try {
this.mWeekStartOffset = pb2.getIntPref("calendar.week.start");
} catch (ex) {}
// add a preference observer to monitor changes
pb2.addObserver("calendar.view.", this.mPrefObserver, false);
pb2.addObserver("calendar.", this.mPrefObserver, false);
return;
]]></constructor>
@ -86,12 +90,13 @@
var pb2 = Components.classes
["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch2);
pb2.removeObserver("calendar.view.", this.mPrefObserver);
pb2.removeObserver("calendar.", this.mPrefObserver);
return;
]]></destructor>
<field name="mStartMin">8 * 60</field>
<field name="mEndMin">17 * 60</field>
<field name="mWeekStartOffset">0</field>
<field name="mPrefObserver"><![CDATA[
({ calView: this,
@ -117,6 +122,18 @@
this.calView.mEndMin);
break;
case "calendar.week.start":
this.calView.mWeekStartOffset = subj.getIntPref(pref);
if (!this.calView.startDay || !this.calView.endDay) {
// Don't refresh if we're not initialized
return;
}
// Refresh the view. goToDay will do the calculation
this.calView.goToDay(this.calView.selectedDay);
break;
default:
break;
}
@ -138,16 +155,11 @@
var viewElement = document.getAnonymousElementByAttribute(this, "anonid", "view-element");
viewElement.tasksInView = this.mTasksInView;
// Get the preferences that we'll need
var prefService = Components.classes[
"@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefService);
var calBranch = prefService.getBranch("calendar.");
var weekStartOffset = calBranch.getIntPref("week.start");
var d1 = aDate.startOfWeek.clone();
var d2 = aDate.endOfWeek.clone();
var weekStartOffset = this.mWeekStartOffset;
// startOfWeek always returns a Sunday. Adjust if the user
// chose a different day to start weeks on.
if (weekStartOffset != 0) {

Просмотреть файл

@ -464,6 +464,8 @@
<field name="mShowDaysOutsideMonth">true</field>
<field name="mTasksInView">true</field>
<field name="mShowFullMonth">true</field>
<field name="mWeekStartOffset">0</field>
<field name="mSelectionObserver"><![CDATA[
({ calView: this,
@ -525,6 +527,15 @@
]]></setter>
</property>
<property name="weekStartOffset">
<getter><![CDATA[
return this.mWeekStartOffset;
]]></getter>
<setter><![CDATA[
this.mWeekStartOffset = val;
]]></setter>
</property>
<property name="controller"
onget="return this.mController;"
onset="return this.mController = val;"/>
@ -634,9 +645,23 @@
<method name="showDate">
<parameter name="aDate"/>
<body><![CDATA[
this.setDateRange(aDate.startOfMonth, aDate.endOfMonth);
<parameter name="aDate"/>
<body><![CDATA[
// We might need to do some adjusting here to make sure we still
// display whole month even with alternative week-start days
var startDate = aDate.startOfMonth;
var endDate = aDate.endOfMonth;
if (startDate.weekday < this.mWeekStartOffset) {
// Go back one week to make sure we display this day
startDate.day -= 7;
}
if (endDate.weekday < this.mWeekStartOffset) {
// Go back one week so we don't display any extra days
endDate.day -= 7;
}
this.setDateRange(startDate, endDate);
this.selectedDay = aDate.getInTimezone(this.mTimezone);
]]></body>
</method>
@ -653,6 +678,11 @@
this.mStartDate = aStartDate.startOfWeek;
this.mEndDate = aEndDate.endOfWeek;
this.mStartDate.day += this.mWeekStartOffset;
this.mEndDate.day += this.mWeekStartOffset;
this.mStartDate.normalize();
this.mEndDate.normalize();
this.refresh();
]]></body>
</method>
@ -744,6 +774,17 @@
return document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", el);
}
// Adjust headers based on the starting day of the week, if necessary
var headerbox = document.getAnonymousElementByAttribute(this, "anonid", "headerbox");
if (headerbox.firstChild.index != this.mWeekStartOffset) {
var i = 0;
for each(header in headerbox.childNodes) {
header.index = (i + this.mWeekStartOffset) % 7;
i++;
}
}
if (this.mSelectedItem) {
this.selectedItem = null;
}