/*
 * DO NOT EDIT.  THIS FILE IS GENERATED FROM calIDecoratedView.idl
 */

#ifndef __gen_calIDecoratedView_h__
#define __gen_calIDecoratedView_h__


#ifndef __gen_nsISupports_h__
#include "nsISupports.h"
#endif

/* For IDL files that don't want to include root IDL files. */
#ifndef NS_NO_VTABLE
#define NS_NO_VTABLE
#endif
class calICalendar; /* forward declaration */

class calIDateTime; /* forward declaration */

class calICalendarViewController; /* forward declaration */

class calIItemBase; /* forward declaration */


/* starting interface:    calIDecoratedView */
#define CALIDECORATEDVIEW_IID_STR "7ba617eb-f19b-400b-9a7d-4156b7c6f028"

#define CALIDECORATEDVIEW_IID \
  {0x7ba617eb, 0xf19b, 0x400b, \
    { 0x9a, 0x7d, 0x41, 0x56, 0xb7, 0xc6, 0xf0, 0x28 }}

/**
 * calIDecoratedView is an interface for modifying/extending the standard
 * calICalendarView, typically to add specific navigation functions while
 * removing the unnecessary code duplication this would generally require.
 * Because it contains a calICalendarView as an anonymous node, not easily
 * accessible, it must therefore expose several of that interface's methods and
 * attributes, as well as its own.
 * 
 * @note Implementations of this interface are intended to be the home
 * for view preference handling.  The lower-level views (ie
 * implementers of calICalendarView) are intended to be pure widgetry,
 * and this sort of view should be pluggable, meaning that callers
 * shouldn't need to know about view-specific preferences.
 */
class NS_NO_VTABLE calIDecoratedView : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(CALIDECORATEDVIEW_IID)

  /**
   * Oftentimes other elements in the DOM in which a calIDecoratedView is
   * used want to be aware of whether or not the view is selected.  An element
   * whose ID is observerID can be included in that DOM, and will be set to be
   * enabled or disabled depending on whether the view is selected.
   */
  /* readonly attribute AUTF8String observerID; */
  NS_IMETHOD GetObserverID(nsACString & aObserverID) = 0;

  /**
   * Generally corresponds to whether or not the view has been previously shown.
   * Strictly speaking, it reports whether displayCalendar, startDay and endDay
   * are all non-null.
   */
  /* readonly attribute boolean initialized; */
  NS_IMETHOD GetInitialized(PRBool *aInitialized) = 0;

  /**
   * The displayCalendar of the embedded calICalendarView.  This *must* be set
   * prior to calling goToDay the first time.
   */
  /* attribute calICalendar displayCalender; */
  NS_IMETHOD GetDisplayCalender(calICalendar * *aDisplayCalender) = 0;
  NS_IMETHOD SetDisplayCalender(calICalendar * aDisplayCalender) = 0;

  /**
   * The controller of the calICalendarView that is embedded
   */
  /* attribute calICalendarViewController controller; */
  NS_IMETHOD GetController(calICalendarViewController * *aController) = 0;
  NS_IMETHOD SetController(calICalendarViewController * aController) = 0;

  /**
   * If this is set to 'true', the view should not display days specified to be
   * non-workdays.  The implementor is responsible for obtaining what those
   * days are on its own.
   */
  /* attribute boolean workdaysOnly; */
  NS_IMETHOD GetWorkdaysOnly(PRBool *aWorkdaysOnly) = 0;
  NS_IMETHOD SetWorkdaysOnly(PRBool aWorkdaysOnly) = 0;

  /**
   * Whether or not tasks are to be displayed in the calICalendarView
   */
  /* attribute boolean tasksInView; */
  NS_IMETHOD GetTasksInView(PRBool *aTasksInView) = 0;
  NS_IMETHOD SetTasksInView(PRBool aTasksInView) = 0;

  /**
   * If set, the view will be rotated (i.e time on top, date at left)
   */
  /* attribute boolean rotated; */
  NS_IMETHOD GetRotated(PRBool *aRotated) = 0;
  NS_IMETHOD SetRotated(PRBool aRotated) = 0;

  /**
   * Whether or not completed tasks are shown in the calICalendarView
   */
  /* attribute boolean showCompleted; */
  NS_IMETHOD GetShowCompleted(PRBool *aShowCompleted) = 0;
  NS_IMETHOD SetShowCompleted(PRBool aShowCompleted) = 0;

  /**
   * See calICalendarView.idl for the description of these functions.
   */
  /* void getSelectedItems (out unsigned long aCount, [array, size_is (aCount), retval] out calIItemBase aItems); */
  NS_IMETHOD GetSelectedItems(PRUint32 *aCount, calIItemBase ***aItems) = 0;

  /* void setSelectedItems (in unsigned long aCount, [array, size_is (aCount)] in calIItemBase aItems, in boolean aSuppressEvent); */
  NS_IMETHOD SetSelectedItems(PRUint32 aCount, calIItemBase **aItems, PRBool aSuppressEvent) = 0;

  /**
   * The selectedDay in the embedded view.  Use the goToDay function to set a
   * particular day to be selected.
   */
  /* readonly attribute calIDateTime selectedDay; */
  NS_IMETHOD GetSelectedDay(calIDateTime * *aSelectedDay) = 0;

  /**
   * The first day shown in the embedded view
   */
  /* readonly attribute calIDateTime startDay; */
  NS_IMETHOD GetStartDay(calIDateTime * *aStartDay) = 0;

  /**
   * The last day shown in the embedded view
   */
  /* readonly attribute calIDateTime endDay; */
  NS_IMETHOD GetEndDay(calIDateTime * *aEndDay) = 0;

  /**
   * Get or set the timezone that the view's elements should be displayed in.
   * Setting this does not refresh the view.
   */
  /* attribute AUTF8String timezone; */
  NS_IMETHOD GetTimezone(nsACString & aTimezone) = 0;
  NS_IMETHOD SetTimezone(const nsACString & aTimezone) = 0;

  /**
   * Ensures that the given date is visible, and that the view is centered
   * around this date.  aDate becomes the selectedDay of the view.  Calling
   * this function with the current selectedDay effectively refreshes the view
   *
   * @param aDate       the date that must be shown in the view and becomes 
   *                    the selected day
   */
  /* void goToDay (in calIDateTime aDate); */
  NS_IMETHOD GoToDay(calIDateTime *aDate) = 0;

  /**
   * Moves the view a specific number of pages.  Negative numbers correspond to
   * moving the view backwards.  Note that it is up to the view to determine
   * how the selected day ought to move as well.
   *
   * @param aNumber       the number of pages to move the view 
   */
  /* void moveView (in long aNumber); */
  NS_IMETHOD MoveView(PRInt32 aNumber) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_CALIDECORATEDVIEW \
  NS_IMETHOD GetObserverID(nsACString & aObserverID); \
  NS_IMETHOD GetInitialized(PRBool *aInitialized); \
  NS_IMETHOD GetDisplayCalender(calICalendar * *aDisplayCalender); \
  NS_IMETHOD SetDisplayCalender(calICalendar * aDisplayCalender); \
  NS_IMETHOD GetController(calICalendarViewController * *aController); \
  NS_IMETHOD SetController(calICalendarViewController * aController); \
  NS_IMETHOD GetWorkdaysOnly(PRBool *aWorkdaysOnly); \
  NS_IMETHOD SetWorkdaysOnly(PRBool aWorkdaysOnly); \
  NS_IMETHOD GetTasksInView(PRBool *aTasksInView); \
  NS_IMETHOD SetTasksInView(PRBool aTasksInView); \
  NS_IMETHOD GetRotated(PRBool *aRotated); \
  NS_IMETHOD SetRotated(PRBool aRotated); \
  NS_IMETHOD GetShowCompleted(PRBool *aShowCompleted); \
  NS_IMETHOD SetShowCompleted(PRBool aShowCompleted); \
  NS_IMETHOD GetSelectedItems(PRUint32 *aCount, calIItemBase ***aItems); \
  NS_IMETHOD SetSelectedItems(PRUint32 aCount, calIItemBase **aItems, PRBool aSuppressEvent); \
  NS_IMETHOD GetSelectedDay(calIDateTime * *aSelectedDay); \
  NS_IMETHOD GetStartDay(calIDateTime * *aStartDay); \
  NS_IMETHOD GetEndDay(calIDateTime * *aEndDay); \
  NS_IMETHOD GetTimezone(nsACString & aTimezone); \
  NS_IMETHOD SetTimezone(const nsACString & aTimezone); \
  NS_IMETHOD GoToDay(calIDateTime *aDate); \
  NS_IMETHOD MoveView(PRInt32 aNumber); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_CALIDECORATEDVIEW(_to) \
  NS_IMETHOD GetObserverID(nsACString & aObserverID) { return _to GetObserverID(aObserverID); } \
  NS_IMETHOD GetInitialized(PRBool *aInitialized) { return _to GetInitialized(aInitialized); } \
  NS_IMETHOD GetDisplayCalender(calICalendar * *aDisplayCalender) { return _to GetDisplayCalender(aDisplayCalender); } \
  NS_IMETHOD SetDisplayCalender(calICalendar * aDisplayCalender) { return _to SetDisplayCalender(aDisplayCalender); } \
  NS_IMETHOD GetController(calICalendarViewController * *aController) { return _to GetController(aController); } \
  NS_IMETHOD SetController(calICalendarViewController * aController) { return _to SetController(aController); } \
  NS_IMETHOD GetWorkdaysOnly(PRBool *aWorkdaysOnly) { return _to GetWorkdaysOnly(aWorkdaysOnly); } \
  NS_IMETHOD SetWorkdaysOnly(PRBool aWorkdaysOnly) { return _to SetWorkdaysOnly(aWorkdaysOnly); } \
  NS_IMETHOD GetTasksInView(PRBool *aTasksInView) { return _to GetTasksInView(aTasksInView); } \
  NS_IMETHOD SetTasksInView(PRBool aTasksInView) { return _to SetTasksInView(aTasksInView); } \
  NS_IMETHOD GetRotated(PRBool *aRotated) { return _to GetRotated(aRotated); } \
  NS_IMETHOD SetRotated(PRBool aRotated) { return _to SetRotated(aRotated); } \
  NS_IMETHOD GetShowCompleted(PRBool *aShowCompleted) { return _to GetShowCompleted(aShowCompleted); } \
  NS_IMETHOD SetShowCompleted(PRBool aShowCompleted) { return _to SetShowCompleted(aShowCompleted); } \
  NS_IMETHOD GetSelectedItems(PRUint32 *aCount, calIItemBase ***aItems) { return _to GetSelectedItems(aCount, aItems); } \
  NS_IMETHOD SetSelectedItems(PRUint32 aCount, calIItemBase **aItems, PRBool aSuppressEvent) { return _to SetSelectedItems(aCount, aItems, aSuppressEvent); } \
  NS_IMETHOD GetSelectedDay(calIDateTime * *aSelectedDay) { return _to GetSelectedDay(aSelectedDay); } \
  NS_IMETHOD GetStartDay(calIDateTime * *aStartDay) { return _to GetStartDay(aStartDay); } \
  NS_IMETHOD GetEndDay(calIDateTime * *aEndDay) { return _to GetEndDay(aEndDay); } \
  NS_IMETHOD GetTimezone(nsACString & aTimezone) { return _to GetTimezone(aTimezone); } \
  NS_IMETHOD SetTimezone(const nsACString & aTimezone) { return _to SetTimezone(aTimezone); } \
  NS_IMETHOD GoToDay(calIDateTime *aDate) { return _to GoToDay(aDate); } \
  NS_IMETHOD MoveView(PRInt32 aNumber) { return _to MoveView(aNumber); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_CALIDECORATEDVIEW(_to) \
  NS_IMETHOD GetObserverID(nsACString & aObserverID) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetObserverID(aObserverID); } \
  NS_IMETHOD GetInitialized(PRBool *aInitialized) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetInitialized(aInitialized); } \
  NS_IMETHOD GetDisplayCalender(calICalendar * *aDisplayCalender) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDisplayCalender(aDisplayCalender); } \
  NS_IMETHOD SetDisplayCalender(calICalendar * aDisplayCalender) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDisplayCalender(aDisplayCalender); } \
  NS_IMETHOD GetController(calICalendarViewController * *aController) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetController(aController); } \
  NS_IMETHOD SetController(calICalendarViewController * aController) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetController(aController); } \
  NS_IMETHOD GetWorkdaysOnly(PRBool *aWorkdaysOnly) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetWorkdaysOnly(aWorkdaysOnly); } \
  NS_IMETHOD SetWorkdaysOnly(PRBool aWorkdaysOnly) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetWorkdaysOnly(aWorkdaysOnly); } \
  NS_IMETHOD GetTasksInView(PRBool *aTasksInView) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetTasksInView(aTasksInView); } \
  NS_IMETHOD SetTasksInView(PRBool aTasksInView) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetTasksInView(aTasksInView); } \
  NS_IMETHOD GetRotated(PRBool *aRotated) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetRotated(aRotated); } \
  NS_IMETHOD SetRotated(PRBool aRotated) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetRotated(aRotated); } \
  NS_IMETHOD GetShowCompleted(PRBool *aShowCompleted) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetShowCompleted(aShowCompleted); } \
  NS_IMETHOD SetShowCompleted(PRBool aShowCompleted) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetShowCompleted(aShowCompleted); } \
  NS_IMETHOD GetSelectedItems(PRUint32 *aCount, calIItemBase ***aItems) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSelectedItems(aCount, aItems); } \
  NS_IMETHOD SetSelectedItems(PRUint32 aCount, calIItemBase **aItems, PRBool aSuppressEvent) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetSelectedItems(aCount, aItems, aSuppressEvent); } \
  NS_IMETHOD GetSelectedDay(calIDateTime * *aSelectedDay) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSelectedDay(aSelectedDay); } \
  NS_IMETHOD GetStartDay(calIDateTime * *aStartDay) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetStartDay(aStartDay); } \
  NS_IMETHOD GetEndDay(calIDateTime * *aEndDay) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetEndDay(aEndDay); } \
  NS_IMETHOD GetTimezone(nsACString & aTimezone) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetTimezone(aTimezone); } \
  NS_IMETHOD SetTimezone(const nsACString & aTimezone) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetTimezone(aTimezone); } \
  NS_IMETHOD GoToDay(calIDateTime *aDate) { return !_to ? NS_ERROR_NULL_POINTER : _to->GoToDay(aDate); } \
  NS_IMETHOD MoveView(PRInt32 aNumber) { return !_to ? NS_ERROR_NULL_POINTER : _to->MoveView(aNumber); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public calIDecoratedView
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_CALIDECORATEDVIEW

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(_MYCLASS_, calIDecoratedView)

_MYCLASS_::_MYCLASS_()
{
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* readonly attribute AUTF8String observerID; */
NS_IMETHODIMP _MYCLASS_::GetObserverID(nsACString & aObserverID)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute boolean initialized; */
NS_IMETHODIMP _MYCLASS_::GetInitialized(PRBool *aInitialized)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute calICalendar displayCalender; */
NS_IMETHODIMP _MYCLASS_::GetDisplayCalender(calICalendar * *aDisplayCalender)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetDisplayCalender(calICalendar * aDisplayCalender)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute calICalendarViewController controller; */
NS_IMETHODIMP _MYCLASS_::GetController(calICalendarViewController * *aController)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetController(calICalendarViewController * aController)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute boolean workdaysOnly; */
NS_IMETHODIMP _MYCLASS_::GetWorkdaysOnly(PRBool *aWorkdaysOnly)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetWorkdaysOnly(PRBool aWorkdaysOnly)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute boolean tasksInView; */
NS_IMETHODIMP _MYCLASS_::GetTasksInView(PRBool *aTasksInView)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetTasksInView(PRBool aTasksInView)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute boolean rotated; */
NS_IMETHODIMP _MYCLASS_::GetRotated(PRBool *aRotated)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetRotated(PRBool aRotated)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute boolean showCompleted; */
NS_IMETHODIMP _MYCLASS_::GetShowCompleted(PRBool *aShowCompleted)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetShowCompleted(PRBool aShowCompleted)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void getSelectedItems (out unsigned long aCount, [array, size_is (aCount), retval] out calIItemBase aItems); */
NS_IMETHODIMP _MYCLASS_::GetSelectedItems(PRUint32 *aCount, calIItemBase ***aItems)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void setSelectedItems (in unsigned long aCount, [array, size_is (aCount)] in calIItemBase aItems, in boolean aSuppressEvent); */
NS_IMETHODIMP _MYCLASS_::SetSelectedItems(PRUint32 aCount, calIItemBase **aItems, PRBool aSuppressEvent)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute calIDateTime selectedDay; */
NS_IMETHODIMP _MYCLASS_::GetSelectedDay(calIDateTime * *aSelectedDay)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute calIDateTime startDay; */
NS_IMETHODIMP _MYCLASS_::GetStartDay(calIDateTime * *aStartDay)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute calIDateTime endDay; */
NS_IMETHODIMP _MYCLASS_::GetEndDay(calIDateTime * *aEndDay)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AUTF8String timezone; */
NS_IMETHODIMP _MYCLASS_::GetTimezone(nsACString & aTimezone)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetTimezone(const nsACString & aTimezone)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void goToDay (in calIDateTime aDate); */
NS_IMETHODIMP _MYCLASS_::GoToDay(calIDateTime *aDate)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void moveView (in long aNumber); */
NS_IMETHODIMP _MYCLASS_::MoveView(PRInt32 aNumber)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


#endif /* __gen_calIDecoratedView_h__ */
