Changeset 716


Ignore:
Timestamp:
02/05/09 18:00:52 (11 years ago)
Author:
Eoin
Message:

Sorting on main listview working... again... again!

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/sln/Halite/Halite.vcproj

    r714 r716  
    4747                                Optimization="0" 
    4848                                AdditionalIncludeDirectories=""$(SolutionDir)src";"$(SolutionDir)src\WTLx";"$(SolutionDir)lib\libtorrent\include";"$(SolutionDir)lib\libtorrent\zlib";"$(SolutionDir)lib\Asio\include";"$(SolutionDir)lib\OpenSSL\inc";"$(SolutionDir)lib\STLSoft\include"" 
    49                                 PreprocessorDefinitions="WIN32_LEAN_AND_MEAN;__USE_W32_SOCKETS;WIN32;_WIN32;_WINDOWS;_DEBUG;TORRENT_USE_BOOST_DATE_TIME;TORRENT_USE_OPENSSL;TORRENT_LOGGING;TORRENT_VERBOSE_LOGGING;TORRENT_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0" 
     49                                PreprocessorDefinitions="WIN32_LEAN_AND_MEAN;__USE_W32_SOCKETS;WIN32;_WIN32;_WINDOWS;_DEBUG;TORRENT_USE_BOOST_DATE_TIME;TORRENT_USE_OPENSSL;TORRENT_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;_SECURE_SCL=0;_HAS_ITERATOR_DEBUGGING=0" 
    5050                                MinimalRebuild="true" 
    5151                                ExceptionHandling="2" 
  • trunk/src/HaliteListView.cpp

    r715 r716  
    8686} 
    8787 
    88 bool HaliteListViewCtrl::less( std::wstring l,  std::wstring r, size_t index) 
    89 { 
    90         return l < r; 
     88bool HaliteListViewCtrl::sort_list_comparison(std::wstring l, std::wstring r, size_t index, bool ascending) 
     89{ 
     90        return hal::hal_details_ptr_compare( 
     91                hal::bittorrent().torrentDetails().get(l), hal::bittorrent().torrentDetails().get(r), index, ascending); 
    9192} 
    9293 
     
    107108                         
    108109                        if (index > WTL::LVCOLSORT_LAST) 
    109                                 tD.sort(index - (WTL::LVCOLSORT_LAST+1+hal::torrent_details::name_e), IsSecondarySortDescending()); 
     110                                sort(index - (WTL::LVCOLSORT_LAST+1+hal::torrent_details::name_e), IsSecondarySortDescending()); 
    110111                } 
    111112 
     
    113114                 
    114115                if (index > WTL::LVCOLSORT_LAST) 
    115                         tD.sort(index - (WTL::LVCOLSORT_LAST+1+hal::torrent_details::name_e), IsSortDescending()); 
    116         } 
    117  
    118         if (IsGroupViewEnabled()) 
    119                 sort(hal::torrent_details::managed_e); 
     116                        sort(index - (WTL::LVCOLSORT_LAST+1+hal::torrent_details::name_e), IsSortDescending()); 
     117        } 
     118 
     119//      if (IsGroupViewEnabled()) 
     120//              sort(hal::torrent_details::managed_e, IsSortDescending()); 
    120121 
    121122        bool sort_once = IsSortOnce(); 
  • trunk/src/HaliteListView.hpp

    r715 r716  
    122122    } 
    123123 
    124         bool less( std::wstring l,  std::wstring r, size_t index); 
     124        bool sort_list_comparison(std::wstring l,  std::wstring r, size_t index, bool ascending); 
    125125 
    126126private: 
  • trunk/src/HaliteSortListViewCtrl.hpp

    r715 r716  
    165165 
    166166        HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL, 
    167                         DWORD dwStyle = 0, DWORD dwExStyle = 0, 
    168                         ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL) 
     167                DWORD dwStyle = 0, DWORD dwExStyle = 0, 
     168                ATL::_U_MENUorID MenuOrID = 0U, LPVOID lpCreateParam = NULL) 
    169169        { 
    170170                HWND hwnd = parentClass::Create(hWndParent,  
     
    380380 
    381381        int AddColumn(LPCTSTR strItem, int nItem, int nSubItem = -1, 
    382                         int nMask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM, 
    383                         int nFmt = LVCFMT_LEFT, bool visible=true, int width=-1) 
     382                int nMask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM, 
     383                int nFmt = LVCFMT_LEFT, bool visible=true, int width=-1) 
    384384        { 
    385385                int i = parentClass::AddColumn(strItem, nItem, nSubItem, nMask, nFmt); 
     
    450450        friend class boost::serialization::access; 
    451451        template<class Archive> 
    452     void save(Archive & ar, const unsigned int version) const 
    453     { 
     452        void save(Archive & ar, const unsigned int version) const 
     453        { 
    454454                for (size_t i=0; i<list_widths_.size(); ++i) 
    455455                { 
     
    474474                ar & make_nvp("secondary_descending", listClass::bSecondaryDescending); 
    475475                ar & make_nvp("secondary_sort_column", listClass::iSecondarySort);               
    476     } 
    477  
    478     template<class Archive> 
    479     void load(Archive & ar, const unsigned int version) 
    480     { 
     476        } 
     477 
     478        template<class Archive> 
     479        void load(Archive & ar, const unsigned int version) 
     480        { 
    481481                using boost::serialization::make_nvp; 
    482482 
     
    510510                SetColumnOrderState(); 
    511511                SetSortState(); 
    512     } 
     512        } 
    513513 
    514514        BOOST_SERIALIZATION_SPLIT_MEMBER() 
     
    613613 
    614614        template <typename T> 
    615         bool imp_less(const implicit_reference_wrapper<T>& l, const implicit_reference_wrapper<T>& r, size_t index)  
     615        bool implicit_comparison(const implicit_reference_wrapper<T>& l, const implicit_reference_wrapper<T>& r, size_t index, bool ascending)  
    616616        { 
    617617                TBase* pT = static_cast<TBase*>(this); 
    618618 
    619                 return pT->less(static_cast<T>(l).second, static_cast<T>(r).second, index); 
    620         //      return static_cast<T>(l) < static_cast<T>(r); 
     619                return pT->less(static_cast<T>(l).second, static_cast<T>(r).second, index, ascending); 
    621620        } 
    622621 
     
    634633        > pair_container; 
    635634 
    636         typedef typename boost::multi_index::nth_index<pair_container, 0>::type ordered_text; 
     635        typedef typename pair_container::index_iterator<by_key>::type key_iterator; 
    637636 
    638637        int InsertKeyItem(DataType key, LVITEM* pItem) 
    639638        { 
    640                 list_pair_t lp = std::make_pair(false, key); 
    641  
    642                 pair_container::index_iterator<by_key>::type i = pair_container_.get<by_key>().find(key); 
     639                key_iterator i = pair_container_.get<by_key>().find(key); 
    643640                pair_container::iterator i_pos = pair_container_.project<0>(i); 
    644641 
     642                int list_item_index = -1; 
     643 
    645644                if (i != pair_container_.get<by_key>().end()) 
    646645                { 
    647                         pItem->iItem = std::distance(pair_container_.begin(), i_pos); 
     646                        list_item_index = std::distance(pair_container_.begin(), i_pos); 
     647 
     648                        pItem->iItem = list_item_index; 
     649 
     650                        if ((*i).first) 
     651                        { 
     652                                pItem->stateMask |= LVIS_SELECTED; 
     653                                pItem->state |= LVIS_SELECTED; 
     654                        } 
     655 
    648656                        SetItem(pItem); 
    649657                } 
    650658                else 
    651659                { 
    652                         pItem->iItem = GetItemCount(); 
    653  
     660                        list_item_index = pair_container_.size(); 
     661 
     662                        bool selected = (pItem->stateMask & LVIS_SELECTED) && (pItem->state & LVIS_SELECTED); 
     663                        list_pair_t lp = std::make_pair(selected, key); 
     664 
     665                        pair_container_.push_back(lp); 
     666 
     667                        pItem->iItem = list_item_index; 
    654668                        int list_pos = InsertItem(pItem); 
    655                         pair_container_.push_back(lp); 
    656  
    657                 //      assert(list_pos == i_pos); 
    658669                } 
    659670 
    660671                ATLASSERT(::IsWindow(m_hWnd)); 
    661                 return 8; 
    662         } 
    663  
    664         void insert_key(DataType key) 
    665         { 
    666                 pair_container_.insert(std::make_pair(false, key)); 
    667         } 
    668  
    669         bool data_type_less(list_pair_t r, list_pair_t l, size_t index) 
     672                return list_item_index; 
     673        } 
     674 
     675        bool data_type_comparison(list_pair_t r, list_pair_t l, size_t index, bool ascending) 
    670676        { 
    671677                TBase* pT = static_cast<TBase*>(this); 
    672678 
    673                 return pT->less((l).second, (r).second, index); 
    674         } 
    675  
    676         void sort(size_t index) 
    677         { 
     679                return pT->sort_list_comparison((l).second, (r).second, index, ascending); 
     680        } 
     681 
     682        void selection_from_listview() 
     683        { 
     684                foreach(const list_value_type val, std::make_pair(const_begin(), const_end())) 
     685                { 
     686                        list_pair_t pi = pair_container_[val.index()]; 
     687 
     688                        if (val.state() & LVIS_SELECTED) 
     689                                pi.first = true; 
     690                        else 
     691                                pi.first = false; 
     692                } 
     693        } 
     694 
     695        void sort(size_t index, bool ascending) 
     696        {        
     697                selection_from_listview(); 
    678698                std::vector<implicit_reference_wrapper<const list_pair_t> > sv; 
    679699 
    680700                std::copy(pair_container_.begin(), pair_container_.end(), std::back_inserter(sv)); 
    681701 
    682 //              ordered_text& ot=boost::multi_index::get<0>(pair_container_); 
    683  
    684                 std::stable_sort(sv.begin(),  
    685                         sv.end(),  
    686                         bind(&thisClass::data_type_less, this, _1, _2, index)); 
     702                std::stable_sort(sv.begin(), sv.end(),  
     703                        bind(&thisClass::data_type_comparison, this, _1, _2, index, ascending)); 
    687704 
    688705                pair_container_.rearrange(sv.begin()); 
  • trunk/src/HaliteWindow.hpp

    r712 r716  
    77#pragma once 
    88 
    9 #define ID_WINDOW_BEGIN                         13000 
     9#define ID_WINDOW_BEGIN                                 13000 
    1010#define HAL_WINDOW_CLOSECONFRIM         ID_WINDOW_BEGIN + 1 
    1111#define HAL_WINDOW_SOCKETS_FAILED       ID_WINDOW_BEGIN + 2 
    1212#define HAL_WINDOW_AUTOSHUTDOWN         ID_WINDOW_BEGIN + 3 
    13 #define HAL_WINDOW_EXIT                         ID_WINDOW_BEGIN + 4 
     13#define HAL_WINDOW_EXIT                                 ID_WINDOW_BEGIN + 4 
    1414 
    1515#ifndef RC_INVOKED 
     
    107107 
    108108                UPDATE_ELEMENT(ID_VIEW_STATUS_BAR, UPDUI_MENUPOPUP) 
    109         UPDATE_ELEMENT(0, UPDUI_STATUSBAR) 
     109                UPDATE_ELEMENT(0, UPDUI_STATUSBAR) 
    110110                UPDATE_ELEMENT(1, UPDUI_STATUSBAR) 
    111         UPDATE_ELEMENT(2, UPDUI_STATUSBAR) 
    112         UPDATE_ELEMENT(3, UPDUI_STATUSBAR) 
     111                UPDATE_ELEMENT(2, UPDUI_STATUSBAR) 
     112                UPDATE_ELEMENT(3, UPDUI_STATUSBAR) 
    113113        END_UPDATE_UI_MAP() 
    114114 
     
    156156        LRESULT HaliteWindow::OnNotify(int wParam, LPNMHDR lParam); 
    157157        LRESULT OnCreate(LPCREATESTRUCT lpcs); 
    158     void OnTimer(UINT uTimerID); 
     158        void OnTimer(UINT uTimerID); 
    159159        void OnClose(); 
    160160        void OnDestroy(); 
     
    185185        void setCorrectDialog(); 
    186186 
    187     friend class boost::serialization::access; 
    188     template<class Archive> 
    189     void serialize(Archive& ar, const unsigned int version) 
     187        friend class boost::serialization::access; 
     188        template<class Archive> 
     189        void serialize(Archive& ar, const unsigned int version) 
    190190        {                
    191191                using boost::serialization::make_nvp; 
     
    228228        WTL::CCommandBarCtrl m_CmdBar; 
    229229        WTL::CHorSplitterWindow m_Split; 
    230     WTL::CMultiPaneStatusBarCtrl m_StatusBar; 
     230        WTL::CMultiPaneStatusBarCtrl m_StatusBar; 
    231231        CTrayNotifyIcon trayIcon_; 
    232232 
Note: See TracChangeset for help on using the changeset viewer.