// This file is part of BOINC.
// http://boinc.berkeley.edu
// Copyright (C) 2008 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
//
// BOINC is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see .
//
#ifndef _NOTICELISTCTRL_H_
#define _NOTICELISTCTRL_H_
#if defined(__GNUG__) && !defined(__APPLE__)
#pragma interface "NoticeListCtrl.cpp"
#endif
#ifdef __WXMAC__
#define wxACC_SELF 0
#define wxACC_OK noErr
#define wxAccStatus OSStatus
#define wxACC_NOT_IMPLEMENTED eventNotHandledErr
#define wxACC_FALSE eventNotHandledErr
#define wxAccessible wxObject
#endif
/*!
* CNoticeListItem class declaration
*/
class CNoticeListItem: public wxObject
{
DECLARE_DYNAMIC_CLASS( CNoticeListItem )
public:
int GetSeqNo() const { return m_iSeqNo ; }
void SetSeqNo(int value) { m_iSeqNo = value ; }
wxString GetURL() const { return m_strURL ; }
void SetURL(wxString value) { m_strURL = value ; }
wxString GetTitle() const { return m_strTitle ; }
void SetTitle(wxString value) { m_strTitle = value ; }
wxString GetDescription() const { return m_strDescription ; }
void SetDescription(wxString value) { m_strDescription = value ; }
wxString GetCategory() const { return m_strCategory ; }
void SetCategory(wxString value) { m_strCategory = value ; }
wxString GetProjectName() const { return m_strProjectName ; }
void SetProjectName(wxString value) { m_strProjectName = value ; }
wxString GetArrivalTime() const { return m_strArrivalTime ; }
void SetArrivalTime(wxString value) { m_strArrivalTime = value ; }
private:
int m_iSeqNo;
wxString m_strURL;
wxString m_strTitle;
wxString m_strDescription;
wxString m_strCategory;
wxString m_strProjectName;
wxString m_strArrivalTime;
};
#ifndef __WXMAC__
class CNoticeListCtrlAccessible : public wxWindowAccessible
#else
class CNoticeListCtrlAccessible
#endif
{
public:
#ifndef __WXMAC__
CNoticeListCtrlAccessible(wxWindow* win): wxWindowAccessible(win) {}
#else
CNoticeListCtrlAccessible(wxWindow* win);
virtual ~CNoticeListCtrlAccessible();
#endif
virtual wxAccStatus GetName(int childId, wxString* name);
virtual wxAccStatus HitTest(const wxPoint& pt, int* childId, wxAccessible** childObject);
virtual wxAccStatus GetLocation(wxRect& rect, int elementId);
virtual wxAccStatus GetChildCount(int* childCount);
virtual wxAccStatus DoDefaultAction(int childId);
virtual wxAccStatus GetDescription(int childId, wxString* description);
#ifndef __WXMAC__
virtual wxAccStatus Navigate(wxNavDir navDir, int fromId, int* toId, wxAccessible** toObject);
virtual wxAccStatus GetDefaultAction(int childId, wxString* actionName);
virtual wxAccStatus GetRole(int childId, wxAccRole* role);
virtual wxAccStatus GetState(int childId, long* state);
virtual wxAccStatus Select(int childId, wxAccSelectionFlags selectFlags);
virtual wxAccStatus GetSelections(wxVariant* selections);
#endif
#ifdef __WXMAC__
wxWindow *mp_win;
HIViewRef m_listView;
EventHandlerRef m_plistAccessibilityEventHandlerRef;
wxWindow *GetWindow() { return mp_win; }
void SetupMacAccessibilitySupport();
void RemoveMacAccessibilitySupport();
#endif
};
/*!
* CNoticeListCtrl class declaration
*/
class CNoticeListCtrl: public wxHtmlListBox
{
DECLARE_DYNAMIC_CLASS( CNoticeListCtrl )
DECLARE_EVENT_TABLE()
public:
/// Constructors
CNoticeListCtrl( );
CNoticeListCtrl( wxWindow* parent );
#ifdef __WXMAC__
~CNoticeListCtrl();
#endif
/// Creation
bool Create( wxWindow* parent );
////@begin CNoticeListCtrl event handler declarations
void OnSelected( wxCommandEvent& event );
void OnDClicked( wxCommandEvent& event );
void OnClicked( wxHtmlCellEvent& event );
void OnLinkClicked( wxHtmlLinkEvent& event );
////@end CNoticeListCtrl event handler declarations
virtual wxString OnGetItem(size_t i) const;
/// Methods
bool Add(
int iSeqNo,
wxString strProjectName,
wxString strURL,
wxString strTitle,
wxString strDescription,
wxString strCategory,
wxString strArrivalTime
);
bool Update(
int iSeqNo,
wxString strArrivalTime
);
bool UpdateUI();
bool Exists( int iSeqNo );
bool Sort();
CNoticeListItem* GetItem(
int iIndex
);
wxCoord GetTotalClientHeight();
private:
std::vector m_Items;
#ifdef __WXMAC__
CNoticeListCtrlAccessible* m_accessible;
#endif
};
/*!
* NoticeListCtrlEvent class declaration
*/
class NoticeListCtrlEvent : public wxNotifyEvent
{
public:
NoticeListCtrlEvent( wxEventType evtType = wxEVT_NULL, int iSeqNo = 0, wxString strURL = wxEmptyString ) :
wxNotifyEvent( evtType, wxID_ANY )
{
m_iSeqNo = iSeqNo;
m_strURL = strURL;
}
int GetSeqNo() { return m_iSeqNo; };
wxString GetURL() { return m_strURL; };
virtual wxNotifyEvent* Clone() const { return new NoticeListCtrlEvent(*this); }
private:
int m_iSeqNo;
wxString m_strURL;
DECLARE_DYNAMIC_CLASS(NoticeListCtrlEvent)
};
// ----------------------------------------------------------------------------
// macros for handling ProjectListCtrlEvent
// ----------------------------------------------------------------------------
BEGIN_DECLARE_EVENT_TYPES()
DECLARE_EVENT_TYPE( wxEVT_NOTICELIST_ITEM_CHANGE, 100000 )
DECLARE_EVENT_TYPE( wxEVT_NOTICELIST_ITEM_DISPLAY, 100001 )
END_DECLARE_EVENT_TYPES()
typedef void (wxEvtHandler::*NoticeListCtrlEventFunction)(NoticeListCtrlEvent&);
#define NoticeListCtrlEventHandler(func) \
(wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(NoticeListCtrlEventFunction, &func)
#define wx__DECLARE_NOTICELISTEVT(evt, fn) \
wx__DECLARE_EVT0(wxEVT_NOTICELIST_ ## evt, NoticeListCtrlEventHandler(fn))
#define EVT_NOTICELIST_ITEM_CHANGE(fn) wx__DECLARE_NOTICELISTEVT(ITEM_CHANGE, fn)
#define EVT_NOTICELIST_ITEM_DISPLAY(fn) wx__DECLARE_NOTICELISTEVT(ITEM_DISPLAY, fn)
#endif // _NOTICELISTCTRL_H_