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

#ifndef __gen_calICalendarView_h__
#define __gen_calICalendarView_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:    calICalendarView */
#define CALICALENDARVIEW_IID_STR "3e567ccb-2ecf-4f59-b7ca-bf42b0fbf24a"

#define CALICALENDARVIEW_IID \
  {0x3e567ccb, 0x2ecf, 0x4f59, \
    { 0xb7, 0xca, 0xbf, 0x42, 0xb0, 0xfb, 0xf2, 0x4a }}

/**
 * An interface for view widgets containing calendaring data.
 *
 * @note Code that implements this interface is intended to be pure
 * widgetry and thus not have any preference dependencies.
 * Preferences and pref observers should live in the decorated views.
 */
class NS_NO_VTABLE calICalendarView : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(CALICALENDARVIEW_IID)

  /**
   * the calendar that this view is displaying
   */
  /* attribute calICalendar displayCalendar; */
  NS_IMETHOD GetDisplayCalendar(calICalendar * *aDisplayCalendar) = 0;
  NS_IMETHOD SetDisplayCalendar(calICalendar * aDisplayCalendar) = 0;

  /**
   * the controller for this view
   */
  /* attribute calICalendarViewController controller; */
  NS_IMETHOD GetController(calICalendarViewController * *aController) = 0;
  NS_IMETHOD SetController(calICalendarViewController * aController) = 0;

  /**
   * Ensure that the given date is visible; the view is free
   * to show more dates than the given date (e.g. week view
   * would show the entire week).
   */
  /* void showDate (in calIDateTime aDate); */
  NS_IMETHOD ShowDate(calIDateTime *aDate) = 0;

  /**
   * Set a date range for the view to display, from aStartDate
   * to aEndDate, inclusive.
   *
   * Some views may decide to utilize the time portion of these
   * calIDateTimes; pass in calIDateTimes that are dates if you
   * want to make sure this doesn't happen.
   */
  /* void setDateRange (in calIDateTime aStartDate, in calIDateTime aEndDate); */
  NS_IMETHOD SetDateRange(calIDateTime *aStartDate, calIDateTime *aEndDate) = 0;

  /**
   * The start date of the view's display.  If the view is displaying
   * disjoint dates, this will be the earliest date that's displayed.
   */
  /* readonly attribute calIDateTime startDate; */
  NS_IMETHOD GetStartDate(calIDateTime * *aStartDate) = 0;

  /**
   * The end date of the view's display.  If the view is displaying
   * disjoint dates, this will be the latest date that's displayed.
   *
   * Note that this won't be equivalent to the aEndDate passed to
   * setDateRange, because that date isn't actually displayed!
   */
  /* readonly attribute calIDateTime endDate; */
  NS_IMETHOD GetEndDate(calIDateTime * *aEndDate) = 0;

  /**
   * True if this view supports disjoint dates
   */
  /* readonly attribute boolean supportsDisjointDates; */
  NS_IMETHOD GetSupportsDisjointDates(PRBool *aSupportsDisjointDates) = 0;

  /**
   * True if this view currently has a disjoint date set.
   */
  /* readonly attribute boolean hasDisjointDates; */
  NS_IMETHOD GetHasDisjointDates(PRBool *aHasDisjointDates) = 0;

  /**
   * Set a disjoint date list for this view to show.  Throws
   * if supportsDisjointDates is false for this view.
   */
  /* void setDateList (in unsigned long aCount, [array, size_is (aCount)] in calIDateTime aDates); */
  NS_IMETHOD SetDateList(PRUint32 aCount, calIDateTime **aDates) = 0;

  /**
   * Returns the list of dates being shown by this calendar.
   * If a date range is set, it will expand out the date range by
   * day and return the full set.
   */
  /* void getDateList (out unsigned long aCount, [array, size_is (aCount), retval] out calIDateTime aDates); */
  NS_IMETHOD GetDateList(PRUint32 *aCount, calIDateTime ***aDates) = 0;

  /**
   * Get the items currently selected in this view.
   * 
   * @param aCount a variable to hold the number of items in this array
   *
   * @return the array of items currently selected in this.
   */
  /* void getSelectedItems (out unsigned long aCount, [array, size_is (aCount), retval] out calIItemBase aItems); */
  NS_IMETHOD GetSelectedItems(PRUint32 *aCount, calIItemBase ***aItems) = 0;

  /**
    * Select an array of items in the view.  Items outside the view's current
    * display range will be ignored.
    *
    * @param aCount the number of items to select
    * @param aItems an array of items to select
    * @param aSuppressEvent if true, the 'itemselect' event will not be fired.
    */
  /* 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;

  /**
   * Make as many of the selected items as possible are visible in the view.
   */
  /* void centerSelectedItems (); */
  NS_IMETHOD CenterSelectedItems(void) = 0;

  /**
   * Get or set the selected day.
   */
  /* attribute calIDateTime selectedDay; */
  NS_IMETHOD GetSelectedDay(calIDateTime * *aSelectedDay) = 0;
  NS_IMETHOD SetSelectedDay(calIDateTime * aSelectedDay) = 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;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_CALICALENDARVIEW \
  NS_IMETHOD GetDisplayCalendar(calICalendar * *aDisplayCalendar); \
  NS_IMETHOD SetDisplayCalendar(calICalendar * aDisplayCalendar); \
  NS_IMETHOD GetController(calICalendarViewController * *aController); \
  NS_IMETHOD SetController(calICalendarViewController * aController); \
  NS_IMETHOD ShowDate(calIDateTime *aDate); \
  NS_IMETHOD SetDateRange(calIDateTime *aStartDate, calIDateTime *aEndDate); \
  NS_IMETHOD GetStartDate(calIDateTime * *aStartDate); \
  NS_IMETHOD GetEndDate(calIDateTime * *aEndDate); \
  NS_IMETHOD GetSupportsDisjointDates(PRBool *aSupportsDisjointDates); \
  NS_IMETHOD GetHasDisjointDates(PRBool *aHasDisjointDates); \
  NS_IMETHOD SetDateList(PRUint32 aCount, calIDateTime **aDates); \
  NS_IMETHOD GetDateList(PRUint32 *aCount, calIDateTime ***aDates); \
  NS_IMETHOD GetSelectedItems(PRUint32 *aCount, calIItemBase ***aItems); \
  NS_IMETHOD SetSelectedItems(PRUint32 aCount, calIItemBase **aItems, PRBool aSuppressEvent); \
  NS_IMETHOD CenterSelectedItems(void); \
  NS_IMETHOD GetSelectedDay(calIDateTime * *aSelectedDay); \
  NS_IMETHOD SetSelectedDay(calIDateTime * aSelectedDay); \
  NS_IMETHOD GetTimezone(nsACString & aTimezone); \
  NS_IMETHOD SetTimezone(const nsACString & aTimezone); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_CALICALENDARVIEW(_to) \
  NS_IMETHOD GetDisplayCalendar(calICalendar * *aDisplayCalendar) { return _to GetDisplayCalendar(aDisplayCalendar); } \
  NS_IMETHOD SetDisplayCalendar(calICalendar * aDisplayCalendar) { return _to SetDisplayCalendar(aDisplayCalendar); } \
  NS_IMETHOD GetController(calICalendarViewController * *aController) { return _to GetController(aController); } \
  NS_IMETHOD SetController(calICalendarViewController * aController) { return _to SetController(aController); } \
  NS_IMETHOD ShowDate(calIDateTime *aDate) { return _to ShowDate(aDate); } \
  NS_IMETHOD SetDateRange(calIDateTime *aStartDate, calIDateTime *aEndDate) { return _to SetDateRange(aStartDate, aEndDate); } \
  NS_IMETHOD GetStartDate(calIDateTime * *aStartDate) { return _to GetStartDate(aStartDate); } \
  NS_IMETHOD GetEndDate(calIDateTime * *aEndDate) { return _to GetEndDate(aEndDate); } \
  NS_IMETHOD GetSupportsDisjointDates(PRBool *aSupportsDisjointDates) { return _to GetSupportsDisjointDates(aSupportsDisjointDates); } \
  NS_IMETHOD GetHasDisjointDates(PRBool *aHasDisjointDates) { return _to GetHasDisjointDates(aHasDisjointDates); } \
  NS_IMETHOD SetDateList(PRUint32 aCount, calIDateTime **aDates) { return _to SetDateList(aCount, aDates); } \
  NS_IMETHOD GetDateList(PRUint32 *aCount, calIDateTime ***aDates) { return _to GetDateList(aCount, aDates); } \
  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 CenterSelectedItems(void) { return _to CenterSelectedItems(); } \
  NS_IMETHOD GetSelectedDay(calIDateTime * *aSelectedDay) { return _to GetSelectedDay(aSelectedDay); } \
  NS_IMETHOD SetSelectedDay(calIDateTime * aSelectedDay) { return _to SetSelectedDay(aSelectedDay); } \
  NS_IMETHOD GetTimezone(nsACString & aTimezone) { return _to GetTimezone(aTimezone); } \
  NS_IMETHOD SetTimezone(const nsACString & aTimezone) { return _to SetTimezone(aTimezone); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_CALICALENDARVIEW(_to) \
  NS_IMETHOD GetDisplayCalendar(calICalendar * *aDisplayCalendar) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDisplayCalendar(aDisplayCalendar); } \
  NS_IMETHOD SetDisplayCalendar(calICalendar * aDisplayCalendar) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDisplayCalendar(aDisplayCalendar); } \
  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 ShowDate(calIDateTime *aDate) { return !_to ? NS_ERROR_NULL_POINTER : _to->ShowDate(aDate); } \
  NS_IMETHOD SetDateRange(calIDateTime *aStartDate, calIDateTime *aEndDate) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDateRange(aStartDate, aEndDate); } \
  NS_IMETHOD GetStartDate(calIDateTime * *aStartDate) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetStartDate(aStartDate); } \
  NS_IMETHOD GetEndDate(calIDateTime * *aEndDate) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetEndDate(aEndDate); } \
  NS_IMETHOD GetSupportsDisjointDates(PRBool *aSupportsDisjointDates) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSupportsDisjointDates(aSupportsDisjointDates); } \
  NS_IMETHOD GetHasDisjointDates(PRBool *aHasDisjointDates) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetHasDisjointDates(aHasDisjointDates); } \
  NS_IMETHOD SetDateList(PRUint32 aCount, calIDateTime **aDates) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetDateList(aCount, aDates); } \
  NS_IMETHOD GetDateList(PRUint32 *aCount, calIDateTime ***aDates) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDateList(aCount, aDates); } \
  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 CenterSelectedItems(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->CenterSelectedItems(); } \
  NS_IMETHOD GetSelectedDay(calIDateTime * *aSelectedDay) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSelectedDay(aSelectedDay); } \
  NS_IMETHOD SetSelectedDay(calIDateTime * aSelectedDay) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetSelectedDay(aSelectedDay); } \
  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); } 

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

/* Header file */
class _MYCLASS_ : public calICalendarView
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_CALICALENDARVIEW

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

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

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

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

/* attribute calICalendar displayCalendar; */
NS_IMETHODIMP _MYCLASS_::GetDisplayCalendar(calICalendar * *aDisplayCalendar)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetDisplayCalendar(calICalendar * aDisplayCalendar)
{
    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;
}

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

/* void setDateRange (in calIDateTime aStartDate, in calIDateTime aEndDate); */
NS_IMETHODIMP _MYCLASS_::SetDateRange(calIDateTime *aStartDate, calIDateTime *aEndDate)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute calIDateTime startDate; */
NS_IMETHODIMP _MYCLASS_::GetStartDate(calIDateTime * *aStartDate)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute calIDateTime endDate; */
NS_IMETHODIMP _MYCLASS_::GetEndDate(calIDateTime * *aEndDate)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute boolean supportsDisjointDates; */
NS_IMETHODIMP _MYCLASS_::GetSupportsDisjointDates(PRBool *aSupportsDisjointDates)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute boolean hasDisjointDates; */
NS_IMETHODIMP _MYCLASS_::GetHasDisjointDates(PRBool *aHasDisjointDates)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void setDateList (in unsigned long aCount, [array, size_is (aCount)] in calIDateTime aDates); */
NS_IMETHODIMP _MYCLASS_::SetDateList(PRUint32 aCount, calIDateTime **aDates)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void getDateList (out unsigned long aCount, [array, size_is (aCount), retval] out calIDateTime aDates); */
NS_IMETHODIMP _MYCLASS_::GetDateList(PRUint32 *aCount, calIDateTime ***aDates)
{
    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;
}

/* void centerSelectedItems (); */
NS_IMETHODIMP _MYCLASS_::CenterSelectedItems()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute calIDateTime selectedDay; */
NS_IMETHODIMP _MYCLASS_::GetSelectedDay(calIDateTime * *aSelectedDay)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP _MYCLASS_::SetSelectedDay(calIDateTime * aSelectedDay)
{
    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;
}

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


#endif /* __gen_calICalendarView_h__ */
