Changeset 720


Ignore:
Timestamp:
02/09/09 19:21:15 (10 years ago)
Author:
Eoin
Message:

Sorting messed up again,

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/res/Halite.rc

    r710 r720  
    625625FONT 8, "MS Shell Dlg", 400, 0, 0x1 
    626626BEGIN 
    627     CONTROL         "",HAL_PEERLIST,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,4,7,297,59 
     627    CONTROL         "",HAL_PEERLIST,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP | LVS_OWNERDATA,4,7,297,59 
    628628END 
    629629 
  • trunk/src/HaliteListView.cpp

    r718 r720  
    9292} 
    9393 
     94LRESULT HaliteListViewCtrl::OnGetDispInfo(int, LPNMHDR pnmh, BOOL&) 
     95{        
     96        hal::try_update_lock<listClass> lock(*this); 
     97        if (lock)  
     98        {        
     99 
     100        NMLVDISPINFO* pdi = (NMLVDISPINFO*)pnmh; 
     101        hal::torrent_details_ptr td = hal::bittorrent().torrentDetails().get(key_from_index(pdi->item.iItem)); 
     102 
     103        if (td && pdi->item.mask & LVIF_TEXT) 
     104        { 
     105                wstring str = td->to_wstring(pdi->item.iSubItem); 
     106                 
     107                size_t len = str.copy(pdi->item.pszText, min(pdi->item.cchTextMax - 1, static_cast<int>(str.size()))); 
     108                pdi->item.pszText[len] = '\0'; 
     109        } 
     110 
     111        } 
     112         
     113        return 0; 
     114} 
     115 
    94116void HaliteListViewCtrl::uiUpdate(const hal::torrent_details_manager& tD) 
    95117{ 
     
    117139        } 
    118140 
    119 //      if (IsGroupViewEnabled()) 
     141        if (queue_view_) 
    120142                sort(hal::torrent_details::managed_e, false); 
    121143 
    122144        bool sort_once = IsSortOnce(); 
    123145 
    124                         hal::win_c_str<std::wstring> str(MAX_PATH); 
    125                         GetItemText(4, 0, str, str.size()); 
    126                         HAL_DEV_MSG(hal::wform(L" >> set name %1%") % str.str()); 
     146        hal::win_c_str<std::wstring> str(MAX_PATH); 
     147        GetItemText(4, 0, str, str.size()); 
     148        HAL_DEV_MSG(hal::wform(L" >> set name %1%") % str.str()); 
    127149 
    128150        // Update details here. 
     
    160182                lvItem.mask |= LVIF_IMAGE; 
    161183                lvItem.iImage = 0; 
    162  
    163184                item_pos = InsertKeyItem(td->name(), &lvItem); 
    164185 
    165                 for (size_t i=1; i<NumberOfColumns_s; ++i) 
    166                 { 
    167                         SetItemText(item_pos, i, td->to_wstring(i).c_str()); 
    168                 } 
     186                InvalidateRect(NULL,true); 
    169187        } 
    170188 
  • trunk/src/HaliteListView.hpp

    r717 r720  
    7979 
    8080                REFLECTED_NOTIFY_CODE_HANDLER(SLVN_SORTCHANGED, OnSortChanged) 
     81                REFLECTED_NOTIFY_CODE_HANDLER(LVN_GETDISPINFO, OnGetDispInfo) 
    8182 
    82         CHAIN_MSG_MAP_ALT(ownDrawClass, 1) 
     83        CHAIN_MSG_MAP_ALT(ownDrawClass, 1) 
    8384                CHAIN_MSG_MAP(listClass) 
    8485                DEFAULT_REFLECTION_HANDLER() 
     
    107108        LRESULT OnAdjustQueuePosition(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); 
    108109        LRESULT OnQueueView(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); 
     110        LRESULT OnGetDispInfo(int, LPNMHDR pnmh, BOOL&); 
    109111        LRESULT OnSortChanged(int, LPNMHDR pnmh, BOOL&); 
    110112 
    111     friend class boost::serialization::access; 
    112     template<class Archive> 
    113     void serialize(Archive& ar, const unsigned int version) 
    114     { 
     113        friend class boost::serialization::access; 
     114        template<class Archive> 
     115        void serialize(Archive& ar, const unsigned int version) 
     116        { 
    115117                using boost::serialization::make_nvp; 
    116118 
     
    120122                 
    121123                ar & make_nvp("queue_view", queue_view_); 
    122     } 
     124        } 
    123125 
    124126        bool sort_list_comparison(std::wstring l,  std::wstring r, size_t index, bool ascending); 
  • trunk/src/HaliteSortListViewCtrl.hpp

    r718 r720  
    635635        typedef typename pair_container::index_iterator<by_key>::type key_iterator; 
    636636 
     637        int InsertKeyItem(DataType key) 
     638        { 
     639                LVITEM lvItem = { 0 }; 
     640                lvItem.mask = LVIF_STATE; 
     641                lvItem.stateMask = LVIS_SELECTED; 
     642                lvItem.state = 0; 
     643                lvItem.iSubItem = 0; 
     644 
     645                return InsertKeyItem(key, &lvItem); 
     646        } 
     647 
    637648        int InsertKeyItem(DataType key, LVITEM* pItem) 
    638649        { 
     
    645656                { 
    646657                        list_item_index = std::distance(pair_container_.begin(), i_pos); 
    647  
    648                          
    649                         HAL_DEV_MSG(hal::wform(L"Found, name %1%, list position: %2%.") % pItem->pszText % list_item_index); 
    650  
    651658                        pItem->iItem = list_item_index; 
    652659 
     
    661668                        hal::win_c_str<std::wstring> str(MAX_PATH); 
    662669                        GetItemText(4, 0, str, str.size()); 
    663                         HAL_DEV_MSG(hal::wform(L" >> set name %1%") % str.str()); 
    664670                } 
    665671                else 
     
    711717 
    712718                pair_container_.rearrange(sv.begin()); 
     719        } 
     720 
     721        DataType key_from_index(size_t index) 
     722        { 
     723                list_pair_t pi = pair_container_[index]; 
     724 
     725                return pi.second; 
    713726        } 
    714727 
  • trunk/src/HaliteWindow.cpp

    r719 r720  
    117117        // Create ListView and Dialog 
    118118        haliteList.Create(m_Split.m_hWnd, rc, NULL,  
    119                 LVS_REPORT|WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|LVS_SHOWSELALWAYS); 
     119                LVS_REPORT|WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|LVS_SHOWSELALWAYS|LVS_OWNERDATA); 
    120120//      haliteList.manager().attach(bind(&HaliteWindow::issueUiUpdate, this)); 
    121121 
     
    302302        try 
    303303        { 
    304                 std::set<wstring> s; 
    305  
    306                 foreach(const HaliteListViewCtrl::listClass::list_value_type val, std::make_pair(haliteList.is_selected_begin(), haliteList.is_selected_end())) 
     304        std::set<wstring> s; 
     305 
     306        foreach(const HaliteListViewCtrl::listClass::list_value_type val, std::make_pair(haliteList.is_selected_begin(), haliteList.is_selected_end())) 
    307307        { 
    308308                s.insert(val.text().c_str()); 
     
    530530 
    531531        NewTorrentDialog newTorrent(title.c_str());      
    532     newTorrent.DoModal(); 
     532        newTorrent.DoModal(); 
    533533         
    534534        return 0; 
     
    538538{ 
    539539        ConfigOptionsProp sheet(this, L"Settings");      
    540     sheet.DoModal(); 
     540        sheet.DoModal(); 
    541541         
    542542        hal::config().settingsChanged(); 
     
    565565{ 
    566566        ConfigOptionsProp sheet(this, L"Settings", 4);   
    567     sheet.DoModal(); 
     567        sheet.DoModal(); 
    568568         
    569569        hal::config().settingsChanged(); 
     
    580580 
    581581LRESULT HaliteWindow::OnAutoShutdown(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) 
    582 { 
    583          
     582{        
    584583        return 0; 
    585584} 
  • trunk/src/advtabs/Peers.cpp

    r710 r720  
    1313#include "Peers.hpp" 
    1414 
     15bool PeerListView::sort_list_comparison(size_t l, size_t r, size_t index, bool ascending) 
     16{ 
     17        hal::try_update_lock<listClass> lock(*this); 
     18 
     19        return hal::hal_details_compare( 
     20                peer_details_[l], peer_details_[r], index, ascending); 
     21} 
     22 
     23 
     24LRESULT PeerListView::OnGetDispInfo(int, LPNMHDR pnmh, BOOL&) 
     25{        
     26        hal::try_update_lock<listClass> lock(*this); 
     27        if (lock)  
     28        {        
     29 
     30        NMLVDISPINFO* pdi = (NMLVDISPINFO*)pnmh; 
     31        hal::peer_detail& pd = peer_details_[pdi->item.iItem]; 
     32 
     33        if (pdi->item.mask & LVIF_TEXT) 
     34        { 
     35                wstring str = pd.to_wstring(pdi->item.iSubItem); 
     36                 
     37                size_t len = str.copy(pdi->item.pszText, min(pdi->item.cchTextMax - 1, static_cast<int>(str.size()))); 
     38                pdi->item.pszText[len] = '\0'; 
     39        } 
     40 
     41        } 
     42         
     43        return 0; 
     44} 
     45 
    1546void PeerListView::uiUpdate(const hal::torrent_details_manager& tD) 
    1647{ 
     
    2657                } 
    2758                 
    28                 std::sort(peer_details_.begin(), peer_details_.end()); 
     59/*              std::sort(peer_details_.begin(), peer_details_.end()); 
    2960                 
    3061                // Wipe details not present 
    31                 for(int i = 0; i < GetItemCount(); /*nothing here*/) 
     62                for(int i = 0; i < GetItemCount(); ) 
    3263                { 
    3364                        boost::array<wchar_t, MAX_PATH> ip_address; 
     
    4879                        } 
    4980                } 
    50                          
     81*/                       
    5182                int col_sort_index = GetSortColumn(); 
    5283 
    5384                if (col_sort_index != -1) 
    5485                {                
     86                        if (GetSecondarySortColumn() != -1) 
     87                        { 
     88                                int index = GetColumnSortType(GetSecondarySortColumn()); 
     89                                 
     90                                if (index > WTL::LVCOLSORT_LAST) 
     91                                        sort(index - (WTL::LVCOLSORT_LAST+1+hal::peer_detail::ip_address_e), IsSecondarySortDescending()); 
     92                        } 
     93 
    5594                        int index = GetColumnSortType(col_sort_index); 
    5695                         
    57                         HAL_DEV_SORT_MSG(hal::wform(L"col_sort_index() = %1%, index() = %2%")  
    58                                 % col_sort_index % index); 
    59  
    6096                        if (index > WTL::LVCOLSORT_LAST) 
    61                                 hal::peer_details_sort(peer_details_, index - (WTL::LVCOLSORT_LAST+1+hal::peer_detail::ip_address_e),  
    62                                         IsSortDescending()); 
     97                                sort(index - (WTL::LVCOLSORT_LAST+1+hal::peer_detail::ip_address_e), IsSortDescending()); 
    6398                } 
    6499 
    65100                bool sort_once = IsSortOnce(); 
     101                 
     102                SetItemCountEx(peer_details_.size(), LVSICF_NOSCROLL); 
     103                InvalidateRect(NULL,true); 
     104 
     105                return; 
    66106 
    67107                // Add additional details        
     
    89129                         
    90130                        HAL_DEV_SORT_MSG(hal::wform(L"item_pos = %1%") % item_pos); 
     131                        item_pos = InsertKeyItem(index); 
    91132 
    92                         SetItemData(item_pos, index);                    
     133                        InvalidateRect(NULL,true); 
     134 
     135        /*              SetItemData(item_pos, index);                    
    93136 
    94137                        for (size_t i = 0; i < 7; ++i) 
    95138                        { 
    96139                                SetItemText(item_pos, i, pd.to_wstring(i).c_str()); 
    97                         } 
     140                        }*/ 
    98141                } 
    99142                 
    100                 if (AutoSort() && col_sort_index >= 0 && col_sort_index < m_arrColSortType.GetSize()) 
     143        /*      if (AutoSort() && col_sort_index >= 0 && col_sort_index < m_arrColSortType.GetSize()) 
    101144                { 
    102145                        if (GetColumnSortType(col_sort_index) <= WTL::LVCOLSORT_CUSTOM) 
    103146                                DoSortItems(col_sort_index, IsSortDescending()); 
    104                 } 
     147                }*/ 
    105148        } 
    106149} 
  • trunk/src/advtabs/Peers.hpp

    r710 r720  
    1818 
    1919class PeerListView : 
    20         public CHaliteSortListViewCtrl<PeerListView>, 
     20        public CHaliteSortListViewCtrl<PeerListView, size_t>, 
    2121        public hal::IniBase<PeerListView>, 
    2222        private boost::noncopyable 
     
    2525        typedef PeerListView thisClass; 
    2626        typedef hal::IniBase<thisClass> iniClass; 
    27         typedef CHaliteSortListViewCtrl<thisClass> listClass; 
     27        typedef CHaliteSortListViewCtrl<thisClass, size_t> listClass; 
    2828 
    2929        friend class listClass; 
     
    3838        BEGIN_MSG_MAP_EX(thisClass) 
    3939                MSG_WM_DESTROY(OnDestroy) 
     40 
    4041                REFLECTED_NOTIFY_CODE_HANDLER(SLVN_SORTCHANGED, OnSortChanged) 
     42                REFLECTED_NOTIFY_CODE_HANDLER(LVN_GETDISPINFO, OnGetDispInfo) 
    4143 
    4244                CHAIN_MSG_MAP(listClass) 
     
    7880                                         
    7981                load_from_ini();                 
    80                  
    81                 SetColumnSortType(2, hal::peer_detail::speed_down_e + (WTL::LVCOLSORT_LAST+1+hal::peer_detail::ip_address_e), NULL);             
    82                 SetColumnSortType(3, hal::peer_detail::speed_up_e + (WTL::LVCOLSORT_LAST+1+hal::peer_detail::ip_address_e), NULL); 
     82 
     83        for (unsigned i=0, e = hal::peer_detail::status_e-hal::peer_detail::ip_address_e; i <= e; ++i) 
     84                SetColumnSortType(i, i + (WTL::LVCOLSORT_LAST+1+hal::peer_detail::ip_address_e), NULL);          
     85 
     86        //      SetColumnSortType(2, hal::peer_detail::speed_down_e + (WTL::LVCOLSORT_LAST+1+hal::peer_detail::ip_address_e), NULL);             
     87        //      SetColumnSortType(3, hal::peer_detail::speed_up_e + (WTL::LVCOLSORT_LAST+1+hal::peer_detail::ip_address_e), NULL); 
    8388                 
    8489                return true; 
     
    9095        } 
    9196 
     97        LRESULT OnGetDispInfo(int, LPNMHDR pnmh, BOOL&); 
    9298        LRESULT OnSortChanged(int, LPNMHDR pnmh, BOOL&); 
     99 
     100        bool sort_list_comparison(size_t l,  size_t r, size_t index, bool ascending); 
    93101         
    94102        friend class boost::serialization::access; 
Note: See TracChangeset for help on using the changeset viewer.