BOOL CGraphListDlg::OnInitDialog() { CSkinDialog::OnInitDialog(); SkinMe( _T("CGraphListDlg"), IDR_TRAFFICFRAME ); m_gdiImageList.Create( IDB_COLOURDOT, 16, 0, RGB(0,255,0) ); m_wndList.SetImageList( &m_gdiImageList, LVSIL_SMALL ); m_wndSpeed.SendMessage( UDM_SETRANGE32, SPEED_MINIMUM, 120000 ); m_bShowAxis = m_pGraph->m_bShowAxis; m_bShowGrid = m_pGraph->m_bShowGrid; m_bShowLegend = m_pGraph->m_bShowLegend; m_nSpeed = max( m_pGraph->m_nSpeed, SPEED_MINIMUM ); UpdateData( FALSE ); for ( POSITION pos = m_pGraph->GetItemIterator() ; pos ; ) { CGraphItem* pItem = m_pGraph->GetNextItem( pos ); CLiveItem* pLive = PrepareItem( pItem ); pLive->Add( &m_wndList, -1, LIST_COLUMNS ); delete pLive; } OnItemChangedGraphItems( NULL, NULL ); return TRUE; }
void CSearchMonitorWnd::OnTimer(UINT_PTR nIDEvent) { if ( nIDEvent != 2 ) return; BOOL bScroll = m_wndList.GetTopIndex() + m_wndList.GetCountPerPage() >= m_wndList.GetItemCount(); for (;;) { CLiveItem* pItem; { CSingleLock pLock( &m_pSection ); if ( ! pLock.Lock( 250 ) ) break; if ( m_pQueue.GetCount() == 0 ) break; pItem = m_pQueue.RemoveHead(); } if ( (DWORD)m_wndList.GetItemCount() >= Settings.Search.MonitorQueue && Settings.Search.MonitorQueue > 0 ) { m_wndList.DeleteItem( 0 ); } /*int nItem =*/ pItem->Add( &m_wndList, -1, 4 ); delete pItem; } if ( bScroll ) m_wndList.EnsureVisible( m_wndList.GetItemCount() - 1, FALSE ); }
CLiveItem* CGraphListDlg::PrepareItem(CGraphItem* pItem) { CLiveItem* pLive = new CLiveItem( LIST_COLUMNS, reinterpret_cast< DWORD_PTR>( pItem ) ); pLive->SetImage( 0, I_IMAGECALLBACK ); pLive->Set( 0, pItem->m_sName ); return pLive; }
void CGraphListDlg::OnGraphEdit() { int nItem = m_wndList.GetNextItem( -1, LVNI_SELECTED ); if ( nItem < 0 ) return; CGraphItemDlg dlg( this, (CGraphItem*)m_wndList.GetItemData( nItem ) ); if ( dlg.DoModal() == IDOK ) { CLiveItem* pLive = PrepareItem( dlg.m_pItem ); pLive->Update( &m_wndList, nItem, LIST_COLUMNS ); delete pLive; SetModified(); } }
void CLiveList::Apply(CListCtrl* pCtrl, BOOL bSort) { ASSERT_VALID( this ); CQuickLock oLock( m_pSection ); BOOL bModified = FALSE; for ( int nItem = 0 ; nItem < pCtrl->GetItemCount() ; nItem++ ) { DWORD nParam = (DWORD)pCtrl->GetItemData( nItem ); CLiveItem* pItem; if ( m_pItems.Lookup( nParam, pItem ) ) { ASSERT_VALID( pItem ); if ( pItem->Update( pCtrl, nItem, m_nColumns ) ) bModified = TRUE; delete pItem; m_pItems.RemoveKey( nParam ); } else { pCtrl->DeleteItem( nItem-- ); bModified = TRUE; } } int nCount = pCtrl->GetItemCount(); for ( POSITION pos = m_pItems.GetStartPosition() ; pos ; ) { CLiveItem* pItem; DWORD_PTR nParam; m_pItems.GetNextAssoc( pos, nParam, pItem ); ASSERT_VALID( pItem ); pItem->Add( pCtrl, nCount++, m_nColumns ); bModified = TRUE; delete pItem; } m_pItems.RemoveAll(); if ( bModified && bSort ) Sort( pCtrl, -1 ); }
void CGraphListDlg::OnGraphAdd() { CGraphItemDlg dlg( this, new CGraphItem() ); if ( dlg.DoModal() == IDOK ) { m_pGraph->AddItem( dlg.m_pItem ); CLiveItem* pLive = PrepareItem( dlg.m_pItem ); pLive->Add( &m_wndList, -1, LIST_COLUMNS ); delete pLive; SetModified(); } else { delete dlg.m_pItem; } }
void CLiveList::Apply(CListCtrl* pCtrl, BOOL bSort) { ASSERT_VALID( this ); BOOL bModified = FALSE; int nCount = pCtrl->GetItemCount(); // Start flicker workaround for VS2012 //#if defined(_MSC_VER) && (_MSC_VER >= 1700) // #ifdef _USING_V110_SDK71_ #if defined(_MSC_PLATFORM_TOOLSET) && (_MSC_PLATFORM_TOOLSET >= 110) // Custom define pCtrl->SendMessage( WM_SETREDRAW, FALSE ); const int nSelected = pCtrl->GetNextItem( -1, LVNI_SELECTED ); #endif CQuickLock oLock( m_pSection ); for ( int nItem = 0 ; nItem < nCount ; nItem++ ) { DWORD nParam = (DWORD)pCtrl->GetItemData( nItem ); CLiveItem* pItem; if ( m_pItems.Lookup( nParam, pItem ) ) { ASSERT_VALID( pItem ); if ( pItem->Update( pCtrl, nItem, m_nColumns ) ) bModified = TRUE; delete pItem; m_pItems.RemoveKey( nParam ); } else { pCtrl->DeleteItem( nItem-- ); bModified = TRUE; nCount--; } } nCount = pCtrl->GetItemCount(); // ToDo: Is this double-check needed? for ( POSITION pos = m_pItems.GetStartPosition() ; pos ; ) { CLiveItem* pItem; DWORD_PTR nParam; m_pItems.GetNextAssoc( pos, nParam, pItem ); ASSERT_VALID( pItem ); pItem->Add( pCtrl, nCount++, m_nColumns ); bModified = TRUE; delete pItem; } m_pItems.RemoveAll(); if ( bModified && bSort ) Sort( pCtrl, -1 ); // End flicker workaround for VS2012 //#if defined(_MSC_VER) && (_MSC_VER >= 1700) // #ifdef _USING_V110_SDK71_ #if defined(_MSC_PLATFORM_TOOLSET) && (_MSC_PLATFORM_TOOLSET >= 110) // Custom define pCtrl->SendMessage( WM_SETREDRAW, TRUE ); if ( nSelected >= 0 ) { pCtrl->SetItemState( nSelected, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED ); pCtrl->SetSelectionMark( nSelected ); } #endif }
BOOL CDownloadReviewDlg::OnInitDialog() { CSkinDialog::OnInitDialog(); CRect rcList; m_wndReviews.GetClientRect( &rcList ); rcList.right -= GetSystemMetrics( SM_CXVSCROLL ); CoolInterface.SetImageListTo( m_wndReviews, LVSIL_SMALL ); m_wndReviews.InsertColumn( 0, _T("User"), LVCFMT_LEFT, 100, -1 ); m_wndReviews.InsertColumn( 1, _T("Rating"), LVCFMT_CENTER, 90, 0 ); m_wndReviews.InsertColumn( 2, _T("Comments"), LVCFMT_CENTER, rcList.right- 100 - 80, 1 ); m_wndReviews.InsertColumn( 3, _T("Order"), LVCFMT_CENTER, 0, 2 ); Skin.Translate( _T("CReviewList"), m_wndReviews.GetHeaderCtrl() ); m_wndReviews.SendMessage( LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_FULLROWSELECT|LVS_EX_LABELTIP, LVS_EX_FULLROWSELECT|LVS_EX_LABELTIP ); m_wndReviews.EnableToolTips(); // Sort by order added- first at the top CLiveList::Sort( &m_wndReviews, 3, FALSE ); CLiveList::Sort( &m_wndReviews, 3, FALSE ); CLiveList pReviews( 4 ); int nIndex = 1; // Lock while we're loading the list. (In case the download is destroyed) CSingleLock pLock( &Transfers.m_pSection, TRUE ); if ( ! m_pDownload ) return FALSE; m_sReviewFileName = m_pDownload->m_sName; CDownloadReview* pReview = m_pDownload->GetFirstReview(); while ( pReview ) { CLiveItem* pItem = pReviews.Add( pReview ); // Client picture // Note: We don't have pictures yet. Currently, it uses a star for a G2 // review, and a little person for everyone else switch ( pReview->m_nUserPicture ) { case 0: pItem->SetImage( 0, CoolInterface.ImageForID( ID_TOOLS_WIZARD ) ); break; case 1: pItem->SetImage( 0, CoolInterface.ImageForID( ID_TOOLS_PROFILE ) ); break; case 2: pItem->SetImage( 0, CoolInterface.ImageForID( ID_TOOLS_WIZARD ) ); break; case 3: pItem->SetImage( 0, CoolInterface.ImageForID( ID_TOOLS_PROFILE ) ); break; default: pItem->SetImage( 0, CoolInterface.ImageForID( ID_TOOLS_PROFILE ) ); } pItem->Set( 0, pReview->m_sUserName ); int nRating = min( pReview->m_nFileRating, 6 ); nRating = max ( nRating, 0 ); CString strRating; LoadString( strRating, IDS_RATING_NORATING + nRating ); pItem->Set( 1, strRating ); pItem->Set( 2, pReview->m_sFileComments ); pItem->Format( 3, _T("%i"), nIndex ); nIndex++; pReview = pReview->m_pNext; } pLock.Unlock(); //m_wndReviews.SetFont( &theApp.m_gdiFontBold ); pReviews.Apply( &m_wndReviews, TRUE ); // Set window icon SkinMe( NULL, IDR_MEDIAFRAME ); UpdateData( FALSE ); return TRUE; }
void CSearchMonitorWnd::OnQuerySearch(const CQuerySearch* pSearch) { if ( m_bPaused || m_hWnd == NULL ) return; CSingleLock pLock( &m_pSection ); if ( ! pLock.Lock( 250 ) ) return; if ( m_bPaused ) return; CLiveItem* pItem = new CLiveItem( 4, NULL ); CString strSearch = pSearch->m_sSearch; CString strSchema; CString strURN; CString strNode; if ( pSearch->m_pEndpoint.sin_addr.s_addr ) strNode.Format( _T("%hs:%u"), inet_ntoa( pSearch->m_pEndpoint.sin_addr ), ntohs( pSearch->m_pEndpoint.sin_port ) ); if ( pSearch->m_oSHA1 && pSearch->m_oTiger ) { strURN = _T("bitprint:") + pSearch->m_oSHA1.toString() + '.' + pSearch->m_oTiger.toString(); } else if ( pSearch->m_oTiger ) { strURN = pSearch->m_oTiger.toShortUrn(); } else if ( pSearch->m_oSHA1 ) { strURN = pSearch->m_oSHA1.toShortUrn(); } else if ( pSearch->m_oED2K ) { strURN = pSearch->m_oED2K.toShortUrn(); } else if ( pSearch->m_oBTH ) { strURN = pSearch->m_oBTH.toShortUrn(); } else if ( pSearch->m_oMD5 ) { strURN = pSearch->m_oMD5.toShortUrn(); } else strURN = _T("None"); if ( pSearch->m_bWhatsNew ) strSearch = _T("What's New?"); if ( pSearch->m_pXML ) { strSearch += _T('«'); strSearch += pSearch->m_pXML->GetRecursiveWords(); strSearch += _T('»'); } if ( pSearch->m_pSchema ) strSchema = pSearch->m_pSchema->m_sTitle; else strSchema = _T("None"); pItem->Set( 0, strSearch ); pItem->Set( 1, strURN ); pItem->Set( 2, strSchema ); pItem->Set( 3, strNode ); m_pQueue.AddTail( pItem ); }
void CHostCacheWnd::Update(BOOL bForce) { if ( !bForce ) if ( !m_bAllowUpdates ) return; CSingleLock pLock( &Network.m_pSection ); if ( ! pLock.Lock( 50 ) ) return; m_wndList.ModifyStyle( WS_VISIBLE, 0 ); CLiveList pLiveList( 8 ); PROTOCOLID nEffective = m_nMode ? m_nMode : PROTOCOL_G2; CHostCacheList* pCache = HostCache.ForProtocol( nEffective ); m_nCookie = pCache->m_nCookie; int nProtocolRev = m_gdiImageList.GetImageCount() - 1; for ( CHostCacheHost* pHost = pCache->GetNewest() ; pHost ; pHost = pHost->m_pPrevTime ) { // cancel update if mouse moves ouside window or user right-clicks // do not break if different cache window button pressed if ( !m_bAllowUpdates && !bForce ) break; if ( m_nMode == PROTOCOL_NULL ) { if ( HubHorizonPool.Find( &pHost->m_pAddress ) == NULL ) continue; } CLiveItem* pItem = pLiveList.Add( pHost ); pItem->m_nImage = theApp.m_bRTL ? nProtocolRev - pHost->m_nProtocol : pHost->m_nProtocol; pItem->m_nMaskOverlay = pHost->m_bPriority; pItem->Set( 0, CString( inet_ntoa( pHost->m_pAddress ) ) ); pItem->Format( 1, _T("%hu"), pHost->m_nPort ); #ifdef _DEBUG pItem->Format( 2, _T("K:%u A:%u Q:%u"), pHost->m_nKeyValue, pHost->m_tAck, pHost->m_tQuery ); #else if ( pHost->m_pVendor ) pItem->Set( 2, pHost->m_pVendor->m_sName ); else if ( pHost->m_nProtocol == PROTOCOL_G2 ) pItem->Set( 2, _T("(Gnutella2)") ); else if ( pHost->m_nProtocol == PROTOCOL_ED2K ) pItem->Set( 2, _T("(eDonkey Server)") ); #endif CTime pTime( (time_t)pHost->m_tSeen ); pItem->Set( 3, pTime.Format( _T("%Y-%m-%d %H:%M:%S") ) ); pItem->Set( 4, pHost->m_sName ); pItem->Set( 5, pHost->m_sDescription ); if ( pHost->m_nUserCount ) pItem->Format( 6, _T("%u"), pHost->m_nUserCount ); if ( pHost->m_nUserLimit ) pItem->Format( 7, _T("%u"), pHost->m_nUserLimit ); } if ( !m_bAllowUpdates && !bForce ) return; pLiveList.Apply( &m_wndList, TRUE ); m_wndList.ShowWindow( SW_SHOW ); tLastUpdate = GetTickCount(); // Update timer }
void CSchedulerWnd::Update(int nColumn, BOOL bSort) { HRESULT hr; CComPtr< IEnumWorkItems > pEnum; hr = m_pScheduler->Enum( &pEnum ); if ( FAILED( hr ) ) return; CLiveList pLiveList( 6 ); int nCount = 1; for ( ; ; ) { LPWSTR* pszTaskName = NULL; hr = pEnum->Next( 1, &pszTaskName, NULL ); if ( hr != S_OK ) // No tasks left break; CString sTaskName = *pszTaskName; CoTaskMemFree( pszTaskName ); CString sVendor = sTaskName.SpanExcluding( _T(".") ); if ( sVendor.Compare( CLIENT_NAME_T ) != 0 ) // Wrong name continue; DWORD_PTR nNumber = _tstoi( sTaskName.Mid( sVendor.GetLength() + 1 ) ); CComPtr< ITask > pTask; hr = m_pScheduler->Activate( sTaskName, IID_ITask, (IUnknown**)&pTask ); if ( FAILED( hr ) ) // Can't open task continue; DWORD nFlags = 0; hr = pTask->GetFlags( &nFlags ); BOOL bActive = ( ( nFlags & TASK_FLAG_DISABLED ) != TASK_FLAG_DISABLED ); HRESULT hrStatus = S_OK; hr = pTask->GetStatus( &hrStatus ); CString sTriggerString; LPWSTR szTriggerString = NULL; hr = pTask->GetTriggerString( 0, &szTriggerString ); if ( hr == S_OK ) { sTriggerString = szTriggerString; CoTaskMemFree( szTriggerString ); } CString strDate, strTime; SYSTEMTIME pTime = {}; hr = pTask->GetNextRunTime( &pTime ); if ( hr == S_OK ) { GetDateFormat( LOCALE_USER_DEFAULT, DATE_SHORTDATE, &pTime, NULL, strDate.GetBuffer( 64 ), 64 ); GetTimeFormat( LOCALE_USER_DEFAULT, TIME_NOSECONDS, &pTime, NULL, strTime.GetBuffer( 64 ), 64 ); strDate.ReleaseBuffer(); strTime.ReleaseBuffer(); } else if ( hr == SCHED_S_TASK_DISABLED ) bActive = FALSE; CString sStatus; DWORD nExitCode = 0; hr = pTask->GetExitCode( &nExitCode ); if ( SUCCEEDED( hr ) ) { sStatus.Format( _T("0x%08X"), nExitCode ); } int nAction = -1; LPWSTR szParams = NULL; hr = pTask->GetParameters( &szParams ); if ( SUCCEEDED( hr ) ) { CString sParams = szParams; CoTaskMemFree( szParams ); int nPos = sParams.Find( _T("task") ); if ( nPos != -1 ) nAction = _tstoi( sParams.Mid( nPos + 4 ) ); else nAction = SYSTEM_START; } CString sComment; LPWSTR szComment = NULL; hr = pTask->GetComment( &szComment ); if ( SUCCEEDED( hr ) ) { sComment = szComment; CoTaskMemFree( szComment ); } //Adding tasks we got from Scheduler to temp list and getting a handle //to modify their properties according to scheduler item. CLiveItem* pItem = pLiveList.Add( nNumber ); if ( ( nFlags & TASK_FLAG_DISABLED ) != TASK_FLAG_DISABLED ) pItem->SetImage( 0, SCHEDULE_ITEM_ACTIVE ); else pItem->SetImage( 0, SCHEDULE_ITEM_INACTIVE ); //Action column switch ( nAction ) { case BANDWIDTH_FULLSPEED: pItem->Set( 0, LoadString( IDS_SCHEDULER_BANDWIDTH_FULLSPEED ) ); break; case BANDWIDTH_REDUCEDSPEED: pItem->Set( 0, LoadString( IDS_SCHEDULER_BANDWIDTH_REDUCEDSPEED ) ); break; case BANDWIDTH_STOP: pItem->Set( 0, LoadString( IDS_SCHEDULER_BANDWIDTH_STOP ) ); break; case SYSTEM_DIALUP_DC: pItem->Set( 0, LoadString( IDS_SCHEDULER_SYSTEM_DIALUP_DC ) ); break; case SYSTEM_EXIT: pItem->Set( 0, LoadString( IDS_SCHEDULER_SYSTEM_EXIT ) ); break; case SYSTEM_SHUTDOWN: pItem->Set( 0, LoadString( IDS_SCHEDULER_SYSTEM_SHUTDOWN ) ); break; case SYSTEM_START: pItem->Set( 0, LoadString( IDS_SCHEDULER_SYSTEM_START ) ); break; } // Date column pItem->Set( 1, sTriggerString ); // Time column pItem->Set( 2, strDate + _T(" ") + strTime ); // Active column if ( bActive ) { switch ( hrStatus ) { case SCHED_S_TASK_NO_MORE_RUNS: pItem->Set( 3, LoadString( IDS_SCHEDULER_TASK_DONE ) ); break; case SCHED_S_TASK_RUNNING: pItem->Set( 3, LoadString( IDS_SCHEDULER_TASK_ACTIVE ) ); break; default: pItem->Set( 3, LoadString( IDS_SCHEDULER_TASK_WAITING ) ); } } else pItem->Set( 3, LoadString( IDS_SCHEDULER_TASK_INACTIVE ) ); // Status column pItem->Set( 4, sStatus ); //Description column pItem->Set( 5, sComment ); ++nCount; } // In case scheduler gave nothing if ( nCount == 1 ) { CLiveItem* pDefault = pLiveList.Add( (DWORD_PTR)0 ); pDefault->Set( 0, LoadString( IDS_SCHEDULER_NOTASK ) ); pDefault->SetImage( 0, SCHEDULE_NO_ITEM ); } if ( nColumn >= 0 ) { SetWindowLongPtr( m_wndList.GetSafeHwnd(), GWLP_USERDATA, 0 - nColumn - 1 ); } pLiveList.Apply( &m_wndList, bSort ); //Putting items in the main list tLastUpdate = GetTickCount(); // Update time after it's done doing its work }