*** empty log message ***

svn path=/trunk/boinc/; revision=4697
This commit is contained in:
Rom Walton 2004-12-02 07:43:47 +00:00
parent 6b3b8dc99e
commit d93292b797
19 changed files with 1602 additions and 329 deletions

View File

@ -20458,3 +20458,31 @@ Bruce 2 Dec 2004
user/
explain_state.php
Rom 2 Dec 2004
- Bug Fix: Each view now contains a display cache; the display cache
is synchronized during the regularly scheduled list render event.
The control grabs the necessary information from the cache instead
of cycling down to the document. Due to the way listviews were
implemented on some platforms I believe this will fix some refresh
problems where the data wasnt being updated in a timely manor.
This also had the added benefit of increasing performance on displaying
updates.
- Fill in the missing piece for the memory leak detection to proplerly
display the file and line number information per allocation for the
GUI on Windows
- Rename the CC and GUI on all platforms to match that of Windows.
/
configure.ac
clientgui/
BOINCBaseView.cpp, .h
BOINCGUIApp.cpp
MainFrame.cpp, .h
stdwx.h
ViewMessages.cpp, .h
ViewProjects.cpp, .h
ViewResources.cpp, .h
ViewTransfers.cpp, .h
ViewWork.cpp, .h
clientgui/msw/
taskbarex.h

View File

@ -54,11 +54,6 @@ CBOINCBaseView::CBOINCBaseView( wxNotebook* pNotebook, wxWindowID iHtmlWindowID,
m_bProcessingTaskRenderEvent = false;
m_bProcessingListRenderEvent = false;
m_iCacheFrom = 0;
m_iCacheTo = 0;
m_iCount = 0;
m_bItemSelected = false;
m_strQuickTip = wxEmptyString;
@ -111,15 +106,10 @@ char** CBOINCBaseView::GetViewIcon()
}
wxInt32 CBOINCBaseView::_GetListRowCount()
{
return GetListRowCount();
}
wxInt32 CBOINCBaseView::GetListRowCount()
{
return 0;
wxASSERT(NULL != m_pListPane);
return m_pListPane->GetItemCount();
}
@ -135,6 +125,72 @@ void CBOINCBaseView::FireOnListRender ( wxTimerEvent& event )
}
bool CBOINCBaseView::FireOnSaveState( wxConfigBase* pConfig )
{
return OnSaveState( pConfig );
}
bool CBOINCBaseView::FireOnRestoreState( wxConfigBase* pConfig )
{
return OnRestoreState( pConfig );
}
void CBOINCBaseView::FireOnChar( wxKeyEvent& event )
{
OnChar( event );
}
void CBOINCBaseView::FireOnListSelected( wxListEvent& event )
{
OnListSelected( event );
}
void CBOINCBaseView::FireOnListDeselected( wxListEvent& event )
{
OnListDeselected( event );
}
wxString CBOINCBaseView::FireOnListGetItemText( long item, long column ) const
{
return OnListGetItemText( item, column );
}
int CBOINCBaseView::FireOnListGetItemImage( long item ) const
{
return OnListGetItemImage( item );
}
wxListItemAttr* CBOINCBaseView::FireOnListGetItemAttr( long item ) const
{
return OnListGetItemAttr( item );
}
void CBOINCBaseView::FireOnTaskLinkClicked( const wxHtmlLinkInfo& link )
{
OnTaskLinkClicked( link );
}
void CBOINCBaseView::FireOnTaskCellMouseHover( wxHtmlCell* cell, wxCoord x, wxCoord y )
{
OnTaskCellMouseHover( cell, x, y );
}
wxInt32 CBOINCBaseView::GetDocCount()
{
return 0;
}
void CBOINCBaseView::OnTaskRender ( wxTimerEvent& event )
{
if (!m_bProcessingTaskRenderEvent)
@ -165,83 +221,59 @@ void CBOINCBaseView::OnListRender ( wxTimerEvent& event )
wxASSERT(NULL != m_pListPane);
wxInt32 iCount = _GetListRowCount();
if ( iCount != m_iCount )
wxInt32 iDocCount = GetDocCount();
wxInt32 iCacheCount = GetCacheCount();
if ( iDocCount != iCacheCount )
{
m_iCount = iCount;
if ( 0 >= iCount )
if ( 0 >= iDocCount )
{
EmptyCache();
m_pListPane->DeleteAllItems();
m_iCacheFrom = 0;
m_iCacheTo = 0;
}
else
m_pListPane->SetItemCount(iCount);
{
if ( iDocCount > iCacheCount )
{
wxInt32 iIndex = 0;
wxInt32 iReturnValue = -1;
for ( iIndex = iCacheCount; iIndex <= iDocCount; iIndex++ )
{
iReturnValue = AddCacheElement();
wxASSERT( 0 == iReturnValue );
}
}
else
{
wxInt32 iIndex = 0;
wxInt32 iReturnValue = -1;
for ( iIndex = iDocCount; iIndex >= iCacheCount; iIndex-- )
{
iReturnValue = RemoveCacheElement();
wxASSERT( 0 == iReturnValue );
}
}
SyncronizeCache();
m_pListPane->SetItemCount(iDocCount);
if (EnsureLastItemVisible())
{
m_pListPane->EnsureVisible(iCacheCount);
}
}
}
else
{
if ( 1 <= m_iCacheTo )
{
wxInt32 iRowIndex = 0;
wxInt32 iColumnIndex = 0;
wxInt32 iColumnTotal = 0;
wxString strDocumentText = wxEmptyString;
wxString strListPaneText = wxEmptyString;
bool bNeedRefreshData = false;
wxListItem liItem;
liItem.SetMask(wxLIST_MASK_TEXT);
iColumnTotal = m_pListPane->GetColumnCount();
for ( iRowIndex = m_iCacheFrom; iRowIndex <= m_iCacheTo; iRowIndex++ )
{
bNeedRefreshData = false;
liItem.SetId(iRowIndex);
for ( iColumnIndex = 0; iColumnIndex < iColumnTotal; iColumnIndex++ )
{
strDocumentText.Empty();
strListPaneText.Empty();
strDocumentText = OnListGetItemText( iRowIndex, iColumnIndex );
liItem.SetColumn(iColumnIndex);
m_pListPane->GetItem(liItem);
strListPaneText = liItem.GetText();
if ( !strDocumentText.IsSameAs(strListPaneText) )
bNeedRefreshData = true;
}
if ( bNeedRefreshData )
{
m_pListPane->RefreshItem( iRowIndex );
}
}
}
SyncronizeCache();
}
m_bProcessingListRenderEvent = false;
}
m_pListPane->Refresh();
event.Skip();
}
bool CBOINCBaseView::FireOnSaveState( wxConfigBase* pConfig )
{
return OnSaveState( pConfig );
}
bool CBOINCBaseView::FireOnRestoreState( wxConfigBase* pConfig )
{
return OnRestoreState( pConfig );
}
bool CBOINCBaseView::OnSaveState( wxConfigBase* pConfig )
{
bool bReturnValue = true;
@ -278,46 +310,8 @@ bool CBOINCBaseView::OnRestoreState( wxConfigBase* pConfig )
}
void CBOINCBaseView::FireOnListCacheHint( wxListEvent& event )
void CBOINCBaseView::OnChar( wxKeyEvent& event )
{
OnListCacheHint( event );
}
void CBOINCBaseView::FireOnListSelected( wxListEvent& event )
{
OnListSelected( event );
}
void CBOINCBaseView::FireOnListDeselected( wxListEvent& event )
{
OnListDeselected( event );
}
wxString CBOINCBaseView::FireOnListGetItemText( long item, long column ) const
{
return OnListGetItemText( item, column );
}
int CBOINCBaseView::FireOnListGetItemImage( long item ) const
{
return OnListGetItemImage( item );
}
wxListItemAttr* CBOINCBaseView::FireOnListGetItemAttr( long item ) const
{
return OnListGetItemAttr( item );
}
void CBOINCBaseView::OnListCacheHint( wxListEvent& event )
{
m_iCacheFrom = event.GetCacheFrom();
m_iCacheTo = event.GetCacheTo();
}
@ -363,15 +357,21 @@ wxListItemAttr* CBOINCBaseView::OnListGetItemAttr( long WXUNUSED(item) ) const
}
void CBOINCBaseView::FireOnTaskLinkClicked( const wxHtmlLinkInfo& link )
wxString CBOINCBaseView::OnDocGetItemText( long WXUNUSED(item), long WXUNUSED(column) ) const
{
OnTaskLinkClicked( link );
return wxString("Undefined");
}
void CBOINCBaseView::FireOnTaskCellMouseHover( wxHtmlCell* cell, wxCoord x, wxCoord y )
wxString CBOINCBaseView::OnDocGetItemImage( long WXUNUSED(item) ) const
{
OnTaskCellMouseHover( cell, x, y );
return wxString("Undefined");
}
wxString CBOINCBaseView::OnDocGetItemAttr( long WXUNUSED(item) ) const
{
return wxString("Undefined");
}
@ -404,6 +404,86 @@ void CBOINCBaseView::SetCurrentQuickTip( const wxString& strQuickTip, const wxSt
}
wxInt32 CBOINCBaseView::AddCacheElement()
{
return -1;
}
wxInt32 CBOINCBaseView::EmptyCache()
{
return -1;
}
wxInt32 CBOINCBaseView::GetCacheCount()
{
return -1;
}
wxInt32 CBOINCBaseView::RemoveCacheElement()
{
return -1;
}
wxInt32 CBOINCBaseView::SyncronizeCache()
{
wxInt32 iRowIndex = 0;
wxInt32 iRowTotal = 0;
wxInt32 iColumnIndex = 0;
wxInt32 iColumnTotal = 0;
wxString strDocumentText = wxEmptyString;
wxString strListPaneText = wxEmptyString;
wxInt32 iReturnValue = -1;
bool bNeedRefreshData = false;
iRowTotal = GetDocCount();
iColumnTotal = m_pListPane->GetColumnCount();
for ( iRowIndex = 0; iRowIndex < iRowTotal; iRowIndex++ )
{
bNeedRefreshData = false;
for ( iColumnIndex = 0; iColumnIndex < iColumnTotal; iColumnIndex++ )
{
strDocumentText.Empty();
strListPaneText.Empty();
strDocumentText = OnDocGetItemText( iRowIndex, iColumnIndex );
strListPaneText = OnListGetItemText( iRowIndex, iColumnIndex );
if ( !strDocumentText.IsSameAs(strListPaneText) )
{
iReturnValue = UpdateCache( iRowIndex, iColumnIndex, strDocumentText );
wxASSERT( 0 == iReturnValue );
bNeedRefreshData = true;
}
}
if ( bNeedRefreshData )
{
m_pListPane->RefreshItem( iRowIndex );
}
}
return 0;
}
wxInt32 CBOINCBaseView::UpdateCache( long item, long column, wxString& strNewData )
{
return -1;
}
bool CBOINCBaseView::EnsureLastItemVisible()
{
return false;
}
bool CBOINCBaseView::UpdateQuickTip( const wxString& strCurrentLink, const wxString& strQuickTip, const wxString& strQuickTipText )
{
bool bRetVal;

View File

@ -44,6 +44,7 @@ class CBOINCBaseView : public wxPanel
DECLARE_DYNAMIC_CLASS( CBOINCBaseView )
public:
CBOINCBaseView();
CBOINCBaseView(
wxNotebook* pNotebook,
@ -59,27 +60,11 @@ public:
virtual char** GetViewIcon();
virtual wxInt32 GetListRowCount();
virtual void OnTaskRender( wxTimerEvent& event );
virtual void OnListRender( wxTimerEvent& event );
virtual bool OnSaveState( wxConfigBase* pConfig );
virtual bool OnRestoreState( wxConfigBase* pConfig );
virtual void OnListCacheHint( wxListEvent& event );
virtual void OnListSelected( wxListEvent& event );
virtual void OnListDeselected( wxListEvent& event );
virtual wxString OnListGetItemText( long item, long column ) const;
virtual int OnListGetItemImage( long item ) const;
virtual wxListItemAttr* OnListGetItemAttr( long item ) const;
virtual void OnTaskLinkClicked( const wxHtmlLinkInfo& link );
virtual void OnTaskCellMouseHover( wxHtmlCell* cell, wxCoord x, wxCoord y );
void FireOnTaskRender( wxTimerEvent& event );
void FireOnListRender( wxTimerEvent& event );
bool FireOnSaveState( wxConfigBase* pConfig );
bool FireOnRestoreState( wxConfigBase* pConfig );
void FireOnListCacheHint( wxListEvent& event );
void FireOnChar( wxKeyEvent& event );
void FireOnListSelected( wxListEvent& event );
void FireOnListDeselected( wxListEvent& event );
wxString FireOnListGetItemText( long item, long column ) const;
@ -88,26 +73,51 @@ public:
void FireOnTaskLinkClicked( const wxHtmlLinkInfo& link );
void FireOnTaskCellMouseHover( wxHtmlCell* cell, wxCoord x, wxCoord y );
protected:
virtual wxInt32 GetDocCount();
virtual void OnTaskRender( wxTimerEvent& event );
virtual void OnListRender( wxTimerEvent& event );
virtual bool OnSaveState( wxConfigBase* pConfig );
virtual bool OnRestoreState( wxConfigBase* pConfig );
virtual void OnChar( wxKeyEvent& event );
virtual void OnListSelected( wxListEvent& event );
virtual void OnListDeselected( wxListEvent& event );
virtual wxString OnListGetItemText( long item, long column ) const;
virtual int OnListGetItemImage( long item ) const;
virtual wxListItemAttr* OnListGetItemAttr( long item ) const;
virtual wxString OnDocGetItemText( long item, long column ) const;
virtual wxString OnDocGetItemImage( long item ) const;
virtual wxString OnDocGetItemAttr( long item ) const;
virtual void OnTaskLinkClicked( const wxHtmlLinkInfo& link );
virtual void OnTaskCellMouseHover( wxHtmlCell* cell, wxCoord x, wxCoord y );
wxString GetCurrentQuickTip();
wxString GetCurrentQuickTipText();
void SetCurrentQuickTip( const wxString& strQuickTip, const wxString& strQuickTipText );
virtual wxInt32 AddCacheElement();
virtual wxInt32 EmptyCache();
virtual wxInt32 GetCacheCount();
virtual wxInt32 RemoveCacheElement();
virtual wxInt32 SyncronizeCache();
virtual wxInt32 UpdateCache( long item, long column, wxString& strNewData );
virtual bool EnsureLastItemVisible();
virtual bool UpdateQuickTip( const wxString& strCurrentLink, const wxString& strQuickTip, const wxString& strQuickTipText );
virtual void UpdateSelection();
virtual void UpdateTaskPane();
protected:
wxInt32 _GetListRowCount();
bool m_bProcessingTaskRenderEvent;
bool m_bProcessingListRenderEvent;
wxInt32 m_iCacheFrom;
wxInt32 m_iCacheTo;
wxInt32 m_iCount;
bool m_bItemSelected;
wxString m_strQuickTip;

View File

@ -298,9 +298,10 @@ void CBOINCGUIApp::ShutdownBOINCCore()
if ( wxProcess::Exists( m_lBOINCCoreProccessId ) )
{
m_pDocument->CoreClientQuit();
/*
for ( iCount = 0; iCount <= 10; iCount++ )
{
if ( !wxProcess::Exists( m_lBOINCCoreProccessId ) )
if ( !bClientQuit && !wxProcess::Exists( m_lBOINCCoreProccessId ) )
{
bClientQuit = true;
continue;
@ -310,6 +311,7 @@ void CBOINCGUIApp::ShutdownBOINCCore()
if ( !bClientQuit )
::wxKill( m_lBOINCCoreProccessId );
*/
}
}
}

View File

@ -64,10 +64,10 @@ BEGIN_EVENT_TABLE (CMainFrame, wxFrame)
EVT_IDLE(CMainFrame::OnIdle)
EVT_CLOSE(CMainFrame::OnClose)
EVT_SIZE(CMainFrame::OnSize)
EVT_CHAR(CMainFrame::OnChar)
EVT_UPDATE_UI_RANGE(ID_ACTIVITYRUNALWAYS, ID_ACTIVITYSUSPEND, CMainFrame::OnUpdateActivitySelection)
EVT_UPDATE_UI_RANGE(ID_NETWORKRUNALWAYS, ID_NETWORKSUSPEND, CMainFrame::OnUpdateNetworkSelection)
EVT_NOTEBOOK_PAGE_CHANGED(ID_FRAMENOTEBOOK, CMainFrame::OnNotebookSelectionChanged)
EVT_LIST_CACHE_HINT(wxID_ANY, CMainFrame::OnListCacheHint)
EVT_LIST_ITEM_SELECTED(wxID_ANY, CMainFrame::OnListSelected)
EVT_LIST_ITEM_DESELECTED(wxID_ANY, CMainFrame::OnListDeselected)
EVT_TIMER(ID_FRAMERENDERTIMER, CMainFrame::OnFrameRender)
@ -819,6 +819,28 @@ void CMainFrame::OnSize( wxSizeEvent& event )
}
void CMainFrame::OnChar( wxKeyEvent& event )
{
if ( IsShown() )
{
wxWindow* pwndNotebookPage = NULL;
CBOINCBaseView* pView = NULL;
wxASSERT(NULL != m_pNotebook);
pwndNotebookPage = m_pNotebook->GetPage( event.GetId() - ID_LIST_BASE );
wxASSERT(NULL != pwndNotebookPage);
pView = wxDynamicCast(pwndNotebookPage, CBOINCBaseView);
wxASSERT(NULL != pView);
pView->FireOnChar( event );
}
event.Skip();
}
void CMainFrame::OnNotebookSelectionChanged( wxNotebookEvent& event )
{
if ( (-1 != event.GetSelection()) && IsShown() )
@ -843,28 +865,6 @@ void CMainFrame::OnNotebookSelectionChanged( wxNotebookEvent& event )
}
void CMainFrame::OnListCacheHint( wxListEvent& event )
{
if ( IsShown() )
{
wxWindow* pwndNotebookPage = NULL;
CBOINCBaseView* pView = NULL;
wxASSERT(NULL != m_pNotebook);
pwndNotebookPage = m_pNotebook->GetPage( event.GetId() - ID_LIST_BASE );
wxASSERT(NULL != pwndNotebookPage);
pView = wxDynamicCast(pwndNotebookPage, CBOINCBaseView);
wxASSERT(NULL != pView);
pView->FireOnListCacheHint( event );
}
event.Skip();
}
void CMainFrame::OnListSelected( wxListEvent& event )
{
if ( IsShown() )

View File

@ -58,10 +58,11 @@ public:
void OnIdle ( wxIdleEvent& event );
void OnClose( wxCloseEvent& event );
void OnSize( wxSizeEvent& event );
void OnChar( wxKeyEvent& event );
void OnNotebookSelectionChanged( wxNotebookEvent& event );
void OnListCacheHint( wxListEvent& event );
void OnListSelected( wxListEvent& event );
void OnListDeselected( wxListEvent& event );

View File

@ -33,6 +33,9 @@
#include "ViewMessages.h"
#include "Events.h"
#include "wx/arrimpl.cpp"
#include "res/mess.xpm"
#include "res/task.xpm"
#include "res/tips.xpm"
@ -71,7 +74,84 @@ const wxString LINKDESC_TASKCOPYMESSAGE =
" or control key while clicking on the next desired message.");
IMPLEMENT_DYNAMIC_CLASS(CViewMessages, CBOINCBaseView)
WX_DEFINE_OBJARRAY( CMessageCache );
CMessage::CMessage()
{
m_strPriority = wxEmptyString;
m_strProjectName = wxEmptyString;
m_strTime = wxEmptyString;
m_strMessage = wxEmptyString;
}
CMessage::~CMessage()
{
m_strPriority.Clear();
m_strProjectName.Clear();
m_strTime.Clear();
m_strMessage.Clear();
}
wxInt32 CMessage::GetProjectName( wxString& strProjectName )
{
strProjectName = m_strProjectName;
return 0;
}
wxInt32 CMessage::GetPriority( wxString& strPriority )
{
strPriority = m_strPriority;
return 0;
}
wxInt32 CMessage::GetTime( wxString& strTime )
{
strTime = m_strTime;
return 0;
}
wxInt32 CMessage::GetMessage( wxString& strMessage )
{
strMessage = m_strMessage;
return 0;
}
wxInt32 CMessage::SetProjectName( wxString& strProjectName )
{
m_strProjectName = strProjectName;
return 0;
}
wxInt32 CMessage::SetPriority( wxString& strPriority )
{
m_strPriority = strPriority;
return 0;
}
wxInt32 CMessage::SetTime( wxString& strTime )
{
m_strTime = strTime;
return 0;
}
wxInt32 CMessage::SetMessage( wxString& strMessage )
{
m_strMessage = strMessage;
return 0;
}
IMPLEMENT_DYNAMIC_CLASS( CViewMessages, CBOINCBaseView )
CViewMessages::CViewMessages()
@ -145,7 +225,7 @@ char** CViewMessages::GetViewIcon()
}
wxInt32 CViewMessages::GetListRowCount()
wxInt32 CViewMessages::GetDocCount()
{
CMainDocument* pDoc = wxGetApp().GetDocument();
@ -156,81 +236,21 @@ wxInt32 CViewMessages::GetListRowCount()
}
void CViewMessages::OnListRender(wxTimerEvent &event)
{
if (!m_bProcessingListRenderEvent)
{
m_bProcessingListRenderEvent = true;
wxASSERT(NULL != m_pListPane);
wxInt32 iCount = _GetListRowCount();
if ( iCount != m_iCount )
{
m_iCount = iCount;
if ( 0 >= iCount )
m_pListPane->DeleteAllItems();
else
{
m_pListPane->SetItemCount(iCount);
m_pListPane->EnsureVisible(iCount-1);
}
}
else
{
if ( 1 <= m_iCacheTo )
{
wxListItem liListItemMessage;
wxString strListItemMessage;
wxString strDocumentItemMessage;
FormatMessage(m_iCacheTo, strDocumentItemMessage);
liListItemMessage.SetId(m_iCacheTo);
liListItemMessage.SetColumn(COLUMN_MESSAGE);
liListItemMessage.SetMask(wxLIST_MASK_TEXT);
m_pListPane->GetItem(liListItemMessage);
strListItemMessage = liListItemMessage.GetText();
if ( !strDocumentItemMessage.IsSameAs(strListItemMessage) )
{
m_pListPane->RefreshItems(m_iCacheFrom, m_iCacheTo);
m_pListPane->EnsureVisible(m_iCacheTo);
}
}
}
m_bProcessingListRenderEvent = false;
}
m_pListPane->Refresh();
event.Skip();
}
wxString CViewMessages::OnListGetItemText( long item, long column ) const
{
wxString strBuffer = wxEmptyString;
CMainDocument* pDoc = wxGetApp().GetDocument();
wxASSERT(NULL != pDoc);
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
CMessage& message = m_MessageCache.Item( item );
wxString strBuffer = wxEmptyString;
switch(column)
{
case COLUMN_PROJECT:
if (item == m_iCacheFrom) pDoc->CachedStateLock();
FormatProjectName( item, strBuffer );
message.GetProjectName( strBuffer );
break;
case COLUMN_TIME:
FormatTime( item, strBuffer );
message.GetTime( strBuffer );
break;
case COLUMN_MESSAGE:
FormatMessage( item, strBuffer );
if (item == m_iCacheTo) pDoc->CachedStateUnlock();
message.GetMessage( strBuffer );
break;
}
@ -240,25 +260,46 @@ wxString CViewMessages::OnListGetItemText( long item, long column ) const
wxListItemAttr* CViewMessages::OnListGetItemAttr( long item ) const
{
wxListItemAttr* pAttribute = NULL;
wxInt32 iBuffer = 0;
wxListItemAttr* pAttribute = NULL;
CMessage& message = m_MessageCache.Item( item );
wxString strBuffer = wxEmptyString;
wxGetApp().GetDocument()->GetMessagePriority(item, iBuffer);
message.GetPriority( strBuffer );
switch(iBuffer)
if ( wxT("E") == strBuffer )
{
case PRIORITY_INFO:
pAttribute = m_pMessageInfoAttr;
break;
case PRIORITY_ERROR:
pAttribute = m_pMessageErrorAttr;
break;
pAttribute = m_pMessageErrorAttr;
}
else
{
pAttribute = m_pMessageInfoAttr;
}
return pAttribute;
}
wxString CViewMessages::OnDocGetItemText( long item, long column ) const
{
wxString strBuffer = wxEmptyString;
switch(column)
{
case COLUMN_PROJECT:
FormatProjectName( item, strBuffer );
break;
case COLUMN_TIME:
FormatTime( item, strBuffer );
break;
case COLUMN_MESSAGE:
FormatMessage( item, strBuffer );
break;
}
return strBuffer;
}
void CViewMessages::OnTaskLinkClicked( const wxHtmlLinkInfo& link )
{
wxInt32 iIndex = -1;
@ -348,6 +389,70 @@ void CViewMessages::OnTaskCellMouseHover( wxHtmlCell* cell, wxCoord WXUNUSED(x),
}
wxInt32 CViewMessages::AddCacheElement()
{
CMessage* pItem = new CMessage();
wxASSERT( NULL != pItem );
if ( NULL != pItem )
{
m_MessageCache.Add( pItem );
return 0;
}
return -1;
}
wxInt32 CViewMessages::EmptyCache()
{
m_MessageCache.Empty();
return 0;
}
wxInt32 CViewMessages::GetCacheCount()
{
return m_MessageCache.GetCount();
}
wxInt32 CViewMessages::RemoveCacheElement()
{
m_MessageCache.RemoveAt( GetCacheCount() - 1 );
return 0;
}
wxInt32 CViewMessages::UpdateCache( long item, long column, wxString& strNewData )
{
CMessage& message = m_MessageCache.Item( item );
wxString strPriority = wxEmptyString;
switch(column)
{
case COLUMN_PROJECT:
message.SetProjectName( strNewData );
break;
case COLUMN_TIME:
message.SetTime( strNewData );
break;
case COLUMN_MESSAGE:
message.SetMessage( strNewData );
break;
}
FormatPriority( item, strPriority );
message.SetPriority( strPriority );
return 0;
}
bool CViewMessages::EnsureLastItemVisible()
{
return true;
}
void CViewMessages::UpdateSelection()
{
wxASSERT(NULL != m_pTaskPane);
@ -415,6 +520,32 @@ wxInt32 CViewMessages::FormatProjectName( wxInt32 item, wxString& strBuffer ) co
}
wxInt32 CViewMessages::FormatPriority( wxInt32 item, wxString& strBuffer ) const
{
CMainDocument* pDoc = wxGetApp().GetDocument();
wxInt32 iBuffer = 0;
wxASSERT(NULL != pDoc);
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
strBuffer.Clear();
pDoc->GetMessagePriority(item, iBuffer);
switch(iBuffer)
{
case PRIORITY_INFO:
strBuffer = wxT("I");
break;
case PRIORITY_ERROR:
strBuffer = wxT("E");
break;
}
return 0;
}
wxInt32 CViewMessages::FormatTime( wxInt32 item, wxString& strBuffer ) const
{
wxDateTime dtBuffer(wxDateTime::Now());

View File

@ -31,6 +31,33 @@
#include "BOINCBaseView.h"
class CMessage : public wxObject
{
public:
CMessage();
~CMessage();
wxInt32 GetProjectName( wxString& strProjectName );
wxInt32 GetPriority( wxString& strPriority );
wxInt32 GetTime( wxString& strTime );
wxInt32 GetMessage( wxString& strMessage );
wxInt32 SetProjectName( wxString& strProjectName );
wxInt32 SetPriority( wxString& strPriority );
wxInt32 SetTime( wxString& strTime );
wxInt32 SetMessage( wxString& strMessage );
protected:
wxString m_strProjectName;
wxString m_strPriority;
wxString m_strTime;
wxString m_strMessage;
};
WX_DECLARE_OBJARRAY( CMessage, CMessageCache );
class CViewMessages : public CBOINCBaseView
{
DECLARE_DYNAMIC_CLASS( CViewMessages )
@ -43,17 +70,8 @@ public:
virtual wxString GetViewName();
virtual char** GetViewIcon();
virtual wxInt32 GetListRowCount();
virtual void OnListRender( wxTimerEvent& event );
virtual wxString OnListGetItemText( long item, long column ) const;
virtual wxListItemAttr* OnListGetItemAttr( long item ) const;
virtual void OnTaskLinkClicked( const wxHtmlLinkInfo& link );
virtual void OnTaskCellMouseHover( wxHtmlCell* cell, wxCoord x, wxCoord y );
private:
protected:
bool m_bTaskHeaderHidden;
bool m_bTaskCopyAllHidden;
@ -64,6 +82,34 @@ private:
wxListItemAttr* m_pMessageInfoAttr;
wxListItemAttr* m_pMessageErrorAttr;
CMessageCache m_MessageCache;
virtual wxInt32 GetDocCount();
virtual wxString OnListGetItemText( long item, long column ) const;
virtual wxListItemAttr* OnListGetItemAttr( long item ) const;
virtual wxString OnDocGetItemText( long item, long column ) const;
virtual void OnTaskLinkClicked( const wxHtmlLinkInfo& link );
virtual void OnTaskCellMouseHover( wxHtmlCell* cell, wxCoord x, wxCoord y );
virtual wxInt32 AddCacheElement();
virtual wxInt32 EmptyCache();
virtual wxInt32 GetCacheCount();
virtual wxInt32 RemoveCacheElement();
virtual wxInt32 UpdateCache( long item, long column, wxString& strNewData );
virtual bool EnsureLastItemVisible();
virtual void UpdateSelection();
virtual void UpdateTaskPane();
wxInt32 FormatProjectName( wxInt32 item, wxString& strBuffer ) const;
wxInt32 FormatPriority( wxInt32 item, wxString& strBuffer ) const;
wxInt32 FormatTime( wxInt32 item, wxString& strBuffer ) const;
wxInt32 FormatMessage( wxInt32 item, wxString& strBuffer ) const;
#ifndef NOCLIPBOARD
bool m_bClipboardOpen;
wxString m_strClipboardData;
@ -72,12 +118,6 @@ private:
bool CloseClipboard();
#endif
virtual void UpdateSelection();
virtual void UpdateTaskPane();
wxInt32 FormatProjectName( wxInt32 item, wxString& strBuffer ) const;
wxInt32 FormatTime( wxInt32 item, wxString& strBuffer ) const;
wxInt32 FormatMessage( wxInt32 item, wxString& strBuffer ) const;
};

View File

@ -34,6 +34,9 @@
#include "DlgAttachProject.h"
#include "Events.h"
#include "wx/arrimpl.cpp"
#include "res/boinc.xpm"
#include "res/proj.xpm"
#include "res/task.xpm"
@ -116,6 +119,131 @@ const wxString LINKDESC_WEBPROJECT =
const wxString LINK_WEB = wxT(SECTION_WEB ":");
WX_DEFINE_OBJARRAY( CProjectCache );
CProject::CProject()
{
m_strProjectName = wxEmptyString;
m_strAccountName = wxEmptyString;
m_strTeamName = wxEmptyString;
m_strTotalCredit = wxEmptyString;
m_strAVGCredit = wxEmptyString;
m_strResourceShare = wxEmptyString;
m_strStatus = wxEmptyString;
}
CProject::~CProject()
{
m_strProjectName.Clear();
m_strAccountName.Clear();
m_strTeamName.Clear();
m_strTotalCredit.Clear();
m_strAVGCredit.Clear();
m_strResourceShare.Clear();
m_strStatus.Clear();
}
wxInt32 CProject::GetProjectName( wxString& strProjectName )
{
strProjectName = m_strProjectName;
return 0;
}
wxInt32 CProject::GetAccountName( wxString& strAccountName )
{
strAccountName = m_strAccountName;
return 0;
}
wxInt32 CProject::GetTeamName( wxString& strTeamName )
{
strTeamName = m_strTeamName;
return 0;
}
wxInt32 CProject::GetTotalCredit( wxString& strTotalCredit )
{
strTotalCredit = m_strTotalCredit;
return 0;
}
wxInt32 CProject::GetAVGCredit( wxString& strAVGCredit )
{
strAVGCredit = m_strAVGCredit;
return 0;
}
wxInt32 CProject::GetResourceShare( wxString& strResourceShare )
{
strResourceShare = m_strResourceShare;
return 0;
}
wxInt32 CProject::GetStatus( wxString& strStatus )
{
strStatus = m_strStatus;
return 0;
}
wxInt32 CProject::SetProjectName( wxString& strProjectName )
{
m_strProjectName = strProjectName;
return 0;
}
wxInt32 CProject::SetAccountName( wxString& strAccountName )
{
m_strAccountName = strAccountName;
return 0;
}
wxInt32 CProject::SetTeamName( wxString& strTeamName )
{
m_strTeamName = strTeamName;
return 0;
}
wxInt32 CProject::SetTotalCredit( wxString& strTotalCredit )
{
m_strTotalCredit = strTotalCredit;
return 0;
}
wxInt32 CProject::SetAVGCredit( wxString& strAVGCredit )
{
m_strAVGCredit = strAVGCredit;
return 0;
}
wxInt32 CProject::SetResourceShare( wxString& strResourceShare )
{
m_strResourceShare = strResourceShare;
return 0;
}
wxInt32 CProject::SetStatus( wxString& strStatus )
{
m_strStatus = strStatus;
return 0;
}
IMPLEMENT_DYNAMIC_CLASS(CViewProjects, CBOINCBaseView)
@ -186,7 +314,7 @@ char** CViewProjects::GetViewIcon()
}
wxInt32 CViewProjects::GetListRowCount()
wxInt32 CViewProjects::GetDocCount()
{
CMainDocument* pDoc = wxGetApp().GetDocument();
@ -199,16 +327,45 @@ wxInt32 CViewProjects::GetListRowCount()
wxString CViewProjects::OnListGetItemText(long item, long column) const
{
wxString strBuffer = wxEmptyString;
CMainDocument* pDoc = wxGetApp().GetDocument();
wxASSERT(NULL != pDoc);
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
CProject& project = m_ProjectCache.Item( item );
wxString strBuffer = wxEmptyString;
switch(column)
{
case COLUMN_PROJECT:
project.GetProjectName( strBuffer );
break;
case COLUMN_ACCOUNTNAME:
project.GetAccountName( strBuffer );
break;
case COLUMN_TEAMNAME:
project.GetTeamName( strBuffer );
break;
case COLUMN_TOTALCREDIT:
project.GetTotalCredit( strBuffer );
break;
case COLUMN_AVGCREDIT:
project.GetAVGCredit( strBuffer );
break;
case COLUMN_RESOURCESHARE:
project.GetResourceShare( strBuffer );
break;
case COLUMN_STATUS:
project.GetStatus( strBuffer );
break;
}
return strBuffer;
}
wxString CViewProjects::OnDocGetItemText(long item, long column) const
{
wxString strBuffer = wxEmptyString;
switch(column)
{
case COLUMN_PROJECT:
if (item == m_iCacheFrom) pDoc->CachedStateLock();
FormatProjectName( item, strBuffer );
break;
case COLUMN_ACCOUNTNAME:
@ -228,7 +385,6 @@ wxString CViewProjects::OnListGetItemText(long item, long column) const
break;
case COLUMN_STATUS:
FormatStatus( item, strBuffer );
if (item == m_iCacheTo) pDoc->CachedStateUnlock();
break;
}
@ -437,6 +593,72 @@ void CViewProjects::OnTaskCellMouseHover( wxHtmlCell* cell, wxCoord WXUNUSED(x),
}
wxInt32 CViewProjects::AddCacheElement()
{
CProject* pItem = new CProject();
wxASSERT( NULL != pItem );
if ( NULL != pItem )
{
m_ProjectCache.Add( pItem );
return 0;
}
return -1;
}
wxInt32 CViewProjects::EmptyCache()
{
m_ProjectCache.Empty();
return 0;
}
wxInt32 CViewProjects::GetCacheCount()
{
return m_ProjectCache.GetCount();
}
wxInt32 CViewProjects::RemoveCacheElement()
{
m_ProjectCache.RemoveAt( GetCacheCount() - 1 );
return 0;
}
wxInt32 CViewProjects::UpdateCache( long item, long column, wxString& strNewData )
{
CProject& project = m_ProjectCache.Item( item );
switch(column)
{
case COLUMN_PROJECT:
project.SetProjectName( strNewData );
break;
case COLUMN_ACCOUNTNAME:
project.SetAccountName( strNewData );
break;
case COLUMN_TEAMNAME:
project.SetTeamName( strNewData );
break;
case COLUMN_TOTALCREDIT:
project.SetTotalCredit( strNewData );
break;
case COLUMN_AVGCREDIT:
project.SetAVGCredit( strNewData );
break;
case COLUMN_RESOURCESHARE:
project.SetResourceShare( strNewData );
break;
case COLUMN_STATUS:
project.SetStatus( strNewData );
break;
}
return 0;
}
void CViewProjects::UpdateSelection()
{
CMainDocument* pDoc = wxGetApp().GetDocument();

View File

@ -31,6 +31,42 @@
#include "BOINCBaseView.h"
class CProject : public wxObject
{
public:
CProject();
~CProject();
wxInt32 GetProjectName( wxString& strProjectName );
wxInt32 GetAccountName( wxString& strAccountName );
wxInt32 GetTeamName( wxString& strTeamName );
wxInt32 GetTotalCredit( wxString& strTotalCredit );
wxInt32 GetAVGCredit( wxString& strAVGCredit );
wxInt32 GetResourceShare( wxString& strResourceShare );
wxInt32 GetStatus( wxString& strStatus );
wxInt32 SetProjectName( wxString& strProjectName );
wxInt32 SetAccountName( wxString& strAccountName );
wxInt32 SetTeamName( wxString& strTeamName );
wxInt32 SetTotalCredit( wxString& strTotalCredit );
wxInt32 SetAVGCredit( wxString& strAVGCredit );
wxInt32 SetResourceShare( wxString& strResourceShare );
wxInt32 SetStatus( wxString& strStatus );
protected:
wxString m_strProjectName;
wxString m_strAccountName;
wxString m_strTeamName;
wxString m_strTotalCredit;
wxString m_strAVGCredit;
wxString m_strResourceShare;
wxString m_strStatus;
};
WX_DECLARE_OBJARRAY( CProject, CProjectCache );
class CViewProjects : public CBOINCBaseView
{
DECLARE_DYNAMIC_CLASS( CViewProjects )
@ -43,14 +79,8 @@ public:
virtual wxString GetViewName();
virtual char** GetViewIcon();
virtual wxInt32 GetListRowCount();
virtual wxString OnListGetItemText( long item, long column ) const;
virtual void OnTaskLinkClicked( const wxHtmlLinkInfo& link );
virtual void OnTaskCellMouseHover( wxHtmlCell* cell, wxCoord x, wxCoord y );
private:
protected:
bool m_bTaskHeaderHidden;
bool m_bTaskAttachHidden;
@ -68,6 +98,23 @@ private:
bool m_bItemSelected;
CProjectCache m_ProjectCache;
virtual wxInt32 GetDocCount();
virtual wxString OnListGetItemText( long item, long column ) const;
virtual wxString OnDocGetItemText( long item, long column ) const;
virtual void OnTaskLinkClicked( const wxHtmlLinkInfo& link );
virtual void OnTaskCellMouseHover( wxHtmlCell* cell, wxCoord x, wxCoord y );
virtual wxInt32 AddCacheElement();
virtual wxInt32 EmptyCache();
virtual wxInt32 GetCacheCount();
virtual wxInt32 RemoveCacheElement();
virtual wxInt32 UpdateCache( long item, long column, wxString& strNewData );
virtual void UpdateSelection();
virtual void UpdateTaskPane();

View File

@ -33,6 +33,9 @@
#include "ViewResources.h"
#include "Events.h"
#include "wx/arrimpl.cpp"
#include "res/usage.xpm"
#include "res/task.xpm"
#include "res/tips.xpm"
@ -55,6 +58,51 @@ const wxString LINKDESC_DEFAULT =
_("No available options currently defined.");
WX_DEFINE_OBJARRAY( CResourceCache );
CResource::CResource()
{
m_strProjectName = wxEmptyString;
m_strDiskSpace = wxEmptyString;
}
CResource::~CResource()
{
m_strProjectName.Clear();
m_strDiskSpace.Clear();
}
wxInt32 CResource::GetProjectName( wxString& strProjectName )
{
strProjectName = m_strProjectName;
return 0;
}
wxInt32 CResource::GetDiskSpace( wxString& strDiskSpace )
{
strDiskSpace = m_strDiskSpace;
return 0;
}
wxInt32 CResource::SetProjectName( wxString& strProjectName )
{
m_strProjectName = strProjectName;
return 0;
}
wxInt32 CResource::SetDiskSpace( wxString& strDiskSpace )
{
m_strDiskSpace = strDiskSpace;
return 0;
}
IMPLEMENT_DYNAMIC_CLASS(CViewResources, CBOINCBaseView)
@ -114,7 +162,7 @@ char** CViewResources::GetViewIcon()
}
wxInt32 CViewResources::GetListRowCount()
wxInt32 CViewResources::GetDocCount()
{
CMainDocument* pDoc = wxGetApp().GetDocument();
@ -127,23 +175,37 @@ wxInt32 CViewResources::GetListRowCount()
wxString CViewResources::OnListGetItemText( long item, long column ) const
{
wxString strBuffer = wxEmptyString;
CMainDocument* pDoc = wxGetApp().GetDocument();
wxASSERT(NULL != pDoc);
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
CResource& resource = m_ResourceCache.Item( item );
wxString strBuffer = wxEmptyString;
switch(column)
{
case COLUMN_PROJECT:
resource.GetProjectName( strBuffer );
break;
case COLUMN_DISKSPACE:
resource.GetDiskSpace( strBuffer );
break;
}
return strBuffer;
}
wxString CViewResources::OnDocGetItemText( long item, long column ) const
{
wxString strBuffer = wxEmptyString;
switch(column)
{
case COLUMN_PROJECT:
if (item == m_iCacheFrom) pDoc->CachedStateLock();
FormatProjectName( item, strBuffer );
break;
case COLUMN_DISKSPACE:
FormatDiskSpace( item, strBuffer );
if (item == m_iCacheTo) pDoc->CachedStateUnlock();
break;
}
return strBuffer;
}
@ -200,6 +262,57 @@ void CViewResources::OnTaskCellMouseHover( wxHtmlCell* cell, wxCoord WXUNUSED(x)
}
wxInt32 CViewResources::AddCacheElement()
{
CResource* pItem = new CResource();
wxASSERT( NULL != pItem );
if ( NULL != pItem )
{
m_ResourceCache.Add( pItem );
return 0;
}
return -1;
}
wxInt32 CViewResources::EmptyCache()
{
m_ResourceCache.Empty();
return 0;
}
wxInt32 CViewResources::GetCacheCount()
{
return m_ResourceCache.GetCount();
}
wxInt32 CViewResources::RemoveCacheElement()
{
m_ResourceCache.RemoveAt( GetCacheCount() - 1 );
return 0;
}
wxInt32 CViewResources::UpdateCache( long item, long column, wxString& strNewData )
{
CResource& resource = m_ResourceCache.Item( item );
switch(column)
{
case COLUMN_PROJECT:
resource.SetProjectName( strNewData );
break;
case COLUMN_DISKSPACE:
resource.SetDiskSpace( strNewData );
break;
}
return 0;
}
void CViewResources::UpdateSelection()
{
wxASSERT(NULL != m_pTaskPane);

View File

@ -31,6 +31,27 @@
#include "BOINCBaseView.h"
class CResource : public wxObject
{
public:
CResource();
~CResource();
wxInt32 GetProjectName( wxString& strProjectName );
wxInt32 GetDiskSpace( wxString& strDiskSpace );
wxInt32 SetProjectName( wxString& strProjectName );
wxInt32 SetDiskSpace( wxString& strDiskSpace );
protected:
wxString m_strProjectName;
wxString m_strDiskSpace;
};
WX_DECLARE_OBJARRAY( CResource, CResourceCache );
class CViewResources : public CBOINCBaseView
{
DECLARE_DYNAMIC_CLASS( CViewResources )
@ -43,14 +64,8 @@ public:
virtual wxString GetViewName();
virtual char** GetViewIcon();
virtual wxInt32 GetListRowCount();
virtual wxString OnListGetItemText( long item, long column ) const;
virtual void OnTaskLinkClicked( const wxHtmlLinkInfo& link );
virtual void OnTaskCellMouseHover( wxHtmlCell* cell, wxCoord x, wxCoord y );
private:
protected:
bool m_bTaskHeaderHidden;
@ -58,6 +73,23 @@ private:
bool m_bItemSelected;
CResourceCache m_ResourceCache;
virtual wxInt32 GetDocCount();
virtual wxString OnListGetItemText( long item, long column ) const;
virtual wxString OnDocGetItemText( long item, long column ) const;
virtual void OnTaskLinkClicked( const wxHtmlLinkInfo& link );
virtual void OnTaskCellMouseHover( wxHtmlCell* cell, wxCoord x, wxCoord y );
virtual wxInt32 AddCacheElement();
virtual wxInt32 EmptyCache();
virtual wxInt32 GetCacheCount();
virtual wxInt32 RemoveCacheElement();
virtual wxInt32 UpdateCache( long item, long column, wxString& strNewData );
virtual void UpdateSelection();
virtual void UpdateTaskPane();

View File

@ -34,6 +34,9 @@
#include "Events.h"
#include "error_numbers.h"
#include "wx/arrimpl.cpp"
#include "res/xfer.xpm"
#include "res/task.xpm"
#include "res/tips.xpm"
@ -71,6 +74,131 @@ const wxString LINKDESC_TASKABORT =
"This will prevent you from being granted credit for this result.");
WX_DEFINE_OBJARRAY( CTransferCache );
CTransfer::CTransfer()
{
m_strProjectName = wxEmptyString;
m_strFileName = wxEmptyString;
m_strProgress = wxEmptyString;
m_strSize = wxEmptyString;
m_strTime = wxEmptyString;
m_strSpeed = wxEmptyString;
m_strStatus = wxEmptyString;
}
CTransfer::~CTransfer()
{
m_strProjectName.Clear();
m_strFileName.Clear();
m_strProgress.Clear();
m_strSize.Clear();
m_strTime.Clear();
m_strSpeed.Clear();
m_strStatus.Clear();
}
wxInt32 CTransfer::GetProjectName( wxString& strProjectName )
{
strProjectName = m_strProjectName;
return 0;
}
wxInt32 CTransfer::GetFileName( wxString& strFileName )
{
strFileName = m_strFileName;
return 0;
}
wxInt32 CTransfer::GetProgress( wxString& strProgress )
{
strProgress = m_strProgress;
return 0;
}
wxInt32 CTransfer::GetSize( wxString& strSize )
{
strSize = m_strSize;
return 0;
}
wxInt32 CTransfer::GetTime( wxString& strTime )
{
strTime = m_strTime;
return 0;
}
wxInt32 CTransfer::GetSpeed( wxString& strSpeed )
{
strSpeed = m_strSpeed;
return 0;
}
wxInt32 CTransfer::GetStatus( wxString& strStatus )
{
strStatus = m_strStatus;
return 0;
}
wxInt32 CTransfer::SetProjectName( wxString& strProjectName )
{
m_strProjectName = strProjectName;
return 0;
}
wxInt32 CTransfer::SetFileName( wxString& strFileName )
{
m_strFileName = strFileName;
return 0;
}
wxInt32 CTransfer::SetProgress( wxString& strProgress )
{
m_strProgress = strProgress;
return 0;
}
wxInt32 CTransfer::SetSize( wxString& strSize )
{
m_strSize = strSize;
return 0;
}
wxInt32 CTransfer::SetTime( wxString& strTime )
{
m_strTime = strTime;
return 0;
}
wxInt32 CTransfer::SetSpeed( wxString& strSpeed )
{
m_strSpeed = strSpeed;
return 0;
}
wxInt32 CTransfer::SetStatus( wxString& strStatus )
{
m_strStatus = strStatus;
return 0;
}
IMPLEMENT_DYNAMIC_CLASS(CViewTransfers, CBOINCBaseView)
@ -135,7 +263,7 @@ char** CViewTransfers::GetViewIcon()
}
wxInt32 CViewTransfers::GetListRowCount()
wxInt32 CViewTransfers::GetDocCount()
{
CMainDocument* pDoc = wxGetApp().GetDocument();
@ -148,16 +276,45 @@ wxInt32 CViewTransfers::GetListRowCount()
wxString CViewTransfers::OnListGetItemText(long item, long column) const
{
wxString strBuffer = wxEmptyString;
CMainDocument* pDoc = wxGetApp().GetDocument();
wxASSERT(NULL != pDoc);
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
CTransfer& transfer = m_TransferCache.Item( item );
wxString strBuffer = wxEmptyString;
switch(column)
{
case COLUMN_PROJECT:
transfer.GetProjectName( strBuffer );
break;
case COLUMN_FILE:
transfer.GetFileName( strBuffer );
break;
case COLUMN_PROGRESS:
transfer.GetProgress( strBuffer );
break;
case COLUMN_SIZE:
transfer.GetSize( strBuffer );
break;
case COLUMN_TIME:
transfer.GetTime( strBuffer );
break;
case COLUMN_SPEED:
transfer.GetSpeed( strBuffer );
break;
case COLUMN_STATUS:
transfer.GetStatus( strBuffer );
break;
}
return strBuffer;
}
wxString CViewTransfers::OnDocGetItemText(long item, long column) const
{
wxString strBuffer = wxEmptyString;
switch(column)
{
case COLUMN_PROJECT:
if (item == m_iCacheFrom) pDoc->CachedStateLock();
FormatProjectName( item, strBuffer );
break;
case COLUMN_FILE:
@ -177,9 +334,9 @@ wxString CViewTransfers::OnListGetItemText(long item, long column) const
break;
case COLUMN_STATUS:
FormatStatus( item, strBuffer );
if (item == m_iCacheTo) pDoc->CachedStateUnlock();
break;
}
return strBuffer;
}
@ -276,6 +433,72 @@ void CViewTransfers::OnTaskCellMouseHover( wxHtmlCell* cell, wxCoord WXUNUSED(x)
}
wxInt32 CViewTransfers::AddCacheElement()
{
CTransfer* pItem = new CTransfer();
wxASSERT( NULL != pItem );
if ( NULL != pItem )
{
m_TransferCache.Add( pItem );
return 0;
}
return -1;
}
wxInt32 CViewTransfers::EmptyCache()
{
m_TransferCache.Empty();
return 0;
}
wxInt32 CViewTransfers::GetCacheCount()
{
return m_TransferCache.GetCount();
}
wxInt32 CViewTransfers::RemoveCacheElement()
{
m_TransferCache.RemoveAt( GetCacheCount() - 1 );
return 0;
}
wxInt32 CViewTransfers::UpdateCache( long item, long column, wxString& strNewData )
{
CTransfer& transfer = m_TransferCache.Item( item );
switch(column)
{
case COLUMN_PROJECT:
transfer.SetProjectName( strNewData );
break;
case COLUMN_FILE:
transfer.SetFileName( strNewData );
break;
case COLUMN_PROGRESS:
transfer.SetProgress( strNewData );
break;
case COLUMN_SIZE:
transfer.SetSize( strNewData );
break;
case COLUMN_TIME:
transfer.SetTime( strNewData );
break;
case COLUMN_SPEED:
transfer.SetSpeed( strNewData );
break;
case COLUMN_STATUS:
transfer.SetStatus( strNewData );
break;
}
return 0;
}
void CViewTransfers::UpdateSelection()
{
wxASSERT(NULL != m_pTaskPane);

View File

@ -31,6 +31,42 @@
#include "BOINCBaseView.h"
class CTransfer : public wxObject
{
public:
CTransfer();
~CTransfer();
wxInt32 GetProjectName( wxString& strProjectName );
wxInt32 GetFileName( wxString& strFileName );
wxInt32 GetProgress( wxString& strProgress );
wxInt32 GetSize( wxString& strSize );
wxInt32 GetTime( wxString& strTime );
wxInt32 GetSpeed( wxString& strSpeed );
wxInt32 GetStatus( wxString& strStatus );
wxInt32 SetProjectName( wxString& strProjectName );
wxInt32 SetFileName( wxString& strFileName );
wxInt32 SetProgress( wxString& strProgress );
wxInt32 SetSize( wxString& strSize );
wxInt32 SetTime( wxString& strTime );
wxInt32 SetSpeed( wxString& strSpeed );
wxInt32 SetStatus( wxString& strStatus );
protected:
wxString m_strProjectName;
wxString m_strFileName;
wxString m_strProgress;
wxString m_strSize;
wxString m_strTime;
wxString m_strSpeed;
wxString m_strStatus;
};
WX_DECLARE_OBJARRAY( CTransfer, CTransferCache );
class CViewTransfers : public CBOINCBaseView
{
DECLARE_DYNAMIC_CLASS( CViewTransfers )
@ -43,14 +79,8 @@ public:
virtual wxString GetViewName();
virtual char** GetViewIcon();
virtual wxInt32 GetListRowCount();
virtual wxString OnListGetItemText( long item, long column ) const;
virtual void OnTaskLinkClicked( const wxHtmlLinkInfo& link );
virtual void OnTaskCellMouseHover( wxHtmlCell* cell, wxCoord x, wxCoord y );
private:
protected:
bool m_bTaskHeaderHidden;
bool m_bTaskRetryHidden;
@ -60,6 +90,23 @@ private:
bool m_bItemSelected;
CTransferCache m_TransferCache;
virtual wxInt32 GetDocCount();
virtual wxString OnListGetItemText( long item, long column ) const;
virtual wxString OnDocGetItemText( long item, long column ) const;
virtual void OnTaskLinkClicked( const wxHtmlLinkInfo& link );
virtual void OnTaskCellMouseHover( wxHtmlCell* cell, wxCoord x, wxCoord y );
virtual wxInt32 AddCacheElement();
virtual wxInt32 EmptyCache();
virtual wxInt32 GetCacheCount();
virtual wxInt32 RemoveCacheElement();
virtual wxInt32 UpdateCache( long item, long column, wxString& strNewData );
virtual void UpdateSelection();
virtual void UpdateTaskPane();

View File

@ -33,6 +33,9 @@
#include "ViewWork.h"
#include "Events.h"
#include "wx/arrimpl.cpp"
#include "res/result.xpm"
#include "res/task.xpm"
#include "res/tips.xpm"
@ -82,6 +85,147 @@ const wxString LINKDESC_TASKABORT =
"This will prevent you from being granted credit for the result.");
WX_DEFINE_OBJARRAY( CWorkCache );
CWork::CWork()
{
m_strProjectName = wxEmptyString;
m_strApplicationName = wxEmptyString;
m_strName = wxEmptyString;
m_strCPUTime = wxEmptyString;
m_strProgress = wxEmptyString;
m_strTimeToCompletion = wxEmptyString;
m_strReportDeadline = wxEmptyString;
m_strStatus = wxEmptyString;
}
CWork::~CWork()
{
m_strProjectName.Clear();
m_strApplicationName.Clear();
m_strName.Clear();
m_strCPUTime.Clear();
m_strProgress.Clear();
m_strTimeToCompletion.Clear();
m_strReportDeadline.Clear();
m_strStatus.Clear();
}
wxInt32 CWork::GetProjectName( wxString& strProjectName )
{
strProjectName = m_strProjectName;
return 0;
}
wxInt32 CWork::GetApplicationName( wxString& strApplicationName )
{
strApplicationName = m_strApplicationName;
return 0;
}
wxInt32 CWork::GetName( wxString& strName )
{
strName = m_strName;
return 0;
}
wxInt32 CWork::GetCPUTime( wxString& strCPUTime )
{
strCPUTime = m_strCPUTime;
return 0;
}
wxInt32 CWork::GetProgress( wxString& strProgress )
{
strProgress = m_strProgress;
return 0;
}
wxInt32 CWork::GetTimeToCompletion( wxString& strTimeToCompletion )
{
strTimeToCompletion = m_strTimeToCompletion;
return 0;
}
wxInt32 CWork::GetReportDeadline( wxString& strReportDeadline )
{
strReportDeadline = m_strReportDeadline;
return 0;
}
wxInt32 CWork::GetStatus( wxString& strStatus )
{
strStatus = m_strStatus;
return 0;
}
wxInt32 CWork::SetProjectName( wxString& strProjectName )
{
m_strProjectName = strProjectName;
return 0;
}
wxInt32 CWork::SetApplicationName( wxString& strApplicationName )
{
m_strApplicationName = strApplicationName;
return 0;
}
wxInt32 CWork::SetName( wxString& strName )
{
m_strName = strName;
return 0;
}
wxInt32 CWork::SetCPUTime( wxString& strCPUTime )
{
m_strCPUTime = strCPUTime;
return 0;
}
wxInt32 CWork::SetProgress( wxString& strProgress )
{
m_strProgress = strProgress;
return 0;
}
wxInt32 CWork::SetTimeToCompletion( wxString& strTimeToCompletion )
{
m_strTimeToCompletion = strTimeToCompletion;
return 0;
}
wxInt32 CWork::SetReportDeadline( wxString& strReportDeadline )
{
m_strReportDeadline = strReportDeadline;
return 0;
}
wxInt32 CWork::SetStatus( wxString& strStatus )
{
m_strStatus = strStatus;
return 0;
}
IMPLEMENT_DYNAMIC_CLASS(CViewWork, CBOINCBaseView)
@ -147,7 +291,7 @@ char** CViewWork::GetViewIcon()
}
wxInt32 CViewWork::GetListRowCount()
wxInt32 CViewWork::GetDocCount()
{
CMainDocument* pDoc = wxGetApp().GetDocument();
@ -160,16 +304,48 @@ wxInt32 CViewWork::GetListRowCount()
wxString CViewWork::OnListGetItemText( long item, long column ) const
{
wxString strBuffer = wxEmptyString;
CMainDocument* pDoc = wxGetApp().GetDocument();
wxASSERT(NULL != pDoc);
wxASSERT(wxDynamicCast(pDoc, CMainDocument));
CWork& work = m_WorkCache.Item( item );
wxString strBuffer = wxEmptyString;
switch(column)
{
case COLUMN_PROJECT:
work.GetProjectName( strBuffer );
break;
case COLUMN_APPLICATION:
work.GetApplicationName( strBuffer );
break;
case COLUMN_NAME:
work.GetName( strBuffer );
break;
case COLUMN_CPUTIME:
work.GetCPUTime( strBuffer );
break;
case COLUMN_PROGRESS:
work.GetProgress( strBuffer );
break;
case COLUMN_TOCOMPLETETION:
work.GetTimeToCompletion( strBuffer );
break;
case COLUMN_REPORTDEADLINE:
work.GetReportDeadline( strBuffer );
break;
case COLUMN_STATUS:
work.GetStatus( strBuffer );
break;
}
return strBuffer;
}
wxString CViewWork::OnDocGetItemText( long item, long column ) const
{
wxString strBuffer = wxEmptyString;
switch(column)
{
case COLUMN_PROJECT:
if (item == m_iCacheFrom) pDoc->CachedStateLock();
FormatProjectName( item, strBuffer );
break;
case COLUMN_APPLICATION:
@ -192,7 +368,6 @@ wxString CViewWork::OnListGetItemText( long item, long column ) const
break;
case COLUMN_STATUS:
FormatStatus( item, strBuffer );
if (item == m_iCacheTo) pDoc->CachedStateUnlock();
break;
}
@ -335,6 +510,75 @@ void CViewWork::OnTaskCellMouseHover( wxHtmlCell* cell, wxCoord WXUNUSED(x), wxC
}
wxInt32 CViewWork::AddCacheElement()
{
CWork* pItem = new CWork();
wxASSERT( NULL != pItem );
if ( NULL != pItem )
{
m_WorkCache.Add( pItem );
return 0;
}
return -1;
}
wxInt32 CViewWork::EmptyCache()
{
m_WorkCache.Empty();
return 0;
}
wxInt32 CViewWork::GetCacheCount()
{
return m_WorkCache.GetCount();
}
wxInt32 CViewWork::RemoveCacheElement()
{
m_WorkCache.RemoveAt( GetCacheCount() - 1 );
return 0;
}
wxInt32 CViewWork::UpdateCache( long item, long column, wxString& strNewData )
{
CWork& work = m_WorkCache.Item( item );
switch(column)
{
case COLUMN_PROJECT:
work.SetProjectName( strNewData );
break;
case COLUMN_APPLICATION:
work.SetApplicationName( strNewData );
break;
case COLUMN_NAME:
work.SetName( strNewData );
break;
case COLUMN_CPUTIME:
work.SetCPUTime( strNewData );
break;
case COLUMN_PROGRESS:
work.SetProgress( strNewData );
break;
case COLUMN_TOCOMPLETETION:
work.SetTimeToCompletion( strNewData );
break;
case COLUMN_REPORTDEADLINE:
work.SetReportDeadline( strNewData );
break;
case COLUMN_STATUS:
work.SetStatus( strNewData );
break;
}
return 0;
}
void CViewWork::UpdateSelection()
{
CMainDocument* pDoc = wxGetApp().GetDocument();

View File

@ -31,6 +31,45 @@
#include "BOINCBaseView.h"
class CWork : public wxObject
{
public:
CWork();
~CWork();
wxInt32 GetProjectName( wxString& strProjectName );
wxInt32 GetApplicationName( wxString& strApplicationName );
wxInt32 GetName( wxString& strName );
wxInt32 GetCPUTime( wxString& strCPUTime );
wxInt32 GetProgress( wxString& strProgress );
wxInt32 GetTimeToCompletion( wxString& strTimeToCompletion );
wxInt32 GetReportDeadline( wxString& strReportDeadline );
wxInt32 GetStatus( wxString& strStatus );
wxInt32 SetProjectName( wxString& strProjectName );
wxInt32 SetApplicationName( wxString& strApplicationName );
wxInt32 SetName( wxString& strName );
wxInt32 SetCPUTime( wxString& strCPUTime );
wxInt32 SetProgress( wxString& strProgress );
wxInt32 SetTimeToCompletion( wxString& strTimeToCompletion );
wxInt32 SetReportDeadline( wxString& strReportDeadline );
wxInt32 SetStatus( wxString& strStatus );
protected:
wxString m_strProjectName;
wxString m_strApplicationName;
wxString m_strName;
wxString m_strCPUTime;
wxString m_strProgress;
wxString m_strTimeToCompletion;
wxString m_strReportDeadline;
wxString m_strStatus;
};
WX_DECLARE_OBJARRAY( CWork, CWorkCache );
class CViewWork : public CBOINCBaseView
{
DECLARE_DYNAMIC_CLASS( CViewWork )
@ -43,14 +82,8 @@ public:
virtual wxString GetViewName();
virtual char** GetViewIcon();
virtual wxInt32 GetListRowCount();
virtual wxString OnListGetItemText( long item, long column ) const;
virtual void OnTaskLinkClicked( const wxHtmlLinkInfo& link );
virtual void OnTaskCellMouseHover( wxHtmlCell* cell, wxCoord x, wxCoord y );
private:
protected:
bool m_bTaskHeaderHidden;
bool m_bTaskSuspendHidden;
@ -62,6 +95,23 @@ private:
bool m_bItemSelected;
CWorkCache m_WorkCache;
virtual wxInt32 GetDocCount();
virtual wxString OnListGetItemText( long item, long column ) const;
virtual wxString OnDocGetItemText( long item, long column ) const;
virtual void OnTaskLinkClicked( const wxHtmlLinkInfo& link );
virtual void OnTaskCellMouseHover( wxHtmlCell* cell, wxCoord x, wxCoord y );
virtual wxInt32 AddCacheElement();
virtual wxInt32 EmptyCache();
virtual wxInt32 GetCacheCount();
virtual wxInt32 RemoveCacheElement();
virtual wxInt32 UpdateCache( long item, long column, wxString& strNewData );
virtual void UpdateSelection();
virtual void UpdateTaskPane();

View File

@ -17,11 +17,6 @@
#pragma interface "taskbarex.cpp"
#endif
#include <wx/event.h>
#include <wx/list.h>
#include <wx/icon.h>
// ----------------------------------------------------------------------------
// wxTaskBarIconEx
// ----------------------------------------------------------------------------

View File

@ -80,17 +80,21 @@
#include <wx/html/htmlwin.h> // html window support
#include <wx/statline.h> // static line support
#include <wx/statbmp.h> // static bitmap support
#ifndef NOTASKBAR
#include <wx/taskbar.h> // taskbar support
#endif
#include <wx/clipbrd.h> // clipboard support
#include <wx/datetime.h> // date/time support
#include <wx/textdlg.h>
#include <wx/mimetype.h>
#include <wx/event.h>
#include <wx/list.h>
#include <wx/icon.h>
#include <wx/utils.h>
#include <wx/settings.h>
#include <wx/process.h>
#include <wx/dynarray.h>
#ifndef NOTASKBAR
#include <wx/taskbar.h> // taskbar support
#endif
// Standard Libraries
@ -140,6 +144,8 @@
#ifdef _DEBUG
#include <crtdbg.h>
#define malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
#define calloc(c, s) _calloc_dbg(c, s, _NORMAL_BLOCK, __FILE__, __LINE__)
#define realloc(p, s) _realloc_dbg(p, s, _NORMAL_BLOCK, __FILE__, __LINE__)
@ -168,6 +174,8 @@
#endif //_DEBUG
#define new DEBUG_NEW
#endif //__WIN32__ && __VISUALC && !__AFX_H__
#endif //__STDWX_H__

View File

@ -87,8 +87,8 @@ AC_DEFINE_UNQUOTED([BOINC_VERSION_STRING], "$BOINC_VERSION_STRING", [String repr
AC_DEFINE_UNQUOTED([BOINC_MAJOR_VERSION], $BOINC_MAJOR_VERSION, [Major part of BOINC version number])
AC_DEFINE_UNQUOTED([BOINC_MINOR_VERSION], $BOINC_MINOR_VERSION, [Minor part of BOINC version number])
AC_DEFINE_UNQUOTED([HOSTTYPE], "$host", [Host for this compilation])
AC_SUBST([CLIENT_BIN_FILENAME],[boinc_client_]AC_PACKAGE_VERSION[_$host${EXEEXT}])
AC_SUBST([CLIENT_GUI_BIN_FILENAME],[boinc_gui_]AC_PACKAGE_VERSION[_$host${EXEEXT}])
AC_SUBST([CLIENT_BIN_FILENAME],[boinc])
AC_SUBST([CLIENT_GUI_BIN_FILENAME],[boincmgr])
AC_SUBST([TOP_BUILD_DIR], [`pwd`])
AC_SUBST([TOP_SOURCE_DIR], [`(cd \`dirname "$0"\` && pwd)`])