Changeset 656 for trunk


Ignore:
Timestamp:
12/25/08 18:33:41 (11 years ago)
Author:
Eoin
Message:

Halite ListView? sorting fully working. Clean up to follow.

Location:
trunk/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/HaliteListView.cpp

    r654 r656  
    5050 
    5151        SafeLoadFromIni(); 
    52          
    53         SetColumnSortType(0, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::Name()); 
    54         SetColumnSortType(1, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::State()); 
    55         SetColumnSortType(2, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::Progress()); 
    56         SetColumnSortType(3, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedDown()); 
    57         SetColumnSortType(4, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedUp()); 
    58         SetColumnSortType(5, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::Peers()); 
    59         SetColumnSortType(6, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::Seeds()); 
    60         SetColumnSortType(7, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::ETA()); 
    61         SetColumnSortType(8, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::DistributedCopies()); 
    62         SetColumnSortType(9, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::Tracker()); 
    63         SetColumnSortType(10, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::UpdateTrackerIn()); 
    64         SetColumnSortType(11, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::Ratio()); 
    65         SetColumnSortType(12, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::TotalWanted()); 
    66         SetColumnSortType(13, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::Completed()); 
    67         SetColumnSortType(14, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::Remaining()); 
    68         SetColumnSortType(15, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::Downloaded()); 
    69         SetColumnSortType(16, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::Uploaded()); 
    70         SetColumnSortType(17, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::ActiveTime()); 
    71         SetColumnSortType(18, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::SeedingTime()); 
    72         SetColumnSortType(19, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::StartTime()); 
    73         SetColumnSortType(20, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::FinishTime()); 
    74         SetColumnSortType(21, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::Managed()); 
    75         SetColumnSortType(22, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::QueuePosition()); 
    76  
     52 
     53        for (unsigned i=0, e = hal::torrent_details::queue_position_e-hal::torrent_details::name_e; i <= e; ++i) 
     54                SetColumnSortType(i, i + (WTL::LVCOLSORT_LAST+1+hal::torrent_details::name_e), NULL); 
     55         
    7756        queue_view_mode(); 
    78          
    79 /*      int item_pos = AddItem(0, 0, L"Unmanaged", 0); 
    80         SetItemData(item_pos, HAL_CUSTOMDRAW_TITLEDATA); 
    81                          
    82         item_pos = AddItem(0, 0, L"Downloading", 0); 
    83         SetItemData(item_pos, HAL_CUSTOMDRAW_TITLEDATA); 
    84                          
    85         item_pos = AddItem(0, 0, L"Seeding", 0); 
    86         SetItemData(item_pos, HAL_CUSTOMDRAW_TITLEDATA);*/ 
    8757} 
    8858 
     
    12696        if (lock)  
    12797        { 
    128  
    129                 tD.sort(hal::torrent_details::peers_e); 
     98                 
     99                int iCol = GetSortColumn(); 
     100                //HAL_DEV_MSG(hal::wform(L"GetSortColumn with: %1%") % iCol); 
     101 
     102                if (iCol != -1) 
     103                { 
     104                         
     105                        int index = GetColumnSortType(iCol); 
     106                         
     107                        if (index > WTL::LVCOLSORT_LAST) 
     108                        { 
     109                        HAL_DEV_MSG(hal::wform(L"Sorting with: %1%, %2%") % index % (index - (WTL::LVCOLSORT_LAST+1+hal::torrent_details::name_e)) ); 
     110                        tD.sort(index - (WTL::LVCOLSORT_LAST+1+hal::torrent_details::name_e), IsSortDescending()); 
     111                        } 
     112                } 
    130113 
    131114                if (IsGroupViewEnabled()) 
     
    205188} 
    206189 
    207 void HaliteListViewCtrl::SortByColumn(size_t column_index) 
    208 { 
    209         //std::sort(data_elements_.begin(), data_elements_.end(),  
    210         //      ); 
    211          
     190bool HaliteListViewCtrl::DoSortItems(int iCol, bool bDescending) 
     191{        
     192        HAL_DEV_MSG(hal::wform(L"DoSortItems(int iCol = %1%, bool bDescending = %2%) - issuing update!") % iCol % bDescending); 
     193 
     194        halWindow_.issueUiUpdate(); 
     195 
     196        return true; 
     197} 
     198 
     199LRESULT HaliteListViewCtrl::OnSortChanged(int, LPNMHDR pnmh, BOOL&) 
     200{                
     201        halWindow_.issueUiUpdate(); 
     202         
     203        return 0; 
    212204} 
    213205 
  • trunk/src/HaliteListView.hpp

    r654 r656  
    400400                COMMAND_ID_HANDLER(HAL_LVM_QUEUE_VIEW, OnQueueView) 
    401401 
     402                REFLECTED_NOTIFY_CODE_HANDLER(SLVN_SORTCHANGED, OnSortChanged) 
     403 
    402404        CHAIN_MSG_MAP_ALT(ownDrawClass, 1) 
    403405                CHAIN_MSG_MAP(listClass) 
     
    429431 
    430432        void queue_view_mode(); 
     433        bool DoSortItems(int iCol, bool bDescending = false); 
    431434 
    432435    friend class boost::serialization::access; 
     
    443446    } 
    444447 
    445         void SortByColumn(size_t column_index); 
    446  
    447448/*      tD CustomItemConversion(LVCompareParam* param, int iSortCol); 
    448449 
     
    456457                return CustomItemComparision(left, right, iSortCol); 
    457458        }*/ 
     459 
     460        LRESULT OnSortChanged(int, LPNMHDR pnmh, BOOL&); 
    458461 
    459462private: 
  • trunk/src/HaliteSortListViewCtrl.hpp

    r655 r656  
    287287        { 
    288288                SetExtendedListViewStyle(LVS_EX_HEADERDRAGDROP|LVS_EX_DOUBLEBUFFER); 
    289 //              SetSortListViewExtendedStyle(SORTLV_USESHELLBITMAPS,SORTLV_USESHELLBITMAPS); 
     289                SetSortListViewExtendedStyle(SORTLV_USESHELLBITMAPS,SORTLV_USESHELLBITMAPS); 
    290290 
    291291                MENUITEMINFO minfo = {sizeof(MENUITEMINFO)}; 
     
    403403        } 
    404404 
     405/*      LRESULT OnSortChanged(int, LPNMHDR pnmh, BOOL&) 
     406        {                
     407                hal::try_update_lock<thisClass> lock(*this); 
     408                 
     409                if (lock) manager_.sync_list(true, true); 
     410                 
     411                return 0; 
     412        } 
     413*/ 
    405414        LRESULT OnRClick(int i, LPNMHDR pnmh, BOOL&) 
    406415        { 
     
    431440        { 
    432441                /* Overwriteable */ 
     442        } 
     443 
     444        bool DoSortItems(int iCol, bool bDescending = false) 
     445        { 
     446                return true; 
    433447        } 
    434448 
     
    482496        void SetColumnSortType(int iCol, WORD wType, ColumnAdapter* colAdapter=NULL) 
    483497        { 
    484 //              parentClass::SetColumnSortType(iCol, wType); 
     498                listClass::SetColumnSortType(iCol, wType); 
    485499                 
    486500                if (WTL::LVCOLSORT_CUSTOM == wType) 
  • trunk/src/WTLx/ListViewSortMixin.hpp

    r655 r656  
    1717 
    1818template<typename T> 
    19 class ListViewSortMixin 
     19class ListViewSortMixin : public WTL::CSortListViewImpl<T> 
    2020{ 
    2121protected: 
    2222         
    2323        // Column sort types. Can be set on a per-column basis with the SetColumnSortType method. 
    24         enum 
     24/*      enum 
    2525        { 
    2626                LVCOLSORT_NONE, 
     
    4848                m_nShellSortUpID = 133 
    4949        };       
    50  
    51         BEGIN_MSG_MAP(CSortListViewImpl) 
    52                 MESSAGE_HANDLER(LVM_INSERTCOLUMN, OnInsertColumn) 
    53                 MESSAGE_HANDLER(LVM_DELETECOLUMN, OnDeleteColumn) 
     50*/ 
     51        BEGIN_MSG_MAP(ListViewSortMixin) 
     52                MESSAGE_HANDLER(LVM_INSERTCOLUMN, WTL::CSortListViewImpl<T>::OnInsertColumn) 
     53                MESSAGE_HANDLER(LVM_DELETECOLUMN, WTL::CSortListViewImpl<T>::OnDeleteColumn) 
    5454                NOTIFY_CODE_HANDLER(HDN_ITEMCLICKA, OnHeaderItemClick) 
    5555                NOTIFY_CODE_HANDLER(HDN_ITEMCLICKW, OnHeaderItemClick) 
    56                 MESSAGE_HANDLER(WM_SETTINGCHANGE, OnSettingChange) 
     56                MESSAGE_HANDLER(WM_SETTINGCHANGE, WTL::CSortListViewImpl<T>::OnSettingChange) 
    5757        END_MSG_MAP() 
    5858 
    59         LRESULT OnInsertColumn(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)      
     59/*      LRESULT OnInsertColumn(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& )  
    6060        { 
    6161                T* pT = static_cast<T*>(this); 
     
    7171                for(int i = nCount - 1; i > lRet; i--) 
    7272                        m_arrColSortType[i] = m_arrColSortType[i - 1]; 
    73                 m_arrColSortType[(int)lRet] = 0; 
     73                m_arrColSortType[(int)lRet] = LVCOLSORT_TEXT; 
    7474 
    7575                if(lRet <= m_iSortColumn) 
     
    7979        } 
    8080 
    81         LRESULT OnDeleteColumn(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)      
     81        LRESULT OnDeleteColumn(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& 
    8282        { 
    8383                T* pT = static_cast<T*>(this); 
     
    9696        } 
    9797 
    98         LRESULT OnSettingChange(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled) 
     98        LRESULT OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) 
    9999        { 
    100100#ifndef _WIN32_WCE 
     
    119119                } 
    120120        } 
    121  
     121*/ 
    122122        DWORD SetListViewSortMixinExtendedStyle(DWORD dwExtendedStyle, DWORD dwMask = 0) 
    123123        { 
     
    130130        } 
    131131 
    132         int GetColumnCount() const 
     132        DWORD GetListViewSortMixibExtendedStyle() const 
     133        { 
     134                return m_dwSortLVExtendedStyle; 
     135        } 
     136         
     137 
     138        void SetColumnSortType(int iCol, WORD wType) 
     139        { 
     140                HAL_DEV_MSG(hal::wform(L"SetColumnSortType(int iCol = %1%, WORD wType = %2%)") % iCol % wType); 
     141 
     142                ATLASSERT(iCol >= 0 && iCol < m_arrColSortType.GetSize()); 
     143                ATLASSERT(wType >= WTL::LVCOLSORT_NONE); 
     144                m_arrColSortType[iCol] = wType;          
     145        } 
     146 
     147/*      int GetColumnCount() const 
    133148        { 
    134149                const T* pT = static_cast<const T*>(this); 
     
    137152                return header.m_hWnd != NULL ? header.GetItemCount() : 0; 
    138153        } 
    139          
    140         LRESULT OnHeaderItemClick(int /*idCtrl*/, LPNMHDR pnmh, BOOL& bHandled) 
    141         { 
     154        */ 
     155        LRESULT OnHeaderItemClick(int idCtrl, LPNMHDR pnmh, BOOL& bHandled) 
     156        {                
     157                HAL_DEV_MSG(hal::wform(L"OnHeaderItemClick(int idCtrl = %1%, LPNMHDR pnmh, BOOL& bHandled)") % idCtrl); 
     158 
    142159                LPNMHEADER p = (LPNMHEADER)pnmh; 
    143160                if(p->iButton == 0) 
     
    146163                        bool bDescending = (m_iSortColumn == p->iItem) ? !m_bSortDescending : false; 
    147164 
    148                         DoSortItems(p->iItem, bDescending); 
    149  
    150 //                      if (DoSortItems(p->iItem, bDescending)) 
    151 //                              NotifyParentSortChanged(p->iItem, iOld); 
     165                        if (DoSortItems(p->iItem, bDescending)) 
     166                                NotifyParentSortChanged(p->iItem, iOld); 
    152167                } 
    153168                bHandled = FALSE; 
     
    158173        bool DoSortItems(int iCol, bool bDescending = false) 
    159174        { 
     175                HAL_DEV_MSG(hal::wform(L"DoSortItems(int iCol = %1%, bool bDescending = %2%)") % iCol % bDescending); 
     176 
    160177                T* pT = static_cast<T*>(this); 
    161178                ATLASSERT(::IsWindow(pT->m_hWnd)); 
     
    163180 
    164181                WORD wType = m_arrColSortType[iCol]; 
    165                 if(wType == -1) 
     182                if(wType == WTL::LVCOLSORT_NONE) 
    166183                        return false; 
     184                else if (wType <= WTL::LVCOLSORT_LAST) 
     185                { 
     186                        HAL_DEV_MSG(hal::wform(L"wType = %1%, passing DoSort() to base class") % wType); 
     187                        return WTL::CSortListViewImpl<T>::DoSortItems(iCol, bDescending); 
     188                } 
    167189 
    168190                int nCount = pT->GetItemCount(); 
     
    178200                        waitCursor.Set(); 
    179201 
    180                 bool bRet = true; 
     202                bool bRet = pT->DoSortItems(iCol, bDescending); 
    181203 
    182204                if(bRet) 
     
    191213                return bRet; 
    192214        } 
    193  
     215/* 
    194216        void SetSortColumn(int iCol) 
    195217        { 
     
    345367        } 
    346368 
     369        int GetSortColumn() const 
     370        { 
     371                return m_iSortColumn; 
     372        } 
     373 
     374        void SetColumnSortType(int iCol, WORD wType) 
     375        { 
     376                ATLASSERT(iCol >= 0 && iCol < m_arrColSortType.GetSize()); 
     377                ATLASSERT(wType >= LVCOLSORT_NONE && wType <= LVCOLSORT_LAST); 
     378                m_arrColSortType[iCol] = wType; 
     379        } 
     380 
     381        WORD GetColumnSortType(int iCol) const 
     382        { 
     383                ATLASSERT((iCol >= 0) && iCol < m_arrColSortType.GetSize()); 
     384                return m_arrColSortType[iCol]; 
     385        } 
     386 
     387        bool IsSortDescending() const 
     388        { 
     389                return m_bSortDescending; 
     390        } 
     391 
     392private: 
    347393        bool m_bSortDescending; 
    348394        bool m_bCommCtrl6; 
     
    354400        ATL::CSimpleArray<WORD> m_arrColSortType; 
    355401        bool m_bUseWaitCursor; 
     402        */ 
    356403}; 
    357404 
  • trunk/src/halTorrent.cpp

    r654 r656  
    66 
    77#include "stdAfx.hpp" 
     8#include <functional> 
    89 
    910#include "global/wtl_app.hpp" 
     
    6162} 
    6263 
    63 bool torrent_details::less(const torrent_details& r, size_t index) 
     64bool torrent_details::less(const torrent_details& r, size_t index) const 
    6465{ 
    6566        switch (index) 
     
    8485        case completed_e: return totalWantedDone_ < r.totalWantedDone_;  
    8586 
    86         case uploaded_e: return totalUploaded_ < r.totalUploaded_; 
    87         case downloaded_e: return totalPayloadUploaded_ < r.totalPayloadUploaded_; 
     87        case uploaded_e: return totalPayloadUploaded_ < r.totalPayloadUploaded_; 
     88        case downloaded_e: return totalPayloadDownloaded_ < r.totalPayloadDownloaded_; 
    8889 
    8990        case peers_e: return peers_ < r.peers_; 
     
    254255 
    255256template<typename torrent_Tptr> 
    256 bool torrent_details_less(torrent_Tptr l, torrent_Tptr r, size_t index = 0) 
    257 { 
    258         return l->less(*r, index); 
    259 } 
    260  
    261 void torrent_details_manager::sort(size_t column_index) const 
     257bool torrent_details_compare(torrent_Tptr l, torrent_Tptr r, size_t index = 0, bool cmp_less = true) 
     258{ 
     259        if (cmp_less) 
     260                return l->less(*r, index); 
     261        else 
     262                return r->less(*l, index); 
     263} 
     264 
     265void torrent_details_manager::sort(size_t column_index, bool cmp_less) const 
    262266{ 
    263267        std::stable_sort(torrents_.begin(), torrents_.end(),  
    264                 bind(&torrent_details_less<torrent_details_ptr>, _1, _2, column_index)); 
     268                bind(&torrent_details_compare<torrent_details_ptr>, _1, _2, column_index, cmp_less)); 
    265269} 
    266270 
  • trunk/src/halTorrent.hpp

    r654 r656  
    519519        bool managed() const { return managed_; } 
    520520 
    521         bool less(const torrent_details& r, size_t index = 0); 
     521        bool less(const torrent_details& r, size_t index = 0) const; 
    522522        std::wstring to_wstring(size_t index = 0); 
    523523         
     
    575575{ 
    576576public:  
    577         void sort(size_t index) const; 
     577        void sort(size_t index, bool cmp_less = true) const; 
    578578         
    579579        const torrent_details_vec torrents() const  
Note: See TracChangeset for help on using the changeset viewer.