This commit is contained in:
spider%netscape.com 1998-10-06 01:27:21 +00:00
Родитель 464591aba5
Коммит 372a0803bb
10 изменённых файлов: 409 добавлений и 361 удалений

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

@ -1,55 +0,0 @@
<?xml version="1.0" standalone="no" encoding="UTF-8"?>
<!DOCTYPE julian SYSTEM "http://kirkwood.mcom.com/julian.dtd">
<Calendar>
<!-- This is the User Heading Rule -->
<panel name="UserHeadingRule">
<tcc foregroundcolor="#0000FF" name="PrevDay" orientation="west" control="MultiCalendarEventWeekView" usectxrule="day-1" weightminor="0" weightmajor="0"/>
<object class="timebaruserheading" name="tuh" title="Julian Calendar 0.1" weightmajor="1"/>
<tcc foregroundcolor="#0000FF" name="NextDay" orientation="east" control="MultiCalendarEventWeekView" usectxrule="day+1" weightminor="0" weightmajor="0"/>
</panel>
<!-- This is the Timebar Scale Rule -->
<panel name="ScaleViewRule">
<tcc foregroundcolor="#0000FF" name="PrevHour" orientation="north" control="MultiCalendarEventWeekView" usectxrule="hour-1" weightminor="0" weightmajor="0"/>
<timebarscale name="TimebarScale" weightminor="0" weightmajor="1"/>
<tcc foregroundcolor="#0000FF" name="NextHour" orientation="south" control="MultiCalendarEventWeekView" usectxrule="hour+1" weightminor="0" weightmajor="0"/>
</panel>
<!-- This is the MonthController and Todo List -->
<panel name="ToDoCalViewRule">
<mcc name="MiniCalendar" control="MultiCalendarEventWeekView" usectxrule="DayList"/>
<todocanvas name="ToDoCanvas"/>
</panel>
<!-- This is the MultiDayView and Command Bar -->
<panel name="MultiDayViewRule">
<multiuserviewcanvas name="MultiCalendarEventWeekView" control="MiniCalendar" repeatable="DayContext" minrepeat="1" maxrepeat="5" count="5">
<commandcanvas name="CommandCanvas" weightmajor="0" weightminor="0">
</panel>
<!-- This is the MultiDay, Scale and Todo together -->
<panel name="MultiCalendarEventWeekViewPanel">
<control rule="ScaleViewRule" layout="ybox" weightmajor="0" weightminor="0"/>
<control rule="MultiDayViewRule" layout="ybox" width="400" weightmajor="1"/>
<control rule="ToDoCalViewRule" layout="ybox" weightmajor="0" weightminor="0"/>
<!-- <set tag="Canvas" type="EventComponentCanvas"/>-->
</panel>
<!-- This is the user header with the big Multi One -->
<panel id="MultiCalendarUserEventWeekView" label="Day View">
<control id="uhr" rule="UserHeadingRule" layout="xbox" weightminor="0" weightmajor="0"/>
<control id="mcewv" rule="MultiCalendarEventWeekViewPanel" layout="xbox"/>
</panel>
<!-- This is the root GUI panel. This is where life begins -->
<panel id="MainCalendarPanel" label="Calendar UI">
<control id="uhr" rule="MultiCalendarUserEventWeekView" layout="ybox"/>
<ctx id="StartContext" default="today"/>
</panel>
</Calendar>

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

@ -1,55 +0,0 @@
<?xml version="1.0" standalone="no" encoding="UTF-8"?>
<!DOCTYPE julian SYSTEM "http://kirkwood.mcom.com/julian.dtd">
<Calendar>
<!-- This is the User Heading Rule -->
<panel name="UserHeadingRule">
<tcc foregroundcolor="#0000FF" name="PrevDay" orientation="west" control="MultiCalendarEventWeekView" usectxrule="day-1" weightminor="0" weightmajor="0"/>
<object class="timebaruserheading" name="tuh" title="Julian Calendar 0.1" weightmajor="1"/>
<tcc foregroundcolor="#0000FF" name="NextDay" orientation="east" control="MultiCalendarEventWeekView" usectxrule="day+1" weightminor="0" weightmajor="0"/>
</panel>
<!-- This is the Timebar Scale Rule -->
<panel name="ScaleViewRule">
<tcc foregroundcolor="#0000FF" name="PrevHour" orientation="north" control="MultiCalendarEventWeekView" usectxrule="hour-1" weightminor="0" weightmajor="0"/>
<timebarscale name="TimebarScale" weightminor="0" weightmajor="1"/>
<tcc foregroundcolor="#0000FF" name="NextHour" orientation="south" control="MultiCalendarEventWeekView" usectxrule="hour+1" weightminor="0" weightmajor="0"/>
</panel>
<!-- This is the MonthController and Todo List -->
<panel name="ToDoCalViewRule">
<mcc name="MiniCalendar" control="MultiCalendarEventWeekView" usectxrule="DayList"/>
<todocanvas name="ToDoCanvas"/>
</panel>
<!-- This is the MultiDayView and Command Bar -->
<panel name="MultiDayViewRule">
<multidayviewcanvas name="MultiCalendarEventWeekView" control="MiniCalendar" repeatable="DayContext" minrepeat="1" maxrepeat="5" count="5">
<commandcanvas name="CommandCanvas" weightmajor="0" weightminor="0">
</panel>
<!-- This is the MultiDay, Scale and Todo together -->
<panel name="MultiCalendarEventWeekViewPanel">
<control rule="ScaleViewRule" layout="ybox" weightmajor="0" weightminor="0"/>
<control rule="MultiDayViewRule" layout="ybox" width="400" weightmajor="1"/>
<control rule="ToDoCalViewRule" layout="ybox" weightmajor="0" weightminor="0"/>
<!-- <set tag="Canvas" type="EventComponentCanvas"/>-->
</panel>
<!-- This is the user header with the big Multi One -->
<panel id="MultiCalendarUserEventWeekView" label="Day View">
<control id="uhr" rule="UserHeadingRule" layout="xbox" weightminor="0" weightmajor="0"/>
<control id="mcewv" rule="MultiCalendarEventWeekViewPanel" layout="xbox"/>
</panel>
<!-- This is the root GUI panel. This is where life begins -->
<panel id="MainCalendarPanel" label="Calendar UI">
<control id="uhr" rule="MultiCalendarUserEventWeekView" layout="ybox"/>
<ctx id="StartContext" default="today"/>
</panel>
</Calendar>

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

@ -40,24 +40,12 @@ public:
NS_IMETHOD_(PRUint32) GetNumberViewableDays();
NS_IMETHOD SetNumberViewableDays(PRUint32 aNumberViewableDays);
NS_IMETHOD SetTimeContext(nsICalTimeContext * aContext);
NS_IMETHOD SetParameter(nsString& aKey, nsString& aValue) ;
NS_IMETHOD SetTimeContext(nsICalTimeContext * aContext);
// nsIXPFCCommandReceiver methods
NS_IMETHOD Action(nsIXPFCCommand * aCommand);
NS_IMETHOD SetChildTimeContext(nsCalTimebarCanvas * aCanvas,
nsICalTimeContext * aContext,
PRUint32 increment);
NS_IMETHOD ChangeChildDateTime(nsCalTimebarCanvas * aCanvas,
nsDateTime * aDateTime);
NS_IMETHOD ChangeChildDateTime(PRUint32 aIndex, nsDateTime * aDateTime);
protected:
~nsCalMultiDayViewCanvas();

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

@ -32,6 +32,7 @@ public:
NS_DECL_ISUPPORTS
NS_IMETHOD Init();
NS_IMETHOD SetParameter(nsString& aKey, nsString& aValue) ;
protected:
~nsCalMultiUserViewCanvas();

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

@ -34,9 +34,14 @@ public:
NS_IMETHOD Init();
NS_IMETHOD SetShowHeaders(PRBool aShowHeaders);
NS_IMETHOD SetShowStatus(PRBool aShowHeaders);
NS_IMETHOD_(PRBool) GetShowHeaders();
NS_IMETHOD SetShowStatus(PRBool aShowHeaders);
NS_IMETHOD_(PRBool) GetShowStatus();
NS_IMETHOD SetShowTimeScale(PRBool aShowTimeScale);
NS_IMETHOD_(PRBool) GetShowTimeScale();
NS_IMETHOD SetParameter(nsString& aKey, nsString& aValue) ;
NS_IMETHOD Action(nsIXPFCCommand * aCommand);
@ -49,6 +54,7 @@ protected:
private:
PRBool mShowHeaders;
PRBool mShowStatus;
PRBool mShowTimeScale;
};

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

@ -24,6 +24,7 @@
#include "nsXPFCCanvas.h"
#include "nsICalTimeContext.h"
#include "nsCalCanvas.h"
#include "nsDateTime.h"
class nsCalTimebarCanvas : public nsCalCanvas
@ -44,6 +45,13 @@ public:
const nsRect& aDirtyRect);
NS_IMETHOD SetParameter(nsString& aKey, nsString& aValue) ;
NS_IMETHOD SetChildTimeContext(nsCalTimebarCanvas * aCanvas,
nsICalTimeContext * aContext,
PRUint32 increment);
NS_IMETHOD ChangeChildDateTime(nsCalTimebarCanvas * aCanvas,
nsDateTime * aDateTime);
NS_IMETHOD ChangeChildDateTime(PRUint32 aIndex, nsDateTime * aDateTime);
protected:

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

@ -177,7 +177,13 @@ nsIXPFCCanvas * nsCalMultiDayViewCanvas :: AddDayViewCanvas()
AddChildCanvas(canvas);
canvas->SetBackgroundColor(GetBackgroundColor());
((nsBoxLayout *)(canvas->GetLayout()))->SetLayoutAlignment(eLayoutAlignment_vertical);
nsLayoutAlignment la = ((nsBoxLayout *)(GetLayout()))->GetLayoutAlignment();
if (eLayoutAlignment_horizontal == la)
((nsBoxLayout *)(canvas->GetLayout()))->SetLayoutAlignment(eLayoutAlignment_vertical);
else
((nsBoxLayout *)(canvas->GetLayout()))->SetLayoutAlignment(eLayoutAlignment_horizontal);
parent = canvas;
@ -256,226 +262,6 @@ nsIXPFCCanvas * nsCalMultiDayViewCanvas :: AddDayViewCanvas()
return (parent);
}
nsresult nsCalMultiDayViewCanvas :: ChangeChildDateTime(PRUint32 aIndex, nsDateTime * aDateTime)
{
nsresult res = NS_OK;
nsIIterator * iterator ;
nsCalTimebarCanvas * canvas ;
PRUint32 index = 0;
res = CreateIterator(&iterator);
if (NS_OK != res)
return res;
iterator->Init();
while((!(iterator->IsDone())))
{
if ((index == aIndex)) {
/*
* Iterate through these children til we find the right one
*/
canvas = (nsCalTimebarCanvas *) iterator->CurrentItem();
nsresult res2 = NS_OK;
nsIIterator * iterator2 ;
nsCalTimebarCanvas * canvas2 ;
res2 = canvas->CreateIterator(&iterator2);
if (NS_OK != res2)
return res2;
iterator2->Init();
while(!(iterator2->IsDone()))
{
canvas2 = (nsCalTimebarCanvas *) iterator2->CurrentItem();
nsCalTimebarCanvas * canvas_iface = nsnull;;
canvas2->QueryInterface(kCalTimebarCanvasCID, (void**) &canvas_iface);
if ((canvas_iface != nsnull)) {
ChangeChildDateTime(canvas_iface, aDateTime);
NS_RELEASE(canvas_iface);
}
iterator2->Next();
}
}
index++;
iterator->Next();
}
return res;
}
/*
* Call SetContext on all child canvas that support the
* nsCalTimebarCanvas interface. This routine is recursive.
*
* We need to store this TimeContext for ourselves also in case
* we get asked to add new DayView Canvas's, we'll ask the DayView
* to copy our context to start with.
*/
nsresult nsCalMultiDayViewCanvas :: SetTimeContext(nsICalTimeContext * aContext)
{
nsresult res = NS_OK;
nsIIterator * iterator ;
nsCalTimebarCanvas * canvas ;
PRUint32 index = 0;
res = CreateIterator(&iterator);
if (NS_OK != res)
return res;
iterator->Init();
while(!(iterator->IsDone()))
{
/*
* Iterate through these children til we find the right one
*/
canvas = (nsCalTimebarCanvas *) iterator->CurrentItem();
nsresult res2 = NS_OK;
nsIIterator * iterator2 ;
nsCalTimebarCanvas * canvas2 ;
res2 = canvas->CreateIterator(&iterator2);
if (NS_OK != res2)
return res2;
iterator2->Init();
while(!(iterator2->IsDone()))
{
canvas2 = (nsCalTimebarCanvas *) iterator2->CurrentItem();
nsCalTimebarCanvas * canvas_iface = nsnull;;
canvas2->QueryInterface(kCalTimebarCanvasCID, (void**) &canvas_iface);
if (canvas_iface) {
SetChildTimeContext(canvas_iface, aContext, index);
NS_RELEASE(canvas_iface);
}
iterator2->Next();
}
index++;
iterator->Next();
}
return (nsCalTimebarComponentCanvas::SetTimeContext(aContext));
}
nsresult nsCalMultiDayViewCanvas :: ChangeChildDateTime(nsCalTimebarCanvas * aCanvas,
nsDateTime * aDateTime)
{
nsIDateTime * datetime;
nsICalTimeContext * context = aCanvas->GetTimeContext();
if (context == nsnull)
return NS_OK;
context->SetDate(aDateTime);
datetime = context->GetDTStart() ;
datetime->SetYear(aDateTime->GetYear());
datetime->SetMonth(aDateTime->GetMonth());
datetime->SetDay(aDateTime->GetDay());
datetime = context->GetDTEnd() ;
datetime->SetYear(aDateTime->GetYear());
datetime->SetMonth(aDateTime->GetMonth());
datetime->SetDay(aDateTime->GetDay()+1);
datetime = context->GetDTFirstVisible() ;
datetime->SetYear(aDateTime->GetYear());
datetime->SetMonth(aDateTime->GetMonth());
datetime->SetDay(aDateTime->GetDay());
datetime = context->GetDTLastVisible() ;
datetime->SetYear(aDateTime->GetYear());
datetime->SetMonth(aDateTime->GetMonth());
datetime->SetDay(aDateTime->GetDay());
return NS_OK;
}
nsresult nsCalMultiDayViewCanvas :: SetChildTimeContext(nsCalTimebarCanvas * aCanvas,
nsICalTimeContext * aContext,
PRUint32 increment)
{
nsICalTimeContext * context;
static NS_DEFINE_IID(kCCalTimeContextCID, NS_CAL_TIME_CONTEXT_CID);
static NS_DEFINE_IID(kCCalTimeContextIID, NS_ICAL_TIME_CONTEXT_IID);
nsresult res = nsRepository::CreateInstance(kCCalTimeContextCID,
nsnull,
kCCalTimeContextIID,
(void **)&context);
if (NS_OK != res)
return res ;
context->Init();
context->Copy(aContext);
/*
* Register this context to observe the copied context. We'll
* need to deal with context mgmt if these things get frivolously
* destroyed/created.
*/
static NS_DEFINE_IID(kXPFCObserverIID, NS_IXPFC_OBSERVER_IID);
static NS_DEFINE_IID(kXPFCSubjectIID, NS_IXPFC_SUBJECT_IID);
nsIXPFCSubject * context_subject;
nsIXPFCObserver * context_observer;
aContext->QueryInterface(kXPFCSubjectIID, (void **)&context_subject);
context->QueryInterface(kXPFCObserverIID, (void **)&context_observer);
gXPFCToolkit->GetObserverManager()->Register(context_subject, context_observer);
/*
* TODO: Add the increment here for the appropriate period
*/
aCanvas->SetTimeContext(context);
context->AddPeriod(nsCalPeriodFormat_kDay,increment);
return NS_OK;
}
nsresult nsCalMultiDayViewCanvas::Action(nsIXPFCCommand * aCommand)
{
@ -683,3 +469,74 @@ nsresult nsCalMultiDayViewCanvas :: SetParameter(nsString& aKey, nsString& aValu
return (nsCalMultiViewCanvas::SetParameter(aKey, aValue));
}
/*
* Call SetContext on all child canvas that support the
* nsCalTimebarCanvas interface. This routine is recursive.
*
* We need to store this TimeContext for ourselves also in case
* we get asked to add new DayView Canvas's, we'll ask the DayView
* to copy our context to start with.
*/
nsresult nsCalMultiDayViewCanvas :: SetTimeContext(nsICalTimeContext * aContext)
{
nsresult res = NS_OK;
nsIIterator * iterator ;
nsCalTimebarCanvas * canvas ;
PRUint32 index = 0;
res = CreateIterator(&iterator);
if (NS_OK != res)
return res;
iterator->Init();
while(!(iterator->IsDone()))
{
/*
* Iterate through these children til we find the right one
*/
canvas = (nsCalTimebarCanvas *) iterator->CurrentItem();
nsresult res2 = NS_OK;
nsIIterator * iterator2 ;
nsCalTimebarCanvas * canvas2 ;
res2 = canvas->CreateIterator(&iterator2);
if (NS_OK != res2)
return res2;
iterator2->Init();
while(!(iterator2->IsDone()))
{
canvas2 = (nsCalTimebarCanvas *) iterator2->CurrentItem();
nsCalTimebarCanvas * canvas_iface = nsnull;;
canvas2->QueryInterface(kCalTimebarCanvasCID, (void**) &canvas_iface);
if (canvas_iface) {
SetChildTimeContext(canvas_iface, aContext, index);
NS_RELEASE(canvas_iface);
}
iterator2->Next();
}
index++;
iterator->Next();
}
return (nsCalMultiViewCanvas :: SetTimeContext(aContext));
}

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

@ -16,6 +16,7 @@
* Reserved.
*/
#include "nsCalMultiDayViewCanvas.h"
#include "nsCalMultiUserViewCanvas.h"
#include "nsCalTimebarTimeHeading.h"
#include "nsBoxLayout.h"
@ -26,6 +27,7 @@
#include "nsCalDayListCommand.h"
#include "nsCalNewModelCommand.h"
#include "nscalstrings.h"
#include "nsxpfcstrings.h"
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
@ -71,11 +73,130 @@ NS_IMPL_ADDREF(nsCalMultiUserViewCanvas)
NS_IMPL_RELEASE(nsCalMultiUserViewCanvas)
/*
* A MultiUser Canvas has 1 or more MultiDay Canvas's, one for each user
*
* So, let's create the default of 1 MuiltiDay for this canvas and give it
* a week's worth of views.
*
* Ideally, we should probably figure out an XML syntax to specify this stuff
*
*/
nsresult nsCalMultiUserViewCanvas :: Init()
{
return (nsCalMultiViewCanvas::Init());
/*
* create a multiday as a child of us
*/
static NS_DEFINE_IID(kCalMultiDayViewCanvasCID, NS_CAL_MULTIDAYVIEWCANVAS_CID);
static NS_DEFINE_IID(kIXPFCCanvasIID, NS_IXPFC_CANVAS_IID);
nsCalMultiDayViewCanvas * multi;
nsresult rv = nsCalMultiViewCanvas::Init();
nsresult res = nsRepository::CreateInstance(kCalMultiDayViewCanvasCID,
nsnull,
kIXPFCCanvasIID,
(void **)&multi);
if (NS_OK == res)
{
multi->Init();
AddChildCanvas(multi);
multi->SetShowTimeScale(PR_TRUE);
nsLayoutAlignment la = ((nsBoxLayout *)(GetLayout()))->GetLayoutAlignment();
((nsBoxLayout *)(multi->GetLayout()))->SetLayoutAlignment(la);
multi->SetNumberViewableDays(1); // XXX
}
return (rv);
}
nsresult nsCalMultiUserViewCanvas :: SetParameter(nsString& aKey, nsString& aValue)
{
PRInt32 error = 0;
if (aKey.EqualsIgnoreCase(XPFC_STRING_LAYOUT))
{
// XXX: Layout should implement this interface.
// Then, put functionality in the core layout class
// to identify the type of layout object needed.
if (aValue.EqualsIgnoreCase(XPFC_STRING_XBOX)) {
((nsBoxLayout *)GetLayout())->SetLayoutAlignment(eLayoutAlignment_horizontal);
} else if (aValue.EqualsIgnoreCase(XPFC_STRING_YBOX)) {
((nsBoxLayout *)GetLayout())->SetLayoutAlignment(eLayoutAlignment_vertical);
}
// XXX: We need to separate layout from the content model ... arghh...
//
// If someone changes our layout, pass it on to any MultiDay canvas
// that are our children.
nsresult res ;
nsIIterator * iterator ;
nsIXPFCCanvas * canvas ;
res = CreateIterator(&iterator);
nsLayoutAlignment la = ((nsBoxLayout *)(GetLayout()))->GetLayoutAlignment();
if (NS_OK == res)
{
iterator->Init();
while(!(iterator->IsDone()))
{
canvas = (nsIXPFCCanvas *) iterator->CurrentItem();
((nsBoxLayout *)(canvas->GetLayout()))->SetLayoutAlignment(la);
/*
* Now, iterate thru its children and set the layout alignment
*/
{
nsIIterator * iterator2 ;
res = canvas->CreateIterator(&iterator2);
if (NS_OK == res)
{
iterator2->Init();
while(!(iterator2->IsDone()))
{
canvas = (nsIXPFCCanvas *) iterator2->CurrentItem();
((nsBoxLayout *)(canvas->GetLayout()))->SetLayoutAlignment(la);
iterator2->Next();
}
NS_RELEASE(iterator2);
}
}
iterator->Next();
}
NS_RELEASE(iterator);
}
}
return (nsXPFCCanvas :: SetParameter(aKey, aValue));
}

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

@ -36,8 +36,10 @@ static NS_DEFINE_IID(kCalTimebarCanvasCID, NS_CAL_TIMEBARCANVAS_CID);
nsCalMultiViewCanvas :: nsCalMultiViewCanvas(nsISupports* outer) : nsCalTimebarComponentCanvas(outer)
{
NS_INIT_REFCNT();
mShowHeaders = PR_TRUE;
mShowStatus = PR_FALSE;
mShowHeaders = PR_TRUE;
mShowStatus = PR_FALSE;
mShowTimeScale = PR_FALSE;
}
nsCalMultiViewCanvas :: ~nsCalMultiViewCanvas()
@ -93,23 +95,34 @@ PRBool nsCalMultiViewCanvas :: GetShowHeaders()
return (mShowHeaders);
}
PRBool nsCalMultiViewCanvas :: GetShowStatus()
{
return (mShowStatus);
}
nsresult nsCalMultiViewCanvas :: SetShowHeaders(PRBool aShowHeaders)
{
mShowHeaders = aShowHeaders;
return (NS_OK);
}
PRBool nsCalMultiViewCanvas :: GetShowStatus()
{
return (mShowStatus);
}
nsresult nsCalMultiViewCanvas :: SetShowStatus(PRBool aShowStatus)
{
mShowStatus = aShowStatus;
return (NS_OK);
}
PRBool nsCalMultiViewCanvas :: GetShowTimeScale()
{
return (mShowTimeScale);
}
nsresult nsCalMultiViewCanvas :: SetShowTimeScale(PRBool aShowTimeScale)
{
mShowTimeScale = aShowTimeScale;
return (NS_OK);
}
nsresult nsCalMultiViewCanvas::Action(nsIXPFCCommand * aCommand)

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

@ -18,6 +18,7 @@
#include "nsCalTimebarCanvas.h"
#include "nsCalUICIID.h"
#include "nsXPFCToolkit.h"
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
static NS_DEFINE_IID(kCalTimebarCanvasCID, NS_CAL_TIMEBARCANVAS_CID);
@ -94,14 +95,6 @@ PRUint32 nsCalTimebarCanvas::GetVisibleMinorIntervals()
return (mTimeContext->GetMinorIncrementInterval()) ;
}
nsresult nsCalTimebarCanvas :: SetTimeContext(nsICalTimeContext * aContext)
{
NS_IF_RELEASE(mTimeContext);
mTimeContext = aContext;
NS_ADDREF(mTimeContext);
return NS_OK;
}
nsICalTimeContext * nsCalTimebarCanvas :: GetTimeContext()
{
/*
@ -233,3 +226,174 @@ nsresult nsCalTimebarCanvas :: SetParameter(nsString& aKey, nsString& aValue)
return (nsCalCanvas::SetParameter(aKey, aValue));
}
/*
* Call SetContext on all child canvas that support the
* nsCalTimebarCanvas interface. This routine is recursive.
*
* We need to store this TimeContext for ourselves also in case
* we get asked to add new DayView Canvas's, we'll ask the DayView
* to copy our context to start with.
*/
nsresult nsCalTimebarCanvas :: SetTimeContext(nsICalTimeContext * aContext)
{
NS_IF_RELEASE(mTimeContext);
mTimeContext = aContext;
NS_ADDREF(mTimeContext);
return (NS_OK);
}
nsresult nsCalTimebarCanvas :: ChangeChildDateTime(nsCalTimebarCanvas * aCanvas,
nsDateTime * aDateTime)
{
nsIDateTime * datetime;
nsICalTimeContext * context = aCanvas->GetTimeContext();
if (context == nsnull)
return NS_OK;
context->SetDate(aDateTime);
datetime = context->GetDTStart() ;
datetime->SetYear(aDateTime->GetYear());
datetime->SetMonth(aDateTime->GetMonth());
datetime->SetDay(aDateTime->GetDay());
datetime = context->GetDTEnd() ;
datetime->SetYear(aDateTime->GetYear());
datetime->SetMonth(aDateTime->GetMonth());
datetime->SetDay(aDateTime->GetDay()+1);
datetime = context->GetDTFirstVisible() ;
datetime->SetYear(aDateTime->GetYear());
datetime->SetMonth(aDateTime->GetMonth());
datetime->SetDay(aDateTime->GetDay());
datetime = context->GetDTLastVisible() ;
datetime->SetYear(aDateTime->GetYear());
datetime->SetMonth(aDateTime->GetMonth());
datetime->SetDay(aDateTime->GetDay());
return NS_OK;
}
nsresult nsCalTimebarCanvas :: SetChildTimeContext(nsCalTimebarCanvas * aCanvas,
nsICalTimeContext * aContext,
PRUint32 increment)
{
nsICalTimeContext * context;
static NS_DEFINE_IID(kCCalTimeContextCID, NS_CAL_TIME_CONTEXT_CID);
static NS_DEFINE_IID(kCCalTimeContextIID, NS_ICAL_TIME_CONTEXT_IID);
nsresult res = nsRepository::CreateInstance(kCCalTimeContextCID,
nsnull,
kCCalTimeContextIID,
(void **)&context);
if (NS_OK != res)
return res ;
context->Init();
context->Copy(aContext);
/*
* Register this context to observe the copied context. We'll
* need to deal with context mgmt if these things get frivolously
* destroyed/created.
*/
static NS_DEFINE_IID(kXPFCObserverIID, NS_IXPFC_OBSERVER_IID);
static NS_DEFINE_IID(kXPFCSubjectIID, NS_IXPFC_SUBJECT_IID);
nsIXPFCSubject * context_subject;
nsIXPFCObserver * context_observer;
aContext->QueryInterface(kXPFCSubjectIID, (void **)&context_subject);
context->QueryInterface(kXPFCObserverIID, (void **)&context_observer);
gXPFCToolkit->GetObserverManager()->Register(context_subject, context_observer);
/*
* TODO: Add the increment here for the appropriate period
*/
aCanvas->SetTimeContext(context);
context->AddPeriod(nsCalPeriodFormat_kDay,increment);
return NS_OK;
}
nsresult nsCalTimebarCanvas :: ChangeChildDateTime(PRUint32 aIndex, nsDateTime * aDateTime)
{
nsresult res = NS_OK;
nsIIterator * iterator ;
nsCalTimebarCanvas * canvas ;
PRUint32 index = 0;
res = CreateIterator(&iterator);
if (NS_OK != res)
return res;
iterator->Init();
while((!(iterator->IsDone())))
{
if ((index == aIndex)) {
/*
* Iterate through these children til we find the right one
*/
canvas = (nsCalTimebarCanvas *) iterator->CurrentItem();
nsresult res2 = NS_OK;
nsIIterator * iterator2 ;
nsCalTimebarCanvas * canvas2 ;
res2 = canvas->CreateIterator(&iterator2);
if (NS_OK != res2)
return res2;
iterator2->Init();
while(!(iterator2->IsDone()))
{
canvas2 = (nsCalTimebarCanvas *) iterator2->CurrentItem();
nsCalTimebarCanvas * canvas_iface = nsnull;;
canvas2->QueryInterface(kCalTimebarCanvasCID, (void**) &canvas_iface);
if ((canvas_iface != nsnull)) {
ChangeChildDateTime(canvas_iface, aDateTime);
NS_RELEASE(canvas_iface);
}
iterator2->Next();
}
}
index++;
iterator->Next();
}
return res;
}