Changeset 723


Ignore:
Timestamp:
02/18/09 17:28:44 (10 years ago)
Author:
Eoin
Message:
 
Location:
trunk/src
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/HaliteDialog.cpp

    r717 r723  
    162162        if (lock)  
    163163        {                
     164#if 0 
    164165                peer_details_ = tD.focusedTorrent()->get_peer_details(); 
    165166                 
     
    214215                 
    215216//              ConditionallyDoAutoSort(); 
     217#endif 
    216218        } 
    217219} 
  • trunk/src/HaliteListView.cpp

    r721 r723  
    148148        HAL_DEV_MSG(hal::wform(L" >> set name %1%") % str.str()); 
    149149 
    150         selection_from_listview(); 
     150        //selection_from_listview(); 
    151151         
    152152        // Update details here. 
  • trunk/src/HaliteSortListViewCtrl.hpp

    r722 r723  
    658658        } 
    659659 
     660        template<typename T> 
     661        void set_keys(T s) 
     662        { 
     663                foreach (const DataType& key, s) 
     664                { 
     665                        set_key(key); 
     666                } 
     667        } 
     668 
    660669        int set_key_item(DataType key, LVITEM* pItem) 
    661670        { 
     671                ATLASSERT(::IsWindow(m_hWnd)); 
     672 
    662673                key_iterator i = pair_container_.get<by_key>().find(key); 
    663                 pair_container::iterator i_pos = pair_container_.project<0>(i); 
    664  
    665                 int list_item_index = -1; 
    666  
    667                 if (i != pair_container_.get<by_key>().end()) 
    668                 { 
    669                         list_item_index = std::distance(pair_container_.begin(), i_pos); 
    670                         pItem->iItem = list_item_index; 
    671  
    672                         HAL_DEV_SORT_MSG(hal::wform(L" index %1%, selected %2%") % list_item_index % (*i).first); 
     674                boost::optional<size_t> index = index_from_key(key); 
     675 
     676                if (index) 
     677                { 
     678                        HAL_DEV_MSG(hal::wform(L"Existing index %1%, key %3%, selected %2%") % *index % (*i).first % key); 
    673679 
    674680                        if ((*i).first) 
    675                         { 
    676                                 SetItemState(list_item_index, LVIS_SELECTED, LVIS_SELECTED); 
    677                         //      pItem->stateMask |= LVIS_SELECTED; 
    678                         //      pItem->state |= LVIS_SELECTED; 
    679                         } 
     681                                SetItemState(*index, LVIS_SELECTED, LVIS_SELECTED); 
    680682                        else 
    681                                 SetItemState(list_item_index, 0, LVIS_SELECTED); 
     683                                SetItemState(*index, 0, LVIS_SELECTED); 
     684 
     685                        return *index; 
    682686                } 
    683687                else 
    684688                { 
    685                         list_item_index = pair_container_.size(); 
     689                        int list_item_index = pair_container_.size(); 
    686690 
    687691                        bool selected = (pItem->stateMask & LVIS_SELECTED) && (pItem->state & LVIS_SELECTED); 
     
    692696                        SetItemCountEx(pair_container_.size(), LVSICF_NOSCROLL); 
    693697                        SetItemState(list_item_index, 0, LVIS_SELECTED); 
    694                 } 
    695  
    696                 ATLASSERT(::IsWindow(m_hWnd)); 
    697                 return list_item_index; 
     698 
     699                        HAL_DEV_MSG(hal::wform(L"New index %1%, key %3%, selected %2%") % list_item_index % false % key); 
     700 
     701                        return list_item_index; 
     702                } 
    698703        } 
    699704 
     
    717722 
    718723                         
    719                         HAL_DEV_SORT_MSG(hal::wform(L" Name %1%, index %2%, selected %3%") % val.text() % val.index() % i_pos.first); 
    720                 } 
    721                  
    722                 HAL_DEV_SORT_MSG(hal::wform(L" -----")); 
     724                        HAL_DEV_MSG(hal::wform(L" Name %1%, index %2%, selected %3%") % val.text() % val.index() % i_pos.first); 
     725                } 
     726                 
     727                HAL_DEV_MSG(hal::wform(L" -----")); 
    723728        } 
    724729 
     
    750755                { 
    751756                        pair_container::iterator i_pos = pair_container_.project<0>(i);  
    752                         return = std::distance(pair_container_.begin(), i_pos); 
     757                        return std::distance(pair_container_.begin(), i_pos); 
    753758                } 
    754759                else 
     
    779784        } 
    780785 
    781         void erase_not_within_set(std::set<DataType> s) 
    782         { 
    783                 for (pair_container::iterator i=pair_container_.begin(), e = pair_container_.end(); i!=e; ++i) 
    784                 { 
    785                         if (s.find((*i).second) == s.end()) 
    786                                 erase_from_list((*i).second); 
     786        void erase_based_on_set(std::set<DataType> s, bool within=true) 
     787        { 
     788                for (pair_container::iterator i=pair_container_.begin(), e=pair_container_.end(); i!=e; /**/) 
     789                {                        
     790                        HAL_DEV_SORT_MSG(hal::wform(L" Checking %1%,") % (*i).second); 
     791 
     792                        if ((s.find((*i).second) != s.end()) ^ within) 
     793                        {                                
     794                                HAL_DEV_SORT_MSG(hal::wform(L" Erasing,")); 
     795                                 
     796                                DeleteItem(std::distance(pair_container_.begin(), i)); 
     797                                i  = pair_container_.erase(i); 
     798                        } 
     799                        else 
     800                        { 
     801                                ++i; 
     802                        } 
    787803                } 
    788804        } 
  • trunk/src/advtabs/Peers.cpp

    r722 r723  
    1515bool PeerListView::sort_list_comparison(std::wstring l, std::wstring r, size_t index, bool ascending) 
    1616{ 
    17 /*      hal::try_update_lock<listClass> lock(*this); 
     17        hal::peer_details_vec::optional_type pdl = peer_details_.find_peer(l); 
     18        hal::peer_details_vec::optional_type pdr = peer_details_.find_peer(r); 
    1819 
    19         return hal::hal_details_compare( 
    20                 peer_details_[l], peer_details_[r], index, ascending); 
    21                 */ 
    22         return true; 
     20        if (pdl && pdr)  
     21                return hal::hal_details_ptr_compare(pdl, pdr, index, ascending); 
     22        else 
     23                return false; 
    2324} 
    2425 
     
    2829        NMLVDISPINFO* pdi = (NMLVDISPINFO*)pnmh; 
    2930 
    30         HAL_DEV_MSG(hal::wform(L"OnGetDispInfo index = %1% size = %2%") % pdi->item.iItem % peer_details_.size()); 
     31//      HAL_DEV_MSG(hal::wform(L"OnGetDispInfo index = %1% size = %2%") % pdi->item.iItem % peer_details_.size()); 
    3132 
    3233        hal::try_update_lock<listClass> lock(*this); 
     
    3435        {        
    3536 
    36         hal::peer_detail& pd = peer_details_[pdi->item.iItem]; 
     37        hal::peer_details_vec::optional_type pd = peer_details_.find_peer(key_from_index(pdi->item.iItem)); 
    3738 
    38         if (pdi->item.mask & LVIF_TEXT) 
     39        if (pd && pdi->item.mask & LVIF_TEXT) 
    3940        { 
    40                 wstring str = pd.to_wstring(pdi->item.iSubItem); 
     41                wstring str = pd->to_wstring(pdi->item.iSubItem); 
    4142                 
    4243                size_t len = str.copy(pdi->item.pszText, min(pdi->item.cchTextMax - 1, static_cast<int>(str.size()))); 
     
    5455        if (lock)  
    5556        {                
     57                selection_from_listview(); 
     58                 
    5659                peer_details_.clear(); 
    5760                 
     
    5962                { 
    6063                        std::copy(torrent->get_peer_details().begin(), torrent->get_peer_details().end(),  
    61                                 std::back_inserter(peer_details_)); 
     64                                std::inserter(peer_details_, peer_details_.begin())); 
    6265                } 
    6366                 
    64 /*              std::sort(peer_details_.begin(), peer_details_.end()); 
     67                std::set<std::wstring> ip_set; 
     68                foreach (hal::peer_detail& pd,  peer_details_) 
     69                        ip_set.insert(pd.ip_address); 
    6570                 
    66                 // Wipe details not present 
    67                 for(int i = 0; i < GetItemCount(); ) 
    68                 { 
    69                         boost::array<wchar_t, MAX_PATH> ip_address; 
    70                         GetItemText(i, 0, ip_address.c_array(), MAX_PATH); 
    71                          
    72                         hal::peer_detail ip(ip_address.data()); 
    73                         hal::peer_details_vec::iterator iter =  
    74                                 std::lower_bound(peer_details_.begin(), peer_details_.end(), ip); 
    75                          
    76                         if (iter == peer_details_.end() || !((*iter) == ip)) 
    77                         { 
    78                                 DeleteItem(i); 
    79                         } 
    80                         else 
    81                         { 
    82                                 SetItemData(i, std::distance(peer_details_.begin(), iter)); 
    83                                 ++i; 
    84                         } 
    85                 } 
    86 */                       
     71                erase_based_on_set(ip_set, true); 
     72 
    8773                int col_sort_index = GetSortColumn(); 
    8874 
     
    10591                bool sort_once = IsSortOnce(); 
    10692                 
     93                set_keys(ip_set); 
     94                 
    10795        //      SetItemCountEx(peer_details_.size(), LVSICF_NOSCROLL); 
    108         //      InvalidateRect(NULL,true); 
     96                InvalidateRect(NULL,true); 
    10997 
    110         //      return; 
    111                 erase_all_from_list(); 
    11298 
    113                 // Add additional details        
    114                 for (size_t index = 0, e = peer_details_.size(); index < e; ++index) 
    115                 { 
    116                         hal::peer_detail& pd = peer_details_[index]; 
    117                  
    118                         int item_pos = index; 
    119                  
    120                         HAL_DEV_SORT_MSG(hal::wform(L"AutoSort() = %1%, SortOnce() = %2%, !AutoSort() && !SortOnce() = %3%")  
    121                                 % AutoSort() % sort_once % (!AutoSort() && !sort_once)); 
    122  
    123         /*              if (!AutoSort() && !sort_once) 
    124                         { 
    125                                 LV_FINDINFO findInfo;  
    126                                 findInfo.flags = LVFI_STRING; 
    127                                 findInfo.psz = const_cast<LPTSTR>(pd.to_wstring(hal::peer_detail::ip_address_e).c_str()); 
    128                                  
    129                                 item_pos = FindItem(&findInfo, -1); 
    130                         } 
    131  
    132                         if (item_pos == -1 || item_pos > GetItemCount()) 
    133                                 item_pos = AddItem(GetItemCount(), 0, pd.to_wstring(hal::peer_detail::ip_address_e).c_str(), 0); 
    134                          
    135         */               
    136                         HAL_DEV_SORT_MSG(hal::wform(L"item_pos = %1%") % item_pos); 
    137                         item_pos = set_key(pd.ip_address); 
    138  
    139                         InvalidateRect(NULL, true); 
    140  
    141         /*              SetItemData(item_pos, index);                    
    142  
    143                         for (size_t i = 0; i < 7; ++i) 
    144                         { 
    145                                 SetItemText(item_pos, i, pd.to_wstring(i).c_str()); 
    146                         }*/ 
    147                 } 
    148                  
    14999        /*      if (AutoSort() && col_sort_index >= 0 && col_sort_index < m_arrColSortType.GetSize()) 
    150100                { 
  • trunk/src/advtabs/Peers.hpp

    r722 r723  
    8181                load_from_ini();                 
    8282 
    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);          
     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);          
    8585 
    8686        //      SetColumnSortType(2, hal::peer_detail::speed_down_e + (WTL::LVCOLSORT_LAST+1+hal::peer_detail::ip_address_e), NULL);             
  • trunk/src/halPeers.cpp

    r710 r723  
    101101} 
    102102 
    103 std::wstring peer_detail::to_wstring(size_t index) 
     103std::wstring peer_detail::to_wstring(size_t index) const 
    104104{ 
    105105        switch (index) 
     
    119119} 
    120120 
     121/* 
    121122void peer_details_sort(peer_details_vec& p, size_t index, bool cmp_less) 
    122123{ 
     
    124125                bind(&hal_details_compare<const peer_detail&>, _1, _2, index, cmp_less)); 
    125126} 
    126  
     127*/ 
    127128}; 
  • trunk/src/halPeers.hpp

    r710 r723  
    4949         
    5050        bool less(const peer_detail& r, size_t index = 0) const; 
    51         std::wstring to_wstring(size_t index = 0); 
     51        std::wstring to_wstring(size_t index = 0) const; 
    5252         
    5353        std::wstring ip_address; 
     
    5959}; 
    6060 
    61 typedef boost::shared_ptr<peer_detail> peer_detail_ptr; 
    62 typedef std::vector<peer_detail> peer_details_vec; 
     61class peer_details_vec : public std::set<peer_detail> 
     62{ 
     63public: 
     64        typedef boost::optional<const peer_detail&> optional_type; 
    6365 
    64 void peer_details_sort(peer_details_vec& p, size_t index, bool cmp_less = true); 
     66        optional_type find_peer(const std::wstring& ip_address) 
     67        { 
     68                return find_peer(peer_detail(ip_address)); 
     69        } 
     70 
     71        optional_type find_peer(const peer_detail& pd) 
     72        { 
     73                std::set<peer_detail>::const_iterator i = find(pd); 
     74 
     75                if (i != end()) 
     76                        return optional_type(*i); 
     77                else 
     78                        return optional_type(); 
     79        } 
     80 
     81private: 
     82        //std::set<peer_detail> details_; 
     83}; 
     84 
     85//void peer_details_sort(peer_details_vec& p, size_t index, bool cmp_less = true); 
    6586 
    6687}; 
  • trunk/src/halTorrentInternal.hpp

    r706 r723  
    748748                        foreach (libt::peer_info peer, peers_)  
    749749                        { 
    750                                 peer_details.push_back(peer); 
     750                                peer_details.insert(peer); 
    751751                        }        
    752752                } 
Note: See TracChangeset for help on using the changeset viewer.