Changeset 258


Ignore:
Timestamp:
08/18/07 13:17:48 (13 years ago)
Author:
Eoin
Message:

Listview flickering sorted.

Files:
14 edited

Legend:

Unmodified
Added
Removed
  • Jamfile.v2

    r251 r258  
    7070        <library>$(LIBS) 
    7171         
     72        <pch>on 
     73        <pch-source>./src/stdAfx.cpp 
     74        <pch-header>./src/stdAfx.hpp 
     75         
    7276        <runtime-link>static 
    7377        <threading>multi 
  • src/Halite.hpp

    r209 r258  
    1010 
    1111#include "HaliteIni.hpp" 
     12#include "../res/resource.h" 
    1213         
    1314class Halite : 
  • src/HaliteDialog.cpp

    r257 r258  
    8181        m_prog.SetRange(0, 100); 
    8282}        
    83         m_list.Attach(GetDlgItem(LISTPEERS)); 
     83        m_list.SubclassWindow(GetDlgItem(LISTPEERS)); 
    8484         
    8585        NoConnDown = -1; 
     
    382382} 
    383383 
    384 LRESULT HaliteDialog::DialogListView::OnEraseBkgnd(HDC dc) 
    385 { 
    386         CRect rect; 
    387         GetClientRect(rect); 
    388          
    389         if(hal::uxtheme().pIsAppThemed && hal::uxtheme().pIsAppThemed()) 
    390         { 
    391                 if (hal::uxtheme().pDrawThemeParentBackground) 
    392                 { 
    393                         hal::uxtheme().pDrawThemeParentBackground(*this, dc, rect); 
    394                 } 
    395         } 
    396          
    397         return 1; 
    398 } 
    399  
    400 LRESULT HaliteDialog::DialogListView::OnNcPaint(HRGN rgn) 
    401 { 
    402         CRect rect; 
    403         GetClientRect(rect); 
    404          
    405         HDC hdc; 
    406         hdc = GetDCEx(rgn, DCX_INTERSECTRGN|DCX_WINDOW|DCX_PARENTCLIP|DCX_CLIPCHILDREN); 
    407          
    408         if (!hdc) 
    409         { 
    410         //      SetMsgHandled(false); 
    411                 return 0; 
    412         } 
    413          
    414         CMemoryDC mDc(hdc, rect); 
    415          
    416         if (hal::uxtheme().pIsAppThemed) 
    417                 if(hal::uxtheme().pIsAppThemed()) 
    418                 { 
    419                         if (hal::uxtheme().pDrawThemeParentBackground) 
    420                         { 
    421                                 hal::uxtheme().pDrawThemeParentBackground(*this, mDc, rect); 
    422                         } 
    423                 } 
    424                  
    425         Print(mDc, PRF_NONCLIENT); 
    426          
    427         //::BitBlt(hdc, rect.left, rect.top, rect.right, rect.bottom, mDc, rect.left, rect.top, SRCCOPY); 
    428         ReleaseDC(hdc); 
    429         return 0; 
    430 } 
    431  
    432 LRESULT HaliteDialog::DialogListView::OnPaint(HDC dc) 
    433 { 
    434         CRect rect; 
    435         GetClientRect(rect); 
    436          
    437         CPaintDC pDc(*this); 
    438          
    439         CMemoryDC mDc(pDc, pDc.m_ps.rcPaint); 
    440          
    441         if (hal::uxtheme().pIsAppThemed) 
    442                 if(hal::uxtheme().pIsAppThemed()) 
    443                 { 
    444                         if (hal::uxtheme().pDrawThemeParentBackground) 
    445                         { 
    446                                 hal::uxtheme().pDrawThemeParentBackground(*this, mDc, &pDc.m_ps.rcPaint); 
    447                         } 
    448                 } 
    449                  
    450         PrintClient(mDc, PRF_CHILDREN|PRF_CLIENT|PRF_ERASEBKGND); 
    451          
    452 //      pDc.BitBlt(pDc.m_ps.rcPaint.left, pDc.m_ps.rcPaint.top, pDc.m_ps.rcPaint.right, pDc.m_ps.rcPaint.bottom, mDc, 15, 15, SRCCOPY); 
    453         return 0; 
    454 } 
    455          
  • src/HaliteDialog.hpp

    r257 r258  
    7373                BEGIN_MSG_MAP_EX(thisClass) 
    7474                        MSG_WM_DESTROY(OnDestroy) 
    75                          
    76                 //      MSG_WM_ERASEBKGND(OnEraseBkgnd) 
    77                 //      MSG_WM_PAINT(OnPaint) 
    78                 //      MSG_WM_NCPAINT(OnNcPaint) 
    7975         
    8076                        CHAIN_MSG_MAP(listClass) 
     
    106102                } 
    107103                 
    108                 void OnAttach() 
    109                 { 
    110                         SetExtendedListViewStyle(WS_EX_CLIENTEDGE|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP); 
     104                bool SubclassWindow(HWND hwnd) 
     105                { 
     106                        if(!parentClass::SubclassWindow(hwnd)) 
     107                                return false; 
     108                                 
     109                        SetExtendedListViewStyle(WS_EX_CLIENTEDGE|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_DOUBLEBUFFER); 
    111110                        SetSortListViewExtendedStyle(SORTLV_USESHELLBITMAPS, SORTLV_USESHELLBITMAPS); 
    112111                         
     
    115114                        SetColumnSortType(2, LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedDown()); 
    116115                        SetColumnSortType(3, LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedUp()); 
     116                                 
     117                        return true; 
    117118                } 
    118119                 
     
    132133                pD CustomItemConversion(LVCompareParam* param, int iSortCol) 
    133134                {                        
    134                 //      hal::event().post(shared_ptr<hal::EventDetail>(new hal::EventDebug(hal::Event::info, (wformat(L"peerDetails get %1%, %2%. Item count %3%") % param->iItem % param->dwItemData % GetItemCount()).str().c_str()))); 
    135                          
    136135                        return peerDetails_[param->dwItemData]; 
    137136                }                
     
    139138                int CustomItemComparision(pD left, pD right, int iSortCol) 
    140139                { 
    141                 //      hal::event().post(shared_ptr<hal::EventDetail>(new hal::EventDebug(hal::Event::info, (wformat(L"peerDetails left %1%, right %2%") % left.ipAddress % right.ipAddress).str().c_str()))); 
    142  
    143140                        ColumnAdapter* pCA = getColumnAdapter(iSortCol); 
    144141                         
     
    150147                 
    151148                void uiUpdate(const hal::TorrentDetails& tD); 
    152                  
    153                 LRESULT OnEraseBkgnd(HDC dc); 
    154                 LRESULT OnNcPaint(HRGN rgn); 
    155                 LRESULT OnPaint(HDC dc); 
    156149                 
    157150        private: 
  • src/HaliteListView.cpp

    r255 r258  
    2929void HaliteListViewCtrl::OnShowWindow(UINT, INT) 
    3030{ 
    31         SetExtendedListViewStyle(WS_EX_CLIENTEDGE|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP); 
     31        SetExtendedListViewStyle(WS_EX_CLIENTEDGE|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_DOUBLEBUFFER); 
    3232        SetSortListViewExtendedStyle(SORTLV_USESHELLBITMAPS, SORTLV_USESHELLBITMAPS); 
    3333         
  • src/HaliteSortListViewCtrl.hpp

    r257 r258  
    1010 
    1111#include "stdAfx.hpp" 
     12#include "../res/resource.h" 
    1213#include "halTorrent.hpp" 
    1314#include "WinAPIWaitableTimer.hpp" 
    1415 
    1516#include "UxthemeWrapper.hpp" 
     17 
     18#define LVS_EX_DOUBLEBUFFER     0x00010000 
    1619 
    1720template<class T> 
     
    400403        } 
    401404         
     405        bool SubclassWindow(HWND hwnd) 
     406        { 
     407                if(!parentClass::SubclassWindow(hwnd)) 
     408                        return false; 
     409                         
     410                SetExtendedListViewStyle(WS_EX_CLIENTEDGE|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_DOUBLEBUFFER); 
     411                SetSortListViewExtendedStyle(SORTLV_USESHELLBITMAPS, SORTLV_USESHELLBITMAPS); 
     412                 
     413                return true; 
     414        }                
     415         
    402416        void SetListViewDetails() 
    403417        { 
     
    519533                TryUpdateLock<thisClass> lock(*this); 
    520534                if (lock)  
    521                         !syncTimer_.reset(50, 0, bind(&thisClass::syncTimeout, this)); 
     535                        manager_.sync_list(true, true); 
     536                        //syncTimer_.reset(50, 0, bind(&thisClass::syncTimeout, this)); 
    522537                 
    523538                return 0; 
  • src/HaliteTabCtrl.hpp

    r148 r258  
    1414    BEGIN_MSG_MAP_EX(CHalTabCtrl) 
    1515                MSG_WM_SIZE(OnSize) 
     16//              MSG_WM_ERASEBKGND(OnEraseBkgnd) 
    1617//        MESSAGE_HANDLER(WM_CREATE, OnCreate) 
    1718                REFLECTED_NOTIFY_CODE_HANDLER_EX(TCN_SELCHANGE, OnSelChange) 
     
    2324                ATLASSERT(::IsWindow(hWndNew)); 
    2425        CWindowImpl<CHalTabCtrl, CTabCtrl>::SubclassWindow(hWndNew); 
    25         } 
    26  
    27         LRESULT OnEraseBkgnd(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled) 
    28         { 
    29                 bHandled = TRUE; 
    30                 return bHandled; 
    3126        } 
    3227 
  • src/HaliteTabPage.hpp

    r257 r258  
    1010public: 
    1111    BEGIN_MSG_MAP_EX(CHalTabPageImpl) 
    12                 MSG_WM_ERASEBKGND(OnEraseBkgnd) 
     12//              MSG_WM_ERASEBKGND(OnEraseBkgnd) 
    1313                MSG_WM_CTLCOLORDLG(OnCltColorDlg) 
    1414                MSG_WM_CTLCOLORBTN(OnCltColor) 
     
    2222        LRESULT OnEraseBkgnd(HDC dc) 
    2323        { 
     24                return 1; 
     25                 
    2426                CRect rect; 
    2527                GetClientRect(rect); 
  • src/advtabs/Peers.cpp

    r256 r258  
    77 
    88#include "Peers.hpp" 
    9  
    10 #if 0 
    11  
    12 void AdvPeerDialog::updateDialog() 
    13 { 
    14         hal::PeerDetails peerDetails; 
    15         hal::bittorrent().getAllPeerDetails(selection_manager().selected(), peerDetails); 
    16          
    17         if (!peerDetails.empty()) 
    18         { 
    19                 // Here we remove any peers no longer connected. 
    20                  
    21                 std::sort(peerDetails.begin(), peerDetails.end()); 
    22                  
    23                 for(int i = 0; i < m_list.GetItemCount(); /*nothing here*/) 
    24                 { 
    25                         boost::array<wchar_t, MAX_PATH> ip_address; 
    26                         m_list.GetItemText(i, 0, ip_address.c_array(), MAX_PATH); 
    27                          
    28                         hal::PeerDetail ip(ip_address.data()); 
    29                         hal::PeerDetails::iterator iter =  
    30                                 std::lower_bound(peerDetails.begin(), peerDetails.end(), ip); 
    31                          
    32                         if (iter == peerDetails.end() || !((*iter) == ip)) 
    33                                 m_list.DeleteItem(i); 
    34                         else 
    35                                 ++i; 
    36                 } 
    37                  
    38                 // And now here we add/update the connected peers 
    39                  
    40                 for (hal::PeerDetails::iterator i = peerDetails.begin();  
    41                         i != peerDetails.end(); ++i) 
    42                 {                        
    43                         LV_FINDINFO findInfo;  
    44                         findInfo.flags = LVFI_STRING; 
    45                         findInfo.psz = const_cast<LPTSTR>((*i).ipAddress.c_str()); 
    46                          
    47                         int itemPos = m_list.FindItem(&findInfo, -1); 
    48                         if (itemPos < 0) 
    49                                 itemPos = m_list.AddItem(0, 0, (*i).ipAddress.c_str(), 0); 
    50                          
    51                         m_list.SetItemText(itemPos, 1, 
    52                                 (wformat(L"%1$.2fKB/s")  
    53                                         % ((*i).speed.first/1024) 
    54                                 ).str().c_str());        
    55                          
    56                         m_list.SetItemText(itemPos, 2, 
    57                                 (wformat(L"%1$.2fKB/s")  
    58                                         % ((*i).speed.second/1024) 
    59                                 ).str().c_str());        
    60                          
    61                         if ((*i).seed) 
    62                                 m_list.SetItemText(itemPos, 3, L"Seed"); 
    63                          
    64                         m_list.SetItemText(itemPos, 4, (*i).client.c_str()); 
    65                          
    66                         m_list.SetItemText(itemPos, 5, (*i).status.c_str()); 
    67                 }                        
    68         } 
    69         else 
    70         { 
    71                 m_list.DeleteAllItems(); 
    72         } 
    73 } 
    74  
    75 #endif 
    769 
    7710void PeerListView::uiUpdate(const hal::TorrentDetails& tD) 
     
    15083LRESULT AdvPeerDialog::onInitDialog(HWND, LPARAM) 
    15184{        
    152         peerList_.Attach(GetDlgItem(IDC_PEERLIST)); 
     85        peerList_.SubclassWindow(GetDlgItem(IDC_PEERLIST)); 
    15386         
    15487        resizeClass::DlgResize_Init(false, true, WS_CLIPCHILDREN);       
  • src/advtabs/Peers.hpp

    r256 r258  
    8989        } 
    9090         
    91         void OnAttach() 
     91        bool SubclassWindow(HWND hwnd) 
    9292        { 
    93                 SetExtendedListViewStyle(WS_EX_CLIENTEDGE|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP); 
    94                 SetSortListViewExtendedStyle(SORTLV_USESHELLBITMAPS, SORTLV_USESHELLBITMAPS); 
    95                  
     93                if(!listClass::SubclassWindow(hwnd)) 
     94                        return false; 
     95                                         
    9696                ApplyDetails(); 
    9797                 
    9898                SetColumnSortType(2, LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedDown()); 
    9999                SetColumnSortType(3, LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedUp()); 
     100                 
     101                return true; 
    100102        } 
    101103         
     
    160162                MSG_WM_INITDIALOG(onInitDialog) 
    161163                MSG_WM_CLOSE(onClose) 
    162  
     164        //      MSG_WM_ERASEBKGND(OnEraseBkgnd) 
     165         
    163166                if (uMsg == WM_FORWARDMSG) 
    164167                        if (PreTranslateMessage((LPMSG)lParam)) return TRUE; 
     
    174177 
    175178        LRESULT onInitDialog(HWND, LPARAM); 
     179         
     180        LRESULT OnEraseBkgnd(HDC dc) 
     181        { 
     182                return 1; 
     183        } 
     184                 
    176185        void onClose(); 
    177186 
  • src/advtabs/ThemeTestDialog.hpp

    r148 r258  
    33 
    44#include "stdAfx.hpp" 
     5#include "../res/resource.h" 
    56#include "DdxEx.hpp" 
    67 
  • src/halEvent.hpp

    r255 r258  
    1010#include "halTorrent.hpp" 
    1111#include "global/string_conv.hpp" 
     12#include "../res/resource.h" 
    1213 
    1314namespace hal  
  • src/stdAfx.hpp

    r257 r258  
    1212#endif 
    1313 
    14 #define HALITE_GUID L"HALITE-{E3A8BF7D-962F-476E-886B-FECEDD2F0FC7_dev}" 
    15 #define WMU_ARE_YOU_ME_STRING  L"WMU_ARE_YOU_ME_HALITE-{E3A8BF7D-962F-476E-886B-FECEDD2F0FC7_dev}" 
     14#define HALITE_GUID L"HALITE-{E3A8BF7D-962F-476E-886B-FECEDD2F0FC7}" 
     15#define WMU_ARE_YOU_ME_STRING  L"WMU_ARE_YOU_ME_HALITE-{E3A8BF7D-962F-476E-886B-FECEDD2F0FC7}" 
    1616#define HALITE_SENDING_CMD 68816889 
    1717 
     
    4141 
    4242#include "global/wtl_app.hpp" 
    43  
    44 #include "..\res\resource.h" 
    4543 
    4644template<class T> 
Note: See TracChangeset for help on using the changeset viewer.